aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS2
-rw-r--r--COPYRIGHT118
-rw-r--r--Makefile10
-rw-r--r--Makefile.common4
-rw-r--r--NEWS27
-rw-r--r--README223
-rw-r--r--backends/events/default/default-events.cpp2
-rw-r--r--backends/platform/PalmOS/Src/base_event.cpp225
-rw-r--r--backends/platform/PalmOS/Src/be_os5.h8
-rwxr-xr-xbackends/platform/PalmOS/Src/launcher/forms/formSelect.cpp3
-rw-r--r--backends/platform/PalmOS/Src/launcher/games.h4
-rw-r--r--backends/platform/PalmOS/Src/os5_gfx.cpp25
-rw-r--r--backends/platform/PalmOS/Src/os5_renderer.cpp40
-rw-r--r--backends/platform/PalmOS/Src/zodiac_event.cpp4
-rw-r--r--backends/platform/dc/dc.h6
-rw-r--r--backends/platform/dc/display.cpp27
-rw-r--r--backends/platform/dc/input.cpp16
-rw-r--r--backends/platform/dc/selector.cpp2
-rw-r--r--backends/platform/dc/softkbd.cpp4
-rw-r--r--backends/platform/ds/arm9/makefile4
-rw-r--r--backends/platform/ds/arm9/source/dsmain.cpp42
-rw-r--r--backends/platform/ds/arm9/source/dsoptions.cpp4
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.cpp33
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.h10
-rw-r--r--backends/platform/ds/arm9/source/touchkeyboard.cpp46
-rw-r--r--backends/platform/ds/arm9/source/touchkeyboard.h69
-rw-r--r--backends/platform/gp2x/build/bundle.sh1
-rw-r--r--backends/platform/gp2x/events.cpp32
-rw-r--r--backends/platform/gp2x/gp2x-common.h7
-rw-r--r--backends/platform/gp2x/graphics.cpp34
-rw-r--r--backends/platform/gp32/gp32_osys.cpp28
-rw-r--r--backends/platform/gp32/gp32_osys.h5
-rw-r--r--backends/platform/maemo/hildon.cpp3
-rw-r--r--backends/platform/maemo/main.cpp3
-rw-r--r--backends/platform/morphos/morphos.cpp2
-rw-r--r--backends/platform/null/null.cpp10
-rw-r--r--backends/platform/ps2/Gs2dScreen.cpp24
-rw-r--r--backends/platform/ps2/Gs2dScreen.h6
-rw-r--r--backends/platform/ps2/ps2input.cpp239
-rw-r--r--backends/platform/ps2/sdlkeys.h264
-rw-r--r--backends/platform/ps2/systemps2.cpp11
-rw-r--r--backends/platform/ps2/systemps2.h3
-rw-r--r--backends/platform/psp/osys_psp.cpp29
-rw-r--r--backends/platform/psp/osys_psp.h5
-rw-r--r--backends/platform/psp/osys_psp_gu.cpp28
-rw-r--r--backends/platform/sdl/events.cpp36
-rw-r--r--backends/platform/sdl/graphics.cpp52
-rw-r--r--backends/platform/sdl/sdl-common.h12
-rw-r--r--backends/platform/sdl/sdl.cpp1
-rw-r--r--backends/platform/symbian/README38
-rw-r--r--backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg14
-rw-r--r--backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg15
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in4
-rw-r--r--backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg14
-rw-r--r--backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg13
-rw-r--r--backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg13
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in1
-rw-r--r--backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg13
-rw-r--r--backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg6
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in4
-rw-r--r--backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg13
-rw-r--r--backends/platform/symbian/mmp/scummvm_agi.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_agos.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_cine.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_cruise.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_gob.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_kyra.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_lure.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_parallaction.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_queen.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_saga.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_scumm.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_sky.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword1.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword2.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_touche.mmp.in1
-rw-r--r--backends/platform/symbian/src/SymbianActions.cpp46
-rw-r--r--backends/platform/symbian/src/SymbianActions.h4
-rw-r--r--backends/platform/symbian/src/SymbianOS.cpp29
-rw-r--r--backends/platform/wince/CEActionsPocket.cpp54
-rw-r--r--backends/platform/wince/CEActionsPocket.h2
-rw-r--r--backends/platform/wince/CEActionsSmartphone.cpp48
-rw-r--r--backends/platform/wince/CEActionsSmartphone.h2
-rw-r--r--backends/platform/wince/CEDevice.cpp9
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.cpp31
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.h3
-rw-r--r--backends/platform/wince/CEkeys/EventsBuffer.cpp7
-rw-r--r--backends/platform/wince/Makefile100
-rw-r--r--backends/platform/wince/README-WinCE506
-rw-r--r--backends/platform/wince/wince-sdl.cpp78
-rw-r--r--backends/platform/wince/wince-sdl.h3
-rw-r--r--backends/saves/compressed/compressed-saves.cpp4
-rw-r--r--base/commandLine.cpp16
-rw-r--r--base/game.cpp12
-rw-r--r--base/game.h24
-rw-r--r--base/internal_version.h2
-rw-r--r--base/main.cpp33
-rw-r--r--common/advancedDetector.cpp125
-rw-r--r--common/advancedDetector.h35
-rw-r--r--common/events.h45
-rw-r--r--common/scummsys.h10
-rw-r--r--common/str.cpp21
-rw-r--r--common/str.h5
-rw-r--r--common/system.cpp5
-rw-r--r--common/system.h50
-rwxr-xr-xconfigure8
-rw-r--r--dists/macosx/DS_Storebin12292 -> 12292 bytes
-rw-r--r--dists/macosx/Info.plist8
-rw-r--r--dists/msvc71/agi.vcproj6
-rw-r--r--dists/msvc71/scummvm.vcproj12
-rw-r--r--dists/msvc8/agi.vcproj8
-rw-r--r--dists/msvc8/lure.vcproj32
-rw-r--r--dists/msvc8/scummvm.vcproj10
-rw-r--r--dists/redhat/scummvm-tools.spec9
-rw-r--r--dists/redhat/scummvm.spec28
-rw-r--r--dists/redhat/scummvm.spec.in26
-rw-r--r--dists/scummvm.rc8
-rwxr-xr-xdists/slackware/scummvm.SlackBuild5
-rw-r--r--engines/agi/agi.cpp100
-rw-r--r--engines/agi/agi.h21
-rw-r--r--engines/agi/agi_v3.cpp2
-rw-r--r--engines/agi/checks.cpp2
-rw-r--r--engines/agi/detection.cpp217
-rw-r--r--engines/agi/graphics.cpp297
-rw-r--r--engines/agi/module.mk1
-rw-r--r--engines/agi/op_cmd.cpp19
-rw-r--r--engines/agi/picture.cpp24
-rw-r--r--engines/agi/picture.h2
-rw-r--r--engines/agi/predictive.cpp565
-rw-r--r--engines/agi/sprite.cpp30
-rw-r--r--engines/agi/sprite.h2
-rw-r--r--engines/agi/view.cpp16
-rw-r--r--engines/agi/view.h1
-rw-r--r--engines/agos/agos.cpp145
-rw-r--r--engines/agos/agos.h190
-rw-r--r--engines/agos/animation.cpp77
-rw-r--r--engines/agos/animation.h5
-rw-r--r--engines/agos/charset.cpp273
-rw-r--r--engines/agos/cursor.cpp74
-rw-r--r--engines/agos/debugger.cpp24
-rw-r--r--engines/agos/detection.cpp9
-rw-r--r--engines/agos/detection_tables.h117
-rw-r--r--engines/agos/draw.cpp298
-rw-r--r--engines/agos/event.cpp87
-rw-r--r--engines/agos/gfx.cpp86
-rw-r--r--engines/agos/icons.cpp249
-rw-r--r--engines/agos/input.cpp44
-rw-r--r--engines/agos/intern.h8
-rw-r--r--engines/agos/items.cpp6
-rw-r--r--engines/agos/menus.cpp13
-rw-r--r--engines/agos/oracle.cpp13
-rw-r--r--engines/agos/res.cpp223
-rw-r--r--engines/agos/res_snd.cpp269
-rw-r--r--engines/agos/rooms.cpp2
-rw-r--r--engines/agos/saveload.cpp253
-rw-r--r--engines/agos/script.cpp60
-rw-r--r--engines/agos/script_e1.cpp173
-rw-r--r--engines/agos/script_e2.cpp101
-rw-r--r--engines/agos/script_ff.cpp22
-rw-r--r--engines/agos/script_pp.cpp23
-rw-r--r--engines/agos/script_s1.cpp18
-rw-r--r--engines/agos/script_s2.cpp6
-rw-r--r--engines/agos/script_ww.cpp2
-rw-r--r--engines/agos/sound.cpp72
-rw-r--r--engines/agos/string.cpp14
-rw-r--r--engines/agos/subroutine.cpp10
-rw-r--r--engines/agos/verb.cpp45
-rw-r--r--engines/agos/vga.cpp79
-rw-r--r--engines/agos/vga_e2.cpp89
-rw-r--r--engines/agos/vga_ff.cpp2
-rw-r--r--engines/agos/vga_s2.cpp10
-rw-r--r--engines/agos/vga_ww.cpp74
-rw-r--r--engines/agos/window.cpp128
-rw-r--r--engines/agos/zones.cpp2
-rw-r--r--engines/cine/anim.cpp12
-rw-r--r--engines/cine/bg.cpp6
-rw-r--r--engines/cine/detection.cpp4
-rw-r--r--engines/cine/main_loop.cpp24
-rw-r--r--engines/cine/object.cpp6
-rw-r--r--engines/cine/part.cpp3
-rw-r--r--engines/cine/various.cpp25
-rw-r--r--engines/cruise/detection.cpp3
-rw-r--r--engines/gob/detection.cpp4
-rw-r--r--engines/gob/mult_v2.cpp10
-rw-r--r--engines/gob/scenery.cpp8
-rw-r--r--engines/gob/util.cpp72
-rw-r--r--engines/gob/util.h10
-rw-r--r--engines/kyra/detection.cpp6
-rw-r--r--engines/kyra/gui.cpp18
-rw-r--r--engines/kyra/kyra.cpp4
-rw-r--r--engines/kyra/kyra.h3
-rw-r--r--engines/kyra/kyra_v1.h4
-rw-r--r--engines/kyra/kyra_v2.cpp2
-rw-r--r--engines/kyra/kyra_v2.h6
-rw-r--r--engines/kyra/screen.cpp27
-rw-r--r--engines/kyra/screen.h2
-rw-r--r--engines/kyra/sequences_v2.cpp157
-rw-r--r--engines/kyra/text.cpp6
-rw-r--r--engines/lure/animseq.cpp2
-rw-r--r--engines/lure/debug-input.cpp136
-rw-r--r--engines/lure/debug-input.h45
-rw-r--r--engines/lure/debug-methods.cpp135
-rw-r--r--engines/lure/debug-methods.h42
-rw-r--r--engines/lure/debugger.cpp156
-rw-r--r--engines/lure/debugger.h1
-rw-r--r--engines/lure/detection.cpp18
-rw-r--r--engines/lure/disassembly/LURE.ASM39757
-rw-r--r--engines/lure/disassembly/Lure_notes.txt1473
-rw-r--r--engines/lure/events.cpp37
-rw-r--r--engines/lure/events.h14
-rw-r--r--engines/lure/game.cpp93
-rw-r--r--engines/lure/game.h3
-rw-r--r--engines/lure/hotspots.cpp193
-rw-r--r--engines/lure/hotspots.h22
-rw-r--r--engines/lure/intro.cpp39
-rw-r--r--engines/lure/intro.h1
-rw-r--r--engines/lure/lure.cpp6
-rw-r--r--engines/lure/lure.h2
-rw-r--r--engines/lure/luredefs.h45
-rw-r--r--engines/lure/menu.cpp25
-rw-r--r--engines/lure/menu.h2
-rw-r--r--engines/lure/module.mk2
-rw-r--r--engines/lure/res.cpp2
-rw-r--r--engines/lure/res_struct.cpp14
-rw-r--r--engines/lure/res_struct.h6
-rw-r--r--engines/lure/room.cpp36
-rw-r--r--engines/lure/room.h2
-rw-r--r--engines/lure/scripts.cpp211
-rw-r--r--engines/lure/scripts.h18
-rw-r--r--engines/lure/surface.cpp8
-rw-r--r--engines/parallaction/archive.cpp28
-rw-r--r--engines/parallaction/callables.cpp20
-rw-r--r--engines/parallaction/detection.cpp57
-rw-r--r--engines/parallaction/dialogue.cpp6
-rw-r--r--engines/parallaction/disk.cpp206
-rw-r--r--engines/parallaction/graphics.cpp2
-rw-r--r--engines/parallaction/intro.cpp4
-rw-r--r--engines/parallaction/inventory.cpp4
-rw-r--r--engines/parallaction/location.cpp2
-rw-r--r--engines/parallaction/menu.cpp78
-rw-r--r--engines/parallaction/parallaction.cpp57
-rw-r--r--engines/parallaction/parallaction.h13
-rw-r--r--engines/queen/input.cpp32
-rw-r--r--engines/queen/input.h29
-rw-r--r--engines/queen/journal.cpp6
-rw-r--r--engines/saga/actor.cpp295
-rw-r--r--engines/saga/actor.h24
-rw-r--r--engines/saga/animation.cpp201
-rw-r--r--engines/saga/animation.h12
-rw-r--r--engines/saga/console.cpp72
-rw-r--r--engines/saga/console.h10
-rw-r--r--engines/saga/detection.cpp4
-rw-r--r--engines/saga/detection_tables.h10
-rw-r--r--engines/saga/displayinfo.h87
-rw-r--r--engines/saga/events.cpp28
-rw-r--r--engines/saga/events.h9
-rw-r--r--engines/saga/gfx.h3
-rw-r--r--engines/saga/ihnm_introproc.cpp5
-rw-r--r--engines/saga/input.cpp52
-rw-r--r--engines/saga/interface.cpp387
-rw-r--r--engines/saga/interface.h7
-rw-r--r--engines/saga/itedata.h14
-rw-r--r--engines/saga/objectmap.cpp10
-rw-r--r--engines/saga/objectmap.h2
-rw-r--r--engines/saga/puzzle.cpp16
-rw-r--r--engines/saga/saga.cpp25
-rw-r--r--engines/saga/saga.h27
-rw-r--r--engines/saga/sagaresnames.h1
-rw-r--r--engines/saga/saveload.cpp38
-rw-r--r--engines/saga/scene.cpp23
-rw-r--r--engines/saga/scene.h16
-rw-r--r--engines/saga/script.cpp130
-rw-r--r--engines/saga/script.h10
-rw-r--r--engines/saga/sfuncs.cpp150
-rw-r--r--engines/saga/sndres.cpp3
-rw-r--r--engines/saga/sthread.cpp5
-rw-r--r--engines/scumm/detection.cpp48
-rw-r--r--engines/scumm/detection_tables.h11
-rw-r--r--engines/scumm/dialogs.cpp66
-rw-r--r--engines/scumm/dialogs.h25
-rw-r--r--engines/scumm/gfx.cpp11
-rw-r--r--engines/scumm/he/animation_he.cpp8
-rw-r--r--engines/scumm/he/script_v60he.cpp16
-rw-r--r--engines/scumm/he/script_v70he.cpp3
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp128
-rw-r--r--engines/scumm/imuse_digi/dimuse.h90
-rw-r--r--engines/scumm/imuse_digi/dimuse_bndmgr.cpp94
-rw-r--r--engines/scumm/imuse_digi/dimuse_bndmgr.h21
-rw-r--r--engines/scumm/imuse_digi/dimuse_codecs.cpp150
-rw-r--r--engines/scumm/imuse_digi/dimuse_music.cpp18
-rw-r--r--engines/scumm/imuse_digi/dimuse_script.cpp24
-rw-r--r--engines/scumm/imuse_digi/dimuse_sndmgr.cpp2
-rw-r--r--engines/scumm/imuse_digi/dimuse_sndmgr.h2
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.cpp56
-rw-r--r--engines/scumm/input.cpp405
-rw-r--r--engines/scumm/insane/insane.cpp4
-rw-r--r--engines/scumm/insane/insane_enemy.cpp16
-rw-r--r--engines/scumm/intern.h10
-rw-r--r--engines/scumm/script_v6.cpp33
-rw-r--r--engines/scumm/scumm-md5.h5
-rw-r--r--engines/scumm/scumm.cpp1
-rw-r--r--engines/scumm/scumm.h5
-rw-r--r--engines/scumm/sound.cpp2
-rw-r--r--engines/sky/control.cpp32
-rw-r--r--engines/sky/control.h5
-rw-r--r--engines/sky/intro.cpp2
-rw-r--r--engines/sky/mouse.cpp2
-rw-r--r--engines/sky/sky.cpp45
-rw-r--r--engines/sky/sky.h3
-rw-r--r--engines/sword1/animation.cpp4
-rw-r--r--engines/sword1/control.cpp70
-rw-r--r--engines/sword1/control.h7
-rw-r--r--engines/sword1/music.cpp15
-rw-r--r--engines/sword1/sword1.cpp14
-rw-r--r--engines/sword1/sword1.h3
-rw-r--r--engines/sword2/animation.cpp4
-rw-r--r--engines/sword2/controls.cpp17
-rw-r--r--engines/sword2/screen.cpp3
-rw-r--r--engines/sword2/sword2.cpp18
-rw-r--r--engines/sword2/sword2.h5
-rw-r--r--engines/touche/detection.cpp4
-rw-r--r--engines/touche/touche.cpp12
-rw-r--r--engines/touche/ui.cpp2
-rw-r--r--graphics/dxa_player.cpp43
-rw-r--r--graphics/dxa_player.h4
-rw-r--r--graphics/scaler/thumbnail.cpp22
-rw-r--r--gui/Key.cpp34
-rw-r--r--gui/Key.h17
-rw-r--r--gui/KeysDialog.cpp11
-rw-r--r--gui/ListWidget.cpp19
-rw-r--r--gui/PopUpWidget.cpp15
-rw-r--r--gui/TabWidget.cpp32
-rw-r--r--gui/TabWidget.h29
-rw-r--r--gui/about.cpp28
-rw-r--r--gui/console.cpp38
-rw-r--r--gui/credits.h4
-rw-r--r--gui/dialog.cpp3
-rw-r--r--gui/editable.cpp19
-rw-r--r--gui/launcher.cpp25
-rw-r--r--gui/massadd.cpp5
-rw-r--r--gui/message.cpp5
-rw-r--r--gui/newgui.cpp3
-rw-r--r--gui/options.cpp14
-rw-r--r--gui/theme-config.cpp39
-rw-r--r--gui/theme.h2
-rw-r--r--gui/themes/classic080.ini154
-rw-r--r--gui/themes/modern.ini67
-rw-r--r--sound/mixer.cpp9
-rw-r--r--sound/module.mk10
-rw-r--r--sound/rate.cpp222
-rw-r--r--sound/rate.h18
-rw-r--r--tools/create_lure/create_lure_dat.cpp84
-rw-r--r--tools/create_lure/create_lure_dat.h17
-rw-r--r--tools/create_lure/process_actions.cpp16
-rwxr-xr-xtools/credits.pl18
-rw-r--r--tools/scumm-md5.txt3
-rwxr-xr-xtools/update-version.pl2
358 files changed, 9018 insertions, 46842 deletions
diff --git a/AUTHORS b/AUTHORS
index 7dce534dc6..9c33b881bf 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -238,6 +238,7 @@ Other contributions
and right click input method
Mikesch Nepomuk - MI1 VGA floppy patches
Nicolas Noble - Config file and ALSA support
+ Tim Phillips - Initial MI1 CD music support
Quietust - Sound support for Amiga SCUMM V2/V3 games, MM
NES support
Andreas Roever - Broken Sword 1/2 MPEG2 cutscene support
@@ -245,7 +246,6 @@ Other contributions
Daniel Schepler - Final MI1 CD music support, initial Ogg Vorbis
support
Andre Souza - SDL-based OpenGL renderer
- Tim Phillips - Initial MI1 CD music support
Robin Watts - ARM assembly routines for the Windows CE port
And to all the contributors, users, and beta testers we've missed. Thanks!
diff --git a/COPYRIGHT b/COPYRIGHT
index f187055994..11eb153752 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -13,6 +13,7 @@ Jurgen Braam
Ralph Brorsen
James Brown
Stuart Caie
+Filippos Carapetis
Jamieson Christian
Marcus Comstedt
Paolo Costabel
@@ -69,3 +70,120 @@ Jezar
n0p
peres
Quietust
+
+
+Patches contributed by:
+
+Laura Abbott "sageofminerva"
+Vikram Aggarwal "youngelf"
+Dieter Baron "dillo"
+Alban Bedel "albeu"
+Bodo Bellut "bellut"
+Andreas Bierfert "awjb"
+Elio Blanca "eblanca76"
+David Breakey "dbreakey"
+Robert Buchholz "prendi"
+Filippos Carapetis "thebluegr"
+Mathieu Carot "yokna"
+Stefano Ceccherini "jackburton"
+Travis S Coady "theealien"
+Josh Coalson "jcoalson"
+Thomas Combeleran "hibernatus"
+Carlos Corbacho "cathectic"
+Roberto Costa "fiix76"
+Michael Drueing "doc_wagon"
+Matthew Duggan "stauff1"
+John Eckerdal "johneck"
+Florent "flobo"
+Florob "florob"
+Mike Frysinger "vapier"
+Chris Gelatt "kreeblah"
+Jens Georg "phako"
+Nicolas George "cigaes"
+Jonathan Gevaryahu "lord_nightmare"
+Tobias Gruetzmacher "tobig"
+Damien Guard "damienguard"
+Tobias Gunkel "tobigun"
+Matti Hamalainen "ccrtnsp"
+Matt Hargett "matt_hargett"
+Stefan Haubenthal "polluks"
+Alexander Holler "holler"
+Falk Hueffner "mellum"
+Casey Hutchinson "nnooiissee"
+Gregor Jasny "gjasny"
+Jellby "jellby"
+Joerg "macdrega"
+Matt Johnson "mattjon"
+Nicolas Joly "njoly"
+KeithS "keithscr"
+Sam Kenny "sam_k"
+Koen Kooi "koenkooi"
+Zygmunt Krynicki "zygoon"
+Janne Kujanpaa "jukuja"
+Jay Lanagan "r0ni"
+Norbert Lange "nolange"
+Manuel Lauss "mlau2"
+Duncan Lock "dflock"
+Mark Lodato "itsr0y"
+Fridvin Logi "phillip_j_fry"
+Georg Lukas "ge0rg"
+Markus "meist3r"
+Connor McLeod "mcleod2032"
+Mickey McMurray "metafox"
+Vladimir Menshakov "megath"
+Frank Meyering "frank_m24"
+Gael Le Migno "kilobug"
+Alyssa Anne Milburn "fuzzie"
+Andy Molloy "maloi"
+Armin Mueller "arm_in"
+Andrea Musuruane "musuruan"
+Peter Naulls "pnaulls"
+Christian Neumair "mannythegnome"
+Nicos "anarxia"
+Juha Niemimaki "capehill"
+Markus Niemisto "niemisto"
+Chris Paras "paras_rasmatazz"
+Aubin Paul "outlyer"
+Thomas Fach Pedersen "madm00se"
+Carsten Pohl "carstenpohl"
+Markus Pyykko "mankeli"
+Richard "trinity78"
+Felix Riemann "kirschsaft"
+Timo Roehling "t1m0"
+Andreas Roever "roever"
+Jonathan Rogers "jonner"
+Marek Roth "logicdeluxe"
+Simon Sawatzki "simsaw"
+Daniel Schepler "dschepler"
+Florian Schmitt "fatpenguin"
+Mark Schreiber "mark7"
+Ben Shadwick "benshadwick"
+Jean-Yves Simon "lethalwp"
+Andrej Sinicyn "andrej4000"
+Andre Souza "luke_br"
+Steve Stavropoulos "isnothere"
+Daniel Steinberger "amorphousshape"
+Sven Strothoff "dataslayer"
+Andrea Suatoni "mrhandler"
+Luigi Toscano "ltosky"
+Xavier Trochu "xtrochu"
+Michael Udaltsov "cccp99"
+Kristof Vansant "lupusbe"
+Jordi Vilalta "jvprat"
+Tim Walters "realmz"
+David Weinehall "weine"
+Eric A. Welsh "eweish42"
+Yudhi Widyatama "yudhi97"
+Robert Wohlrab "moshroum"
+Benjamin W. Zale "junior_aepi"
+the rara avis "theraraavis"
+dewt "mncl"
+dubsdj
+exo "exofreeze"
+dc france "erwan2004"
+j0tt
+glo kidd "glo_kidd"
+ole
+phi1
+spookypeanut "spookypeanut"
+tbcarey
diff --git a/Makefile b/Makefile
index 1c0a65ac88..8bd42a27d7 100644
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,7 @@ install: all
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/pixmaps/"
$(INSTALL) -c -m 644 "$(srcdir)/icons/scummvm.xpm" "$(DESTDIR)$(PREFIX)/share/pixmaps/scummvm.xpm"
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
- $(INSTALL) -c -m 644 "$(srcdir)/AUTHORS" "$(srcdir)/COPYING" "$(srcdir)/NEWS" "$(srcdir)/README" "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
+ $(INSTALL) -c -m 644 "$(srcdir)/AUTHORS" "$(srcdir)/COPYING" "$(srcdir)/COPYRIGHT" "$(srcdir)/NEWS" "$(srcdir)/README" "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
$(INSTALL) -d "$(DESTDIR)$(DATADIR)/scummvm/"
$(INSTALL) -c -m 644 "$(srcdir)/gui/themes/modern.ini" "$(srcdir)/gui/themes/modern.zip" "$(srcdir)/gui/themes/classic080.ini" "$(DESTDIR)$(DATADIR)/scummvm/"
@@ -90,6 +90,10 @@ bundle: scummvm-static
cp $(srcdir)/icons/scummvm.icns $(bundle_name)/Contents/Resources/
cp $(srcdir)/gui/themes/modern.ini $(bundle_name)/Contents/Resources/
cp $(srcdir)/gui/themes/modern.zip $(bundle_name)/Contents/Resources/
+ cp $(srcdir)/dists/pred.dic $(bundle_name)/Contents/Resources/
+ cp $(srcdir)/../../engine-data/trunk/kyra.dat $(bundle_name)/Contents/Resources/KYRA.DAT
+ cp $(srcdir)/../../engine-data/trunk/queen.tbl $(bundle_name)/Contents/Resources/
+ cp $(srcdir)/../../engine-data/trunk/sky.cpt $(bundle_name)/Contents/Resources/
cp scummvm-static $(bundle_name)/Contents/MacOS/scummvm
$(srcdir)/tools/credits.pl --rtf > $(bundle_name)/Contents/Resources/Credits.rtf
strip $(bundle_name)/Contents/MacOS/scummvm
@@ -136,6 +140,7 @@ osxsnap: bundle credits
mkdir ScummVM-snapshot
cp AUTHORS ./ScummVM-snapshot/Authors
cp COPYING ./ScummVM-snapshot/License
+ cp COPYRIGHT ./ScummVM-snapshot/Copyright\ Holders
cp NEWS ./ScummVM-snapshot/News
cp README ./ScummVM-snapshot/ScummVM\ ReadMe
/Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/*
@@ -154,10 +159,12 @@ osxsnap: bundle credits
win32dist: scummvm$(EXEEXT)
mkdir -p $(WIN32PATH)
strip scummvm.exe -o $(WIN32PATH)/scummvm$(EXEEXT)
+ cp dists/pred.dic $(WIN32PATH)
cp gui/themes/modern.ini $(WIN32PATH)
cp gui/themes/modern.zip $(WIN32PATH)
cp AUTHORS $(WIN32PATH)/AUTHORS.txt
cp COPYING $(WIN32PATH)/COPYING.txt
+ cp COPYRIGHT $(WIN32PATH)/COPYRIGHT.txt
cp NEWS $(WIN32PATH)/NEWS.txt
cp README $(WIN32PATH)/README.txt
cp /usr/local/README-SDL.txt $(WIN32PATH)
@@ -173,6 +180,7 @@ aos4dist: scummvm
cp gui/themes/modern.zip $(AOS4PATH)
cp AUTHORS $(AOS4PATH)/AUTHORS.txt
cp COPYING $(AOS4PATH)/COPYING.txt
+ cp COPYRIGHT $(AOS4PATH)/COPYRIGHT.txt
cp NEWS $(AOS4PATH)/NEWS.txt
cp README $(AOS4PATH)/README.txt
cp /sdk/local/documentation/SDL-1.2.9/README-SDL.txt $(AOS4PATH)
diff --git a/Makefile.common b/Makefile.common
index 1633921ea9..38f0b2bf6f 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -3,7 +3,7 @@
# a list of common object files etc.
######################################################################
-# The defaul build target: just build the scummvm executable
+# The default build target: just build the scummvm executable
######################################################################
all: $(EXECUTABLE) plugins
@@ -15,7 +15,7 @@ all: $(EXECUTABLE) plugins
# Files that are to be included in the archive built by "make dist"
DISTFILES := \
Makefile Makefile.common \
- AUTHORS NEWS README COPYING
+ AUTHORS NEWS README COPYING COPYRIGHT
# The dist file name
ZIPFILE := scummvm-`date '+%Y-%m-%d'`.zip
diff --git a/NEWS b/NEWS
index 56e00c2775..f208b21824 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,11 @@
For a more comprehensive changelog for the latest experimental SVN code, see:
http://scummvm.sourceforge.net/daily/ChangeLog
-0.10.0 (????-??-??)
+0.11.0 (????-??-??)
+ Broken Sword 1:
+ - Added support for FLAC encoded music.
+
+0.10.0 (2007-06-20)
New Games:
- Added Cinematique evo 1 engine. Currently only Future Wars is supported.
- Added Touche: The Adventures of the Fifth Musketeer engine.
@@ -16,7 +20,7 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
General:
- Added dialog which allows the user to select the GUI theme on runtime.
- Added 'Mass Add' feature to the Launcher, which allows you to scan for
- all games in all subfolders of a given directory (to use it, press
+ all games in all subdirectories of a given directory (to use it, press
shift then click on "Add Game").
- Improved the way the auto detector generates target names, it now takes
a game's variant, language and platform into account.
@@ -59,11 +63,26 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
LINC space and terminals, particularly in non-English languages.
Nintendo DS Port:
- - TOOO: Mention DLDI support
-
+ - New engines supported: AGI, CINE, and SAGA
+ - Option to show the mouse cursor
+ - Word completion on keyboard for AGI games
+ - Plenty of optimisations
+
+ Symbian Port:
+ - Added support for MP3 to S60v3 and UIQ3 versions.
+ - Switched to SDL 1.2.11 for bug fixes and improvements
+ - Improved performance for S60v3 and UIQ3 using ARM target.
+ - Limited support for pre Symbian OS9 devices due to compiler issues.
+ - Updated key mapping handling.
+
WinCE Port:
- Switched to using a GCC toolchain for building.
- Major update to the SDL lib. Better, faster, more compatible :-)
+ The included fixes are too numerous to mention here.
+ Most of the updates in this version have concentrated on infrastructure.
+ This leads to faster execution, greatly increased compatibility and
+ OS friendliness - especially for keyboard/mouse input and display
+ handling (f.ex. no more popups during gameplay) -.
Windows Port:
- The default location of the config file changed, to support multi-user
diff --git a/README b/README
index 440e5c7c51..20d6f7be33 100644
--- a/README
+++ b/README
@@ -29,7 +29,8 @@ Table of Contents:
* 3.12 Simon the Sorcerer notes
* 3.13 The Feeble Files notes
* 3.14 The Legend of Kyrandia notes
- * 3.15 Known Problems
+ * 3.15 Sierra AGI games Predictive Input Dialog notes
+ * 3.16 Known Problems
4.0) Supported Platforms
5.0) Running ScummVM
* 5.1 Command Line Options
@@ -137,15 +138,26 @@ SCUMM Games by LucasArts:
The Dig [dig]
The Curse of Monkey Island [comi]
-Other Games:
- Beneath a Steel Sky [sky]
- Broken Sword 1: The Shadow of the Templars [sword1]
- Broken Sword 2: The Smoking Mirror [sword2]
- Flight of the Amazon Queen [queen]
- Future Wars [fw]
- Gobliiins [gob1]
- Gobliins 2 [gob2]
- Inherit the Earth: Quest for the Orb [ite]
+AGI Games by Sierra:
+ The Black Cauldron [bc]
+ Gold Rush! [goldrush]
+ King's Quest I [kq1]
+ King's Quest II [kq2]
+ King's Quest III [kq3]
+ King's Quest IV [kq4]
+ Leisure Suit Larry in the Land of the
+ Lounge Lizards [lsl1]
+ Mixed-Up Mother Goose [mixedup]
+ Manhunter 1: New York [mh1]
+ Manhunter 2: San Francisco [mh2]
+ Police Quest I: In Pursuit of the Death
+ Angel [pq1]
+ Space Quest I: The Sarien Encounter [sq1]
+ Space Quest II: Vohaul's Revenge [sq2]
+ Fanmade Games [agi-fanmade]
+
+AGOS Games by Adventuresoft / Horrorsoft:
+ Elvira - Mistress of the Dark [elvira1]
Simon the Sorcerer 1 [simon1]
Simon the Sorcerer 2 [simon2]
Simon the Sorcerer's Puzzle Pack
@@ -157,6 +169,22 @@ Other Games:
Simon the Sorcerer's Puzzle Pack
- Swampy Adventures [swampy]
The Feeble Files [feeble]
+
+GOB Games by Cocktel Vision:
+ Bargon Attack [bargon]
+ Gobliiins [gob1]
+ Gobliins 2 [gob2]
+ Goblins 3 [gob3]
+ Ween: The Prophecy [ween]
+
+Other Games:
+ Beneath a Steel Sky [sky]
+ Broken Sword 1: The Shadow of the Templars [sword1]
+ Broken Sword 2: The Smoking Mirror [sword2]
+ Flight of the Amazon Queen [queen]
+ Future Wars [fw]
+ Inherit the Earth: Quest for the Orb [ite]
+ Nippon Safes Inc. [nippon]
The Legend of Kyrandia [kyra1]
Touche: The Adventures of the Fifth
Musketeer [touche]
@@ -212,6 +240,7 @@ site and view the compatibility chart.
Backyard Soccer [soccer]
Blue's ABC Time [BluesABCTime]
Blue's Birthday Adventure [BluesBirthday]
+ Elvira II - The Jaws of Cerberus [elvira2]
SPY Fox 3: Operation Ozone [spyozon]
The following games are based on the SCUMM engine, but NOT supported
@@ -361,20 +390,22 @@ the files appear on both CDs, but again they're identical.
3.7) Broken Sword notes:
---- -------------------
Broken Sword 1 and 2 both come with in-game cutscenes compressed using
-RAD Game Tools legacy Smacker(tm) format. As RAD is unwilling to open
+RAD Game Tools' legacy Smacker(tm) format. As RAD is unwilling to open
the older legacy versions of this format to us, and have requested we not
reverse engineer it, Revolution Software has kindly allowed us to provide
re-encoded Broken Sword cutscenes for download on our website:
http://www.scummvm.org/downloads.php
-These cutscenes are provided in MPEG2 format with OGG Vorbis audio.
-Viewing these cutscenes thus requires a version of ScummVM compiled
-with both libmpeg2 (preferably 0.4.0 or greater) and libVorbis support.
+These cutscenes are provided in DXA format with FLAC audio. Their quality
+is equal to the original games due to the use of lossless compression.
+Viewing these cutscenes requires a version of ScummVM compiled with both
+FLAC and zLib support.
-TODO
-TODO: What about DXA??? Mention it here, too???
-TODO
+For systems that are too slow to handle the decoding of FLAC audio,
+the audio for these cutscenes is provided separately as OGG Vorbis audio
+too. Viewing these cutscenes with OGG Vorbis audio requires a version of
+ScummVM compiled with both libVorbis and zLib support.
The cutscenes should be placed in the main game data directory. Note that
currently this requires either copying the game to hard disk or burning
@@ -493,11 +524,6 @@ due to reasons described above. The cutscenes have to be re-encoded to DXA,
which is the format used by the cutscenes in the Amiga and Macintosh versions.
See the tools README for a brief guide on converting the cutscenes.
-TODO
-TODO: Maybe we should add a section dedicated to Smacker and DXA, and refer
-TODO to it from here, and also from section 3.7 (Broken Sword) ?
-TODO
-
To use the speech files with ScummVM, they need to be renamed as follows:
Rename voices.wav on CD1 to voices1.wav
Rename voices.wav on CD2 to voices2.wav
@@ -511,7 +537,58 @@ To run The Legend of Kyrandia under ScummVM you need the 'kyra.dat' file,
which can be found on the 'Downloads' page of the ScummVM website.
-3.15) Known Problems:
+3.15) Sierra AGI games Predictive Input Dialog notes:
+----- -----------------------------------------------
+The Predictive Input Dialog is a ScummVM aid for running AGI engines games
+(which notoriously require command line input) on devices with limited keyboard
+support. In these situations since typing with emulated keyboards is quite
+tedious, commands can be entered quickly and easily via the Predictive Input
+Dialog.
+
+In order to enable predictive input in AGI games, you need to copy the pred.dic
+file in the ScummVM extras folder or the folder of the game you wish to play.
+This dictionary has been created by parsing through all known AGI games and
+contains the maximum set of common words.
+
+If the dictionary is detected, the Predictive Input Dialog is displayed either
+when you click on the command line area (wherever keyboard input is required,
+even in dialog boxes), or in some ports by pressing a designated hot key.
+
+The predictive input dialog operates in three modes, switchable by the
+(*)Pre/123/Abc button. The primary input method is the predictive mode (Pre)
+which resembles the way "fast typing" is performed at phones. The alphabet is
+divided into 9 sets which naturally map to the 9 number keys of the numeric
+keypad (0 is space). To type in a word, you press once the number of the set
+which contains the letter of the word you intend to type, then move on to the
+next. For example, to type the command 'look', you should press 5665. As you
+gradually type the intended word's numeric code, the dictionary is accessed for
+known words matching your input up to that point. As you press more keys, the
+prediction converges to the correct word. This is why the printed word may
+change dramatically between key presses. There exist situations though where
+more than one words share the same numeric representation. For example the
+words 'quit' and 'suit' map to the same number, namely 7848. In these cases the
+(#)next button lights up. By pressing it, you can cycle through the list of
+words sharing the same code and finally accept the correct one by pressing
+(0)space or the Ok button.
+
+The second input method (123) is the numeric input: Each key you press is
+entered verbatim as a number.
+
+The third input method (Abc) is the Multi-tap Alpha input mode. This mode is
+intended for entering free text, without assistance from the dictionary scheme
+of predictive (Pre) mode. The text is entered one letter at the time. For each
+letter first press the number of the set which contains the letter you want,
+then use the (#)next button to cycle through the letters and repeat with
+another number. For example, to enter the word 'look' you must press the
+following: 5##6##6##5#
+
+The dialog is fully usable with the mouse, but a few provisions have been made
+in some ScummVM ports to make its use more comfortable by naturally mapping the
+functionality to the numeric keypad. Also, the dialog's buttons can be
+navigated with the arrow and the enter keys.
+
+
+3.16) Known Problems:
----- ---------------
This release has the following known problems. There is no need to report them,
although patches to fix them are welcome. If you discover a bug that is not
@@ -578,7 +655,6 @@ the section on reporting bugs.
The Legend of Kyrandia:
- Amiga versions aren't supported
- - FM-Towns version isn't supported
Humongous Entertainment games:
- No support for printing images
@@ -595,7 +671,7 @@ Supported platforms include (but are not limited to):
UNIX (Linux, Solaris, IRIX, *BSD)
Windows
- Windows Mobile (iPAQ and other handheld devices)
+ Windows CE and Windows Mobile (including Smartphones and PocketPCs)
Mac OS X
AmigaOS
BeOS
@@ -870,7 +946,6 @@ other games.
Cmd-q - Quit (Mac OS X)
Ctrl-q - Quit (other unices including Linux)
Ctrl-z OR Alt-x - Quit (other platforms)
- Ctrl-f - Toggle fast mode
Ctrl-m - Toggle mouse capture
Ctrl-Alt 1-8 - Switch between graphics filters
Ctrl-Alt + and - - Increase/Decrease the scale factor
@@ -886,6 +961,7 @@ other games.
SCUMM:
Ctrl 0-9 and Alt 0-9 - Load and save game state
Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
Ctrl-g - Runs in really REALLY fast mode
Ctrl-t - Switch between 'Speech only',
'Speech and Subtitles' and 'Subtitles only'
@@ -908,13 +984,14 @@ other games.
Beneath a Steel Sky:
Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
Ctrl-g - Runs in really REALLY fast mode
F5 - Displays a save/load box
Escape - Skips the game intro
Period (.) - Skips current line of text
Broken Sword 1:
- F5 or ESC - Displays save/load box
+ F5 or Escape - Displays save/load box
Broken Sword 2:
Ctrl-d - Starts the debugger
@@ -924,18 +1001,37 @@ other games.
Flight of the Amazon Queen:
Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
F1 - Use Journal (saving/loading)
F11 - Quicksave
F12 - Quickload
Escape - Skips cutscenes
Space - Skips current line of text
+ Future Wars
+ F1 - Examine
+ F2 - Take
+ F3 - Inventory
+ F4 - Use
+ F5 - Activate
+ F6 - Speak
+ F9 - "Activate" menu
+ F10 - "Use" menu
+ Escape - Bring on command menu
+
+ Nippon Safes
+ Ctrl-d - Starts the debugger
+ l - Load game
+ s - Save game
+
Simon the Sorcerer 1 and 2:
Ctrl 0-9 and Alt 0-9 - Load and save game state
Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
F1 - F3 - Text speed, faster - slower
F10 - Shows all characters and objects you can
interact with
+ Escape - Skip cutscenes
- and + - Music volume, down/up
m - Music on/off
s - Sound effects on/off
@@ -946,8 +1042,18 @@ other games.
combined speech and subtitles
[Simon the Sorcerer 2 only]
+ Simon the Sorcerer's Puzzle Pack
+ Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
+ F12 - High speed mode on/off in Swampy Adventures
+ - and + - Music volume, down/up
+ m - Music on/off
+ s - Sound effects on/off
+ p - Pauses
+
The Feeble Files
Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
F7 - Switch characters
F9 - Hitbox names on/off
s - Sound effects on/off
@@ -961,11 +1067,20 @@ other games.
Ctrl 0-9 and Alt 0-9 - Load and save game state
Ctrl-d - Starts the debugger
+ Touche: The Adventures of the Fifth Musketeer:
+ Ctrl-d - Starts the debugger
+ Ctrl-f - Toggle fast mode
+ F5 - Displays options
+ F9 - Turn fast walk mode on
+ F10 - Turn fast walk mode off
+ Escape - Quit
+ Space - Skips current line of text
+ t - Switch between 'Voice only',
+ 'Voice and Text' and 'Text only'
+
Note that using ctrl-f or ctrl-g is not recommended: games can crash when
being run faster than their normal speed, as scripts will lose synchronisation.
-Ctrl-f is not supported by the Broken Sword games.
-
Note for WinCE users: Due to the limited keyboard input in most devices, a
small subset of these hot keys are supported via key remapping and/or panel
actions. Please consult the README-WinCE.txt file.
@@ -1259,7 +1374,7 @@ filesize -- 1152 seems to be a good value for those kind of soundfiles. Be sure
to read the encoder documentation before you use other values.
-7.7.6) Compressing sfx/speech in Simon the Sorcerer and The Feeble Files
+7.7.6) Compressing music/sfx/speech in AGOS games
------ -----------------------------------------------------------------
Use our compress_agos utility from the scummvm-tools package to perform this
task. You can choose between multiple target formats, but note that you can
@@ -1280,6 +1395,8 @@ enabled.
compress_agos voices3.wav (For Windows 4CD version of Feeble)
compress_agos voices4.wav (For Windows 4CD version of Feeble)
+ compress_agos Music (For Windows version of Puzzle Pack)
+
For Ogg Vorbis add --vorbis to the options, i.e.
compress_agos --vorbis
@@ -1531,38 +1648,36 @@ MMX optimized versions, and they will not compile on other processors.
On Win9x/NT/XP you can define USE_WINDBG and attach WinDbg to browse debug
messages (see http://www.sysinternals.com/ntw2k/freeware/debugview.shtml).
-TODO
-TODO: The following lists is partially outdated, and incomplete.
-TODO We could either try to update it, and/or refer to the relevant
-TODO Wiki pages...
-TODO
- GCC:
- * Type ./configure
- * Type make (or gmake, or gnumake, depending on what GNU make is
+ GCC and MinGW32:
+ * Type "./configure"
+ * Type "make" (or "gmake", or "gnumake", depending on what GNU make is
called on your system) and hopefully ScummVM will compile for you.
+ * For more information refer to:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/GCC
+ respectively
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW
Microsoft Visual C++ 6.0:
- * Open the workspace, scummwm.dsw
+ * Open the workspace file "scummwm.dsw" in the "dists\msvc6" folder.
* Enter the path to the needed libraries and includes in
- Tools|Options|Directories
+ "Tools|Options|Directories".
* Now it should compile successfully.
+ * For more information refer to:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/VS2005
- Microsoft Visual C++ 7.0:
- * Open the solution file scummwm.sln
+ Microsoft Visual C++ 7.0/8.0:
+ * Open the solution file "scummwm.sln" in the "dists\msvc7"
+ respectively "dists\msvc8" folder.
* Enter the path to the needed libraries and includes in
- Tools|Options|Projects|VC++ Directories
+ Tools|Options|Projects|VC++ Directories".
* Now it should compile successfully.
+ * For more information refer to:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/VS2005
- Windows Mobile with Microsoft eMbedded Visual C++ 3 or 4 :
- * Download SDL with additional Windows Mobile tweaks:
- http://arisme.free.fr/ports/SDL.php
- * Download additional third party libraries:
- http://arisme.free.fr/ports
- * Modify your include and library paths accordingly in EVC3/EVC4.
- * Open the ScummVM project dists\msevc4\PocketSCUMM.vcw
- * Modify the libraries and config parameters if necessary.
- * Now it should compile successfully.
+ Windows Mobile:
+ * Please refer to:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE
Debian GNU/Linux:
* Install the packages 'build-essential', 'fakeroot', 'debhelper',
@@ -1581,12 +1696,14 @@ TODO
way to get that is to install SDL via Fink (http://fink.sf.net).
Alternatively you could compile SDL manually from source using its
unix build system (configure && make).
- * Type ./configure in the ScummVM directory
+ * Type "./configure" in the ScummVM directory.
* You can now type 'make' to create a command line binary.
* To get a version you can run from Finder, type 'make bundle' which
will create ScummVM.app (this only works out of the box if you
installed SDL into /sw (as happens if you are using Fink). If you
have installed SDL in another way, you will have to edit the Makefile).
+ * For more information refer to:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/MacOS_X_Crosscompiling
AmigaOS 4 (Cross-compiling with Cygwin):
* Make sure that you have SDL installed, you may also need
diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp
index 18b72399d2..ad21b09070 100644
--- a/backends/events/default/default-events.cpp
+++ b/backends/events/default/default-events.cpp
@@ -106,7 +106,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
event.type = Common::EVENT_KEYDOWN;
event.synthetic = true;
event.kbd.ascii = _currentKeyDown.ascii;
- event.kbd.keycode = _currentKeyDown.keycode;
+ event.kbd.keycode = (Common::KeyCode)_currentKeyDown.keycode;
event.kbd.flags = _currentKeyDown.flags;
_keyRepeatTime = time + kKeyRepeatSustainDelay;
result = true;
diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp
index d28fd913c0..a3913529b6 100644
--- a/backends/platform/PalmOS/Src/base_event.cpp
+++ b/backends/platform/PalmOS/Src/base_event.cpp
@@ -93,73 +93,137 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
sound_handler();
for(;;) {
+ // check for hardkey repeat for mouse emulation
+ keyCurrentState = KeyCurrentState();
+
// if it was a key pressed, let the keyup event raise
- if (_wasKey) {
- // check for hardkey repeat for mouse emulation
- keyCurrentState = KeyCurrentState();
-
- if (!(keyCurrentState & _keyExtraMask)) {
- _lastKeyRepeat = 0;
-
- } else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) {
- _keyExtraRepeat = getMillis();
-
- if (gVars->arrowKeys) {
-/* if HARD_KEY(Up, chrUpArrow)
- else if HARD_KEY(Down, chrDownArrow)
- else if HARD_KEY(Left, chrLeftArrow)
- else if HARD_KEY(Right, chrRightArrow)
-*/
- } else {
- // button released ?
- if (_keyExtraPressed) {
- if (_keyExtraPressed & _keyExtra.bitActionA) {
- if (!(keyCurrentState & _keyExtra.bitActionA)) {
- _keyExtraPressed &= ~_keyExtra.bitActionA;
-
- event.type = Common::EVENT_LBUTTONUP;
- event.mouse.x = _mouseCurState.x;
- event.mouse.y = _mouseCurState.y;
- return true;
- }
- }
-
- if (_keyExtraPressed & _keyExtra.bitActionB) {
- if (!(keyCurrentState & _keyExtra.bitActionB)) {
- _keyExtraPressed &= ~_keyExtra.bitActionB;
-
- event.type = Common::EVENT_RBUTTONUP;
- event.mouse.x = _mouseCurState.x;
- event.mouse.y = _mouseCurState.y;
- return true;
- }
- }
+ if (_keyExtraPressed) {
+ if (gVars->arrowKeys) {
+ if (_keyExtraPressed & _keyExtra.bitLeft) {
+ if (!(keyCurrentState & _keyExtra.bitLeft)) {
+ _keyExtraPressed &= ~_keyExtra.bitLeft;
+
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_LEFT;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+ return true;
+ }
+ }
+ if (_keyExtraPressed & _keyExtra.bitRight) {
+ if (!(keyCurrentState & _keyExtra.bitRight)) {
+ _keyExtraPressed &= ~_keyExtra.bitRight;
+
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_RIGHT;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+ return true;
+ }
+ }
+ if (_keyExtraPressed & _keyExtra.bitUp) {
+ if (!(keyCurrentState & _keyExtra.bitUp)) {
+ _keyExtraPressed &= ~_keyExtra.bitUp;
+
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_UP;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+ return true;
+ }
+ }
+ if (_keyExtraPressed & _keyExtra.bitDown) {
+ if (!(keyCurrentState & _keyExtra.bitDown)) {
+ _keyExtraPressed &= ~_keyExtra.bitDown;
+
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_DOWN;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+ return true;
}
+ }
+ }
- Int8 sx = 0;
- Int8 sy = 0;
-
- if (keyCurrentState & _keyExtra.bitUp)
- sy = -1;
- else if (keyCurrentState & _keyExtra.bitDown)
- sy = +1;
-
- if (keyCurrentState & _keyExtra.bitLeft)
- sx = -1;
- else if (keyCurrentState & _keyExtra.bitRight)
- sx = +1;
-
- if (sx || sy) {
- simulate_mouse(event, sx, sy, &x, &y);
- event.type = Common::EVENT_MOUSEMOVE;
- event.mouse.x = x;
- event.mouse.y = y;
- warpMouse(x, y);
+ if (_keyExtraPressed & _keyExtra.bitActionA) {
+ if (!(keyCurrentState & _keyExtra.bitActionA)) {
+ _keyExtraPressed &= ~_keyExtra.bitActionA;
- return true;
- }
+ event.type = Common::EVENT_LBUTTONUP;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
+ }
+ }
+
+ if (_keyExtraPressed & _keyExtra.bitActionB) {
+ if (!(keyCurrentState & _keyExtra.bitActionB)) {
+ _keyExtraPressed &= ~_keyExtra.bitActionB;
+
+ event.type = Common::EVENT_RBUTTONUP;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
}
}
+
+ // no more event till up is raised
+ return false;
+ }
+
+ if (!(keyCurrentState & _keyExtraMask)) {
+ _lastKeyRepeat = 0;
+
+ } else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) {
+ _keyExtraRepeat = getMillis();
+
+ if (gVars->arrowKeys) {
+ if (keyCurrentState & _keyExtra.bitLeft) {
+ _keyExtraPressed |= _keyExtra.bitLeft;
+ event.kbd.keycode = Common::KEYCODE_LEFT;
+
+ } else if (keyCurrentState & _keyExtra.bitRight) {
+ _keyExtraPressed |= _keyExtra.bitRight;
+ event.kbd.keycode = Common::KEYCODE_RIGHT;
+
+ } else if (keyCurrentState & _keyExtra.bitUp) {
+ _keyExtraPressed |= _keyExtra.bitUp;
+ event.kbd.keycode = Common::EVENT_KEYUP;
+
+ } else if (keyCurrentState & _keyExtra.bitDown) {
+ _keyExtraPressed |= _keyExtra.bitDown;
+ event.kbd.keycode = Common::KEYCODE_DOWN;
+ }
+
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+ return true;
+
+ } else {
+ Int8 sx = 0;
+ Int8 sy = 0;
+
+ if (keyCurrentState & _keyExtra.bitUp)
+ sy = -1;
+ else if (keyCurrentState & _keyExtra.bitDown)
+ sy = +1;
+
+ if (keyCurrentState & _keyExtra.bitLeft)
+ sx = -1;
+ else if (keyCurrentState & _keyExtra.bitRight)
+ sx = +1;
+
+ if (sx || sy) {
+ simulate_mouse(event, sx, sy, &x, &y);
+ event.type = Common::EVENT_MOUSEMOVE;
+ event.mouse.x = x;
+ event.mouse.y = y;
+ warpMouse(x, y);
+
+ return true;
+ }
+ }
}
#if defined(COMPILE_OS5) && defined(PALMOS_ARM)
@@ -174,13 +238,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
// arrow keys
case chrUpArrow:
- k = 273; break;
+ k = Common::KEYCODE_UP; break;
case chrDownArrow:
- k = 274; break;
- case chrLeftArrow:
- k = 275; break;
+ k = Common::KEYCODE_DOWN; break;
case chrRightArrow:
- k = 276; break;
+ k = Common::KEYCODE_RIGHT; break;
+ case chrLeftArrow:
+ k = Common::KEYCODE_LEFT; break;
}
if (k) {
@@ -197,16 +261,16 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
// ESC key
case vchrLaunch:
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = 27;
- event.kbd.ascii = 27;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = Common::ASCII_ESCAPE;
event.kbd.flags = 0;
return true;
// F5 = menu
case vchrMenu:
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = 319;
- event.kbd.ascii = 319;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
event.kbd.flags = 0;
return true;
@@ -222,13 +286,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
// arrow keys
case chrUpArrow:
- k = 273; break;
+ k = Common::KEYCODE_UP; break;
case chrDownArrow:
- k = 274; break;
- case chrLeftArrow:
- k = 275; break;
+ k = Common::KEYCODE_DOWN; break;
case chrRightArrow:
- k = 276; break;
+ k = Common::KEYCODE_RIGHT; break;
+ case chrLeftArrow:
+ k = Common::KEYCODE_LEFT; break;
}
if (k) {
@@ -249,13 +313,11 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
((ev.data.keyDown.chr == vchrAttnStateChanged) ||
(ev.data.keyDown.chr == vchrAttnUnsnooze)));
-
// graffiti strokes, auto-off, etc...
if (!handled)
if (SysHandleEvent(&ev))
continue;
-
switch(ev.eType) {
case penMoveEvent:
get_coordinates(&ev, x, y);
@@ -349,8 +411,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
// F1 -> F10 key
if (key >= '0' && key <= '9' && mask == (Common::KBD_CTRL|Common::KBD_ALT)) {
- key = (key == '0') ? 324 : (315 + key - '1');
- mask = 0;
+ key = (key - '0' + 10 - 1) % 10; // '0' -> 9, '1' -> 0, '2' -> 1, ...
+ _wasKey = true;
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_F1 + key;
+ event.kbd.ascii = Common::ASCII_F1 + key;
+ event.kbd.flags = 0;
+ return true;
#ifdef STDLIB_TRACE_MEMORY
// print memory
diff --git a/backends/platform/PalmOS/Src/be_os5.h b/backends/platform/PalmOS/Src/be_os5.h
index fc5f9e667f..bb38c51ca6 100644
--- a/backends/platform/PalmOS/Src/be_os5.h
+++ b/backends/platform/PalmOS/Src/be_os5.h
@@ -110,6 +110,8 @@ private:
typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p);
RendererProc _render;
+ Graphics::Surface _framebuffer;
+
OverlayColor *_overlayP;
WinHandle _overlayH, _workScreenH;
int16 *_workScreenP;
@@ -131,8 +133,7 @@ private:
void calc_scale();
void render_landscapeAny(RectangleType &r, PointType &p);
- void render_landscape(RectangleType &r, PointType &p);
- void render_portrait(RectangleType &r, PointType &p);
+ void render_landscape15x(RectangleType &r, PointType &p);
void render_1x(RectangleType &r, PointType &p);
WinHandle alloc_screen(Coord w, Coord h);
virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
@@ -169,7 +170,8 @@ public:
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
void clearScreen();
- bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
void setCursorPalette(const byte *colors, uint start, uint num);
void disableCursorPalette(bool disable);
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp b/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
index 5f61c85cae..085fb2499a 100755
--- a/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
+++ b/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
@@ -28,7 +28,8 @@
#include "formUtil.h"
#include "games.h"
#include "start.h"
-#include "common/util.h"
+
+#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0])))
static Char **items = NULL;
Int16 selectedEngine = -1;
diff --git a/backends/platform/PalmOS/Src/launcher/games.h b/backends/platform/PalmOS/Src/launcher/games.h
index c277bec4cc..d807d6b64d 100644
--- a/backends/platform/PalmOS/Src/launcher/games.h
+++ b/backends/platform/PalmOS/Src/launcher/games.h
@@ -186,14 +186,14 @@ static const struct {
{ "cine", "Delphine Cinematique v1.0" },
{ "queen", "Flight of the Amazon Queen" },
{ "lure", "Lure of the Tempress" },
- { "gob", "Gobliiins, Bargon Attack and more ..." },
+ { "gob", "Gobliiins, Bargon Attack and more" },
{ "kyra", "Kyrandia" },
{ "parallaction", "Parallaction" },
{ "saga", "SAGA Engine" },
{ "scumm", "Scumm Games" },
{ "agi", "Sierra AGI" },
{ "touche", "Touche: The Adventures of the Fifth Musketeer" },
- { "cruise", "Cruise for a Corpse" },
+ { "cruise", "Beta -> Cruise for a Corpse" },
};
// protos
diff --git a/backends/platform/PalmOS/Src/os5_gfx.cpp b/backends/platform/PalmOS/Src/os5_gfx.cpp
index 247acf6f46..be5d28bc56 100644
--- a/backends/platform/PalmOS/Src/os5_gfx.cpp
+++ b/backends/platform/PalmOS/Src/os5_gfx.cpp
@@ -137,9 +137,13 @@ void OSystem_PalmOS5::hotswap_gfx_mode(int mode) {
}
if (_stretched) {
- calc_scale();
OPTIONS_SET(kOptDisableOnScrDisp);
- _render = &OSystem_PalmOS5::render_landscapeAny;
+ if (_screenHeight == 200 && _screenDest.h == 300) {
+ _render = &OSystem_PalmOS5::render_landscape15x;
+ } else {
+ _render = &OSystem_PalmOS5::render_landscapeAny;
+ calc_scale();
+ }
} else {
OPTIONS_RST(kOptDisableOnScrDisp);
_render = &OSystem_PalmOS5::render_1x;
@@ -215,13 +219,18 @@ void OSystem_PalmOS5::copyRectToScreen(const byte *buf, int pitch, int x, int y,
}
}
-bool OSystem_PalmOS5::grabRawScreen(Graphics::Surface *surf) {
- assert(surf);
+Graphics::Surface *OSystem_PalmOS5::lockScreen() {
+ _framebuffer.pixels = _offScreenP;
+ _framebuffer.w = _screenWidth;
+ _framebuffer.h = _screenHeight;
+ _framebuffer.pitch = _screenWidth;
+ _framebuffer.bytesPerPixel = 1;
- surf->create(_screenWidth, _screenHeight, 1);
- MemMove(surf->pixels, _offScreenP, _screenWidth * _screenHeight);
-
- return true;
+ return &_framebuffer;
+}
+
+void OSystem_PalmOS5::unlockScreen() {
+ // The screen is always completely update anyway, so we don't have to force a full update here.
}
void OSystem_PalmOS5::int_updateScreen() {
diff --git a/backends/platform/PalmOS/Src/os5_renderer.cpp b/backends/platform/PalmOS/Src/os5_renderer.cpp
index fdae35acd5..4580db4d53 100644
--- a/backends/platform/PalmOS/Src/os5_renderer.cpp
+++ b/backends/platform/PalmOS/Src/os5_renderer.cpp
@@ -76,3 +76,43 @@ void OSystem_PalmOS5::render_landscapeAny(RectangleType &r, PointType &p) {
p.y = _screenOffset.y + o;
RctSetRectangle(&r, 0, 0, _screenDest.w, _screenDest.h - o);
}
+
+void OSystem_PalmOS5::render_landscape15x(RectangleType &r, PointType &p) {
+ Coord x, y, o = 0;
+ int16 *dst = _workScreenP;
+
+ if (_overlayVisible) {
+ int16 *src = _overlayP;
+
+ for (y = 0; y < 100; y++) {
+ // draw 2 lines
+ for (x = 0; x < 320; x++) {
+ *dst++ = *src++;
+ *dst++ = *src;
+ *dst++ = *src++;
+ }
+ // copy the second to the next line
+ MemMove(dst, dst - 480, 480 * 2);
+ dst += 480;
+ }
+ } else {
+ byte *src = _offScreenP;
+ o = _current_shake_pos;
+
+ for (y = 0; y < 100; y++) {
+ // draw 2 lines
+ for (x = 0; x < 320; x++) {
+ *dst++ = _nativePal[*src++];
+ *dst++ = _nativePal[*src];
+ *dst++ = _nativePal[*src++];
+ }
+ // copy the second to the next line
+ MemMove(dst, dst - 480, 480 * 2);
+ dst += 480;
+ }
+ }
+
+ p.x = _screenOffset.x;
+ p.y = _screenOffset.y + o;
+ RctSetRectangle(&r, 0, 0, 480, 300 - o);
+}
diff --git a/backends/platform/PalmOS/Src/zodiac_event.cpp b/backends/platform/PalmOS/Src/zodiac_event.cpp
index 4962ad2b72..84ecc27097 100644
--- a/backends/platform/PalmOS/Src/zodiac_event.cpp
+++ b/backends/platform/PalmOS/Src/zodiac_event.cpp
@@ -46,8 +46,8 @@ bool OSystem_PalmZodiac::check_event(Common::Event &event, EventPtr ev) {
// F5 = menu
case vchrThumbWheelBack:
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = 319;
- event.kbd.ascii = 319;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
event.kbd.flags = 0;
return true;
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index 01e86a561b..fa47ed21f5 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -81,8 +81,8 @@ class OSystem_Dreamcast : public OSystem {
// The screen will not be updated to reflect the new bitmap
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
- // Copies the current screen contents to a new surface.
- bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
// Clear the screen to black.
void clearScreen();
@@ -213,6 +213,8 @@ class OSystem_Dreamcast : public OSystem {
void *ovl_tx[NUM_BUFFERS];
unsigned short palette[256], cursor_palette[256];
+ Graphics::Surface _framebuffer;
+
int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
void checkSound();
diff --git a/backends/platform/dc/display.cpp b/backends/platform/dc/display.cpp
index 73312cafed..da9f6e83ff 100644
--- a/backends/platform/dc/display.cpp
+++ b/backends/platform/dc/display.cpp
@@ -609,19 +609,24 @@ int OSystem_Dreamcast::getGraphicsMode() const
return 0;
}
-bool OSystem_Dreamcast::grabRawScreen(Graphics::Surface *surf)
+Graphics::Surface *OSystem_Dreamcast::lockScreen()
{
- if(!screen || !surf)
- return false;
+ if (!screen)
+ return 0;
- surf->create(_screen_w, _screen_h, 1);
- unsigned char *src = screen, *dst = (unsigned char *)surf->pixels;
- for(int h = _screen_h; h>0; --h) {
- memcpy(dst, src, _screen_w);
- src += SCREEN_W;
- dst += _screen_w;
- }
- return true;
+ _framebuffer.pixels = screen;
+ _framebuffer.w = _screen_w;
+ _framebuffer.h = _screen_h;
+ _framebuffer.pitch = SCREEN_W;
+ _framebuffer.bytesPerPixel = 1;
+
+ return &_framebuffer;
+}
+
+void OSystem_Dreamcast::unlockScreen()
+{
+ // Force screen update
+ _screen_dirty = true;
}
void OSystem_Dreamcast::clearScreen()
diff --git a/backends/platform/dc/input.cpp b/backends/platform/dc/input.cpp
index 7a5e5911d8..f3638a28db 100644
--- a/backends/platform/dc/input.cpp
+++ b/backends/platform/dc/input.cpp
@@ -48,7 +48,7 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
if(!(buttons & 4)) lmb++;
if(!(buttons & 2)) rmb++;
- if(!(buttons & 8)) newkey = 319;
+ if(!(buttons & 8)) newkey = Common::ASCII_F5;
else if(!(buttons & 512)) newkey = ' ';
else if(!(buttons & 1024)) newkey = numpadmap[(buttons>>4)&15];
@@ -69,7 +69,7 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
if(!(buttons & 4)) lmb++;
if(!(buttons & 2)) rmb++;
- if(!(buttons & 8)) newkey = 319;
+ if(!(buttons & 8)) newkey = Common::ASCII_F5;
mouse_x += pad->cond.mouse.axis1;
mouse_y += pad->cond.mouse.axis2;
@@ -101,22 +101,22 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
"=¯`{ }+*½<>?" :
"-^@[ ];:§,./")[key - 0x2d];
else if(key >= 0x3a && key <= 0x43)
- newkey = key+(315-0x3a);
+ newkey = key+(Common::ASCII_F1-0x3a);
else if(key >= 0x54 && key <= 0x57)
newkey = "/*-+"[key-0x54];
else switch(key) {
case 0x27: case 0x62:
newkey = ((shift & 0x22)? '~' : '0'); break;
case 0x28: case 0x58:
- newkey = 13; break;
+ newkey = Common::KEYCODE_RETURN; break;
case 0x29:
- newkey = 27; break;
+ newkey = Common::KEYCODE_ESCAPE; break;
case 0x2a:
- newkey = 8; break;
+ newkey = Common::KEYCODE_BACKSPACE; break;
case 0x2b:
- newkey = 9; break;
+ newkey = Common::KEYCODE_TAB; break;
case 0x2c:
- newkey = ' '; break;
+ newkey = Common::KEYCODE_SPACE; break;
case 0x4c:
if((shift & 0x11) && (shift & 0x44))
exit(0);
diff --git a/backends/platform/dc/selector.cpp b/backends/platform/dc/selector.cpp
index a4fec642fe..8262a39614 100644
--- a/backends/platform/dc/selector.cpp
+++ b/backends/platform/dc/selector.cpp
@@ -364,7 +364,7 @@ int gameMenu(Game *games, int num_games)
event = handleInput(locked_get_pads(), mousex, mousey, shiftFlags);
setimask(mask);
- if(event==-Common::EVENT_LBUTTONDOWN || event==13 || event==319) {
+ if(event==-Common::EVENT_LBUTTONDOWN || event==13 || event==Common::ASCII_F5) {
int selected_game = top_game + selector_pos;
for(int fade=0; fade<=256; fade+=4) {
diff --git a/backends/platform/dc/softkbd.cpp b/backends/platform/dc/softkbd.cpp
index e8436fc30a..58b492f6db 100644
--- a/backends/platform/dc/softkbd.cpp
+++ b/backends/platform/dc/softkbd.cpp
@@ -52,7 +52,7 @@ static const char key_names[] =
static const short key_codes[] =
{
- 27, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ Common::KEYCODE_ESCAPE, Common::ASCII_F1, Common::ASCII_F2, Common::ASCII_F3, Common::ASCII_F4, Common::ASCII_F5, Common::ASCII_F6, Common::ASCII_F7, Common::ASCII_F8, Common::ASCII_F9, Common::ASCII_F10,
K('1','!'), K('2','"'), K('3','#'), K('4','$'), K('5','%'),
K('6','&'), K('7','\''), K('8','('), K('9',')'), K('0','~'), K('-','='),
K('q','Q'), K('w','W'), K('e','E'), K('r','R'), K('t','T'),
@@ -61,7 +61,7 @@ static const short key_codes[] =
K('h','H'), K('j','J'), K('k','K'), K('l','L'), K(';','+'), K(':','*'),
K('z','Z'), K('x','X'), K('c','C'), K('v','V'), K('b','B'),
K('n','N'), K('m','M'), K(',','<'), K('.','>'), K('/','?'), K('\\','_'),
- ~Common::KBD_SHIFT, ~Common::KBD_CTRL, ~Common::KBD_ALT, ' ', 8, 13
+ ~Common::KBD_SHIFT, ~Common::KBD_CTRL, ~Common::KBD_ALT, ' ', Common::KEYCODE_BACKSPACE, Common::KEYCODE_RETURN
};
SoftKeyboard::SoftKeyboard(const OSystem_Dreamcast *_os)
diff --git a/backends/platform/ds/arm9/makefile b/backends/platform/ds/arm9/makefile
index f28abd2b77..cb41774064 100644
--- a/backends/platform/ds/arm9/makefile
+++ b/backends/platform/ds/arm9/makefile
@@ -333,8 +333,8 @@ endif
#---------------------------------------------------------------------------------
%.nds: %.bin
- @echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.9.0;DS Port"
- ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.9.1;DS Port"
+ @echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.11.0svn;DS Port"
+ ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.11.0svn;DS Port"
dsbuild $@ -l ../ndsloader.bin
padbin 16 $(basename $@).ds.gba
diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp
index 153ecfab87..af5addac66 100644
--- a/backends/platform/ds/arm9/source/dsmain.cpp
+++ b/backends/platform/ds/arm9/source/dsmain.cpp
@@ -333,27 +333,25 @@ void initSprites() {
void saveGameBackBuffer() {
#ifdef DISABLE_SCUMM
if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight];
- for (int r = 0; r < 200; r++) {
+ for (int r = 0; r < gameHeight; r++) {
memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth);
- }
#endif
}
void restoreGameBackBuffer() {
#ifdef DISABLE_SCUMM
if (savedBuffer) {
- for (int r = 0; r < 200; r++) {
- memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
- memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
- }
+ for (int r = 0; r < gameHeight; r++) {
+ memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
+ memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
+ }
+
delete savedBuffer;
savedBuffer = NULL;
}
-#endif
-
-#ifndef DISABLE_SCUMM
- memset(get8BitBackBuffer(), 0, 512 * 256);
- memset(BG_GFX_SUB, 0, 512 * 256);
+#else
+ memset(get8BitBackBuffer(), 0, 512 * 256);
+ memset(BG_GFX_SUB, 0, 512 * 256);
if (Scumm::g_scumm) {
Scumm::g_scumm->markRectAsDirty(Scumm::kMainVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
Scumm::g_scumm->markRectAsDirty(Scumm::kTextVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
@@ -996,11 +994,10 @@ void setKeyboardEnable(bool en) {
// Copy the sub screen VRAM from the top screen - they should always be
// the same.
u16* buffer = get8BitBackBuffer();
-
- for (int r = 0; r < (512 * 256) >> 1; r++) {
- BG_GFX_SUB[r] = buffer[r];
- }
-
+
+ for (int r = 0; r < (512 * 256) >> 1; r++)
+ BG_GFX_SUB[r] = buffer[r];
+
SUB_DISPLAY_CR &= ~DISPLAY_BG1_ACTIVE; // Turn off keyboard layer
SUB_DISPLAY_CR |= DISPLAY_BG3_ACTIVE; // Turn on game layer
} else {
@@ -1229,7 +1226,7 @@ void addEventsToQueue() {
if (leftHandedSwap(getKeysChanged()) & KEY_UP) {
event.type = getKeyEvent(leftHandedSwap(KEY_UP));
- event.kbd.keycode = SDLK_UP;
+ event.kbd.keycode = Common::KEYCODE_UP;
event.kbd.ascii = 0;
event.kbd.flags = 0;
system->addEvent(event);
@@ -1237,7 +1234,7 @@ void addEventsToQueue() {
if (leftHandedSwap(getKeysChanged()) & KEY_DOWN) {
event.type = getKeyEvent(leftHandedSwap(KEY_DOWN));
- event.kbd.keycode = SDLK_DOWN;
+ event.kbd.keycode = Common::KEYCODE_DOWN;
event.kbd.ascii = 0;
event.kbd.flags = 0;
system->addEvent(event);
@@ -1245,7 +1242,7 @@ void addEventsToQueue() {
if (leftHandedSwap(getKeysDown()) & KEY_A) {
event.type = getKeyEvent(leftHandedSwap(KEY_A));
- event.kbd.keycode = SDLK_RETURN;
+ event.kbd.keycode = Common::KEYCODE_RETURN;
event.kbd.ascii = 0;
event.kbd.flags = 0;
system->addEvent(event);
@@ -1256,8 +1253,8 @@ void addEventsToQueue() {
if ((getKeysChanged() & KEY_START)) {
event.type = getKeyEvent(KEY_START);
- event.kbd.keycode = 319; // F5
- event.kbd.ascii = 319;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
event.kbd.flags = 0;
system->addEvent(event);
}
@@ -2315,6 +2312,8 @@ int main(void)
consolePrintf("-------------------------------\n");
consolePrintf("ScummVM DS\n");
consolePrintf("Ported by Neil Millstone\n");
+ FIXME: Change this code to make use of base/internal_version.h
+ resp. uses gScummVMVersion from base/version.h
consolePrintf("Version 0.10.0SVN ");
#if defined(DS_BUILD_A)
consolePrintf("build A\n");
@@ -2483,4 +2482,3 @@ int main(void)
int main() {
DS::main();
}
-
diff --git a/backends/platform/ds/arm9/source/dsoptions.cpp b/backends/platform/ds/arm9/source/dsoptions.cpp
index 58df3dc863..171d1e044c 100644
--- a/backends/platform/ds/arm9/source/dsoptions.cpp
+++ b/backends/platform/ds/arm9/source/dsoptions.cpp
@@ -158,8 +158,8 @@ void DSOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint
Common::Event event;
event.type = Common::EVENT_KEYDOWN;
- event.kbd.ascii = SDLK_DOWN;
- event.kbd.keycode = SDLK_DOWN;
+ event.kbd.ascii = 0;
+ event.kbd.keycode = Common::KEYCODE_DOWN;
OSystem_DS::instance()->addEvent(event);
event.type = Common::EVENT_KEYUP;
diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp
index 9ff2c5ba63..cad6ad6b78 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.cpp
+++ b/backends/platform/ds/arm9/source/osystem_ds.cpp
@@ -173,8 +173,8 @@ void OSystem_DS::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
u16* src = (u16 *) buf;
if (DS::getKeyboardEnable()) {
-
- for (int dy = y; dy < y + h; dy++) {
+ for (int dy = y; dy < y + h; dy++)
+ {
u16* dest = bg + (dy << 8) + (x >> 1);
DC_FlushRange(src, w << 1);
@@ -185,7 +185,8 @@ void OSystem_DS::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
}
} else {
- for (int dy = y; dy < y + h; dy++) {
+ for (int dy = y; dy < y + h; dy++)
+ {
u16* dest1 = bg + (dy << 8) + (x >> 1);
u16* dest2 = bgSub + (dy << 8) + (x >> 1);
@@ -473,22 +474,36 @@ Common::SaveFileManager* OSystem_DS::getSavefileManager()
}
}
-bool OSystem_DS::grabRawScreen(Graphics::Surface* surf) {
- surf->create(DS::getGameWidth(), DS::getGameHeight(), 1);
+Graphics::Surface *OSystem_DS::lockScreen() {
+ // For now, we create a full temporary screen surface, to which we copy the
+ // the screen content. Later unlockScreen will copy everything back.
+ // Not very nice nor efficient, but at least works, and is not worse
+ // than in the bad old times where we used grabRawScreen + copyRectToScreen.
+
+ _framebuffer.create(DS::getGameWidth(), DS::getGameHeight(), 1);
// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
- // TODO: Change this to work with the software scalar (hint: video ram format is different)
+
+
u16* image = (u16 *) DS::get8BitBackBuffer();
for (int y = 0; y < DS::getGameHeight(); y++)
{
- DC_FlushRange((image + (y * 512)), DS::getGameWidth());
+ DC_FlushRange(image + (y << 8), DS::getGameWidth());
for (int x = 0; x < DS::getGameWidth() >> 1; x++)
{
- *(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = *(image + y * 256 + x);
+ *(((u16 *) (_framebuffer.pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y << 8 + x];
}
}
- return true;
+ return &_framebuffer;
+}
+
+void OSystem_DS::unlockScreen() {
+ // Copy temp framebuffer back to screen
+ copyRectToScreen((byte *)_framebuffer.pixels, _framebuffer.pitch, 0, 0, _framebuffer.w, _framebuffer.h);
+
+ // Free memory
+ _framebuffer.free();
}
void OSystem_DS::setFocusRectangle(const Common::Rect& rect) {
diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h
index b6d6f5b7bc..58b940af2c 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.h
+++ b/backends/platform/ds/arm9/source/osystem_ds.h
@@ -53,6 +53,8 @@ public:
DSAudioMixer* _mixer;
DSTimerManager* _timer;
+ Graphics::Surface _framebuffer;
+
static OSystem_DS* _instance;
typedef void (*SoundProc)(void *param, byte *buf, int len);
@@ -127,7 +129,8 @@ public:
void addEvent(Common::Event& e);
bool isEventQueueEmpty() { return queuePos == 0; }
- virtual bool grabRawScreen(Graphics::Surface* surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
virtual void setFocusRectangle(const Common::Rect& rect);
@@ -159,4 +162,9 @@ void OSystem_DS::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b)
//consolePrintf("coltorgb\n");
}
+namespace DS
+{
+bool isCpuScalerEnabled();
+}
+
#endif
diff --git a/backends/platform/ds/arm9/source/touchkeyboard.cpp b/backends/platform/ds/arm9/source/touchkeyboard.cpp
index 3f1d6f8064..8f7af668d8 100644
--- a/backends/platform/ds/arm9/source/touchkeyboard.cpp
+++ b/backends/platform/ds/arm9/source/touchkeyboard.cpp
@@ -56,9 +56,9 @@ key_data keys[DS_NUM_KEYS] = {
{35, 17, 0, '8'},
{36, 19, 0, '9'},
{27, 21, 0, '0'},
- {45, 23, 0, SDLK_MINUS},
- {50, 25, 0, SDLK_EQUALS},
- {52, 27, 0, SDLK_BACKSPACE},
+ {45, 23, 0, Common::KEYCODE_MINUS},
+ {50, 25, 0, Common::KEYCODE_EQUALS},
+ {52, 27, 0, Common::KEYCODE_BACKSPACE},
// Top row
{'Q'-'A' + 1, 4, 2, 'Q'},
@@ -71,8 +71,8 @@ key_data keys[DS_NUM_KEYS] = {
{'I'-'A' + 1, 18, 2, 'I'},
{'O'-'A' + 1, 20, 2, 'O'},
{'P'-'A' + 1, 22, 2, 'P'},
- {43, 24, 2, SDLK_LEFTBRACKET},
- {44, 26, 2, SDLK_RIGHTBRACKET},
+ {43, 24, 2, Common::KEYCODE_LEFTBRACKET},
+ {44, 26, 2, Common::KEYCODE_RIGHTBRACKET},
// Middle row
{55, 3, 4, DS_CAPSLOCK},
@@ -85,9 +85,9 @@ key_data keys[DS_NUM_KEYS] = {
{'J'-'A' + 1, 17, 4, 'J'},
{'K'-'A' + 1, 19, 4, 'K'},
{'L'-'A' + 1, 21, 4, 'L'},
- {42, 23, 4, SDLK_SEMICOLON},
- {41, 25, 4, SDLK_QUOTE},
- {46, 27, 4, SDLK_RETURN},
+ {42, 23, 4, Common::KEYCODE_SEMICOLON},
+ {41, 25, 4, Common::KEYCODE_QUOTE},
+ {46, 27, 4, Common::KEYCODE_RETURN},
// Bottom row
{51, 4, 6, DS_SHIFT},
@@ -98,26 +98,26 @@ key_data keys[DS_NUM_KEYS] = {
{'B'-'A' + 1, 14, 6, 'B'},
{'N'-'A' + 1, 16, 6, 'N'},
{'M'-'A' + 1, 18, 6, 'M'},
- {38, 20, 6, SDLK_COMMA},
- {39, 22, 6, SDLK_PERIOD},
- {40, 24, 6, SDLK_SLASH},
+ {38, 20, 6, Common::KEYCODE_COMMA},
+ {39, 22, 6, Common::KEYCODE_PERIOD},
+ {40, 24, 6, Common::KEYCODE_SLASH},
// Space bar
- {47, 9, 8, SDLK_SPACE},
- {48, 11, 8, SDLK_SPACE},
- {48, 13, 8, SDLK_SPACE},
- {48, 15, 8, SDLK_SPACE},
- {48, 17, 8, SDLK_SPACE},
- {49, 19, 8, SDLK_SPACE},
+ {47, 9, 8, Common::KEYCODE_SPACE},
+ {48, 11, 8, Common::KEYCODE_SPACE},
+ {48, 13, 8, Common::KEYCODE_SPACE},
+ {48, 15, 8, Common::KEYCODE_SPACE},
+ {48, 17, 8, Common::KEYCODE_SPACE},
+ {49, 19, 8, Common::KEYCODE_SPACE},
// Cursor arrows
- {52, 27, 8, SDLK_LEFT},
- {54, 29, 8, SDLK_DOWN},
- {53, 31, 8, SDLK_RIGHT},
- {51, 29, 6, SDLK_UP},
+ {52, 27, 8, Common::KEYCODE_LEFT},
+ {54, 29, 8, Common::KEYCODE_DOWN},
+ {53, 31, 8, Common::KEYCODE_RIGHT},
+ {51, 29, 6, Common::KEYCODE_UP},
// Close button
- {56, 30, 0, SDLK_UNKNOWN},
+ {56, 30, 0, Common::KEYCODE_INVALID},
};
@@ -237,7 +237,7 @@ void addKeyboardEvents() {
Common::Event event;
// consolePrintf("Key: %d\n", r);
- if ((keys[r].character == SDLK_UNKNOWN)) {
+ if ((keys[r].character == Common::KEYCODE_INVALID)) {
// Close button
DS::closed = true;
} else if ((keys[r].character >= '0') && (keys[r].character <= '9')) {
diff --git a/backends/platform/ds/arm9/source/touchkeyboard.h b/backends/platform/ds/arm9/source/touchkeyboard.h
index 53fd25e12a..e8f5fda37e 100644
--- a/backends/platform/ds/arm9/source/touchkeyboard.h
+++ b/backends/platform/ds/arm9/source/touchkeyboard.h
@@ -25,75 +25,6 @@
namespace DS {
-enum SDLKey {
- SDLK_UNKNOWN = 0, SDLK_FIRST = 0, SDLK_BACKSPACE = 8, SDLK_TAB = 9,
- SDLK_CLEAR = 12, SDLK_RETURN = 13, SDLK_PAUSE = 19, SDLK_ESCAPE = 27,
- SDLK_SPACE = 32, SDLK_EXCLAIM = 33, SDLK_QUOTEDBL = 34, SDLK_HASH = 35,
- SDLK_DOLLAR = 36, SDLK_AMPERSAND = 38, SDLK_QUOTE = 39, SDLK_LEFTPAREN = 40,
- SDLK_RIGHTPAREN = 41, SDLK_ASTERISK = 42, SDLK_PLUS = 43, SDLK_COMMA = 44,
- SDLK_MINUS = 45, SDLK_PERIOD = 46, SDLK_SLASH = 47, SDLK_0 = 48,
- SDLK_1 = 49, SDLK_2 = 50, SDLK_3 = 51, SDLK_4 = 52,
- SDLK_5 = 53, SDLK_6 = 54, SDLK_7 = 55, SDLK_8 = 56,
- SDLK_9 = 57, SDLK_COLON = 58, SDLK_SEMICOLON = 59, SDLK_LESS = 60,
- SDLK_EQUALS = 61, SDLK_GREATER = 62, SDLK_QUESTION = 63, SDLK_AT = 64,
- SDLK_LEFTBRACKET = 91, SDLK_BACKSLASH = 92, SDLK_RIGHTBRACKET = 93, SDLK_CARET = 94,
- SDLK_UNDERSCORE = 95, SDLK_BACKQUOTE = 96, SDLK_a = 97, SDLK_b = 98,
- SDLK_c = 99, SDLK_d = 100, SDLK_e = 101, SDLK_f = 102,
- SDLK_g = 103, SDLK_h = 104, SDLK_i = 105, SDLK_j = 106,
- SDLK_k = 107, SDLK_l = 108, SDLK_m = 109, SDLK_n = 110,
- SDLK_o = 111, SDLK_p = 112, SDLK_q = 113, SDLK_r = 114,
- SDLK_s = 115, SDLK_t = 116, SDLK_u = 117, SDLK_v = 118,
- SDLK_w = 119, SDLK_x = 120, SDLK_y = 121, SDLK_z = 122,
- SDLK_DELETE = 127, SDLK_WORLD_0 = 160, SDLK_WORLD_1 = 161, SDLK_WORLD_2 = 162,
- SDLK_WORLD_3 = 163, SDLK_WORLD_4 = 164, SDLK_WORLD_5 = 165, SDLK_WORLD_6 = 166,
- SDLK_WORLD_7 = 167, SDLK_WORLD_8 = 168, SDLK_WORLD_9 = 169, SDLK_WORLD_10 = 170,
- SDLK_WORLD_11 = 171, SDLK_WORLD_12 = 172, SDLK_WORLD_13 = 173, SDLK_WORLD_14 = 174,
- SDLK_WORLD_15 = 175, SDLK_WORLD_16 = 176, SDLK_WORLD_17 = 177, SDLK_WORLD_18 = 178,
- SDLK_WORLD_19 = 179, SDLK_WORLD_20 = 180, SDLK_WORLD_21 = 181, SDLK_WORLD_22 = 182,
- SDLK_WORLD_23 = 183, SDLK_WORLD_24 = 184, SDLK_WORLD_25 = 185, SDLK_WORLD_26 = 186,
- SDLK_WORLD_27 = 187, SDLK_WORLD_28 = 188, SDLK_WORLD_29 = 189, SDLK_WORLD_30 = 190,
- SDLK_WORLD_31 = 191, SDLK_WORLD_32 = 192, SDLK_WORLD_33 = 193, SDLK_WORLD_34 = 194,
- SDLK_WORLD_35 = 195, SDLK_WORLD_36 = 196, SDLK_WORLD_37 = 197, SDLK_WORLD_38 = 198,
- SDLK_WORLD_39 = 199, SDLK_WORLD_40 = 200, SDLK_WORLD_41 = 201, SDLK_WORLD_42 = 202,
- SDLK_WORLD_43 = 203, SDLK_WORLD_44 = 204, SDLK_WORLD_45 = 205, SDLK_WORLD_46 = 206,
- SDLK_WORLD_47 = 207, SDLK_WORLD_48 = 208, SDLK_WORLD_49 = 209, SDLK_WORLD_50 = 210,
- SDLK_WORLD_51 = 211, SDLK_WORLD_52 = 212, SDLK_WORLD_53 = 213, SDLK_WORLD_54 = 214,
- SDLK_WORLD_55 = 215, SDLK_WORLD_56 = 216, SDLK_WORLD_57 = 217, SDLK_WORLD_58 = 218,
- SDLK_WORLD_59 = 219, SDLK_WORLD_60 = 220, SDLK_WORLD_61 = 221, SDLK_WORLD_62 = 222,
- SDLK_WORLD_63 = 223, SDLK_WORLD_64 = 224, SDLK_WORLD_65 = 225, SDLK_WORLD_66 = 226,
- SDLK_WORLD_67 = 227, SDLK_WORLD_68 = 228, SDLK_WORLD_69 = 229, SDLK_WORLD_70 = 230,
- SDLK_WORLD_71 = 231, SDLK_WORLD_72 = 232, SDLK_WORLD_73 = 233, SDLK_WORLD_74 = 234,
- SDLK_WORLD_75 = 235, SDLK_WORLD_76 = 236, SDLK_WORLD_77 = 237, SDLK_WORLD_78 = 238,
- SDLK_WORLD_79 = 239, SDLK_WORLD_80 = 240, SDLK_WORLD_81 = 241, SDLK_WORLD_82 = 242,
- SDLK_WORLD_83 = 243, SDLK_WORLD_84 = 244, SDLK_WORLD_85 = 245, SDLK_WORLD_86 = 246,
- SDLK_WORLD_87 = 247, SDLK_WORLD_88 = 248, SDLK_WORLD_89 = 249, SDLK_WORLD_90 = 250,
- SDLK_WORLD_91 = 251, SDLK_WORLD_92 = 252, SDLK_WORLD_93 = 253, SDLK_WORLD_94 = 254,
- SDLK_WORLD_95 = 255, SDLK_KP0 = 256, SDLK_KP1 = 257, SDLK_KP2 = 258,
- SDLK_KP3 = 259, SDLK_KP4 = 260, SDLK_KP5 = 261, SDLK_KP6 = 262,
- SDLK_KP7 = 263, SDLK_KP8 = 264, SDLK_KP9 = 265, SDLK_KP_PERIOD = 266,
- SDLK_KP_DIVIDE = 267, SDLK_KP_MULTIPLY = 268, SDLK_KP_MINUS = 269, SDLK_KP_PLUS = 270,
- SDLK_KP_ENTER = 271, SDLK_KP_EQUALS = 272, SDLK_UP = 273, SDLK_DOWN = 274,
- SDLK_RIGHT = 275, SDLK_LEFT = 276, SDLK_INSERT = 277, SDLK_HOME = 278,
- SDLK_END = 279, SDLK_PAGEUP = 280, SDLK_PAGEDOWN = 281, SDLK_F1 = 282,
- SDLK_F2 = 283, SDLK_F3 = 284, SDLK_F4 = 285, SDLK_F5 = 286,
- SDLK_F6 = 287, SDLK_F7 = 288, SDLK_F8 = 289, SDLK_F9 = 290,
- SDLK_F10 = 291, SDLK_F11 = 292, SDLK_F12 = 293, SDLK_F13 = 294,
- SDLK_F14 = 295, SDLK_F15 = 296, SDLK_NUMLOCK = 300, SDLK_CAPSLOCK = 301,
- SDLK_SCROLLOCK = 302, SDLK_RSHIFT = 303, SDLK_LSHIFT = 304, SDLK_RCTRL = 305,
- SDLK_LCTRL = 306, SDLK_RALT = 307, SDLK_LALT = 308, SDLK_RMETA = 309,
- SDLK_LMETA = 310, SDLK_LSUPER = 311, SDLK_RSUPER = 312, SDLK_MODE = 313,
- SDLK_COMPOSE = 314, SDLK_HELP = 315, SDLK_PRINT = 316, SDLK_SYSREQ = 317,
- SDLK_BREAK = 318, SDLK_MENU = 319, SDLK_POWER = 320, SDLK_EURO = 321,
- SDLK_UNDO = 322, SDLK_LAST
-};
-
-enum SDLMod {
- KMOD_NONE = 0x0000, KMOD_LSHIFT = 0x0001, KMOD_RSHIFT = 0x0002, KMOD_LCTRL = 0x0040,
- KMOD_RCTRL = 0x0080, KMOD_LALT = 0x0100, KMOD_RALT = 0x0200, KMOD_LMETA = 0x0400,
- KMOD_RMETA = 0x0800, KMOD_NUM = 0x1000, KMOD_CAPS = 0x2000, KMOD_MODE = 0x4000,
- KMOD_RESERVED = 0x8000
-};
-
void drawKeyboard(int tileBase, int mapBase, u16* saveSpace);
void restoreVRAM(int tileBase, int mapBase, u16* saveSpace);
void addKeyboardEvents();
diff --git a/backends/platform/gp2x/build/bundle.sh b/backends/platform/gp2x/build/bundle.sh
index b5e3161c9b..93ae45f0e3 100644
--- a/backends/platform/gp2x/build/bundle.sh
+++ b/backends/platform/gp2x/build/bundle.sh
@@ -23,6 +23,7 @@ cp ../../../../scummvm.gp2x ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../AUTHORS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../README ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../COPYING ./scummvm-gp2x-`date '+%Y-%m-%d'`/
+cp ../../../../COPYRIGHT ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../NEWS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../gui/themes/modern.ini ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../gui/themes/modern.zip ./scummvm-gp2x-`date '+%Y-%m-%d'`/
diff --git a/backends/platform/gp2x/events.cpp b/backends/platform/gp2x/events.cpp
index 80cdad924b..72b188afd2 100644
--- a/backends/platform/gp2x/events.cpp
+++ b/backends/platform/gp2x/events.cpp
@@ -65,7 +65,7 @@
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
{
if (key >= SDLK_F1 && key <= SDLK_F9) {
- return key - SDLK_F1 + 315;
+ return key - SDLK_F1 + Common::ASCII_F1;
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
return key - SDLK_KP0 + '0';
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
@@ -468,10 +468,10 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
break;
case GP2X_BUTTON_R:
if (GP2X_BUTTON_STATE_L == TRUE) {
- event.kbd.keycode = SDLK_0;
+ event.kbd.keycode = Common::KEYCODE_0;
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
} else {
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
}
break;
@@ -479,28 +479,28 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
if (GP2X_BUTTON_STATE_L == TRUE) {
event.type = Common::EVENT_QUIT;
} else {
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
}
break;
case GP2X_BUTTON_A:
- event.kbd.keycode = SDLK_PERIOD;
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_Y:
if (GP2X_BUTTON_STATE_L == TRUE) {
setZoomOnMouse();
} else {
- event.kbd.keycode = SDLK_SPACE;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
}
break;
case JOY_BUT_RETURN:
- event.kbd.keycode = SDLK_RETURN;
+ event.kbd.keycode = Common::KEYCODE_RETURN;
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
break;
case JOY_BUT_ZERO:
- event.kbd.keycode = SDLK_0;
+ event.kbd.keycode = Common::KEYCODE_0;
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
break;
@@ -514,7 +514,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
// displayMessageOnOSD("Left Trigger Pressed");
// break;
// } else if ((ev.jbutton.button == GP2X_BUTTON_R) && (ev.jbutton.button != GP2X_BUTTON_L)) {
- // event.kbd.keycode = SDLK_F5;
+ // event.kbd.keycode = Common::KEYCODE_F5;
// event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
// break;
// } else {
@@ -525,7 +525,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
if (GP2X_BUTTON_STATE_L == TRUE) {
displayMessageOnOSD("Setting CPU Speed at 230MHz");
GP2X_setCpuspeed(200);
- //event.kbd.keycode = SDLK_PLUS;
+ //event.kbd.keycode = Common::KEYCODE_PLUS;
//event.kbd.ascii = mapKey(SDLK_PLUS, ev.key.keysym.mod, 0);
} else {
GP2X_mixer_move_volume(1);
@@ -536,7 +536,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
if (GP2X_BUTTON_STATE_L == TRUE) {
displayMessageOnOSD("Setting CPU Speed at 60MHz");
GP2X_setCpuspeed(60);
- //event.kbd.keycode = SDLK_MINUS;
+ //event.kbd.keycode = Common::KEYCODE_MINUS;
//event.kbd.ascii = mapKey(SDLK_MINUS, ev.key.keysym.mod, 0);
} else {
GP2X_mixer_move_volume(0);
@@ -564,26 +564,26 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
event.kbd.flags = 0;
switch (ev.jbutton.button) {
case GP2X_BUTTON_SELECT:
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_A:
- event.kbd.keycode = SDLK_PERIOD;
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_Y:
-// event.kbd.keycode = SDLK_SPACE;
+// event.kbd.keycode = Common::KEYCODE_SPACE;
// event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_START:
- event.kbd.keycode = SDLK_RETURN;
+ event.kbd.keycode = Common::KEYCODE_RETURN;
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_L:
GP2X_BUTTON_STATE_L = FALSE;
break;
case GP2X_BUTTON_R:
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_VOLUP:
diff --git a/backends/platform/gp2x/gp2x-common.h b/backends/platform/gp2x/gp2x-common.h
index 4c91a00247..68f2fb997e 100644
--- a/backends/platform/gp2x/gp2x-common.h
+++ b/backends/platform/gp2x/gp2x-common.h
@@ -90,11 +90,8 @@ public:
// The screen will not be updated to reflect the new bitmap
void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h);
- // Copies the screen to a buffer
- bool grabRawScreen(Graphics::Surface *surf);
-
- // Clear the screen
- void clearScreen();
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
// Update the dirty areas of the screen
void updateScreen();
diff --git a/backends/platform/gp2x/graphics.cpp b/backends/platform/gp2x/graphics.cpp
index a482689e43..c3ed5c627c 100644
--- a/backends/platform/gp2x/graphics.cpp
+++ b/backends/platform/gp2x/graphics.cpp
@@ -687,22 +687,6 @@ void OSystem_GP2X::setZoomOnMouse() {
}
}
-void OSystem_GP2X::clearScreen() {
- assert (_transactionMode == kTransactionNone);
-
- // Try to lock the screen surface
- if (SDL_LockSurface(_screen) == -1)
- error("SDL_LockSurface failed: %s", SDL_GetError());
-
- byte *dst = (byte *)_screen->pixels;
-
- // Clear the screen
- memset(dst, 0, _screenWidth * _screenHeight);
-
- // Unlock the screen surface
- SDL_UnlockSurface(_screen);
-}
-
void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
assert (_transactionMode == kTransactionNone);
assert(src);
@@ -772,15 +756,19 @@ void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, in
SDL_UnlockSurface(_screen);
}
-// TIDY: DIRTY HACK: Try a REALLY simple version of grabRawScreen to
-// debug why it will not work on the GP2X.
-bool OSystem_GP2X::grabRawScreen(Graphics::Surface *surf) {
- assert(surf);
+Graphics::Surface *OSystem_GP2X::lockScreen() {
+ _framebuffer.pixels = _screen->pixels;
+ _framebuffer.w = _screen->w;
+ _framebuffer.h = _screen->h;
+ _framebuffer.pitch = _screen->pitch;
+ _framebuffer.bytesPerPixel = 1;
- surf->create(_screenWidth, _screenHeight, 1);
- memcpy(surf->pixels, _screen->pixels, _screenWidth * _screenHeight);
+ return &_framebuffer;
+}
- return true;
+void OSystem_GP2X::unlockScreen() {
+ // Force screen update
+ _forceFull = true;
}
void OSystem_GP2X::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
diff --git a/backends/platform/gp32/gp32_osys.cpp b/backends/platform/gp32/gp32_osys.cpp
index ab2ac1616b..f6e0a10bbc 100644
--- a/backends/platform/gp32/gp32_osys.cpp
+++ b/backends/platform/gp32/gp32_osys.cpp
@@ -209,14 +209,18 @@ void OSystem_GP32::copyRectToScreen(const byte *src, int pitch, int x, int y, in
}
}
-bool OSystem_GP32::grabRawScreen(Graphics::Surface *surf) {
- assert(surf);
+Graphics::Surface *OSystem_GP32::lockScreen() {
+ _framebuffer.pixels = _gameScreen;
+ _framebuffer.w = _screenWidth;
+ _framebuffer.h = _screenHeight;
+ _framebuffer.pitch = _screenWidth;
+ _framebuffer.bytesPerPixel = 1;
- surf->create(_screenWidth, _screenHeight, 1);
-
- memcpy(surf->pixels, _gameScreen, _screenWidth * _screenHeight);
+ return &_framebuffer;
+}
- return true;
+void OSystem_GP32::unlockScreen() {
+ // The screen is always completely update anyway, so we don't have to force a full update here.
}
//TODO: Implement Dirty rect?
@@ -524,8 +528,10 @@ bool OSystem_GP32::pollEvent(Common::Event &event) {
event.type = Common::EVENT_KEYDOWN;
if (_overlayVisible)
event.kbd.keycode = event.kbd.ascii = 13;
- else
- event.kbd.keycode = event.kbd.ascii = 319;
+ else {
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
+ }
return true;
}
if (ev.button == GPC_VK_SELECT) { // SELECT = pause
@@ -596,8 +602,10 @@ bool OSystem_GP32::pollEvent(Common::Event &event) {
event.type = Common::EVENT_KEYUP;
if (_overlayVisible)
event.kbd.keycode = event.kbd.ascii = 13;
- else
- event.kbd.keycode = event.kbd.ascii = 319;
+ else {
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
+ }
return true;
}
if (ev.button == GPC_VK_SELECT) {
diff --git a/backends/platform/gp32/gp32_osys.h b/backends/platform/gp32/gp32_osys.h
index fa8a0903ad..94578e8e15 100644
--- a/backends/platform/gp32/gp32_osys.h
+++ b/backends/platform/gp32/gp32_osys.h
@@ -49,6 +49,8 @@ protected:
uint16 *_tmpScreen, *_hwScreen;
OverlayColor *_overlayBuffer;
+ Graphics::Surface _framebuffer;
+
int _overlayWidth, _overlayHeight;
bool _overlayVisible;
uint32 _shakePos;
@@ -111,7 +113,8 @@ public:
void grabOverlay(OverlayColor *buf, int pitch);
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
- bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
int16 getOverlayHeight();
int16 getOverlayWidth();
diff --git a/backends/platform/maemo/hildon.cpp b/backends/platform/maemo/hildon.cpp
index cd23617685..d4f2aa122d 100644
--- a/backends/platform/maemo/hildon.cpp
+++ b/backends/platform/maemo/hildon.cpp
@@ -26,9 +26,10 @@
#include <hildon-widgets/hildon-app.h>
#include <gtk/gtk.h>
#include <libosso.h>
+#include "base/internal_version.h"
#define OSSO_APP_NAME "scummvm"
-#define OSSO_APP_VERSION "0.9.0CVS"
+#define OSSO_APP_VERSION SCUMMVM_VERSION
#define OSSO_APP_SERVICE "org.scummvm."OSSO_APP_NAME
#define OSSO_APP_OBJECT "/org/scummvm/"OSSO_APP_NAME
#define OSSO_APP_IFACE "org.scummvm."OSSO_APP_NAME
diff --git a/backends/platform/maemo/main.cpp b/backends/platform/maemo/main.cpp
index 40b2efb626..73a5aff7bc 100644
--- a/backends/platform/maemo/main.cpp
+++ b/backends/platform/maemo/main.cpp
@@ -33,6 +33,7 @@
#include "backends/platform/maemo/maemo-sdl.h"
#include "base/main.h"
+#include "base/internal_version.h"
#include <hildon-widgets/hildon-app.h>
#include <gtk/gtk.h>
#include <libosso.h>
@@ -41,7 +42,7 @@
#include <sys/resource.h>
#define OSSO_APP_NAME "scummvm"
-#define OSSO_APP_VERSION "0.9.0CVS"
+#define OSSO_APP_VERSION SCUMMVM_VERSION
void set_doubling(unsigned char enable) {
return;
diff --git a/backends/platform/morphos/morphos.cpp b/backends/platform/morphos/morphos.cpp
index 66525a7664..7375ecbe46 100644
--- a/backends/platform/morphos/morphos.cpp
+++ b/backends/platform/morphos/morphos.cpp
@@ -838,7 +838,7 @@ bool OSystem_MorphOS::pollEvent(Common::Event &event)
/*
* Function key
*/
- event.kbd.ascii = (ScummMsg->Code-RAWKEY_F1)+315;
+ event.kbd.ascii = (ScummMsg->Code-RAWKEY_F1)+Common::ASCII_F1;
event.kbd.keycode = 0;
}
else if (ScummMsg->Code == RAWKEY_F11 || ScummMsg->Code == RAWKEY_F12)
diff --git a/backends/platform/null/null.cpp b/backends/platform/null/null.cpp
index 963b3429f5..250ca0fb29 100644
--- a/backends/platform/null/null.cpp
+++ b/backends/platform/null/null.cpp
@@ -63,7 +63,8 @@ public:
virtual void grabPalette(byte *colors, uint start, uint num);
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
virtual void updateScreen();
- virtual bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
virtual void setShakePos(int shakeOffset);
virtual void showOverlay();
@@ -189,8 +190,11 @@ void OSystem_NULL::copyRectToScreen(const byte *buf, int pitch, int x, int y, in
void OSystem_NULL::updateScreen() {
}
-bool OSystem_NULL::grabRawScreen(Graphics::Surface *surf) {
- return false;
+Graphics::Surface *OSystem_NULL::lockScreen() {
+ return 0;
+}
+
+void OSystem_NULL::unlockScreen() {
}
void OSystem_NULL::setShakePos(int shakeOffset) {
diff --git a/backends/platform/ps2/Gs2dScreen.cpp b/backends/platform/ps2/Gs2dScreen.cpp
index 4829027f15..1de3c5e8c8 100644
--- a/backends/platform/ps2/Gs2dScreen.cpp
+++ b/backends/platform/ps2/Gs2dScreen.cpp
@@ -364,13 +364,6 @@ void Gs2dScreen::copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w
}
}
-void Gs2dScreen::clearScreen(void) {
- WaitSema(g_DmacSema);
- memset(_screenBuf, 0, _width * _height);
- _screenChanged = true;
- SignalSema(g_DmacSema);
-}
-
void Gs2dScreen::setPalette(const uint32 *pal, uint8 start, uint16 num) {
assert(start + num <= 256);
@@ -393,11 +386,20 @@ void Gs2dScreen::grabPalette(uint32 *pal, uint8 start, uint16 num) {
}
}
-void Gs2dScreen::grabScreen(Graphics::Surface *surf) {
- assert(surf);
+Graphics::Surface *Gs2dScreen::lockScreen() {
WaitSema(g_DmacSema);
- surf->create(_width, _height, 1);
- memcpy(surf->pixels, _screenBuf, _width * _height);
+
+ _framebuffer.pixels = _screen->pixels;
+ _framebuffer.w = _screen->w;
+ _framebuffer.h = _screen->h;
+ _framebuffer.pitch = _screen->pitch;
+ _framebuffer.bytesPerPixel = 1;
+
+ return &_framebuffer;
+}
+
+void Gs2dScreen::unlockScreen() {
+ _screenChanged = true;
SignalSema(g_DmacSema);
}
diff --git a/backends/platform/ps2/Gs2dScreen.h b/backends/platform/ps2/Gs2dScreen.h
index 353e577980..471ec87789 100644
--- a/backends/platform/ps2/Gs2dScreen.h
+++ b/backends/platform/ps2/Gs2dScreen.h
@@ -56,13 +56,13 @@ public:
void copyPrintfOverlay(const uint8* buf);
void clearPrintfOverlay(void);
- void clearScreen(void);
void copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h);
void setPalette(const uint32 *pal, uint8 start, uint16 num);
void updateScreen(void);
void grabPalette(uint32 *pal, uint8 start, uint16 num);
- void grabScreen(Graphics::Surface *surf);
+ Graphics::Surface *lockScreen();
+ void unlockScreen();
//- overlay routines
void copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h);
void grabOverlay(uint16 *buf, uint16 pitch);
@@ -99,6 +99,8 @@ private:
uint32 _mouseScaleX, _mouseScaleY;
uint8 _mTraCol;
+ Graphics::Surface _framebuffer;
+
int _shakePos;
bool _showMouse, _showOverlay, _screenChanged, _overlayChanged, _clutChanged;
diff --git a/backends/platform/ps2/ps2input.cpp b/backends/platform/ps2/ps2input.cpp
index a3f4a31e8f..a17d38b80d 100644
--- a/backends/platform/ps2/ps2input.cpp
+++ b/backends/platform/ps2/ps2input.cpp
@@ -31,7 +31,6 @@
#include "backends/platform/ps2/ps2input.h"
#include "backends/platform/ps2/ps2pad.h"
#include "backends/platform/ps2/systemps2.h"
-#include "backends/platform/ps2/sdlkeys.h"
#include "common/events.h"
#include "common/system.h"
@@ -96,15 +95,15 @@ void Ps2Input::warpTo(uint16 x, uint16 y) {
#define PAD_CHECK_TIME 20
int Ps2Input::mapKey(int key, int mod) { // copied from sdl backend
- if (key >= SDLK_F1 && key <= SDLK_F9) {
- return key - SDLK_F1 + 315;
- } else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
- return key - SDLK_KP0 + '0';
- } else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
+ if (key >= Common::KEYCODE_F1 && key <= Common::KEYCODE_F9) {
+ return key - Common::KEYCODE_F1 + Common::ASCII_F1;
+ } else if (key >= Common::KEYCODE_KP0 && key <= Common::KEYCODE_KP9) {
+ return key - Common::KEYCODE_KP0 + '0';
+ } else if (key >= Common::KEYCODE_UP && key <= Common::KEYCODE_PAGEDOWN) {
return key;
} else if (key >= 'a' && key <= 'z' && mod & Common::KBD_SHIFT) {
return key & ~0x20;
- } else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
+ } else if (key >= Common::KEYCODE_NUMLOCK && key <= Common::KEYCODE_EURO) {
return 0;
}
return key;
@@ -142,17 +141,17 @@ bool Ps2Input::pollEvent(Common::Event *event) {
PS2KbdRawKey key;
if (PS2KbdReadRaw(&key) == 1) {
if (_usbToSdlk[key.key]) {
- if ((_usbToSdlk[key.key] == SDLK_LSHIFT) || (_usbToSdlk[key.key] == SDLK_RSHIFT)) {
+ if ((_usbToSdlk[key.key] == Common::KEYCODE_LSHIFT) || (_usbToSdlk[key.key] == Common::KEYCODE_RSHIFT)) {
if (key.state & 1)
_keyFlags |= Common::KBD_SHIFT;
else
_keyFlags &= ~Common::KBD_SHIFT;
- } else if ((_usbToSdlk[key.key] == SDLK_LCTRL) || (_usbToSdlk[key.key] == SDLK_RCTRL)) {
+ } else if ((_usbToSdlk[key.key] == Common::KEYCODE_LCTRL) || (_usbToSdlk[key.key] == Common::KEYCODE_RCTRL)) {
if (key.state & 1)
_keyFlags |= Common::KBD_CTRL;
else
_keyFlags &= ~Common::KBD_CTRL;
- } else if ((_usbToSdlk[key.key] == SDLK_LALT) || (_usbToSdlk[key.key] == SDLK_RALT)) {
+ } else if ((_usbToSdlk[key.key] == Common::KEYCODE_LALT) || (_usbToSdlk[key.key] == Common::KEYCODE_RALT)) {
if (key.state & 1)
_keyFlags |= Common::KBD_ALT;
else
@@ -256,106 +255,106 @@ const int Ps2Input::_usbToSdlk[0x100] = {
/* 01 */ 0,
/* 02 */ 0,
/* 03 */ 0,
- /* 04 */ SDLK_a,
- /* 05 */ SDLK_b,
- /* 06 */ SDLK_c,
- /* 07 */ SDLK_d,
- /* 08 */ SDLK_e,
- /* 09 */ SDLK_f,
- /* 0A */ SDLK_g,
- /* 0B */ SDLK_h,
- /* 0C */ SDLK_i,
- /* 0D */ SDLK_j,
- /* 0E */ SDLK_k,
- /* 0F */ SDLK_l,
- /* 10 */ SDLK_m,
- /* 11 */ SDLK_n,
- /* 12 */ SDLK_o,
- /* 13 */ SDLK_p,
- /* 14 */ SDLK_q,
- /* 15 */ SDLK_r,
- /* 16 */ SDLK_s,
- /* 17 */ SDLK_t,
- /* 18 */ SDLK_u,
- /* 19 */ SDLK_v,
- /* 1A */ SDLK_w,
- /* 1B */ SDLK_x,
- /* 1C */ SDLK_y,
- /* 1D */ SDLK_z,
- /* 1E */ SDLK_1,
- /* 1F */ SDLK_2,
- /* 20 */ SDLK_3,
- /* 21 */ SDLK_4,
- /* 22 */ SDLK_5,
- /* 23 */ SDLK_6,
- /* 24 */ SDLK_7,
- /* 25 */ SDLK_8,
- /* 26 */ SDLK_9,
- /* 27 */ SDLK_0,
- /* 28 */ SDLK_RETURN,
- /* 29 */ SDLK_ESCAPE,
- /* 2A */ SDLK_BACKSPACE,
- /* 2B */ SDLK_TAB,
- /* 2C */ SDLK_SPACE,
- /* 2D */ SDLK_MINUS,
- /* 2E */ SDLK_EQUALS,
- /* 2F */ SDLK_LEFTBRACKET,
- /* 30 */ SDLK_RIGHTBRACKET,
- /* 31 */ SDLK_BACKSLASH,
- /* 32 */ SDLK_HASH,
- /* 33 */ SDLK_SEMICOLON,
- /* 34 */ SDLK_QUOTE,
- /* 35 */ SDLK_BACKQUOTE,
- /* 36 */ SDLK_COMMA,
- /* 37 */ SDLK_PERIOD,
- /* 38 */ SDLK_SLASH,
- /* 39 */ SDLK_CAPSLOCK,
- /* 3A */ SDLK_F1,
- /* 3B */ SDLK_F2,
- /* 3C */ SDLK_F3,
- /* 3D */ SDLK_F4,
- /* 3E */ SDLK_F5,
- /* 3F */ SDLK_F6,
- /* 40 */ SDLK_F7,
- /* 41 */ SDLK_F8,
- /* 42 */ SDLK_F9,
- /* 43 */ SDLK_F10,
- /* 44 */ SDLK_F11,
- /* 45 */ SDLK_F12,
- /* 46 */ SDLK_PRINT,
- /* 47 */ SDLK_SCROLLOCK,
- /* 48 */ SDLK_PAUSE,
- /* 49 */ SDLK_INSERT,
- /* 4A */ SDLK_HOME,
- /* 4B */ SDLK_PAGEUP,
- /* 4C */ SDLK_DELETE,
- /* 4D */ SDLK_END,
- /* 4E */ SDLK_PAGEDOWN,
- /* 4F */ SDLK_RIGHT,
- /* 50 */ SDLK_LEFT,
- /* 51 */ SDLK_DOWN,
- /* 52 */ SDLK_UP,
- /* 53 */ SDLK_NUMLOCK,
- /* 54 */ SDLK_KP_DIVIDE,
- /* 55 */ SDLK_KP_MULTIPLY,
- /* 56 */ SDLK_KP_MINUS,
- /* 57 */ SDLK_KP_PLUS,
- /* 58 */ SDLK_KP_ENTER,
- /* 59 */ SDLK_KP1,
- /* 5A */ SDLK_KP2,
- /* 5B */ SDLK_KP3,
- /* 5C */ SDLK_KP4,
- /* 5D */ SDLK_KP5,
- /* 5E */ SDLK_KP6,
- /* 5F */ SDLK_KP7,
- /* 60 */ SDLK_KP8,
- /* 61 */ SDLK_KP9,
- /* 62 */ SDLK_KP0,
- /* 63 */ SDLK_KP_PERIOD,
+ /* 04 */ Common::KEYCODE_a,
+ /* 05 */ Common::KEYCODE_b,
+ /* 06 */ Common::KEYCODE_c,
+ /* 07 */ Common::KEYCODE_d,
+ /* 08 */ Common::KEYCODE_e,
+ /* 09 */ Common::KEYCODE_f,
+ /* 0A */ Common::KEYCODE_g,
+ /* 0B */ Common::KEYCODE_h,
+ /* 0C */ Common::KEYCODE_i,
+ /* 0D */ Common::KEYCODE_j,
+ /* 0E */ Common::KEYCODE_k,
+ /* 0F */ Common::KEYCODE_l,
+ /* 10 */ Common::KEYCODE_m,
+ /* 11 */ Common::KEYCODE_n,
+ /* 12 */ Common::KEYCODE_o,
+ /* 13 */ Common::KEYCODE_p,
+ /* 14 */ Common::KEYCODE_q,
+ /* 15 */ Common::KEYCODE_r,
+ /* 16 */ Common::KEYCODE_s,
+ /* 17 */ Common::KEYCODE_t,
+ /* 18 */ Common::KEYCODE_u,
+ /* 19 */ Common::KEYCODE_v,
+ /* 1A */ Common::KEYCODE_w,
+ /* 1B */ Common::KEYCODE_x,
+ /* 1C */ Common::KEYCODE_y,
+ /* 1D */ Common::KEYCODE_z,
+ /* 1E */ Common::KEYCODE_1,
+ /* 1F */ Common::KEYCODE_2,
+ /* 20 */ Common::KEYCODE_3,
+ /* 21 */ Common::KEYCODE_4,
+ /* 22 */ Common::KEYCODE_5,
+ /* 23 */ Common::KEYCODE_6,
+ /* 24 */ Common::KEYCODE_7,
+ /* 25 */ Common::KEYCODE_8,
+ /* 26 */ Common::KEYCODE_9,
+ /* 27 */ Common::KEYCODE_0,
+ /* 28 */ Common::KEYCODE_RETURN,
+ /* 29 */ Common::KEYCODE_ESCAPE,
+ /* 2A */ Common::KEYCODE_BACKSPACE,
+ /* 2B */ Common::KEYCODE_TAB,
+ /* 2C */ Common::KEYCODE_SPACE,
+ /* 2D */ Common::KEYCODE_MINUS,
+ /* 2E */ Common::KEYCODE_EQUALS,
+ /* 2F */ Common::KEYCODE_LEFTBRACKET,
+ /* 30 */ Common::KEYCODE_RIGHTBRACKET,
+ /* 31 */ Common::KEYCODE_BACKSLASH,
+ /* 32 */ Common::KEYCODE_HASH,
+ /* 33 */ Common::KEYCODE_SEMICOLON,
+ /* 34 */ Common::KEYCODE_QUOTE,
+ /* 35 */ Common::KEYCODE_BACKQUOTE,
+ /* 36 */ Common::KEYCODE_COMMA,
+ /* 37 */ Common::KEYCODE_PERIOD,
+ /* 38 */ Common::KEYCODE_SLASH,
+ /* 39 */ Common::KEYCODE_CAPSLOCK,
+ /* 3A */ Common::KEYCODE_F1,
+ /* 3B */ Common::KEYCODE_F2,
+ /* 3C */ Common::KEYCODE_F3,
+ /* 3D */ Common::KEYCODE_F4,
+ /* 3E */ Common::KEYCODE_F5,
+ /* 3F */ Common::KEYCODE_F6,
+ /* 40 */ Common::KEYCODE_F7,
+ /* 41 */ Common::KEYCODE_F8,
+ /* 42 */ Common::KEYCODE_F9,
+ /* 43 */ Common::KEYCODE_F10,
+ /* 44 */ Common::KEYCODE_F11,
+ /* 45 */ Common::KEYCODE_F12,
+ /* 46 */ Common::KEYCODE_PRINT,
+ /* 47 */ Common::KEYCODE_SCROLLOCK,
+ /* 48 */ Common::KEYCODE_PAUSE,
+ /* 49 */ Common::KEYCODE_INSERT,
+ /* 4A */ Common::KEYCODE_HOME,
+ /* 4B */ Common::KEYCODE_PAGEUP,
+ /* 4C */ Common::KEYCODE_DELETE,
+ /* 4D */ Common::KEYCODE_END,
+ /* 4E */ Common::KEYCODE_PAGEDOWN,
+ /* 4F */ Common::KEYCODE_RIGHT,
+ /* 50 */ Common::KEYCODE_LEFT,
+ /* 51 */ Common::KEYCODE_DOWN,
+ /* 52 */ Common::KEYCODE_UP,
+ /* 53 */ Common::KEYCODE_NUMLOCK,
+ /* 54 */ Common::KEYCODE_KP_DIVIDE,
+ /* 55 */ Common::KEYCODE_KP_MULTIPLY,
+ /* 56 */ Common::KEYCODE_KP_MINUS,
+ /* 57 */ Common::KEYCODE_KP_PLUS,
+ /* 58 */ Common::KEYCODE_KP_ENTER,
+ /* 59 */ Common::KEYCODE_KP1,
+ /* 5A */ Common::KEYCODE_KP2,
+ /* 5B */ Common::KEYCODE_KP3,
+ /* 5C */ Common::KEYCODE_KP4,
+ /* 5D */ Common::KEYCODE_KP5,
+ /* 5E */ Common::KEYCODE_KP6,
+ /* 5F */ Common::KEYCODE_KP7,
+ /* 60 */ Common::KEYCODE_KP8,
+ /* 61 */ Common::KEYCODE_KP9,
+ /* 62 */ Common::KEYCODE_KP0,
+ /* 63 */ Common::KEYCODE_KP_PERIOD,
/* 64 */ 0,
/* 65 */ 0,
/* 66 */ 0,
- /* 67 */ SDLK_KP_EQUALS,
+ /* 67 */ Common::KEYCODE_KP_EQUALS,
/* 68 */ 0,
/* 69 */ 0,
/* 6A */ 0,
@@ -476,13 +475,13 @@ const int Ps2Input::_usbToSdlk[0x100] = {
/* DD */ 0,
/* DE */ 0,
/* DF */ 0,
- /* E0 */ SDLK_LCTRL,
- /* E1 */ SDLK_LSHIFT,
- /* E2 */ SDLK_LALT,
+ /* E0 */ Common::KEYCODE_LCTRL,
+ /* E1 */ Common::KEYCODE_LSHIFT,
+ /* E2 */ Common::KEYCODE_LALT,
/* E3 */ 0,
- /* E4 */ SDLK_RCTRL,
- /* E5 */ SDLK_RSHIFT,
- /* E6 */ SDLK_RALT,
+ /* E4 */ Common::KEYCODE_RCTRL,
+ /* E5 */ Common::KEYCODE_RSHIFT,
+ /* E6 */ Common::KEYCODE_RALT,
/* E7 */ 0,
/* E8 */ 0,
/* E9 */ 0,
@@ -511,22 +510,22 @@ const int Ps2Input::_usbToSdlk[0x100] = {
};
const int Ps2Input::_padCodes[16] = {
- SDLK_1, // Select
+ Common::KEYCODE_1, // Select
0, // L3
0, // R3
- SDLK_F5, // Start
+ Common::KEYCODE_F5, // Start
0, // Up
0, // Right
0, // Down
0, // Left
- SDLK_KP0, // L2
+ Common::KEYCODE_KP0, // L2
0, // R2
- SDLK_n, // L1
- SDLK_y, // R1
- SDLK_ESCAPE, // Triangle
+ Common::KEYCODE_n, // L1
+ Common::KEYCODE_y, // R1
+ Common::KEYCODE_ESCAPE, // Triangle
0, // Circle => Right mouse button
0, // Cross => Left mouse button
- SDLK_RETURN // Square
+ Common::KEYCODE_RETURN // Square
};
const int Ps2Input::_padFlags[16] = {
diff --git a/backends/platform/ps2/sdlkeys.h b/backends/platform/ps2/sdlkeys.h
deleted file mode 100644
index b2f783cedd..0000000000
--- a/backends/platform/ps2/sdlkeys.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/* copied from SDK_keysym.h */
-
-#ifndef __SDLKEYS_H__
-#define __SDLKEYS_H__
-
-enum SdlKeyCodes {
- SDLK_UNKNOWN = 0,
- SDLK_FIRST = 0,
- SDLK_BACKSPACE = 8,
- SDLK_TAB = 9,
- SDLK_CLEAR = 12,
- SDLK_RETURN = 13,
- SDLK_PAUSE = 19,
- SDLK_ESCAPE = 27,
- SDLK_SPACE = 32,
- SDLK_EXCLAIM = 33,
- SDLK_QUOTEDBL = 34,
- SDLK_HASH = 35,
- SDLK_DOLLAR = 36,
- SDLK_AMPERSAND = 38,
- SDLK_QUOTE = 39,
- SDLK_LEFTPAREN = 40,
- SDLK_RIGHTPAREN = 41,
- SDLK_ASTERISK = 42,
- SDLK_PLUS = 43,
- SDLK_COMMA = 44,
- SDLK_MINUS = 45,
- SDLK_PERIOD = 46,
- SDLK_SLASH = 47,
- SDLK_0 = 48,
- SDLK_1 = 49,
- SDLK_2 = 50,
- SDLK_3 = 51,
- SDLK_4 = 52,
- SDLK_5 = 53,
- SDLK_6 = 54,
- SDLK_7 = 55,
- SDLK_8 = 56,
- SDLK_9 = 57,
- SDLK_COLON = 58,
- SDLK_SEMICOLON = 59,
- SDLK_LESS = 60,
- SDLK_EQUALS = 61,
- SDLK_GREATER = 62,
- SDLK_QUESTION = 63,
- SDLK_AT = 64,
- /*
- Skip uppercase letters
- */
- SDLK_LEFTBRACKET = 91,
- SDLK_BACKSLASH = 92,
- SDLK_RIGHTBRACKET = 93,
- SDLK_CARET = 94,
- SDLK_UNDERSCORE = 95,
- SDLK_BACKQUOTE = 96,
- SDLK_a = 97,
- SDLK_b = 98,
- SDLK_c = 99,
- SDLK_d = 100,
- SDLK_e = 101,
- SDLK_f = 102,
- SDLK_g = 103,
- SDLK_h = 104,
- SDLK_i = 105,
- SDLK_j = 106,
- SDLK_k = 107,
- SDLK_l = 108,
- SDLK_m = 109,
- SDLK_n = 110,
- SDLK_o = 111,
- SDLK_p = 112,
- SDLK_q = 113,
- SDLK_r = 114,
- SDLK_s = 115,
- SDLK_t = 116,
- SDLK_u = 117,
- SDLK_v = 118,
- SDLK_w = 119,
- SDLK_x = 120,
- SDLK_y = 121,
- SDLK_z = 122,
- SDLK_DELETE = 127,
- /* End of ASCII mapped keysyms */
-
- /* International keyboard syms */
- SDLK_WORLD_0 = 160, /* 0xA0 */
- SDLK_WORLD_1 = 161,
- SDLK_WORLD_2 = 162,
- SDLK_WORLD_3 = 163,
- SDLK_WORLD_4 = 164,
- SDLK_WORLD_5 = 165,
- SDLK_WORLD_6 = 166,
- SDLK_WORLD_7 = 167,
- SDLK_WORLD_8 = 168,
- SDLK_WORLD_9 = 169,
- SDLK_WORLD_10 = 170,
- SDLK_WORLD_11 = 171,
- SDLK_WORLD_12 = 172,
- SDLK_WORLD_13 = 173,
- SDLK_WORLD_14 = 174,
- SDLK_WORLD_15 = 175,
- SDLK_WORLD_16 = 176,
- SDLK_WORLD_17 = 177,
- SDLK_WORLD_18 = 178,
- SDLK_WORLD_19 = 179,
- SDLK_WORLD_20 = 180,
- SDLK_WORLD_21 = 181,
- SDLK_WORLD_22 = 182,
- SDLK_WORLD_23 = 183,
- SDLK_WORLD_24 = 184,
- SDLK_WORLD_25 = 185,
- SDLK_WORLD_26 = 186,
- SDLK_WORLD_27 = 187,
- SDLK_WORLD_28 = 188,
- SDLK_WORLD_29 = 189,
- SDLK_WORLD_30 = 190,
- SDLK_WORLD_31 = 191,
- SDLK_WORLD_32 = 192,
- SDLK_WORLD_33 = 193,
- SDLK_WORLD_34 = 194,
- SDLK_WORLD_35 = 195,
- SDLK_WORLD_36 = 196,
- SDLK_WORLD_37 = 197,
- SDLK_WORLD_38 = 198,
- SDLK_WORLD_39 = 199,
- SDLK_WORLD_40 = 200,
- SDLK_WORLD_41 = 201,
- SDLK_WORLD_42 = 202,
- SDLK_WORLD_43 = 203,
- SDLK_WORLD_44 = 204,
- SDLK_WORLD_45 = 205,
- SDLK_WORLD_46 = 206,
- SDLK_WORLD_47 = 207,
- SDLK_WORLD_48 = 208,
- SDLK_WORLD_49 = 209,
- SDLK_WORLD_50 = 210,
- SDLK_WORLD_51 = 211,
- SDLK_WORLD_52 = 212,
- SDLK_WORLD_53 = 213,
- SDLK_WORLD_54 = 214,
- SDLK_WORLD_55 = 215,
- SDLK_WORLD_56 = 216,
- SDLK_WORLD_57 = 217,
- SDLK_WORLD_58 = 218,
- SDLK_WORLD_59 = 219,
- SDLK_WORLD_60 = 220,
- SDLK_WORLD_61 = 221,
- SDLK_WORLD_62 = 222,
- SDLK_WORLD_63 = 223,
- SDLK_WORLD_64 = 224,
- SDLK_WORLD_65 = 225,
- SDLK_WORLD_66 = 226,
- SDLK_WORLD_67 = 227,
- SDLK_WORLD_68 = 228,
- SDLK_WORLD_69 = 229,
- SDLK_WORLD_70 = 230,
- SDLK_WORLD_71 = 231,
- SDLK_WORLD_72 = 232,
- SDLK_WORLD_73 = 233,
- SDLK_WORLD_74 = 234,
- SDLK_WORLD_75 = 235,
- SDLK_WORLD_76 = 236,
- SDLK_WORLD_77 = 237,
- SDLK_WORLD_78 = 238,
- SDLK_WORLD_79 = 239,
- SDLK_WORLD_80 = 240,
- SDLK_WORLD_81 = 241,
- SDLK_WORLD_82 = 242,
- SDLK_WORLD_83 = 243,
- SDLK_WORLD_84 = 244,
- SDLK_WORLD_85 = 245,
- SDLK_WORLD_86 = 246,
- SDLK_WORLD_87 = 247,
- SDLK_WORLD_88 = 248,
- SDLK_WORLD_89 = 249,
- SDLK_WORLD_90 = 250,
- SDLK_WORLD_91 = 251,
- SDLK_WORLD_92 = 252,
- SDLK_WORLD_93 = 253,
- SDLK_WORLD_94 = 254,
- SDLK_WORLD_95 = 255, /* 0xFF */
-
- /* Numeric keypad */
- SDLK_KP0 = 256,
- SDLK_KP1 = 257,
- SDLK_KP2 = 258,
- SDLK_KP3 = 259,
- SDLK_KP4 = 260,
- SDLK_KP5 = 261,
- SDLK_KP6 = 262,
- SDLK_KP7 = 263,
- SDLK_KP8 = 264,
- SDLK_KP9 = 265,
- SDLK_KP_PERIOD = 266,
- SDLK_KP_DIVIDE = 267,
- SDLK_KP_MULTIPLY = 268,
- SDLK_KP_MINUS = 269,
- SDLK_KP_PLUS = 270,
- SDLK_KP_ENTER = 271,
- SDLK_KP_EQUALS = 272,
-
- /* Arrows + Home/End pad */
- SDLK_UP = 273,
- SDLK_DOWN = 274,
- SDLK_RIGHT = 275,
- SDLK_LEFT = 276,
- SDLK_INSERT = 277,
- SDLK_HOME = 278,
- SDLK_END = 279,
- SDLK_PAGEUP = 280,
- SDLK_PAGEDOWN = 281,
-
- /* Function keys */
- SDLK_F1 = 282,
- SDLK_F2 = 283,
- SDLK_F3 = 284,
- SDLK_F4 = 285,
- SDLK_F5 = 286,
- SDLK_F6 = 287,
- SDLK_F7 = 288,
- SDLK_F8 = 289,
- SDLK_F9 = 290,
- SDLK_F10 = 291,
- SDLK_F11 = 292,
- SDLK_F12 = 293,
- SDLK_F13 = 294,
- SDLK_F14 = 295,
- SDLK_F15 = 296,
-
- /* Key state modifier keys */
- SDLK_NUMLOCK = 300,
- SDLK_CAPSLOCK = 301,
- SDLK_SCROLLOCK = 302,
- SDLK_RSHIFT = 303,
- SDLK_LSHIFT = 304,
- SDLK_RCTRL = 305,
- SDLK_LCTRL = 306,
- SDLK_RALT = 307,
- SDLK_LALT = 308,
- SDLK_RMETA = 309,
- SDLK_LMETA = 310,
- SDLK_LSUPER = 311, /* Left "Windows" key */
- SDLK_RSUPER = 312, /* Right "Windows" key */
- SDLK_MODE = 313, /* "Alt Gr" key */
- SDLK_COMPOSE = 314, /* Multi-key compose key */
-
- /* Miscellaneous function keys */
- SDLK_HELP = 315,
- SDLK_PRINT = 316,
- SDLK_SYSREQ = 317,
- SDLK_BREAK = 318,
- SDLK_MENU = 319,
- SDLK_POWER = 320, /* Power Macintosh power key */
- SDLK_EURO = 321, /* Some european keyboards */
- SDLK_UNDO = 322, /* Atari keyboard has Undo */
-
- /* Add any other keys here */
-
- SDLK_LAST
-};
-
-#endif
-
-
diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp
index 80d5ab9c83..32290bddea 100644
--- a/backends/platform/ps2/systemps2.cpp
+++ b/backends/platform/ps2/systemps2.cpp
@@ -326,7 +326,7 @@ OSystem_PS2::OSystem_PS2(const char *elfPath) {
}
_screen->wantAnim(false);
- _screen->clearScreen();
+ clearScreen();
}
OSystem_PS2::~OSystem_PS2(void) {
@@ -510,9 +510,12 @@ void OSystem_PS2::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
_screen->copyScreenRect((const uint8*)buf, pitch, x, y, w, h);
}
-bool OSystem_PS2::grabRawScreen(Graphics::Surface *surf) {
- _screen->grabScreen(surf);
- return true;
+Graphics::Surface *OSystem_PS2::lockScreen() {
+ return _screen->lockScreen();
+}
+
+void OSystem_PS2::unlockScreen() {
+ _screen->unlockScreen();
}
void OSystem_PS2::updateScreen(void) {
diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h
index 4a3764666e..b5c84d3b95 100644
--- a/backends/platform/ps2/systemps2.h
+++ b/backends/platform/ps2/systemps2.h
@@ -56,7 +56,8 @@ public:
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
virtual void setShakePos(int shakeOffset);
virtual void grabPalette(byte *colors, uint start, uint num);
- virtual bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
virtual void updateScreen();
virtual void showOverlay();
diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp
index bee422d36f..20a50c1b47 100644
--- a/backends/platform/psp/osys_psp.cpp
+++ b/backends/platform/psp/osys_psp.cpp
@@ -209,13 +209,18 @@ void OSystem_PSP::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
}
}
-bool OSystem_PSP::grabRawScreen(Graphics::Surface *surf) {
- assert(surf);
+Graphics::Surface *OSystem_PSP::lockScreen() {
+ _framebuffer.pixels = _offscreen;
+ _framebuffer.w = _screenWidth;
+ _framebuffer.h = _screenHeight;
+ _framebuffer.pitch = _screenWidth;
+ _framebuffer.bytesPerPixel = 1;
- surf->create(_screenWidth, _screenHeight, 1);
- memcpy(surf->pixels, _offscreen, _screenWidth * _screenHeight);
-
- return true;
+ return &_framebuffer;
+}
+
+void OSystem_PSP::unlockScreen() {
+ // The screen is always completely update anyway, so we don't have to force a full update here.
}
void OSystem_PSP::updateScreen() {
@@ -442,19 +447,19 @@ bool OSystem_PSP::pollEvent(Common::Event &event) {
event.kbd.flags = 0;
if (buttonsChanged & PSP_CTRL_LTRIGGER) {
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = 27;
} else if (buttonsChanged & PSP_CTRL_RTRIGGER) {
- event.kbd.keycode = SDLK_RETURN;
+ event.kbd.keycode = Common::KEYCODE_RETURN;
event.kbd.ascii = 13;
} else if (buttonsChanged & PSP_CTRL_START) {
- event.kbd.keycode = SDLK_F5;
- event.kbd.ascii = 319;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = Common::ASCII_F5;
/* } else if (buttonsChanged & PSP_CTRL_SELECT) {
- event.kbd.keycode = SDLK_0;
+ event.kbd.keycode = Common::KEYCODE_0;
event.kbd.ascii = '0';
*/ } else if (buttonsChanged & PSP_CTRL_SQUARE) {
- event.kbd.keycode = SDLK_PERIOD;
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = '.';
}
diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h
index b833f5e179..d5d3669a22 100644
--- a/backends/platform/psp/osys_psp.h
+++ b/backends/platform/psp/osys_psp.h
@@ -27,6 +27,7 @@
#include "common/scummsys.h"
#include "common/system.h"
#include "backends/intern.h"
+#include "graphics/surface.h"
#include <SDL.h>
@@ -62,6 +63,7 @@ protected:
bool _overlayVisible;
uint32 _shakePos;
+ Graphics::Surface _framebuffer;
bool _mouseVisible;
int _mouseX, _mouseY;
@@ -101,7 +103,8 @@ public:
virtual int16 getHeight();
virtual void setPalette(const byte *colors, uint start, uint num);
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
- virtual bool grabRawScreen(Graphics::Surface *surf);
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
virtual void updateScreen();
virtual void setShakePos(int shakeOffset);
diff --git a/backends/platform/psp/osys_psp_gu.cpp b/backends/platform/psp/osys_psp_gu.cpp
index 5175460007..a939229c84 100644
--- a/backends/platform/psp/osys_psp_gu.cpp
+++ b/backends/platform/psp/osys_psp_gu.cpp
@@ -59,11 +59,11 @@ unsigned char *keyboard_letters;
unsigned char *keyboard_letters_shift;
unsigned char kbd_ascii[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '[', ']', '\\', ';', '\'', ',', '.', '/', '`'};
-unsigned int kbd_code[] = {SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9, SDLK_0, SDLK_MINUS, SDLK_EQUALS, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET,
- SDLK_BACKSLASH, SDLK_SEMICOLON, SDLK_QUOTE, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH, SDLK_BACKQUOTE};
+Common::KeyCode kbd_code[] = {Common::KEYCODE_1, Common::KEYCODE_2, Common::KEYCODE_3, Common::KEYCODE_4, Common::KEYCODE_5, Common::KEYCODE_6, Common::KEYCODE_7, Common::KEYCODE_8, Common::KEYCODE_9, Common::KEYCODE_0, Common::KEYCODE_MINUS, Common::KEYCODE_EQUALS, Common::KEYCODE_LEFTBRACKET, Common::KEYCODE_RIGHTBRACKET,
+ Common::KEYCODE_BACKSLASH, Common::KEYCODE_SEMICOLON, Common::KEYCODE_QUOTE, Common::KEYCODE_COMMA, Common::KEYCODE_PERIOD, Common::KEYCODE_SLASH, Common::KEYCODE_BACKQUOTE};
unsigned char kbd_ascii_cl[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '{', '}', '|', ':', '"', '<', '>', '?', '~'};
-unsigned int kbd_code_cl[] = {SDLK_EXCLAIM, SDLK_AT, SDLK_HASH, SDLK_DOLLAR, 37, SDLK_CARET, SDLK_AMPERSAND, SDLK_ASTERISK, SDLK_LEFTPAREN, SDLK_RIGHTPAREN, SDLK_UNDERSCORE,
- SDLK_PLUS, 123, 125, 124, SDLK_COLON, SDLK_QUOTEDBL, SDLK_LESS, SDLK_GREATER, SDLK_QUESTION, 126};
+Common::KeyCode kbd_code_cl[] = {Common::KEYCODE_EXCLAIM, Common::KEYCODE_AT, Common::KEYCODE_HASH, Common::KEYCODE_DOLLAR, (Common::KeyCode)37, Common::KEYCODE_CARET, Common::KEYCODE_AMPERSAND, Common::KEYCODE_ASTERISK, Common::KEYCODE_LEFTPAREN, Common::KEYCODE_RIGHTPAREN, Common::KEYCODE_UNDERSCORE,
+ Common::KEYCODE_PLUS, (Common::KeyCode)123, (Common::KeyCode)125, (Common::KeyCode)124, Common::KEYCODE_COLON, Common::KEYCODE_QUOTEDBL, Common::KEYCODE_LESS, Common::KEYCODE_GREATER, Common::KEYCODE_QUESTION, (Common::KeyCode)126};
#define CAPS_LOCK (1 << 0)
#define SYMBOLS (1 << 1)
@@ -487,7 +487,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
if ( (buttonsChanged & PSP_CTRL_LEFT) && !(pad.Buttons & PSP_CTRL_LEFT)) {
event.kbd.flags = 0;
event.kbd.ascii = 0;
- event.kbd.keycode = SDLK_LEFT;
+ event.kbd.keycode = Common::KEYCODE_LEFT;
_prevButtons = pad.Buttons;
return true;
}
@@ -495,7 +495,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
if ( (buttonsChanged & PSP_CTRL_RIGHT) && !(pad.Buttons & PSP_CTRL_RIGHT)) {
event.kbd.flags = 0;
event.kbd.ascii = 0;
- event.kbd.keycode = SDLK_RIGHT;
+ event.kbd.keycode = Common::KEYCODE_RIGHT;
_prevButtons = pad.Buttons;
return true;
}
@@ -503,7 +503,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
if ( (buttonsChanged & PSP_CTRL_UP) && !(pad.Buttons & PSP_CTRL_UP)) {
event.kbd.flags = 0;
event.kbd.ascii = 0;
- event.kbd.keycode = SDLK_UP;
+ event.kbd.keycode = Common::KEYCODE_UP;
_prevButtons = pad.Buttons;
return true;
}
@@ -511,7 +511,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
if ( (buttonsChanged & PSP_CTRL_DOWN) && !(pad.Buttons & PSP_CTRL_DOWN)) {
event.kbd.flags = 0;
event.kbd.ascii = 0;
- event.kbd.keycode = SDLK_DOWN;
+ event.kbd.keycode = Common::KEYCODE_DOWN;
_prevButtons = pad.Buttons;
return true;
}
@@ -535,19 +535,19 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
switch(_keySelected) {
case 27:
event.kbd.ascii = ' ';
- event.kbd.keycode = SDLK_SPACE;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
break;
case 28:
event.kbd.ascii = 127;
- event.kbd.keycode = SDLK_DELETE;
+ event.kbd.keycode = Common::KEYCODE_DELETE;
break;
case 29:
event.kbd.ascii = 8;
- event.kbd.keycode = SDLK_BACKSPACE;
+ event.kbd.keycode = Common::KEYCODE_BACKSPACE;
break;
case 30:
event.kbd.ascii = 13;
- event.kbd.keycode = SDLK_RETURN;
+ event.kbd.keycode = Common::KEYCODE_RETURN;
break;
}
} else {
@@ -555,11 +555,11 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
case 0:
event.kbd.flags = 0;
event.kbd.ascii = 'a'+_keySelected-1;
- event.kbd.keycode = SDLK_a + _keySelected-1;
+ event.kbd.keycode = (Common::KeyCode)(Common::KEYCODE_a + _keySelected-1);
break;
case CAPS_LOCK:
event.kbd.ascii = 'A'+_keySelected-1;
- event.kbd.keycode = SDLK_a + _keySelected-1;
+ event.kbd.keycode = (Common::KeyCode)(Common::KEYCODE_a + _keySelected-1);
event.kbd.flags = Common::KBD_SHIFT;
break;
case SYMBOLS:
diff --git a/backends/platform/sdl/events.cpp b/backends/platform/sdl/events.cpp
index bc7f0eecde..2b3c2c18fe 100644
--- a/backends/platform/sdl/events.cpp
+++ b/backends/platform/sdl/events.cpp
@@ -52,14 +52,14 @@
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
{
if (key >= SDLK_F1 && key <= SDLK_F9) {
- return key - SDLK_F1 + 315;
+ return key - SDLK_F1 + Common::ASCII_F1;
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
return key - SDLK_KP0 + '0';
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
return key;
} else if (unicode) {
return unicode;
- } else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
+ } else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
return key & ~0x20;
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
return 0;
@@ -265,7 +265,7 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
return true;
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = ev.key.keysym.sym;
+ event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
return true;
@@ -278,7 +278,7 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
return true;
event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = ev.key.keysym.sym;
+ event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
b = event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());
@@ -337,19 +337,19 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
event.type = Common::EVENT_KEYDOWN;
switch (ev.jbutton.button) {
case JOY_BUT_ESCAPE:
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
break;
case JOY_BUT_PERIOD:
- event.kbd.keycode = SDLK_PERIOD;
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
break;
case JOY_BUT_SPACE:
- event.kbd.keycode = SDLK_SPACE;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
break;
case JOY_BUT_F5:
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
break;
}
@@ -367,19 +367,19 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
event.type = Common::EVENT_KEYUP;
switch (ev.jbutton.button) {
case JOY_BUT_ESCAPE:
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
break;
case JOY_BUT_PERIOD:
- event.kbd.keycode = SDLK_PERIOD;
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
break;
case JOY_BUT_SPACE:
- event.kbd.keycode = SDLK_SPACE;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
break;
case JOY_BUT_F5:
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
break;
}
@@ -455,21 +455,21 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
// Map menu key to f5 (scumm menu)
if (ev.key.keysym.sym == 306) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
return true;
}
// Map action key to action
if (ev.key.keysym.sym == 291) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_TAB;
+ event.kbd.keycode = Common::KEYCODE_TAB;
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
return true;
}
// Map OK key to skip cinematic
if (ev.key.keysym.sym == 292) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_ESCAPE;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
return true;
}
@@ -485,7 +485,7 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
// Map menu key (f11) to f5 (scumm menu)
if (ev.key.keysym.sym == SDLK_F11) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_F5;
+ event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
}
// Nap center (space) to tab (default action )
@@ -493,13 +493,13 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
//
else if (ev.key.keysym.sym == SDLK_SPACE) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_TAB;
+ event.kbd.keycode = Common::KEYCODE_TAB;
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
}
// Since we stole space (pause) above we'll rebind it to the tab key on the keyboard
else if (ev.key.keysym.sym == SDLK_TAB) {
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = SDLK_SPACE;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
} else {
// Let the events fall through if we didn't change them, this may not be the best way to
diff --git a/backends/platform/sdl/graphics.cpp b/backends/platform/sdl/graphics.cpp
index 212eb43585..f93c806aa8 100644
--- a/backends/platform/sdl/graphics.cpp
+++ b/backends/platform/sdl/graphics.cpp
@@ -761,22 +761,6 @@ void OSystem_SDL::setAspectRatioCorrection(bool enable) {
}
}
-void OSystem_SDL::clearScreen() {
- assert (_transactionMode == kTransactionNone);
-
- // Try to lock the screen surface
- if (SDL_LockSurface(_screen) == -1)
- error("SDL_LockSurface failed: %s", SDL_GetError());
-
- byte *dst = (byte *)_screen->pixels;
-
- // Clear the screen
- memset(dst, 0, _screenWidth * _screenHeight);
-
- // Unlock the screen surface
- SDL_UnlockSurface(_screen);
-}
-
void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
assert (_transactionMode == kTransactionNone);
assert(src);
@@ -848,24 +832,44 @@ void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int
SDL_UnlockSurface(_screen);
}
-bool OSystem_SDL::grabRawScreen(Graphics::Surface *surf) {
- assert(_screen);
- assert(surf);
+Graphics::Surface *OSystem_SDL::lockScreen() {
+ assert (_transactionMode == kTransactionNone);
- Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
+ // Lock the graphics mutex
+ lockMutex(_graphicsMutex);
- surf->create(_screenWidth, _screenHeight, _screen->format->BytesPerPixel);
+ // paranoia check
+ assert(!_screenIsLocked);
+ _screenIsLocked = true;
// Try to lock the screen surface
if (SDL_LockSurface(_screen) == -1)
error("SDL_LockSurface failed: %s", SDL_GetError());
- memcpy(surf->pixels, _screen->pixels, _screenWidth * _screenHeight * _screen->format->BytesPerPixel);
+ _framebuffer.pixels = _screen->pixels;
+ _framebuffer.w = _screen->w;
+ _framebuffer.h = _screen->h;
+ _framebuffer.pitch = _screen->pitch;
+ _framebuffer.bytesPerPixel = 1;
+
+ return &_framebuffer;
+}
+
+void OSystem_SDL::unlockScreen() {
+ assert (_transactionMode == kTransactionNone);
+
+ // paranoia check
+ assert(_screenIsLocked);
+ _screenIsLocked = false;
// Unlock the screen surface
SDL_UnlockSurface(_screen);
- return true;
+ // Trigger a full screen update
+ _forceFull = true;
+
+ // Finally unlock the graphics mutex
+ unlockMutex(_graphicsMutex);
}
void OSystem_SDL::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
@@ -1597,6 +1601,8 @@ void OSystem_SDL::displayMessageOnOSD(const char *msg) {
assert (_transactionMode == kTransactionNone);
assert(msg);
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
+
uint i;
// Lock the OSD surface for drawing
diff --git a/backends/platform/sdl/sdl-common.h b/backends/platform/sdl/sdl-common.h
index e66ca71e7f..4795b22a53 100644
--- a/backends/platform/sdl/sdl-common.h
+++ b/backends/platform/sdl/sdl-common.h
@@ -92,11 +92,8 @@ public:
// The screen will not be updated to reflect the new bitmap
virtual void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h); // overloaded by CE backend (FIXME)
- // Copies the screen to a buffer
- bool grabRawScreen(Graphics::Surface *surf);
-
- // Clear the screen
- void clearScreen();
+ virtual Graphics::Surface *lockScreen();
+ virtual void unlockScreen();
// Update the dirty areas of the screen
void updateScreen();
@@ -218,6 +215,8 @@ protected:
// unseen game screen
SDL_Surface *_screen;
+
+ // TODO: We could get rid of the following two vars and just use _screen instead
int _screenWidth, _screenHeight;
// temporary screen (for scalers)
@@ -274,6 +273,9 @@ protected:
int _mode;
int _transactionMode;
bool _fullscreen;
+
+ bool _screenIsLocked;
+ Graphics::Surface _framebuffer;
/** Current video mode flags (see DF_* constants) */
uint32 _modeFlags;
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 0fe16e0520..fe78bd4236 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -243,6 +243,7 @@ OSystem_SDL::OSystem_SDL()
_savefile(0),
_mixer(0),
_timer(0),
+ _screenIsLocked(false),
_graphicsMutex(0), _transactionMode(kTransactionNone) {
// allocate palette storage
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README
index 3a4b6142ad..cbc6a12494 100644
--- a/backends/platform/symbian/README
+++ b/backends/platform/symbian/README
@@ -2,9 +2,9 @@
ScummVM - ScummVM ported to EPOC/SymbianOS
Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson
- Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson
- Copyright (C) 2005 Jurgen 'SumthinWicked' Braam
- Copyright (C) 2005 ScummVM Team
+ Copyright (C) 2007 Lars 'AnotherGuest' Persson
+ Copyright (C) 2007 Jurgen 'SumthinWicked' Braam
+ Copyright (C) 2007 ScummVM Team
$Id$
@@ -13,19 +13,35 @@ About ScummVM
--------------
The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson.
The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam.
- Jurgen and Lars are currently working together to finalize the transfer to CVS.
-
+ Jurgen and Lars have successfully transfered all needed changes into CVS, with additional helpful tools for Symbian OS
+
+ Release version: 0.10.0
+ * This version is only supported on Symbian OS 9 devices due to compiler constraints for older devices. (That means UIQ3 and S60V3 devices)
+ * Updated to SDL version 1.2.11 (previous version used was 1.2.8)
+ * Information about S60 devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_S60
+ * Information about UIQ devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_UIQ
+ * Best source of general information is the ScummVM forum, http://forums.scummvm.org
+ * SVN builds (not frequently updated) can be found at http://anotherguest.k0.se
+
+
+Games supported
+---------------
+ The Symbian port of ScumVM supports all but Sword1 & 2 games. Some games might not run properly due to screenresolution or memory constraints.
+
-Nescessary components
----------------------
+Building ScummVM
+---------------------
+
+ Nescessary components
+ ---------------------
Building ScummVM yourself using the UIQ 2.1/Nokia S60 SDK/Nokia S80 SDK/Nokia S90 SDK framework is not an easy task!
Lets just say the framework needs quite some time to set up and takes a while
to get used to. If you choose to continue you will need the following items:
- - UIQ 2.1 SDK (To build for UIQ devices);
+ - UIQ 2.1 SDK (To build for UIQ2 devices);
http://www.symbian.com/developer/sdks_uiq.asp
- - Nokia S60 1st, 2nd edition (3rd edition has not been tested) SDK (To build for S60 devices)
+ - Nokia S60 1st, 2nd edition,3rd edition SDK (To build for S60 devices)
- Nokia S80 SDK (To build for S80 devices)
@@ -58,8 +74,8 @@ Nescessary components
http://libmpeg2.sourceforge.net/
-Building ScummVM
------------------
+ Compiling ScummVM
+ -----------------
ECompXL: this is a tool that will compress your executable with GZIP and glue
it to a predefined loader app. The app will uncompress your application at
runtime and run it without you even knowing it. A really interesting byproduct
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
index 8c001e2927..d15f549207 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
@@ -39,6 +39,20 @@
"\epoc32\release\armi\urel\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
"\epoc32\release\armi\urel\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\system\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
+
; Config/log files: 'empty' will automagically be removed on uninstall
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
index b2eb086488..5e0c8bfdaa 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
@@ -6,7 +6,7 @@
;&EN
; UID is the app's UID
-#{"ScummVM S60v2"},(0x101f9b57),0,80,3
+#{"ScummVM S60v2"},(0x101f9b57),0,100,0
; Platform type
(0x101F6F88), 0, 0, 0, {"Series60ProductID"}
@@ -16,6 +16,19 @@
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\system\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
index eebd4764f5..4ba5d43bcd 100644
--- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
@@ -62,12 +62,12 @@ SOURCE c24 ScummxLarge.bmp
SOURCE 8 ScummxLargeMask.bmp
END
-EPOCSTACKSIZE 0x0000F000
+EPOCSTACKSIZE 80000
EPOCHEAPSIZE 2048000 32000000
ALWAYS_BUILD_AS_ARM
MACRO S60
MACRO S60V3
-MACRO EPOC_AS_APP
+
//START_AUTO_MACROS_SLAVE//
// empty base file, will be updated by Perl build scripts
diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
index 73cbad17cd..12d5b37be2 100644
--- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
+++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
@@ -48,6 +48,20 @@
"\epoc32\data\Z\resource\APPS\scummvm.MIF"- "!:\resource\apps\scummvm.MIF"
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\data\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\resource\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"c:\shared\scummvm\kyra.dat"
+"..\sky.cpt"-"c:\shared\scummvm\sky.cpt"
+
; Config/log files: 'empty' will automagically be removed on uninstall
""-"c:\data\scummvm\scummvm.ini",FILENULL
""-"c:\data\scummvm\scummvm.stdout.txt",FILENULL
diff --git a/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
index 6daf9081c7..db94745b35 100644
--- a/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
+++ b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
@@ -38,6 +38,19 @@
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\system\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
index 09ed915e35..6752bc3813 100644
--- a/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
+++ b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
@@ -38,6 +38,19 @@
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\system\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
index c3ebae01d7..3e9c408c96 100644
--- a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
+++ b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
@@ -39,7 +39,6 @@ AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp
UID 0x100039ce 0x101f9b57
MACRO UIQ
-MACRO EPOC_AS_APP
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
index f8aca7fd52..d55d70c823 100644
--- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
+++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
@@ -37,6 +37,19 @@
"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\system\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
index a07149b702..8783f25337 100644
--- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
+++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
@@ -6,7 +6,7 @@
;&EN
; UID is the app's UID
-#{"ScummVM SE"},(0x101f9b57),0,80,3
+#{"ScummVM SE"},(0x101f9b57),0,100,0
; Platform type
(0x101F617B), 2, 0, 0, {"UIQ20ProductID"}
@@ -22,6 +22,10 @@
""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL
""-"!:\system\apps\ScummVM\sdl.ini",FILENULL
+; Common datafiles needed for some games
+"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
+"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
+
; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
; It will remove the config file, std***.txt files & dirs on uninstall.
diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
index 8620237b3a..e6ba0ea743 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
@@ -46,7 +46,7 @@ TARGETPATH \Resource\Apps
LANG SC
END
-EPOCSTACKSIZE 0x0000FFFF
+EPOCSTACKSIZE 80000
EPOCHEAPSIZE 3000000 32000000
START BITMAP ScummVM.mbm
@@ -66,7 +66,7 @@ UID 0x100039ce 0xA0000657
MACRO UIQ
MACRO UIQ3
-MACRO EPOC_AS_APP
+
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
index 1e529127f9..f92b013cd7 100644
--- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
+++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
@@ -46,6 +46,19 @@
"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM"
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
+"..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\kyra.dat"-"c:\shared\scummvm\kyra.dat"
+"..\sky.cpt"-"c:\shared\scummvm\sky.cpt"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"c:\shared\scummvm\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/mmp/scummvm_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
index f6b47c3458..66a743879a 100644
--- a/backends/platform/symbian/mmp/scummvm_agi.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_agi.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_agos.mmp.in b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
index 05ec375b51..f3f265d273 100644
--- a/backends/platform/symbian/mmp/scummvm_agos.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_agos.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index a1f3f1b261..dd9eb0d4ea 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_base.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them!
//START_AUTO_MACROS_MASTER//
diff --git a/backends/platform/symbian/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
index d8dcd62718..18309f6f9d 100644
--- a/backends/platform/symbian/mmp/scummvm_cine.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_CINE.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
index 05092777b0..43fc2cbf8a 100644
--- a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_cruise.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
index 34c4f82bd1..247ff33011 100644
--- a/backends/platform/symbian/mmp/scummvm_gob.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_gob.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
index 899384003f..257eb92420 100644
--- a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_kyra.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
index 1a52efbc69..29afe56182 100644
--- a/backends/platform/symbian/mmp/scummvm_lure.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_lure.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
index 4c1bd99614..ad8b885ee1 100644
--- a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_parallaction.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
index b5a65b6cef..5b90efd1d1 100644
--- a/backends/platform/symbian/mmp/scummvm_queen.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_queen.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
index 4f6555a049..880c99fbb2 100644
--- a/backends/platform/symbian/mmp/scummvm_saga.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_saga.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
index cdf454e663..16ae2e763a 100644
--- a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_scumm.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
index 8748956564..e07b918efb 100644
--- a/backends/platform/symbian/mmp/scummvm_sky.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_sky.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
index 2bd6febc76..0bea7fdcb7 100644
--- a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_sword1.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
index ddd299ce75..a7eaa4c4f5 100644
--- a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_sword2.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_touche.mmp.in b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
index 787d9f33bf..84d9bd13fb 100644
--- a/backends/platform/symbian/mmp/scummvm_touche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
@@ -30,6 +30,7 @@ TARGET scummvm_touche.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
+ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/src/SymbianActions.cpp b/backends/platform/symbian/src/SymbianActions.cpp
index cb2652eac4..3809253032 100644
--- a/backends/platform/symbian/src/SymbianActions.cpp
+++ b/backends/platform/symbian/src/SymbianActions.cpp
@@ -47,7 +47,7 @@ const Common::String actionNames[] = {
"Save",
"Skip",
"Zone",
- "FT Cheat",
+ "Multi Function",
"Swap character",
"Skip text",
"Pause",
@@ -122,7 +122,7 @@ void SymbianActions::initInstanceMain(OSystem *mainSystem) {
// Skip
_action_enabled[ACTION_SKIP] = true;
- _key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE);
+ _key_action[ACTION_SKIP].setKey(SDLK_ESCAPE);
}
void SymbianActions::initInstanceGame() {
@@ -138,7 +138,8 @@ void SymbianActions::initInstanceGame() {
bool is_cine = (gameid == "cine");
bool is_touche = (gameid == "touche");
bool is_agi = (gameid == "agi");
-
+ bool is_parallaction = (gameid == "parallaction");
+
Actions::initInstanceGame();
// Initialize keys for different actions
@@ -149,51 +150,58 @@ void SymbianActions::initInstanceGame() {
_action_enabled[ACTION_SAVE] = true;
if (is_queen) {
- _key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ
+ _key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
- _key_action[ACTION_SAVE].setAscii(63);
+ _key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
- _key_action[ACTION_SAVE].setAscii(SDLK_F10); // F10
+ _key_action[ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
} else if (is_agi) {
- _key_action[ACTION_SAVE].setAscii(SDLK_ESCAPE);
+ _key_action[ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
+ } else if (is_parallaction) {
+ _key_action[ACTION_SAVE].setKey('s', SDLK_s);
} else {
- _key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key
+ _key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
}
// Enable fast mode
_action_enabled[ACTION_FASTMODE] = true;
- _key_action[ACTION_FASTMODE].setAscii('f');
- _key_action[ACTION_FASTMODE].setFlags(KMOD_CTRL);
+ _key_action[ACTION_FASTMODE].setKey('f', SDLK_f, KMOD_CTRL);
// Swap character
_action_enabled[ACTION_SWAPCHAR] = true;
- _key_action[ACTION_SWAPCHAR].setAscii('b'); // b
+ _key_action[ACTION_SWAPCHAR].setKey('b'); // b
// Zone
_action_enabled[ACTION_ZONE] = true;
- // FT Cheat
- _action_enabled[ACTION_FT_CHEAT] = true;
- _key_action[ACTION_FT_CHEAT].setAscii(86); // shift-V
+ // Multi function key
+ _action_enabled[ACTION_MULTI] = true;
+ if (is_agi)
+ _key_action[ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
+ else if (is_gob)
+ _key_action[ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
+ else if (gameid == "atlantis")
+ _key_action[ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else
+ _key_action[ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Enable debugger
_action_enabled[ACTION_DEBUGGER] = true;
- _key_action[ACTION_DEBUGGER].setAscii('d');
- _key_action[ACTION_DEBUGGER].setFlags(KMOD_CTRL);
+ _key_action[ACTION_DEBUGGER].setKey('d', SDLK_d, KMOD_CTRL);
// Skip text
if (!is_cine)
_action_enabled[ACTION_SKIP_TEXT] = true;
if (is_queen) {
- _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE);
+ _key_action[ACTION_SKIP_TEXT].setKey(SDLK_SPACE);
} else {
- _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD);
+ _key_action[ACTION_SKIP_TEXT].setKey(SDLK_PERIOD);
}
// Pause
- _key_action[ACTION_PAUSE].setAscii(' ');
+ _key_action[ACTION_PAUSE].setKey(' ');
_action_enabled[ACTION_PAUSE] = true;
// Quit
diff --git a/backends/platform/symbian/src/SymbianActions.h b/backends/platform/symbian/src/SymbianActions.h
index 0facde763c..cbd333e500 100644
--- a/backends/platform/symbian/src/SymbianActions.h
+++ b/backends/platform/symbian/src/SymbianActions.h
@@ -34,7 +34,7 @@
namespace GUI {
-#define ACTION_VERSION 6
+#define ACTION_VERSION 7
enum actionType {
ACTION_UP = 0,
@@ -46,7 +46,7 @@ enum actionType {
ACTION_SAVE,
ACTION_SKIP,
ACTION_ZONE,
- ACTION_FT_CHEAT,
+ ACTION_MULTI,
ACTION_SWAPCHAR,
ACTION_SKIP_TEXT,
ACTION_PAUSE,
diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp
index 737795182e..c992c97316 100644
--- a/backends/platform/symbian/src/SymbianOS.cpp
+++ b/backends/platform/symbian/src/SymbianOS.cpp
@@ -88,8 +88,10 @@ void OSystem_SDL_Symbian::setFeatureState(Feature f, bool enable) {
else {
}
-
- return;
+ break;
+ case kFeatureDisableKeyFiltering:
+ GUI::Actions::Instance()->beginMapping(enable);
+ break;;
default:
OSystem_SDL::setFeatureState(f, enable);
}
@@ -104,6 +106,7 @@ OSystem_SDL_Symbian::OSystem_SDL_Symbian() :_channels(0),_stereo_mix_buffer(0) {
}
void OSystem_SDL_Symbian::initBackend() {
+ ConfMan.set("extrapath", Symbian::GetExecutablePath());
ConfMan.setBool("FM_high_quality", false);
#if !defined(S60) || defined(S60V3) // S60 has low quality as default
ConfMan.setBool("FM_medium_quality", true);
@@ -143,7 +146,7 @@ bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) {
return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode());
}
-void OSystem_SDL_Symbian::quitWithErrorMsg(const char *msg) {
+void OSystem_SDL_Symbian::quitWithErrorMsg(const char * /*aMsg*/) {
CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ;
@@ -345,16 +348,21 @@ bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Common::Event &event) {
}
return true;
-
+ case GUI::ACTION_MULTI: {
+ GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop);
+ // if key code is pause, then change event to interactive or just fall through
+ if(key.keycode() == SDLK_PAUSE) {
+ event.type = Common::EVENT_PREDICTIVE_DIALOG;
+ return true;
+ }
+ }
case GUI::ACTION_SAVE:
case GUI::ACTION_SKIP:
- case GUI::ACTION_FT_CHEAT:
case GUI::ACTION_SKIP_TEXT:
case GUI::ACTION_PAUSE:
case GUI::ACTION_SWAPCHAR:
case GUI::ACTION_FASTMODE:
- case GUI::ACTION_DEBUGGER:
- {
+ case GUI::ACTION_DEBUGGER: {
GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop);
ev.key.keysym.sym = (SDLKey) key.ascii();
ev.key.keysym.scancode= key.keycode();
@@ -426,7 +434,7 @@ struct TSymbianFileEntry {
FILE* symbian_fopen(const char* name, const char* mode) {
TSymbianFileEntry* fileEntry = new TSymbianFileEntry;
-
+
if (fileEntry != NULL) {
TInt modeLen = strlen(mode);
@@ -446,7 +454,9 @@ FILE* symbian_fopen(const char* name, const char* mode) {
if ((modeLen > 1 && mode[1] == '+') || (modeLen > 2 && mode[2] == '+')) {
fileMode = fileMode| EFileWrite;
}
-
+
+ fileMode = fileMode| EFileShareAny;
+
switch(mode[0]) {
case 'a':
if (fileEntry->iFileHandle.Open(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
@@ -471,7 +481,6 @@ FILE* symbian_fopen(const char* name, const char* mode) {
break;
}
}
-
return (FILE*) fileEntry;
}
diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp
index 2bb79850e3..efada68ad9 100644
--- a/backends/platform/wince/CEActionsPocket.cpp
+++ b/backends/platform/wince/CEActionsPocket.cpp
@@ -49,7 +49,7 @@ const String pocketActionNames[] = {
"Free look",
"Zoom up",
"Zoom down",
- "FT Cheat",
+ "Multi Function",
"Bind Keys",
"Cursor Up",
"Cursor Down",
@@ -99,7 +99,7 @@ GUI::Actions()
_action_enabled[POCKET_ACTION_DOWN] = true;
_action_enabled[POCKET_ACTION_LEFT] = true;
_action_enabled[POCKET_ACTION_RIGHT] = true;
- _action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_RETURN;
+ _action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_F1;
_action_mapping[POCKET_ACTION_UP] = SDLK_UP;
_action_mapping[POCKET_ACTION_DOWN] = SDLK_DOWN;
_action_mapping[POCKET_ACTION_LEFT] = SDLK_LEFT;
@@ -127,11 +127,12 @@ void CEActionsPocket::initInstanceGame() {
bool is_cine = (gameid == "cine");
bool is_touche = (gameid == "touche");
bool is_agi = (gameid == "agi");
+ bool is_parallaction = (gameid == "parallaction");
GUI_Actions::initInstanceGame();
// See if a right click mapping could be needed
- if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
+ if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
_right_click_needed = true;
// See if a "hide toolbar" mapping could be needed
@@ -140,36 +141,39 @@ void CEActionsPocket::initInstanceGame() {
// Initialize keys for different actions
// Pause
- _key_action[POCKET_ACTION_PAUSE].setAscii(VK_SPACE);
+ _key_action[POCKET_ACTION_PAUSE].setKey(VK_SPACE);
_action_enabled[POCKET_ACTION_PAUSE] = true;
// Save
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
_action_enabled[POCKET_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(63);
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(291); // F10
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
} else if (is_agi) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(SDLK_ESCAPE);
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
+ } else if (is_parallaction) {
+ _action_enabled[POCKET_ACTION_SAVE] = true;
+ _key_action[POCKET_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(319); // F5 key
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Quit
_action_enabled[POCKET_ACTION_QUIT] = true;
// Skip
- if (!is_cine)
+ if (!is_cine && !is_parallaction)
_action_enabled[POCKET_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
- _key_action[POCKET_ACTION_SKIP].setAscii(VK_ESCAPE);
+ _key_action[POCKET_ACTION_SKIP].setKey(VK_ESCAPE);
else
- _key_action[POCKET_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
+ _key_action[POCKET_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Hide
_action_enabled[POCKET_ACTION_HIDE] = true;
// Keyboard
@@ -188,9 +192,16 @@ void CEActionsPocket::initInstanceGame() {
_action_enabled[POCKET_ACTION_ZOOM_UP] = true;
_action_enabled[POCKET_ACTION_ZOOM_DOWN] = true;
}
- // FT Cheat
- _action_enabled[POCKET_ACTION_FT_CHEAT] = true;
- _key_action[POCKET_ACTION_FT_CHEAT].setAscii(86); // shift-V
+ // Multi function key
+ _action_enabled[POCKET_ACTION_MULTI] = true;
+ if (is_agi)
+ _key_action[POCKET_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
+ else if (is_gob)
+ _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
+ else if (gameid == "atlantis")
+ _key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else
+ _key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Key bind method
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
}
@@ -213,7 +224,7 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
case POCKET_ACTION_PAUSE:
case POCKET_ACTION_SAVE:
case POCKET_ACTION_SKIP:
- case POCKET_ACTION_FT_CHEAT:
+ case POCKET_ACTION_MULTI:
EventsBuffer::simulateKey(&_key_action[action], false);
return true;
@@ -225,7 +236,16 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
case POCKET_ACTION_PAUSE:
case POCKET_ACTION_SAVE:
case POCKET_ACTION_SKIP:
- case POCKET_ACTION_FT_CHEAT:
+ case POCKET_ACTION_MULTI:
+ if (action == POCKET_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
+ // FIXME: This is a temporary solution. The engine should handle its own menus.
+ // Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
+ GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
+ if (alert.runModal() == GUI::kMessageOK)
+ _key_action[action].setKey(SDLK_l);
+ else
+ _key_action[action].setKey(SDLK_s);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case POCKET_ACTION_KEYBOARD:
diff --git a/backends/platform/wince/CEActionsPocket.h b/backends/platform/wince/CEActionsPocket.h
index 0f6430d443..9749ca60ef 100644
--- a/backends/platform/wince/CEActionsPocket.h
+++ b/backends/platform/wince/CEActionsPocket.h
@@ -48,7 +48,7 @@ enum pocketActionType {
POCKET_ACTION_FREELOOK,
POCKET_ACTION_ZOOM_UP,
POCKET_ACTION_ZOOM_DOWN,
- POCKET_ACTION_FT_CHEAT,
+ POCKET_ACTION_MULTI,
POCKET_ACTION_BINDKEYS,
POCKET_ACTION_UP,
POCKET_ACTION_DOWN,
diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp
index 3d85ebc68e..227318d552 100644
--- a/backends/platform/wince/CEActionsSmartphone.cpp
+++ b/backends/platform/wince/CEActionsSmartphone.cpp
@@ -43,7 +43,7 @@ const String smartphoneActionNames[] = {
"Save",
"Skip",
"Zone",
- "FT Cheat",
+ "Multi Function",
"Bind Keys",
"Keyboard",
"Rotate",
@@ -117,11 +117,12 @@ void CEActionsSmartphone::initInstanceGame() {
bool is_cine = (gameid == "cine");
bool is_touche = (gameid == "touche");
bool is_agi = (gameid == "agi");
+ bool is_parallaction = (gameid == "parallaction");
GUI_Actions::initInstanceGame();
// See if a right click mapping could be needed
- if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
+ if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
_right_click_needed = true;
// Initialize keys for different actions
@@ -130,31 +131,41 @@ void CEActionsSmartphone::initInstanceGame() {
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(63);
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(291); //F10
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); //F10
} else if (is_agi) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_ESCAPE);
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
+ } else if (is_parallaction) {
+ _action_enabled[SMARTPHONE_ACTION_SAVE] = true;
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(319); // F5 key
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Skip
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
- _key_action[SMARTPHONE_ACTION_SKIP].setAscii(VK_ESCAPE);
+ _key_action[SMARTPHONE_ACTION_SKIP].setKey(VK_ESCAPE);
else
- _key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
+ _key_action[SMARTPHONE_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Zone
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
- // FT Cheat
- _action_enabled[SMARTPHONE_ACTION_FT_CHEAT] = true;
- _key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(86); // shift-V
+ // Multi function key
+ _action_enabled[SMARTPHONE_ACTION_MULTI] = true;
+ if (is_agi)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
+ else if (is_gob)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
+ else if (gameid == "atlantis")
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Bind keys
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
}
@@ -176,7 +187,7 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
return true;
case SMARTPHONE_ACTION_SAVE:
case SMARTPHONE_ACTION_SKIP:
- case SMARTPHONE_ACTION_FT_CHEAT:
+ case SMARTPHONE_ACTION_MULTI:
EventsBuffer::simulateKey(&_key_action[action], false);
return true;
}
@@ -186,7 +197,16 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
switch (action) {
case SMARTPHONE_ACTION_SAVE:
case SMARTPHONE_ACTION_SKIP:
- case SMARTPHONE_ACTION_FT_CHEAT:
+ case SMARTPHONE_ACTION_MULTI:
+ if (action == SMARTPHONE_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
+ // FIXME: This is a temporary solution. The engine should handle its own menus.
+ // Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
+ GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
+ if (alert.runModal() == GUI::kMessageOK)
+ _key_action[action].setKey(SDLK_l);
+ else
+ _key_action[action].setKey(SDLK_s);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case SMARTPHONE_ACTION_RIGHTCLICK:
diff --git a/backends/platform/wince/CEActionsSmartphone.h b/backends/platform/wince/CEActionsSmartphone.h
index 648d0ae4cf..590302ef26 100644
--- a/backends/platform/wince/CEActionsSmartphone.h
+++ b/backends/platform/wince/CEActionsSmartphone.h
@@ -45,7 +45,7 @@ enum smartphoneActionType {
SMARTPHONE_ACTION_SAVE,
SMARTPHONE_ACTION_SKIP,
SMARTPHONE_ACTION_ZONE,
- SMARTPHONE_ACTION_FT_CHEAT,
+ SMARTPHONE_ACTION_MULTI,
SMARTPHONE_ACTION_BINDKEYS,
SMARTPHONE_ACTION_KEYBOARD,
SMARTPHONE_ACTION_ROTATE,
diff --git a/backends/platform/wince/CEDevice.cpp b/backends/platform/wince/CEDevice.cpp
index a76360f590..855c601741 100644
--- a/backends/platform/wince/CEDevice.cpp
+++ b/backends/platform/wince/CEDevice.cpp
@@ -53,15 +53,13 @@ DWORD CEDevice::reg_access(TCHAR *key, TCHAR *val, DWORD data) {
return data;
cbdata = sizeof(DWORD);
- if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS)
- {
+ if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS) {
RegCloseKey(regkey);
return data;
}
cbdata = sizeof(DWORD);
- if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS)
- {
+ if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS) {
RegCloseKey(regkey);
return data;
}
@@ -78,8 +76,7 @@ void CEDevice::backlight_xchg() {
REG_disp = reg_access(TEXT("ControlPanel\\Power"), TEXT("Display"), REG_disp);
h = CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
- if (h)
- {
+ if (h) {
SetEvent(h);
CloseHandle(h);
}
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp
index 8a17a4c1c4..79b833f84b 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.cpp
+++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp
@@ -35,6 +35,8 @@ namespace CEGUI {
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
setBackground(reference);
+ _state = false;
+ _lastKey.setKey(0);
}
@@ -42,6 +44,7 @@ namespace CEGUI {
}
bool PanelKeyboard::action(int x, int y, bool pushed) {
+ Key key;
if (checkInside(x, y)) {
int keyAscii = 0;
@@ -62,19 +65,35 @@ namespace CEGUI {
keyAscii = VK_BACK; keyCode = keyAscii;
} else {
// Enter
- keyAscii = 13; keyCode = 10;
+ keyAscii = 13; keyCode = 13;
}
}
if (keyAscii != 0) {
- _key.setAscii(keyAscii);
- _key.setKeycode(tolower(keyCode));
- return EventsBuffer::simulateKey(&_key, pushed);
+ if (_state && pushed && keyCode != _lastKey.keycode()) // if cursor is still down and off the current key
+ return false;
+ else if (_state && !pushed && keyCode != _lastKey.keycode()) { // cursor is up but off the current key
+ keyAscii = _lastKey.ascii();
+ keyCode = _lastKey.keycode();
+ }
+ _state = pushed;
+ _lastKey.setKey(keyAscii, tolower(keyCode));
+
+ key.setKey(keyAscii, tolower(keyCode));
+ return EventsBuffer::simulateKey(&key, pushed);
}
- else
+ else if (_state && !pushed) { // cursor is in some forbidden region and is up
+ _state = false;
+ key = _lastKey;
+ return EventsBuffer::simulateKey(&key, false);
+ } else
return false;
}
- else
+ else if (_state && !pushed) { // cursor left the keyboard area and is up
+ _state = false;
+ key = _lastKey;
+ return EventsBuffer::simulateKey(&key, false);
+ } else
return false;
}
}
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.h b/backends/platform/wince/CEgui/PanelKeyboard.h
index fe586b3727..d0182ce5fe 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.h
+++ b/backends/platform/wince/CEgui/PanelKeyboard.h
@@ -44,7 +44,8 @@ namespace CEGUI {
virtual ~PanelKeyboard();
virtual bool action(int x, int y, bool pushed);
private:
- Key _key;
+ bool _state;
+ Key _lastKey;
};
}
diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp
index c8b09f611a..19978c23dc 100644
--- a/backends/platform/wince/CEkeys/EventsBuffer.cpp
+++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp
@@ -32,10 +32,9 @@ namespace CEKEYS {
SDL_Event ev = {0};
if (!key->keycode())
- key->setKeycode(key->ascii());
-
- if (!key->ascii())
- key->setAscii(key->keycode());
+ key->setKey(key->ascii(), key->ascii());
+ else if (!key->ascii())
+ key->setKey(key->keycode());
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
ev.key.keysym.mod = (SDLMod)key->flags();
diff --git a/backends/platform/wince/Makefile b/backends/platform/wince/Makefile
index cc9e2951be..0d9556e967 100644
--- a/backends/platform/wince/Makefile
+++ b/backends/platform/wince/Makefile
@@ -3,9 +3,20 @@
# $URL$
# $Id$
+########################################################################
+## Set this to point to where the tools are installed on your system
+
wince_gcc_root = /cygdrive/e/wince-gcc-root
-srcdir = ../../..
-VPATH = $(srcdir)
+
+
+########################################################################
+## Do you want a debug build or not?
+
+#WINCE_DEBUG_BUILD = 1
+
+
+########################################################################
+## Disable whichever engines you want here
#DISABLE_SCUMM = 1
#DISABLE_SKY = 1
@@ -20,10 +31,36 @@ DISABLE_LURE = 1
#DISABLE_SWORD1 = 1
#DISABLE_SWORD2 = 1
#DISABLE_TOUCHE = 1
-DISABLE_PARALLACTION = 1
+#DISABLE_PARALLACTION = 1
DISABLE_CRUISE = 1
+
+########################################################################
+## Pick which libraries you want to use here
+
+USE_MAD = 1
+USE_MPEG2 = 1
+USE_TREMOR = 1
+#USE_TREMOLO = 1
+USE_FLAC = 1
+USE_ZLIB = 1
+
+
+########################################################################
+## You're probably not going to want to change these defines...
+
#DISABLE_HQ_SCALERS = 1
+USE_ARM_SOUND_ASM = 1
+USE_ARM_SMUSH = 1
+
+
+########################################################################
+## Hopefully you shouldn't need to change anything below here. ##
+########################################################################
+
+
+srcdir = ../../..
+VPATH = $(srcdir)
CXX = arm-wince-pe-g++
LD = arm-wince-pe-g++
@@ -38,9 +75,19 @@ ECHO = echo -n
CAT = cat
AS = arm-wince-pe-as
-DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT -DFPM_DEFAULT -DUSE_MAD -DNONSTANDARD_PORT -DUSE_TREMOR -DUSE_VORBIS -DUSE_MPEG2 -DWIN32 -DUSE_ZLIB
+########################################################################
+## Set up defines, includes, cflags etc
+
+DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT
+DEFINES += -DFPM_DEFAULT
+
+DEFINES += -DNONSTANDARD_PORT
+DEFINES += -DWIN32
DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
-#DEFINES += -DDEBUG -DUSE_WINDBG -g
+
+ifdef WINCE_DEBUG_BUILD
+DEFINES += -DDEBUG -DUSE_WINDBG -g
+endif
INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Imissing/gcc -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys -I$(wince_gcc_root)/include
@@ -49,7 +96,47 @@ CFLAGS := -O3 -march=armv4 -mtune=xscale
CXXFLAGS := $(CFLAGS)
LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib
-LIBS := -lSDL -lzlib -lmad -lmpeg2 -ltremorce --entry WinMainCRTStartup
+LIBS := -lSDL
+
+ifdef USE_ZLIB
+DEFINES += -DUSE_ZLIB
+LIBS += -lzlib
+endif
+
+ifdef USE_MAD
+DEFINES += -DUSE_MAD
+LIBS += -lmad
+endif
+
+ifdef USE_MPEG2
+DEFINES += -DUSE_MPEG2
+LIBS += -lmpeg2
+endif
+
+ifdef USE_TREMOR
+DEFINES += -DUSE_TREMOR -DUSE_VORBIS
+LIBS += -ltremorce
+endif
+
+ifdef USE_TREMOLO
+DEFINES += -DUSE_TREMOR -DUSE_VORBIS
+INCLUDES += -Ilibs/include/tremolo
+LIBS += -llibTremolo
+endif
+
+ifdef USE_FLAC
+DEFINES += -DUSE_FLAC
+LIBS += -lFLAC
+endif
+
+ifdef USE_ARM_SMUSH
+DEFINES += -DUSE_ARM_SMUSH
+endif
+
+LIBS += --entry WinMainCRTStartup
+
+########################################################################
+# Targets follow here
TARGET = scummvm.exe
OBJS :=
@@ -71,7 +158,6 @@ include $(srcdir)/Makefile.common
all: dist
dist: $(TARGET)
-# bzip2 -fvk $(TARGET)
$(STRIP) $(TARGET)
PocketSCUMM.o:
diff --git a/backends/platform/wince/README-WinCE b/backends/platform/wince/README-WinCE
deleted file mode 100644
index b1fc585e22..0000000000
--- a/backends/platform/wince/README-WinCE
+++ /dev/null
@@ -1,506 +0,0 @@
-ScummVM Windows CE FAQ
-Last updated: 2006-06-20
-Release version: 0.9.0
-------------------------------------------------------------------------
-
-This document is intended to give common answers to specific ScummVM
-issues on Windows CE, in 3 sections
- * "General questions" : browse this section to get started and see
- general issues
- * "Game specific questions" : lists some common game specific issues
- * "Support and links" : how to get support if you're still puzzled
-
-------------------------------------------------------------------------
-General questions
-------------------------------------------------------------------------
-
-Which devices are supported ?
------------------------------
-
-Official build
---------------
-
-The official build is based on the ARM architecture and should work with any
-Pocket PC 2000, Pocket PC 2002, Pocket PC 2003, Pocket PC 2003 SE, Smartphone
-2002, Smartphone 2003 or Windows Mobile based device.
-
-Support for old ARM architectures (Handheld PCs, Palm Size PCs) and other CPUs
-(MIPS, SH3) is discontinued. Feel free to generate builds for these
-architectures and contact me to include them on ScummVM website.
-
-Full support
-------------
-
-* ARM based Windows Mobile handhelds with QVGA resolution (240x320) slower
- than 200 MHz (PocketPC platform)
-
-All AdLib first generation games should work properly on these devices.
-Sam'n'Max will be a bit too slow to be played with music.
-More recent games (The Dig, Curse of Monkey Island, Broken Sword series)
-and all VGA games will probably be too slow to be enjoyable.
-
-* ARM based Windows Mobile handhelds with QVGA resolution (240x320) faster
- than 200 MHz
-
-All games should work properly on these devices.
-VGA games will be resized and the font gets hard to read in this case (be sure
-to install the talkie version the game :p)
-
-* ARM based Windows Mobile handhelds with VGA resolution (640x480)
-
-All non VGA games should work properly on these devices. They can be resized
-with different scalers (not all desktop scalers are supported due to Embedded
-Visual C++ very personal interpretation of the C++ standard).
-VGA games will be displayed in true VGA mode, which can takes a lot of memory
-and slow down the game (especially during scrollings). It will get better in
-the next releases or with faster devices.
-
-* Windows Mobile Smartphones (176x220 or 240x320)
-
-Early support is provided for all 320x200 games.
-The font can get hard to read (you should prefer talkie games, or wear glasses)
-
-* Support for Windows Mobile 5 is experimental but should work. "Flipping" devices
-such as the HTC Wizard or HTC Universal work only in portait (closed) mode for the
-moment.
-
-Partial / Discontinued support
-------------------------------
-
-Support for the following devices is not complete, not working properly or
-discontinued because the device is now obsolete. Feel free to contribute and
-improve the port for your favorite device, or use the last release built with
-the previous port architecture (0.5.1) which was less resource hungry and
-supported more exotic devices.
-
-* "Paletted" devices (non "true color")
-
-These devices will be supported through the GDI layer which will slow down the
-games a lot. You can try to disable the music/sound effects to get a better
-game experience.
-
-* "Mono" devices
-
-I don't even think anything will be displayed on these devices :) you can try
-and report your success ...
-
-* MIPS/SH3 devices with QVGA resolution (240x320), "true color"
-
-Some devices may be a bit too slow, especially if direct screen access (GAPI)
-is not supported on these devices.
-
-* ARM/MIPS/SH3 devices with VGA resolution (640x480) (Palm Size PC / Handheld
- PC platform)
-
-True VGA games will probably be too slow to run properly on these devices even
-if they can support them ...
-
-* ARM/MIPS/SH3 devices with desktop resolution (800x600) (Handheld PC platform)
-
-No, there will never be ANY scaler supporting 800x600 resolution, because
-320x200 games CANNOT be resized to a 800x600 by a simple operation.
-
-And the device will probably be too slow to perform any kind of graphic
-transform anyway :)
-
-How do I install ScummVM for Windows CE ?
------------------------------------------
-
-If the current release includes a .EXE installer, ScummVM for Windows CE
-will be installed without hassle.
-Otherwise, you'll unzip the release on your desktop computer, and copy
-all files on your device.
-
-If you're using a Pocket PC 2000 operating system, be sure to have GAPI
-installed - it's available on Microsoft website http://www.microsoft.com
-
-How do I install a game ?
--------------------------
-
-You'll at least need to copy all the data files from your game, in a
-sub-directory of your game directory.
-
-You'll need to put the data files in a directory named after ScummVM game
-name (see "Supported Game" section in ScummVM readme) for the games having
-"generic" data files (.LFL files). Recent games can be put in any directory.
-
-You can compress the multimedia files (sound/video) as described in the
-ScummVM readme.
-
-You can compress the audio tracks of Loom or Monkey Island 1 as described in
-the ScummVM readme. If you are running these games on a slow device with Ogg
-Vorbis compression, it's recommended to sample the files to 11 kHz (this sample
-rate is not supported by other versions of ScummVM).
-
-If you need more details, you can check SirDave's mini-manual online available
-at: http://forums.scummvm.org/viewtopic.php?t=936
-and at: http://www.pocketmatrix.com/forums/viewtopic.php?t=8606
-
-How do I run a game ?
----------------------
-
-If it's the first time you're running ScummVM for Windows CE, have installed or
-removed games, you need to rescan your game directory.
- * Select Scan, tap the root directory of your games, and tap "Yes" to begin
- an automatic scan of the installed games.
-
-Usually all games are detected and you can start playing right away. If your
-game is not detected check its directory name and your data files.
-
-To play a game, tap on its name then tap the "Play" button or double tap its
-name.
-
-How do I play a game on a Pocket PC or Handheld PC device ?
------------------------------------------------------------
-
-The stylus is your mouse cursor, and a tap is a left mouse button click.
-
-As the Pocket PC lacks some keys, a toolbar is displayed at the bottom of the
-screen to make the most common functions just a tap away
- * The disk icon opens ScummVM options menu to save your game, or change your
- current game settings.
- * The movie icon skips a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * The sound icon turns all sound effects and music off and on
- * The key icon allow you to map a key action to a device button.
- * The monkey icon switches between portrait, landscape and inverse landscape
- mode.
-
-You can map additional actions on your device hardware buttons using the
-"Options" / "Key" menu in the ScummVM options menu. To associate an action to
-a key, tap the action, then the "Map" button and press the hardware key.
-The following actions are available
- * Pause : pause the game
- * Save : open ScummVM option menu
- * Quit : quit ScummVM (without saving, be careful when using it)
- * Skip : skip a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * Hide : hide or display the toolbar
- - YOU MUST HIDE THE TOOLBAR TO SCROLL THROUGH THE INVENTORY IN ZAK -
- * Keyboard : hide or display the virtual keyboard
- - YOU MUST DISPLAY THE KEYBOARD TO FIGHT IN INDIANA JONES 3 -
- * Sound : turns all sound effects and music off and on
- * Right click : acts as a right mouse button click
- - YOU MUST MAP THIS ACTION TO PLAY THE FOLLOWING GAMES -
- - SAM & MAX, BENEATH A STEEL SKY, CURSE OF MONKEY ISLAND -
- * Cursor : hide or display the mouse cursor
- * Free look : go in or out of free-look mode. In this mode, you can tap
- the screen to look for interesting locations without walking.
- * Zoom up : magnify the upper part of the screen for 640x480 games
- rendered on a 320x240 device.
- * Zoom down : magnify the lower part of the screen for 640x480 games
- rendered on a 320x240 device.
- * FT Cheat : win a Full Throttle action sequence
- * Bind keys : map a key action to a device button
- * Up,Down,Left:
- Right, : emulate mouse/stylus behavior
- Left Click :
-
-If you start a game when a Right click mapping is necessary, ScummVM will ask
-you to map one of your hardware key to this action before playing. Just press
-the key you want to map if you see this message.
-
-How do I hide the toolbar ?
-----------------------------
-
-A shortcut is available to hide the toolbar directly from the game screen from
-release 0.8.0. Double tapping the stylus at the top of the screen will switch
-between a visible toolbar panel, a virtual keyboard, and an invisible panel.
-If any part of the screen is obscured by the toolbar (like the load/save game
-dialogs) you can use the invisible panel mode to get to it. For 320x200 games
-on QVGA Pocket PCs, when the panel is hidden the game screen is resized to
-320x240 for better gaming experience.
-
-How do I play a game on a Microsoft Smartphone device ?
--------------------------------------------------------
-
-When playing on a Smartphone, the cursor and mouse buttons are emulated by
-a set of default keys :
- 4 Move up
- 6 Move down
- 8 Move left
- 2 Move right
- Hotkey 1 Left mouse button click
- Hotkey 2 Right mouse button click
- Return/Action Open the key mapping menu
-
-Note that this means that the input will be "inversed" on a 240x320 (Windows
-Mobile 2005) Smartphone. You'll have to remap the keys.
-
-A few options are also emulated by a set of default keys :
-
- 0 Options menu
- Back Skip
- # Zone option
-
-The cursor will move faster if you keep the key down. You can tweak this
-behaviour in the configuration file described below.
-
-The "Zone" key is a *very* valuable addition allowing you to jump quickly
-between three screen zones : the game zone, the verbs zone and the inventory
-zone. When you switch to a zone the cursor will be reset to its former location
-in this zone.
-
-There are two more actions available for mapping:
- - Keyboard: Shows hides a virtual keyboard which can be use whenever text
- input is required in a game, or a dialog.
- - Rotate : Flips the screen orientation between normal and inverse landscape.
-
-You can change the keys mapping during the game in the key mapping menu.
-
-Note that you'll need to push the Action button (center of the pad) to quit
-a Simon game.
-
-How can I apply a ScummVM command line option (f.e. to change the language)
----------------------------------------------------------------------------
-
-See the section regarding the configuration file (scummvm.ini) in ScummVM
-README file - the same keywords apply.
-
-Some parameters are specific to this port :
-
-game specific section (f.e. [monkey2]) - performance options
-
-high_sample_rate bool Desktop quality (22 kHz) sound output if set.
- 11 kHz otherwise.
- The default is 11 kHz.
- If you have a fast device, you can set this to
- true to enjoy better sound effects and music.
-FM_high_quality bool Desktop quality FM synthesis if set. Lower
- quality otherwise. The default is low quality.
- You can change this if you have a fast device.
-sound_thread_priority int Set the priority of the sound thread
- (given to SetThreadPriority API)
-Smush_force_redraw int Force a Smush frame redraw every X missed
- frames. Mainly used for Full Throttle action
- sequences. Setting it lower gives more
- priority to screen redraws. Setting it higher
- gives more priority to stylus/keyboard input.
- The default is 30.
-
-game specific section (f.e. [monkey2]) - game options
-
-landscape int 0: Portrait, 1: Landscape, 2: Inverse Landscape
-
-[scummvm] section - keys definition
-
-You usually do not wish to modify these values directly, as they are set
-by the option dialog, and are only given here for reference.
-
-action_mapping_version int Mapping version linked to ScummVM version.
-action_mapping string Hex codes describing the key associated to
- each different action.
-
-[scummvm] section - mouse emulation tuning
-
-You can tweak these parameters to customize how the cursor is handled.
-
-repeatTrigger int Number of milliseconds a key must be held to
- consider being repeated.
-
-repeatX int Number of key repeat events before changing
- horizontal cursor behaviour.
-stepX1 int Horizontal cursor offset value when the key is
- not repeated.
-stepX2 int Horizontal cursor offset value when the key is
- repeated less than repeatX.
-stepX3 int Horizontal cursor offset value when the key is
- repeated more than repeatX.
-
-
-repeatY int Number of key repeat events before changing
- vertical cursor behaviour.
-stepY1 int Vertical cursor offset value when the key is
- not repeated.
-stepY2 int Horizontal cursor offset value when the key is
- repeated less than repeatY.
-stepY3 int Vertical cursor offset value when the key is
- repeated more than repeatY.
-
-Game xxx is too slow on my device
----------------------------------
-
-Even if it shouldn't happen (this port is running almost correctly on a
-80 / 120 MHz first generation SPV phone), you can try some things :
-
- * Disable sound in the engine (see the global README)
- * Play with the priority of the sound thread (change the
- sound_thread_priority value - the higher the lower priority)
-
-And don't forget to report your progress in the ScummVM forum !
-
-------------------------------------------------------------------------
-Game specific questions
-------------------------------------------------------------------------
-
---------------------------
--- Beneath a Steel Sky --
---------------------------
-
-Introduction movie is too slow or never ends ...
--------------------------------------------------
-
-Skip it :)
-
-How can I open the inventory in Beneath a Steel Sky ?
----------------------------------------------------
-
-Tap the top of the screen. Check your stylus calibration if you still cannot
-open it.
-
-How can I use an item in Beneath a Steel Sky ?
-----------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-----------------------------
--- Curse of Monkey Island --
-----------------------------
-
-How can I open the inventory in Curse of Monkey Island ?
-------------------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
-Sound synchronization is lost in Curse of Monkey Island videos
---------------------------------------------------------------
-
-This is a port bug which is very noticeable in VGA mode. It can probably be
-fixed with a faster blitting routine or a faster device.
-
---------------------
--- Full Throttle --
---------------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the voice file (MONSTER.SOU) and disable the
-music to lower these requirements.
-
-----------------------------------------
--- Indiana Jones and the Last Crusade --
-----------------------------------------
-
-How can I fight in Indiana Jones and the Last Crusade ?
------------------------------------------------------
-
-You need to map the keyboard button (see the General Questions section).
-
----------------
--- Sam & Max --
----------------
-
-How can I change the current action ?
--------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-How can I exit a mini game ?
-----------------------------
-
-Use the skip toolbar icon (see the General Questions section).
-
--------------------
--- Simon 1 and 2 --
---------------------
-
-How can I save or quit in Simon ?
---------------------------------
-
-"Use" (use the use verb :p) the postcard. The ScummVM option dialog is disabled
-in Simon games.
-
-On Smartphone, you'll need to push the Action button (center of the pad) to
-quit the game.
-
--------------
--- The Dig --
--------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
---------------------
--- Zak Mc Kracken --
---------------------
-
-How can I scroll through my inventory items in Zak Mc Kracken ?
--------------------------------------------------------------
-
-You need to map the hide toolbar button (see the General Questions section) or
-double tap at the top of the screen (from 0.8.0+)
-
---------------------
--- Broken Sword 2 --
---------------------
-
-I've installed the movies pack but they are not playing
--------------------------------------------------------
-
-MPEG 2 playback takes too much memory in the current release, and may prevent
-movies from playing in VGA mode. This may get better in the next releases.
-
-----------------
--- Gobliiins --
-----------------
-
-Cursor is grabled after loading a game
---------------------------------------
-
-Due to a bug in 0.8.0, you'll have to tap the stylus somewhere on the game
-screen between 2 letters when entering a code. Otherwise the cursor will get
-garbled.
-
-This has not been retested for 0.8.1 but should be fixed.
-
-------------------------------------------------------------------------
-Support
-------------------------------------------------------------------------
-
-Help, I've read everything and ...
------------------------------------
-
-Luckily, as there is a huge variety of Windows Mobile devices, a specific forum
-is dedicated to this ScummVM port. You can ask your question on the WinCE
-ScummVM forum available at http://forums.scummvm.org/viewforum.php?f=6
-
-Some older questions and very nice tutorials are still available on the historic
-PocketMatrix forum at http://www.pocketmatrix.com/forums/viewforum.php?f=20
-where the community is always glad to help and have dealt with all my bugs for more
-than three years now :)
-
-I think I found a bug, ScummVM crashes in ...
----------------------------------------------
-
-See the "Reporting Bugs" section in ScummVM readme.
-
-If you have a Pocket PC or Handheld PC, be sure to include its resolution (obtained
-on the second dialog displayed on the "About" menu) in your bug report.
-
-If you cannot reproduce this bug on another ScummVM version, you can cross
-post your bug report on ScummVM forums.
-
-------------------------------------------------------------------------
-Good Luck and Happy Adventuring!
-The ScummVM team.
-http://www.scummvm.org/
-------------------------------------------------------------------------
diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp
index 8ef7412530..2d6e9a4302 100644
--- a/backends/platform/wince/wince-sdl.cpp
+++ b/backends/platform/wince/wince-sdl.cpp
@@ -314,9 +314,6 @@ void OSystem_WINCE3::initScreenInfos() {
_isOzone = 0;
SDL_Rect **r;
r = SDL_ListModes(NULL, 0);
- printf("listmodes: %dx%d\n", r[0]->w, r[0]->h);
- //_platformScreenWidth = GetSystemMetrics(SM_CXSCREEN);
- //_platformScreenHeight = GetSystemMetrics(SM_CYSCREEN);
_platformScreenWidth = r[0]->w;
_platformScreenHeight = r[0]->h;
}
@@ -330,7 +327,7 @@ bool OSystem_WINCE3::isOzone() {
OSystem_WINCE3::OSystem_WINCE3() : OSystem_SDL(),
_orientationLandscape(0), _newOrientation(0), _panelInitialized(false),
- _panelVisible(true), _panelStateForced(false), _forceHideMouse(false),
+ _panelVisible(true), _panelStateForced(false), _forceHideMouse(false), _unfilteredkeys(false),
_freeLook(false), _forcePanelInvisible(false), _toolbarHighDrawn(false), _zoomUp(false), _zoomDown(false),
_scalersChanged(false), _monkeyKeyboard(false), _lastKeyPressed(0), _tapTime(0),
_saveToolbarState(false), _saveActiveToolbar(NAME_MAIN_PANEL), _rbutton(false), _hasfocus(true),
@@ -771,6 +768,7 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
switch(f) {
case kFeatureFullscreenMode:
return;
+
case kFeatureVirtualKeyboard:
if (_hasSmartphoneResolution)
return;
@@ -790,6 +788,12 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
//_toolbarHandler.setVisible(_saveToolbarState);
}
return;
+
+ case kFeatureDisableKeyFiltering:
+ if (_hasSmartphoneResolution)
+ _unfilteredkeys = enable;
+ return;
+
default:
OSystem_SDL::setFeatureState(f, enable);
}
@@ -1583,6 +1587,17 @@ void OSystem_WINCE3::internUpdateScreen() {
_forceFull = false;
}
+Graphics::Surface *OSystem_WINCE3::lockScreen() {
+ // FIXME: Fingolfing asks: Why is undrawMouse() needed here?
+ // Please document this.
+ undrawMouse();
+ return OSystem_SDL::lockScreen();
+}
+
+void OSystem_WINCE3::unlockScreen() {
+ OSystem_SDL::unlockScreen();
+}
+
bool OSystem_WINCE3::saveScreenshot(const char *filename) {
assert(_hwscreen != NULL);
@@ -2067,18 +2082,30 @@ void OSystem_WINCE3::addDirtyRect(int x, int y, int w, int h, bool mouseRect) {
OSystem_SDL::addDirtyRect(x, y, w, h, false);
}
-static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode)
+static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool unfilter)
{
if (GUI::Actions::Instance()->mappingActive())
return key;
+ if (unfilter) {
+ switch (key) {
+ case SDLK_ESCAPE:
+ return SDLK_BACKSPACE;
+ case SDLK_F8:
+ return SDLK_ASTERISK;
+ case SDLK_F9:
+ return SDLK_HASH;
+ }
+ return key;
+ }
+
if (key >= SDLK_KP0 && key <= SDLK_KP9) {
return key - SDLK_KP0 + '0';
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
return key;
} else if (unicode) {
return unicode;
- } else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
+ } else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
return key & ~0x20;
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
return 0;
@@ -2113,9 +2140,9 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
while(SDL_PollEvent(&ev)) {
switch(ev.type) {
case SDL_KEYDOWN:
- // KMOD_RESERVED is used if the key has been injected by an external buffer
debug(1, "Key down %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
- if (ev.key.keysym.mod != KMOD_RESERVED) {
+ // KMOD_RESERVED is used if the key has been injected by an external buffer
+ if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
keyEvent = true;
_lastKeyPressed = ev.key.keysym.sym;
_keyRepeatTime = currentTime;
@@ -2125,19 +2152,27 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
return true;
}
- event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = ev.key.keysym.sym;
- event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
if (GUI_Actions::Instance()->mappingActive())
event.kbd.flags = 0xFF;
+ else if (ev.key.keysym.sym == SDLK_PAUSE) {
+ _lastKeyPressed = 0;
+ event.type = Common::EVENT_PREDICTIVE_DIALOG;
+ return true;
+ }
+
+ event.type = Common::EVENT_KEYDOWN;
+ if (!_unfilteredkeys)
+ event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
+ else
+ event.kbd.keycode = (Common::KeyCode)mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+ event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
return true;
case SDL_KEYUP:
- // KMOD_RESERVED is used if the key has been injected by an external buffer
debug(1, "Key up %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
- if (ev.key.keysym.mod != KMOD_RESERVED) {
+ // KMOD_RESERVED is used if the key has been injected by an external buffer
+ if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
keyEvent = true;
_lastKeyPressed = 0;
@@ -2145,12 +2180,19 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
return true;
}
- event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = ev.key.keysym.sym;
- event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
if (GUI_Actions::Instance()->mappingActive())
event.kbd.flags = 0xFF;
+ else if (ev.key.keysym.sym == SDLK_PAUSE) {
+ _lastKeyPressed = 0;
+ return false; // chew up the show agi dialog key up event
+ }
+
+ event.type = Common::EVENT_KEYUP;
+ if (!_unfilteredkeys)
+ event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
+ else
+ event.kbd.keycode = (Common::KeyCode)mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+ event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
return true;
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
index 0e8e5e53ba..e74c438807 100644
--- a/backends/platform/wince/wince-sdl.h
+++ b/backends/platform/wince/wince-sdl.h
@@ -97,6 +97,8 @@ public:
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
void showOverlay();
void hideOverlay();
+ Graphics::Surface *lockScreen();
+ void unlockScreen();
// GUI and action stuff
void swap_panel_visibility();
@@ -189,6 +191,7 @@ private:
bool _panelInitialized; // only initialize the toolbar once
bool _monkeyKeyboard; // forced keyboard for Monkey Island copy protection
+ bool _unfilteredkeys; // discard key mapping temporarily (agi pred. dialog)
static bool _soundMaster; // turn off sound after all calculations
// static since needed by the SDL callback
int _orientationLandscape; // current orientation
diff --git a/backends/saves/compressed/compressed-saves.cpp b/backends/saves/compressed/compressed-saves.cpp
index 83c33fdae5..03fc28cafe 100644
--- a/backends/saves/compressed/compressed-saves.cpp
+++ b/backends/saves/compressed/compressed-saves.cpp
@@ -183,7 +183,7 @@ protected:
int _zlibErr;
void processData(int flushType) {
- // This function is called by both write() and finalize.
+ // This function is called by both write() and finalize().
while (_zlibErr == Z_OK && (_stream.avail_in || flushType == Z_FINISH)) {
if (_stream.avail_out == 0) {
if (_wrapped->write(_buf, BUFSIZE) != BUFSIZE) {
@@ -218,6 +218,8 @@ public:
_stream.next_out = _buf;
_stream.avail_out = BUFSIZE;
+ _stream.avail_in = 0;
+ _stream.next_in = 0;
}
~CompressedOutSaveFile() {
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index 1fe54d629d..20249e758b 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -659,7 +659,23 @@ bool processSettings(Common::String &command, Common::StringMap &settings) {
if (!command.empty()) {
GameDescriptor gd = Base::findGame(command);
if (ConfMan.hasGameDomain(command) || !gd.gameid().empty()) {
+ bool idCameFromCommandLine = false;
+
+ // WORKAROUND: Fix for bug #1719463: "DETECTOR: Launching
+ // undefined target adds launcher entry"
+ //
+ // We designate gameids which come strictly from command line
+ // so AdvancedDetector will not save config file with invalid
+ // gameid in case target autoupgrade was performed
+ if (!ConfMan.hasGameDomain(command)) {
+ idCameFromCommandLine = true;
+ }
+
ConfMan.setActiveDomain(command);
+
+ if (idCameFromCommandLine)
+ ConfMan.set("id_came_from_command_line", "1");
+
} else {
usage("Unrecognized game target '%s'", command.c_str());
}
diff --git a/base/game.cpp b/base/game.cpp
index 960d9ef9f1..9aaaf3a6af 100644
--- a/base/game.cpp
+++ b/base/game.cpp
@@ -26,6 +26,16 @@
#include "base/game.h"
#include "base/plugins.h"
+const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list) {
+ const PlainGameDescriptor *g = list;
+ while (g->gameid) {
+ if (0 == scumm_stricmp(gameid, g->gameid))
+ break;
+ g++;
+ }
+ return g;
+}
+
void GameDescriptor::updateDesc(const char *extra) {
// TODO: The format used here (LANG/PLATFORM/EXTRA) is not set in stone.
// We may want to change the order (PLATFORM/EXTRA/LANG, anybody?), or
@@ -58,7 +68,7 @@ void GameDescriptor::updateDesc(const char *extra) {
namespace Base {
-// TODO: Find a better place for this function.
+// TODO: Find a better name & place for this function.
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin) {
// Find the GameDescriptor for this target
const PluginList &plugins = PluginManager::instance().getPlugins();
diff --git a/base/game.h b/base/game.h
index 9fd997c241..ab52601752 100644
--- a/base/game.h
+++ b/base/game.h
@@ -31,11 +31,31 @@
#include "common/array.h"
#include "common/hash-str.h"
+/**
+ * A simple structure used to map gameids (like "monkey", "sword1", ...) to
+ * nice human readable and descriptive game titles (like "The Secret of Monkey Island").
+ * This is a plain struct to make it possible to declare NULL-terminated C arrays
+ * consisting of PlainGameDescriptors.
+ */
struct PlainGameDescriptor {
const char *gameid;
- const char *description; // TODO: Rename this to "title" or so
+ const char *description;
};
+/**
+ * Given a list of PlainGameDescriptors, returns the first PlainGameDescriptor
+ * matching the given gameid. If not match is found return 0.
+ * The end of the list marked by a PlainGameDescriptor with gameid equal to 0.
+ */
+const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list);
+
+/**
+ * A hashmap describing details about a given game. In a sense this is a refined
+ * version of PlainGameDescriptor, as it also contains a gameid and a description string.
+ * But in addition, platform and language settings, as well as arbitrary other settings,
+ * can be contained in a GameDescriptor.
+ * This is an essential part of the glue between the game engines and the launcher code.
+ */
class GameDescriptor : public Common::StringMap {
public:
GameDescriptor() {
@@ -90,7 +110,7 @@ class Plugin;
namespace Base {
-// TODO: Find a better place for this function.
+// TODO: Find a better name & place for this function.
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin = NULL);
} // End of namespace Base
diff --git a/base/internal_version.h b/base/internal_version.h
index 210b4fb95c..8f92fd8af7 100644
--- a/base/internal_version.h
+++ b/base/internal_version.h
@@ -1 +1 @@
-#define SCUMMVM_VERSION "0.10.0svn"
+#define SCUMMVM_VERSION "0.11.0svn"
diff --git a/base/main.cpp b/base/main.cpp
index 38e93e2961..85e711bce1 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -82,7 +82,7 @@ static bool launcherDialog(OSystem &system) {
return (dlg.runModal() != -1);
}
-static const Plugin *detectMain() {
+static const Plugin *detectPlugin() {
const Plugin *plugin = 0;
// Make sure the gameid is set in the config manager, and that it is lowercase.
@@ -109,6 +109,7 @@ static const Plugin *detectMain() {
return plugin;
}
+// TODO: specify the possible return values here
static int runGame(const Plugin *plugin, OSystem &system, const Common::String &edebuglevels) {
Common::String gameDataPath(ConfMan.get("path"));
if (gameDataPath.empty()) {
@@ -121,8 +122,11 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain);
}
- // We add it here, so MD5-based detection will be able to
- // read mixed case files
+ // We add the game "path" to the file search path via File::addDefaultDirectory(),
+ // so that MD5-based detection will be able to properly find files with mixed case
+ // filenames.
+ // FIXME/TODO: Fingolfin still doesn't like this; if those MD5-based detectors used
+ // FSNodes instead of File::open, they wouldn't have to do this.
Common::String path;
if (ConfMan.hasKey("path")) {
path = ConfMan.get("path");
@@ -190,18 +194,26 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain))
Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain));
+#ifdef DATA_PATH
+ // Add the global DATA_PATH to the directory search list
+ Common::File::addDefaultDirectoryRecursive(DATA_PATH);
+#endif
+
// On creation the engine should've set up all debug levels so we can use
// the command line arugments here
Common::enableSpecialDebugLevelList(edebuglevels);
int result;
- // Init the engine (this might change the screen parameters
+ // Init the engine (this might change the screen parameters)
+ // TODO: We should specify what return values
result = engine->init();
// Run the game engine if the initialization was successful.
if (result == 0) {
result = engine->go();
+ } else {
+ // TODO: Set an error flag, notify user about the problem
}
// We clear all debug levels again even though the engine should do it
@@ -213,7 +225,7 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
// Reset the file/directory mappings
Common::File::resetDefaultDirectories();
- return result;
+ return 0;
}
@@ -289,14 +301,18 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
// work as well as it should. In theory everything should be destroyed
// cleanly, so this is now enabled to encourage people to fix bits :)
while (0 != ConfMan.getActiveDomain()) {
- // Verify the given game name is a valid supported game
- const Plugin *plugin = detectMain();
+ // Try to find a plugin which feels responsible for the specified game.
+ const Plugin *plugin = detectPlugin();
if (plugin) {
// Unload all plugins not needed for this game,
// to save memory
PluginManager::instance().unloadPluginsExcept(plugin);
+ // Try to run the game
int result = runGame(plugin, system, specialDebug);
+ // TODO: We should keep running if starting the selected game failed
+ // (so instead of just quitting, show a nice error dialog to the
+ // user and let him pick another game).
if (result == 0)
break;
@@ -309,6 +325,9 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
// PluginManager::instance().unloadPlugins();
PluginManager::instance().loadPlugins();
+ } else {
+ GUI::MessageDialog alert("Could not find any engine capable of running the selected game!");
+ alert.runModal();
}
launcherDialog(system);
diff --git a/common/advancedDetector.cpp b/common/advancedDetector.cpp
index d6b622451a..f3e8671025 100644
--- a/common/advancedDetector.cpp
+++ b/common/advancedDetector.cpp
@@ -87,7 +87,12 @@ static void upgradeTargetIfNecessary(const Common::ADParams &params) {
ConfMan.set("platform", Common::getPlatformCode(o->platform));
warning("Target upgraded from %s to %s", o->from, o->to);
- ConfMan.flushToDisk();
+
+ if (ConfMan.hasKey("id_came_from_command_line")) {
+ warning("Target came from command line. Skipping save");
+ } else {
+ ConfMan.flushToDisk();
+ }
break;
}
}
@@ -95,25 +100,31 @@ static void upgradeTargetIfNecessary(const Common::ADParams &params) {
GameDescriptor findGameID(
const char *gameid,
- const Common::ADParams &params
+ const PlainGameDescriptor *list,
+ const Common::ADObsoleteGameID *obsoleteList
) {
- const PlainGameDescriptor *g = params.list;
- while (g->gameid) {
- if (0 == scumm_stricmp(gameid, g->gameid))
- return GameDescriptor(*g);
- g++;
- }
-
- if (params.obsoleteList != 0) {
- const Common::ADObsoleteGameID *o = params.obsoleteList;
+ // First search the list of supported game IDs for a match.
+ const PlainGameDescriptor *g = findPlainGameDescriptor(gameid, list);
+ if (g)
+ return GameDescriptor(*g);
+
+ // If we didn't find the gameid in the main list, check if it
+ // is an obsolete game id.
+ if (obsoleteList != 0) {
+ const Common::ADObsoleteGameID *o = obsoleteList;
while (o->from) {
if (0 == scumm_stricmp(gameid, o->from)) {
- return GameDescriptor(gameid, "Obsolete game ID");
+ g = findPlainGameDescriptor(o->to, list);
+ if (g && g->description)
+ return GameDescriptor(gameid, "Obsolete game ID (" + Common::String(g->description) + ")");
+ else
+ return GameDescriptor(gameid, "Obsolete game ID");
}
o++;
}
}
+ // No match found
return GameDescriptor();
}
@@ -131,6 +142,24 @@ static GameDescriptor toGameDescriptor(const ADGameDescription &g, const PlainGa
return gd;
}
+// Almost identical to the toGameDescriptor function that takes a ADGameDescription and PlainGameDescriptor.
+// Just a little fine tuning about accessing variables.
+// Used because of fallback detection and the dynamic string content it needs.
+static GameDescriptor toGameDescriptor(const EncapsulatedADGameDesc &g, const PlainGameDescriptor *sg) {
+ const char *title = 0;
+
+ while (sg->gameid) {
+ if (!scumm_stricmp(g.getGameID(), sg->gameid))
+ title = sg->description;
+ sg++;
+ }
+
+ assert(g.realDesc);
+ GameDescriptor gd(g.getGameID(), title, g.realDesc->language, g.realDesc->platform);
+ gd.updateDesc(g.getExtra());
+ return gd;
+}
+
/**
* Generate a preferred target value as
* GAMEID-PLAFORM-LANG
@@ -155,38 +184,49 @@ static String generatePreferredTarget(const String &id, const ADGameDescription
return res;
}
+static void updateGameDescriptor(GameDescriptor &desc, const ADGameDescription *realDesc, const Common::ADParams &params) {
+ if (params.singleid != NULL) {
+ desc["preferredtarget"] = desc["gameid"];
+ desc["gameid"] = params.singleid;
+ }
+
+ if (params.flags & kADFlagAugmentPreferredTarget) {
+ if (!desc.contains("preferredtarget"))
+ desc["preferredtarget"] = desc["gameid"];
+
+ desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], realDesc);
+ }
+}
+
GameList detectAllGames(
const FSList &fslist,
const Common::ADParams &params
) {
ADGameDescList matches = detectGame(&fslist, params, Common::UNK_LANG, Common::kPlatformUnknown);
-
GameList detectedGames;
- for (uint i = 0; i < matches.size(); i++) {
- GameDescriptor desc(toGameDescriptor(*matches[i], params.list));
- if (params.singleid != NULL) {
- desc["preferredtarget"] = desc["gameid"];
- desc["gameid"] = params.singleid;
+ // Use fallback detector if there were no matches by other means
+ if (matches.empty() && params.fallbackDetectFunc != NULL) {
+ EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(&fslist);
+ if (fallbackDesc.realDesc != 0) {
+ GameDescriptor desc(toGameDescriptor(fallbackDesc, params.list));
+ updateGameDescriptor(desc, fallbackDesc.realDesc, params);
+ detectedGames.push_back(desc);
}
-
- if (params.flags & kADFlagAugmentPreferredTarget) {
- if (!desc.contains("preferredtarget"))
- desc["preferredtarget"] = desc["gameid"];
-
- desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], matches[i]);
- }
-
+ } else for (uint i = 0; i < matches.size(); i++) { // Otherwise use the found matches
+ GameDescriptor desc(toGameDescriptor(*matches[i], params.list));
+ updateGameDescriptor(desc, matches[i], params);
detectedGames.push_back(desc);
}
return detectedGames;
}
-const ADGameDescription *detectBestMatchingGame(
+EncapsulatedADGameDesc detectBestMatchingGame(
const Common::ADParams &params
) {
const ADGameDescription *agdDesc = 0;
+ EncapsulatedADGameDesc result;
Common::Language language = Common::UNK_LANG;
Common::Platform platform = Common::kPlatformUnknown;
@@ -210,11 +250,20 @@ const ADGameDescription *detectBestMatchingGame(
agdDesc = matches[0];
}
- if (agdDesc != 0) {
- debug(2, "Running %s", toGameDescriptor(*agdDesc, params.list).description().c_str());
+ if (agdDesc != 0) { // Check if we found a match without fallback detection
+ result = EncapsulatedADGameDesc(agdDesc);
+ } else if (params.fallbackDetectFunc != NULL) { // Use fallback detector if there were no matches by other means
+ EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(NULL);
+ if (fallbackDesc.realDesc != 0 && (params.singleid != NULL || fallbackDesc.getGameID() == gameid)) {
+ result = fallbackDesc; // Found a fallback match
+ }
}
- return agdDesc;
+ if (result.realDesc != 0) {
+ debug(2, "Running %s", toGameDescriptor(result, params.list).description().c_str());
+ }
+
+ return result;
}
PluginError detectGameForEngineCreation(
@@ -243,6 +292,14 @@ PluginError detectGameForEngineCreation(
}
}
+ // Use fallback detector if there were no matches by other means
+ if (params.fallbackDetectFunc != NULL) {
+ EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(&fslist);
+ if (fallbackDesc.realDesc != 0 && (params.singleid != NULL || fallbackDesc.getGameID() == gameid)) {
+ return kNoError;
+ }
+ }
+
return kNoGameDataFoundError;
}
@@ -281,6 +338,9 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
}
}
+ // TODO/FIXME: Fingolfin says: It's not good that we have two different code paths here,
+ // one using a FSList, one using File::open, as that will lead to discrepancies and subtle
+ // problems caused by those.
if (fslist != 0) {
// Get the information of the existing files
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
@@ -493,11 +553,6 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
}
}
- // If we still haven't got a match, try to use the fallback callback :-)
- if (matched.empty() && params.fallbackDetectFunc != 0) {
- matched = (*params.fallbackDetectFunc)(fslist);
- }
-
return matched;
}
diff --git a/common/advancedDetector.h b/common/advancedDetector.h
index fab847e671..5066ba71e9 100644
--- a/common/advancedDetector.h
+++ b/common/advancedDetector.h
@@ -64,6 +64,29 @@ struct ADGameDescription {
};
/**
+ * Encapsulates ADGameDescription and makes gameid and extra strings dynamic.
+ * Used in fallback detection when dynamically creating string content.
+ */
+struct EncapsulatedADGameDesc {
+ Common::String gameid;
+ Common::String extra;
+ const ADGameDescription *realDesc;
+
+ // Constructor for the EncapsulatedADGameDesc
+ EncapsulatedADGameDesc() : realDesc(0) {}
+ EncapsulatedADGameDesc(const ADGameDescription *paramRealDesc,
+ Common::String paramGameID = Common::String(""),
+ Common::String paramExtra = Common::String(""))
+ : realDesc(paramRealDesc), gameid(paramGameID), extra(paramExtra) {
+ assert(paramRealDesc != NULL);
+ }
+
+ // Functions for getting the correct gameid and extra values from the struct
+ const char *getGameID() const { return (gameid.empty() && realDesc != 0) ? realDesc->gameid : gameid.c_str(); }
+ const char *getExtra() const { return (extra.empty() && realDesc != 0) ? realDesc->extra : extra.c_str(); }
+};
+
+/**
* A list of pointers to ADGameDescription structs (or subclasses thereof).
*/
typedef Array<const ADGameDescription*> ADGameDescList;
@@ -177,7 +200,7 @@ struct ADParams {
*
* @todo
*/
- ADGameDescList (*fallbackDetectFunc)(const FSList *fslist);
+ EncapsulatedADGameDesc (*fallbackDetectFunc)(const FSList *fslist);
/**
* A bitmask of flags which can be used to configure the behavior
@@ -201,13 +224,17 @@ GameList gameIDList(const Common::ADParams &params);
* 'gameid' in there. If a match is found, returns a GameDescriptor
* with gameid and description set.
*/
-GameDescriptor findGameID(const char *gameid, const Common::ADParams &params);
+GameDescriptor findGameID(
+ const char *gameid,
+ const PlainGameDescriptor *list,
+ const Common::ADObsoleteGameID *obsoleteList = 0
+ );
// FIXME/TODO: Rename this function to something more sensible.
GameList detectAllGames(const FSList &fslist, const Common::ADParams &params);
// FIXME/TODO: Rename this function to something more sensible.
-const ADGameDescription *detectBestMatchingGame(const Common::ADParams &params);
+EncapsulatedADGameDesc detectBestMatchingGame(const Common::ADParams &params);
// FIXME/TODO: Rename this function to something more sensible.
// Only used by ADVANCED_DETECTOR_DEFINE_PLUGIN_WITH_FUNC
@@ -230,7 +257,7 @@ PluginError detectGameForEngineCreation(const Common::ADParams &params);
return Common::AdvancedDetector::gameIDList(params); \
} \
GameDescriptor Engine_##engine##_findGameID(const char *gameid) { \
- return Common::AdvancedDetector::findGameID(gameid, params); \
+ return Common::AdvancedDetector::findGameID(gameid, params.list, params.obsoleteList); \
} \
GameList Engine_##engine##_detectGames(const FSList &fslist) { \
return Common::AdvancedDetector::detectAllGames(fslist, params); \
diff --git a/common/events.h b/common/events.h
index 9b434e94f9..d5e578a9ce 100644
--- a/common/events.h
+++ b/common/events.h
@@ -26,6 +26,7 @@
#ifndef COMMON_EVENTS_H
#define COMMON_EVENTS_H
+#include "common/keyboard.h"
#include "common/rect.h"
#include "common/system.h"
#include "common/noncopyable.h"
@@ -57,19 +58,17 @@ enum EventType {
EVENT_QUIT = 10,
EVENT_SCREEN_CHANGED = 11,
+ /**
+ * The backend requests the agi engine's predictive dialog to be shown.
+ * TODO: Fingolfin suggests that it would be of better value to expand
+ * on this notion by generalizing its use. For example the backend could
+ * use events to ask for the save game dialog or to pause the engine.
+ * An associated enumerated type can accomplish this.
+ **/
EVENT_PREDICTIVE_DIALOG = 12
};
/**
- * Keyboard modifier flags, used for Event::kbd::flags.
- */
-enum {
- KBD_CTRL = 1 << 0,
- KBD_ALT = 1 << 1,
- KBD_SHIFT = 1 << 2
-};
-
-/**
* Data structure for an event. A pointer to an instance of Event
* can be passed to pollEvent.
* @todo Rework/document this structure. It should be made 100% clear which
@@ -108,33 +107,7 @@ struct Event {
* Keyboard data; only valid for keyboard events (EVENT_KEYDOWN and
* EVENT_KEYUP). For all other event types, content is undefined.
*/
- struct {
- /**
- * Abstract key code (will be the same for any given key regardless
- * of modifiers being held at the same time.
- * For example, this is the same for both 'A' and Shift-'A'.
- * @todo Document which values are to be used for non-ASCII keys
- * like F1-F10. For now, let's just say that our primary backend
- * is the SDL one, and it uses the values SDL uses... so until
- * we fix this, your best bet is to get a copy of SDL_keysym.h
- * and look at that, if you want to find out a key code.
- */
- int keycode;
- /**
- * ASCII-value of the pressed key (if any).
- * This depends on modifiers, i.e. pressing the 'A' key results in
- * different values here depending on the status of shift, alt and
- * caps lock.
- * For the function keys F1-F9, values of 315-323 are used.
- */
- uint16 ascii;
- /**
- * Status of the modifier keys. Bits are set in this for each
- * pressed modifier
- * @see KBD_CTRL, KBD_ALT, KBD_SHIFT
- */
- byte flags;
- } kbd;
+ KeyState kbd;
/**
* The mouse coordinates, in virtual screen coordinates. Only valid
* for mouse events.
diff --git a/common/scummsys.h b/common/scummsys.h
index e4f52295fb..4cb8d5d8e9 100644
--- a/common/scummsys.h
+++ b/common/scummsys.h
@@ -142,11 +142,6 @@
#define SCUMM_LITTLE_ENDIAN
- // FIXME: Do you really need to use 'long' on this port? Please replace
- // this comment with a new comment that states so, and ideally also
- // explains the reasons briefly.
- #define SCUMMVM_USE_LONG_INT
-
#define FORCEINLINE __forceinline
#define NORETURN _declspec(noreturn)
#define PLUGIN_EXPORT __declspec(dllexport)
@@ -240,11 +235,6 @@
#define SCUMM_BIG_ENDIAN
#define SCUMM_NEED_ALIGNMENT
- // FIXME: Do you really need to use 'long' on this port? Please replace
- // this comment with a new comment that states so, and ideally also
- // explains the reasons briefly.
- #define SCUMMVM_USE_LONG_INT
-
#elif defined(__DC__)
#define scumm_stricmp strcasecmp
diff --git a/common/str.cpp b/common/str.cpp
index 01d24c1e75..88aca87bb4 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -86,7 +86,16 @@ String::String(const String &str)
}
assert(_str != 0);
}
+
+String::String(char c)
+: _len(0), _str(_storage) {
+ _storage[0] = c;
+ _storage[1] = 0;
+
+ _len = (c == 0) ? 0 : 1;
+}
+
String::~String() {
decRefCount(_extern._refCount);
}
@@ -437,6 +446,18 @@ String operator +(const String &x, const char *y) {
return temp;
}
+String operator +(char x, const String &y) {
+ String temp(x);
+ temp += y;
+ return temp;
+}
+
+String operator +(const String &x, char y) {
+ String temp(x);
+ temp += y;
+ return temp;
+}
+
char *ltrim(char *t) {
while (isspace(*t))
t++;
diff --git a/common/str.h b/common/str.h
index 509300dd6f..55ff94c51c 100644
--- a/common/str.h
+++ b/common/str.h
@@ -99,6 +99,7 @@ public:
String() : _len(0), _str(_storage) { _storage[0] = 0; }
String(const char *str, uint32 len = 0);
String(const String &str);
+ String(char c);
virtual ~String();
String &operator =(const char *str);
@@ -187,9 +188,13 @@ protected:
// Append two strings to form a new (temp) string
String operator +(const String &x, const String &y);
+
String operator +(const char *x, const String &y);
String operator +(const String &x, const char *y);
+String operator +(const String &x, char y);
+String operator +(char x, const String &y);
+
// Some useful additional comparision operators for Strings
bool operator == (const char *x, const String &y);
bool operator != (const char *x, const String &y);
diff --git a/common/system.cpp b/common/system.cpp
index 2720a19775..f8068d41f5 100644
--- a/common/system.cpp
+++ b/common/system.cpp
@@ -101,3 +101,8 @@ Common::EventManager *OSystem::getEventManager() {
return s_eventManager;
}
+void OSystem::clearScreen() {
+ Graphics::Surface *screen = lockScreen();
+ memset(screen->pixels, 0, screen->h * screen->pitch);
+ unlockScreen();
+}
diff --git a/common/system.h b/common/system.h
index ccca1fb7c7..95f970d956 100644
--- a/common/system.h
+++ b/common/system.h
@@ -125,7 +125,7 @@ public:
kFeatureAutoComputeDirtyRects,
/**
- * This flags determines either cursor can have its own palette or not
+ * This flag determines either cursor can have its own palette or not
* It is currently used only by some Macintosh versions of Humongous
* Entertainment games. If backend doesn't implement this feature then
* engine switches to b/w version of cursors.
@@ -142,7 +142,22 @@ public:
/**
* Set to true to iconify the window.
*/
- kFeatureIconifyWindow
+ kFeatureIconifyWindow,
+
+ /**
+ * This feature, set to true, is a hint toward the backend to disable all
+ * key filtering/mapping, in cases where it would be beneficial to do so.
+ * As an example case, this is used in the agi engine's predictive dialog.
+ * When the dialog is displayed this feature is set so that backends with
+ * phone-like keypad temporarily unmap all user actions which leads to
+ * comfortable word entry. Conversely, when the dialog exits the feature
+ * is set to false.
+ * TODO: Fingolfin suggests that the way the feature is used can be
+ * generalized in this sense: Have a keyboard mapping feature, which the
+ * engine queries for to assign keys to actions ("Here's my default key
+ * map for these actions, what do you want them set to?").
+ */
+ kFeatureDisableKeyFiltering
};
/**
@@ -437,21 +452,34 @@ public:
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) = 0;
/**
- * Copies the current screen contents to a new surface, with the original
- * bit depth. This will allocate memory for the pixel data.
- * WARNING: surf->free() must be called by the user to avoid leaking.
+ * Lock the active screen framebuffer and return a Graphics::Surface
+ * representing it. The caller can then perform arbitrary graphics
+ * transformations on the framebuffer (blitting, scrolling, etc.).
+ * Must be followed by matching call to unlockScreen(). Calling code
+ * should make sure to only lock the framebuffer for the briefest
+ * periods of time possible, as the whole system is potentially stalled
+ * while the lock is active.
+ * Returns 0 if an error occurred. Otherwise an 8bit surface is returned.
*
- * @param surf the surfce to store the data in it
- * @return true if all went well, false if an error occured
+ * The returned surface must *not* be deleted by the client code.
+ */
+ virtual Graphics::Surface *lockScreen() = 0;
+
+ /**
+ * Unlock the screen framebuffer, and mark it as dirty (i.e. during the
+ * next updateScreen() call, the whole screen will be updated.
*/
- virtual bool grabRawScreen(Graphics::Surface *surf) = 0;
+ virtual void unlockScreen() = 0;
/**
* Clear the screen to black.
*/
- virtual void clearScreen() {}
+ virtual void clearScreen();
- /** Update the dirty areas of the screen. */
+ /**
+ * Flush the whole screen, that is render the current content of the screen
+ * framebuffer (resp. the dirty/changed parts of it) to the display.
+ */
virtual void updateScreen() = 0;
/**
@@ -763,7 +791,7 @@ public:
//@{
/**
- * Returh the audio mixer. For more information, refer to the
+ * Return the audio mixer. For more information, refer to the
* Audio::Mixer documentation.
*/
virtual Audio::Mixer *getMixer() = 0;
diff --git a/configure b/configure
index 668c26d3ea..8419ee642f 100755
--- a/configure
+++ b/configure
@@ -565,7 +565,7 @@ arm-riscos)
EXEEXT=",ff8"
;;
gp2x-linux)
- EXEEXT=".gpe"
+ EXEEXT=".gp2x"
;;
*)
EXEEXT=""
@@ -721,7 +721,7 @@ if test -n "$_host"; then
;;
arm-linux|arm-linux-gnueabi|arm-*-linux-gnueabi)
echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
- DEFINES="$DEFINES -DUNIX"
+ DEFINES="$DEFINES -DUNIX -DUSE_ARM_SOUND_ASM"
#not true for all ARM systems, but the interesting ones are all LE. Most (if not all) BE arm devices don't have a screen
_def_endianness='#define SCUMM_LITTLE_ENDIAN'
_def_align='#define SCUMM_NEED_ALIGNMENT'
@@ -731,7 +731,7 @@ if test -n "$_host"; then
;;
gp2x)
echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
- DEFINES="$DEFINES -DUNIX -DGP2X"
+ DEFINES="$DEFINES -DUNIX -DGP2X -DUSE_ARM_SOUND_ASM"
_def_endianness='#define SCUMM_LITTLE_ENDIAN'
_def_align='#define SCUMM_NEED_ALIGNMENT'
type_1_byte='char'
@@ -1324,7 +1324,7 @@ if test "$_build_sword1" = yes ; then
if test "$_mpeg2" = yes ; then
echo " (w/ mpeg2 cutscenes)"
else
- echo " (without mpeg2 cutscenes)"
+ echo " (without mpeg2 cutscenes)"
fi
fi
if test "$_build_sword2" = yes ; then
diff --git a/dists/macosx/DS_Store b/dists/macosx/DS_Store
index 52267caacd..f6be3b3d8c 100644
--- a/dists/macosx/DS_Store
+++ b/dists/macosx/DS_Store
Binary files differ
diff --git a/dists/macosx/Info.plist b/dists/macosx/Info.plist
index dfd259bb8d..d1396a54d2 100644
--- a/dists/macosx/Info.plist
+++ b/dists/macosx/Info.plist
@@ -9,7 +9,7 @@
<key>CFBundleExecutable</key>
<string>scummvm</string>
<key>CFBundleGetInfoString</key>
- <string>0.10.0svn, Copyright 2001-2006 The ScummVM team</string>
+ <string>0.11.0svn, Copyright 2001-2007 The ScummVM team</string>
<key>CFBundleIconFile</key>
<string>scummvm.icns</string>
<key>CFBundleIdentifier</key>
@@ -21,12 +21,12 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>0.10.0svn</string>
+ <string>0.11.0svn</string>
<key>CFBundleVersion</key>
- <string>0.10.0svn</string>
+ <string>0.11.0svn</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHumanReadableCopyright</key>
- <string>Copyright 2001-2006 The ScummVM team</string>
+ <string>Copyright 2001-2007 The ScummVM team</string>
</dict>
</plist>
diff --git a/dists/msvc71/agi.vcproj b/dists/msvc71/agi.vcproj
index 1995554ac2..a738eea3fa 100644
--- a/dists/msvc71/agi.vcproj
+++ b/dists/msvc71/agi.vcproj
@@ -231,6 +231,12 @@
RelativePath="..\..\engines\agi\view.h">
</File>
<File
+ RelativePath="..\..\engines\agi\wagparser.cpp">
+ </File>
+ <File
+ RelativePath="..\..\engines\agi\wagparser.h">
+ </File>
+ <File
RelativePath="..\..\engines\agi\words.cpp">
</File>
</Files>
diff --git a/dists/msvc71/scummvm.vcproj b/dists/msvc71/scummvm.vcproj
index d198329046..fb18d9b326 100644
--- a/dists/msvc71/scummvm.vcproj
+++ b/dists/msvc71/scummvm.vcproj
@@ -179,6 +179,9 @@
RelativePath="..\..\common\advancedDetector.h">
</File>
<File
+ RelativePath="..\..\common\algorithm.h">
+ </File>
+ <File
RelativePath="..\..\common\array.h">
</File>
<File
@@ -197,6 +200,9 @@
RelativePath="..\..\common\endian.h">
</File>
<File
+ RelativePath="..\..\common\events.h">
+ </File>
+ <File
RelativePath="..\..\common\file.cpp">
</File>
<File
@@ -239,6 +245,9 @@
RelativePath="..\..\common\mutex.h">
</File>
<File
+ RelativePath="..\..\common\noncopyable.h">
+ </File>
+ <File
RelativePath="..\..\common\pack-end.h">
</File>
<File
@@ -422,6 +431,9 @@
<File
RelativePath="..\..\sound\softsynth\ym2612.cpp">
</File>
+ <File
+ RelativePath="..\..\sound\softsynth\ym2612.h">
+ </File>
<Filter
Name="mt32"
Filter="">
diff --git a/dists/msvc8/agi.vcproj b/dists/msvc8/agi.vcproj
index c858028554..a90932df70 100644
--- a/dists/msvc8/agi.vcproj
+++ b/dists/msvc8/agi.vcproj
@@ -321,6 +321,14 @@
>
</File>
<File
+ RelativePath="..\..\engines\agi\wagparser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\engines\agi\wagparser.h"
+ >
+ </File>
+ <File
RelativePath="..\..\engines\agi\words.cpp"
>
</File>
diff --git a/dists/msvc8/lure.vcproj b/dists/msvc8/lure.vcproj
index 74f03c39c9..b125ba686e 100644
--- a/dists/msvc8/lure.vcproj
+++ b/dists/msvc8/lure.vcproj
@@ -169,22 +169,6 @@
>
</File>
<File
- RelativePath="..\..\engines\lure\debug-input.cpp"
- >
- </File>
- <File
- RelativePath="..\..\engines\lure\debug-input.h"
- >
- </File>
- <File
- RelativePath="..\..\engines\lure\debug-methods.cpp"
- >
- </File>
- <File
- RelativePath="..\..\engines\lure\debug-methods.h"
- >
- </File>
- <File
RelativePath="..\..\engines\lure\debugger.cpp"
>
</File>
@@ -221,6 +205,14 @@
>
</File>
<File
+ RelativePath="..\..\engines\lure\fights.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\engines\lure\fights.h"
+ >
+ </File>
+ <File
RelativePath="..\..\engines\lure\game.cpp"
>
</File>
@@ -321,6 +313,14 @@
>
</File>
<File
+ RelativePath="..\..\engines\lure\sound.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\engines\lure\sound.h"
+ >
+ </File>
+ <File
RelativePath="..\..\engines\lure\strings.cpp"
>
</File>
diff --git a/dists/msvc8/scummvm.vcproj b/dists/msvc8/scummvm.vcproj
index 01747e836c..2f59d57b18 100644
--- a/dists/msvc8/scummvm.vcproj
+++ b/dists/msvc8/scummvm.vcproj
@@ -75,8 +75,8 @@
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/scummvm.pdb"
SubSystem="1"
- TargetMachine="1"
EntryPointSymbol="WinMainCRTStartup"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -327,6 +327,10 @@
>
</File>
<File
+ RelativePath="..\..\common\keyboard.h"
+ >
+ </File>
+ <File
RelativePath="..\..\common\list.h"
>
</File>
@@ -665,6 +669,10 @@
/>
</FileConfiguration>
</File>
+ <File
+ RelativePath="..\..\sound\softsynth\ym2612.h"
+ >
+ </File>
<Filter
Name="mt32"
>
diff --git a/dists/redhat/scummvm-tools.spec b/dists/redhat/scummvm-tools.spec
index e415bac63f..dc09987061 100644
--- a/dists/redhat/scummvm-tools.spec
+++ b/dists/redhat/scummvm-tools.spec
@@ -7,7 +7,7 @@
# Prologue information
#------------------------------------------------------------------------------
Name : scummvm-tools
-Version : 0.10.0svn
+Version : 0.11.0svn
Release : 1
Summary : ScummVM-related tools
Group : Interpreters
@@ -33,12 +33,14 @@ Tools for compressing ScummVM datafiles and other related tools.
%build
make
+echo -e "\t\tThis script is installed as\n\t\t"%{_datadir}/scummvm-tools/convert_dxa.sh.sample >> README
%install
install -m755 -D encode_dxa %{buildroot}%{_bindir}/encode_dxa
-install -m755 -D compress_{queen,saga,scumm_san,scumm_sou,scumm_bun,simon,sword1,sword2,kyra} %{buildroot}%{_bindir}
+install -m755 -D compress_{agos,kyra,queen,saga,scumm_bun,scumm_san,scumm_sou,sword1,sword2,touche} %{buildroot}%{_bindir}
install -m755 -D de{kyra,scumm,sword2} %{buildroot}%{_bindir}
-install -m755 -D extract_{kyra,loom_tg16,mm_nes,mm_c64,zak_c64,scumm_mac,simon1_amiga} %{buildroot}%{_bindir}
+install -m755 -D extract_{agos,kyra,loom_tg16,mm_apple,mm_c64,mm_nes,scumm_mac,zak_c64} %{buildroot}%{_bindir}
+install -m644 -D convert_dxa.sh %{buildroot}%{_datadir}/scummvm-tools/convert_dxa.sh.sample
%clean
rm -Rf ${RPM_BUILD_ROOT}
@@ -52,6 +54,7 @@ rm -Rf ${RPM_BUILD_ROOT}
%attr(0755,root,root)%{_bindir}/de*
%attr(0755,root,root)%{_bindir}/extract_*
%attr(0755,root,root)%{_bindir}/encode_dxa
+%attr(0644,root,root)%{_datadir}/scummvm-tools/convert_dxa.sh.sample
#------------------------------------------------------------------------------
# Change Log
diff --git a/dists/redhat/scummvm.spec b/dists/redhat/scummvm.spec
index 44904c68d9..b17243f3c4 100644
--- a/dists/redhat/scummvm.spec
+++ b/dists/redhat/scummvm.spec
@@ -7,7 +7,7 @@
# Prologue information
#------------------------------------------------------------------------------
Name : scummvm
-Version : 0.10.0svn
+Version : 0.11.0svn
Release : 1
Summary : Graphic adventure game interpreter
Group : Interpreters
@@ -17,7 +17,10 @@ Url : http://www.scummvm.org
Source : %{name}-%{version}.tar.bz2
Source1 : libmad-0.15.1b.tar.bz2
-Source2 : mpeg2dec-0.4.0b.tar.bz2
+Source2 : mpeg2dec-0.4.1.tar.bz2
+Source3 : kyra.dat
+Source4 : queen.tbl
+Source5 : sky.cpt
BuildRoot : %{_tmppath}/%{name}-%{version}-root
BuildRequires: desktop-file-utils
@@ -34,11 +37,12 @@ BuildRequires: SDL-devel >= 1.2.2
%description
ScummVM is an interpreter that will play graphic adventure games written for
LucasArts' SCUMM virtual machine (such as Day of the Tentacle and
-Monkey Island), Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
+Monkey Island), Sierra's AGI adventures (such as early King's Quest and
+Space Quest games), Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2,
Interactive Binary Illusions' Flight of the Amazon Queen,
-Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth and Westwood's
-Legend of Kyrandia.
+Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth, Westwood's
+Legend of Kyrandia, and various others.
#------------------------------------------------------------------------------
# install scripts
@@ -49,8 +53,8 @@ mkdir tmp
%build
(cd libmad-0.15.1b; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
-(cd mpeg2dec-0.4.0; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
-./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix}
+(cd mpeg2dec-0.4.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
+./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release
make
%install
@@ -59,6 +63,10 @@ install -m644 -D dists/scummvm.6 %{buildroot}%{_mandir}/man6/scummvm.6
install -m644 -D icons/scummvm.xpm %{buildroot}%{_datadir}/pixmaps/scummvm.xpm
install -m644 -D gui/themes/modern.ini %{buildroot}%{_datadir}/scummvm/modern.ini
install -m644 -D gui/themes/modern.zip %{buildroot}%{_datadir}/scummvm/modern.zip
+install -m644 -D dists/pred.dic %{buildroot}%{_datadir}/scummvm/pred.dic
+install -m644 -D %{_sourcedir}/kyra.dat %{buildroot}%{_datadir}/scummvm/kyra.dat
+install -m644 -D %{_sourcedir}/queen.tbl %{buildroot}%{_datadir}/scummvm/queen.tbl
+install -m644 -D %{_sourcedir}/sky.cpt %{buildroot}%{_datadir}/scummvm/sky.cpt
desktop-file-install --vendor scummvm --dir=%{buildroot}/%{_datadir}/applications dists/scummvm.desktop
%clean
@@ -69,11 +77,15 @@ rm -Rf ${RPM_BUILD_ROOT}
#------------------------------------------------------------------------------
%files
%defattr(0644,root,root,0755)
-%doc AUTHORS README NEWS COPYING
+%doc AUTHORS README NEWS COPYING COPYRIGHT
%attr(0755,root,root)%{_bindir}/scummvm
%{_datadir}/applications/*
%{_datadir}/pixmaps/scummvm.xpm
%{_datadir}/scummvm/modern.*
+%{_datadir}/scummvm/pred.dic
+%{_datadir}/scummvm/kyra.dat
+%{_datadir}/scummvm/queen.tbl
+%{_datadir}/scummvm/sky.cpt
%{_mandir}/man6/scummvm.6*
#------------------------------------------------------------------------------
diff --git a/dists/redhat/scummvm.spec.in b/dists/redhat/scummvm.spec.in
index 0745e699bc..77e4636baa 100644
--- a/dists/redhat/scummvm.spec.in
+++ b/dists/redhat/scummvm.spec.in
@@ -17,7 +17,10 @@ Url : http://www.scummvm.org
Source : %{name}-%{version}.tar.bz2
Source1 : libmad-0.15.1b.tar.bz2
-Source2 : mpeg2dec-0.4.0b.tar.bz2
+Source2 : mpeg2dec-0.4.1.tar.bz2
+Source3 : kyra.dat
+Source4 : queen.tbl
+Source5 : sky.cpt
BuildRoot : %{_tmppath}/%{name}-%{version}-root
BuildRequires: desktop-file-utils
@@ -34,11 +37,12 @@ BuildRequires: SDL-devel >= 1.2.2
%description
ScummVM is an interpreter that will play graphic adventure games written for
LucasArts' SCUMM virtual machine (such as Day of the Tentacle and
-Monkey Island), Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
+Monkey Island), Sierra's AGI adventures (such as early King's Quest and
+Space Quest games), Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2,
Interactive Binary Illusions' Flight of the Amazon Queen,
-Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth and Westwood's
-Legend of Kyrandia.
+Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth, Westwood's
+Legend of Kyrandia, and various others.
#------------------------------------------------------------------------------
# install scripts
@@ -49,8 +53,8 @@ mkdir tmp
%build
(cd libmad-0.15.1b; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
-(cd mpeg2dec-0.4.0; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
-./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix}
+(cd mpeg2dec-0.4.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install)
+./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release
make
%install
@@ -59,6 +63,10 @@ install -m644 -D dists/scummvm.6 %{buildroot}%{_mandir}/man6/scummvm.6
install -m644 -D icons/scummvm.xpm %{buildroot}%{_datadir}/pixmaps/scummvm.xpm
install -m644 -D gui/themes/modern.ini %{buildroot}%{_datadir}/scummvm/modern.ini
install -m644 -D gui/themes/modern.zip %{buildroot}%{_datadir}/scummvm/modern.zip
+install -m644 -D dists/pred.dic %{buildroot}%{_datadir}/scummvm/pred.dic
+install -m644 -D %{_sourcedir}/kyra.dat %{buildroot}%{_datadir}/scummvm/kyra.dat
+install -m644 -D %{_sourcedir}/queen.tbl %{buildroot}%{_datadir}/scummvm/queen.tbl
+install -m644 -D %{_sourcedir}/sky.cpt %{buildroot}%{_datadir}/scummvm/sky.cpt
desktop-file-install --vendor scummvm --dir=%{buildroot}/%{_datadir}/applications dists/scummvm.desktop
%clean
@@ -69,11 +77,15 @@ rm -Rf ${RPM_BUILD_ROOT}
#------------------------------------------------------------------------------
%files
%defattr(0644,root,root,0755)
-%doc AUTHORS README NEWS COPYING
+%doc AUTHORS README NEWS COPYING COPYRIGHT
%attr(0755,root,root)%{_bindir}/scummvm
%{_datadir}/applications/*
%{_datadir}/pixmaps/scummvm.xpm
%{_datadir}/scummvm/modern.*
+%{_datadir}/scummvm/pred.dic
+%{_datadir}/scummvm/kyra.dat
+%{_datadir}/scummvm/queen.tbl
+%{_datadir}/scummvm/sky.cpt
%{_mandir}/man6/scummvm.6*
#------------------------------------------------------------------------------
diff --git a/dists/scummvm.rc b/dists/scummvm.rc
index 5cf3aacac9..9bac6f6a2a 100644
--- a/dists/scummvm.rc
+++ b/dists/scummvm.rc
@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "../../icons/scummvm.ico"
#endif
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,10,0,0
- PRODUCTVERSION 0,10,0,0
+ FILEVERSION 0,11,0,0
+ PRODUCTVERSION 0,11,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -25,13 +25,13 @@ BEGIN
BEGIN
VALUE "Comments", "Look! A three headed monkey (TM)! .. Nice use of the TM!\0"
VALUE "FileDescription", "http://www.scummvm.org/\0"
- VALUE "FileVersion", "0.10.0svn\0"
+ VALUE "FileVersion", "0.11.0svn\0"
VALUE "InternalName", "scummvm\0"
VALUE "LegalCopyright", "Copyright © 2001-2007 The ScummVM Team\0"
VALUE "LegalTrademarks", "'SCUMM', and all SCUMM games are a TM of LucasArts. Simon The Sorcerer is a TM of AdventureSoft. Beneath a Steel Sky and Broken Sword are a TM of Revolution. Flight of the Amazon Queen is a TM of John Passfield and Steve Stamatiadis. \0"
VALUE "OriginalFilename", "scummvm.exe\0"
VALUE "ProductName", "ScummVM\0"
- VALUE "ProductVersion", "0.10.0svn\0"
+ VALUE "ProductVersion", "0.11.0svn\0"
END
END
BLOCK "VarFileInfo"
diff --git a/dists/slackware/scummvm.SlackBuild b/dists/slackware/scummvm.SlackBuild
index 579bb36e43..97171cbfd1 100755
--- a/dists/slackware/scummvm.SlackBuild
+++ b/dists/slackware/scummvm.SlackBuild
@@ -8,8 +8,7 @@ if [ "$TMP" = "" ]; then
fi
PKG=$TMP/package-scummvm
-VERSION=0.7.1
-#VERSION=20031221
+VERSION=0.11.0svn
ARCH=i486
BUILD=1
@@ -38,7 +37,7 @@ gzip -9 dists/scummvm.6
mkdir -p $PKG/usr/man/man6
cp dists/scummvm.6.gz $PKG/usr/man/man6
mkdir -p $PKG/usr/doc/scummvm-$VERSION
-cp -a AUTHORS COPYING ChangeLog NEWS README TODO \
+cp -a AUTHORS COPYING COPYRIGHT ChangeLog NEWS README TODO \
$PKG/usr/doc/scummvm-$VERSION
chmod 644 $PKG/usr/doc/scummvm-$VERSION
mkdir -p $PKG/install
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp
index a0496bf00b..74795271fc 100644
--- a/engines/agi/agi.cpp
+++ b/engines/agi/agi.cpp
@@ -69,6 +69,8 @@ void AgiEngine::processEvents() {
_system->quit();
break;
case Common::EVENT_PREDICTIVE_DIALOG:
+ if (_predictiveDialogRunning)
+ break;
if (_game.playerControl && predictiveDialog()) {
if (_game.inputMode == INPUT_NORMAL) {
strcpy((char *)_game.inputBuffer, _predictiveResult);
@@ -115,7 +117,7 @@ void AgiEngine::processEvents() {
_keyControl = 0;
_keyAlt = 0;
- if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'd') {
+ if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == Common::KEYCODE_d) {
_console->attach();
break;
}
@@ -127,106 +129,107 @@ void AgiEngine::processEvents() {
_keyAlt = 1;
switch (key = event.kbd.keycode) {
- case 256 + 20: // left arrow
- case 260: // key pad 4
+ case Common::KEYCODE_LEFT:
+ case Common::KEYCODE_KP4:
if (_allowSynthetic || !event.synthetic)
key = KEY_LEFT;
break;
- case 256 + 19: // right arrow
- case 262: // key pad 6
+ case Common::KEYCODE_RIGHT:
+ case Common::KEYCODE_KP6:
if (_allowSynthetic || !event.synthetic)
key = KEY_RIGHT;
break;
- case 256 + 17: // up arrow
- case 264: // key pad 8
+ case Common::KEYCODE_UP:
+ case Common::KEYCODE_KP8:
if (_allowSynthetic || !event.synthetic)
key = KEY_UP;
break;
- case 256 + 18: // down arrow
- case 258: // key pad 2
+ case Common::KEYCODE_DOWN:
+ case Common::KEYCODE_KP2:
if (_allowSynthetic || !event.synthetic)
key = KEY_DOWN;
break;
- case 256 + 24: // page up
- case 265: // key pad 9
+ case Common::KEYCODE_PAGEUP:
+ case Common::KEYCODE_KP9:
if (_allowSynthetic || !event.synthetic)
key = KEY_UP_RIGHT;
break;
- case 256 + 25: // page down
- case 259: // key pad 3
+ case Common::KEYCODE_PAGEDOWN:
+ case Common::KEYCODE_KP3:
if (_allowSynthetic || !event.synthetic)
key = KEY_DOWN_RIGHT;
break;
- case 256 + 22: // home
- case 263: // key pad 7
+ case Common::KEYCODE_HOME:
+ case Common::KEYCODE_KP7:
if (_allowSynthetic || !event.synthetic)
key = KEY_UP_LEFT;
break;
- case 256 + 23: // end
- case 257: // key pad 1
+ case Common::KEYCODE_END:
+ case Common::KEYCODE_KP1:
if (_allowSynthetic || !event.synthetic)
key = KEY_DOWN_LEFT;
break;
- case 261: // key pad 5
+ case Common::KEYCODE_KP5:
key = KEY_STATIONARY;
break;
- case '+':
+ case Common::KEYCODE_PLUS:
key = '+';
break;
- case '-':
+ case Common::KEYCODE_MINUS:
key = '-';
break;
- case 9:
+ case Common::KEYCODE_9:
key = 0x0009;
break;
- case 282:
+ case Common::KEYCODE_F1:
key = 0x3b00;
break;
- case 283:
+ case Common::KEYCODE_F2:
key = 0x3c00;
break;
- case 284:
+ case Common::KEYCODE_F3:
key = 0x3d00;
break;
- case 285:
+ case Common::KEYCODE_F4:
key = 0x3e00;
break;
- case 286:
+ case Common::KEYCODE_F5:
key = 0x3f00;
break;
- case 287:
+ case Common::KEYCODE_F6:
key = 0x4000;
break;
- case 288:
+ case Common::KEYCODE_F7:
key = 0x4100;
break;
- case 289:
+ case Common::KEYCODE_F8:
key = 0x4200;
break;
- case 290:
+ case Common::KEYCODE_F9:
key = 0x4300;
break;
- case 291:
+ case Common::KEYCODE_F10:
key = 0x4400;
break;
- case 292:
+ case Common::KEYCODE_F11:
key = KEY_STATUSLN;
break;
- case 293:
+ case Common::KEYCODE_F12:
key = KEY_PRIORITY;
break;
- case 27:
+ case Common::KEYCODE_ESCAPE:
key = 0x1b;
break;
- case '\n':
- case '\r':
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
key = KEY_ENTER;
break;
+ case Common::KEYCODE_BACKSPACE:
+ key = KEY_BACKSPACE;
+ break;
default:
if (key < 256 && !isalpha(key)) {
- // Make sure backspace works right (this fixes a small issue on OS X)
- if (key != 8)
- key = event.kbd.ascii;
+ key = event.kbd.ascii;
break;
}
if (_keyControl)
@@ -410,6 +413,10 @@ int AgiEngine::agiInit() {
if (getFeatures() & GF_AGDS)
_game.gameFlags |= ID_AGDS;
+ // Make the 256 color AGI screen the default AGI screen when AGI256 or AGI256-2 is used
+ if (getFeatures() & (GF_AGI256 | GF_AGI256_2))
+ _game.sbuf = _game.sbuf256c;
+
if (_game.gameFlags & ID_AMIGA)
report("Amiga padded game detected.\n");
@@ -591,7 +598,10 @@ AgiEngine::AgiEngine(OSystem *syst) : Engine(syst) {
_oldMode = -1;
- _searchTreeRoot = 0;
+ _predictiveDialogRunning = false;
+ _predictiveDictText = NULL;
+ _predictiveDictLine = NULL;
+ _predictiveDictLineCount = 0;
_firstSlot = 0;
}
@@ -640,7 +650,10 @@ void AgiEngine::initialize() {
_game.name[0] = '\0';
- _game.sbuf = (uint8 *)calloc(_WIDTH, _HEIGHT);
+ _game.sbufOrig = (uint8 *)calloc(_WIDTH, _HEIGHT * 2); // Allocate space for two AGI screens vertically
+ _game.sbuf16c = _game.sbufOrig + SBUF16_OFFSET; // Make sbuf16c point to the 16 color (+control line & priority info) AGI screen
+ _game.sbuf256c = _game.sbufOrig + SBUF256_OFFSET; // Make sbuf256c point to the 256 color AGI screen
+ _game.sbuf = _game.sbuf16c; // Make sbuf point to the 16 color (+control line & priority info) AGI screen by default
_gfx->initVideo();
_sound->initSound();
@@ -668,10 +681,13 @@ AgiEngine::~AgiEngine() {
delete _sound;
_gfx->deinitVideo();
delete _sprites;
- free(_game.sbuf);
+ free(_game.sbufOrig);
_gfx->deinitMachine();
delete _rnd;
delete _console;
+
+ free(_predictiveDictLine);
+ free(_predictiveDictText);
}
int AgiEngine::init() {
diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index 0167609514..56ae1288b8 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -371,7 +371,14 @@ struct AgiGame {
char cursorChar;
unsigned int colorFg;
unsigned int colorBg;
- uint8 *sbuf; /**< 160x168 AGI screen buffer */
+#define SBUF16_OFFSET 0
+#define SBUF256_OFFSET ((_WIDTH) * (_HEIGHT))
+#define FROM_SBUF16_TO_SBUF256_OFFSET ((SBUF256_OFFSET) - (SBUF16_OFFSET))
+#define FROM_SBUF256_TO_SBUF16_OFFSET ((SBUF16_OFFSET) - (SBUF256_OFFSET))
+ uint8 *sbufOrig; /**< Pointer to the 160x336 AGI screen buffer that contains vertically two 160x168 screens (16 color and 256 color). */
+ uint8 *sbuf16c; /**< 160x168 16 color (+control line & priority information) AGI screen buffer. Points at sbufOrig + SBUF16_OFFSET. */
+ uint8 *sbuf256c; /**< 160x168 256 color AGI screen buffer (For AGI256 and AGI256-2 support). Points at sbufOrig + SBUF256_OFFSET. */
+ uint8 *sbuf; /**< Currently chosen AGI screen buffer (sbuf256c if AGI256 or AGI256-2 is used, otherwise sbuf16c). */
/* player command line */
AgiWord egoWords[MAX_WORDS];
@@ -767,14 +774,16 @@ private:
void loadDict(void);
bool matchWord(void);
- SearchTree *_searchTreeRoot;
- SearchTree *_activeTreeNode;
-
- void insertSearchNode(const char *word);
-
+ // Predictive dialog
+ // TODO: Move this to a separate class
+ char *_predictiveDictText;
+ char **_predictiveDictLine;
+ int32 _predictiveDictLineCount;
+ char *_predictiveDictActLine;
String _currentCode;
String _currentWord;
int _wordNumber;
+ bool _predictiveDialogRunning;
public:
char _predictiveResult[40];
};
diff --git a/engines/agi/agi_v3.cpp b/engines/agi/agi_v3.cpp
index 33f670e779..69a8698ecb 100644
--- a/engines/agi/agi_v3.cpp
+++ b/engines/agi/agi_v3.cpp
@@ -64,7 +64,7 @@ int AgiLoader_v3::detectGame() {
if (f.hasSuffix("vol.0")) {
memset(_vm->_game.name, 0, 8);
- strncpy(_vm->_game.name, f.c_str(), f.size() > 5 ? f.size() - 5 : f.size());
+ strncpy(_vm->_game.name, f.c_str(), MIN((uint)8, f.size() > 5 ? f.size() - 5 : f.size()));
debugC(3, kDebugLevelMain, "game.name = %s", _vm->_game.name);
_intVersion = 0x3149; // setup for 3.002.149
ec = _vm->v3IdGame();
diff --git a/engines/agi/checks.cpp b/engines/agi/checks.cpp
index c9fafbbbbf..5d71af10cf 100644
--- a/engines/agi/checks.cpp
+++ b/engines/agi/checks.cpp
@@ -117,7 +117,7 @@ int AgiEngine::checkPriority(VtEntry *v) {
water = 1;
- p0 = &_game.sbuf[v->xPos + v->yPos * _WIDTH];
+ p0 = &_game.sbuf16c[v->xPos + v->yPos * _WIDTH];
for (i = 0; i < v->xSize; i++, p0++) {
pri = *p0 >> 4;
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index b7f8c12730..1ab59c0806 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -31,6 +31,7 @@
#include "common/file.h"
#include "agi/agi.h"
+#include "agi/wagparser.h"
namespace Agi {
@@ -1612,8 +1613,8 @@ static const AGIGameDescription gameDescriptions[] = {
FANMADE("AGI Quest (v1.46-TJ0)", "1cf1a5307c1a0a405f5039354f679814"),
FANMADE_I("tetris", "", "7a874e2db2162e7a4ce31c9130248d8a"),
FANMADE_V("AGI Trek (Demo)", "c02882b8a8245b629c91caf7eb78eafe", 0x2440),
- FANMADE("AGI256 Demo", "79261ac143b2e2773b2753674733b0d5"),
- FANMADE("AGI256-2 Demo", "3cad9b3aff1467cebf0c5c5b110985c5"),
+ FANMADE_F("AGI256 Demo", "79261ac143b2e2773b2753674733b0d5", GF_AGI256),
+ FANMADE_F("AGI256-2 Demo", "3cad9b3aff1467cebf0c5c5b110985c5", GF_AGI256_2),
FANMADE_LF("Abrah: L'orphelin de l'espace (v1.2)", "b7b6d1539e14d5a26fa3088288e1badc", Common::FR_FRA, GF_AGIPAL),
FANMADE("Acidopolis", "7017db1a4b726d0d59e65e9020f7d9f7"),
FANMADE("Agent 0055 (v1.0)", "c2b34a0c77acb05482781dda32895f24"),
@@ -1648,7 +1649,7 @@ static const AGIGameDescription gameDescriptions[] = {
FANMADE("DG: The Adventure Game (English v1.1)", "0d6376d493fa7a21ec4da1a063e12b25"),
FANMADE_L("DG: The Adventure Game (French v1.1)", "258bdb3bb8e61c92b71f2f456cc69e23", Common::FR_FRA),
FANMADE("Dashiki (16 Colors)", "9b2c7b9b0283ab9f12bedc0cb6770a07"),
- FANMADE_F("Dashiki (256 Colors)", "c68052bb209e23b39b55ff3d759958e6", GF_AGIMOUSE),
+ FANMADE_F("Dashiki (256 Colors)", "c68052bb209e23b39b55ff3d759958e6", GF_AGIMOUSE|GF_AGI256),
FANMADE("Date Quest 1 (v1.0)", "ba3dcb2600645be53a13170aa1a12e69"),
FANMADE("Date Quest 2 (v1.0 Demo)", "1602d6a2874856e928d9a8c8d2d166e9"),
FANMADE("Date Quest 2 (v1.0)", "f13f6fc85aa3e6e02b0c20408fb63b47"),
@@ -1825,112 +1826,178 @@ static const AGIGameDescription gameDescriptions[] = {
{ AD_TABLE_END_MARKER, 0, 0, 0, 0 }
};
-static const AGIGameDescription fallbackDescs[] = {
- {
- {
- "agi-fanmade",
- "Unknown v2 Game",
- AD_ENTRY1(0, 0),
- Common::UNK_LANG,
- Common::kPlatformPC,
- Common::ADGF_NO_FLAGS
- },
- GID_FANMADE,
- GType_V2,
- GF_FANMADE,
- 0x2917,
- },
- {
- {
- "agi-fanmade",
- "Unknown v2 AGIPAL Game",
- AD_ENTRY1(0, 0),
- Common::UNK_LANG,
- Common::kPlatformPC,
- Common::ADGF_NO_FLAGS
- },
- GID_FANMADE,
- GType_V2,
- GF_FANMADE | GF_AGIPAL,
- 0x2917,
- },
- {
- {
- "agi-fanmade",
- "Unknown v3 Game",
- AD_ENTRY1(0, 0),
- Common::UNK_LANG,
- Common::kPlatformPC,
- Common::ADGF_NO_FLAGS
- },
- GID_FANMADE,
- GType_V3,
- GF_FANMADE,
- 0x3149,
- },
+/**
+ * The fallback game descriptor used by the AGI engine's fallbackDetector.
+ * Contents of this struct are to be overwritten by the fallbackDetector.
+ */
+static AGIGameDescription g_fallbackDesc = {
+ {
+ "", // Not used by the fallback descriptor, it uses the EncapsulatedADGameDesc's gameid
+ "", // Not used by the fallback descriptor, it uses the EncapsulatedADGameDesc's extra
+ AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor
+ Common::UNK_LANG,
+ Common::kPlatformPC,
+ Common::ADGF_NO_FLAGS
+ },
+ GID_FANMADE,
+ GType_V2,
+ GF_FANMADE,
+ 0x2917,
};
-Common::ADGameDescList fallbackDetector(const FSList *fslist) {
- Common::String tstr;
+Common::EncapsulatedADGameDesc fallbackDetector(const FSList *fslist) {
typedef Common::HashMap<Common::String, int32, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> IntMap;
IntMap allFiles;
- Common::ADGameDescList matched;
- int matchedNum = -1;
+ bool matchedUsingFilenames = false;
+ bool matchedUsingWag = false;
+ int wagFileCount = 0;
+ WagFileParser wagFileParser;
+ Common::String wagFilePath;
+ Common::String gameid("agi-fanmade"), description, extra; // Set the defaults for gameid, description and extra
+ FSList fslistCurrentDir; // Only used if fslist == NULL
+
+ // Use the current directory for searching if fslist == NULL
+ if (fslist == NULL) {
+ FilesystemNode fsCurrentDir(".");
+ fslistCurrentDir.push_back(fsCurrentDir);
+ fslist = &fslistCurrentDir;
+ }
- // TODO:
- // WinAGI produces *.wag file with interpreter version, game name
- // and other parameters. Add support for this once specs are known
+ // Set the default values for the fallback descriptor's ADGameDescription part.
+ g_fallbackDesc.desc.language = Common::UNK_LANG;
+ g_fallbackDesc.desc.platform = Common::kPlatformPC;
+ g_fallbackDesc.desc.flags = Common::ADGF_NO_FLAGS;
+ // Set default values for the fallback descriptor's AGIGameDescription part.
+ g_fallbackDesc.gameID = GID_FANMADE;
+ g_fallbackDesc.features = GF_FANMADE;
+ g_fallbackDesc.version = 0x2917;
- // First grab all filenames
+ // First grab all filenames and at the same time count the number of *.wag files
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
if (file->isDirectory()) continue;
- tstr = file->getName();
- tstr.toLowercase();
-
- allFiles[tstr] = true;
+ Common::String filename = file->getName();
+ filename.toLowercase();
+ allFiles[filename] = true; // Save the filename in a hash table
+
+ if (filename.hasSuffix(".wag")) {
+ // Save latest found *.wag file's path (Can be used to open the file, the name can't)
+ wagFilePath = file->getPath();
+ wagFileCount++; // Count found *.wag files
+ }
}
- // Now check for v2
if (allFiles.contains("logdir") && allFiles.contains("object") &&
allFiles.contains("picdir") && allFiles.contains("snddir") &&
allFiles.contains("viewdir") && allFiles.contains("vol.0") &&
- allFiles.contains("words.tok")) {
- matchedNum = 0;
-
- // Check if it is AGIPAL
- if (allFiles.contains("pal.101"))
- matchedNum = 1;
+ allFiles.contains("words.tok")) { // Check for v2
+
+ // The default AGI interpreter version 0x2917 is okay for v2 games
+ // so we don't have to change it here.
+ matchedUsingFilenames = true;
+
+ if (allFiles.contains("pal.101")) { // Check if it is AGIPAL
+ description = "Unknown v2 AGIPAL Game";
+ g_fallbackDesc.features |= GF_AGIPAL; // Add AGIPAL feature flag
+ } else { // Not AGIPAL so just plain v2
+ description = "Unknown v2 Game";
+ }
} else { // Try v3
char name[8];
for (IntMap::const_iterator f = allFiles.begin(); f != allFiles.end(); ++f) {
if (f->_key.hasSuffix("vol.0")) {
memset(name, 0, 8);
- strncpy(name, f->_key.c_str(), f->_key.size() > 5 ? f->_key.size() - 5 : f->_key.size());
+ strncpy(name, f->_key.c_str(), MIN((uint)8, f->_key.size() > 5 ? f->_key.size() - 5 : f->_key.size()));
if (allFiles.contains("object") && allFiles.contains("words.tok") &&
allFiles.contains(Common::String(name) + "dir")) {
- matchedNum = 2;
+ matchedUsingFilenames = true;
+ description = "Unknown v3 Game";
+ g_fallbackDesc.version = 0x3149; // Set the default AGI version for an AGI v3 game
break;
}
}
}
}
-
- if (matchedNum != -1) {
- matched.push_back(&fallbackDescs[matchedNum].desc);
+
+ // WinAGI produces *.wag file with interpreter version, game name and other parameters.
+ // If there's exactly one *.wag file and it parses successfully then we'll use its information.
+ if (wagFileCount == 1 && wagFileParser.parse(wagFilePath.c_str())) {
+ matchedUsingWag = true;
+
+ const WagProperty *wagAgiVer = wagFileParser.getProperty(WagProperty::PC_INTVERSION);
+ const WagProperty *wagGameID = wagFileParser.getProperty(WagProperty::PC_GAMEID);
+ const WagProperty *wagGameDesc = wagFileParser.getProperty(WagProperty::PC_GAMEDESC);
+ const WagProperty *wagGameVer = wagFileParser.getProperty(WagProperty::PC_GAMEVERSION);
+ const WagProperty *wagGameLastEdit = wagFileParser.getProperty(WagProperty::PC_GAMELAST);
+
+ // If there is an AGI version number in the *.wag file then let's use it
+ if (wagAgiVer != NULL && wagFileParser.checkAgiVersionProperty(*wagAgiVer)) {
+ // TODO/FIXME: Check that version number is something we support before trying to use it.
+ // If the version number is unsupported then it'll get switched to 0x2917 later.
+ // But there's the possibility that file based detection has detected something else
+ // than a v2 AGI game. So there's a possibility for conflicting information.
+ g_fallbackDesc.version = wagFileParser.convertToAgiVersionNumber(*wagAgiVer);
+ }
+
+ // Set gameid according to *.wag file information if it's present and it doesn't contain whitespace.
+ if (wagGameID != NULL && !Common::String(wagGameID->getData()).contains(" ")) {
+ gameid = wagGameID->getData();
+ debug(3, "Agi::fallbackDetector: Using game id (%s) from WAG file", gameid.c_str());
+ }
+
+ // Set game description and extra according to *.wag file information if they're present
+ if (wagGameDesc != NULL) {
+ description = wagGameDesc->getData();
+ debug(3, "Agi::fallbackDetector: Game description (%s) from WAG file", wagGameDesc->getData());
+
+ // If there's game version in the *.wag file, set extra to it
+ if (wagGameVer != NULL) {
+ extra = wagGameVer->getData();
+ debug(3, "Agi::fallbackDetector: Game version (%s) from WAG file", wagGameVer->getData());
+ }
+
+ // If there's game last edit date in the *.wag file, add it to extra
+ if (wagGameLastEdit != NULL) {
+ if (!extra.empty() ) extra += " ";
+ extra += wagGameLastEdit->getData();
+ debug(3, "Agi::fallbackDetector: Game's last edit date (%s) from WAG file", wagGameLastEdit->getData());
+ }
+ }
+ } else if (wagFileCount > 1) { // More than one *.wag file, confusing! So let's not use them.
+ warning("More than one (%d) *.wag files found. WAG files ignored", wagFileCount);
+ }
+
+ // Check that the AGI interpreter version is a supported one
+ if (!(g_fallbackDesc.version >= 0x2000 && g_fallbackDesc.version < 0x4000)) {
+ warning("Unsupported AGI interpreter version 0x%x in AGI's fallback detection. Using default 0x2917", g_fallbackDesc.version);
+ g_fallbackDesc.version = 0x2917;
+ }
+
+ // Set game type (v2 or v3) according to the AGI interpreter version number
+ if (g_fallbackDesc.version >= 0x2000 && g_fallbackDesc.version < 0x3000)
+ g_fallbackDesc.gameType = GType_V2;
+ else if (g_fallbackDesc.version >= 0x3000 && g_fallbackDesc.version < 0x4000)
+ g_fallbackDesc.gameType = GType_V3;
+
+ // Check if we found a match with any of the fallback methods
+ Common::EncapsulatedADGameDesc result;
+ if (matchedUsingWag || matchedUsingFilenames) {
+ extra = description + " " + extra; // Let's combine the description and extra
+ result = Common::EncapsulatedADGameDesc((const Common::ADGameDescription *)&g_fallbackDesc, gameid, extra);
printf("Your game version has been detected using fallback matching as a\n");
- printf("variant of %s (%s).\n", fallbackDescs[matchedNum].desc.gameid, fallbackDescs[matchedNum].desc.extra);
+ printf("variant of %s (%s).\n", result.getGameID(), result.getExtra());
printf("If this is an original and unmodified version or new made Fanmade game,\n");
printf("please report any, information previously printed by ScummVM to the team.\n");
+
}
- return matched;
+ return result;
}
-}
+} // End of namespace Agi
static const Common::ADParams detectionParams = {
// Pointer to ADGameDescription or its superset structure
@@ -1960,7 +2027,9 @@ REGISTER_PLUGIN(AGI, "AGI v2 + v3 Engine", "Sierra AGI Engine (C) Sierra On-Line
namespace Agi {
bool AgiEngine::initGame() {
- _gameDescription = (const AGIGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const AGIGameDescription *)(encapsulatedDesc.realDesc);
+
return (_gameDescription != 0);
}
diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp
index 8f62ccc08d..2d64a4352e 100644
--- a/engines/agi/graphics.cpp
+++ b/engines/agi/graphics.cpp
@@ -89,6 +89,269 @@ uint8 newPalette[16 * 3] = {
0x3F, 0x3F, 0x3F
};
+/**
+ * 256 color palette used with AGI256 and AGI256-2 games.
+ * Uses full 8 bits per color component.
+ */
+uint8 vgaPalette[256 * 3] = {
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xA8,
+ 0x00, 0xA8, 0x00,
+ 0x00, 0xA8, 0xA8,
+ 0xA8, 0x00, 0x00,
+ 0xA8, 0x00, 0xA8,
+ 0xA8, 0x54, 0x00,
+ 0xA8, 0xA8, 0xA8,
+ 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0xFC,
+ 0x54, 0xFC, 0x54,
+ 0x54, 0xFC, 0xFC,
+ 0xFC, 0x54, 0x54,
+ 0xFC, 0x54, 0xFC,
+ 0xFC, 0xFC, 0x54,
+ 0xFC, 0xFC, 0xFC,
+ 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14,
+ 0x20, 0x20, 0x20,
+ 0x2C, 0x2C, 0x2C,
+ 0x38, 0x38, 0x38,
+ 0x44, 0x44, 0x44,
+ 0x50, 0x50, 0x50,
+ 0x60, 0x60, 0x60,
+ 0x70, 0x70, 0x70,
+ 0x80, 0x80, 0x80,
+ 0x90, 0x90, 0x90,
+ 0xA0, 0xA0, 0xA0,
+ 0xB4, 0xB4, 0xB4,
+ 0xC8, 0xC8, 0xC8,
+ 0xE0, 0xE0, 0xE0,
+ 0xFC, 0xFC, 0xFC,
+ 0x00, 0x00, 0xFC,
+ 0x40, 0x00, 0xFC,
+ 0x7C, 0x00, 0xFC,
+ 0xBC, 0x00, 0xFC,
+ 0xFC, 0x00, 0xFC,
+ 0xFC, 0x00, 0xBC,
+ 0xFC, 0x00, 0x7C,
+ 0xFC, 0x00, 0x40,
+ 0xFC, 0x00, 0x00,
+ 0xFC, 0x40, 0x00,
+ 0xFC, 0x7C, 0x00,
+ 0xFC, 0xBC, 0x00,
+ 0xFC, 0xFC, 0x00,
+ 0xBC, 0xFC, 0x00,
+ 0x7C, 0xFC, 0x00,
+ 0x40, 0xFC, 0x00,
+ 0x00, 0xFC, 0x00,
+ 0x00, 0xFC, 0x40,
+ 0x00, 0xFC, 0x7C,
+ 0x00, 0xFC, 0xBC,
+ 0x00, 0xFC, 0xFC,
+ 0x00, 0xBC, 0xFC,
+ 0x00, 0x7C, 0xFC,
+ 0x00, 0x40, 0xFC,
+ 0x7C, 0x7C, 0xFC,
+ 0x9C, 0x7C, 0xFC,
+ 0xBC, 0x7C, 0xFC,
+ 0xDC, 0x7C, 0xFC,
+ 0xFC, 0x7C, 0xFC,
+ 0xFC, 0x7C, 0xDC,
+ 0xFC, 0x7C, 0xBC,
+ 0xFC, 0x7C, 0x9C,
+ 0xFC, 0x7C, 0x7C,
+ 0xFC, 0x9C, 0x7C,
+ 0xFC, 0xBC, 0x7C,
+ 0xFC, 0xDC, 0x7C,
+ 0xFC, 0xFC, 0x7C,
+ 0xDC, 0xFC, 0x7C,
+ 0xBC, 0xFC, 0x7C,
+ 0x9C, 0xFC, 0x7C,
+ 0x7C, 0xFC, 0x7C,
+ 0x7C, 0xFC, 0x9C,
+ 0x7C, 0xFC, 0xBC,
+ 0x7C, 0xFC, 0xDC,
+ 0x7C, 0xFC, 0xFC,
+ 0x7C, 0xDC, 0xFC,
+ 0x7C, 0xBC, 0xFC,
+ 0x7C, 0x9C, 0xFC,
+ 0xB4, 0xB4, 0xFC,
+ 0xC4, 0xB4, 0xFC,
+ 0xD8, 0xB4, 0xFC,
+ 0xE8, 0xB4, 0xFC,
+ 0xFC, 0xB4, 0xFC,
+ 0xFC, 0xB4, 0xE8,
+ 0xFC, 0xB4, 0xD8,
+ 0xFC, 0xB4, 0xC4,
+ 0xFC, 0xB4, 0xB4,
+ 0xFC, 0xC4, 0xB4,
+ 0xFC, 0xD8, 0xB4,
+ 0xFC, 0xE8, 0xB4,
+ 0xFC, 0xFC, 0xB4,
+ 0xE8, 0xFC, 0xB4,
+ 0xD8, 0xFC, 0xB4,
+ 0xC4, 0xFC, 0xB4,
+ 0xB4, 0xFC, 0xB4,
+ 0xB4, 0xFC, 0xC4,
+ 0xB4, 0xFC, 0xD8,
+ 0xB4, 0xFC, 0xE8,
+ 0xB4, 0xFC, 0xFC,
+ 0xB4, 0xE8, 0xFC,
+ 0xB4, 0xD8, 0xFC,
+ 0xB4, 0xC4, 0xFC,
+ 0x00, 0x00, 0x70,
+ 0x1C, 0x00, 0x70,
+ 0x38, 0x00, 0x70,
+ 0x54, 0x00, 0x70,
+ 0x70, 0x00, 0x70,
+ 0x70, 0x00, 0x54,
+ 0x70, 0x00, 0x38,
+ 0x70, 0x00, 0x1C,
+ 0x70, 0x00, 0x00,
+ 0x70, 0x1C, 0x00,
+ 0x70, 0x38, 0x00,
+ 0x70, 0x54, 0x00,
+ 0x70, 0x70, 0x00,
+ 0x54, 0x70, 0x00,
+ 0x38, 0x70, 0x00,
+ 0x1C, 0x70, 0x00,
+ 0x00, 0x70, 0x00,
+ 0x00, 0x70, 0x1C,
+ 0x00, 0x70, 0x38,
+ 0x00, 0x70, 0x54,
+ 0x00, 0x70, 0x70,
+ 0x00, 0x54, 0x70,
+ 0x00, 0x38, 0x70,
+ 0x00, 0x1C, 0x70,
+ 0x38, 0x38, 0x70,
+ 0x44, 0x38, 0x70,
+ 0x54, 0x38, 0x70,
+ 0x60, 0x38, 0x70,
+ 0x70, 0x38, 0x70,
+ 0x70, 0x38, 0x60,
+ 0x70, 0x38, 0x54,
+ 0x70, 0x38, 0x44,
+ 0x70, 0x38, 0x38,
+ 0x70, 0x44, 0x38,
+ 0x70, 0x54, 0x38,
+ 0x70, 0x60, 0x38,
+ 0x70, 0x70, 0x38,
+ 0x60, 0x70, 0x38,
+ 0x54, 0x70, 0x38,
+ 0x44, 0x70, 0x38,
+ 0x38, 0x70, 0x38,
+ 0x38, 0x70, 0x44,
+ 0x38, 0x70, 0x54,
+ 0x38, 0x70, 0x60,
+ 0x38, 0x70, 0x70,
+ 0x38, 0x60, 0x70,
+ 0x38, 0x54, 0x70,
+ 0x38, 0x44, 0x70,
+ 0x50, 0x50, 0x70,
+ 0x58, 0x50, 0x70,
+ 0x60, 0x50, 0x70,
+ 0x68, 0x50, 0x70,
+ 0x70, 0x50, 0x70,
+ 0x70, 0x50, 0x68,
+ 0x70, 0x50, 0x60,
+ 0x70, 0x50, 0x58,
+ 0x70, 0x50, 0x50,
+ 0x70, 0x58, 0x50,
+ 0x70, 0x60, 0x50,
+ 0x70, 0x68, 0x50,
+ 0x70, 0x70, 0x50,
+ 0x68, 0x70, 0x50,
+ 0x60, 0x70, 0x50,
+ 0x58, 0x70, 0x50,
+ 0x50, 0x70, 0x50,
+ 0x50, 0x70, 0x58,
+ 0x50, 0x70, 0x60,
+ 0x50, 0x70, 0x68,
+ 0x50, 0x70, 0x70,
+ 0x50, 0x68, 0x70,
+ 0x50, 0x60, 0x70,
+ 0x50, 0x58, 0x70,
+ 0x00, 0x00, 0x40,
+ 0x10, 0x00, 0x40,
+ 0x20, 0x00, 0x40,
+ 0x30, 0x00, 0x40,
+ 0x40, 0x00, 0x40,
+ 0x40, 0x00, 0x30,
+ 0x40, 0x00, 0x20,
+ 0x40, 0x00, 0x10,
+ 0x40, 0x00, 0x00,
+ 0x40, 0x10, 0x00,
+ 0x40, 0x20, 0x00,
+ 0x40, 0x30, 0x00,
+ 0x40, 0x40, 0x00,
+ 0x30, 0x40, 0x00,
+ 0x20, 0x40, 0x00,
+ 0x10, 0x40, 0x00,
+ 0x00, 0x40, 0x00,
+ 0x00, 0x40, 0x10,
+ 0x00, 0x40, 0x20,
+ 0x00, 0x40, 0x30,
+ 0x00, 0x40, 0x40,
+ 0x00, 0x30, 0x40,
+ 0x00, 0x20, 0x40,
+ 0x00, 0x10, 0x40,
+ 0x20, 0x20, 0x40,
+ 0x28, 0x20, 0x40,
+ 0x30, 0x20, 0x40,
+ 0x38, 0x20, 0x40,
+ 0x40, 0x20, 0x40,
+ 0x40, 0x20, 0x38,
+ 0x40, 0x20, 0x30,
+ 0x40, 0x20, 0x28,
+ 0x40, 0x20, 0x20,
+ 0x40, 0x28, 0x20,
+ 0x40, 0x30, 0x20,
+ 0x40, 0x38, 0x20,
+ 0x40, 0x40, 0x20,
+ 0x38, 0x40, 0x20,
+ 0x30, 0x40, 0x20,
+ 0x28, 0x40, 0x20,
+ 0x20, 0x40, 0x20,
+ 0x20, 0x40, 0x28,
+ 0x20, 0x40, 0x30,
+ 0x20, 0x40, 0x38,
+ 0x20, 0x40, 0x40,
+ 0x20, 0x38, 0x40,
+ 0x20, 0x30, 0x40,
+ 0x20, 0x28, 0x40,
+ 0x2C, 0x2C, 0x40,
+ 0x30, 0x2C, 0x40,
+ 0x34, 0x2C, 0x40,
+ 0x3C, 0x2C, 0x40,
+ 0x40, 0x2C, 0x40,
+ 0x40, 0x2C, 0x3C,
+ 0x40, 0x2C, 0x34,
+ 0x40, 0x2C, 0x30,
+ 0x40, 0x2C, 0x2C,
+ 0x40, 0x30, 0x2C,
+ 0x40, 0x34, 0x2C,
+ 0x40, 0x3C, 0x2C,
+ 0x40, 0x40, 0x2C,
+ 0x3C, 0x40, 0x2C,
+ 0x34, 0x40, 0x2C,
+ 0x30, 0x40, 0x2C,
+ 0x2C, 0x40, 0x2C,
+ 0x2C, 0x40, 0x30,
+ 0x2C, 0x40, 0x34,
+ 0x2C, 0x40, 0x3C,
+ 0x2C, 0x40, 0x40,
+ 0x2C, 0x3C, 0x40,
+ 0x2C, 0x34, 0x40,
+ 0x2C, 0x30, 0x40,
+ 0x40, 0x40, 0x40,
+ 0x38, 0x38, 0x38,
+ 0x30, 0x30, 0x30,
+ 0x28, 0x28, 0x28,
+ 0x24, 0x24, 0x24,
+ 0x1C, 0x1C, 0x1C,
+ 0x14, 0x14, 0x14,
+ 0x0C, 0x0C, 0x0C
+};
+
static uint16 cgaMap[16] = {
0x0000, /* 0 - black */
0x0d00, /* 1 - blue */
@@ -135,7 +398,10 @@ GfxMgr::GfxMgr(AgiEngine *vm) : _vm(vm) {
* |
* Layer 2: 320x200 ================== AGI engine screen (console), put_pixel()
* |
- * Layer 1: 160x168 ================== AGI screen
+ * Layer 1: 160x336 ================== AGI screen
+ *
+ * Upper half (160x168) of Layer 1 is for the normal 16 color & control line/priority info.
+ * Lower half (160x168) of Layer 1 is for the 256 color information (Used with AGI256 & AGI256-2).
*/
#define SHAKE_MAG 3
@@ -373,15 +639,25 @@ void GfxMgr::initPalette(uint8 *p) {
void GfxMgr::gfxSetPalette() {
int i;
- byte pal[32 * 4];
-
- for (i = 0; i < 32; i++) {
- pal[i * 4 + 0] = _palette[i * 3 + 0] << 2;
- pal[i * 4 + 1] = _palette[i * 3 + 1] << 2;
- pal[i * 4 + 2] = _palette[i * 3 + 2] << 2;
- pal[i * 4 + 3] = 0;
+ byte pal[256 * 4];
+
+ if (!(_vm->getFeatures() & (GF_AGI256 | GF_AGI256_2))) {
+ for (i = 0; i < 32; i++) {
+ pal[i * 4 + 0] = _palette[i * 3 + 0] << 2;
+ pal[i * 4 + 1] = _palette[i * 3 + 1] << 2;
+ pal[i * 4 + 2] = _palette[i * 3 + 2] << 2;
+ pal[i * 4 + 3] = 0;
+ }
+ g_system->setPalette(pal, 0, 32);
+ } else {
+ for (i = 0; i < 256; i++) {
+ pal[i * 4 + 0] = vgaPalette[i * 3 + 0];
+ pal[i * 4 + 1] = vgaPalette[i * 3 + 1];
+ pal[i * 4 + 2] = vgaPalette[i * 3 + 2];
+ pal[i * 4 + 3] = 0;
+ }
+ g_system->setPalette(pal, 0, 256);
}
- g_system->setPalette(pal, 0, 32);
}
//Gets AGIPAL Data
@@ -539,11 +815,12 @@ void GfxMgr::putPixelsA(int x, int y, int n, uint8 *p) {
*(uint16 *)&_agiScreen[x + y * GFX_WIDTH] = q & 0x0f0f;
}
} else {
+ const uint16 mask = _vm->getFeatures() & (GF_AGI256 | GF_AGI256_2) ? 0xffff : 0x0f0f;
for (x *= 2; n--; p++, x += 2) {
register uint16 q = ((uint16) * p << 8) | *p;
if (_vm->_debug.priority)
q >>= 4;
- *(uint16 *)&_agiScreen[x + y * GFX_WIDTH] = q & 0x0f0f;
+ *(uint16 *)&_agiScreen[x + y * GFX_WIDTH] = q & mask;
}
}
}
diff --git a/engines/agi/module.mk b/engines/agi/module.mk
index 86b3e59a44..d74eba034a 100644
--- a/engines/agi/module.mk
+++ b/engines/agi/module.mk
@@ -28,6 +28,7 @@ MODULE_OBJS = \
sprite.o \
text.o \
view.o \
+ wagparser.o \
words.o
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp
index a51f536b49..c51514f237 100644
--- a/engines/agi/op_cmd.cpp
+++ b/engines/agi/op_cmd.cpp
@@ -515,7 +515,24 @@ cmd(obj_status_f) {
* unk_181: Deactivate keypressed control (default control of ego)
*/
cmd(set_simple) {
- game.simpleSave = true;
+ if (!(g_agi->getFeatures() & (GF_AGI256 | GF_AGI256_2))) {
+ game.simpleSave = true;
+ } else { // AGI256 and AGI256-2 use this unknown170 command to load 256 color pictures.
+ // Load the picture. Similar to cmd(load_pic).
+ g_sprites->eraseBoth();
+ g_agi->agiLoadResource(rPICTURE, _v[p0]);
+
+ // Draw the picture. Similar to cmd(draw_pic).
+ g_picture->decodePicture(_v[p0], false, true);
+ g_sprites->blitBoth();
+ game.pictureShown = 0;
+
+ // Show the picture. Similar to cmd(show_pic).
+ g_agi->setflag(fOutputMode, false);
+ cmd_close_window(NULL);
+ g_picture->showPic();
+ game.pictureShown = 1;
+ }
}
cmd(pop_script) {
diff --git a/engines/agi/picture.cpp b/engines/agi/picture.cpp
index 9a16d4ab20..cd8ef83de0 100644
--- a/engines/agi/picture.cpp
+++ b/engines/agi/picture.cpp
@@ -86,7 +86,7 @@ void PictureMgr::putVirtPixel(int x, int y) {
if (x < 0 || y < 0 || x >= _WIDTH || y >= _HEIGHT)
return;
- p = &_vm->_game.sbuf[y * _WIDTH + x];
+ p = &_vm->_game.sbuf16c[y * _WIDTH + x];
if (priOn)
*p = (priColour << 4) | (*p & 0x0f);
@@ -281,7 +281,7 @@ INLINE int PictureMgr::isOkFillHere(int x, int y) {
if (!scrOn && !priOn)
return false;
- p = _vm->_game.sbuf[y * _WIDTH + x];
+ p = _vm->_game.sbuf16c[y * _WIDTH + x];
if (!priOn && scrOn && scrColour != 15)
return (p & 0x0f) == 15;
@@ -619,8 +619,9 @@ uint8 *PictureMgr::convertV3Pic(uint8 *src, uint32 len) {
* drawing.
* @param n AGI picture resource number
* @param clear clear AGI screen before drawing
+ * @param agi256 load an AGI256 picture resource
*/
-int PictureMgr::decodePicture(int n, int clear) {
+int PictureMgr::decodePicture(int n, int clear, bool agi256) {
debugC(8, kDebugLevelResources, "(%d)", n);
patCode = 0;
@@ -633,10 +634,21 @@ int PictureMgr::decodePicture(int n, int clear) {
flen = _vm->_game.dirPic[n].len;
foffs = 0;
- if (clear)
- memset(_vm->_game.sbuf, 0x4f, _WIDTH * _HEIGHT);
+ if (clear && !agi256) // 256 color pictures should always fill the whole screen, so no clearing for them.
+ memset(_vm->_game.sbuf16c, 0x4f, _WIDTH * _HEIGHT); // Clear 16 color AGI screen (Priority 4, color white).
- drawPicture();
+ if (!agi256) {
+ drawPicture(); // Draw 16 color picture.
+ } else {
+ const uint32 maxFlen = _WIDTH * _HEIGHT;
+ memcpy(_vm->_game.sbuf256c, data, MIN(flen, maxFlen)); // Draw 256 color picture.
+
+ if (flen < maxFlen) {
+ warning("Undersized AGI256 picture resource %d, using it anyway. Filling rest with white.", n);
+ memset(_vm->_game.sbuf256c + flen, 0x0f, maxFlen - flen); // Fill missing area with white.
+ } else if (flen > maxFlen)
+ warning("Oversized AGI256 picture resource %d, decoding only %ux%u part of it", n, _WIDTH, _HEIGHT);
+ }
if (clear)
_vm->clearImageStack();
diff --git a/engines/agi/picture.h b/engines/agi/picture.h
index 6a3f641eca..0f8584f3b2 100644
--- a/engines/agi/picture.h
+++ b/engines/agi/picture.h
@@ -68,7 +68,7 @@ public:
_gfx = gfx;
}
- int decodePicture(int, int);
+ int decodePicture(int n, int clear, bool agi256 = false);
int unloadPicture(int);
void showPic();
uint8 *convertV3Pic(uint8 *src, uint32 len);
diff --git a/engines/agi/predictive.cpp b/engines/agi/predictive.cpp
index 5e086de2bb..67ebed5f05 100644
--- a/engines/agi/predictive.cpp
+++ b/engines/agi/predictive.cpp
@@ -28,6 +28,7 @@
#include "agi/keyboard.h"
#include "common/func.h"
+#include "common/config-manager.h"
namespace Agi {
@@ -35,99 +36,76 @@ namespace Agi {
#define kModeNum 1
#define kModeAbc 2
-static byte s_asciiToNumTable[256];
+#define MAXLINELEN 80
+
+uint8 countWordsInString(char *str) {
+ // Count the number of (space separated) words in the given string.
+ char *ptr;
+
+ if (!str)
+ return 0;
-void setAsciiToNumTableBatch(const char *chars, byte value) {
- while (*chars) {
- s_asciiToNumTable[tolower(*chars)] = value;
- s_asciiToNumTable[toupper(*chars)] = value;
- chars++;
+ ptr = strchr(str, ' ');
+ if (!ptr) {
+ debug("Invalid dictionary line");
+ return 0;
}
-}
-void initAsciiToNumTable() {
- memset(s_asciiToNumTable, 0, sizeof(s_asciiToNumTable));
-
- setAsciiToNumTableBatch("1'-.&", 1);
- setAsciiToNumTableBatch("2abc", 2);
- setAsciiToNumTableBatch("3def", 3);
- setAsciiToNumTableBatch("4ghi", 4);
- setAsciiToNumTableBatch("5jkl", 5);
- setAsciiToNumTableBatch("6mno", 6);
- setAsciiToNumTableBatch("7pqrs", 7);
- setAsciiToNumTableBatch("8tuv", 8);
- setAsciiToNumTableBatch("9wxyz", 9);
+ uint8 num = 1;
+ ptr++;
+ while ((ptr = strchr(ptr, ' '))) {
+ ptr++;
+ num++;
+ }
+ return num;
}
-class SearchTree {
-public:
- //byte val;
- //SearchTree *parent; // TODO: Could be used to speed up re-searches
- SearchTree *children[10];
+void bringWordtoTop(char *str, int wordnum) {
+ // This function reorders the words on the given pred.dic line
+ // by moving the word at position 'wordnum' to the front (that is, right behind
+ // right behind the numerical code word at the start of the line).
Common::StringList words;
-
- SearchTree() {
- memset(children, 0, sizeof(children));
- }
-
- SearchTree *getChild(byte val) {
- assert(val < 10);
- if (children[val] == 0) {
- children[val] = new SearchTree();
- }
- return children[val];
- }
+ char buf[MAXLINELEN];
- SearchTree *findChildWithWords() {
- if (!words.empty())
- return this;
-
- SearchTree *child = 0;
- for (int i = 0; i < 10 && !child; ++i) {
- if (children[i])
- child = children[i]->findChildWithWords();
- }
-
- return child;
- }
-
-};
-
-
-void AgiEngine::insertSearchNode(const char *word) {
- // Insert the word into the tree
- SearchTree *tree = _searchTreeRoot;
- assert(tree);
- for (int i = 0; word[i] != 0; ++i) {
- byte key = s_asciiToNumTable[(int)word[i]];
- if (key == 0)
- return; // abort!
- tree = tree->getChild(key);
+ if (!str)
+ return;
+ strncpy(buf, str, MAXLINELEN);
+ char *word = strtok(buf, " ");
+ if (!word) {
+ debug("Invalid dictionary line");
+ return;
}
- // TODO: Sort words, remove duplicates... ?
- tree->words.push_back(word);
+ words.push_back(word);
+ while ((word = strtok(NULL, " ")) != NULL)
+ words.push_back(word);
+ words.insert_at(1, words.remove_at(wordnum + 1));
+
+ Common::String tmp;
+ for (uint8 i = 0; i < words.size(); i++)
+ tmp += words[i] + " ";
+ tmp.deleteLastChar();
+ memcpy(str, tmp.c_str(), strlen(str));
}
bool AgiEngine::predictiveDialog(void) {
- int key, active = 0;
+ int key = 0, active = -1, lastactive = 0;
bool rc = false;
- int x;
+ uint8 x;
int y;
int bx[17], by[17];
- String prefix = "";
- char temp[MAXWORDLEN + 1];
+ String prefix;
+ char temp[MAXWORDLEN + 1], repeatcount[MAXWORDLEN];
AgiBlock tmpwindow;
-
- // FIXME: Move this to a more appropriate place.
- initAsciiToNumTable();
+ bool navigationwithkeys = false;
+ bool processkey;
const char *buttonStr[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
const char *buttons[] = {
"(1)'-.&", "(2)abc", "(3)def",
"(4)ghi", "(5)jkl", "(6)mno",
"(7)pqrs", "(8)tuv", "(9)wxyz",
- "next", "add",
+ "(#)next", "add",
"<",
"Cancel", "OK",
"Pre", "(0) ", NULL
@@ -141,13 +119,21 @@ bool AgiEngine::predictiveDialog(void) {
15, 0, 15, 0,
14, 0, 15, 0, 0, 0
};
- const char *modes[] = { "Pre", "123", "Abc" };
+ const char *modes[] = { "(*)Pre", "(*)123", "(*)Abc" };
- if (!_searchTreeRoot) {
+ // FIXME: Move this to a more appropriate place.
+ if (!_predictiveDictText) {
loadDict();
- if (!_searchTreeRoot)
+ if (!_predictiveDictText)
return false;
}
+ _predictiveDictActLine = NULL;
+ uint8 numMatchingWords = 0;
+
+ _predictiveDialogRunning = true;
+ _system->setFeatureState(OSystem::kFeatureDisableKeyFiltering, true);
+
+ memset(repeatcount, 0, MAXWORDLEN);
// show the predictive dialog.
// if another window is already in display, save its state into tmpwindow
@@ -158,13 +144,11 @@ bool AgiEngine::predictiveDialog(void) {
_gfx->drawRectangle(62, 54, 249, 66, MSG_BOX_TEXT);
_gfx->flushBlock(62, 54, 249, 66);
- _gfx->printCharacter(3, 11, _game.cursorChar, MSG_BOX_COLOUR, MSG_BOX_TEXT);
-
bx[15] = 73; // Zero/space
by[15] = 120;
- bx[9] = 120; // next
+ bx[9] = 110; // next
by[9] = 120;
- bx[10] = 160; // add
+ bx[10] = 172; // add
by[10] = 120;
bx[14] = 200; // Mode
by[14] = 120;
@@ -188,14 +172,13 @@ bool AgiEngine::predictiveDialog(void) {
}
/* clear key queue */
- while (_gfx->keypress()) {
+ while (_gfx->keypress())
_gfx->getKey();
- }
- _currentCode = "";
- _currentWord = "";
+ prefix.clear();
+ _currentCode.clear();
+ _currentWord.clear();
_wordNumber = 0;
- _activeTreeNode = 0;
int mode = kModePre;
@@ -207,7 +190,8 @@ bool AgiEngine::predictiveDialog(void) {
int color1 = colors[i * 2];
int color2 = colors[i * 2 + 1];
- if (i == 9 && !(_activeTreeNode && _activeTreeNode->words.size() > 1)) { // Next
+ if (i == 9 && !((mode != kModeAbc && _predictiveDictActLine && numMatchingWords > 1)
+ || (mode == kModeAbc && _currentWord.size() && _currentWord.lastChar() != ' '))) { // Next
color2 = 7;
}
@@ -222,94 +206,253 @@ bool AgiEngine::predictiveDialog(void) {
}
}
- if (_currentWord != "") {
- temp[MAXWORDLEN] = 0;
+ temp[MAXWORDLEN] = 0;
- strncpy(temp, prefix.c_str(), MAXWORDLEN);
- strncat(temp, _currentWord.c_str(), MAXWORDLEN);
+ strncpy(temp, prefix.c_str(), MAXWORDLEN);
+ strncat(temp, _currentWord.c_str(), MAXWORDLEN);
- for (int i = prefix.size() + _currentCode.size(); i < MAXWORDLEN; i++)
- temp[i] = ' ';
+ for (int i = prefix.size() + _currentCode.size(); i < MAXWORDLEN; i++)
+ temp[i] = ' ';
- printText(temp, 0, 8, 7, MAXWORDLEN, 15, 0);
- _gfx->flushBlock(62, 54, 249, 66);
- }
+ printText(temp, 0, 8, 7, MAXWORDLEN, 15, 0);
+ _gfx->flushBlock(62, 54, 249, 66);
+
+ if (active >= 0 && !navigationwithkeys) {
+ // provide visual feedback only when not navigating with the arrows
+ // so that the user can see the active button.
+ active = -1;
+ needRefresh = true;
+ } else
+ needRefresh = false;
+
+ _gfx->doUpdate();
}
_gfx->pollTimer(); /* msdos driver -> does nothing */
key = doPollKeyboard();
+ processkey = false;
switch (key) {
case KEY_ENTER:
- rc = true;
- goto press;
+ if (navigationwithkeys) {
+ // when the user has utilized arrow key navigation,
+ // interpret enter as 'click' on the active button
+ active = lastactive;
+ } else {
+ // else it is a shortcut for 'Ok'
+ active = 13;
+ }
+ processkey = true;
+ break;
case KEY_ESCAPE:
rc = false;
goto getout;
case BUTTON_LEFT:
+ navigationwithkeys = false;
for (int i = 0; buttons[i]; i++) {
if (_gfx->testButton(bx[i], by[i], buttons[i])) {
- needRefresh = true;
active = i;
+ processkey = true;
+ break;
+ }
+ }
+ break;
+ case KEY_BACKSPACE:
+ active = 11;
+ processkey = true;
+ break;
+ case '#':
+ active = 9;
+ processkey = true;
+ break;
+ case '*':
+ active = 14;
+ processkey = true;
+ break;
+ case 0x09: /* Tab */
+ navigationwithkeys = true;
+ debugC(3, kDebugLevelText, "Focus change");
+ lastactive = active = lastactive + 1;
+ active %= ARRAYSIZE(buttons) - 1;
+ needRefresh = true;
+ break;
+ case KEY_LEFT:
+ navigationwithkeys = true;
+ if (lastactive == 0 || lastactive == 3 || lastactive == 6)
+ active = lastactive + 2;
+ else if (lastactive == 9)
+ active = 15;
+ else if (lastactive == 11)
+ active = 11;
+ else if (lastactive == 12)
+ active = 13;
+ else if (lastactive == 14)
+ active = 10;
+ else
+ active = lastactive - 1;
+ lastactive = active;
+ needRefresh = true;
+ break;
+ case KEY_RIGHT:
+ navigationwithkeys = true;
+ if (lastactive == 2 || lastactive == 5 || lastactive == 8)
+ active = lastactive - 2;
+ else if (lastactive == 10)
+ active = 14;
+ else if (lastactive == 11)
+ active = 11;
+ else if (lastactive == 13)
+ active = 12;
+ else if (lastactive == 15)
+ active = 9;
+ else
+ active = lastactive + 1;
+ lastactive = active;
+ needRefresh = true;
+ break;
+ case KEY_UP:
+ navigationwithkeys = true;
+ if (lastactive <= 2)
+ active = 11;
+ else if (lastactive == 9 || lastactive == 10)
+ active = lastactive - 2;
+ else if (lastactive == 11)
+ active = 13;
+ else if (lastactive == 14)
+ active = 8;
+ else if (lastactive == 15)
+ active = 6;
+ else
+ active = lastactive - 3;
+ lastactive = active;
+ needRefresh = true;
+ break;
+ case KEY_DOWN:
+ navigationwithkeys = true;
+ if (lastactive == 6)
+ active = 15;
+ else if (lastactive == 7 || lastactive == 8)
+ active = lastactive + 2;
+ else if (lastactive == 11)
+ active = 0;
+ else if (lastactive == 12 || lastactive == 13)
+ active = 11;
+ else if (lastactive == 14 || lastactive == 15)
+ active = lastactive - 2;
+ else
+ active = lastactive + 3;
+ lastactive = active;
+ needRefresh = true;
+ break;
+ default:
+ // handle numeric buttons
+ if (key >= '1' && key <= '9') {
+ active = key - '1';
+ processkey = true;
+ } else if (key == '0') {
+ active = 15;
+ processkey = true;
+ }
+ break;
+ }
- if (active == 15 && mode != kModeNum) { // Space
- strncpy(temp, _currentWord.c_str(), _currentCode.size());
-
- temp[_currentCode.size()] = 0;
-
- prefix += temp;
- prefix += " ";
- _currentCode = "";
- } if (active < 9 || active == 11 || active == 15) { // number or backspace
- if (active == 11) { // backspace
- if (_currentCode.size()) {
- _currentCode.deleteLastChar();
- } else {
- if (prefix.size())
- prefix.deleteLastChar();
- }
- } else if (active == 15) { // zero
+ if (processkey) {
+ if (active >= 0) {
+ needRefresh = true;
+ lastactive = active;
+ if (active == 15 && mode != kModeNum) { // Space
+ // bring MRU word at the top of the list when changing words
+ if (mode == kModePre && _predictiveDictActLine && numMatchingWords > 1 && _wordNumber != 0)
+ bringWordtoTop(_predictiveDictActLine, _wordNumber);
+ strncpy(temp, _currentWord.c_str(), _currentCode.size());
+ temp[_currentCode.size()] = 0;
+ prefix += temp;
+ prefix += " ";
+ _currentCode.clear();
+ _currentWord.clear();
+ numMatchingWords = 0;
+ memset(repeatcount, 0, MAXWORDLEN);
+ } else if (active < 9 || active == 11 || active == 15) { // number or backspace
+ if (active == 11) { // backspace
+ if (_currentCode.size()) {
+ repeatcount[_currentCode.size() - 1] = 0;
+ _currentCode.deleteLastChar();
+ } else {
+ if (prefix.size())
+ prefix.deleteLastChar();
+ }
+ } else if (prefix.size() + _currentCode.size() < MAXWORDLEN - 1) { // don't overflow the dialog line
+ if (active == 15) { // zero
_currentCode += buttonStr[9];
} else {
_currentCode += buttonStr[active];
}
+ }
- if (mode == kModeNum) {
+ switch (mode) {
+ case kModeNum:
_currentWord = _currentCode;
- } else if (mode == kModePre) {
+ break;
+ case kModePre:
if (!matchWord() && _currentCode.size()) {
_currentCode.deleteLastChar();
matchWord();
}
+ numMatchingWords = countWordsInString(_predictiveDictActLine);
+ break;
+ case kModeAbc:
+ for (x = 0; x < _currentCode.size(); x++)
+ if (_currentCode[x] >= '1')
+ temp[x] = buttons[_currentCode[x] - '1'][3 + repeatcount[x]];
+ temp[_currentCode.size()] = 0;
+ _currentWord = temp;
+ }
+ } else if (active == 9) { // next
+ if (mode == kModePre) {
+ if (_predictiveDictActLine && numMatchingWords > 1) {
+ _wordNumber = (_wordNumber + 1) % numMatchingWords;
+ char tmp[MAXLINELEN];
+ strncpy(tmp, _predictiveDictActLine, MAXLINELEN);
+ char *tok = strtok(tmp, " ");
+ for (uint8 i = 0; i <= _wordNumber; i++)
+ tok = strtok(NULL, " ");
+ _currentWord = String(tok, _currentCode.size());
}
- } else if (active == 9) { // next
- int totalWordsNumber = _activeTreeNode ? _activeTreeNode->words.size() : 0;
- if (totalWordsNumber > 0) {
- _wordNumber = (_wordNumber + 1) % totalWordsNumber;
- _currentWord = String(_activeTreeNode->words[_wordNumber].c_str(), _currentCode.size());
+ } else if (mode == kModeAbc){
+ x = _currentCode.size();
+ if (x) {
+ if (_currentCode.lastChar() == '1' || _currentCode.lastChar() == '7' || _currentCode.lastChar() == '9')
+ repeatcount[x - 1] = (repeatcount[x - 1] + 1) % 4;
+ else
+ repeatcount[x - 1] = (repeatcount[x - 1] + 1) % 3;
+ if (_currentCode.lastChar() >= '1')
+ _currentWord[x - 1] = buttons[_currentCode[x - 1] - '1'][3 + repeatcount[x - 1]];
}
- } else if (active == 10) { // add
- debug(0, "add");
- } else if (active == 13) { // Ok
- rc = true;
- goto press;
- } else if (active == 14) { // Mode
- mode++;
- if (mode > kModeAbc)
- mode = kModePre;
- } else {
- goto press;
}
+ } else if (active == 10) { // add
+ debug(0, "add");
+ } else if (active == 13) { // Ok
+ // bring MRU word at the top of the list when ok'ed out of the dialog
+ if (mode == kModePre && _predictiveDictActLine && numMatchingWords > 1 && _wordNumber != 0)
+ bringWordtoTop(_predictiveDictActLine, _wordNumber);
+ rc = true;
+ goto press;
+ } else if (active == 14) { // Mode
+ mode++;
+ if (mode > kModeAbc)
+ mode = kModePre;
+
+ // truncate current input at mode change
+ strncpy(temp, _currentWord.c_str(), _currentCode.size());
+ temp[_currentCode.size()] = 0;
+ prefix += temp;
+ _currentCode.clear();
+ _currentWord.clear();
+ memset(repeatcount, 0, MAXWORDLEN);
+ } else {
+ goto press;
}
}
- break;
- case 0x09: /* Tab */
- debugC(3, kDebugLevelText, "Focus change");
- active++;
- active %= ARRAYSIZE(buttons) - 1;
- needRefresh = true;
- break;
}
- _gfx->doUpdate();
}
press:
@@ -330,80 +473,120 @@ bool AgiEngine::predictiveDialog(void) {
_gfx->doUpdate();
}
+ _system->setFeatureState(OSystem::kFeatureDisableKeyFiltering, false);
+ _predictiveDialogRunning = false;
+
return rc;
}
-#define MAXLINELEN 80
-
void AgiEngine::loadDict(void) {
- Common::File in;
- char buf[MAXLINELEN];
- int words = 0, lines = 0;
+ Common::File inFile;
+ int lines = 0;
- if (!in.open("pred.txt"))
- return;
+ ConfMan.registerDefault("predictive_dictionary", "pred.dic");
- _searchTreeRoot = new SearchTree();
- words = 0;
+ uint32 time1 = _system->getMillis();
+ if (!inFile.open(ConfMan.get("predictive_dictionary")))
+ return;
- while (!in.eos() && in.readLine(buf, MAXLINELEN)) {
- // Skip leading & trailing whitespaces
- char *word = Common::trim(buf);
+ char *ptr;
+ int size = inFile.size();
- // Skip empty lines
- if (*word == 0)
- continue;
-
+ _predictiveDictText = (char *)malloc(size + 1);
+ if (!_predictiveDictText) {
+ warning("Not enough memory to load the predictive dictionary");
+ return;
+ }
+ inFile.read(_predictiveDictText, size);
+ _predictiveDictText[size] = 0;
+ uint32 time2 = _system->getMillis();
+ debug("Time to read %s: %d bytes, %d ms", inFile.name(), size, time2-time1);
+ inFile.close();
+
+ ptr = _predictiveDictText;
+ lines = 1;
+ while ((ptr = strchr(ptr, '\n'))) {
lines++;
+ ptr++;
+ }
- // The lines are of the form: "1234 word word"
- // I.e. first comes a T9 number, then a space separated list of
- // words with that T9 code. We simply ignore the T9 code, and then
- // insert the words in order of occurance.
- char *tok = strtok(word, " \t");
- if (tok) {
- while ((tok = strtok(NULL, " ")) != NULL) {
- insertSearchNode(tok);
- words++;
- }
- }
+ _predictiveDictLine = (char **)calloc(1, sizeof(char *) * lines);
+ if (_predictiveDictLine == NULL) {
+ warning("Cannot allocate memory for line index buffer.");
+ return;
+ }
+ _predictiveDictLine[0] = _predictiveDictText;
+ ptr = _predictiveDictText;
+ int i = 1;
+ while ((ptr = strchr(ptr, '\n'))) {
+ *ptr = 0;
+ ptr++;
+ _predictiveDictLine[i++] = ptr;
}
+ if (_predictiveDictLine[lines - 1][0] == 0)
+ lines--;
- debug(0, "Loaded %d lines with %d words", lines, words);
+ _predictiveDictLineCount = lines;
+ debug("Loaded %d lines", _predictiveDictLineCount);
+
+ uint32 time3 = _system->getMillis();
+ printf("Time to parse pred.dic: %d, total: %d\n", time3-time2, time3-time1);
}
bool AgiEngine::matchWord(void) {
if (_currentCode.empty()) {
return false;
}
-
- // Lookup word in the search tree
- SearchTree *tree = _searchTreeRoot;
- assert(tree);
- for (uint i = 0; i < _currentCode.size(); ++i) {
- int key = _currentCode[i] - '0';
- if (key < 1 || key > 9) {
- tree = 0;
- break; // Invalid key/code value, abort!
- }
- tree = tree->children[key];
- if (!tree)
- break; // No matching entry in the search tree, abort!
+ // Lookup word in the dictionary
+ int line, span, cmpRes, len;
+ char target[MAXWORDLEN];
+
+ strncpy(target, _currentCode.c_str(), MAXWORDLEN);
+ strcat(target, " ");
+
+ // do the search at most two times:
+ // first try to match the exact code, by matching also the space after the code
+ // if there is not an exact match, do it once more for the best matching prefix (drop the space)
+ len = _currentCode.size() + 1;
+ for (int i = 0; i < 2; ++i) {
+ line = (_predictiveDictLineCount + 1) / 2 - 1;
+ // find out the 2^upper_int(log2(_predictiveDictLineCount))
+ for (span = 1; span < _predictiveDictLineCount; span <<= 1)
+ ;
+ span >>= 1;
+ do {
+ cmpRes = strncmp(_predictiveDictLine[line], target, len);
+ if (cmpRes > 0) {
+ span /= 2;
+ line -= span;
+ if (line < 0)
+ line = 0;
+ } else if (cmpRes < 0) {
+ span /= 2;
+ line += span;
+ if (line >= _predictiveDictLineCount)
+ line = _predictiveDictLineCount - 1;
+ }
+ } while (cmpRes && span);
+ if (cmpRes == 0) // Exact match found? -> stop now
+ break;
+ len--; // Remove the trailing space
}
-
- if (tree)
- tree = tree->findChildWithWords();
- _wordNumber = 0;
- _activeTreeNode = tree;
_currentWord.clear();
-
-
- if (tree) {
- _currentWord = String(_activeTreeNode->words[_wordNumber].c_str(), _currentCode.size());
+ _wordNumber = 0;
+ if (!strncmp(_predictiveDictLine[line], target, len)) {
+ _predictiveDictActLine = _predictiveDictLine[line];
+ char tmp[MAXLINELEN];
+ strncpy(tmp, _predictiveDictActLine, MAXLINELEN);
+ char *tok = strtok(tmp, " ");
+ tok = strtok(NULL, " ");
+ _currentWord = String(tok, _currentCode.size());
+ return true;
+ } else {
+ _predictiveDictActLine = NULL;
+ return false;
}
-
- return tree != 0;
}
} // End of namespace Agi
diff --git a/engines/agi/sprite.cpp b/engines/agi/sprite.cpp
index 2d8bb38741..3d69968075 100644
--- a/engines/agi/sprite.cpp
+++ b/engines/agi/sprite.cpp
@@ -117,7 +117,11 @@ void SpritesMgr::blitPixel(uint8 *p, uint8 *end, uint8 col, int spr, int width,
/* Keep control line information visible, but put our
* priority over water (0x30) surface
*/
- *p = (pr < 0x30 ? pr : spr) | col;
+ if (_vm->getFeatures() & (GF_AGI256 | GF_AGI256_2))
+ *(p + FROM_SBUF16_TO_SBUF256_OFFSET) = col; // Write to 256 color buffer
+ else
+ *p = (pr < 0x30 ? pr : spr) | col; // Write to 16 color (+control line/priority info) buffer
+
*hidden = false;
/* Except if our priority is 15, which should never happen
@@ -132,7 +136,7 @@ void SpritesMgr::blitPixel(uint8 *p, uint8 *end, uint8 col, int spr, int width,
}
-int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c) {
+int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c, bool agi256_2) {
uint8 *p0, *p, *q = NULL, *end;
int i, j, t, m, col;
int hidden = true;
@@ -151,15 +155,15 @@ int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c) {
t = c->transparency;
m = c->mirror;
spr <<= 4;
- p0 = &_vm->_game.sbuf[x + y * _WIDTH + m * (c->width - 1)];
+ p0 = &_vm->_game.sbuf16c[x + y * _WIDTH + m * (c->width - 1)];
- end = _vm->_game.sbuf + _WIDTH * _HEIGHT;
+ end = _vm->_game.sbuf16c + _WIDTH * _HEIGHT;
for (i = 0; i < c->height; i++) {
p = p0;
while (*q) {
- col = (*q & 0xf0) >> 4;
- for (j = *q & 0x0f; j; j--, p += 1 - 2 * m) {
+ col = agi256_2 ? *q : (*q & 0xf0) >> 4; // Uses whole byte for color info with AGI256-2
+ for (j = agi256_2 ? 1 : *q & 0x0f; j; j--, p += 1 - 2 * m) { // No RLE with AGI256-2
if (col != t) {
blitPixel(p, end, col, spr, _WIDTH, &hidden);
}
@@ -451,7 +455,7 @@ void SpritesMgr::blitSprites(SpriteList& l) {
Sprite *s = *iter;
objsSaveArea(s);
debugC(8, kDebugLevelSprites, "s->v->entry = %d (prio %d)", s->v->entry, s->v->priority);
- hidden = blitCel(s->xPos, s->yPos, s->v->priority, s->v->celData);
+ hidden = blitCel(s->xPos, s->yPos, s->v->priority, s->v->celData, s->v->viewData->agi256_2);
if (s->v->entry == 0) { /* if ego, update f1 */
_vm->setflag(fEgoInvisible, hidden);
}
@@ -609,7 +613,7 @@ void SpritesMgr::addToPic(int view, int loop, int cel, int x, int y, int pri, in
eraseBoth();
debugC(4, kDebugLevelSprites, "blit_cel (%d, %d, %d, c)", x, y, pri);
- blitCel(x1, y1, pri, c);
+ blitCel(x1, y1, pri, c, _vm->_game.views[view].agi256_2);
/* If margin is 0, 1, 2, or 3, the base of the cel is
* surrounded with a rectangle of the corresponding priority.
@@ -629,8 +633,8 @@ void SpritesMgr::addToPic(int view, int loop, int cel, int x, int y, int pri, in
// don't let box extend below y.
if (y3 > y2) y3 = y2;
- p1 = &_vm->_game.sbuf[x1 + y3 * _WIDTH];
- p2 = &_vm->_game.sbuf[x2 + y3 * _WIDTH];
+ p1 = &_vm->_game.sbuf16c[x1 + y3 * _WIDTH];
+ p2 = &_vm->_game.sbuf16c[x2 + y3 * _WIDTH];
for (y = y3; y <= y2; y++) {
if ((*p1 >> 4) >= 4)
@@ -642,8 +646,8 @@ void SpritesMgr::addToPic(int view, int loop, int cel, int x, int y, int pri, in
}
debugC(4, kDebugLevelSprites, "pri box: %d %d %d %d (%d)", x1, y3, x2, y2, mar);
- p1 = &_vm->_game.sbuf[x1 + y3 * _WIDTH];
- p2 = &_vm->_game.sbuf[x1 + y2 * _WIDTH];
+ p1 = &_vm->_game.sbuf16c[x1 + y3 * _WIDTH];
+ p2 = &_vm->_game.sbuf16c[x1 + y2 * _WIDTH];
for (x = x1; x <= x2; x++) {
if ((*p1 >> 4) >= 4)
*p1 = (mar << 4) | (*p1 & 0x0f);
@@ -687,7 +691,7 @@ void SpritesMgr::showObj(int n) {
s.buffer = (uint8 *)malloc(s.xSize * s.ySize);
objsSaveArea(&s);
- blitCel(x1, y1, s.xSize, c);
+ blitCel(x1, y1, s.xSize, c, _vm->_game.views[n].agi256_2);
commitBlock(x1, y1, x2, y2);
_vm->messageBox(_vm->_game.views[n].descr);
objsRestoreArea(&s);
diff --git a/engines/agi/sprite.h b/engines/agi/sprite.h
index 2f703e352a..401446249b 100644
--- a/engines/agi/sprite.h
+++ b/engines/agi/sprite.h
@@ -56,7 +56,7 @@ private:
void *poolAlloc(int size);
void poolRelease(void *s);
void blitPixel(uint8 *p, uint8 *end, uint8 col, int spr, int width, int *hidden);
- int blitCel(int x, int y, int spr, ViewCel *c);
+ int blitCel(int x, int y, int spr, ViewCel *c, bool agi256_2);
void objsSaveArea(Sprite *s);
void objsRestoreArea(Sprite *s);
diff --git a/engines/agi/view.cpp b/engines/agi/view.cpp
index f80e4b6447..48e3ca5e3f 100644
--- a/engines/agi/view.cpp
+++ b/engines/agi/view.cpp
@@ -151,6 +151,7 @@ int AgiEngine::decodeView(int n) {
assert(v != NULL);
+ _game.views[n].agi256_2 = (READ_LE_UINT16(v) == 0xf00f); // Detect AGI256-2 views by their header bytes
_game.views[n].descr = READ_LE_UINT16(v + 3) ? (char *)(v + READ_LE_UINT16(v + 3)) : (char *)(v + 3);
/* if no loops exist, return! */
@@ -187,9 +188,18 @@ int AgiEngine::decodeView(int n) {
vc->width = *(v + cofs);
vc->height = *(v + cofs + 1);
- vc->transparency = *(v + cofs + 2) & 0xf;
- vc->mirrorLoop = (*(v + cofs + 2) >> 4) & 0x7;
- vc->mirror = (*(v + cofs + 2) >> 7) & 0x1;
+
+ if (!_game.views[n].agi256_2) {
+ vc->transparency = *(v + cofs + 2) & 0xf;
+ vc->mirrorLoop = (*(v + cofs + 2) >> 4) & 0x7;
+ vc->mirror = (*(v + cofs + 2) >> 7) & 0x1;
+ } else {
+ // Mirroring is disabled for AGI256-2 views because
+ // AGI256-2 uses whole 8 bits for the transparency variable.
+ vc->transparency = *(v + cofs + 2);
+ vc->mirrorLoop = 0;
+ vc->mirror = 0;
+ }
/* skip over width/height/trans|mirror data */
cofs += 3;
diff --git a/engines/agi/view.h b/engines/agi/view.h
index a20d63793a..f2efce0ec3 100644
--- a/engines/agi/view.h
+++ b/engines/agi/view.h
@@ -51,6 +51,7 @@ struct ViewLoop {
struct AgiView {
int numLoops;
struct ViewLoop *loop;
+ bool agi256_2;
char *descr;
uint8 *rdata;
};
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index 33737057f8..c98257f028 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -124,6 +124,10 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_tableIndexBase = 0;
_textIndexBase = 0;
+ _numMusic = 0;
+ _numSFX = 0;
+ _numSpeech = 0;
+
_numBitArray1 = 0;
_numBitArray2 = 0;
_numBitArray3 = 0;
@@ -132,6 +136,7 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_numVars = 0;
_numVideoOpcodes = 0;
_vgaBaseDelay = 0;
+ _vgaPeriod = 0;
_strippedTxtMem = 0;
_textMem = 0;
@@ -197,13 +202,10 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_litBoxFlag = 0;
_mortalFlag = 0;
_displayScreen = false;
- _updateScreen = false;
_syncFlag2 = 0;
_inCallBack = 0;
_cepeFlag = 0;
- _copyPartialMode = 0;
_fastMode = 0;
- _useBackGround = 0;
_backFlag = 0;
@@ -298,6 +300,8 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_leftButtonDown = 0;
_rightButtonDown = 0;
_clickOnly = 0;
+ _leftClick = 0;
+ _oneClick = 0;
_noRightClick = false;
_leftButton = 0;
@@ -312,7 +316,6 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_scrollUpHitArea = 0;
_scrollDownHitArea = 0;
-
_noOverWrite = 0;
_rejectBlock = false;
@@ -331,6 +334,7 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_showPreposition = 0;
_showMessageFlag = 0;
+ _newDirtyClip = false;
_copyScnFlag = 0;
_vgaSpriteChanged = 0;
@@ -348,8 +352,6 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_curSfxFile = 0;
_syncCount = 0;
- _timer5 = 0;
- _timer4 = 0;
_iconToggleCount = 0;
_voiceCount = 0;
@@ -466,6 +468,9 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_planarBuf = 0;
+ _midiEnabled = false;
+ _nativeMT32 = false;
+
_vgaTickCounter = 0;
_moviePlay = 0;
@@ -494,7 +499,6 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_noOracleScroll = 0;
_backGroundBuf = 0;
- _frontBuf = 0;
_backBuf = 0;
_scaleBuf = 0;
@@ -566,34 +570,34 @@ int AGOSEngine::init() {
_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
- // Setup midi driver
- MidiDriver *driver = 0;
- if (getGameType() == GType_FF || getGameType() == GType_PP || getGameId() == GID_SIMON1CD32) {
- driver = MidiDriver::createMidi(MD_NULL);
- _native_mt32 = false;
- } else {
+ if ((getGameType() == GType_SIMON2 && getPlatform() == Common::kPlatformWindows) ||
+ (getGameType() == GType_SIMON1 && getPlatform() == Common::kPlatformWindows) ||
+ ((getFeatures() & GF_TALKIE) && getPlatform() == Common::kPlatformAcorn) ||
+ (getPlatform() == Common::kPlatformPC)) {
+
+ // Setup midi driver
int midiDriver = MidiDriver::detectMusicDriver(MDT_ADLIB | MDT_MIDI);
- _native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
- driver = MidiDriver::createMidi(midiDriver);
- if (_native_mt32) {
+ _nativeMT32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
+ MidiDriver *driver = MidiDriver::createMidi(midiDriver);
+ if (_nativeMT32) {
driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
}
- }
- _midi.mapMT32toGM (getGameType() != GType_SIMON2 && !_native_mt32);
+ _midi.mapMT32toGM (getGameType() != GType_SIMON2 && !_nativeMT32);
+
+ _midi.setDriver(driver);
+ int ret = _midi.open();
+ if (ret)
+ warning("MIDI Player init failed: \"%s\"", _midi.getErrorName (ret));
- _midi.setDriver(driver);
- int ret = _midi.open();
- if (ret)
- warning("MIDI Player init failed: \"%s\"", _midi.getErrorName (ret));
- _midi.setVolume(ConfMan.getInt("music_volume"));
+ _midi.setVolume(ConfMan.getInt("music_volume"));
- if (ConfMan.hasKey("music_mute") && ConfMan.getBool("music_mute") == 1)
- _midi.pause(_musicPaused ^= 1);
+
+ _midiEnabled = true;
+ }
// allocate buffers
_backGroundBuf = (byte *)calloc(_screenWidth * _screenHeight, 1);
- _frontBuf = (byte *)calloc(_screenWidth * _screenHeight, 1);
if (getGameType() == GType_FF || getGameType() == GType_PP) {
_backBuf = (byte *)calloc(_screenWidth * _screenHeight, 1);
@@ -607,7 +611,11 @@ int AGOSEngine::init() {
} else if (getGameType() == GType_WW || getGameType() == GType_ELVIRA2) {
_window4BackScn = (byte *)calloc(224 * 127, 1);
} else if (getGameType() == GType_ELVIRA1) {
- _window4BackScn = (byte *)calloc(224 * 127, 1);
+ if (getPlatform() == Common::kPlatformAmiga && (getFeatures() & GF_DEMO)) {
+ _window4BackScn = (byte *)calloc(224 * 196, 1);
+ } else {
+ _window4BackScn = (byte *)calloc(224 * 144, 1);
+ }
_window6BackScn = (byte *)calloc(48 * 80, 1);
}
@@ -618,6 +626,14 @@ int AGOSEngine::init() {
_moviePlay = new MoviePlayer(this, _mixer);
+ if (ConfMan.hasKey("music_mute") && ConfMan.getBool("music_mute") == 1) {
+ _musicPaused = true;
+ if (_midiEnabled) {
+ _midi.pause(_musicPaused);
+ }
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, 0);
+ }
+
if (ConfMan.hasKey("sfx_mute") && ConfMan.getBool("sfx_mute") == 1) {
if (getGameId() == GID_SIMON1DOS)
_midi._enable_sfx ^= 1;
@@ -693,6 +709,7 @@ void AGOSEngine_PuzzlePack::setupGame() {
_tableMemSize = 200000;
_frameCount = 1;
_vgaBaseDelay = 5;
+ _vgaPeriod = (getGameId() == GID_DIMP) ? 35 : 30;
_numBitArray1 = 128;
_numItemStore = 10;
_numTextBoxes = 40;
@@ -713,6 +730,7 @@ void AGOSEngine_Feeble::setupGame() {
_tableMemSize = 200000;
_frameCount = 1;
_vgaBaseDelay = 5;
+ _vgaPeriod = 50;
_numBitArray1 = 16;
_numBitArray2 = 16;
_numBitArray3 = 16;
@@ -736,19 +754,24 @@ void AGOSEngine_Simon2::setupGame() {
_itemMemSize = 20000;
_tableMemSize = 100000;
// Check whether to use MT-32 MIDI tracks in Simon the Sorcerer 2
- if ((getGameType() == GType_SIMON2) && _native_mt32)
+ if (getGameType() == GType_SIMON2 && _nativeMT32)
_musicIndexBase = (1128 + 612) / 4;
else
_musicIndexBase = 1128 / 4;
_soundIndexBase = 1660 / 4;
_frameCount = 1;
_vgaBaseDelay = 1;
+ _vgaPeriod = 45;
_numBitArray1 = 16;
_numBitArray2 = 16;
_numItemStore = 10;
_numTextBoxes = 20;
_numVars = 255;
+ _numMusic = 93;
+ _numSFX = 222;
+ _numSpeech = 3632;
+
AGOSEngine::setupGame();
}
@@ -768,12 +791,17 @@ void AGOSEngine_Simon1::setupGame() {
_soundIndexBase = 0;
_frameCount = 1;
_vgaBaseDelay = 1;
+ _vgaPeriod = 50;
_numBitArray1 = 16;
_numBitArray2 = 16;
_numItemStore = 10;
_numTextBoxes = 20;
_numVars = 255;
+ _numMusic = 34;
+ _numSFX = 127;
+ _numSpeech = 1996;
+
AGOSEngine::setupGame();
}
@@ -789,12 +817,15 @@ void AGOSEngine_Waxworks::setupGame() {
_tableMemSize = 50000;
_frameCount = 4;
_vgaBaseDelay = 1;
+ _vgaPeriod = 50;
_numBitArray1 = 16;
_numBitArray2 = 15;
_numItemStore = 50;
_numTextBoxes = 10;
_numVars = 255;
+ _numMusic = 9;
+
AGOSEngine::setupGame();
}
@@ -810,11 +841,14 @@ void AGOSEngine_Elvira2::setupGame() {
_tableMemSize = 100000;
_frameCount = 4;
_vgaBaseDelay = 1;
+ _vgaPeriod = 50;
_numBitArray1 = 16;
_numBitArray2 = 15;
_numItemStore = 50;
_numVars = 255;
+ _numMusic = 9;
+
AGOSEngine::setupGame();
}
@@ -830,8 +864,11 @@ void AGOSEngine_Elvira1::setupGame() {
_tableMemSize = 256000;
_frameCount = 4;
_vgaBaseDelay = 1;
+ _vgaPeriod = 50;
_numVars = 512;
+ _numMusic = 14;
+
AGOSEngine::setupGame();
}
@@ -876,7 +913,10 @@ void AGOSEngine::setupGame() {
}
AGOSEngine::~AGOSEngine() {
- delete _gameFile;
+ // Sync with AGOSEngine::shutdown()
+ // In Simon 2, this gets deleted along with _sound further down
+ if (getGameType() != GType_SIMON2)
+ delete _gameFile;
_midi.close();
@@ -892,7 +932,6 @@ AGOSEngine::~AGOSEngine() {
free(_textMem);
free(_backGroundBuf);
- free(_frontBuf);
free(_backBuf);
free(_scaleBuf);
@@ -906,7 +945,7 @@ AGOSEngine::~AGOSEngine() {
delete _dummyItem2;
delete _dummyItem3;
- delete [] _dummyWindow;
+ delete _dummyWindow;
delete [] _windowList;
delete _debugger;
@@ -925,13 +964,17 @@ void AGOSEngine::pause() {
bool music_status = _musicPaused;
_midi.pause(true);
+ _mixer->pauseAll(true);
_sound->ambientPause(true);
+
while (_pause) {
delay(1);
if (_keyPressed == 'p')
_pause = 0;
}
+
_midi.pause(music_status);
+ _mixer->pauseAll(false);
_sound->ambientPause(ambient_status);
}
@@ -982,7 +1025,7 @@ int AGOSEngine::go() {
}
if (getGameType() == GType_ELVIRA1 && getFeatures() & GF_DEMO) {
- loadMusic(0);
+ playMusic(0, 0);
}
if ((getPlatform() == Common::kPlatformAmiga || getPlatform() == Common::kPlatformMacintosh) &&
@@ -1004,18 +1047,44 @@ int AGOSEngine::go() {
}
void AGOSEngine::shutdown() {
- delete _gameFile;
+ // Sync with AGOSEngine::~AGOSEngine()
+ // In Simon 2, this gets deleted along with _sound further down
+ if (getGameType() != GType_SIMON2)
+ delete _gameFile;
_midi.close();
- free(_stringTabPtr);
- free(_itemArrayPtr);
free(_itemHeapPtr - _itemHeapCurPos);
free(_tablesHeapPtr - _tablesHeapCurPos);
- free(_tblList);
- free(_zoneBuffers);
- free(_iconFilePtr);
+
free(_gameOffsetsPtr);
+ free(_iconFilePtr);
+ free(_itemArrayPtr);
+ free(_stringTabPtr);
+ free(_strippedTxtMem);
+ free(_tblList);
+ free(_textMem);
+
+ free(_backGroundBuf);
+ free(_backBuf);
+ free(_scaleBuf);
+
+ free(_window4BackScn);
+ free(_window6BackScn);
+
+ free(_variableArray);
+ free(_variableArray2);
+
+ delete _dummyItem1;
+ delete _dummyItem2;
+ delete _dummyItem3;
+
+ delete _dummyWindow;
+ delete [] _windowList;
+
+ delete _debugger;
+ delete _moviePlay;
+ delete _sound;
_system->quit();
}
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index d51c1169cf..e487c38cc7 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -90,7 +90,8 @@ struct VgaSprite {
int16 x, y;
uint16 flags;
uint16 priority;
- uint16 windowNum, zoneNum;
+ uint16 windowNum;
+ uint16 zoneNum;
VgaSprite() { memset(this, 0, sizeof(*this)); }
};
@@ -117,8 +118,9 @@ struct AnimTable {
int16 y;
uint16 width;
uint16 height;
- uint16 window;
+ uint16 windowNum;
uint16 id;
+ uint16 zoneNum;
AnimTable() { memset(this, 0, sizeof(*this)); }
};
@@ -169,7 +171,7 @@ public:
void setupVgaOpcodes();
VgaOpcodeProc _vga_opcode_table[100];
- uint _numVideoOpcodes;
+ uint8 _numVideoOpcodes;
virtual void setupVideoOpcodes(VgaOpcodeProc *op);
@@ -187,7 +189,7 @@ public:
const char *getFileName(int type) const;
protected:
- void playSting(uint a);
+ void playSting(uint16 a);
const byte *_vcPtr; /* video code ptr */
uint16 _vc_get_out_of_code;
@@ -195,18 +197,22 @@ protected:
uint32 *_gameOffsetsPtr;
- uint _numBitArray1, _numBitArray2, _numBitArray3;
- uint _numItemStore, _numVars;
- uint _vgaBaseDelay;
+ uint8 _numMusic, _numSFX;
+ uint16 _numSpeech;
- uint _musicIndexBase;
- uint _soundIndexBase;
- uint _tableIndexBase;
- uint _textIndexBase;
+ uint8 _numBitArray1, _numBitArray2, _numBitArray3, _numItemStore;
+ uint16 _numVars;
- uint _itemMemSize;
- uint _tableMemSize;
- uint _vgaMemSize;
+ uint8 _vgaBaseDelay, _vgaPeriod;
+
+ uint16 _musicIndexBase;
+ uint16 _soundIndexBase;
+ uint16 _tableIndexBase;
+ uint16 _textIndexBase;
+
+ uint32 _itemMemSize;
+ uint32 _tableMemSize;
+ uint32 _vgaMemSize;
const GameSpecificSettings *gss;
@@ -255,9 +261,9 @@ protected:
Subroutine *_subroutineList;
uint _subroutine;
- uint _dxSurfacePitch;
+ uint16 _dxSurfacePitch;
- uint _recursionDepth;
+ uint8 _recursionDepth;
uint32 _lastVgaTick;
@@ -273,14 +279,10 @@ protected:
bool _litBoxFlag;
bool _mortalFlag;
bool _displayScreen;
- bool _updateScreen;
bool _syncFlag2;
bool _inCallBack;
bool _cepeFlag;
- byte _copyPartialMode;
bool _fastMode;
- bool _useBackGround;
-
bool _backFlag;
uint16 _debugMode;
@@ -297,9 +299,10 @@ protected:
bool _vgaVar9;
int16 _chanceModifier;
bool _restoreWindow6;
- int _scrollX, _scrollXMax, _scrollWidth;
- int _scrollY, _scrollYMax, _scrollHeight;
- int _scrollCount, _scrollFlag;
+ int16 _scrollX, _scrollXMax;
+ int16 _scrollY, _scrollYMax;
+ int16 _scrollCount, _scrollFlag;
+ uint16 _scrollWidth, _scrollHeight;
const byte *_scrollImage;
byte _boxStarHeight;
@@ -318,8 +321,8 @@ protected:
int _agosMenu;
byte _textMenu[10];
- uint _currentRoom, _superRoomNumber;
- uint _wallOn;
+ uint16 _currentRoom, _superRoomNumber;
+ uint8 _wallOn;
uint16 _hyperLink, _newLines;
uint16 _oracleMaxScrollY, _noOracleScroll;
@@ -355,8 +358,8 @@ protected:
uint16 _windowNum;
- uint _printCharCurPos, _printCharMaxPos, _printCharPixelCount;
- uint _numLettersToPrint;
+ int16 _printCharCurPos, _printCharMaxPos, _printCharPixelCount;
+ uint16 _numLettersToPrint;
uint _numTextBoxes;
@@ -381,7 +384,7 @@ protected:
byte _leftButtonDown;
byte _leftButton, _leftButtonCount, _leftButtonOld;
byte _rightButtonDown;
- bool _clickOnly;
+ bool _clickOnly, _leftClick, _oneClick;
bool _noRightClick;
Item *_dummyItem1;
@@ -412,6 +415,7 @@ protected:
bool _showPreposition;
bool _showMessageFlag;
+ bool _newDirtyClip;
uint _copyScnFlag, _vgaSpriteChanged;
byte *_block, *_blockEnd;
@@ -423,7 +427,7 @@ protected:
byte *_curVgaFile2;
byte *_curSfxFile;
- uint16 _syncCount, _timer5, _timer4;
+ uint16 _syncCount;
int16 _iconToggleCount, _voiceCount;
uint32 _lastTickCount, _thisTickCount;
@@ -439,7 +443,7 @@ protected:
int16 _baseY;
float _scale;
Common::Rect _feebleRect;
- int _scaleX, _scaleY, _scaleWidth, _scaleHeight;
+ int16 _scaleX, _scaleY, _scaleWidth, _scaleHeight;
VgaTimerEntry *_nextVgaTimerToProcess;
@@ -476,7 +480,7 @@ protected:
HitArea _hitAreas[250];
- AnimTable _screenAnim1[60];
+ AnimTable _screenAnim1[90];
VgaPointersEntry _vgaBufferPointers[450];
VgaSprite _vgaSprites[200];
VgaSleepStruct _waitEndTable[60];
@@ -499,9 +503,9 @@ protected:
byte _videoBuf1[32000];
uint16 _videoWindows[128];
- uint16 _window3Flag;
- uint16 _window4Flag;
- uint16 _window6Flag;
+ uint8 _window3Flag;
+ uint8 _window4Flag;
+ uint8 _window6Flag;
byte *_window4BackScn;
byte *_window6BackScn;
@@ -515,7 +519,8 @@ protected:
byte _lettersToPrintBuf[80];
MidiPlayer _midi;
- bool _native_mt32;
+ bool _midiEnabled;
+ bool _nativeMT32;
int _vgaTickCounter;
@@ -543,7 +548,6 @@ protected:
bool _oopsValid;
byte *_backGroundBuf;
- byte *_frontBuf;
byte *_backBuf;
byte *_scaleBuf;
@@ -567,7 +571,7 @@ protected:
void setupStringTable(byte *mem, int num);
void setupLocalStringTable(byte *mem, int num);
void readGamePcText(Common::SeekableReadStream *in);
- void readItemChildren(Common::SeekableReadStream *in, Item *item, uint tmp);
+ virtual void readItemChildren(Common::SeekableReadStream *in, Item *item, uint tmp);
void readItemFromGamePc(Common::SeekableReadStream *in, Item *item);
void loadGamePcFile();
void readGamePcFile(Common::SeekableReadStream *in);
@@ -597,7 +601,7 @@ protected:
void allocItemHeap();
void allocTablesHeap();
- Subroutine *createSubroutine(uint a);
+ Subroutine *createSubroutine(uint16 a);
void readSubroutine(Common::SeekableReadStream *in, Subroutine *sub);
SubroutineLine *createSubroutineLine(Subroutine *sub, int a);
void readSubroutineLine(Common::SeekableReadStream *in, SubroutineLine *new_table, Subroutine *sub);
@@ -628,9 +632,9 @@ protected:
uint getVarWrapper();
uint getVarOrWord();
uint getVarOrByte();
- uint readVariable(uint variable);
+ uint readVariable(uint16 variable);
void writeNextVarContents(uint16 contents);
- void writeVariable(uint variable, uint16 contents);
+ void writeVariable(uint16 variable, uint16 contents);
Item *derefItem(uint item);
Item *getNextItemPtr();
@@ -641,11 +645,11 @@ protected:
Item *actor();
void showMessageFormat(const char *s, ...);
- const byte *getStringPtrByID(uint stringId);
- const byte *getLocalStringByID(uint stringId);
+ const byte *getStringPtrByID(uint16 stringId);
+ const byte *getLocalStringByID(uint16 stringId);
uint getNextStringID();
- void addTimeEvent(uint timeout, uint subroutine_id);
+ void addTimeEvent(uint16 timeout, uint16 subroutine_id);
void delTimeEvent(TimeEvent *te);
Item *findInByClass(Item *i, int16 m);
@@ -665,8 +669,8 @@ protected:
void setItemParent(Item *item, Item *parent);
void setItemState(Item *item, int value);
- void stopAnimate(uint a);
- void stopAnimateSimon2(uint a, uint b);
+ void stopAnimate(uint16 a);
+ void stopAnimateSimon2(uint16 a, uint16 b);
void enableBox(uint hitarea);
void disableBox(uint hitarea);
@@ -729,11 +733,11 @@ protected:
void mouseOff();
void mouseOn();
- bool loadRoomItems(uint item);
+ bool loadRoomItems(uint16 item);
- virtual bool loadTablesIntoMem(uint subr_id);
- bool loadXTablesIntoMem(uint subr_id);
- void loadTextIntoMem(uint stringId);
+ virtual bool loadTablesIntoMem(uint16 subr_id);
+ bool loadXTablesIntoMem(uint16 subr_id);
+ void loadTextIntoMem(uint16 stringId);
uint loadTextFile(const char *filename, byte *dst);
Common::File *openTablesFile(const char *filename);
@@ -777,7 +781,8 @@ protected:
virtual void handleMouseMoved();
virtual void drawMousePointer();
- virtual void addArrows(WindowBlock *window);
+ void drawArrow(uint16 x, uint16 y, int8 dir);
+ virtual void addArrows(WindowBlock *window, uint8 num);
void removeArrows(WindowBlock *window, uint num);
virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y);
@@ -801,14 +806,13 @@ protected:
void justifyStart();
void justifyOutPut(byte chr);
- void loadZone(uint zoneNum);
+ void loadZone(uint16 zoneNum);
void animate(uint16 windowNum, uint16 zoneNum, uint16 vgaSpriteId, int16 x, int16 y, uint16 palette, bool vgaScript = false);
void setImage(uint16 vga_res_id, bool vgaScript = false);
void setWindowImage(uint16 mode, uint16 vga_res_id);
void setWindowImageEx(uint16 mode, uint16 vga_res);
- void playSpeech(uint speech_id, uint vga_sprite_id);
void skipSpeech();
bool printNameOf(Item *item, uint x, uint y);
@@ -1051,9 +1055,10 @@ public:
int16 levelOf(Item *item);
int16 moreText(Item *i);
void lobjFunc(Item *i, const char *f);
- uint confirmQuit();
+ uint confirmYesOrNo(uint16 x, uint16 y);
uint continueOrQuit();
void printScroll();
+ virtual void printStats();
void synchChain(Item *i);
protected:
@@ -1082,10 +1087,10 @@ protected:
void checkScrollY(int16 y, int16 ypos);
void centreScroll();
- void clearVideoWindow(uint windowNum, uint color);
- void clearVideoBackGround(uint windowNum, uint color);
+ void clearVideoWindow(uint16 windowNum, uint16 color);
+ void clearVideoBackGround(uint16 windowNum, uint16 color);
- void setPaletteSlot(uint srcOffs, uint dstOffs);
+ void setPaletteSlot(uint16 srcOffs, uint8 dstOffs);
void checkWaitEndTable();
void startOverlayAnims();
@@ -1116,12 +1121,12 @@ protected:
void sendWindow(uint a);
- void restoreWindow(WindowBlock *window);
- void colorWindow(WindowBlock *window);
+ virtual void colorWindow(WindowBlock *window);
+ void colorBlock(WindowBlock *window, uint16 x, uint16 y, uint16 w, uint16 h);
- void restoreBlock(uint h, uint w, uint y, uint x);
+ void restoreWindow(WindowBlock *window);
+ void restoreBlock(uint16 h, uint16 w, uint16 y, uint16 x);
- byte *getFrontBuf();
byte *getBackBuf();
byte *getBackGround();
byte *getScaleBuf();
@@ -1129,9 +1134,9 @@ protected:
byte *convertImage(VC10_state *state, bool compressed);
bool decrunchFile(byte *src, byte *dst, uint32 size);
- void loadVGABeardFile(uint id);
- void loadVGAVideoFile(uint id, uint type);
- bool loadVGASoundFile(uint id, uint type);
+ void loadVGABeardFile(uint16 id);
+ void loadVGAVideoFile(uint16 id, uint8 type);
+ bool loadVGASoundFile(uint16 id, uint8 type);
int init();
int go();
@@ -1146,11 +1151,12 @@ protected:
virtual void animateSprites();
void dirtyClips();
+ void dirtyClipCheck(int16 x, int16 y, int16 w, int16 h);
void dirtyBackGround();
void restoreBackGround();
void saveBackGround(VgaSprite *vsp);
- void clearSurfaces(uint num_lines);
+ void clearSurfaces();
void displayScreen();
void dumpVideoScript(const byte *src, bool one_opcode_only);
@@ -1161,10 +1167,10 @@ protected:
void dumpSingleBitmap(int file, int image, const byte *offs, int w, int h, byte base);
void dumpBitmap(const char *filename, const byte *offs, int w, int h, int flags, const byte *palette, byte base);
- void clearBackFromTop(uint lines);
- void fillFrontFromBack(uint x, uint y, uint w, uint h);
- void fillBackGroundFromBack(uint lines);
- void fillBackFromFront(uint x, uint y, uint w, uint h);
+ void fillBackFromBackGround(uint16 height, uint16 width);
+ void fillBackFromFront();
+ void fillBackGroundFromBack();
+ void fillBackGroundFromFront();
virtual void doOutput(const byte *src, uint len);
void clsCheck(WindowBlock *window);
@@ -1184,10 +1190,13 @@ protected:
void tidyIconArray(uint i);
virtual void windowNewLine(WindowBlock *window);
+ void windowScroll(WindowBlock *window);
void windowDrawChar(WindowBlock *window, uint x, uint y, byte chr);
- void loadMusic(uint music);
- void loadModule(uint music);
+ void loadMusic(uint16 track);
+ void playModule(uint16 music);
+ virtual void playMusic(uint16 music, uint16 track);
+ void stopMusic();
void checkTimerCallback();
void delay(uint delay);
@@ -1202,12 +1211,12 @@ protected:
void fastFadeIn();
void slowFadeIn();
- void vcStopAnimation(uint file, uint sprite);
+ virtual void vcStopAnimation(uint16 zone, uint16 sprite);
+ bool confirmOverWrite(WindowBlock *window);
+ int16 matchSaveGame(const char *name, uint16 max);
void disableFileBoxes();
- virtual void listSaveGames(char *dst);
virtual void userGame(bool load);
- virtual int userGameGetKey(bool *b, char *buf, uint maxChar);
void userGameBackSpace(WindowBlock *window, int x, byte b = 0);
void fileError(WindowBlock *window, bool save_error);
@@ -1275,8 +1284,6 @@ public:
void oe1_bitSet();
void oe1_bitTest();
void oe1_zoneDisk();
- void oe1_saveUserGame();
- void oe1_loadUserGame();
void oe1_printStats();
void oe1_stopTune();
void oe1_printPlayerDamage();
@@ -1309,6 +1316,7 @@ public:
void oe2_moveDirn();
void oe2_doClass();
void oe2_pObj();
+ void oe2_loadGame();
void oe2_drawItem();
void oe2_doTable();
void oe2_pauseGame();
@@ -1347,6 +1355,7 @@ public:
void oe2_b2Zero();
void oe2_b2NotZero();
+ virtual void printStats();
protected:
typedef void (AGOSEngine_Elvira2::*OpcodeProcElvira2) ();
struct OpcodeEntryElvira2 {
@@ -1356,12 +1365,14 @@ protected:
const OpcodeEntryElvira2 *_opcodesElvira2;
+ virtual void readItemChildren(Common::SeekableReadStream *in, Item *item, uint tmp);
+
virtual bool loadGame(const char *filename, bool restartMode = false);
virtual bool saveGame(uint slot, const char *caption);
virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y);
- virtual void addArrows(WindowBlock *window);
+ virtual void addArrows(WindowBlock *window, uint8 num);
virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr);
virtual void moveDirn(Item *i, uint x);
@@ -1370,6 +1381,10 @@ protected:
uint16 getExitState(Item *item, uint16 x, uint16 d);
void setExitState(Item *i, uint16 n, uint16 d, uint16 s);
void setSRExit(Item *i, int n, int d, uint16 s);
+
+ virtual void listSaveGames(char *dst);
+ virtual void userGame(bool load);
+ virtual int userGameGetKey(bool *b, char *buf, uint maxChar);
};
class AGOSEngine_Waxworks : public AGOSEngine_Elvira2 {
@@ -1417,10 +1432,10 @@ protected:
virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y);
- virtual void addArrows(WindowBlock *window);
+ virtual void addArrows(WindowBlock *window, uint8 num);
virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr);
- virtual bool loadTablesIntoMem(uint subr_id);
+ virtual bool loadTablesIntoMem(uint16 subr_id);
virtual void moveDirn(Item *i, uint x);
};
@@ -1469,12 +1484,20 @@ protected:
virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y);
- virtual void addArrows(WindowBlock *window);
+ virtual void handleMouseMoved();
+
+ virtual void addArrows(WindowBlock *window, uint8 num);
virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr);
+ virtual void playSpeech(uint16 speech_id, uint16 vga_sprite_id);
+
virtual void listSaveGames(char *dst);
virtual void userGame(bool load);
virtual int userGameGetKey(bool *b, char *buf, uint maxChar);
+
+ virtual void playMusic(uint16 music, uint16 track);
+
+ virtual void vcStopAnimation(uint16 zone, uint16 sprite);
};
class AGOSEngine_Simon2 : public AGOSEngine_Simon1 {
@@ -1511,8 +1534,10 @@ protected:
virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y);
- virtual void addArrows(WindowBlock *window);
+ virtual void addArrows(WindowBlock *window, uint8 num);
virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr);
+
+ virtual void playSpeech(uint16 speech_id, uint16 vga_sprite_id);
};
class AGOSEngine_Feeble : public AGOSEngine_Simon2 {
@@ -1582,7 +1607,7 @@ protected:
void swapCharacterLogo();
virtual void timer_proc1();
- virtual void addArrows(WindowBlock *window);
+ virtual void addArrows(WindowBlock *window, uint8 num);
virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr);
virtual void resetVerbs();
@@ -1596,6 +1621,8 @@ protected:
virtual void drawIconArray(uint i, Item *item_ptr, int line, int classMask);
+ virtual void colorWindow(WindowBlock *window);
+
virtual void doOutput(const byte *src, uint len);
virtual void printScreenText(uint vga_sprite_id, uint color, const char *string_ptr, int16 x, int16 y, int16 width);
@@ -1649,6 +1676,7 @@ public:
void opp_sync();
void opp_saveUserGame();
void opp_loadUserGame();
+ void opp_playTune();
void opp_saveOopsPosition();
void opp_resetGameTime();
void opp_resetPVCount();
diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp
index 1e1eaaf7e9..8748cff54e 100644
--- a/engines/agos/animation.cpp
+++ b/engines/agos/animation.cpp
@@ -30,6 +30,7 @@
#include "common/system.h"
#include "graphics/cursorman.h"
+#include "graphics/surface.h"
#include "agos/animation.h"
#include "agos/intern.h"
@@ -44,6 +45,8 @@ MoviePlayer::MoviePlayer(AGOSEngine *vm, Audio::Mixer *mixer)
: DXAPlayer(), _vm(vm), _mixer(mixer) {
_omniTV = false;
+ _omniTVFile = 0;
+
_leftButtonDown = false;
_rightButtonDown = false;
@@ -103,25 +106,31 @@ bool MoviePlayer::load(const char *filename) {
void MoviePlayer::playOmniTV() {
// Load OmniTV video
- if (!_fd.isOpen()) {
- _vm->_variableArray[254] = 6747;
- return;
- } else {
+ if (_fd) {
_vm->setBitFlag(42, false);
_omniTV = true;
startSound();
- return;
+ } else {
+ if (_omniTVFile) {
+ // Restore state
+ _fd = _omniTVFile;
+ _mixer->pauseHandle(_omniTVSound, false);
+
+ _vm->setBitFlag(42, false);
+ _omniTV = true;
+ } else {
+ _vm->_variableArray[254] = 6747;
+ }
}
}
void MoviePlayer::play() {
- // The OmniTV videos were not included with Amiga and Macintosh versions.
- if (_vm->getPlatform() == Common::kPlatformWindows && _vm->getBitFlag(40)) {
+ if (_vm->getBitFlag(40)) {
playOmniTV();
return;
}
- if (!_fd.isOpen()) {
+ if (!_fd) {
return;
}
@@ -132,7 +141,7 @@ void MoviePlayer::play() {
// Resolution is smaller in Amiga verison so always clear screen
if (_width == 384 && _height == 280) {
- memset(_vm->_frontBuf, 0, _vm->_screenHeight * _vm->_screenWidth);
+ _vm->clearSurfaces();
}
_ticks = _vm->_system->getMillis();
@@ -147,14 +156,15 @@ void MoviePlayer::play() {
_vm->o_killAnimate();
if (_vm->getBitFlag(41)) {
- memcpy(_vm->_backBuf, _vm->_frontBuf, _frameSize);
+ _vm->fillBackFromFront();
} else {
uint8 palette[1024];
memset(palette, 0, sizeof(palette));
- _vm->clearSurfaces(480);
+ _vm->clearSurfaces();
_vm->_system->setPalette(palette, 0, 256);
}
+ _vm->fillBackGroundFromBack();
_vm->_fastFadeOutFlag = true;
}
@@ -162,14 +172,14 @@ void MoviePlayer::startSound() {
byte *buffer;
uint32 offset, size, tag;
- tag = _fd.readUint32BE();
+ tag = _fd->readUint32BE();
if (tag == MKID_BE('WAVE')) {
- size = _fd.readUint32BE();
+ size = _fd->readUint32BE();
if (_sequenceNum) {
Common::File in;
- _fd.seek(size, SEEK_CUR);
+ _fd->seek(size, SEEK_CUR);
in.open((const char *)"audio.wav");
if (!in.isOpen()) {
@@ -186,7 +196,7 @@ void MoviePlayer::startSound() {
in.close();
} else {
buffer = (byte *)malloc(size);
- _fd.read(buffer, size);
+ _fd->read(buffer, size);
}
Common::MemoryReadStream stream(buffer, size);
@@ -197,8 +207,13 @@ void MoviePlayer::startSound() {
}
if (_bgSoundStream != NULL) {
- _mixer->stopHandle(_bgSound);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream);
+ if (_omniTV) {
+ _mixer->stopHandle(_omniTVSound);
+ _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_omniTVSound, _bgSoundStream);
+ } else {
+ _mixer->stopHandle(_bgSound);
+ _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream);
+ }
}
}
@@ -207,8 +222,12 @@ void MoviePlayer::nextFrame() {
return;
if (_vm->getBitFlag(42)) {
+ // Save state
+ _omniTVFile = _fd;
+ _mixer->pauseHandle(_omniTVSound, true);
+
+ _fd = 0;
_omniTV = false;
- closeFile();
return;
}
@@ -223,6 +242,7 @@ void MoviePlayer::nextFrame() {
_frameNum++;
} else {
_omniTV = false;
+ _omniTVFile = 0;
closeFile();
_vm->_variableArray[254] = 6747;
}
@@ -230,9 +250,8 @@ void MoviePlayer::nextFrame() {
void MoviePlayer::handleNextFrame() {
decodeNextFrame();
- processFrame();
-
- _vm->_system->updateScreen();
+ if (processFrame())
+ _vm->_system->updateScreen();
_frameNum++;
Common::Event event;
@@ -285,9 +304,10 @@ void MoviePlayer::setPalette(byte *pal) {
_vm->_system->setPalette(palette, 0, 256);
}
-void MoviePlayer::processFrame() {
- copyFrameToBuffer(_vm->getFrontBuf(), (_vm->_screenWidth - _width) / 2, (_vm->_screenHeight - _height) / 2, _vm->_screenWidth);
- _vm->_system->copyRectToScreen(_vm->getFrontBuf(), _vm->_screenWidth, 0, 0, _vm->_screenWidth, _vm->_screenHeight);
+bool MoviePlayer::processFrame() {
+ Graphics::Surface *screen = _vm->_system->lockScreen();
+ copyFrameToBuffer((byte *)screen->pixels, (_vm->_screenWidth - _width) / 2, (_vm->_screenHeight - _height) / 2, _vm->_screenWidth);
+ _vm->_system->unlockScreen();
if ((_bgSoundStream == NULL) || ((int)(_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum + 1) ||
_frameSkipped > _framesPerSec) {
@@ -309,10 +329,13 @@ void MoviePlayer::processFrame() {
while (_vm->_system->getMillis() < _ticks)
_vm->_system->delayMillis(10);
}
- } else {
- warning("dropped frame %i", _frameNum);
- _frameSkipped++;
+
+ return true;
}
+
+ warning("dropped frame %i", _frameNum);
+ _frameSkipped++;
+ return false;
}
const char * MoviePlayer::_sequenceList[90] = {
diff --git a/engines/agos/animation.h b/engines/agos/animation.h
index 07b2ebcd93..6776395ab7 100644
--- a/engines/agos/animation.h
+++ b/engines/agos/animation.h
@@ -44,6 +44,9 @@ class MoviePlayer : public Graphics::DXAPlayer {
Audio::SoundHandle _bgSound;
Audio::AudioStream *_bgSoundStream;
+ Audio::SoundHandle _omniTVSound;
+ Common::SeekableReadStream *_omniTVFile;
+
bool _omniTV;
bool _leftButtonDown;
bool _rightButtonDown;
@@ -64,7 +67,7 @@ private:
void playOmniTV();
void handleNextFrame();
- void processFrame();
+ bool processFrame();
void startSound();
};
diff --git a/engines/agos/charset.cpp b/engines/agos/charset.cpp
index 40b0a84390..9a37d90c33 100644
--- a/engines/agos/charset.cpp
+++ b/engines/agos/charset.cpp
@@ -25,9 +25,13 @@
#include "common/stdafx.h"
+#include "common/system.h"
+
#include "agos/agos.h"
#include "agos/intern.h"
+#include "graphics/surface.h"
+
namespace AGOS {
void AGOSEngine_Feeble::doOutput(const byte *src, uint len) {
@@ -539,19 +543,7 @@ void AGOSEngine::justifyOutPut(byte chr) {
doOutput(&chr, 1);
clsCheck(_textWindow);
} else if (chr == 0 || chr == ' ' || chr == 10) {
- bool fit;
-
- // Note that in FF, _printCharCurPos may be greater than
- // _printCharMaxPos. In Simon, that is probably prevented by
- // testing if _printCharCurPos == _printCharMaxPos below.
-
- if (getGameType() == GType_FF || getGameType() == GType_PP) {
- fit = _printCharMaxPos > _printCharCurPos + _printCharPixelCount;
- } else {
- fit = _printCharMaxPos - _printCharCurPos >= _printCharPixelCount;
- }
-
- if (fit) {
+ if (_printCharMaxPos - _printCharCurPos >= _printCharPixelCount) {
_printCharCurPos += _printCharPixelCount;
doOutput(_lettersToPrintBuf, _numLettersToPrint);
@@ -707,17 +699,48 @@ void AGOSEngine_Feeble::windowNewLine(WindowBlock *window) {
void AGOSEngine::windowNewLine(WindowBlock *window) {
window->textColumn = 0;
- window->textColumnOffset = 0;
+ window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0;
window->textLength = 0;
if (window->textRow == window->height) {
- // TODO
- debug(0, "Window Scroll");
+ if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 ||
+ getGameType() == GType_WW) {
+ windowScroll(window);
+ }
} else {
window->textRow++;
}
}
+void AGOSEngine::windowScroll(WindowBlock *window) {
+ _lockWord |= 0x8000;
+
+ if (window->height != 1) {
+ Graphics::Surface *screen = _system->lockScreen();
+
+ byte *src, *dst;
+ uint16 w, h;
+
+ w = window->width * 8;
+ h = (window->height -1) * 8;
+
+ dst = (byte *)screen->pixels + window->y * _screenWidth + window->x * 8;
+ src = dst + 8 * _screenWidth;
+
+ do {
+ memcpy(dst, src, w);
+ src += _screenWidth;
+ dst += _screenWidth;
+ } while (--h);
+
+ _system->unlockScreen();
+ }
+
+ colorBlock(window, window->x * 8, (window->height - 1) * 8 + window->y, window->width * 8, 8);
+
+ _lockWord &= ~0x8000;
+}
+
#ifdef PALMOS_68K
static const byte *feeble_windowFont;
static const byte *czech_simonFont;
@@ -729,6 +752,8 @@ static const byte *hebrew_simonFont;
static const byte *italian_simonFont;
static const byte *spanish_simonFont;
static const byte *english_simonFont;
+static const byte *spanish_commonFont;
+static const byte *italian_commonFont;
static const byte *french_commonFont;
static const byte *english_commonFont;
#else
@@ -1839,6 +1864,208 @@ static const byte english_simonFont[] = {
240, 240, 240, 240, 240, 240, 240, 240,
};
+static const byte spanish_commonFont[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20,
+ 0x00, 0x50, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x90, 0x00, 0x60, 0x90, 0x90, 0x68, 0x00,
+ 0x00, 0x90, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x90, 0x00, 0x90, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x10, 0x28, 0x10, 0x2A, 0x44, 0x3A, 0x00,
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00,
+ 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00,
+ 0x00, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x00,
+ 0x00, 0x70, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x10, 0x20, 0x00, 0x78, 0x70, 0x40, 0x38, 0x00,
+ 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
+ 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x10, 0x20, 0x48, 0xF8, 0x00,
+ 0x00, 0x70, 0x88, 0x30, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x10, 0x20, 0x40, 0x90, 0xF8, 0x10, 0x00,
+ 0x00, 0xF8, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x80, 0xF0, 0x88, 0x70, 0x00,
+ 0x00, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x40, 0x00,
+ 0x00, 0x70, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x78, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,
+ 0x20, 0x40, 0x00, 0x60, 0x90, 0x90, 0x68, 0x00,
+ 0x20, 0x40, 0x00, 0x60, 0x20, 0x28, 0x30, 0x00,
+ 0x20, 0x40, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x20, 0x40, 0x00, 0x98, 0x90, 0x90, 0xE8, 0x00,
+ 0x00, 0x3C, 0x42, 0x04, 0x08, 0x00, 0x08, 0x00,
+ 0x28, 0x50, 0x00, 0xD8, 0x68, 0x48, 0x48, 0x00,
+ 0x20, 0x50, 0x50, 0x70, 0x50, 0x50, 0x88, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0xF0, 0x00,
+ 0x30, 0x48, 0x80, 0x80, 0x80, 0x48, 0x30, 0x00,
+ 0xF0, 0x48, 0x48, 0x48, 0x48, 0x48, 0xF0, 0x00,
+ 0xF8, 0x40, 0x40, 0x70, 0x40, 0x40, 0xF8, 0x00,
+ 0xF8, 0x40, 0x40, 0x70, 0x40, 0x40, 0xE0, 0x00,
+ 0x38, 0x40, 0x80, 0x98, 0x88, 0x48, 0x30, 0x00,
+ 0xC8, 0x48, 0x48, 0x78, 0x48, 0x48, 0xC8, 0x00,
+ 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x78, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60, 0x00,
+ 0xC8, 0x50, 0x60, 0x40, 0x60, 0x50, 0xC8, 0x00,
+ 0xE0, 0x40, 0x40, 0x40, 0x40, 0x48, 0xF8, 0x00,
+ 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x88, 0x00,
+ 0xC8, 0x48, 0x68, 0x58, 0x58, 0x48, 0xC8, 0x00,
+ 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x40, 0x40, 0xC0, 0x00,
+ 0x60, 0x90, 0x90, 0x90, 0xB0, 0x90, 0x68, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x50, 0x48, 0xC8, 0x00,
+ 0x70, 0x88, 0x80, 0x60, 0x10, 0x88, 0x70, 0x00,
+ 0xF8, 0xA8, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x88, 0x50, 0x50, 0x50, 0x50, 0x50, 0x20, 0x00,
+ 0x88, 0x88, 0x88, 0x50, 0x50, 0x50, 0x20, 0x00,
+ 0x88, 0x88, 0x88, 0x88, 0xA8, 0xD8, 0x88, 0x00,
+ 0x88, 0x50, 0x70, 0x20, 0x70, 0x50, 0x88, 0x00,
+ 0x88, 0x48, 0x30, 0x20, 0x40, 0x80, 0xC0, 0x00,
+ 0xF8, 0x88, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00,
+ 0x00, 0x0E, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00,
+ 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00,
+ 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00,
+ 0x00, 0x20, 0x00, 0x20, 0x40, 0x88, 0x70, 0x00,
+ 0x20, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
+ 0x00, 0x90, 0x00, 0x90, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x68, 0x00,
+ 0x40, 0x40, 0x50, 0x68, 0x48, 0x48, 0xF0, 0x00,
+ 0x00, 0x00, 0x30, 0x48, 0x40, 0x48, 0x30, 0x00,
+ 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x68, 0x00,
+ 0x00, 0x00, 0x70, 0x48, 0x70, 0x40, 0x38, 0x00,
+ 0x10, 0x38, 0x20, 0x70, 0x20, 0x20, 0x20, 0x40,
+ 0x00, 0x00, 0x78, 0x90, 0x90, 0x90, 0x70, 0x10,
+ 0xC0, 0x40, 0x58, 0x68, 0x48, 0x48, 0xC8, 0x00,
+ 0x20, 0x00, 0x60, 0x20, 0x20, 0x28, 0x30, 0x00,
+ 0x10, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x60,
+ 0x40, 0x40, 0x70, 0x48, 0x70, 0x50, 0xC8, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x50, 0x60, 0x00,
+ 0x00, 0x00, 0xA8, 0xF8, 0xA8, 0xA8, 0xA8, 0x00,
+ 0x00, 0x00, 0xD8, 0x68, 0x48, 0x48, 0x48, 0x00,
+ 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x00,
+ 0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x40, 0xC0,
+ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x18, 0x10,
+ 0x00, 0x00, 0xD8, 0x68, 0x40, 0x40, 0xE0, 0x00,
+ 0x00, 0x00, 0x38, 0x40, 0x30, 0x08, 0x70, 0x00,
+ 0x20, 0x20, 0x70, 0x20, 0x20, 0x28, 0x30, 0x00,
+ 0x00, 0x00, 0x98, 0x90, 0x90, 0x90, 0xE8, 0x00,
+ 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,
+ 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0xF8, 0xA8, 0x00,
+ 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,
+ 0x00, 0x00, 0x98, 0x90, 0x90, 0x70, 0x10, 0x60,
+ 0x00, 0x00, 0x78, 0x10, 0x20, 0x40, 0x78, 0x00,
+ 0x20, 0x50, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x0E, 0x08, 0x30, 0x08, 0x08, 0x0E, 0x00,
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x70, 0x10, 0x0C, 0x10, 0x10, 0x70, 0x00,
+ 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x00,
+};
+
+static const byte italian_commonFont[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20,
+ 0x00, 0x50, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x90, 0x00, 0x60, 0x90, 0x90, 0x68, 0x00,
+ 0x00, 0x90, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x10, 0x28, 0x10, 0x2A, 0x44, 0x3A, 0x00,
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00,
+ 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00,
+ 0x00, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x00,
+ 0x40, 0x20, 0x00, 0x60, 0x20, 0x28, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x10, 0x20, 0x00, 0x78, 0x70, 0x40, 0x38, 0x00,
+ 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
+ 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x10, 0x20, 0x48, 0xF8, 0x00,
+ 0x00, 0x70, 0x88, 0x30, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x10, 0x20, 0x40, 0x90, 0xF8, 0x10, 0x00,
+ 0x00, 0xF8, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x80, 0xF0, 0x88, 0x70, 0x00,
+ 0x00, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x40, 0x00,
+ 0x00, 0x70, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00,
+ 0x00, 0x70, 0x88, 0x78, 0x08, 0x88, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,
+ 0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x68, 0x00,
+ 0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x20, 0x10, 0x00, 0x78, 0x70, 0x40, 0x38, 0x00,
+ 0x20, 0x50, 0x00, 0x78, 0x70, 0x40, 0x38, 0x00,
+ 0x00, 0x3C, 0x42, 0x04, 0x08, 0x00, 0x08, 0x00,
+ 0x20, 0x50, 0x00, 0x60, 0x20, 0x28, 0x30, 0x00,
+ 0x20, 0x50, 0x50, 0x70, 0x50, 0x50, 0x88, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0xF0, 0x00,
+ 0x30, 0x48, 0x80, 0x80, 0x80, 0x48, 0x30, 0x00,
+ 0xF0, 0x48, 0x48, 0x48, 0x48, 0x48, 0xF0, 0x00,
+ 0xF8, 0x40, 0x40, 0x70, 0x40, 0x40, 0xF8, 0x00,
+ 0xF8, 0x40, 0x40, 0x70, 0x40, 0x40, 0xE0, 0x00,
+ 0x38, 0x40, 0x80, 0x98, 0x88, 0x48, 0x30, 0x00,
+ 0xC8, 0x48, 0x48, 0x78, 0x48, 0x48, 0xC8, 0x00,
+ 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x78, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60, 0x00,
+ 0xC8, 0x50, 0x60, 0x40, 0x60, 0x50, 0xC8, 0x00,
+ 0xE0, 0x40, 0x40, 0x40, 0x40, 0x48, 0xF8, 0x00,
+ 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x88, 0x00,
+ 0xC8, 0x48, 0x68, 0x58, 0x58, 0x48, 0xC8, 0x00,
+ 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x40, 0x40, 0xC0, 0x00,
+ 0x60, 0x90, 0x90, 0x90, 0xB0, 0x90, 0x68, 0x00,
+ 0xF0, 0x48, 0x48, 0x70, 0x50, 0x48, 0xC8, 0x00,
+ 0x70, 0x88, 0x80, 0x60, 0x10, 0x88, 0x70, 0x00,
+ 0xF8, 0xA8, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
+ 0x88, 0x50, 0x50, 0x50, 0x50, 0x50, 0x20, 0x00,
+ 0x88, 0x88, 0x88, 0x50, 0x50, 0x50, 0x20, 0x00,
+ 0x88, 0x88, 0x88, 0x88, 0xA8, 0xD8, 0x88, 0x00,
+ 0x88, 0x50, 0x70, 0x20, 0x70, 0x50, 0x88, 0x00,
+ 0x88, 0x48, 0x30, 0x20, 0x40, 0x80, 0xC0, 0x00,
+ 0xF8, 0x88, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00,
+ 0x00, 0x0E, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00,
+ 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00,
+ 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00,
+ 0x00, 0x30, 0x48, 0x40, 0x48, 0x30, 0x10, 0x30,
+ 0x00, 0x50, 0x00, 0x60, 0x20, 0x28, 0x30, 0x00,
+ 0x20, 0x10, 0x00, 0x98, 0x90, 0x90, 0xE8, 0x00,
+ 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x68, 0x00,
+ 0x40, 0x40, 0x50, 0x68, 0x48, 0x48, 0xF0, 0x00,
+ 0x00, 0x00, 0x30, 0x48, 0x40, 0x48, 0x30, 0x00,
+ 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x68, 0x00,
+ 0x00, 0x00, 0x70, 0x48, 0x70, 0x40, 0x38, 0x00,
+ 0x10, 0x38, 0x20, 0x70, 0x20, 0x20, 0x20, 0x40,
+ 0x00, 0x00, 0x78, 0x90, 0x90, 0x90, 0x70, 0x10,
+ 0xC0, 0x40, 0x58, 0x68, 0x48, 0x48, 0xC8, 0x00,
+ 0x20, 0x00, 0x60, 0x20, 0x20, 0x28, 0x30, 0x00,
+ 0x10, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x60,
+ 0x40, 0x40, 0x70, 0x48, 0x70, 0x50, 0xC8, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x50, 0x60, 0x00,
+ 0x00, 0x00, 0xA8, 0xF8, 0xA8, 0xA8, 0xA8, 0x00,
+ 0x00, 0x00, 0xD8, 0x68, 0x48, 0x48, 0x48, 0x00,
+ 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x00,
+ 0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x40, 0xC0,
+ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x18, 0x10,
+ 0x00, 0x00, 0xD8, 0x68, 0x40, 0x40, 0xE0, 0x00,
+ 0x00, 0x00, 0x38, 0x40, 0x30, 0x08, 0x70, 0x00,
+ 0x20, 0x20, 0x70, 0x20, 0x20, 0x28, 0x30, 0x00,
+ 0x00, 0x00, 0x98, 0x90, 0x90, 0x90, 0xE8, 0x00,
+ 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,
+ 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0xF8, 0xA8, 0x00,
+ 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,
+ 0x00, 0x00, 0x98, 0x90, 0x90, 0x70, 0x10, 0x60,
+ 0x00, 0x00, 0x78, 0x10, 0x20, 0x40, 0x78, 0x00,
+ 0x20, 0x50, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
+ 0x00, 0x0E, 0x08, 0x30, 0x08, 0x08, 0x0E, 0x00,
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x70, 0x10, 0x0C, 0x10, 0x10, 0x70, 0x00,
+ 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x00,
+};
+
static const byte french_commonFont[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20,
@@ -2052,14 +2279,16 @@ void AGOSEngine::windowDrawChar(WindowBlock *window, uint x, uint y, byte chr) {
_lockWord |= 0x8000;
- dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset;
+ Graphics::Surface *screen = _system->lockScreen();
if (getGameType() == GType_FF || getGameType() == GType_PP) {
+ dst = getBackGround() + y * _dxSurfacePitch + x + window->textColumnOffset;
h = 13;
w = feebleFontSize[chr - 0x20];
src = feeble_windowFont + (chr - 0x20) * 13;
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
+ dst = (byte *)screen->pixels + y * _dxSurfacePitch + x + window->textColumnOffset;
h = 8;
w = 6;
@@ -2095,13 +2324,17 @@ void AGOSEngine::windowDrawChar(WindowBlock *window, uint x, uint y, byte chr) {
error("windowDrawChar: Unknown language %d\n", _language);
}
} else {
+ dst = (byte *)screen->pixels + y * _dxSurfacePitch + x + window->textColumnOffset;
h = 8;
w = 6;
- // TODO: Add font tables for German and Spanish
+ // TODO: Add font tables for German
switch (_language) {
case Common::ES_ESP:
- src = english_commonFont + (chr - 0x20) * 8;
+ src = spanish_commonFont + (chr - 0x20) * 8;
+ break;
+ case Common::IT_ITA:
+ src = italian_commonFont + (chr - 0x20) * 8;
break;
case Common::FR_FRA:
src = french_commonFont + (chr - 0x20) * 8;
@@ -2139,6 +2372,8 @@ void AGOSEngine::windowDrawChar(WindowBlock *window, uint x, uint y, byte chr) {
dst += _dxSurfacePitch;
} while (--h);
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
diff --git a/engines/agos/cursor.cpp b/engines/agos/cursor.cpp
index c43e243bf3..35bb8ea216 100644
--- a/engines/agos/cursor.cpp
+++ b/engines/agos/cursor.cpp
@@ -380,7 +380,7 @@ void AGOSEngine_PuzzlePack::handleMouseMoved() {
drawMousePointer();
}
-void AGOSEngine::handleMouseMoved() {
+void AGOSEngine_Simon1::handleMouseMoved() {
uint x;
if (_mouseHideCount) {
@@ -399,13 +399,6 @@ void AGOSEngine::handleMouseMoved() {
resetVerbs();
}
- if (_leftButton == 0) {
- if (_dragMode != 0) {
- _dragEnd = 1;
- }
- _dragCount = 0;
- }
-
if (getGameType() == GType_FF) {
if (getBitFlag(99)) { // Oracle
if (_mouse.x >= 10 && _mouse.x <= 635 && _mouse.y >= 5 && _mouse.y <= 475) {
@@ -449,7 +442,50 @@ void AGOSEngine::handleMouseMoved() {
get_out2:;
_vgaVar9 = 0;
}
- } else if (getGameType() == GType_WW) {
+ }
+
+ if (_mouse != _mouseOld)
+ _needHitAreaRecalc++;
+
+ if (_leftButtonOld == 0 && _leftButtonCount != 0) {
+ boxController(_mouse.x, _mouse.y, 3);
+ }
+ _leftButtonOld = _leftButton;
+
+ x = 0;
+ if (_lastHitArea3 == 0 && _leftButtonDown != 0) {
+ _leftButtonDown = 0;
+ x = 1;
+ } else {
+ if (_litBoxFlag == 0 && _needHitAreaRecalc == 0)
+ goto get_out;
+ }
+
+ boxController(_mouse.x, _mouse.y, x);
+ _lastHitArea3 = _lastHitArea;
+ if (x == 1 && _lastHitArea == NULL)
+ _lastHitArea3 = (HitArea *) -1;
+
+get_out:
+ _mouseOld = _mouse;
+ drawMousePointer();
+
+ _needHitAreaRecalc = 0;
+ _litBoxFlag = 0;
+}
+
+void AGOSEngine::handleMouseMoved() {
+ uint x;
+
+ if (_mouseHideCount) {
+ CursorMan.showMouse(false);
+ return;
+ }
+
+ CursorMan.showMouse(true);
+ _mouse = _eventMan->getMousePos();
+
+ if (getGameType() == GType_WW) {
if (_variableArray[51] != 0 && _mouseCursor != _variableArray[51]) {
_mouseCursor = _variableArray[51];
_needHitAreaRecalc++;
@@ -466,10 +502,20 @@ void AGOSEngine::handleMouseMoved() {
}
}
+ if (_leftClick == true) {
+ _leftClick = false;
+ if (_dragMode != 0) {
+ _dragEnd = 1;
+ } else {
+ _oneClick = true;
+ }
+ _dragCount = 0;
+ }
+
if (_mouse != _mouseOld)
_needHitAreaRecalc++;
- if (_leftButtonOld == 0 && _leftButtonCount != 0) {
+ if (_leftButtonOld == 0 && _leftButton != 0) {
_lastClickRem = 0;
boxController(_mouse.x, _mouse.y, 3);
}
@@ -493,8 +539,8 @@ void AGOSEngine::handleMouseMoved() {
}
x = 0;
- if (_lastHitArea3 == 0 && _leftButtonDown != 0) {
- _leftButtonDown = 0;
+ if (_oneClick == true) {
+ _oneClick = false;
x = 1;
} else {
if (_litBoxFlag == 0 && _needHitAreaRecalc == 0)
@@ -504,11 +550,7 @@ void AGOSEngine::handleMouseMoved() {
boxstuff:
boxController(_mouse.x, _mouse.y, x);
_lastHitArea3 = _lastHitArea;
- if (x == 1 && _lastHitArea == NULL)
- _lastHitArea3 = (HitArea *) -1;
-
get_out:
-
_mouseOld = _mouse;
drawMousePointer();
diff --git a/engines/agos/debugger.cpp b/engines/agos/debugger.cpp
index 7a455fa0f9..ce50460621 100644
--- a/engines/agos/debugger.cpp
+++ b/engines/agos/debugger.cpp
@@ -83,13 +83,17 @@ bool Debugger::Cmd_DebugLevel(int argc, const char **argv) {
bool Debugger::Cmd_PlayMusic(int argc, const char **argv) {
if (argc > 1) {
uint music = atoi(argv[1]);
- uint range = (_vm->getGameType() == GType_SIMON2) ? 93 : 34;
- if (music <= range) {
- _vm->loadMusic(music);
- if (_vm->getGameType() == GType_SIMON2)
+ if (music <= _vm->_numMusic) {
+ if (_vm->getGameType() == GType_PP) {
+ // TODO
+ } else if (_vm->getGameType() == GType_SIMON2) {
+ _vm->loadMusic(music);
_vm->_midi.startTrack(0);
+ } else {
+ _vm->playMusic(music, 0);
+ }
} else
- DebugPrintf("Music out of range (0 - %d)\n", range);
+ DebugPrintf("Music out of range (0 - %d)\n", _vm->_numMusic);
} else
DebugPrintf("Syntax: music <musicnum>\n");
@@ -99,11 +103,10 @@ bool Debugger::Cmd_PlayMusic(int argc, const char **argv) {
bool Debugger::Cmd_PlaySound(int argc, const char **argv) {
if (argc > 1) {
uint sound = atoi(argv[1]);
- uint range = (_vm->getGameType() == GType_SIMON2) ? 222 : 127;
- if (sound <= range)
+ if (sound <= _vm->_numSFX)
_vm->_sound->playEffects(sound);
else
- DebugPrintf("Sound out of range (0 - %d)\n", range);
+ DebugPrintf("Sound out of range (0 - %d)\n", _vm->_numSFX);
} else
DebugPrintf("Syntax: sound <soundnum>\n");
@@ -113,11 +116,10 @@ bool Debugger::Cmd_PlaySound(int argc, const char **argv) {
bool Debugger::Cmd_PlayVoice(int argc, const char **argv) {
if (argc > 1) {
uint voice = atoi(argv[1]);
- uint range = (_vm->getGameType() == GType_SIMON2) ? 3632 : 1996;
- if (voice <= range)
+ if (voice <= _vm->_numSpeech)
_vm->_sound->playVoice(voice);
else
- DebugPrintf("Voice out of range (0 - %d)\n", range);
+ DebugPrintf("Voice out of range (0 - %d)\n", _vm->_numSpeech);
} else
DebugPrintf("Syntax: voice <voicenum>\n");
diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp
index dbb4c8faf1..0f5aa2768a 100644
--- a/engines/agos/detection.cpp
+++ b/engines/agos/detection.cpp
@@ -106,7 +106,7 @@ GameList Engine_AGOS_gameIDList() {
}
GameDescriptor Engine_AGOS_findGameID(const char *gameid) {
- return Common::AdvancedDetector::findGameID(gameid, detectionParams);
+ return Common::AdvancedDetector::findGameID(gameid, simonGames, obsoleteGameIDsTable);
}
GameList Engine_AGOS_detectGames(const FSList &fslist) {
@@ -117,7 +117,8 @@ PluginError Engine_AGOS_create(OSystem *syst, Engine **engine) {
assert(engine);
const char *gameid = ConfMan.get("gameid").c_str();
- //const AGOSGameDescription gd = (const AGOSGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ //Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ //const AGOSGameDescription *gd = (const AGOSGameDescription *)(encapsulatedDesc.realDesc);
//if (gd == 0) {
// return kNoGameDataFoundError;
//}
@@ -154,7 +155,9 @@ REGISTER_PLUGIN(AGOS, "AGOS", "AGOS (C) Adventure Soft");
namespace AGOS {
bool AGOSEngine::initGame() {
- _gameDescription = (const AGOSGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const AGOSGameDescription *)(encapsulatedDesc.realDesc);
+
return (_gameDescription != 0);
}
diff --git a/engines/agos/detection_tables.h b/engines/agos/detection_tables.h
index cfb795efbd..cb6123dc54 100644
--- a/engines/agos/detection_tables.h
+++ b/engines/agos/detection_tables.h
@@ -56,7 +56,6 @@ static const AGOSGameDescription gameDescriptions[] = {
{
{ "gameamiga", GAME_BASEFILE, "7bdaff4a118d8035047cf9b1393b3fa0", -1},
{ "icon.dat", GAME_ICONFILE, "2db931e84f1ca01f0816dddfae3f49e1", -1},
- { "start", GAME_RESTFILE, "c111be88c7f6d40e3f9b128939c1236d", -1},
{ NULL, 0, NULL, 0}
},
Common::EN_ANY,
@@ -69,6 +68,46 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_CRUNCHED | GF_PLANAR
},
+ // Elvira 1 - French Amiga Floppy
+ {
+ {
+ "elvira1",
+ "Floppy",
+ {
+ { "gameamiga", GAME_BASEFILE, "ab1a0798f74e71cc58a06e7e0db6f8a7", -1},
+ { "icon.dat", GAME_ICONFILE, "2db931e84f1ca01f0816dddfae3f49e1", -1},
+ { NULL, 0, NULL, 0}
+ },
+ Common::FR_FRA,
+ Common::kPlatformAmiga,
+ Common::ADGF_NO_FLAGS
+ },
+
+ GType_ELVIRA1,
+ GID_ELVIRA1,
+ GF_OLD_BUNDLE | GF_CRUNCHED | GF_PLANAR
+ },
+
+ // Elvira 1 - German Amiga Floppy
+ {
+ {
+ "elvira1",
+ "Floppy",
+ {
+ { "gameamiga", GAME_BASEFILE, "bde0334344c7b3a278ccc9a300f3085c", -1},
+ { "icon.dat", GAME_ICONFILE, "2db931e84f1ca01f0816dddfae3f49e1", -1},
+ { NULL, 0, NULL, 0}
+ },
+ Common::DE_DEU,
+ Common::kPlatformAmiga,
+ Common::ADGF_NO_FLAGS
+ },
+
+ GType_ELVIRA1,
+ GID_ELVIRA1,
+ GF_OLD_BUNDLE | GF_CRUNCHED | GF_PLANAR
+ },
+
// Elvira 1 - English Atari ST Floppy Demo
{
{
@@ -100,7 +139,6 @@ static const AGOSGameDescription gameDescriptions[] = {
{
{ "gamest", GAME_BASEFILE, "8942859018fcfb2dbed13e83d974d1ab", -1},
{ "icon.dat", GAME_ICONFILE, "2db931e84f1ca01f0816dddfae3f49e1", -1},
- { "start", GAME_RESTFILE, "cd711028e209c47b81d04141fff2587b", -1},
{ "tbllist", GAME_TBLFILE, "5b6ff494bf7e24213758598ef4ac0a8b", -1},
{ NULL, 0, NULL, 0}
},
@@ -123,7 +161,6 @@ static const AGOSGameDescription gameDescriptions[] = {
{
{ "gamest", GAME_BASEFILE, "ce2100ba71284f55ac302847d7f94747", -1},
{ "icon.dat", GAME_ICONFILE, "2db931e84f1ca01f0816dddfae3f49e1", -1},
- { "start", GAME_RESTFILE, "cd711028e209c47b81d04141fff2587b", -1},
{ "tbllist", GAME_TBLFILE, "5b6ff494bf7e24213758598ef4ac0a8b", -1},
{ NULL, 0, NULL, 0}
},
@@ -146,7 +183,6 @@ static const AGOSGameDescription gameDescriptions[] = {
{
{ "gamepc", GAME_BASEFILE, "a49e132a1f18306dd5d1ec2fe435e178", -1},
{ "icon.dat", GAME_ICONFILE, "fda48c9da7f3e72d0313e2f5f760fc45", -1},
- { "start", GAME_RESTFILE, "69fb4f12108b39ae659f108cad4d3efe", -1},
{ "tbllist", GAME_TBLFILE, "319f6b227c7822a551f57d24e70f8149", -1},
{ NULL, 0, NULL, 0}
},
@@ -160,20 +196,19 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE
},
- // Elvira 1 - German DOS Floppy
+ // Elvira 1 - French DOS Floppy
{
{
"elvira1",
"Floppy",
{
- { "gamepc", GAME_BASEFILE, "d0b593143e21fc150c044819df2c0b98", -1},
+ { "gamepc", GAME_BASEFILE, "9076d507d60cc454df662316438ec843", -1},
{ "icon.dat", GAME_ICONFILE, "fda48c9da7f3e72d0313e2f5f760fc45", -1},
- { "start", GAME_RESTFILE, "69fb4f12108b39ae659f108cad4d3efe", -1},
{ "tbllist", GAME_TBLFILE, "319f6b227c7822a551f57d24e70f8149", -1},
{ NULL, 0, NULL, 0}
},
- Common::DE_DEU,
+ Common::FR_FRA,
Common::kPlatformPC,
Common::ADGF_NO_FLAGS
},
@@ -183,20 +218,19 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE
},
- // Elvira 1 - French DOS Floppy
+ // Elvira 1 - German DOS Floppy
{
{
"elvira1",
"Floppy",
{
- { "gamepc", GAME_BASEFILE, "9076d507d60cc454df662316438ec843", -1},
+ { "gamepc", GAME_BASEFILE, "d0b593143e21fc150c044819df2c0b98", -1},
{ "icon.dat", GAME_ICONFILE, "fda48c9da7f3e72d0313e2f5f760fc45", -1},
- { "start", GAME_RESTFILE, "69fb4f12108b39ae659f108cad4d3efe", -1},
{ "tbllist", GAME_TBLFILE, "319f6b227c7822a551f57d24e70f8149", -1},
{ NULL, 0, NULL, 0}
},
- Common::FR_FRA,
+ Common::DE_DEU,
Common::kPlatformPC,
Common::ADGF_NO_FLAGS
},
@@ -256,6 +290,31 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_CRUNCHED | GF_PLANAR
},
+ // Elvira 2 - Italian Amiga Floppy
+ {
+ {
+ "elvira2",
+ "Floppy",
+
+ {
+ { "gameamiga", GAME_BASEFILE, "3d4e0c8da4ebd222e50de2dffed92955", -1},
+ { "icon.dat", GAME_ICONFILE, "a88b1c02e13ab04dd790ec30502c323d", -1},
+ { "menus.dat", GAME_MENUFILE, "a2fdc88a77c8bdffec6b36cbeda4d955", -1},
+ { "start", GAME_RESTFILE, "a9f876c6c66dfd011b971da3dc7b4ada", -1},
+ { "stripped.txt", GAME_STRFILE, "41c975a9c1106cb5298a0bc3df0a266e", -1},
+ { "tbllist", GAME_TBLFILE, "177f5f2640e80ef92d1421d32de06a5e", -1},
+ { NULL, 0, NULL, 0}
+ },
+ Common::IT_ITA,
+ Common::kPlatformAmiga,
+ Common::ADGF_NO_FLAGS
+ },
+
+ GType_ELVIRA2,
+ GID_ELVIRA2,
+ GF_OLD_BUNDLE | GF_CRUNCHED | GF_PLANAR
+ },
+
// Elvira 2 - English Atari ST Floppy
{
{
@@ -357,6 +416,31 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE
},
+ // Elvira 2 - French DOS Floppy
+ {
+ {
+ "elvira2",
+ "Floppy",
+
+ {
+ { "gamepc", GAME_BASEFILE, "4bf28ab00f5324fd938e632595742382", -1},
+ { "icon.dat", GAME_ICONFILE, "83a7278bff55c82fbb3aef92981866c9", -1},
+ { "menus.dat", GAME_MENUFILE, "a2fdc88a77c8bdffec6b36cbeda4d955", -1},
+ { "start", GAME_RESTFILE, "4d380a35ba941d03ee5084c71d20055b", -1},
+ { "stripped.txt", GAME_STRFILE, "c3a8f644551a27c8a2fec0f8070b46b7", -1},
+ { "tbllist", GAME_TBLFILE, "8252660df0edbdbc3e6377e155bbd0c5", -1},
+ { NULL, 0, NULL, 0}
+ },
+ Common::FR_FRA,
+ Common::kPlatformPC,
+ Common::ADGF_NO_FLAGS
+ },
+
+ GType_ELVIRA2,
+ GID_ELVIRA2,
+ GF_OLD_BUNDLE
+ },
+
// Elvira 2 - German DOS Floppy
{
{
@@ -382,22 +466,22 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE
},
- // Elvira 2 - French DOS Floppy
+ // Elvira 2 - Italian DOS Floppy
{
{
"elvira2",
"Floppy",
{
- { "gamepc", GAME_BASEFILE, "4bf28ab00f5324fd938e632595742382", -1},
+ { "gamepc", GAME_BASEFILE, "09a3f1087f2977ff462ad2417bde0a5c", -1},
{ "icon.dat", GAME_ICONFILE, "83a7278bff55c82fbb3aef92981866c9", -1},
{ "menus.dat", GAME_MENUFILE, "a2fdc88a77c8bdffec6b36cbeda4d955", -1},
- { "start", GAME_RESTFILE, "4d380a35ba941d03ee5084c71d20055b", -1},
+ { "start", GAME_RESTFILE, "016107aced82d0cc5d758a9fba716270", -1},
{ "stripped.txt", GAME_STRFILE, "c3a8f644551a27c8a2fec0f8070b46b7", -1},
{ "tbllist", GAME_TBLFILE, "8252660df0edbdbc3e6377e155bbd0c5", -1},
{ NULL, 0, NULL, 0}
},
- Common::FR_FRA,
+ Common::IT_ITA,
Common::kPlatformPC,
Common::ADGF_NO_FLAGS
},
@@ -443,7 +527,6 @@ static const AGOSGameDescription gameDescriptions[] = {
{ "icon.pkd", GAME_ICONFILE, "4822a91c18b1b2005ac17fc617f7dcbe", -1},
{ "menus.dat", GAME_MENUFILE, "3409eeb8ca8b46fc04da99de67573f5e", -1},
{ "start", GAME_RESTFILE, "b575b336e741dde1725edd4079d5ab67", -1},
- { "statelst", GAME_STATFILE, "469e98c69f00928a8366ba415d91902d", -1},
{ "stripped.txt", GAME_STRFILE, "6faaebff2786216900061eeb978f10af", -1},
{ "tbllist", GAME_TBLFILE, "95c44bfc380770a6b6dd0dfcc69e80a0", -1},
{ "xtbllist", GAME_XTBLFILE, "6c7b3db345d46349a5226f695c03e20f", -1},
diff --git a/engines/agos/draw.cpp b/engines/agos/draw.cpp
index f5f7161805..bb28da73b5 100644
--- a/engines/agos/draw.cpp
+++ b/engines/agos/draw.cpp
@@ -27,22 +27,16 @@
#include "common/system.h"
+#include "graphics/surface.h"
+
#include "agos/agos.h"
#include "agos/intern.h"
namespace AGOS {
-byte *AGOSEngine::getFrontBuf() {
- if (getGameType() != GType_PP && getGameType() != GType_FF)
- _updateScreen = true;
-
- _dxSurfacePitch = _screenWidth;
- return _frontBuf;
-}
-
byte *AGOSEngine::getBackBuf() {
_dxSurfacePitch = _screenWidth;
- return _useBackGround ? _backGroundBuf : _backBuf;
+ return _backBuf;
}
byte *AGOSEngine::getBackGround() {
@@ -166,27 +160,29 @@ void AGOSEngine::animateSprites() {
_vgaSpriteChanged++;
}
- if ((getGameType() == GType_ELVIRA1 && !_variableArray[293] ||
- getGameType() == GType_ELVIRA2 && !_variableArray[71]) &&
- _wallOn) {
+ if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2) {
+ const uint8 var = (getGameType() == GType_ELVIRA1) ? 293 : 71;
+ if (_wallOn && !_variableArray[var]) {
+ _wallOn--;
- VC10_state state;
- state.srcPtr = getBackGround() + 504;
- state.height = 127;
- state.width = 14;
- state.y = 0;
- state.x = 0;
- state.palette = 0;
- state.paletteMod = 0;
- state.flags = kDFNonTrans;
+ VC10_state state;
+ state.srcPtr = getBackGround() + 3 * _screenWidth + 3 * 16;
+ state.height = state.draw_height = 127;
+ state.width = state.draw_width = 14;
+ state.y = 0;
+ state.x = 0;
+ state.palette = 0;
+ state.paletteMod = 0;
+ state.flags = kDFNonTrans;
- _windowNum = 4;
+ _windowNum = 4;
- _backFlag = 1;
- drawImage(&state);
- _backFlag = 0;
+ _backFlag = 1;
+ drawImage(&state);
+ _backFlag = 0;
- _vgaSpriteChanged++;
+ _vgaSpriteChanged++;
+ }
}
if (!_scrollFlag && !_vgaSpriteChanged) {
@@ -209,7 +205,12 @@ void AGOSEngine::animateSprites() {
restoreBackGround();
vsp = _vgaSprites;
- while (vsp->id) {
+ for (; vsp->id !=0; vsp++) {
+ if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) &&
+ !(vsp->windowNum & 0x8000)) {
+ continue;
+ }
+
vsp->windowNum &= 0x7FFF;
vpe = &_vgaBufferPointers[vsp->zoneNum];
@@ -223,10 +224,10 @@ void AGOSEngine::animateSprites() {
saveBackGround(vsp);
drawImage_init(vsp->image, vsp->palette, vsp->x, vsp->y, vsp->flags);
- vsp++;
}
if (getGameType() == GType_ELVIRA1 && _variableArray[293]) {
+ // Used by the Fire Wall and Ice Wall spells
debug(0, "Using special wall");
uint8 color, h, len;
@@ -256,10 +257,9 @@ void AGOSEngine::animateSprites() {
}
_window4Flag = 1;
- setMoveRect(0, 224, 0, 127);
+ setMoveRect(0, 0, 224, 127);
} else if (getGameType() == GType_ELVIRA2 && _variableArray[71] & 2) {
- debug(0, "Using special wall");
-
+ // Used by the Unholy Barrier spell
uint8 color, h, len;
byte *dst = _window4BackScn;
@@ -284,14 +284,14 @@ void AGOSEngine::animateSprites() {
while (len--) {
dst += 2;
*dst++ = color;
- dst++;
+ dst += 1;
}
dst += 448;
h--;
}
_window4Flag = 1;
- setMoveRect(0, 224, 0, 127);
+ setMoveRect(0, 0, 224, 127);
}
if (_window6Flag == 1)
@@ -304,7 +304,123 @@ void AGOSEngine::animateSprites() {
}
void AGOSEngine::dirtyClips() {
- // TODO
+ int16 x, y, w, h;
+restart:
+ _newDirtyClip = 0;
+
+ VgaSprite *vsp = _vgaSprites;
+ while (vsp->id != 0) {
+ if (vsp->windowNum & 0x8000) {
+ x = vsp->x;
+ y = vsp->y;
+ w = 1;
+ h = 1;
+
+ if (vsp->image != 0) {
+ VgaPointersEntry *vpe = &_vgaBufferPointers[vsp->zoneNum];
+ const byte *ptr = vpe->vgaFile2 + vsp->image * 8;
+ w = READ_BE_UINT16(ptr + 6) / 8;
+ h = ptr[5];
+ }
+
+ dirtyClipCheck(x, y, w, h);
+ }
+ vsp++;
+ }
+
+ AnimTable *animTable = _screenAnim1;
+ while (animTable->srcPtr != 0) {
+ if (animTable->windowNum & 0x8000) {
+ x = animTable->x + _scrollX;
+ y = animTable->y;
+ w = animTable->width * 2;
+ h = animTable->height;
+
+ dirtyClipCheck(x, y, w, h);
+ }
+ animTable++;
+ }
+
+ if (_newDirtyClip != 0)
+ goto restart;
+
+}
+
+void AGOSEngine::dirtyClipCheck(int16 x, int16 y, int16 w, int16 h) {
+ int16 width, height, tmp;
+
+ VgaSprite *vsp = _vgaSprites;
+ for (; vsp->id != 0; vsp++) {
+ if (vsp->windowNum & 0x8000)
+ continue;
+
+ if (vsp->image == 0)
+ continue;
+
+ VgaPointersEntry *vpe = &_vgaBufferPointers[vsp->zoneNum];
+ const byte *ptr = vpe->vgaFile2 + vsp->image * 8;
+ width = READ_BE_UINT16(ptr + 6) / 8;
+ height = ptr[5];
+
+ tmp = vsp->x;
+ if (tmp >= x) {
+ tmp -= w;
+ if (tmp >= x)
+ continue;
+ } else {
+ tmp += width;
+ if (tmp < x)
+ continue;
+ }
+
+ tmp = vsp->y;
+ if (tmp >= y) {
+ tmp -= h;
+ if (tmp >= y)
+ continue;
+ } else {
+ tmp += height;
+ if (tmp < y)
+ continue;
+ }
+
+ vsp->windowNum |= 0x8000;
+ _newDirtyClip = 1;
+ }
+
+ AnimTable *animTable = _screenAnim1;
+ for (; animTable->srcPtr != 0; animTable++) {
+ if (animTable->windowNum & 0x8000)
+ continue;
+
+ width = animTable->width * 2;
+ height = animTable->height;
+
+ tmp = animTable->x + _scrollX;
+ if (tmp >= x) {
+ tmp -= w;
+ if (tmp >= x)
+ continue;
+ } else {
+ tmp += width;
+ if (tmp < x)
+ continue;
+ }
+
+ tmp = animTable->y;
+ if (tmp >= y) {
+ tmp -= h;
+ if (tmp >= y)
+ continue;
+ } else {
+ tmp += height;
+ if (tmp < y)
+ continue;
+ }
+
+ animTable->windowNum |= 0x8000;
+ _newDirtyClip = 1;
+ }
}
void AGOSEngine::restoreBackGround() {
@@ -326,12 +442,11 @@ void AGOSEngine::restoreBackGround() {
animTable--;
if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) &&
- !(animTable->window & 0x8000)) {
- //continue;
+ !(animTable->windowNum & 0x8000)) {
+ continue;
}
- animTable->window &= 0x7FFF;
- _windowNum = animTable->window;
+ _windowNum = animTable->windowNum & 0x7FFF;
VC10_state state;
state.srcPtr = animTable->srcPtr;
@@ -346,9 +461,9 @@ void AGOSEngine::restoreBackGround() {
_backFlag = 1;
drawImage(&state);
- //if (getGameType() != GType_SIMON1 && getGameType() != GType_SIMON2) {
+ if (getGameType() != GType_SIMON1 && getGameType() != GType_SIMON2) {
animTable->srcPtr = 0;
- //}
+ }
}
_backFlag = 0;
@@ -357,7 +472,7 @@ void AGOSEngine::restoreBackGround() {
animTable = animTableTmp = _screenAnim1;
while (animTable->srcPtr) {
- if (!(animTable->window & 8000)) {
+ if (!(animTable->windowNum & 0x8000)) {
memcpy(animTableTmp, animTable, sizeof(AnimTable));
animTableTmp++;
}
@@ -402,8 +517,12 @@ void AGOSEngine::saveBackGround(VgaSprite *vsp) {
}
animTable->height = ptr[5];
- animTable->window = vsp->windowNum;
+ animTable->windowNum = vsp->windowNum;
animTable->id = vsp->id;
+ animTable->zoneNum = vsp->zoneNum;
+
+ animTable++;
+ animTable->srcPtr = 0;
}
void AGOSEngine::displayBoxStars() {
@@ -422,10 +541,13 @@ void AGOSEngine::displayBoxStars() {
uint curHeight = (getGameType() == GType_SIMON2) ? _boxStarHeight : 134;
+
for (int i = 0; i < 5; i++) {
ha = _hitAreas;
count = ARRAYSIZE(_hitAreas);
+ Graphics::Surface *screen = _system->lockScreen();
+
do {
if (ha->id != 0 && ha->flags & kBFBoxInUse && !(ha->flags & kBFBoxDead)) {
@@ -453,7 +575,7 @@ void AGOSEngine::displayBoxStars() {
if (x_ >= 311)
continue;
- dst = getFrontBuf();
+ dst = (byte *)screen->pixels;
dst += (((_dxSurfacePitch / 4) * y_) * 4) + x_;
@@ -492,6 +614,8 @@ void AGOSEngine::displayBoxStars() {
}
} while (ha++, --count);
+ _system->unlockScreen();
+
delay(100);
setMoveRect(0, 0, 320, curHeight);
@@ -509,11 +633,7 @@ void AGOSEngine::scrollScreen() {
const byte *src;
uint x, y;
- if (getGameType() == GType_SIMON2) {
- dst = getBackGround();
- } else {
- dst = getFrontBuf();
- }
+ dst = getBackGround();
if (_scrollXMax == 0) {
uint screenSize = 8 * _screenWidth;
@@ -536,8 +656,7 @@ void AGOSEngine::scrollScreen() {
_scrollY += _scrollFlag;
vcWriteVar(250, _scrollY);
- memcpy(_backBuf, _frontBuf, _screenWidth * _screenHeight);
- memcpy(_backGroundBuf, _backBuf, _screenHeight * _scrollWidth);
+ fillBackFromBackGround(_screenHeight, _scrollWidth);
} else {
if (_scrollFlag < 0) {
memmove(dst + 8, dst, _screenWidth * _scrollHeight - 8);
@@ -565,8 +684,7 @@ void AGOSEngine::scrollScreen() {
if (getGameType() == GType_SIMON2) {
memcpy(_window4BackScn, _backGroundBuf, _scrollHeight * _screenWidth);
} else {
- memcpy(_backBuf, _frontBuf, _screenWidth * _screenHeight);
- memcpy(_backGroundBuf, _backBuf, _scrollHeight * _screenWidth);
+ fillBackFromBackGround(_scrollHeight, _screenWidth);
}
setMoveRect(0, 0, 320, _scrollHeight);
@@ -575,49 +693,48 @@ void AGOSEngine::scrollScreen() {
}
_scrollFlag = 0;
-}
-void AGOSEngine::clearBackFromTop(uint lines) {
- memset(_backBuf, 0, lines * _screenWidth);
-}
+ if (getGameType() == GType_SIMON2) {
+ AnimTable *animTable = _screenAnim1;
+ while (animTable->srcPtr) {
+ animTable->srcPtr = 0;
+ animTable++;
+ }
-void AGOSEngine::clearSurfaces(uint num_lines) {
- memset(_backBuf, 0, num_lines * _screenWidth);
+ VgaSprite *vsp = _vgaSprites;
+ while (vsp->id) {
+ vsp->windowNum |= 0x8000;
+ vsp++;
+ }
+ }
+}
- _system->copyRectToScreen(_backBuf, _screenWidth, 0, 0, _screenWidth, num_lines);
+void AGOSEngine::clearSurfaces() {
+ _system->clearScreen();
- if (_useBackGround) {
- memset(_frontBuf, 0, num_lines * _screenWidth);
- memset(_backGroundBuf, 0, num_lines * _screenWidth);
+ if (_backBuf) {
+ memset(_backBuf, 0, _screenHeight * _screenWidth);
}
}
-void AGOSEngine::fillFrontFromBack(uint x, uint y, uint w, uint h) {
- uint offs = x + y * _screenWidth;
- byte *s = _backBuf + offs;
- byte *d = _frontBuf + offs;
-
- do {
- memcpy(d, s, w);
- d += _screenWidth;
- s += _screenWidth;
- } while (--h);
+void AGOSEngine::fillBackFromBackGround(uint16 height, uint16 width) {
+ memcpy(_backBuf, _backGroundBuf, height * width);
}
-void AGOSEngine::fillBackFromFront(uint x, uint y, uint w, uint h) {
- uint offs = x + y * _screenWidth;
- byte *s = _frontBuf + offs;
- byte *d = _backBuf + offs;
+void AGOSEngine::fillBackFromFront() {
+ Graphics::Surface *screen = _system->lockScreen();
+ memcpy(_backBuf, (byte *)screen->pixels, _screenHeight * _screenWidth);
+ _system->unlockScreen();
+}
- do {
- memcpy(d, s, w);
- d += _screenWidth;
- s += _screenWidth;
- } while (--h);
+void AGOSEngine::fillBackGroundFromBack() {
+ memcpy(_backGroundBuf, _backBuf, _screenHeight * _screenWidth);
}
-void AGOSEngine::fillBackGroundFromBack(uint lines) {
- memcpy(_backGroundBuf, _backBuf, lines * _screenWidth);
+void AGOSEngine::fillBackGroundFromFront() {
+ Graphics::Surface *screen = _system->lockScreen();
+ memcpy(_backGroundBuf, (byte *)screen->pixels, _screenHeight * _screenWidth);
+ _system->unlockScreen();
}
void AGOSEngine::setMoveRect(uint16 x, uint16 y, uint16 width, uint16 height) {
@@ -643,18 +760,18 @@ void AGOSEngine::displayScreen() {
}
}
+ Graphics::Surface *screen = _system->lockScreen();
if (getGameType() == GType_PP || getGameType() == GType_FF) {
- _system->copyRectToScreen(getBackBuf(), _screenWidth, 0, 0, _screenWidth, _screenHeight);
- _system->updateScreen();
+ memcpy((byte *)screen->pixels, getBackBuf(), _screenWidth * _screenHeight);
if (getGameId() != GID_DIMP)
- memcpy(getBackBuf(), getFrontBuf(), _screenWidth * _screenHeight);
+ fillBackFromBackGround(_screenHeight, _screenWidth);
} else {
if (_window4Flag == 2) {
_window4Flag = 0;
uint16 srcWidth, width, height;
- byte *dst = getFrontBuf();
+ byte *dst = (byte *)screen->pixels;
const byte *src = _window4BackScn;
if (_window3Flag == 1) {
@@ -688,18 +805,17 @@ void AGOSEngine::displayScreen() {
_window6Flag = 0;
byte *src = _window6BackScn;
- byte *dst = getFrontBuf() + 16320;
+ byte *dst = (byte *)screen->pixels + 16320;
for (int i = 0; i < 80; i++) {
memcpy(dst, src, 48);
dst += _screenWidth;
src += 48;
}
}
-
- _system->copyRectToScreen(getFrontBuf(), _screenWidth, 0, 0, _screenWidth, _screenHeight);
- _system->updateScreen();
}
+ _system->unlockScreen();
+
if (getGameType() == GType_FF && _scrollFlag) {
scrollScreen();
}
diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp
index 8570859bb8..32329f34d9 100644
--- a/engines/agos/event.cpp
+++ b/engines/agos/event.cpp
@@ -34,11 +34,13 @@
#include "gui/about.h"
+#include "graphics/surface.h"
+
#include "sound/audiocd.h"
namespace AGOS {
-void AGOSEngine::addTimeEvent(uint timeout, uint subroutine_id) {
+void AGOSEngine::addTimeEvent(uint16 timeout, uint16 subroutine_id) {
TimeEvent *te = (TimeEvent *)malloc(sizeof(TimeEvent)), *first, *last = NULL;
time_t cur_time;
@@ -366,13 +368,17 @@ static const byte _image4[32] = {
void AGOSEngine::drawStuff(const byte *src, uint xoffs) {
const uint8 y = (getPlatform() == Common::kPlatformAtariST) ? 132 : 135;
- byte *dst = getFrontBuf() + y * _screenWidth + xoffs;
+
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dst = (byte *)screen->pixels + y * _screenWidth + xoffs;
for (uint h = 0; h < 6; h++) {
memcpy(dst, src, 4);
src += 4;
dst += _screenWidth;
}
+
+ _system->unlockScreen();
}
void AGOSEngine::imageEvent2(VgaTimerEntry * vte, uint dx) {
@@ -424,28 +430,27 @@ void AGOSEngine::delay(uint amount) {
uint32 start = _system->getMillis();
uint32 cur = start;
- uint this_delay, vga_period;
+ uint this_delay, vgaPeriod;
AudioCD.updateCD();
if (_debugger->isAttached())
_debugger->onFrame();
- if (_fastMode)
- vga_period = 10;
- else if (getGameType() == GType_SIMON2)
- vga_period = 45;
- else
- vga_period = 50;
+ vgaPeriod = (_fastMode) ? 10 : _vgaPeriod;
+ if (getGameType() == GType_PP && getGameId() != GID_DIMP) {
+ if (vgaPeriod == 15 && _variableArray[999] == 0)
+ vgaPeriod = 30;
+ }
_rnd.getRandomNumber(2);
do {
- while (!_inCallBack && cur >= _lastVgaTick + vga_period && !_pause) {
- _lastVgaTick += vga_period;
+ while (!_inCallBack && cur >= _lastVgaTick + vgaPeriod && !_pause) {
+ _lastVgaTick += vgaPeriod;
// don't get too many frames behind
- if (cur >= _lastVgaTick + vga_period * 2)
+ if (cur >= _lastVgaTick + vgaPeriod * 2)
_lastVgaTick = cur;
_inCallBack = true;
@@ -456,15 +461,16 @@ void AGOSEngine::delay(uint amount) {
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode >= '0' && event.kbd.keycode <='9'
+ if (event.kbd.keycode >= Common::KEYCODE_0 && event.kbd.keycode <= Common::KEYCODE_9
&& (event.kbd.flags == Common::KBD_ALT ||
event.kbd.flags == Common::KBD_CTRL)) {
- _saveLoadSlot = event.kbd.keycode - '0';
+ _saveLoadSlot = event.kbd.keycode - Common::KEYCODE_0;
// There is no save slot 0
if (_saveLoadSlot == 0)
_saveLoadSlot = 10;
+ memset(_saveLoadName, 0, sizeof(_saveLoadName));
sprintf(_saveLoadName, "Quick %d", _saveLoadSlot);
_saveLoadType = (event.kbd.flags == Common::KBD_ALT) ? 1 : 2;
@@ -473,14 +479,17 @@ void AGOSEngine::delay(uint amount) {
if (!_mouseHideCount && !_showPreposition)
quickLoadOrSave();
} else if (event.kbd.flags == Common::KBD_CTRL) {
- if (event.kbd.keycode == 'a') {
+ if (event.kbd.keycode == Common::KEYCODE_a) {
GUI::Dialog *_aboutDialog;
_aboutDialog = new GUI::AboutDialog();
_aboutDialog->runModal();
- } else if (event.kbd.keycode == 'f')
+ } else if (event.kbd.keycode == Common::KEYCODE_f) {
_fastMode ^= 1;
- else if (event.kbd.keycode == 'd')
+ } else if (event.kbd.keycode == Common::KEYCODE_d) {
_debugger->attach();
+ } else if (event.kbd.keycode == Common::KEYCODE_u) {
+ dumpAllSubroutines();
+ }
}
if (getGameType() == GType_PP) {
@@ -491,7 +500,7 @@ void AGOSEngine::delay(uint amount) {
}
// Make sure backspace works right (this fixes a small issue on OS X)
- if (event.kbd.keycode == 8)
+ if (event.kbd.keycode == Common::KEYCODE_BACKSPACE)
_keyPressed = 8;
else
_keyPressed = (byte)event.kbd.ascii;
@@ -510,6 +519,7 @@ void AGOSEngine::delay(uint amount) {
_leftButton = 0;
_leftButtonCount = 0;
+ _leftClick = true;
break;
case Common::EVENT_RBUTTONDOWN:
if (getGameType() == GType_FF)
@@ -544,32 +554,17 @@ void AGOSEngine::delay(uint amount) {
}
void AGOSEngine::timer_callback() {
- // FIXME: _timer5 is never set
- if (_timer5) {
- _syncFlag2 = true;
- _timer5--;
- } else {
- if (getGameId() == GID_DIMP) {
- _thisTickCount = _system->getMillis();
- if (_thisTickCount < _lastTickCount)
- _lastTickCount = 0;
-
- if ((_thisTickCount - _lastTickCount) <= 35)
- return;
-
- _lastTickCount = _thisTickCount;
+ if (getGameId() == GID_DIMP) {
+ _lastTickCount = _system->getMillis();
- timer_proc1();
- dimp_idle();
- } else {
- timer_proc1();
- }
+ timer_proc1();
+ dimp_idle();
+ } else {
+ timer_proc1();
}
}
void AGOSEngine_Feeble::timer_proc1() {
- _timer4++;
-
if (_lockWord & 0x80E9 || _lockWord & 2)
return;
@@ -598,11 +593,6 @@ void AGOSEngine_Feeble::timer_proc1() {
animateSprites();
}
- if (_copyPartialMode == 2) {
- fillFrontFromBack(0, 0, _screenWidth, _screenHeight);
- _copyPartialMode = 0;
- }
-
if (_displayScreen) {
if (getGameType() == GType_FF) {
if (!getBitFlag(78)) {
@@ -621,8 +611,6 @@ void AGOSEngine_Feeble::timer_proc1() {
}
void AGOSEngine::timer_proc1() {
- _timer4++;
-
if (_lockWord & 0x80E9 || _lockWord & 2)
return;
@@ -640,13 +628,6 @@ void AGOSEngine::timer_proc1() {
processVgaEvents();
}
- if (_updateScreen) {
- _system->copyRectToScreen(getFrontBuf(), _screenWidth, 0, 0, _screenWidth, _screenHeight);
- _system->updateScreen();
-
- _updateScreen = false;
- }
-
if (_displayScreen) {
displayScreen();
_displayScreen = false;
diff --git a/engines/agos/gfx.cpp b/engines/agos/gfx.cpp
index 6486cc8ca7..2b530fdcd6 100644
--- a/engines/agos/gfx.cpp
+++ b/engines/agos/gfx.cpp
@@ -25,6 +25,10 @@
#include "common/stdafx.h"
+#include "common/system.h"
+
+#include "graphics/surface.h"
+
#include "agos/agos.h"
#include "agos/intern.h"
#include "agos/vga.h"
@@ -289,6 +293,9 @@ void AGOSEngine_Feeble::scaleClip(int16 h, int16 w, int16 y, int16 x, int16 scro
}
void AGOSEngine_Feeble::drawImage(VC10_state *state) {
+ state->surf_addr = getBackBuf();
+ state->surf_pitch = _dxSurfacePitch;
+
if (state->flags & kDFCompressed) {
if (state->flags & kDFScaled) {
state->surf_addr = getScaleBuf();
@@ -357,8 +364,9 @@ void AGOSEngine_Feeble::drawImage(VC10_state *state) {
scaleClip(_scaleHeight, _scaleWidth, _scaleY, _scaleX, _scaleY + _scrollY);
}
} else {
- if (!drawImage_clip(state))
+ if (!drawImage_clip(state)) {
return;
+ }
state->surf_addr += state->x + state->y * state->surf_pitch;
@@ -373,14 +381,18 @@ void AGOSEngine_Feeble::drawImage(VC10_state *state) {
if (state->flags & kDFMasked) {
if (getGameType() == GType_FF && !getBitFlag(81)) {
- if (state->x > _feebleRect.right)
+ if (state->x > _feebleRect.right) {
return;
- if (state->y > _feebleRect.bottom)
+ }
+ if (state->y > _feebleRect.bottom) {
return;
- if (state->x + state->width < _feebleRect.left)
+ }
+ if (state->x + state->width < _feebleRect.left) {
return;
- if (state->y + state->height < _feebleRect.top)
+ }
+ if (state->y + state->height < _feebleRect.top) {
return;
+ }
}
dstPtr = state->surf_addr;
@@ -423,8 +435,9 @@ void AGOSEngine_Feeble::drawImage(VC10_state *state) {
}
}
} else {
- if (!drawImage_clip(state))
+ if (!drawImage_clip(state)) {
return;
+ }
state->surf_addr += state->x + state->y * state->surf_pitch;
@@ -448,7 +461,7 @@ void AGOSEngine_Feeble::drawImage(VC10_state *state) {
dst += _screenWidth;
src += state->width;
} while (--state->draw_height);
- }
+ }
}
void AGOSEngine_Simon1::drawMaskedImage(VC10_state *state) {
@@ -629,6 +642,8 @@ void AGOSEngine_Simon1::drawImage(VC10_state *state) {
if (!drawImage_clip(state))
return;
+ Graphics::Surface *screen = _system->lockScreen();
+
if (getFeatures() & GF_32COLOR)
state->palette = 0xC0;
@@ -663,7 +678,7 @@ void AGOSEngine_Simon1::drawImage(VC10_state *state) {
_window4Flag = 1;
} else {
- state->surf_addr = getFrontBuf();
+ state->surf_addr = (byte *)screen->pixels;
state->surf_pitch = _screenWidth;
xoffs = (vlut[0] * 2 + state->x) * 8;
@@ -697,7 +712,7 @@ void AGOSEngine_Simon1::drawImage(VC10_state *state) {
state->surf2_addr = getBackGround();
state->surf2_pitch = _screenWidth;
- state->surf_addr = getFrontBuf();
+ state->surf_addr = (byte *)screen->pixels;
state->surf_pitch = _screenWidth;
xoffs = (vlut[0] * 2 + state->x) * 8;
@@ -717,6 +732,8 @@ void AGOSEngine_Simon1::drawImage(VC10_state *state) {
} else {
drawVertImage(state);
}
+
+ _system->unlockScreen();
}
void AGOSEngine::drawBackGroundImage(VC10_state *state) {
@@ -812,6 +829,8 @@ void AGOSEngine::drawImage(VC10_state *state) {
if (!drawImage_clip(state))
return;
+ Graphics::Surface *screen = _system->lockScreen();
+
uint16 xoffs, yoffs;
if (getGameType() == GType_WW) {
if (_windowNum == 4 || (_windowNum >= 10 && _windowNum <= 27)) {
@@ -827,7 +846,7 @@ void AGOSEngine::drawImage(VC10_state *state) {
_window4Flag = 1;
} else {
- state->surf_addr = getFrontBuf();
+ state->surf_addr = (byte *)screen->pixels;
state->surf_pitch = _screenWidth;
xoffs = (vlut[0] * 2 + state->x) * 8;
@@ -847,7 +866,7 @@ void AGOSEngine::drawImage(VC10_state *state) {
_window4Flag = 1;
} else {
- state->surf_addr = getFrontBuf();
+ state->surf_addr = (byte *)screen->pixels;
state->surf_pitch = _screenWidth;
xoffs = (vlut[0] * 2 + state->x) * 8;
@@ -861,7 +880,7 @@ void AGOSEngine::drawImage(VC10_state *state) {
xoffs = state->x * 8;
yoffs = state->y;
} else if (_windowNum == 2 || _windowNum == 3) {
- state->surf_addr = getFrontBuf();
+ state->surf_addr = (byte *)screen->pixels;
state->surf_pitch = _screenWidth;
xoffs = (vlut[0] * 2 + state->x) * 8;
@@ -894,6 +913,8 @@ void AGOSEngine::drawImage(VC10_state *state) {
} else {
drawVertImage(state);
}
+
+ _system->unlockScreen();
}
void AGOSEngine::horizontalScroll(VC10_state *state) {
@@ -1008,11 +1029,7 @@ void AGOSEngine::animate(uint16 windowNum, uint16 zoneNum, uint16 vgaSpriteId, i
else
vsp->palette = palette;
vsp->id = vgaSpriteId;
-
- if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP)
- vsp->zoneNum = zoneNum;
- else
- vsp->zoneNum = zoneNum = vgaSpriteId / 100;
+ vsp->zoneNum = zoneNum;
for (;;) {
vpe = &_vgaBufferPointers[zoneNum];
@@ -1255,14 +1272,14 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
_windowNum = updateWindow = mode;
_lockWord |= 0x20;
- VgaTimerEntry *vte = _vgaTimerList;
- while (vte->type != 2)
- vte++;
-
- vte->delay = 2;
-
if (getGameType() == GType_FF || getGameType() == GType_PP) {
vc27_resetSprite();
+ } else {
+ VgaTimerEntry *vte = _vgaTimerList;
+ while (vte->type != ANIMATE_INT)
+ vte++;
+
+ vte->delay = 2;
}
if (getGameType() == GType_SIMON2 || getGameType() == GType_FF) {
@@ -1284,8 +1301,7 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
setImage(vga_res_id);
if (getGameType() == GType_FF || getGameType() == GType_PP) {
- fillFrontFromBack(0, 0, _screenWidth, _screenHeight);
- fillBackGroundFromBack(_screenHeight);
+ fillBackGroundFromBack();
_syncFlag2 = 1;
} else {
_copyScnFlag = 2;
@@ -1302,6 +1318,7 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
uint width = _videoWindows[updateWindow * 4 + 2] * 16;
uint height = _videoWindows[updateWindow * 4 + 3];
+ Graphics::Surface *screen = _system->lockScreen();
byte *dst = getBackGround() + xoffs + yoffs * _screenWidth;
byte *src;
uint srcWidth;
@@ -1315,9 +1332,10 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
src = _window4BackScn;
srcWidth = _videoWindows[18] * 16;
} else if (updateWindow == 3 || updateWindow == 9) {
- src = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ src = (byte *)screen->pixels + xoffs + yoffs * _screenWidth;
srcWidth = _screenWidth;
} else {
+ _system->unlockScreen();
_lockWord &= ~0x20;
return;
}
@@ -1329,9 +1347,10 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
src = _window4BackScn + xoffs + yoffs * 320;
srcWidth = _videoWindows[18] * 16;
} else if (updateWindow == 0) {
- src = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ src = (byte *)screen->pixels + xoffs + yoffs * _screenWidth;
srcWidth = _screenWidth;
} else {
+ _system->unlockScreen();
_lockWord &= ~0x20;
return;
}
@@ -1340,9 +1359,10 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
src = _window4BackScn;
srcWidth = _videoWindows[18] * 16;
} else if (updateWindow == 3 || updateWindow == 9) {
- src = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ src = (byte *)screen->pixels + xoffs + yoffs * _screenWidth;
srcWidth = _screenWidth;
} else {
+ _system->unlockScreen();
_lockWord &= ~0x20;
return;
}
@@ -1351,9 +1371,10 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
src = _window4BackScn;
srcWidth = _videoWindows[18] * 16;
} else if (updateWindow == 3) {
- src = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ src = (byte *)screen->pixels + xoffs + yoffs * _screenWidth;
srcWidth = _screenWidth;
} else {
+ _system->unlockScreen();
_lockWord &= ~0x20;
return;
}
@@ -1363,7 +1384,7 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
src = _window6BackScn;
srcWidth = 48;
} else if (updateWindow == 2 || updateWindow == 3) {
- src = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ src = (byte *)screen->pixels + xoffs + yoffs * _screenWidth;
srcWidth = _screenWidth;
} else {
src = _window4BackScn;
@@ -1380,7 +1401,7 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
}
if (getGameType() == GType_ELVIRA1 && updateWindow == 3 && _bottomPalette) {
- dst = getFrontBuf() + 133 * _screenWidth;
+ dst = (byte *)screen->pixels + 133 * _screenWidth;
int size = 67 * _screenWidth;
while (size--) {
@@ -1389,8 +1410,7 @@ void AGOSEngine::setWindowImage(uint16 mode, uint16 vga_res_id) {
}
}
- _syncFlag2 = 1;
- _timer5 = 0;
+ _system->unlockScreen();
}
_lockWord &= ~0x20;
diff --git a/engines/agos/icons.cpp b/engines/agos/icons.cpp
index 9c8938bb97..3edcedaa8e 100644
--- a/engines/agos/icons.cpp
+++ b/engines/agos/icons.cpp
@@ -25,27 +25,44 @@
#include "common/stdafx.h"
+#include "common/system.h"
+
#include "common/file.h"
+#include "graphics/surface.h"
+
#include "agos/agos.h"
namespace AGOS {
void AGOSEngine::loadIconFile() {
Common::File in;
- uint size;
+ uint32 srcSize;
in.open(getFileName(GAME_ICONFILE));
if (in.isOpen() == false)
error("Can't open icons file '%s'", getFileName(GAME_ICONFILE));
- size = in.size();
+ srcSize = in.size();
- _iconFilePtr = (byte *)malloc(size);
- if (_iconFilePtr == NULL)
- error("Out of icon memory");
+ if (getGameType() == GType_WW && getPlatform() == Common::kPlatformAmiga) {
+ byte *srcBuf = (byte *)malloc(srcSize);
+ in.read(srcBuf, srcSize);
+
+ uint32 dstSize = READ_BE_UINT32(srcBuf + srcSize - 4);
+ _iconFilePtr = (byte *)malloc(dstSize);
+ if (_iconFilePtr == NULL)
+ error("Out of icon memory");
+
+ decrunchFile(srcBuf, _iconFilePtr, srcSize);
+ free(srcBuf);
+ } else {
+ _iconFilePtr = (byte *)malloc(srcSize);
+ if (_iconFilePtr == NULL)
+ error("Out of icon memory");
- in.read(_iconFilePtr, size);
+ in.read(_iconFilePtr, srcSize);
+ }
in.close();
}
@@ -66,15 +83,19 @@ void AGOSEngine::loadIconData() {
// Thanks to Stuart Caie for providing the original
// C conversion upon which this function is based.
static void decompressIconPlanar(byte *dst, byte *src, uint width, uint height, byte base, uint pitch, bool decompress = true) {
- byte icon_pln[288];
- byte *i, *o, *srcPtr, x, y;
+ byte *i, *icon_pln, *o, *srcPtr;
+ byte x, y;
+ icon_pln = 0;
srcPtr = src;
+
if (decompress) {
+ icon_pln = (byte *)calloc(width * height, 1);
+
// Decode RLE planar icon data
i = src;
o = icon_pln;
- while (o < &icon_pln[288]) {
+ while (o < &icon_pln[width * height]) {
x = *i++;
if (x < 128) {
do {
@@ -96,18 +117,20 @@ static void decompressIconPlanar(byte *dst, byte *src, uint width, uint height,
}
// Translate planar data to chunky (very slow method)
- for (y = 0; y < 24; y++) {
- for (x = 0; x < 24; x++) {
+ for (y = 0; y < height * 2; y++) {
+ for (x = 0; x < width; x++) {
byte pixel =
- (srcPtr[(( y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 1 : 0)
- | (srcPtr[((24 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 2 : 0)
- | (srcPtr[((48 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 4 : 0)
- | (srcPtr[((72 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 8 : 0);
+ (srcPtr[((height * 0 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 1 : 0)
+ | (srcPtr[((height * 2 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 2 : 0)
+ | (srcPtr[((height * 4 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 4 : 0)
+ | (srcPtr[((height * 6 + y) * 3) + (x >> 3)] & (1 << (7 - (x & 7))) ? 8 : 0);
if (pixel)
dst[x] = pixel | base;
}
dst += pitch;
}
+
+ free(icon_pln);
}
static void decompressIcon(byte *dst, byte *src, uint width, uint height, byte base, uint pitch) {
@@ -174,20 +197,24 @@ void AGOSEngine_Simon2::drawIcon(WindowBlock *window, uint icon, uint x, uint y)
byte *src;
_lockWord |= 0x8000;
- dst = getFrontBuf();
+
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
dst += 110;
dst += x;
dst += (y + window->y) * _dxSurfacePitch;
src = _iconFilePtr;
- src += READ_LE_UINT16(&((uint16 *)src)[icon * 2 + 0]);
+ src += READ_LE_UINT16(src + icon * 4 + 0);
decompressIcon(dst, src, 20, 10, 224, _dxSurfacePitch);
src = _iconFilePtr;
- src += READ_LE_UINT16(&((uint16 *)src)[icon * 2 + 1]);
+ src += READ_LE_UINT16(src + icon * 4 + 2);
decompressIcon(dst, src, 20, 10, 208, _dxSurfacePitch);
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -196,22 +223,26 @@ void AGOSEngine_Simon1::drawIcon(WindowBlock *window, uint icon, uint x, uint y)
byte *src;
_lockWord |= 0x8000;
- dst = getFrontBuf();
+
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
dst += (x + window->x) * 8;
dst += (y * 25 + window->y) * _dxSurfacePitch;
if (getPlatform() == Common::kPlatformAmiga) {
src = _iconFilePtr;
- src += READ_BE_UINT32(&((uint32 *)src)[icon]);
+ src += READ_BE_UINT32(src + icon * 4);
uint8 color = (getFeatures() & GF_32COLOR) ? 16 : 240;
- decompressIconPlanar(dst, src, 24, 24, color, _dxSurfacePitch);
+ decompressIconPlanar(dst, src, 24, 12, color, _dxSurfacePitch);
} else {
src = _iconFilePtr;
- src += READ_LE_UINT16(&((uint16 *)src)[icon]);
+ src += READ_LE_UINT16(src + icon * 2);
decompressIcon(dst, src, 24, 12, 224, _dxSurfacePitch);
}
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -220,21 +251,26 @@ void AGOSEngine_Waxworks::drawIcon(WindowBlock *window, uint icon, uint x, uint
byte *src;
_lockWord |= 0x8000;
- dst = getFrontBuf();
+
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
dst += (x + window->x) * 8;
dst += (y * 20 + window->y) * _dxSurfacePitch;
uint8 color = dst[0] & 0xF0;
if (getPlatform() == Common::kPlatformAmiga) {
- // TODO
- return;
+ src = _iconFilePtr;
+ src += READ_BE_UINT32(src + icon * 4);
+ decompressIconPlanar(dst, src, 24, 10, color, _dxSurfacePitch);
} else {
src = _iconFilePtr;
- src += READ_LE_UINT16(&((uint16 *)src)[icon]);
+ src += READ_LE_UINT16(src + icon * 2);
decompressIcon(dst, src, 24, 10, color, _dxSurfacePitch);
}
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -243,7 +279,9 @@ void AGOSEngine_Elvira2::drawIcon(WindowBlock *window, uint icon, uint x, uint y
byte *src;
_lockWord |= 0x8000;
- dst = getFrontBuf();
+
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
dst += (x + window->x) * 8;
dst += (y * 8 + window->y) * _dxSurfacePitch;
@@ -251,14 +289,16 @@ void AGOSEngine_Elvira2::drawIcon(WindowBlock *window, uint icon, uint x, uint y
uint color = dst[0] & 0xF0;
if (getFeatures() & GF_PLANAR) {
src = _iconFilePtr;
- src += READ_BE_UINT32(&((uint32 *)src)[icon]);
- decompressIconPlanar(dst, src, 24, 24, color, _dxSurfacePitch);
+ src += READ_BE_UINT32(src + icon * 4);
+ decompressIconPlanar(dst, src, 24, 12, color, _dxSurfacePitch);
} else {
src = _iconFilePtr;
- src += READ_LE_UINT16(&((uint16 *)src)[icon]);
+ src += READ_LE_UINT16(src + icon * 2);
decompressIcon(dst, src, 24, 12, color, _dxSurfacePitch);
}
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -267,21 +307,25 @@ void AGOSEngine::drawIcon(WindowBlock *window, uint icon, uint x, uint y) {
byte *src;
_lockWord |= 0x8000;
- dst = getFrontBuf();
+
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
dst += (x + window->x) * 8;
dst += (y * 8 + window->y) * _dxSurfacePitch;
if (getFeatures() & GF_PLANAR) {
src = _iconFilePtr;
- src += READ_BE_UINT16(&((uint16 *)src)[icon]);
- decompressIconPlanar(dst, src, 24, 24, 16, _dxSurfacePitch);
+ src += READ_BE_UINT16(src + icon * 2);
+ decompressIconPlanar(dst, src, 24, 12, 16, _dxSurfacePitch);
} else {
src = _iconFilePtr;
src += icon * 288;
- decompressIconPlanar(dst, src, 24, 24, 16, _dxSurfacePitch, false);
+ decompressIconPlanar(dst, src, 24, 12, 16, _dxSurfacePitch, false);
}
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -384,7 +428,7 @@ l1:; itemRef = derefItem(itemRef->next);
}
/* Plot arrows and add their boxes */
- addArrows(window);
+ addArrows(window, num);
window->iconPtr->upArrow = _scrollUpHitArea;
window->iconPtr->downArrow = _scrollDownHitArea;
}
@@ -486,7 +530,7 @@ void AGOSEngine::drawIconArray(uint num, Item *itemRef, int line, int classMask)
if (showArrows != 0 || window->iconPtr->line != 0) {
/* Plot arrows and add their boxes */
- addArrows(window);
+ addArrows(window, num);
window->iconPtr->upArrow = _scrollUpHitArea;
window->iconPtr->downArrow = _scrollDownHitArea;
}
@@ -594,7 +638,7 @@ uint AGOSEngine::setupIconHitArea(WindowBlock *window, uint num, uint x, uint y,
return ha - _hitAreas;
}
-void AGOSEngine_Feeble::addArrows(WindowBlock *window) {
+void AGOSEngine_Feeble::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
ha = findEmptyHitArea();
@@ -624,7 +668,7 @@ void AGOSEngine_Feeble::addArrows(WindowBlock *window) {
ha->verb = 1;
}
-void AGOSEngine_Simon2::addArrows(WindowBlock *window) {
+void AGOSEngine_Simon2::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
ha = findEmptyHitArea();
@@ -654,7 +698,7 @@ void AGOSEngine_Simon2::addArrows(WindowBlock *window) {
ha->verb = 1;
}
-void AGOSEngine_Simon1::addArrows(WindowBlock *window) {
+void AGOSEngine_Simon1::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
ha = findEmptyHitArea();
@@ -683,16 +727,24 @@ void AGOSEngine_Simon1::addArrows(WindowBlock *window) {
ha->window = window;
ha->verb = 1;
- if (getFeatures() & GF_32COLOR) {
- // TODO: Manually draws arrows
- } else {
- stopAnimate(128);
- uint8 palette = (getPlatform() == Common::kPlatformAmiga) ? 15: 14;
- animate(0, 1, 128, 0, 0, palette);
- }
+ _lockWord |= 0x8;
+
+ VgaPointersEntry *vpe = &_vgaBufferPointers[1];
+ byte *curVgaFile2Orig = _curVgaFile2;
+ uint16 windowNumOrig = _windowNum;
+ uint8 palette = (getPlatform() == Common::kPlatformAmiga) ? 15 : 14;
+
+ _windowNum = 0;
+ _curVgaFile2 = vpe->vgaFile2;
+ drawImage_init(1, palette, 38, 150, 4);
+
+ _curVgaFile2 = curVgaFile2Orig;
+ _windowNum = windowNumOrig;
+
+ _lockWord &= ~0x8;
}
-void AGOSEngine_Waxworks::addArrows(WindowBlock *window) {
+void AGOSEngine_Waxworks::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
ha = findEmptyHitArea();
@@ -724,7 +776,7 @@ void AGOSEngine_Waxworks::addArrows(WindowBlock *window) {
setWindowImageEx(6, 103);
}
-void AGOSEngine_Elvira2::addArrows(WindowBlock *window) {
+void AGOSEngine_Elvira2::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
ha = findEmptyHitArea();
@@ -756,8 +808,17 @@ void AGOSEngine_Elvira2::addArrows(WindowBlock *window) {
setWindowImageEx(6, 106);
}
-void AGOSEngine::addArrows(WindowBlock *window) {
+void AGOSEngine::addArrows(WindowBlock *window, uint8 num) {
HitArea *ha;
+ uint16 x, y;
+
+ x = 30;
+ y = 151;
+ if (num != 2) {
+ y = window->height * 4 + window->y - 19;
+ x = window->width + window->x;
+ }
+ drawArrow(x, y, 16);
ha = findEmptyHitArea();
_scrollUpHitArea = ha - _hitAreas;
@@ -772,6 +833,14 @@ void AGOSEngine::addArrows(WindowBlock *window) {
ha->window = window;
ha->verb = 1;
+ x = 30;
+ y = 170;
+ if (num != 2) {
+ y = window->height * 4;
+ x = window->width + window->x;
+ }
+ drawArrow(x, y, -16);
+
ha = findEmptyHitArea();
_scrollDownHitArea = ha - _hitAreas;
@@ -786,21 +855,89 @@ void AGOSEngine::addArrows(WindowBlock *window) {
ha->verb = 1;
}
+static const byte _arrowImage[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+ 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b,
+ 0x0a, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0a,
+ 0x0d, 0x0a, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0a, 0x0d,
+ 0x03, 0x0d, 0x0a, 0x0b, 0x0a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0a, 0x0d, 0x03,
+ 0x04, 0x03, 0x0d, 0x0a, 0x0b, 0x0a, 0x00, 0x00,
+ 0x00, 0x00, 0x0a, 0x0b, 0x0a, 0x0d, 0x03, 0x04,
+ 0x0f, 0x04, 0x03, 0x0d, 0x0a, 0x0b, 0x0a, 0x00,
+ 0x00, 0x0a, 0x0b, 0x0a, 0x0d, 0x0d, 0x0d, 0x03,
+ 0x04, 0x03, 0x0d, 0x0d, 0x0d, 0x0a, 0x0b, 0x0a,
+ 0x00, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x0d,
+ 0x03, 0x0d, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b,
+ 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0d,
+ 0x0d, 0x0d, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x00, 0x0a, 0x0a, 0x0a, 0x0e, 0x0b, 0x0b, 0x0c,
+ 0x0e, 0x0c, 0x0b, 0x0b, 0x0e, 0x0a, 0x0a, 0x0a,
+ 0x00, 0x00, 0x02, 0x02, 0x0a, 0x0b, 0x0a, 0x0d,
+ 0x0d, 0x0d, 0x0a, 0x0b, 0x0a, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x0a, 0x0b, 0x0b, 0x0c,
+ 0x0e, 0x0c, 0x0b, 0x0b, 0x0a, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0a, 0x0d,
+ 0x0d, 0x0d, 0x0a, 0x0b, 0x0a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0b, 0x0c,
+ 0x0e, 0x0c, 0x0b, 0x0b, 0x0a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x0a, 0x0a,
+ 0x0e, 0x0a, 0x0a, 0x0e, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+};
+
+void AGOSEngine::drawArrow(uint16 x, uint16 y, int8 dir) {
+ const byte *src;
+ uint8 w, h;
+
+ if (dir < 0) {
+ src = _arrowImage + 288;
+ } else {
+ src = _arrowImage;
+ }
+
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dst = (byte *)screen->pixels + y * _screenWidth + x * 8;
+
+ for (h = 0; h < 19; h++) {
+ for (w = 0; w < 16; w++) {
+ dst[w] = src[w] + 16;
+ }
+
+ src += dir;
+ dst+= _screenWidth;
+ }
+
+ _system->unlockScreen();
+}
+
void AGOSEngine::removeArrows(WindowBlock *window, uint num) {
if (getGameType() == GType_SIMON1) {
- if (getFeatures() & GF_32COLOR) {
- // TODO: Manually removes arrows
- } else {
- stopAnimate(129);
- uint8 palette = (getPlatform() == Common::kPlatformAmiga) ? 15: 14;
- animate(0, 1, 129, 0, 0, palette);
- }
+ restoreBlock(200, 320, 146, 304);
} else if (getGameType() == GType_WW) {
setBitFlag(22, false);
setWindowImageEx(6, 103);
} else if (getGameType() == GType_ELVIRA2) {
setBitFlag(21, false);
setWindowImageEx(6, 106);
+ } else if (getGameType() == GType_ELVIRA1) {
+ if (num != 2) {
+ uint y = window->height * 4 + window->y - 19;
+ uint x = window->width + window->x;
+ restoreBlock(y + 38, x + 16, y, x);
+ } else {
+ colorBlock(window, 240, 151, 16, 38);
+ }
}
}
diff --git a/engines/agos/input.cpp b/engines/agos/input.cpp
index 3f2efc86b4..ef0791dc10 100644
--- a/engines/agos/input.cpp
+++ b/engines/agos/input.cpp
@@ -25,6 +25,7 @@
#include "common/stdafx.h"
+#include "common/config-manager.h"
#include "common/file.h"
#include "agos/intern.h"
@@ -273,28 +274,28 @@ void AGOSEngine::waitForInput() {
_verbHitArea = 236;
if (ha->id == 98) {
- animate(2, 0, 110, 0, 0, 0);
+ animate(2, 1, 110, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 108) {
- animate(2, 0, 106, 0, 0, 0);
+ animate(2, 1, 106, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 109) {
- animate(2, 0, 107, 0, 0, 0);
+ animate(2, 1, 107, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 115) {
- animate(2, 0, 109, 0, 0, 0);
+ animate(2, 1, 109, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 116) {
- animate(2, 0, 113, 0, 0, 0);
+ animate(2, 1, 113, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 117) {
- animate(2, 0, 112, 0, 0, 0);
+ animate(2, 1, 112, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 118) {
- animate(2, 0, 108, 0, 0, 0);
+ animate(2, 1, 108, 0, 0, 0);
waitForSync(34);
} else if (ha->id == 119) {
- animate(2, 0, 111, 0, 0, 0);
+ animate(2, 1, 111, 0, 0, 0);
waitForSync(34);
}
}
@@ -542,6 +543,14 @@ bool AGOSEngine::processSpecialKeys() {
if (getGameType() == GType_FF)
setBitFlag(73, !getBitFlag(73));
break;
+ case 37: // F12
+ if (getGameType() == GType_PP && getGameId() != GID_DIMP) {
+ if (!getBitFlag(110)) {
+ setBitFlag(107, !getBitFlag(107));
+ _vgaPeriod = (getBitFlag(107) != 0) ? 15 : 30;
+ }
+ }
+ break;
case 'p':
pause();
break;
@@ -558,21 +567,30 @@ bool AGOSEngine::processSpecialKeys() {
_speech ^= 1;
}
case '+':
- _midi.setVolume(_midi.getVolume() + 16);
+ if (_midiEnabled) {
+ _midi.setVolume(_midi.getVolume() + 16);
+ }
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) + 16);
break;
case '-':
- _midi.setVolume(_midi.getVolume() - 16);
+ if (_midiEnabled) {
+ _midi.setVolume(_midi.getVolume() - 16);
+ }
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) - 16);
break;
case 'm':
- _midi.pause(_musicPaused ^= 1);
+ _musicPaused ^= 1;
+ if (_midiEnabled) {
+ _midi.pause(_musicPaused);
+ }
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, (_musicPaused) ? 0 : ConfMan.getInt("music_volume"));
break;
case 's':
- if (getGameId() == GID_SIMON1DOS)
+ if (getGameId() == GID_SIMON1DOS) {
_midi._enable_sfx ^= 1;
- else
+ } else {
_sound->effectsPause(_effectsPaused ^= 1);
+ }
break;
case 'b':
_sound->ambientPause(_ambientPaused ^= 1);
diff --git a/engines/agos/intern.h b/engines/agos/intern.h
index f39ca7d3da..a863dc7c0f 100644
--- a/engines/agos/intern.h
+++ b/engines/agos/intern.h
@@ -131,11 +131,11 @@ struct IconBlock {
struct WindowBlock {
byte mode;
byte flags;
- uint16 x, y;
- uint16 width, height;
- uint16 textColumn, textRow;
+ int16 x, y;
+ int16 width, height;
+ int16 textColumn, textRow;
+ int16 scrollY;
uint16 textColumnOffset, textLength, textMaxLength;
- uint16 scrollY;
uint8 fill_color, text_color;
IconBlock *iconPtr;
WindowBlock() { memset(this, 0, sizeof(*this)); }
diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp
index 165af6f797..a911bee5a5 100644
--- a/engines/agos/items.cpp
+++ b/engines/agos/items.cpp
@@ -391,10 +391,8 @@ int AGOSEngine::wordMatch(Item *item, int16 a, int16 n) {
}
Item *AGOSEngine::derefItem(uint item) {
- if (item >= _itemArraySize) {
- debug(1, "derefItem: invalid item %d", item);
- return 0;
- }
+ if (item >= _itemArraySize)
+ error("derefItem: invalid item %d", item);
return _itemArrayPtr[item];
}
diff --git a/engines/agos/menus.cpp b/engines/agos/menus.cpp
index 802752fad9..6dd1a356d8 100644
--- a/engines/agos/menus.cpp
+++ b/engines/agos/menus.cpp
@@ -26,6 +26,9 @@
#include "common/stdafx.h"
#include "common/file.h"
+#include "common/system.h"
+
+#include "graphics/surface.h"
#include "agos/agos.h"
#include "agos/intern.h"
@@ -145,7 +148,8 @@ void AGOSEngine::unlightMenuStrip() {
mouseOff();
- src = getFrontBuf() + 2832;
+ Graphics::Surface *screen = _system->lockScreen();
+ src = (byte *)screen->pixels + 2832;
w = 48;
h = 82;
@@ -160,6 +164,8 @@ void AGOSEngine::unlightMenuStrip() {
for (i = 120; i != 130; i++)
disableBox(i);
+ _system->unlockScreen();
+
mouseOn();
}
@@ -170,7 +176,8 @@ void AGOSEngine::lightMenuBox(uint hitarea) {
mouseOff();
- src = getFrontBuf() + ha->y * _dxSurfacePitch + ha->x;
+ Graphics::Surface *screen = _system->lockScreen();
+ src = (byte *)screen->pixels + ha->y * _dxSurfacePitch + ha->x;
w = ha->width;
h = ha->height;
@@ -182,6 +189,8 @@ void AGOSEngine::lightMenuBox(uint hitarea) {
src += _dxSurfacePitch;
} while (--h);
+ _system->unlockScreen();
+
mouseOn();
}
diff --git a/engines/agos/oracle.cpp b/engines/agos/oracle.cpp
index c38ee8fa6d..787596a966 100644
--- a/engines/agos/oracle.cpp
+++ b/engines/agos/oracle.cpp
@@ -26,6 +26,9 @@
#include "common/stdafx.h"
#include "common/savefile.h"
+#include "common/system.h"
+
+#include "graphics/surface.h"
#include "agos/agos.h"
#include "agos/intern.h"
@@ -247,8 +250,8 @@ void AGOSEngine_Feeble::scrollOracleUp() {
byte *src, *dst;
uint16 w, h;
- dst = getFrontBuf() + 103 * _screenWidth + 136;
- src = getFrontBuf() + 106 * _screenWidth + 136;
+ dst = getBackGround() + 103 * _screenWidth + 136;
+ src = getBackGround() + 106 * _screenWidth + 136;
for (h = 0; h < 21; h++) {
for (w = 0; w < 360; w++) {
@@ -276,8 +279,8 @@ void AGOSEngine_Feeble::scrollOracleDown() {
byte *src, *dst;
uint16 w, h;
- src = getFrontBuf() + 203 * _screenWidth + 136;
- dst = getFrontBuf() + 206 * _screenWidth + 136;
+ src = getBackGround() + 203 * _screenWidth + 136;
+ dst = getBackGround() + 206 * _screenWidth + 136;
for (h = 0; h < 77; h++) {
memcpy(dst, src, 360);
@@ -507,7 +510,7 @@ void AGOSEngine_Feeble::windowBackSpace(WindowBlock *window) {
x = window->x + window->textColumn;
y = window->y + window->textRow;
- dst = getFrontBuf() + _dxSurfacePitch * y + x;
+ dst = getBackGround() + _dxSurfacePitch * y + x;
for (h = 0; h < 13; h++) {
for (w = 0; w < 8; w++) {
diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp
index f5936b7d85..394c4956ae 100644
--- a/engines/agos/res.cpp
+++ b/engines/agos/res.cpp
@@ -351,104 +351,130 @@ void AGOSEngine::readItemFromGamePc(Common::SeekableReadStream *in, Item *item)
void AGOSEngine::readItemChildren(Common::SeekableReadStream *in, Item *item, uint type) {
if (type == 1) {
- if (getGameType() == GType_ELVIRA1) {
- SubRoom *subRoom = (SubRoom *)allocateChildBlock(item, 1, sizeof(SubRoom));
- subRoom->roomShort = in->readUint32BE();
- subRoom->roomLong = in->readUint32BE();
- subRoom->flags = in->readUint16BE();
- } else {
- uint fr1 = in->readUint16BE();
- uint fr2 = in->readUint16BE();
- uint i, size;
- uint j, k;
- SubRoom *subRoom;
-
- size = SubRoom_SIZE;
- for (i = 0, j = fr2; i != 6; i++, j >>= 2)
- if (j & 3)
- size += sizeof(subRoom->roomExit[0]);
-
- subRoom = (SubRoom *)allocateChildBlock(item, 1, size);
- subRoom->subroutine_id = fr1;
- subRoom->roomExitStates = fr2;
-
- for (i = k = 0, j = fr2; i != 6; i++, j >>= 2)
- if (j & 3)
- subRoom->roomExit[k++] = (uint16)fileReadItemID(in);
- }
+ SubRoom *subRoom = (SubRoom *)allocateChildBlock(item, 1, sizeof(SubRoom));
+ subRoom->roomShort = in->readUint32BE();
+ subRoom->roomLong = in->readUint32BE();
+ subRoom->flags = in->readUint16BE();
} else if (type == 2) {
- if (getGameType() == GType_ELVIRA1) {
- SubObject *subObject = (SubObject *)allocateChildBlock(item, 2, sizeof(SubObject));
- in->readUint32BE();
- in->readUint32BE();
- in->readUint32BE();
- subObject->objectName = in->readUint32BE();
- subObject->objectSize = in->readUint16BE();
- subObject->objectWeight = in->readUint16BE();
- subObject->objectFlags = in->readUint16BE();
- } else {
- uint32 fr = in->readUint32BE();
- uint i, k, size;
- SubObject *subObject;
+ SubObject *subObject = (SubObject *)allocateChildBlock(item, 2, sizeof(SubObject));
+ in->readUint32BE();
+ in->readUint32BE();
+ in->readUint32BE();
+ subObject->objectName = in->readUint32BE();
+ subObject->objectSize = in->readUint16BE();
+ subObject->objectWeight = in->readUint16BE();
+ subObject->objectFlags = in->readUint16BE();
+ } else if (type == 4) {
+ SubGenExit *genExit = (SubGenExit *)allocateChildBlock(item, 4, sizeof(SubGenExit));
+ genExit->dest[0] = (uint16)fileReadItemID(in);
+ genExit->dest[1] = (uint16)fileReadItemID(in);
+ genExit->dest[2] = (uint16)fileReadItemID(in);
+ genExit->dest[3] = (uint16)fileReadItemID(in);
+ genExit->dest[4] = (uint16)fileReadItemID(in);
+ genExit->dest[5] = (uint16)fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ } else if (type == 7) {
+ SubContainer *container = (SubContainer *)allocateChildBlock(item, 7, sizeof(SubContainer));
+ container->volume = in->readUint16BE();
+ container->flags = in->readUint16BE();
+ } else if (type == 8) {
+ SubChain *chain = (SubChain *)allocateChildBlock(item, 8, sizeof(SubChain));
+ chain->chChained = (uint16)fileReadItemID(in);
+ } else if (type == 9) {
+ setUserFlag(item, 0, in->readUint16BE());
+ setUserFlag(item, 1, in->readUint16BE());
+ setUserFlag(item, 2, in->readUint16BE());
+ setUserFlag(item, 3, in->readUint16BE());
+ setUserFlag(item, 4, in->readUint16BE());
+ setUserFlag(item, 5, in->readUint16BE());
+ setUserFlag(item, 6, in->readUint16BE());
+ setUserFlag(item, 7, in->readUint16BE());
+ SubUserFlag *subUserFlag = (SubUserFlag *) findChildOfType(item, 9);
+ subUserFlag->userItems[0] = (uint16)fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ fileReadItemID(in);
+ } else if (type == 255) {
+ SubInherit *inherit = (SubInherit *)allocateChildBlock(item, 255, sizeof(SubInherit));
+ inherit->inMaster = (uint16)fileReadItemID(in);
+ } else {
+ error("readItemChildren: invalid type %d", type);
+ }
+}
- size = SubObject_SIZE;
- for (i = 0; i != 16; i++)
- if (fr & (1 << i))
- size += sizeof(subObject->objectFlagValue[0]);
+void AGOSEngine_Elvira2::readItemChildren(Common::SeekableReadStream *in, Item *item, uint type) {
+ if (type == 1) {
+ uint fr1 = in->readUint16BE();
+ uint fr2 = in->readUint16BE();
+ uint i, size;
+ uint j, k;
+ SubRoom *subRoom;
+
+ size = SubRoom_SIZE;
+ for (i = 0, j = fr2; i != 6; i++, j >>= 2)
+ if (j & 3)
+ size += sizeof(subRoom->roomExit[0]);
+
+ subRoom = (SubRoom *)allocateChildBlock(item, 1, size);
+ subRoom->subroutine_id = fr1;
+ subRoom->roomExitStates = fr2;
+
+ for (i = k = 0, j = fr2; i != 6; i++, j >>= 2)
+ if (j & 3)
+ subRoom->roomExit[k++] = (uint16)fileReadItemID(in);
+ } else if (type == 2) {
+ uint32 fr = in->readUint32BE();
+ uint i, k, size;
+ SubObject *subObject;
- subObject = (SubObject *)allocateChildBlock(item, 2, size);
- subObject->objectFlags = fr;
+ size = SubObject_SIZE;
+ for (i = 0; i != 16; i++)
+ if (fr & (1 << i))
+ size += sizeof(subObject->objectFlagValue[0]);
- k = 0;
- if (fr & 1) {
- subObject->objectFlagValue[k++] = (uint16)in->readUint32BE();
- }
- for (i = 1; i != 16; i++)
- if (fr & (1 << i))
- subObject->objectFlagValue[k++] = in->readUint16BE();
+ subObject = (SubObject *)allocateChildBlock(item, 2, size);
+ subObject->objectFlags = fr;
- if (getGameType() != GType_ELVIRA2)
- subObject->objectName = (uint16)in->readUint32BE();
+ k = 0;
+ if (fr & 1) {
+ subObject->objectFlagValue[k++] = (uint16)in->readUint32BE();
}
+ for (i = 1; i != 16; i++)
+ if (fr & (1 << i))
+ subObject->objectFlagValue[k++] = in->readUint16BE();
+
+ if (getGameType() != GType_ELVIRA2)
+ subObject->objectName = (uint16)in->readUint32BE();
} else if (type == 4) {
- if (getGameType() == GType_ELVIRA2) {
- uint i, j, k, size;
- uint id, x, y, z;
- SubSuperRoom *subSuperRoom;
-
- id = in->readUint16BE();
- x = in->readUint16BE();
- y = in->readUint16BE();
- z = in->readUint16BE();
-
- j = x * y * z;
- size = SubSuperRoom_SIZE;
- for (i = 0; i != j; i++)
- size += sizeof(subSuperRoom->roomExitStates[0]);
-
- subSuperRoom = (SubSuperRoom *)allocateChildBlock(item, 4, size);
- subSuperRoom->subroutine_id = id;
- subSuperRoom->roomX = x;
- subSuperRoom->roomY = y;
- subSuperRoom->roomZ = z;
-
- for (i = k = 0; i != j; i++)
- subSuperRoom->roomExitStates[k++] = in->readUint16BE();
- } else if (getGameType() == GType_ELVIRA1) {
- SubGenExit *genExit = (SubGenExit *)allocateChildBlock(item, 4, sizeof(SubGenExit));
- genExit->dest[0] = (uint16)fileReadItemID(in);
- genExit->dest[1] = (uint16)fileReadItemID(in);
- genExit->dest[2] = (uint16)fileReadItemID(in);
- genExit->dest[3] = (uint16)fileReadItemID(in);
- genExit->dest[4] = (uint16)fileReadItemID(in);
- genExit->dest[5] = (uint16)fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- }
+ assert(getGameType() == GType_ELVIRA2);
+
+ uint i, j, k, size;
+ uint id, x, y, z;
+ SubSuperRoom *subSuperRoom;
+
+ id = in->readUint16BE();
+ x = in->readUint16BE();
+ y = in->readUint16BE();
+ z = in->readUint16BE();
+
+ j = x * y * z;
+ size = SubSuperRoom_SIZE;
+ for (i = 0; i != j; i++)
+ size += sizeof(subSuperRoom->roomExitStates[0]);
+
+ subSuperRoom = (SubSuperRoom *)allocateChildBlock(item, 4, size);
+ subSuperRoom->subroutine_id = id;
+ subSuperRoom->roomX = x;
+ subSuperRoom->roomY = y;
+ subSuperRoom->roomZ = z;
+
+ for (i = k = 0; i != j; i++)
+ subSuperRoom->roomExitStates[k++] = in->readUint16BE();
} else if (type == 7) {
SubContainer *container = (SubContainer *)allocateChildBlock(item, 7, sizeof(SubContainer));
container->volume = in->readUint16BE();
@@ -461,17 +487,6 @@ void AGOSEngine::readItemChildren(Common::SeekableReadStream *in, Item *item, ui
setUserFlag(item, 1, in->readUint16BE());
setUserFlag(item, 2, in->readUint16BE());
setUserFlag(item, 3, in->readUint16BE());
- if (getGameType() == GType_ELVIRA1) {
- setUserFlag(item, 4, in->readUint16BE());
- setUserFlag(item, 5, in->readUint16BE());
- setUserFlag(item, 6, in->readUint16BE());
- setUserFlag(item, 7, in->readUint16BE());
- SubUserFlag *subUserFlag = (SubUserFlag *) findChildOfType(item, 9);
- subUserFlag->userItems[0] = (uint16)fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- fileReadItemID(in);
- }
} else if (type == 255) {
SubInherit *inherit = (SubInherit *)allocateChildBlock(item, 255, sizeof(SubInherit));
inherit->inMaster = (uint16)fileReadItemID(in);
@@ -629,7 +644,7 @@ bool AGOSEngine::decrunchFile(byte *src, byte *dst, uint32 size) {
#undef SD_TYPE_LITERAL
#undef SD_TYPE_MATCH
-void AGOSEngine::loadVGABeardFile(uint id) {
+void AGOSEngine::loadVGABeardFile(uint16 id) {
uint32 offs, size;
if (getFeatures() & GF_OLD_BUNDLE) {
@@ -673,7 +688,7 @@ void AGOSEngine::loadVGABeardFile(uint id) {
}
}
-void AGOSEngine::loadVGAVideoFile(uint id, uint type) {
+void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type) {
File in;
char filename[15];
byte *dst;
diff --git a/engines/agos/res_snd.cpp b/engines/agos/res_snd.cpp
index cc5ba2a793..779ed67e58 100644
--- a/engines/agos/res_snd.cpp
+++ b/engines/agos/res_snd.cpp
@@ -41,59 +41,59 @@ using Common::File;
namespace AGOS {
-void AGOSEngine::playSpeech(uint speech_id, uint vgaSpriteId) {
- if (getGameType() == GType_SIMON1) {
- if (speech_id == 9999) {
- if (_subtitles)
- return;
- if (!getBitFlag(14) && !getBitFlag(28)) {
- setBitFlag(14, true);
- _variableArray[100] = 15;
- animate(4, 1, 130, 0, 0, 0);
- waitForSync(130);
- }
- _skipVgaWait = true;
- } else {
- if (_subtitles && _scriptVar2) {
- animate(4, 2, 204, 0, 0, 0);
- waitForSync(204);
- stopAnimate(204);
- }
- if (vgaSpriteId < 100)
- stopAnimate(vgaSpriteId + 201);
+void AGOSEngine_Simon1::playSpeech(uint16 speech_id, uint16 vgaSpriteId) {
+ if (speech_id == 9999) {
+ if (_subtitles)
+ return;
+ if (!getBitFlag(14) && !getBitFlag(28)) {
+ setBitFlag(14, true);
+ _variableArray[100] = 15;
+ animate(4, 1, 130, 0, 0, 0);
+ waitForSync(130);
+ }
+ _skipVgaWait = true;
+ } else {
+ if (_subtitles && _scriptVar2) {
+ animate(4, 2, 204, 0, 0, 0);
+ waitForSync(204);
+ stopAnimate(204);
+ }
+ if (vgaSpriteId < 100)
+ stopAnimate(201 + vgaSpriteId);
- loadVoice(speech_id);
+ loadVoice(speech_id);
- if (vgaSpriteId < 100)
- animate(4, 2, vgaSpriteId + 201, 0, 0, 0);
+ if (vgaSpriteId < 100)
+ animate(4, 2, 201 + vgaSpriteId, 0, 0, 0);
+ }
+}
+
+void AGOSEngine_Simon2::playSpeech(uint16 speech_id, uint16 vgaSpriteId) {
+ if (speech_id == 0xFFFF) {
+ if (_subtitles)
+ return;
+ if (!getBitFlag(14) && !getBitFlag(28)) {
+ setBitFlag(14, true);
+ _variableArray[100] = 5;
+ animate(4, 1, 30, 0, 0, 0);
+ waitForSync(130);
}
+ _skipVgaWait = true;
} else {
- if (speech_id == 0xFFFF) {
- if (_subtitles)
- return;
- if (!getBitFlag(14) && !getBitFlag(28)) {
- setBitFlag(14, true);
- _variableArray[100] = 5;
- animate(4, 1, 30, 0, 0, 0);
- waitForSync(130);
- }
- _skipVgaWait = true;
- } else {
- if (getGameType() == GType_SIMON2 && _subtitles && _language != Common::HB_ISR) {
- loadVoice(speech_id);
- return;
- }
-
- if (_subtitles && _scriptVar2) {
- animate(4, 2, 5, 0, 0, 0);
- waitForSync(205);
- stopAnimateSimon2(2,5);
- }
-
- stopAnimateSimon2(2, vgaSpriteId + 2);
+ if (getGameType() == GType_SIMON2 && _subtitles && _language != Common::HB_ISR) {
loadVoice(speech_id);
- animate(4, 2, vgaSpriteId + 2, 0, 0, 0);
+ return;
+ }
+
+ if (_subtitles && _scriptVar2) {
+ animate(4, 2, 5, 0, 0, 0);
+ waitForSync(205);
+ stopAnimateSimon2(2,5);
}
+
+ stopAnimateSimon2(2, vgaSpriteId + 2);
+ loadVoice(speech_id);
+ animate(4, 2, vgaSpriteId + 2, 0, 0, 0);
}
}
@@ -120,9 +120,26 @@ void AGOSEngine::skipSpeech() {
}
}
-void AGOSEngine::loadModule(uint music) {
- _mixer->stopHandle(_modHandle);
+void AGOSEngine::loadMusic(uint16 music) {
+ char buf[4];
+
+ stopMusic();
+
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
+ _gameFile->read(buf, 4);
+ if (!memcmp(buf, "FORM", 4)) {
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
+ _midi.loadXMIDI(_gameFile);
+ } else {
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
+ _midi.loadMultipleSMF(_gameFile);
+ }
+ _lastMusicPlayed = music;
+ _nextMusicToPlay = -1;
+}
+
+void AGOSEngine::playModule(uint16 music) {
char filename[15];
File f;
@@ -135,7 +152,7 @@ void AGOSEngine::loadModule(uint music) {
f.open(filename);
if (f.isOpen() == false) {
- error("loadModule: Can't load module from '%s'", filename);
+ error("playModule: Can't load module from '%s'", filename);
}
Audio::AudioStream *audioStream;
@@ -145,7 +162,7 @@ void AGOSEngine::loadModule(uint music) {
uint srcSize = f.size();
byte *srcBuf = (byte *)malloc(srcSize);
if (f.read(srcBuf, srcSize) != srcSize)
- error("loadModule: Read failed");
+ error("playModule: Read failed");
uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4);
byte *dstBuf = (byte *)malloc(dstSize);
@@ -162,93 +179,93 @@ void AGOSEngine::loadModule(uint music) {
_mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_modHandle, audioStream);
}
-void AGOSEngine::loadMusic(uint music) {
- char buf[4];
+void AGOSEngine_Simon1::playMusic(uint16 music, uint16 track) {
+ stopMusic();
- if (getGameType() == GType_SIMON2) {
- _midi.stop();
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
+ // Support for compressed music from the ScummVM Music Enhancement Project
+ AudioCD.stop();
+ AudioCD.play(music + 1, -1, 0, 0);
+ if (AudioCD.isPlaying())
+ return;
+
+ if (getGameId() == GID_SIMON1ACORN) {
+ // TODO: Add support for Desktop Tracker format
+ } else if (getPlatform() == Common::kPlatformAmiga) {
+ playModule(music);
+ } else if (getFeatures() & GF_TALKIE) {
+ char buf[4];
+
+ // WORKAROUND: For a script bug in the CD versions
+ // We skip this music resource, as it was replaced by
+ // a sound effect, and the script was never updated.
+ if (music == 35)
+ return;
+
+ _midi.setLoop(true); // Must do this BEFORE loading music. (GMF may have its own override.)
+
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
_gameFile->read(buf, 4);
- if (!memcmp(buf, "FORM", 4)) {
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
- _midi.loadXMIDI(_gameFile);
+ if (!memcmp(buf, "GMF\x1", 4)) {
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
+ _midi.loadSMF(_gameFile, music);
} else {
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET);
+ _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
_midi.loadMultipleSMF(_gameFile);
}
- _lastMusicPlayed = music;
- _nextMusicToPlay = -1;
- } else if (getGameType() == GType_SIMON1) {
- _midi.stop();
+ _midi.startTrack(0);
+ _midi.startTrack(track);
+ } else {
+ char filename[15];
+ File f;
+ sprintf(filename, "MOD%d.MUS", music);
+ f.open(filename);
+ if (f.isOpen() == false)
+ error("playMusic: Can't load music from '%s'", filename);
+
_midi.setLoop(true); // Must do this BEFORE loading music. (GMF may have its own override.)
- // Support for compressed music from the ScummVM Music Enhancement Project
- AudioCD.stop();
- AudioCD.play(music + 1, -1, 0, 0);
- if (AudioCD.isPlaying())
- return;
+ if (getFeatures() & GF_DEMO)
+ _midi.loadS1D(&f);
+ else
+ _midi.loadSMF(&f, music);
- if (getGameId() == GID_SIMON1ACORN) {
- // TODO: Add support for Desktop Tracker format
- } else if (getPlatform() == Common::kPlatformAmiga) {
- loadModule(music);
- } else if (getFeatures() & GF_TALKIE) {
- // WORKAROUND: For a script bug in the CD versions
- // We skip this music resource, as it was replaced by
- // a sound effect, and the script was never updated.
- if (music == 35)
- return;
+ _midi.startTrack(0);
+ _midi.startTrack(track);
+ }
+}
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
- _gameFile->read(buf, 4);
- if (!memcmp(buf, "GMF\x1", 4)) {
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
- _midi.loadSMF(_gameFile, music);
- } else {
- _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music], SEEK_SET);
- _midi.loadMultipleSMF(_gameFile);
- }
-
- _midi.startTrack(0);
- } else {
- char filename[15];
- File f;
- sprintf(filename, "MOD%d.MUS", music);
- f.open(filename);
- if (f.isOpen() == false)
- error("loadMusic: Can't load music from '%s'", filename);
-
- if (getFeatures() & GF_DEMO)
- _midi.loadS1D(&f);
- else
- _midi.loadSMF(&f, music);
+void AGOSEngine::playMusic(uint16 music, uint16 track) {
+ stopMusic();
- _midi.startTrack(0);
- }
+ if (getPlatform() == Common::kPlatformAmiga) {
+ playModule(music);
+ } else if (getPlatform() == Common::kPlatformAtariST) {
+ // TODO: Add support for music formats used
} else {
- if (getPlatform() == Common::kPlatformAmiga) {
- loadModule(music);
- } else if (getPlatform() == Common::kPlatformAtariST) {
- // TODO: Add support for music formats used
- } else {
- _midi.stop();
- _midi.setLoop(true); // Must do this BEFORE loading music.
+ _midi.setLoop(true); // Must do this BEFORE loading music.
- char filename[15];
- File f;
- sprintf(filename, "MOD%d.MUS", music);
- f.open(filename);
- if (f.isOpen() == false)
- error("loadMusic: Can't load music from '%s'", filename);
-
- _midi.loadS1D(&f);
- _midi.startTrack(0);
- }
+ char filename[15];
+ File f;
+ sprintf(filename, "MOD%d.MUS", music);
+ f.open(filename);
+ if (f.isOpen() == false)
+ error("playMusic: Can't load music from '%s'", filename);
+
+ _midi.loadS1D(&f);
+ _midi.startTrack(0);
+ _midi.startTrack(track);
}
}
-void AGOSEngine::playSting(uint a) {
+void AGOSEngine::stopMusic() {
+ if (_midiEnabled) {
+ _midi.stop();
+ }
+ _mixer->stopHandle(_modHandle);
+}
+
+void AGOSEngine::playSting(uint16 soundId) {
if (!_midi._enable_sfx)
return;
@@ -262,13 +279,13 @@ void AGOSEngine::playSting(uint a) {
if (!mus_file.isOpen())
error("playSting: Can't load sound effect from '%s'", filename);
- mus_file.seek(a * 2, SEEK_SET);
+ mus_file.seek(soundId * 2, SEEK_SET);
mus_offset = mus_file.readUint16LE();
if (mus_file.ioFailed())
- error("playSting: Can't read sting %d offset", a);
+ error("playSting: Can't read sting %d offset", soundId);
mus_file.seek(mus_offset, SEEK_SET);
- _midi.loadSMF(&mus_file, a, true);
+ _midi.loadSMF(&mus_file, soundId, true);
_midi.startTrack(0);
}
@@ -284,7 +301,7 @@ static const byte elvira1_soundTable[100] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
-bool AGOSEngine::loadVGASoundFile(uint id, uint type) {
+bool AGOSEngine::loadVGASoundFile(uint16 id, uint8 type) {
File in;
char filename[15];
byte *dst;
diff --git a/engines/agos/rooms.cpp b/engines/agos/rooms.cpp
index f7c0254c4f..af1bd0fe93 100644
--- a/engines/agos/rooms.cpp
+++ b/engines/agos/rooms.cpp
@@ -351,7 +351,7 @@ void AGOSEngine_Elvira2::setSRExit(Item *i, int n, int d, uint16 s) {
}
// Waxworks specific
-bool AGOSEngine::loadRoomItems(uint item) {
+bool AGOSEngine::loadRoomItems(uint16 item) {
byte *p;
uint i, min_num, max_num;
char filename[30];
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index 1267e27daa..eb2266550a 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -109,7 +109,7 @@ void AGOSEngine::quickLoadOrSave() {
setBitFlag(7, false);
sub = getSubroutineByID(19);
startSubroutine(sub);
- //oe2_printStats();
+ printStats();
sub = getSubroutineByID(28);
startSubroutine(sub);
setBitFlag(17, false);
@@ -146,7 +146,171 @@ void AGOSEngine::quickLoadOrSave() {
_saveLoadType = 0;
}
-void AGOSEngine::listSaveGames(char *dst) {
+bool AGOSEngine::confirmOverWrite(WindowBlock *window) {
+ if (getGameType() == GType_WW) {
+ Subroutine *sub = getSubroutineByID(80);
+ if (sub != NULL)
+ startSubroutineEx(sub);
+
+ if (_variableArray[253] == 0)
+ return true;
+ } else if (getGameType() == GType_ELVIRA2) {
+ // Original verison never confirmed
+ return true;
+ } else if (getGameType() == GType_ELVIRA1) {
+ const char *message1, *message2, *message3;
+
+ switch (_language) {
+ case Common::FR_FRA:
+ message1 = "\rFichier d/j; existant.\r\r";
+ message2 = " Ecrire pardessus ?\r\r";
+ message3 = " Oui Non";
+ break;
+ case Common::DE_DEU:
+ message1 = "\rDatei existiert bereits.\r\r";
+ message2 = " berschreiben ?\r\r";
+ message3 = " Ja Nein";
+ break;
+ default:
+ message1 = "\r File already exists.\r\r";
+ message2 = " Overwrite it ?\r\r";
+ message3 = " Yes No";
+ break;
+ }
+
+ printScroll();
+ window->textColumn = 0;
+ window->textRow = 0;
+ window->textColumnOffset = 0;
+ window->textLength = 0; // Difference
+
+ for (; *message1; message1++)
+ windowPutChar(window, *message1);
+ for (; *message2; message2++)
+ windowPutChar(window, *message2);
+ for (; *message3; message3++)
+ windowPutChar(window, *message3);
+
+ if (confirmYesOrNo(120, 78) == 0x7FFF)
+ return true;
+ }
+
+ return false;
+}
+
+int16 AGOSEngine::matchSaveGame(const char *name, uint16 max) {
+ Common::InSaveFile *in;
+ char dst[8];
+ uint16 slot;
+
+ for (slot = 0; slot < max; slot++) {
+ if ((in = _saveFileMan->openForLoading(genSaveName(slot)))) {
+ in->read(dst, 8);
+ delete in;
+
+ if (!scumm_stricmp(name, dst)) {
+ return slot;
+ }
+ }
+ }
+
+ return -1;
+}
+
+void AGOSEngine::userGame(bool load) {
+ WindowBlock *window = _windowArray[4];
+ const char *message1;
+ int i, numSaveGames;
+ char *name;
+ char buf[8];
+
+ numSaveGames = countSaveGames();
+
+ time_t saveTime = time(NULL);
+ haltAnimation();
+
+restart:
+ printScroll();
+ window->textColumn = 0;
+ window->textRow = 0;
+ window->textColumnOffset = 0;
+ window->textLength = 0; // Difference
+
+ switch (_language) {
+ case Common::FR_FRA:
+ message1 = "\rIns/rez disquette de\rsauvegarde de jeux &\rentrez nom de fichier:\r\r ";
+ break;
+ case Common::DE_DEU:
+ message1 = "\rLege Spielstandsdiskette ein. Dateinamen eingeben:\r\r ";
+ break;
+ default:
+ message1 = "\r Insert savegame data disk & enter filename:\r\r ";
+ break;
+ }
+
+ for (; *message1; message1++)
+ windowPutChar(window, *message1);
+
+ memset(buf, 0, 8);
+ name = buf;
+ _saveGameNameLen = 0;
+
+ for (;;) {
+ windowPutChar(window, 128);
+ _keyPressed = 0;
+
+ for (;;) {
+ delay(10);
+ if (_keyPressed && _keyPressed < 128) {
+ i = _keyPressed;
+ break;
+ }
+ }
+
+ userGameBackSpace(_windowArray[4], 8);
+ if (i == 10 || i == 13) {
+ break;
+ } else if (i == 8) {
+ // do_backspace
+ if (_saveGameNameLen) {
+ _saveGameNameLen--;
+ name[_saveGameNameLen] = 0;
+ userGameBackSpace(_windowArray[4], 8);
+ }
+ } else if (i >= 32 && _saveGameNameLen != 8) {
+ name[_saveGameNameLen++] = i;
+ windowPutChar(_windowArray[4], i);
+ }
+ }
+
+ if (_saveGameNameLen != 0) {
+ int16 slot = matchSaveGame(name, numSaveGames);
+ if (!load) {
+ if (slot >= 0 && !confirmOverWrite(window))
+ goto restart;
+
+ if (slot < 0)
+ slot = numSaveGames;
+
+ if (!saveGame(slot, name))
+ fileError(_windowArray[4], true);
+ } else {
+ if (slot < 0) {
+ fileError(_windowArray[4], false);
+ } else {
+ if (!loadGame(genSaveName(slot)))
+ fileError(_windowArray[4], false);
+ }
+ }
+
+ printStats();
+ }
+
+ restartAnimation();
+ _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock;
+}
+
+void AGOSEngine_Elvira2::listSaveGames(char *dst) {
Common::InSaveFile *in;
uint y, slot;
@@ -166,7 +330,7 @@ void AGOSEngine::listSaveGames(char *dst) {
slot = _saveLoadRowCurPos;
for (y = 0; y < 8; y++) {
window->textColumn = 0;
- window->textColumnOffset = 4;
+ window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0;
window->textLength = 0;
if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) {
in->read(dst, 8);
@@ -180,8 +344,13 @@ void AGOSEngine::listSaveGames(char *dst) {
}
dst+= 8;
- window->textColumn = 7;
- window->textColumnOffset = 4;
+ if (getGameType() == GType_WW) {
+ window->textColumn = 7;
+ window->textColumnOffset = 4;
+ } else if (getGameType() == GType_ELVIRA2) {
+ window->textColumn = 8;
+ window->textColumnOffset = 0;
+ }
window->textLength = 0;
if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) {
in->read(dst, 8);
@@ -196,7 +365,7 @@ void AGOSEngine::listSaveGames(char *dst) {
dst+= 8;
window->textColumn = 15;
- window->textColumnOffset = 4;
+ window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0;
window->textLength = 0;
if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) {
in->read(dst, 8);
@@ -221,7 +390,7 @@ void AGOSEngine::listSaveGames(char *dst) {
_saveGameNameLen = 0;
}
-void AGOSEngine::userGame(bool load) {
+void AGOSEngine_Elvira2::userGame(bool load) {
time_t saveTime;
int i, numSaveGames;
char *name;
@@ -246,6 +415,8 @@ void AGOSEngine::userGame(bool load) {
if (!load) {
WindowBlock *window = _windowArray[num];
+ int16 slot = -1;
+
name = buf + 192;
for (;;) {
@@ -256,15 +427,9 @@ void AGOSEngine::userGame(bool load) {
i = userGameGetKey(&b, buf, 128);
if (b) {
if (i <= 223) {
- if (getGameType() == GType_WW) {
- Subroutine *sub = getSubroutineByID(80);
- if (sub != NULL)
- startSubroutineEx(sub);
-
- if (_variableArray[253] != 0) {
- listSaveGames(buf);
- continue;
- }
+ if (!confirmOverWrite(window)) {
+ listSaveGames(buf);
+ continue;
}
if (!saveGame(_saveLoadRowCurPos + i, buf + i * 8))
@@ -275,9 +440,16 @@ void AGOSEngine::userGame(bool load) {
}
userGameBackSpace(_windowArray[num], 8);
- if (i == 10 || i == 13)
+ if (i == 10 || i == 13) {
+ slot = matchSaveGame(name, numSaveGames);
+ if (slot >= 0) {
+ if (!confirmOverWrite(window)) {
+ listSaveGames(buf);
+ continue;
+ }
+ }
break;
- if (i == 8) {
+ } else if (i == 8) {
// do_backspace
if (_saveGameNameLen) {
_saveGameNameLen--;
@@ -290,8 +462,13 @@ void AGOSEngine::userGame(bool load) {
}
}
- if (!saveGame(numSaveGames, buf + 192))
- fileError(_windowArray[num], true);
+ if (_saveGameNameLen != 0) {
+ if (slot < 0)
+ slot = numSaveGames;
+
+ if (!saveGame(slot, buf + 192))
+ fileError(_windowArray[num], true);
+ }
} else {
i = userGameGetKey(&b, buf, 128);
if (i != 225) {
@@ -309,7 +486,7 @@ get_out:;
restartAnimation();
}
-int AGOSEngine::userGameGetKey(bool *b, char *buf, uint maxChar) {
+int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) {
HitArea *ha;
*b = true;
@@ -359,26 +536,29 @@ void AGOSEngine_Simon1::listSaveGames(char *dst) {
if (!(in = _saveFileMan->openForLoading(genSaveName(slot))))
break;
- in->read(dst, 8);
+ in->read(dst, 18);
delete in;
lastSlot = slot;
if (slot < 10) {
showMessageFormat(" ");
+ } else if (_language == Common::HB_ISR) {
+ lastSlot = (slot % 10) * 10;
+ lastSlot += slot / 10;
}
+ showMessageFormat("%d", lastSlot);
if (_language == Common::HB_ISR && !(slot % 10))
showMessageFormat("0");
- showMessageFormat("%d", lastSlot);
showMessageFormat(".%s\n", dst);
dst += 18;
slot++;
}
if (!_saveOrLoad) {
- if (_saveLoadRowCurPos + 6 == slot)
+ if (_saveLoadRowCurPos + 6 == slot) {
slot++;
- else {
+ } else {
if (slot < 10)
showMessageFormat(" ");
showMessageFormat("%d.\n", slot);
@@ -532,9 +712,9 @@ restart:;
}
userGameBackSpace(_windowArray[5], 8);
- if (i == 10 || i == 13)
+ if (i == 10 || i == 13) {
break;
- if (i == 8) {
+ } else if (i == 8) {
// do_backspace
if (_saveGameNameLen) {
byte m, x;
@@ -732,7 +912,16 @@ void AGOSEngine::fileError(WindowBlock *window, bool save_error) {
}
}
- windowPutChar(window, 0xC);
+ if (getGameType() == GType_ELVIRA1) {
+ printScroll();
+ window->textColumn = 0;
+ window->textRow = 0;
+ window->textColumnOffset = 0;
+ window->textLength = 0; // Difference
+ } else {
+ windowPutChar(window, 12);
+ }
+
for (; *message1; message1++)
windowPutChar(window, *message1);
for (; *message2; message2++)
@@ -954,7 +1143,9 @@ bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) {
return false;
}
- if (getGameType() == GType_FF) {
+ if (getGameType() == GType_PP) {
+ // No caption
+ } else if (getGameType() == GType_FF) {
f->read(ident, 100);
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
f->read(ident, 18);
@@ -1104,7 +1295,9 @@ bool AGOSEngine_Elvira2::saveGame(uint slot, const char *caption) {
return false;
}
- if (getGameType() == GType_FF) {
+ if (getGameType() == GType_PP) {
+ // No caption
+ } else if (getGameType() == GType_FF) {
f->write(caption, 100);
curTime = time(NULL);
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp
index 8a4457faf2..c5cf6c5872 100644
--- a/engines/agos/script.cpp
+++ b/engines/agos/script.cpp
@@ -156,7 +156,7 @@ void AGOSEngine::o_gtf() {
void AGOSEngine::o_chance() {
// 23: chance
- uint a = getVarOrWord();
+ int16 a = getVarOrWord();
if (a == 0) {
setScriptCondition(false);
@@ -173,7 +173,7 @@ void AGOSEngine::o_chance() {
if (a <= 0) {
_chanceModifier = 0;
setScriptCondition(false);
- } else if ((uint)_rnd.getRandomNumber(99) < a) {
+ } else if ((int16)_rnd.getRandomNumber(99) < a) {
if (_chanceModifier <= 0)
_chanceModifier -= 5;
else
@@ -410,7 +410,7 @@ void AGOSEngine::o_process() {
void AGOSEngine::o_when() {
// 76: add timeout
- uint timeout = getVarOrWord();
+ uint16 timeout = getVarOrWord();
addTimeEvent(timeout, getVarOrWord());
}
@@ -453,7 +453,7 @@ void AGOSEngine::o_haltAnimation() {
if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
VgaTimerEntry *vte = _vgaTimerList;
while (vte->delay) {
- if (vte->type == 0)
+ if (vte->type == ANIMATE_EVENT)
vte->delay += 10;
vte++;
}
@@ -508,7 +508,14 @@ void AGOSEngine::o_picture() {
return;
}
- _picture8600 = (vga_res == 8600);
+ if (getGameType() == GType_PP && getGameId() != GID_DIMP) {
+ if (vga_res == 8700 && getBitFlag(107)) {
+ _vgaPeriod = 30;
+ }
+
+ _picture8600 = (vga_res == 8600);
+ }
+
setWindowImageEx(mode, vga_res);
}
@@ -722,13 +729,12 @@ void AGOSEngine::o_doClassIcons() {
void AGOSEngine::o_playTune() {
// 127: play tune
- int music = getVarOrWord();
- int track = getVarOrWord();
+ uint16 music = getVarOrWord();
+ uint16 track = getVarOrWord();
if (music != _lastMusicPlayed) {
_lastMusicPlayed = music;
- loadMusic(music);
- _midi.startTrack(track);
+ playMusic(music, track);
}
}
@@ -746,16 +752,32 @@ void AGOSEngine::o_setAdjNoun() {
void AGOSEngine::o_saveUserGame() {
// 132: save user game
- _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
- userGame(false);
- _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ if (getGameId() == GID_SIMON1CD32) {
+ // The Amiga CD32 version of Simon the Sorcerer 1uses a single slot
+ if (!saveGame(0, "Default Saved Game")) {
+ vc33_setMouseOn();
+ fileError(_windowArray[5], true);
+ }
+ } else {
+ _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+ userGame(false);
+ _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ }
}
void AGOSEngine::o_loadUserGame() {
// 133: load user game
- _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
- userGame(true);
- _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ if (getGameId() == GID_SIMON1CD32) {
+ // The Amiga CD32 version of Simon the Sorcerer 1 uses a single slot
+ if (!loadGame(genSaveName(0))) {
+ vc33_setMouseOn();
+ fileError(_windowArray[5], false);
+ }
+ } else {
+ _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+ userGame(true);
+ _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ }
}
void AGOSEngine::o_copysf() {
@@ -872,7 +894,7 @@ uint AGOSEngine::getNextVarContents() {
return (uint16)readVariable(getVarWrapper());
}
-uint AGOSEngine::readVariable(uint variable) {
+uint AGOSEngine::readVariable(uint16 variable) {
if (variable >= _numVars)
error("readVariable: Variable %d out of range", variable);
@@ -892,7 +914,7 @@ void AGOSEngine::writeNextVarContents(uint16 contents) {
writeVariable(getVarWrapper(), contents);
}
-void AGOSEngine::writeVariable(uint variable, uint16 contents) {
+void AGOSEngine::writeVariable(uint16 variable, uint16 contents) {
if (variable >= _numVars)
error("writeVariable: Variable %d out of range", variable);
@@ -978,7 +1000,7 @@ void AGOSEngine::sendSync(uint a) {
_lockWord &= ~0x8000;
}
-void AGOSEngine::stopAnimate(uint a) {
+void AGOSEngine::stopAnimate(uint16 a) {
uint16 b = to16Wrapper(a);
_lockWord |= 0x8000;
_vcPtr = (byte *)&b;
@@ -987,7 +1009,7 @@ void AGOSEngine::stopAnimate(uint a) {
}
void AGOSEngine::waitForSync(uint a) {
- const uint maxCount = (getGameType() == GType_SIMON1) ? 500 : 1000;
+ const uint maxCount = (getGameType() == GType_SIMON1) ? 1000 : 2500;
if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE)) {
if (a != 200) {
diff --git a/engines/agos/script_e1.cpp b/engines/agos/script_e1.cpp
index 06c347f391..b003a7262f 100644
--- a/engines/agos/script_e1.cpp
+++ b/engines/agos/script_e1.cpp
@@ -370,8 +370,8 @@ void AGOSEngine_Elvira1::setupOpcodes() {
OPCODE(o_setAdjNoun),
OPCODE(oe1_zoneDisk),
/* 268 */
- OPCODE(oe1_saveUserGame),
- OPCODE(oe1_loadUserGame),
+ OPCODE(o_saveUserGame),
+ OPCODE(o_loadUserGame),
OPCODE(oe1_printStats),
OPCODE(oe1_stopTune),
/* 272 */
@@ -707,8 +707,8 @@ void AGOSEngine_Elvira1::oe1_loadGame() {
uint16 stringId = getNextStringID();
debug(0, "oe1_loadGame: stub (%s)", (const char *)getStringPtrByID(stringId));
- if (!scumm_stricmp(getFileName(GAME_RESTFILE), (const char *)getStringPtrByID(stringId))) {
- loadGame(getFileName(GAME_RESTFILE), true);
+ if (!scumm_stricmp("START", (const char *)getStringPtrByID(stringId))) {
+ loadGame("START", true);
} else {
loadGame((const char *)getStringPtrByID(stringId));
}
@@ -843,20 +843,16 @@ void AGOSEngine_Elvira1::oe1_ifTime() {
void AGOSEngine_Elvira1::oe1_playTune() {
// 264: play tune
- int music = getVarOrWord();
- int track = getVarOrWord();
+ uint16 music = getVarOrWord();
+ uint16 track = getVarOrWord();
if (music != _lastMusicPlayed) {
_lastMusicPlayed = music;
// No tune under water
if (music == 4) {
- if (getPlatform() == Common::kPlatformAmiga)
- _mixer->stopHandle(_modHandle);
- else
- _midi.stop();
+ stopMusic();
} else {
- loadMusic(music);
- _midi.startTrack(track);
+ playMusic(music, track);
}
}
}
@@ -867,72 +863,9 @@ void AGOSEngine_Elvira1::oe1_zoneDisk() {
getVarOrWord();
}
-void AGOSEngine_Elvira1::oe1_saveUserGame() {
- // TODO
-}
-
-void AGOSEngine_Elvira1::oe1_loadUserGame() {
- // TODO
-}
-
void AGOSEngine_Elvira1::oe1_printStats() {
// 270: print stats
- WindowBlock *window = _dummyWindow;
- int val;
-
- window->flags = 1;
-
- mouseOff();
-
- // Strength
- val = _variableArray[0];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 5, 133, 6, val);
-
- // Resolution
- val = _variableArray[1];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 11, 133, 6, val);
-
- // Dexterity
- val = _variableArray[2];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 18, 133, 0, val);
-
- // Skill
- val = _variableArray[3];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 24, 133, 0, val);
-
- // Life
- val = _variableArray[5];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 30, 133, 2, val);
-
- // Experience
- val = _variableArray[6];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 36, 133, 4, val);
-
- mouseOn();
+ printStats();
}
void AGOSEngine_Elvira1::oe1_stopTune() {
@@ -1021,7 +954,7 @@ restart:
for (; *message2; message2++)
windowPutChar(window, *message2);
- if (confirmQuit() == 0x7FFF) {
+ if (confirmYesOrNo(120, 62) == 0x7FFF) {
shutdown();
} else {
goto restart;
@@ -1108,12 +1041,12 @@ l1: i = derefItem(i->next);
}
}
-uint AGOSEngine::confirmQuit() {
+uint AGOSEngine::confirmYesOrNo(uint16 x, uint16 y) {
HitArea *ha;
ha = findEmptyHitArea();
- ha->x = 120;
- ha->y = 62;
+ ha->x = x;
+ ha->y = y;
ha->width = 30;
ha->height = 12;
ha->flags = kBFBoxInUse;
@@ -1122,8 +1055,8 @@ uint AGOSEngine::confirmQuit() {
ha->window = 0;
ha = findEmptyHitArea();
- ha->x = 180;
- ha->y = 62;
+ ha->x = x + 60;
+ ha->y = y;
ha->width = 24;
ha->height = 12;
ha->flags = kBFBoxInUse;
@@ -1207,25 +1140,73 @@ uint AGOSEngine::continueOrQuit() {
}
void AGOSEngine::printScroll() {
- VC10_state state;
VgaPointersEntry *vpe = &_vgaBufferPointers[1];
+ byte *curVgaFile2Orig = _curVgaFile2;
+
+ _windowNum = 3;
+ _curVgaFile2 = vpe->vgaFile2;
+ drawImage_init(9, 0, 10, 32, 0);
+
+ _curVgaFile2 = curVgaFile2Orig;
+}
+
+void AGOSEngine::printStats() {
+ WindowBlock *window = _dummyWindow;
+ int val;
+
+ window->flags = 1;
+
+ mouseOff();
+
+ // Strength
+ val = _variableArray[0];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 5, 133, 6, val);
+
+ // Resolution
+ val = _variableArray[1];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 11, 133, 6, val);
- state.srcPtr = vpe->vgaFile2 + READ_BE_UINT32(vpe->vgaFile2 + 9 * 8);
+ // Dexterity
+ val = _variableArray[2];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 18, 133, 0, val);
+
+ // Skill
+ val = _variableArray[3];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 24, 133, 0, val);
- state.palette = 0;
- state.paletteMod = 0;
- state.x = 10;
- state.y = 32;
- state.width = state.draw_width = 10;
- state.height = state.draw_height = 72;
- state.flags = kDFCompressed;
- _windowNum = 3;
+ // Life
+ val = _variableArray[5];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 30, 133, 2, val);
- state.depack_cont = -0x80;
- state.x_skip = 0;
- state.y_skip = 0;
+ // Experience
+ val = _variableArray[6];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 36, 133, 4, val);
- drawImage(&state);
+ mouseOn();
}
} // End of namespace AGOS
diff --git a/engines/agos/script_e2.cpp b/engines/agos/script_e2.cpp
index 13cb15a8b9..00f0848ed9 100644
--- a/engines/agos/script_e2.cpp
+++ b/engines/agos/script_e2.cpp
@@ -145,7 +145,7 @@ void AGOSEngine_Elvira2::setupOpcodes() {
OPCODE(o_comment),
/* 88 */
OPCODE(o_invalid),
- OPCODE(oe1_loadGame),
+ OPCODE(oe2_loadGame),
OPCODE(o_getParent),
OPCODE(o_getNext),
/* 92 */
@@ -315,6 +315,17 @@ void AGOSEngine_Elvira2::oe2_pObj() {
showMessageFormat("%s\n", (const char *)getStringPtrByID(subObject->objectFlagValue[0])); // Difference
}
+void AGOSEngine_Elvira2::oe2_loadGame() {
+ // 89: load game
+ uint16 stringId = getNextStringID();
+
+ if (!scumm_stricmp(getFileName(GAME_RESTFILE), (const char *)getStringPtrByID(stringId))) {
+ loadGame(getFileName(GAME_RESTFILE), true);
+ } else {
+ loadGame((const char *)getStringPtrByID(stringId));
+ }
+}
+
void AGOSEngine_Elvira2::oe2_drawItem() {
// 113: draw item
Item *i = getNextItemPtr();
@@ -498,48 +509,7 @@ void AGOSEngine_Elvira2::oe2_ink() {
void AGOSEngine_Elvira2::oe2_printStats() {
// 161: print stats
- WindowBlock *window = _dummyWindow;
- int val;
- const uint8 y = (getPlatform() == Common::kPlatformAtariST) ? 131 : 134;
-
- window->flags = 1;
-
- mouseOff();
-
- // Level
- val = _variableArray[20];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 10, y, 0, val);
-
- // PP
- val = _variableArray[22];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 16, y, 6, val);
-
- // HP
- val = _variableArray[23];
- if (val < -99)
- val = -99;
- if (val > 99)
- val = 99;
- writeChar(window, 23, y, 4, val);
-
- // Experience
- val = _variableArray[21];
- if (val < -99)
- val = -99;
- if (val > 9999)
- val = 9999;
- writeChar(window, 30, y, 6, val / 100);
- writeChar(window, 32, y, 2, val / 10);
-
- mouseOn();
+ printStats();
}
void AGOSEngine_Elvira2::oe2_setSuperRoom() {
@@ -697,4 +667,49 @@ void AGOSEngine_Elvira2::oe2_b2NotZero() {
setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0);
}
+void AGOSEngine_Elvira2::printStats() {
+ WindowBlock *window = _dummyWindow;
+ int val;
+ const uint8 y = (getPlatform() == Common::kPlatformAtariST) ? 131 : 134;
+
+ window->flags = 1;
+
+ mouseOff();
+
+ // Level
+ val = _variableArray[20];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 10, y, 0, val);
+
+ // PP
+ val = _variableArray[22];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 16, y, 6, val);
+
+ // HP
+ val = _variableArray[23];
+ if (val < -99)
+ val = -99;
+ if (val > 99)
+ val = 99;
+ writeChar(window, 23, y, 4, val);
+
+ // Experience
+ val = _variableArray[21];
+ if (val < -99)
+ val = -99;
+ if (val > 9999)
+ val = 9999;
+ writeChar(window, 30, y, 6, val / 100);
+ writeChar(window, 32, y, 2, val / 10);
+
+ mouseOn();
+}
+
} // End of namespace AGOS
diff --git a/engines/agos/script_ff.cpp b/engines/agos/script_ff.cpp
index db36d6f736..c3e6dc5192 100644
--- a/engines/agos/script_ff.cpp
+++ b/engines/agos/script_ff.cpp
@@ -303,7 +303,7 @@ void AGOSEngine_Feeble::executeOpcode(int opcode) {
void AGOSEngine_Feeble::off_chance() {
// 23
- uint a = getVarOrWord();
+ uint16 a = getVarOrWord();
if (a == 0) {
setScriptCondition(false);
@@ -315,7 +315,7 @@ void AGOSEngine_Feeble::off_chance() {
return;
}
- if ((uint)_rnd.getRandomNumber(99) < a)
+ if (_rnd.getRandomNumber(99) < a)
setScriptCondition(true);
else
setScriptCondition(false);
@@ -439,7 +439,7 @@ void AGOSEngine_Feeble::off_listSaveGames() {
void AGOSEngine_Feeble::off_checkCD() {
// 135: switch CD
- uint disc = readVariable(97);
+ uint16 disc = readVariable(97);
if (!strcmp(getExtra(), "4CD")) {
_sound->switchVoiceFile(gss, disc);
@@ -624,10 +624,10 @@ void AGOSEngine_Feeble::off_restartClock() {
void AGOSEngine_Feeble::off_setColour() {
// 195: set palette colour
- uint c = getVarOrByte() * 4;
- uint r = getVarOrByte();
- uint g = getVarOrByte();
- uint b = getVarOrByte();
+ uint16 c = getVarOrByte() * 4;
+ uint8 r = getVarOrByte();
+ uint8 g = getVarOrByte();
+ uint8 b = getVarOrByte();
_displayPalette[c + 0] = r;
_displayPalette[c + 1] = g;
@@ -638,25 +638,25 @@ void AGOSEngine_Feeble::off_setColour() {
void AGOSEngine_Feeble::off_b3Set() {
// 196: set bit3
- uint bit = getVarOrByte();
+ uint8 bit = getVarOrByte();
_bitArrayThree[bit / 16] |= (1 << (bit & 15));
}
void AGOSEngine_Feeble::off_b3Clear() {
// 197: clear bit3
- uint bit = getVarOrByte();
+ uint8 bit = getVarOrByte();
_bitArrayThree[bit / 16] &= ~(1 << (bit & 15));
}
void AGOSEngine_Feeble::off_b3Zero() {
// 198: is bit3 clear
- uint bit = getVarOrByte();
+ uint8 bit = getVarOrByte();
setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) == 0);
}
void AGOSEngine_Feeble::off_b3NotZero() {
// 199: is bit3 set
- uint bit = getVarOrByte();
+ uint8 bit = getVarOrByte();
setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) != 0);
}
diff --git a/engines/agos/script_pp.cpp b/engines/agos/script_pp.cpp
index fd8ef9b859..a7bda53e48 100644
--- a/engines/agos/script_pp.cpp
+++ b/engines/agos/script_pp.cpp
@@ -72,8 +72,8 @@ void AGOSEngine_PuzzlePack::setupOpcodes() {
OPCODE(o_state),
/* 28 */
OPCODE(o_oflag),
- OPCODE(opp_iconifyWindow),
OPCODE(o_invalid),
+ OPCODE(opp_iconifyWindow),
OPCODE(o_destroy),
/* 32 */
OPCODE(opp_restoreOopsPosition),
@@ -238,7 +238,7 @@ void AGOSEngine_PuzzlePack::setupOpcodes() {
/* 160 */
OPCODE(oe2_ink),
OPCODE(off_screenTextBox),
- OPCODE(os1_screenTextMsg),
+ OPCODE(opp_playTune),
OPCODE(o_invalid),
/* 164 */
OPCODE(oe2_getDollar2),
@@ -297,7 +297,7 @@ void AGOSEngine_PuzzlePack::executeOpcode(int opcode) {
void AGOSEngine_PuzzlePack::opp_iconifyWindow() {
// 30
- getNextItemPtr();
+ getNextWord();
if (_clockStopped != 0)
_gameTime += time(NULL) - _clockStopped;
_clockStopped = 0;
@@ -308,7 +308,7 @@ void AGOSEngine_PuzzlePack::opp_restoreOopsPosition() {
// 32: restore oops position
uint i;
- getNextItemPtr();
+ getNextWord();
if (_oopsValid) {
for (i = 0; i < _numVars; i++) {
@@ -328,7 +328,7 @@ void AGOSEngine_PuzzlePack::opp_restoreOopsPosition() {
void AGOSEngine_PuzzlePack::opp_loadMouseImage() {
// 38: load mouse image
- getNextItemPtr();
+ getNextWord();
getVarOrByte();
loadMouseImage();
}
@@ -405,6 +405,19 @@ void AGOSEngine_PuzzlePack::opp_loadUserGame() {
loadGame(genSaveName(1));
}
+void AGOSEngine_PuzzlePack::opp_playTune() {
+ // 162: play tune
+ getVarOrByte();
+ getVarOrByte();
+ getNextWord();
+
+ uint16 music = (uint16)getVarOrWord();
+ if (music != _lastMusicPlayed) {
+ _lastMusicPlayed = music;
+ playSpeech(music, 1);
+ }
+}
+
void AGOSEngine_PuzzlePack::opp_saveOopsPosition() {
// 173: save oops position
if (!isVgaQueueEmpty()) {
diff --git a/engines/agos/script_s1.cpp b/engines/agos/script_s1.cpp
index e104013cae..93b907e688 100644
--- a/engines/agos/script_s1.cpp
+++ b/engines/agos/script_s1.cpp
@@ -374,12 +374,12 @@ void AGOSEngine_Simon1::os1_screenTextMsg() {
uint vgaSpriteId = getVarOrByte();
uint color = getVarOrByte();
uint stringId = getNextStringID();
- const byte *string_ptr = NULL;
+ const byte *stringPtr = NULL;
uint speechId = 0;
TextLocation *tl;
if (stringId != 0xFFFF)
- string_ptr = getStringPtrByID(stringId);
+ stringPtr = getStringPtrByID(stringId);
if (getFeatures() & GF_TALKIE) {
if (getGameType() == GType_FF || getGameType() == GType_PP)
@@ -399,14 +399,14 @@ void AGOSEngine_Simon1::os1_screenTextMsg() {
stopAnimateSimon2(2, vgaSpriteId + 2);
}
- if (string_ptr != NULL && (speechId == 0 || _subtitles))
- printScreenText(vgaSpriteId, color, (const char *)string_ptr, tl->x, tl->y, tl->width);
+ if (stringPtr != NULL && stringPtr[0] != 0 && (speechId == 0 || _subtitles))
+ printScreenText(vgaSpriteId, color, (const char *)stringPtr, tl->x, tl->y, tl->width);
}
void AGOSEngine_Simon1::os1_playEffect() {
// 163: play sound
- uint soundId = getVarOrWord();
+ uint16 soundId = getVarOrWord();
if (getGameId() == GID_SIMON1DOS)
playSting(soundId);
@@ -450,7 +450,7 @@ void AGOSEngine_Simon1::os1_screenTextPObj() {
}
stringPtr = buf;
}
- if (stringPtr != NULL)
+ if (stringPtr != NULL && stringPtr[0] != 0)
printScreenText(vgaSpriteId, color, stringPtr, tl->x, tl->y, tl->width);
}
}
@@ -512,7 +512,7 @@ void AGOSEngine_Simon1::os1_scnTxtLongText() {
uint speechId = 0;
TextLocation *tl;
- const char *string_ptr = (const char *)getStringPtrByID(_longText[stringId]);
+ const char *stringPtr = (const char *)getStringPtrByID(_longText[stringId]);
if (getFeatures() & GF_TALKIE)
speechId = _longSound[stringId];
@@ -522,8 +522,8 @@ void AGOSEngine_Simon1::os1_scnTxtLongText() {
if (_speech && speechId != 0)
playSpeech(speechId, vgaSpriteId);
- if (string_ptr != NULL && _subtitles)
- printScreenText(vgaSpriteId, color, string_ptr, tl->x, tl->y, tl->width);
+ if (stringPtr != NULL && stringPtr[0] != 0 && _subtitles)
+ printScreenText(vgaSpriteId, color, stringPtr, tl->x, tl->y, tl->width);
}
void AGOSEngine_Simon1::os1_mouseOn() {
diff --git a/engines/agos/script_s2.cpp b/engines/agos/script_s2.cpp
index 9041a99662..dfc1200d7c 100644
--- a/engines/agos/script_s2.cpp
+++ b/engines/agos/script_s2.cpp
@@ -323,8 +323,8 @@ void AGOSEngine_Simon2::os2_animate() {
void AGOSEngine_Simon2::os2_stopAnimate() {
// 99: kill sprite
- uint a = getVarOrWord();
- uint b = getVarOrWord();
+ uint16 a = getVarOrWord();
+ uint16 b = getVarOrWord();
stopAnimateSimon2(a, b);
}
@@ -469,7 +469,7 @@ void AGOSEngine_Simon2::os2_waitMark() {
waitForMark(i);
}
-void AGOSEngine::stopAnimateSimon2(uint a, uint b) {
+void AGOSEngine::stopAnimateSimon2(uint16 a, uint16 b) {
uint16 items[2];
items[0] = to16Wrapper(a);
diff --git a/engines/agos/script_ww.cpp b/engines/agos/script_ww.cpp
index 690a717acf..377b49ae3f 100644
--- a/engines/agos/script_ww.cpp
+++ b/engines/agos/script_ww.cpp
@@ -147,7 +147,7 @@ void AGOSEngine_Waxworks::setupOpcodes() {
OPCODE(o_comment),
/* 88 */
OPCODE(o_invalid),
- OPCODE(oe1_loadGame),
+ OPCODE(oe2_loadGame),
OPCODE(o_getParent),
OPCODE(o_getNext),
/* 92 */
diff --git a/engines/agos/sound.cpp b/engines/agos/sound.cpp
index a4de624ec0..7165e3cbff 100644
--- a/engines/agos/sound.cpp
+++ b/engines/agos/sound.cpp
@@ -34,6 +34,7 @@
#include "sound/adpcm.h"
#include "sound/audiostream.h"
#include "sound/flac.h"
+#include "sound/mixer.h"
#include "sound/mp3.h"
#include "sound/voc.h"
#include "sound/vorbis.h"
@@ -55,11 +56,11 @@ protected:
public:
BaseSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false);
BaseSound(Audio::Mixer *mixer, File *file, uint32 *offsets, bool bigEndian = false);
- void playSound(uint sound, Audio::SoundHandle *handle, byte flags, int vol = 0) {
- playSound(sound, sound, handle, flags, vol);
+ void playSound(uint sound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0) {
+ playSound(sound, sound, type, handle, flags, vol);
}
virtual ~BaseSound();
- virtual void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0) = 0;
+ virtual void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0) = 0;
virtual Audio::AudioStream *makeAudioStream(uint sound) { return NULL; }
};
@@ -72,6 +73,7 @@ private:
uint _loopSound;
public:
LoopingAudioStream(BaseSound *parent, uint sound, uint loopSound, bool loop);
+ ~LoopingAudioStream();
int readBuffer(int16 *buffer, const int numSamples);
bool isStereo() const { return _stream ? _stream->isStereo() : 0; }
bool endOfData() const;
@@ -87,6 +89,10 @@ LoopingAudioStream::LoopingAudioStream(BaseSound *parent, uint sound, uint loopS
_stream = _parent->makeAudioStream(sound);
}
+LoopingAudioStream::~LoopingAudioStream() {
+ delete _stream;
+}
+
int LoopingAudioStream::readBuffer(int16 *buffer, const int numSamples) {
if (!_loop) {
return _stream->readBuffer(buffer, numSamples);
@@ -121,19 +127,19 @@ public:
WavSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false) : BaseSound(mixer, file, base, bigEndian) {}
WavSound(Audio::Mixer *mixer, File *file, uint32 *offsets) : BaseSound(mixer, file, offsets) {}
Audio::AudioStream *makeAudioStream(uint sound);
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
class VocSound : public BaseSound {
public:
VocSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false) : BaseSound(mixer, file, base, bigEndian) {}
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
class RawSound : public BaseSound {
public:
RawSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false) : BaseSound(mixer, file, base, bigEndian) {}
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
BaseSound::BaseSound(Audio::Mixer *mixer, File *file, uint32 base, bool bigEndian) {
@@ -236,12 +242,12 @@ Audio::AudioStream *WavSound::makeAudioStream(uint sound) {
return Audio::makeWAVStream(*_file);
}
-void WavSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void WavSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
convertVolume(vol);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), sound, vol);
+ _mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);
}
-void VocSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void VocSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
if (_offsets == NULL)
return;
@@ -250,10 +256,10 @@ void VocSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle,
int size, rate;
byte *buffer = Audio::loadVOCFromStream(*_file, size, rate);
assert(buffer);
- _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer, size, rate, flags | Audio::Mixer::FLAG_AUTOFREE, sound);
+ _mixer->playRaw(type, handle, buffer, size, rate, flags | Audio::Mixer::FLAG_AUTOFREE);
}
-void RawSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void RawSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
if (_offsets == NULL)
return;
@@ -263,7 +269,7 @@ void RawSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle,
byte *buffer = (byte *)malloc(size);
assert(buffer);
_file->read(buffer, size);
- _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer, size, 22050, flags | Audio::Mixer::FLAG_AUTOFREE, sound);
+ _mixer->playRaw(type, handle, buffer, size, 22050, flags | Audio::Mixer::FLAG_AUTOFREE);
}
#ifdef USE_MAD
@@ -271,7 +277,7 @@ class MP3Sound : public BaseSound {
public:
MP3Sound(Audio::Mixer *mixer, File *file, uint32 base = 0) : BaseSound(mixer, file, base) {}
Audio::AudioStream *makeAudioStream(uint sound);
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
Audio::AudioStream *MP3Sound::makeAudioStream(uint sound) {
@@ -289,9 +295,9 @@ Audio::AudioStream *MP3Sound::makeAudioStream(uint sound) {
return Audio::makeMP3Stream(_file, size);
}
-void MP3Sound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void MP3Sound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
convertVolume(vol);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), sound, vol);
+ _mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);
}
#endif
@@ -300,7 +306,7 @@ class VorbisSound : public BaseSound {
public:
VorbisSound(Audio::Mixer *mixer, File *file, uint32 base = 0) : BaseSound(mixer, file, base) {}
Audio::AudioStream *makeAudioStream(uint sound);
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
Audio::AudioStream *VorbisSound::makeAudioStream(uint sound) {
@@ -318,9 +324,9 @@ Audio::AudioStream *VorbisSound::makeAudioStream(uint sound) {
return Audio::makeVorbisStream(_file, size);
}
-void VorbisSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void VorbisSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
convertVolume(vol);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), sound, vol);
+ _mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);
}
#endif
@@ -329,7 +335,7 @@ class FlacSound : public BaseSound {
public:
FlacSound(Audio::Mixer *mixer, File *file, uint32 base = 0) : BaseSound(mixer, file, base) {}
Audio::AudioStream *makeAudioStream(uint sound);
- void playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol = 0);
+ void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);
};
Audio::AudioStream *FlacSound::makeAudioStream(uint sound) {
@@ -347,9 +353,9 @@ Audio::AudioStream *FlacSound::makeAudioStream(uint sound) {
return Audio::makeFlacStream(_file, size);
}
-void FlacSound::playSound(uint sound, uint loopSound, Audio::SoundHandle *handle, byte flags, int vol) {
+void FlacSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) {
convertVolume(vol);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), sound, vol);
+ _mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);
}
#endif
@@ -584,19 +590,16 @@ void Sound::playVoice(uint sound) {
if (!_voice)
return;
- if (_mixer->getSoundID(_voiceHandle) == (int)sound)
- return;
-
_mixer->stopHandle(_voiceHandle);
if (_vm->getGameType() == GType_PP) {
if (sound < 11)
- _voice->playSound(sound, sound + 1, &_voiceHandle, Audio::Mixer::FLAG_LOOP, -1500);
+ _voice->playSound(sound, sound + 1, Audio::Mixer::kMusicSoundType, &_voiceHandle, Audio::Mixer::FLAG_LOOP, -1500);
else
- _voice->playSound(sound, sound, &_voiceHandle, Audio::Mixer::FLAG_LOOP);
+ _voice->playSound(sound, sound, Audio::Mixer::kMusicSoundType, &_voiceHandle, Audio::Mixer::FLAG_LOOP);
} else if (_vm->getGameType() == GType_FF || _vm->getGameId() == GID_SIMON1CD32) {
- _voice->playSound(sound, &_voiceHandle, 0);
+ _voice->playSound(sound, Audio::Mixer::kSpeechSoundType, &_voiceHandle, 0);
} else {
- _voice->playSound(sound, &_voiceHandle, Audio::Mixer::FLAG_UNSIGNED);
+ _voice->playSound(sound, Audio::Mixer::kSpeechSoundType, &_voiceHandle, Audio::Mixer::FLAG_UNSIGNED);
}
}
@@ -607,7 +610,7 @@ void Sound::playEffects(uint sound) {
if (_effectsPaused)
return;
- _effects->playSound(sound, &_effectsHandle, (_vm->getGameId() == GID_SIMON1CD32) ? 0 : Audio::Mixer::FLAG_UNSIGNED);
+ _effects->playSound(sound, Audio::Mixer::kSFXSoundType, &_effectsHandle, (_vm->getGameId() == GID_SIMON1CD32) ? 0 : Audio::Mixer::FLAG_UNSIGNED);
}
void Sound::playAmbient(uint sound) {
@@ -623,7 +626,7 @@ void Sound::playAmbient(uint sound) {
return;
_mixer->stopHandle(_ambientHandle);
- _effects->playSound(sound, &_ambientHandle, Audio::Mixer::FLAG_LOOP | Audio::Mixer::FLAG_UNSIGNED);
+ _effects->playSound(sound, Audio::Mixer::kSFXSoundType, &_ambientHandle, Audio::Mixer::FLAG_LOOP | Audio::Mixer::FLAG_UNSIGNED);
}
bool Sound::hasVoice() const {
@@ -669,13 +672,16 @@ void Sound::ambientPause(bool b) {
// Elvira 1/2 and Waxworks specific
void Sound::playRawData(byte *soundData, uint sound, uint size) {
+ if (_effectsPaused)
+ return;
+
byte *buffer = (byte *)malloc(size);
memcpy(buffer, soundData, size);
if (_vm->getPlatform() == Common::kPlatformPC)
- _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_effectsHandle, buffer, size, 8000, Audio::Mixer::FLAG_UNSIGNED | Audio::Mixer::FLAG_AUTOFREE, sound);
+ _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_effectsHandle, buffer, size, 8000, Audio::Mixer::FLAG_UNSIGNED | Audio::Mixer::FLAG_AUTOFREE);
else
- _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_effectsHandle, buffer, size, 8000, Audio::Mixer::FLAG_AUTOFREE, sound);
+ _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_effectsHandle, buffer, size, 8000, Audio::Mixer::FLAG_AUTOFREE);
}
// Feeble Files specific
@@ -739,7 +745,7 @@ void Sound::playSoundData(Audio::SoundHandle *handle, byte *soundData, uint soun
memcpy(buffer, soundData + stream.pos(), size);
}
- _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer, size, rate, flags | Audio::Mixer::FLAG_AUTOFREE, sound, vol, pan);
+ _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer, size, rate, flags | Audio::Mixer::FLAG_AUTOFREE, -1, vol, pan);
}
void Sound::stopSfx5() {
diff --git a/engines/agos/string.cpp b/engines/agos/string.cpp
index 8c5e911c39..483f101889 100644
--- a/engines/agos/string.cpp
+++ b/engines/agos/string.cpp
@@ -32,7 +32,7 @@ using Common::File;
namespace AGOS {
-const byte *AGOSEngine::getStringPtrByID(uint stringId) {
+const byte *AGOSEngine::getStringPtrByID(uint16 stringId) {
const byte *string_ptr;
byte *dst;
@@ -49,7 +49,7 @@ const byte *AGOSEngine::getStringPtrByID(uint stringId) {
return dst;
}
-const byte *AGOSEngine::getLocalStringByID(uint stringId) {
+const byte *AGOSEngine::getLocalStringByID(uint16 stringId) {
if (stringId < _stringIdLocalMin || stringId >= _stringIdLocalMax) {
loadTextIntoMem(stringId);
}
@@ -140,7 +140,7 @@ uint AGOSEngine::loadTextFile_gme(const char *filename, byte *dst) {
return size;
}
-void AGOSEngine::loadTextIntoMem(uint stringId) {
+void AGOSEngine::loadTextIntoMem(uint16 stringId) {
byte *p;
char filename[30];
int i;
@@ -304,7 +304,7 @@ void AGOSEngine::printScreenText(uint vgaSpriteId, uint color, const char *strin
lettersPerRowJustified = stringLength / (stringLength / lettersPerRow + 1) + 1;
talkDelay = (stringLength + 3) / 3;
- if ((getGameType() == GType_SIMON1) && (getFeatures() & GF_TALKIE)) {
+ if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE)) {
if (_variableArray[141] == 0)
_variableArray[141] = 9;
_variableArray[85] = _variableArray[141] * talkDelay;
@@ -364,16 +364,16 @@ void AGOSEngine::printScreenText(uint vgaSpriteId, uint color, const char *strin
renderString(vgaSpriteId, color, width, height, convertedString);
}
- int b = (!getBitFlag(133)) ? 3 : 4;
+ uint16 windowNum = (!getBitFlag(133)) ? 3 : 4;
x /= 8;
if (y < 2)
y = 2;
if (getGameType() == GType_SIMON1)
- animate(b, 2, vgaSpriteId + 199, x, y, 12);
+ animate(windowNum, 2, 199 + vgaSpriteId, x, y, 12);
else
- animate(b, 2, vgaSpriteId, x, y, 12);
+ animate(windowNum, 2, vgaSpriteId, x, y, 12);
}
// The Feeble Files specific
diff --git a/engines/agos/subroutine.cpp b/engines/agos/subroutine.cpp
index a92f01db2b..f4a6ba3266 100644
--- a/engines/agos/subroutine.cpp
+++ b/engines/agos/subroutine.cpp
@@ -288,7 +288,7 @@ File *AGOSEngine::openTablesFile_gme(const char *filename) {
return _gameFile;
}
-bool AGOSEngine::loadTablesIntoMem(uint subr_id) {
+bool AGOSEngine::loadTablesIntoMem(uint16 subr_id) {
byte *p;
uint16 min_num, max_num, file_num;
File *in;
@@ -337,7 +337,7 @@ bool AGOSEngine::loadTablesIntoMem(uint subr_id) {
return 0;
}
-bool AGOSEngine_Waxworks::loadTablesIntoMem(uint subr_id) {
+bool AGOSEngine_Waxworks::loadTablesIntoMem(uint16 subr_id) {
byte *p;
int i;
uint min_num, max_num;
@@ -399,7 +399,7 @@ bool AGOSEngine_Waxworks::loadTablesIntoMem(uint subr_id) {
return 0;
}
-bool AGOSEngine::loadXTablesIntoMem(uint subr_id) {
+bool AGOSEngine::loadXTablesIntoMem(uint16 subr_id) {
byte *p;
int i;
uint min_num, max_num;
@@ -461,7 +461,7 @@ void AGOSEngine::closeTablesFile(File *in) {
}
}
-Subroutine *AGOSEngine::createSubroutine(uint id) {
+Subroutine *AGOSEngine::createSubroutine(uint16 id) {
Subroutine *sub;
alignTableMem();
@@ -681,7 +681,7 @@ void AGOSEngine::readSubroutineLine(Common::SeekableReadStream *in, SubroutineLi
byte *AGOSEngine::readSingleOpcode(Common::SeekableReadStream *in, byte *ptr) {
int i, l;
const char *string_ptr;
- uint opcode, val;
+ uint16 opcode, val;
const char *const *table;
diff --git a/engines/agos/verb.cpp b/engines/agos/verb.cpp
index ddb7398312..f99d6db591 100644
--- a/engines/agos/verb.cpp
+++ b/engines/agos/verb.cpp
@@ -26,6 +26,10 @@
// Verb and hitarea handling
#include "common/stdafx.h"
+#include "common/system.h"
+
+#include "graphics/surface.h"
+
#include "agos/agos.h"
#include "agos/intern.h"
@@ -296,6 +300,10 @@ void AGOSEngine::showActionString(const byte *string) {
window->textColumn = x / 8;
window->textColumnOffset = x & 7;
+ if (_language == Common::HB_ISR && window->textColumnOffset != 0) {
+ window->textColumnOffset = 8 - window->textColumnOffset;
+ window->textColumn++;
+ }
for (; *string; string++)
windowPutChar(window, *string);
@@ -391,13 +399,15 @@ HitArea *AGOSEngine::findBox(uint hitarea_id) {
HitArea *AGOSEngine::findEmptyHitArea() {
HitArea *ha = _hitAreas;
- uint count = ARRAYSIZE(_hitAreas);
+ uint count = ARRAYSIZE(_hitAreas) - 1;
do {
if (ha->flags == 0)
return ha;
} while (ha++, --count);
- return NULL;
+
+ // The last box is overwritten, if too many boxes are allocated.
+ return ha;
}
void AGOSEngine::freeBox(uint index) {
@@ -674,21 +684,21 @@ void AGOSEngine::boxController(uint x, uint y, uint mode) {
if (mode != 0) {
if (mode == 3) {
- if (getGameType() == GType_ELVIRA1) {
+ if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2) {
if (best_ha->verb & 0x4000) {
- if (_variableArray[500] == 0) {
+ if (getGameType() == GType_ELVIRA1 && _variableArray[500] == 0) {
_variableArray[500] = best_ha->verb & 0xBFFF;
}
- }
- if (_clickOnly != 0 && best_ha->id < 8) {
- uint id = best_ha->id;
- if (id >= 4)
- id -= 4;
+ if (_clickOnly != 0 && best_ha->id < 8) {
+ uint id = best_ha->id;
+ if (id >= 4)
+ id -= 4;
- invertBox(findBox(id), 0, 0, 0, 0);
- _clickOnly = 0;
- return;
+ invertBox(findBox(id), 0, 0, 0, 0);
+ _clickOnly = 0;
+ return;
+ }
}
}
@@ -826,7 +836,14 @@ void AGOSEngine::invertBox(HitArea * ha, byte a, byte b, byte c, byte d) {
int w, h, i;
_lockWord |= 0x8000;
- src = getFrontBuf() + ha->y * _dxSurfacePitch + (ha->x - _scrollX * 8);
+
+ Graphics::Surface *screen = _system->lockScreen();
+ src = (byte *)screen->pixels + ha->y * _dxSurfacePitch + ha->x;
+
+ // WORKAROUND: Hitareas for saved game names aren't adjusted for scrolling locations
+ if (getGameType() == GType_SIMON2 && ha->id >= 208 && ha->id <= 213) {
+ src -= _scrollX * 8;
+ }
_litBoxFlag = true;
@@ -864,6 +881,8 @@ void AGOSEngine::invertBox(HitArea * ha, byte a, byte b, byte c, byte d) {
src += _dxSurfacePitch;
} while (--h);
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp
index 1d2c280246..2b8f6d3a09 100644
--- a/engines/agos/vga.cpp
+++ b/engines/agos/vga.cpp
@@ -32,6 +32,8 @@
#include "common/system.h"
+#include "graphics/surface.h"
+
namespace AGOS {
// Opcode tables
@@ -215,8 +217,8 @@ bool AGOSEngine::vc_maybe_skip_proc_1(uint16 a, int16 b) {
void AGOSEngine::dirtyBackGround() {
AnimTable *animTable = _screenAnim1;
while (animTable->srcPtr) {
- if (animTable->id == _vgaCurSpriteId) {
- animTable->window |= 0x8000;
+ if (animTable->id == _vgaCurSpriteId && animTable->zoneNum == _vgaCurZoneNum) {
+ animTable->windowNum |= 0x8000;
break;
}
animTable++;
@@ -226,13 +228,8 @@ void AGOSEngine::dirtyBackGround() {
VgaSprite *AGOSEngine::findCurSprite() {
VgaSprite *vsp = _vgaSprites;
while (vsp->id) {
- if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
- if (vsp->id == _vgaCurSpriteId && vsp->zoneNum == _vgaCurZoneNum)
- break;
- } else {
- if (vsp->id == _vgaCurSpriteId)
- break;
- }
+ if (vsp->id == _vgaCurSpriteId && vsp->zoneNum == _vgaCurZoneNum)
+ break;
vsp++;
}
return vsp;
@@ -241,13 +238,8 @@ VgaSprite *AGOSEngine::findCurSprite() {
bool AGOSEngine::isSpriteLoaded(uint16 id, uint16 zoneNum) {
VgaSprite *vsp = _vgaSprites;
while (vsp->id) {
- if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
- if (vsp->id == id && vsp->zoneNum == zoneNum)
- return true;
- } else {
- if (vsp->id == id)
- return true;
- }
+ if (vsp->id == id && vsp->zoneNum == zoneNum)
+ return true;
vsp++;
}
return false;
@@ -708,12 +700,6 @@ void AGOSEngine::drawImage_init(int16 image, uint16 palette, int16 x, int16 y, u
}
}
- state.surf2_addr = getFrontBuf();
- state.surf2_pitch = _dxSurfacePitch;
-
- state.surf_addr = getBackBuf();
- state.surf_pitch = _dxSurfacePitch;
-
drawImage(&state);
}
@@ -804,16 +790,19 @@ void AGOSEngine::checkWaitEndTable() {
}
void AGOSEngine::vc17_waitEnd() {
+ uint16 id = vcReadNextWord();
+
VgaSleepStruct *vfs = _waitEndTable;
while (vfs->ident)
vfs++;
- vfs->ident = vcReadNextWord();
- vfs->code_ptr = _vcPtr;
- vfs->sprite_id = _vgaCurSpriteId;
- vfs->cur_vga_file = _vgaCurZoneNum;
-
- _vcPtr = (byte *)&_vc_get_out_of_code;
+ if (isSpriteLoaded(id, id / 100)) {
+ vfs->ident = id;
+ vfs->code_ptr = _vcPtr;
+ vfs->sprite_id = _vgaCurSpriteId;
+ vfs->cur_vga_file = _vgaCurZoneNum;
+ _vcPtr = (byte *)&_vc_get_out_of_code;
+ }
}
void AGOSEngine::vc18_jump() {
@@ -843,10 +832,7 @@ void AGOSEngine::vc19_loop() {
}
void AGOSEngine::vc20_setRepeat() {
- /* FIXME: This opcode is somewhat strange: it first reads a BE word from
- * the script (advancing the script pointer in doing so); then it writes
- * back the same word, this time as LE, into the script.
- */
+ // Sets counter used by the endRepeat opcode below.
uint16 a = vcReadNextWord();
WRITE_LE_UINT16(const_cast<byte *>(_vcPtr), a);
_vcPtr += 2;
@@ -1042,7 +1028,7 @@ void AGOSEngine::vc27_resetSprite() {
vte = _vgaTimerList;
while (vte->delay) {
// Skip the animateSprites event in earlier games
- if (vte->type == 2) {
+ if (vte->type == ANIMATE_INT) {
vte++;
// For animated heart in Elvira 2
} else if (getGameType() == GType_ELVIRA2 && vte->sprite_id == 100) {
@@ -1125,6 +1111,7 @@ void AGOSEngine::vc33_setMouseOn() {
_displayPalette[65 * 4 + 1] = 48 * 4;
_displayPalette[65 * 4 + 2] = 40 * 4;
_displayPalette[65 * 4 + 3] = 0;
+ _paletteFlag = 1;
}
mouseOn();
}
@@ -1136,9 +1123,7 @@ void AGOSEngine::vc34_setMouseOff() {
_leftButtonDown = 0;
}
-void AGOSEngine::clearVideoBackGround(uint num, uint color) {
- debug(0, "clearVideoBackGround: num %d color %d", num, color);
-
+void AGOSEngine::clearVideoBackGround(uint16 num, uint16 color) {
const uint16 *vlut = &_videoWindows[num * 4];
byte *dst = getBackGround() + vlut[0] * 16 + (vlut[1] * (vlut[2] * 16));
@@ -1148,7 +1133,7 @@ void AGOSEngine::clearVideoBackGround(uint num, uint color) {
}
}
-void AGOSEngine::clearVideoWindow(uint num, uint color) {
+void AGOSEngine::clearVideoWindow(uint16 num, uint16 color) {
if (getGameType() == GType_ELVIRA1) {
if (num == 2 || num == 6)
return;
@@ -1160,13 +1145,11 @@ void AGOSEngine::clearVideoWindow(uint num, uint color) {
return;
}
- debug(0, "clearVideoWindow: num %d color %d", num, color);
-
if (getGameType() == GType_SIMON2) {
const uint16 *vlut = &_videoWindows[num * 4];
- uint xoffs = vlut[0] * 16;
- uint yoffs = vlut[1];
- uint dstWidth = _videoWindows[18] * 16;
+ uint16 xoffs = vlut[0] * 16;
+ uint16 yoffs = vlut[1];
+ uint16 dstWidth = _videoWindows[18] * 16;
byte *dst = _window4BackScn + xoffs + yoffs * dstWidth;
setMoveRect(0, 0, vlut[2] * 16, vlut[3]);
@@ -1179,12 +1162,14 @@ void AGOSEngine::clearVideoWindow(uint num, uint color) {
_window4Flag = 1;
} else {
if (getGameType() == GType_ELVIRA1 && num == 3) {
- memset(getFrontBuf(), color, _screenWidth * _screenHeight);
+ Graphics::Surface *screen = _system->lockScreen();
+ memset((byte *)screen->pixels, color, _screenWidth * _screenHeight);
+ _system->unlockScreen();
} else if (num == 4) {
const uint16 *vlut = &_videoWindows[num * 4];
- uint xoffs = (vlut[0] - _videoWindows[16]) * 16;
- uint yoffs = (vlut[1] - _videoWindows[17]);
- uint dstWidth = _videoWindows[18] * 16;
+ uint16 xoffs = (vlut[0] - _videoWindows[16]) * 16;
+ uint16 yoffs = (vlut[1] - _videoWindows[17]);
+ uint16 dstWidth = _videoWindows[18] * 16;
byte *dst = _window4BackScn + xoffs + yoffs * dstWidth;
setMoveRect(0, 0, vlut[2] * 16, vlut[3]);
@@ -1228,7 +1213,7 @@ void AGOSEngine::vc36_setWindowImage() {
uint16 windowNum = vcReadNextWord();
if (getGameType() == GType_FF || getGameType() == GType_PP) {
- _copyPartialMode = 2;
+ fillBackGroundFromFront();
} else {
setWindowImage(windowNum, vga_res);
}
diff --git a/engines/agos/vga_e2.cpp b/engines/agos/vga_e2.cpp
index ca1a3a4469..a4925de842 100644
--- a/engines/agos/vga_e2.cpp
+++ b/engines/agos/vga_e2.cpp
@@ -31,6 +31,8 @@
#include "common/system.h"
+#include "graphics/surface.h"
+
namespace AGOS {
void AGOSEngine_Elvira2::setupVideoOpcodes(VgaOpcodeProc *op) {
@@ -67,44 +69,49 @@ void AGOSEngine::vc44_ifBitClear() {
}
void AGOSEngine::vc45_setWindowPalette() {
- uint num = vcReadNextWord();
- uint color = vcReadNextWord();
+ uint16 num = vcReadNextWord();
+ uint16 color = vcReadNextWord();
+
+ const uint16 *vlut = &_videoWindows[num * 4];
+ uint8 width = vlut[2] * 8;
+ uint8 height = vlut[3];
if (num == 4) {
- const uint16 *vlut = &_videoWindows[num * 4];
- uint16 *dst = (uint16 *)_window4BackScn;
- uint width = vlut[2] * 16 / 2;
- uint height = vlut[3];
-
- for (uint h = 0; h < height; h++) {
- for (uint w = 0; w < width; w++) {
- dst[w] &= 0xF0F;
- dst[w] |= color * 16;
+ byte *dst = _window4BackScn;
+
+ for (uint8 h = 0; h < height; h++) {
+ for (uint8 w = 0; w < width; w++) {
+ uint16 val = READ_LE_UINT16(dst + w * 2);
+ val &= 0xF0F;
+ val |= color * 16;
+ WRITE_LE_UINT16(dst + w * 2, val);
}
- dst += width;
+ dst += width * 2;
}
} else {
- const uint16 *vlut = &_videoWindows[num * 4];
- uint16 *dst = (uint16 *)getFrontBuf() + vlut[0] * 8 + vlut[1] * _dxSurfacePitch / 2;
- uint width = vlut[2] * 16 / 2;
- uint height = vlut[3];
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dst = (byte *)screen->pixels + vlut[0] * 16 + vlut[1] * _dxSurfacePitch;
if (getGameType() == GType_ELVIRA2 && num == 7) {
- dst -= 4;
+ dst -= 8;
width += 4;
}
- for (uint h = 0; h < height; h++) {
- for (uint w = 0; w < width; w++) {
- dst[w] &= 0xF0F;
- dst[w] |= color * 16;
+ for (uint8 h = 0; h < height; h++) {
+ for (uint8 w = 0; w < width; w++) {
+ uint16 val = READ_LE_UINT16(dst + w * 2);
+ val &= 0xF0F;
+ val |= color * 16;
+ WRITE_LE_UINT16(dst + w * 2, val);
}
- dst += _dxSurfacePitch / 2;
+ dst += _dxSurfacePitch;
}
+
+ _system->unlockScreen();
}
}
-void AGOSEngine::setPaletteSlot(uint srcOffs, uint dstOffs) {
+void AGOSEngine::setPaletteSlot(uint16 srcOffs, uint8 dstOffs) {
byte *offs, *palptr, *src;
uint16 num;
@@ -128,17 +135,17 @@ void AGOSEngine::setPaletteSlot(uint srcOffs, uint dstOffs) {
}
void AGOSEngine::vc46_setPaletteSlot1() {
- uint srcOffs = vcReadNextWord();
+ uint16 srcOffs = vcReadNextWord();
setPaletteSlot(srcOffs, 1);
}
void AGOSEngine::vc47_setPaletteSlot2() {
- uint srcOffs = vcReadNextWord();
+ uint16 srcOffs = vcReadNextWord();
setPaletteSlot(srcOffs, 2);
}
void AGOSEngine::vc48_setPaletteSlot3() {
- uint srcOffs = vcReadNextWord();
+ uint16 srcOffs = vcReadNextWord();
setPaletteSlot(srcOffs, 3);
}
@@ -211,10 +218,13 @@ void AGOSEngine::vc53_dissolveIn() {
int16 xoffs = _videoWindows[num * 4 + 0] * 16;
int16 yoffs = _videoWindows[num * 4 + 1];
- byte *dstPtr = getFrontBuf() + xoffs + yoffs * _screenWidth;
+ int16 offs = xoffs + yoffs * _screenWidth;
uint16 count = dissolveCheck * 2;
while (count--) {
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dstPtr = (byte *)screen->pixels + offs;
+
yoffs = _rnd.getRandomNumber(dissolveY);
dst = dstPtr + yoffs * _screenWidth;
src = _window4BackScn + yoffs * 224;
@@ -253,15 +263,15 @@ void AGOSEngine::vc53_dissolveIn() {
*dst &= color;
*dst |= *src & 0xF;
+ _system->unlockScreen();
+
dissolveCount--;
if (!dissolveCount) {
if (count >= dissolveCheck)
dissolveDelay++;
dissolveCount = dissolveDelay;
- _system->copyRectToScreen(getFrontBuf(), _screenWidth, 0, 0, _screenWidth, _screenHeight);
- _system->updateScreen();
- delay(0);
+ delay(1);
}
}
}
@@ -281,11 +291,14 @@ void AGOSEngine::vc54_dissolveOut() {
int16 xoffs = _videoWindows[num * 4 + 0] * 16;
int16 yoffs = _videoWindows[num * 4 + 1];
- byte *dstPtr = getFrontBuf() + xoffs + yoffs * _screenWidth;
- color |= dstPtr[0] & 0xF0;
+ int16 offs = xoffs + yoffs * _screenWidth;
uint16 count = dissolveCheck * 2;
while (count--) {
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dstPtr = (byte *)screen->pixels + offs;
+ color |= dstPtr[0] & 0xF0;
+
yoffs = _rnd.getRandomNumber(dissolveY);
xoffs = _rnd.getRandomNumber(dissolveX);
dst = dstPtr + xoffs + yoffs * _screenWidth;
@@ -304,15 +317,15 @@ void AGOSEngine::vc54_dissolveOut() {
dst += xoffs;
*dst = color;
+ _system->unlockScreen();
+
dissolveCount--;
if (!dissolveCount) {
if (count >= dissolveCheck)
dissolveDelay++;
dissolveCount = dissolveDelay;
- _system->copyRectToScreen(getFrontBuf(), _screenWidth, 0, 0, _screenWidth, _screenHeight);
- _system->updateScreen();
- delay(0);
+ delay(1);
}
}
}
@@ -339,11 +352,15 @@ void AGOSEngine::vc55_moveBox() {
}
void AGOSEngine::vc56_fullScreen() {
+ Graphics::Surface *screen = _system->lockScreen();
+
+ byte *dst = (byte *)screen->pixels;
byte *src = _curVgaFile2 + 32;
- byte *dst = getFrontBuf();
memcpy(dst, src + 768, _screenHeight * _screenWidth);
+ _system->unlockScreen();
+
//fullFade();
uint8 palette[1024];
diff --git a/engines/agos/vga_ff.cpp b/engines/agos/vga_ff.cpp
index e1ee56002e..29b05e1e3c 100644
--- a/engines/agos/vga_ff.cpp
+++ b/engines/agos/vga_ff.cpp
@@ -217,7 +217,7 @@ void AGOSEngine::checkScrollX(int16 x, int16 xpos) {
if (_scrollXMax == 0 || x == 0)
return;
- if ((getGameType() == GType_FF) && (getBitFlag(80) || getBitFlag(82)))
+ if (getGameType() == GType_FF && (getBitFlag(80) || getBitFlag(82)))
return;
int16 tmp;
diff --git a/engines/agos/vga_s2.cpp b/engines/agos/vga_s2.cpp
index 9e482e95f4..9c05bc1100 100644
--- a/engines/agos/vga_s2.cpp
+++ b/engines/agos/vga_s2.cpp
@@ -52,6 +52,14 @@ void AGOSEngine_Simon2::setupVideoOpcodes(VgaOpcodeProc *op) {
void AGOSEngine::vc56_delayLong() {
uint16 num = vcReadVarOrWord() * _frameCount;
+ if (getGameType() == GType_FF && _currentTable) {
+ // WORKAROUND: When the repair man comes to fix the car, the game doesn't
+ // wait long enough for the screen to completely scroll to the left side.
+ if (_currentTable->id == 20438 && _vgaCurSpriteId == 13 && _vgaCurZoneNum == 2) {
+ num *= 2;
+ }
+ }
+
addVgaEvent(num + _vgaBaseDelay, ANIMATE_EVENT, _vcPtr, _vgaCurSpriteId, _vgaCurZoneNum);
_vcPtr = (byte *)&_vc_get_out_of_code;
}
@@ -194,7 +202,7 @@ void AGOSEngine::vc72_segue() {
int16 loop = vcReadNextWord();
if (track == -1 || track == 999) {
- _midi.stop();
+ stopMusic();
} else {
_midi.setLoop(loop != 0);
_midi.startTrack(track);
diff --git a/engines/agos/vga_ww.cpp b/engines/agos/vga_ww.cpp
index 60aeeaeebe..c24a115e71 100644
--- a/engines/agos/vga_ww.cpp
+++ b/engines/agos/vga_ww.cpp
@@ -31,6 +31,8 @@
#include "common/system.h"
+#include "graphics/surface.h"
+
namespace AGOS {
void AGOSEngine_Waxworks::setupVideoOpcodes(VgaOpcodeProc *op) {
@@ -43,23 +45,55 @@ void AGOSEngine_Waxworks::setupVideoOpcodes(VgaOpcodeProc *op) {
op[63] = &AGOSEngine::vc63_fastFadeIn;
}
-void AGOSEngine::vcStopAnimation(uint file, uint sprite) {
- uint16 old_sprite_id, old_cur_file_id;
+void AGOSEngine::vcStopAnimation(uint16 zone, uint16 sprite) {
+ uint16 oldCurSpriteId, oldCurZoneNum;
+ VgaSprite *vsp;
+ VgaTimerEntry *vte;
+ const byte *vcPtrOrg;
+
+ oldCurSpriteId = _vgaCurSpriteId;
+ oldCurZoneNum = _vgaCurZoneNum;
+ vcPtrOrg = _vcPtr;
+
+ _vgaCurZoneNum = zone;
+ _vgaCurSpriteId = sprite;
+
+ vsp = findCurSprite();
+ if (vsp->id) {
+ vc25_halt_sprite();
+
+ vte = _vgaTimerList;
+ while (vte->delay) {
+ if (vte->sprite_id == _vgaCurSpriteId && vte->cur_vga_file == _vgaCurZoneNum) {
+ deleteVgaEvent(vte);
+ break;
+ }
+ vte++;
+ }
+ }
+
+ _vgaCurZoneNum = oldCurZoneNum;
+ _vgaCurSpriteId = oldCurSpriteId;
+ _vcPtr = vcPtrOrg;
+}
+
+void AGOSEngine_Simon1::vcStopAnimation(uint16 zone, uint16 sprite) {
+ uint16 oldCurSpriteId, oldCurZoneNum;
VgaSleepStruct *vfs;
VgaSprite *vsp;
VgaTimerEntry *vte;
const byte *vcPtrOrg;
- old_sprite_id = _vgaCurSpriteId;
- old_cur_file_id = _vgaCurZoneNum;
+ oldCurSpriteId = _vgaCurSpriteId;
+ oldCurZoneNum = _vgaCurZoneNum;
vcPtrOrg = _vcPtr;
- _vgaCurZoneNum = file;
+ _vgaCurZoneNum = zone;
_vgaCurSpriteId = sprite;
vfs = _waitSyncTable;
while (vfs->ident != 0) {
- if (vfs->sprite_id == _vgaCurSpriteId && ((getGameType() == GType_SIMON1) || vfs->cur_vga_file == _vgaCurZoneNum)) {
+ if (vfs->sprite_id == _vgaCurSpriteId && vfs->cur_vga_file == _vgaCurZoneNum) {
while (vfs->ident != 0) {
memcpy(vfs, vfs + 1, sizeof(VgaSleepStruct));
vfs++;
@@ -75,7 +109,7 @@ void AGOSEngine::vcStopAnimation(uint file, uint sprite) {
vte = _vgaTimerList;
while (vte->delay) {
- if (vte->sprite_id == _vgaCurSpriteId && (getGameType() == GType_SIMON1 || vte->cur_vga_file == _vgaCurZoneNum)) {
+ if (vte->sprite_id == _vgaCurSpriteId && vte->cur_vga_file == _vgaCurZoneNum) {
deleteVgaEvent(vte);
break;
}
@@ -83,8 +117,8 @@ void AGOSEngine::vcStopAnimation(uint file, uint sprite) {
}
}
- _vgaCurZoneNum = old_cur_file_id;
- _vgaCurSpriteId = old_sprite_id;
+ _vgaCurZoneNum = oldCurZoneNum;
+ _vgaCurSpriteId = oldCurSpriteId;
_vcPtr = vcPtrOrg;
}
@@ -98,8 +132,8 @@ void AGOSEngine::vc60_stopAnimation() {
zoneNum = vcReadNextWord();
sprite = vcReadNextWord();
} else {
- zoneNum = _vgaCurZoneNum;
sprite = vcReadNextWord();
+ zoneNum = sprite / 100;
}
vcStopAnimation(zoneNum, sprite);
@@ -110,13 +144,15 @@ void AGOSEngine::vc61() {
byte *src, *dst, *dstPtr;
uint h, tmp;
+ Graphics::Surface *screen = _system->lockScreen();
+
if (a == 6) {
src = _curVgaFile2 + 800;
- dstPtr = getFrontBuf();
+ dstPtr = (byte *)screen->pixels;
memcpy(dstPtr, src, 64000);
tmp = 4 - 1;
} else {
- dstPtr = getFrontBuf();
+ dstPtr = (byte *)screen->pixels;
tmp = a - 1;
}
@@ -135,8 +171,10 @@ void AGOSEngine::vc61() {
dst += _screenWidth;
}
- if (a != 6)
+ if (a != 6) {
+ _system->unlockScreen();
return;
+ }
src = _curVgaFile2 + 9984 * 16 + 15344;
}
@@ -148,6 +186,8 @@ void AGOSEngine::vc61() {
dst += _screenWidth;
}
+ _system->unlockScreen();
+
if (a == 6) {
//fullFade();
src = _curVgaFile2 + 32;
@@ -197,13 +237,11 @@ void AGOSEngine::vc62_fastFadeOut() {
delay(5);
}
- if (getGameType() == GType_FF || getGameType() == GType_PP) {
- clearSurfaces(_screenHeight);
- } else if (getGameType() == GType_WW) {
- memset(getFrontBuf(), 0, _screenWidth * _screenHeight);
+ if (getGameType() == GType_WW || getGameType() == GType_FF || getGameType() == GType_PP) {
+ clearSurfaces();
} else {
if (_windowNum != 4) {
- memset(getFrontBuf(), 0, _screenWidth * _screenHeight);
+ clearSurfaces();
}
}
}
diff --git a/engines/agos/window.cpp b/engines/agos/window.cpp
index 94436b0560..d4eb7ba3fc 100644
--- a/engines/agos/window.cpp
+++ b/engines/agos/window.cpp
@@ -25,6 +25,10 @@
#include "common/stdafx.h"
+#include "common/system.h"
+
+#include "graphics/surface.h"
+
#include "agos/agos.h"
#include "agos/intern.h"
@@ -60,11 +64,16 @@ WindowBlock *AGOSEngine::openWindow(uint x, uint y, uint w, uint h, uint flags,
window->fill_color = fillColor;
window->text_color = textColor;
window->textColumn = 0;
- window->textRow = 0;
window->textColumnOffset = 0;
- window->textMaxLength = window->width * 8 / 6; // characters are 6 pixels
+ window->textRow = 0;
window->scrollY = 0;
+ // Characters are 6 pixels
+ if (getGameType() == GType_ELVIRA2)
+ window->textMaxLength = (window->width * 8 - 4) / 6;
+ else
+ window->textMaxLength = window->width * 8 / 6;
+
if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 || getGameType() == GType_WW)
clearWindow(window);
@@ -103,59 +112,73 @@ void AGOSEngine::clearWindow(WindowBlock *window) {
window->textColumn = 0;
window->textRow = 0;
- window->textColumnOffset = 0;
+ window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0;
window->textLength = 0;
window->scrollY = 0;
}
-void AGOSEngine::colorWindow(WindowBlock *window) {
+void AGOSEngine_Feeble::colorWindow(WindowBlock *window) {
byte *dst;
- uint h, w;
+ uint16 h, w;
_lockWord |= 0x8000;
- if (getGameType() == GType_FF || getGameType() == GType_PP) {
- dst = getFrontBuf() + _dxSurfacePitch * window->y + window->x;
+ dst = getBackGround() + _dxSurfacePitch * window->y + window->x;
- for (h = 0; h < window->height; h++) {
- for (w = 0; w < window->width; w++) {
- if (dst[w] == 113 || dst[w] == 116 || dst[w] == 252)
- dst[w] = window->fill_color;
- }
- dst += _screenWidth;
+ for (h = 0; h < window->height; h++) {
+ for (w = 0; w < window->width; w++) {
+ if (dst[w] == 113 || dst[w] == 116 || dst[w] == 252)
+ dst[w] = window->fill_color;
}
- } else {
- dst = getFrontBuf() + _dxSurfacePitch * (window->y) + window->x * 8;
- h = window->height * 8;
- w = window->width * 8;
-
- if (getGameType() == GType_ELVIRA2 && window->y == 146) {
- if (window->fill_color == 1) {
- _displayPalette[33 * 4 + 0] = 48 * 4;
- _displayPalette[33 * 4 + 1] = 40 * 4;
- _displayPalette[33 * 4 + 2] = 32 * 4;
- } else {
- _displayPalette[33 * 4 + 0] = 56 * 4;
- _displayPalette[33 * 4 + 1] = 56 * 4;
- _displayPalette[33 * 4 + 2] = 40 * 4;
- }
+ dst += _screenWidth;
+ }
- dst -= _dxSurfacePitch;
- h += 2;
+ _lockWord &= ~0x8000;
+}
- _paletteFlag = 1;
+void AGOSEngine::colorWindow(WindowBlock *window) {
+ uint16 y, h;
+
+ y = window->y;
+ h = window->height * 8;
+
+ if (getGameType() == GType_ELVIRA2 && window->y == 146) {
+ if (window->fill_color == 1) {
+ _displayPalette[33 * 4 + 0] = 48 * 4;
+ _displayPalette[33 * 4 + 1] = 40 * 4;
+ _displayPalette[33 * 4 + 2] = 32 * 4;
+ } else {
+ _displayPalette[33 * 4 + 0] = 56 * 4;
+ _displayPalette[33 * 4 + 1] = 56 * 4;
+ _displayPalette[33 * 4 + 2] = 40 * 4;
}
- uint8 color = window->fill_color;
- if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW)
- color += dst[0] & 0xF0;
+ y--;
+ h += 2;
- do {
- memset(dst, color, w);
- dst += _dxSurfacePitch;
- } while (--h);
+ _paletteFlag = 1;
}
+ colorBlock(window, window->x * 8, y, window->width * 8, h);
+}
+
+void AGOSEngine::colorBlock(WindowBlock *window, uint16 x, uint16 y, uint16 w, uint16 h) {
+ _lockWord |= 0x8000;
+
+ Graphics::Surface *screen = _system->lockScreen();
+ byte *dst = (byte *)screen->pixels + y * _screenWidth + x;
+
+ uint8 color = window->fill_color;
+ if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW)
+ color += dst[0] & 0xF0;
+
+ do {
+ memset(dst, color, w);
+ dst += _screenWidth;
+ } while (--h);
+
+ _system->unlockScreen();
+
_lockWord &= ~0x8000;
}
@@ -180,29 +203,50 @@ void AGOSEngine::restoreWindow(WindowBlock *window) {
} else if (getGameType() == GType_SIMON1) {
restoreBlock(window->y + window->height * 8 + ((window == _windowArray[2]) ? 1 : 0), (window->x + window->width) * 8, window->y, window->x * 8);
} else {
- restoreBlock(window->y + window->height * 8, (window->x + window->width) * 8, window->y, window->x * 8);
+ uint16 x = window->x;
+ uint16 w = window->width;
+
+ if (getGameType() == GType_ELVIRA1) {
+ // Adjustments to remove inventory arrows
+ if (x & 1) {
+ x--;
+ w++;
+ }
+ if (w & 1) {
+ w++;
+ }
+ }
+
+ restoreBlock(window->y + window->height * 8, (x + w) * 8, window->y, x * 8);
}
_lockWord &= ~0x8000;
}
-void AGOSEngine::restoreBlock(uint h, uint w, uint y, uint x) {
+void AGOSEngine::restoreBlock(uint16 h, uint16 w, uint16 y, uint16 x) {
byte *dst, *src;
uint i;
- dst = getFrontBuf();
+ Graphics::Surface *screen = _system->lockScreen();
+ dst = (byte *)screen->pixels;
src = getBackGround();
dst += y * _dxSurfacePitch;
src += y * _dxSurfacePitch;
+ uint8 paletteMod = 0;
+ if (getGameType() == GType_ELVIRA1 && !(getFeatures() & GF_DEMO) && y >= 133)
+ paletteMod = 16;
+
while (y < h) {
for (i = x; i < w; i++)
- dst[i] = src[i];
+ dst[i] = src[i] + paletteMod;
y++;
dst += _dxSurfacePitch;
src += _dxSurfacePitch;
}
+
+ _system->unlockScreen();
}
void AGOSEngine::setTextColor(uint color) {
diff --git a/engines/agos/zones.cpp b/engines/agos/zones.cpp
index 05643a6e89..a1de03e66c 100644
--- a/engines/agos/zones.cpp
+++ b/engines/agos/zones.cpp
@@ -44,7 +44,7 @@ void AGOSEngine::unfreezeBottom() {
_vgaFrozenBase = _vgaRealBase;
}
-void AGOSEngine::loadZone(uint zoneNum) {
+void AGOSEngine::loadZone(uint16 zoneNum) {
VgaPointersEntry *vpe;
CHECK_BOUNDS(zoneNum, _vgaBufferPointers);
diff --git a/engines/cine/anim.cpp b/engines/cine/anim.cpp
index 2829a31bc0..12d8f70cd0 100644
--- a/engines/cine/anim.cpp
+++ b/engines/cine/anim.cpp
@@ -681,7 +681,7 @@ void convert8BBP2(byte * dest, byte * source, int16 width, int16 height) {
void loadSet(const char *resourceName) {
animHeader2Struct header2;
int16 foundFileIdx;
- byte *dataPtr;
+ byte *dataPtr, *origDataPtr;
int16 entry;
byte *ptr;
int16 i;
@@ -690,7 +690,7 @@ void loadSet(const char *resourceName) {
byte *startOfDataPtr;
foundFileIdx = findFileInBundle(resourceName);
- dataPtr = readBundleFile(foundFileIdx);
+ origDataPtr = dataPtr = readBundleFile(foundFileIdx);
assert(!memcmp(dataPtr, "SET", 3));
@@ -764,13 +764,13 @@ void loadSet(const char *resourceName) {
strcpy(animDataTable[entry].name, currentPartName);
}
- free(dataPtr);
+ free(origDataPtr);
}
void loadSetAbs(const char *resourceName, uint16 idx) {
animHeader2Struct header2;
int16 foundFileIdx;
- byte *dataPtr;
+ byte *dataPtr, *origDataPtr;
int16 entry;
byte *ptr;
int16 i;
@@ -779,7 +779,7 @@ void loadSetAbs(const char *resourceName, uint16 idx) {
byte *startOfDataPtr;
foundFileIdx = findFileInBundle(resourceName);
- dataPtr = readBundleFile(foundFileIdx);
+ origDataPtr = dataPtr = readBundleFile(foundFileIdx);
assert(!memcmp(dataPtr, "SET", 3));
@@ -853,7 +853,7 @@ void loadSetAbs(const char *resourceName, uint16 idx) {
strcpy(animDataTable[entry].name, currentPartName);
}
- free(dataPtr);
+ free(origDataPtr);
}
void loadSeq(const char *resourceName) {
diff --git a/engines/cine/bg.cpp b/engines/cine/bg.cpp
index c368868113..32b59e0554 100644
--- a/engines/cine/bg.cpp
+++ b/engines/cine/bg.cpp
@@ -42,7 +42,8 @@ byte loadCt(const char *ctName) {
uint16 header[32];
byte *ptr, *dataPtr;
- strcpy(currentCtName, ctName);
+ if (currentCtName != ctName)
+ strcpy(currentCtName, ctName);
ptr = dataPtr = readBundleFile(findFileInBundle(ctName));
@@ -86,7 +87,8 @@ void loadBgHigh(const char *currentPtr) {
byte loadBg(const char *bgName) {
byte *ptr, *dataPtr;
- strcpy(currentBgName[0], bgName);
+ if (currentBgName[0] != bgName)
+ strcpy(currentBgName[0], bgName);
byte fileIdx = findFileInBundle(bgName);
ptr = dataPtr = readBundleFile(fileIdx);
diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp
index f24fe488d1..690644a0fa 100644
--- a/engines/cine/detection.cpp
+++ b/engines/cine/detection.cpp
@@ -494,7 +494,9 @@ REGISTER_PLUGIN(CINE, "Cinematique evo 1 engine", "Future Wars & Operation Steal
namespace Cine {
bool CineEngine::initGame() {
- _gameDescription = (const CINEGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const CINEGameDescription *)(encapsulatedDesc.realDesc);
+
return (_gameDescription != 0);
}
diff --git a/engines/cine/main_loop.cpp b/engines/cine/main_loop.cpp
index b55ee361c2..89a0f3e6fc 100644
--- a/engines/cine/main_loop.cpp
+++ b/engines/cine/main_loop.cpp
@@ -70,61 +70,61 @@ void manageEvents(int count) {
break;
case Common::EVENT_KEYDOWN:
switch (event.kbd.keycode) {
- case '\n':
- case '\r':
- case 261: // Keypad 5
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
+ case Common::KEYCODE_KP5:
if (allowPlayerInput) {
mouseLeft = 1;
}
break;
- case 27: // ESC
+ case Common::KEYCODE_ESCAPE:
if (allowPlayerInput) {
mouseRight = 1;
}
break;
- case 282: // F1
+ case Common::KEYCODE_F1:
if (allowPlayerInput) {
playerCommand = 0; // EXAMINE
makeCommandLine();
}
break;
- case 283: // F2
+ case Common::KEYCODE_F2:
if (allowPlayerInput) {
playerCommand = 1; // TAKE
makeCommandLine();
}
break;
- case 284: // F3
+ case Common::KEYCODE_F3:
if (allowPlayerInput) {
playerCommand = 2; // INVENTORY
makeCommandLine();
}
break;
- case 285: // F4
+ case Common::KEYCODE_F4:
if (allowPlayerInput) {
playerCommand = 3; // USE
makeCommandLine();
}
break;
- case 286: // F5
+ case Common::KEYCODE_F5:
if (allowPlayerInput) {
playerCommand = 4; // ACTIVATE
makeCommandLine();
}
break;
- case 287: // F6
+ case Common::KEYCODE_F6:
if (allowPlayerInput) {
playerCommand = 5; // SPEAK
makeCommandLine();
}
break;
- case 290: // F9
+ case Common::KEYCODE_F9:
if (allowPlayerInput && !inMenu) {
makeActionMenu();
makeCommandLine();
}
break;
- case 291: // F10
+ case Common::KEYCODE_F10:
if (!disableSystemMenu && !inMenu) {
g_cine->makeSystemMenu();
}
diff --git a/engines/cine/object.cpp b/engines/cine/object.cpp
index 1e92234e04..cab8d98977 100644
--- a/engines/cine/object.cpp
+++ b/engines/cine/object.cpp
@@ -160,7 +160,11 @@ int16 freeOverlay(uint16 objIdx, uint16 param) {
tempPtr2->previous = currentHeadPtr->previous;
- free(currentHeadPtr);
+ // FIXME: is this needed? It causes crashes in Windows in the drawOverlays function
+ // (the currentOverlay pointer is incorrect)
+ // Removing this fixes bug #1733238 - FW: crash in copier room
+ // Also, it stops the game from crashing right after the introduction
+ //free(currentHeadPtr);
return 0;
}
diff --git a/engines/cine/part.cpp b/engines/cine/part.cpp
index c27240169e..b862d72b53 100644
--- a/engines/cine/part.cpp
+++ b/engines/cine/part.cpp
@@ -52,7 +52,8 @@ void loadPart(const char *partName) {
numElementInPart = g_cine->_partFileHandle.readUint16BE();
g_cine->_partFileHandle.readUint16BE(); // entry size
- strcpy(currentPartName, partName);
+ if (currentPartName != partName)
+ strcpy(currentPartName, partName);
for (i = 0; i < numElementInPart; i++) {
g_cine->_partFileHandle.read(partBuffer[i].partName, 14);
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index f33476facf..281c4807b8 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -25,6 +25,7 @@
#include "common/stdafx.h"
#include "common/endian.h"
+#include "common/events.h"
#include "common/savefile.h"
#include "cine/cine.h"
@@ -2714,7 +2715,7 @@ void addMessage(byte param1, int16 param2, int16 param3, int16 param4, int16 par
currentHead = tempHead->next;
}
- newElement = (overlayHeadElement *) malloc(sizeof(overlayHeadElement));
+ newElement = (overlayHeadElement *)malloc(sizeof(overlayHeadElement));
newElement->next = tempHead->next;
tempHead->next = newElement;
@@ -3204,7 +3205,7 @@ bool makeTextEntryMenu(const char *messagePtr, char *inputString, int stringMaxL
ch[1] = 0;
manageEvents();
- int ascii = getKeyData();
+ int keycode = getKeyData();
uint16 mouseButton, mouseX, mouseY;
getMouseData(0, &mouseButton, &mouseX, &mouseY);
@@ -3214,14 +3215,14 @@ bool makeTextEntryMenu(const char *messagePtr, char *inputString, int stringMaxL
else if (mouseButton & 1)
quit = 1;
- switch (ascii) {
- case 8: // backspace
+ switch (keycode) {
+ case Common::KEYCODE_BACKSPACE:
if (inputPos <= 1) {
break;
}
inputPos--;
redraw = true;
- case 127: // del
+ case Common::KEYCODE_DELETE:
if (inputPos <= inputLength) {
if (inputPos != 1) {
strncpy(tempString, inputString, inputPos - 1);
@@ -3234,25 +3235,25 @@ bool makeTextEntryMenu(const char *messagePtr, char *inputString, int stringMaxL
redraw = true;
}
break;
- case 276: // left
+ case Common::KEYCODE_LEFT:
if (inputPos > 1) {
inputPos--;
redraw = true;
}
break;
- case 275: // right
+ case Common::KEYCODE_RIGHT:
if (inputPos <= inputLength) {
inputPos++;
redraw = true;
}
break;
default:
- if (((ascii >= 'a') && (ascii <='z')) ||
- ((ascii >= '0') && (ascii <='9')) ||
- ((ascii >= 'A') && (ascii <='Z')) ||
- (ascii == ' ')) {
+ if (((keycode >= 'a') && (keycode <='z')) ||
+ ((keycode >= '0') && (keycode <='9')) ||
+ ((keycode >= 'A') && (keycode <='Z')) ||
+ (keycode == ' ')) {
if (inputLength < stringMaxLength - 1) {
- ch[0] = ascii;
+ ch[0] = keycode;
if (inputPos != 1) {
strncpy(tempString, inputString, inputPos - 1);
strcat(tempString, ch);
diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp
index 80890de1ea..fc1d864a56 100644
--- a/engines/cruise/detection.cpp
+++ b/engines/cruise/detection.cpp
@@ -118,7 +118,8 @@ REGISTER_PLUGIN(CRUISE, "Cinematique evo 2 engine", "Cruise for a Corpse (C) Del
namespace Cruise {
bool CruiseEngine::initGame() {
- _gameDescription = (const CRUISEGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const CRUISEGameDescription *)(encapsulatedDesc.realDesc);
return (_gameDescription != 0);
}
diff --git a/engines/gob/detection.cpp b/engines/gob/detection.cpp
index 6b37d05e98..9dfbf534d4 100644
--- a/engines/gob/detection.cpp
+++ b/engines/gob/detection.cpp
@@ -1150,7 +1150,9 @@ REGISTER_PLUGIN(GOB, "Gob Engine", "Goblins Games (C) Coktel Vision");
namespace Gob {
bool GobEngine::detectGame() {
- const GOBGameDescription *gd = (const GOBGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ const GOBGameDescription *gd = (const GOBGameDescription *)(encapsulatedDesc.realDesc);
+
if (gd == 0)
return false;
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 38810e8c05..f57d5ecb0c 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -1044,12 +1044,15 @@ void Mult_v2::playImd(const char *imdFile, Mult::Mult_ImdKey &key, int16 dir,
if ((palFrame != -1) && (lastFrame != -1))
if ((lastFrame - palFrame) < startFrame)
if (!(key.flags & 0x4000)) {
+ _vm->_game->_preventScroll = false;
_vm->_imdPlayer->closeImd();
return;
}
- if (!_vm->_imdPlayer->openImd(imdFile, x, y, 0, flags))
+ if (!_vm->_imdPlayer->openImd(imdFile, x, y, 0, flags)) {
+ _vm->_game->_preventScroll = false;
return;
+ }
if (palFrame == -1)
palFrame = 0;
@@ -1064,6 +1067,7 @@ void Mult_v2::playImd(const char *imdFile, Mult::Mult_ImdKey &key, int16 dir,
void Mult_v2::advanceObjects(int16 index) {
int16 frame;
bool stop = false;
+ bool hasImds = false;
frame = _multData->animKeysFrames[index];
if (frame == -1)
@@ -1165,10 +1169,14 @@ void Mult_v2::advanceObjects(int16 index) {
if ((dir != 1) && (--startFrame > 0))
startFrame = 0;
+ hasImds = true;
playImd(imdFile, key, dir, startFrame);
}
}
+ if (!hasImds && (_vm->_draw->_showCursor == 3))
+ _vm->_game->_preventScroll = false;
+
doSoundAnim(stop, frame);
WRITE_VAR(22, frame);
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 17f3af646a..ae04c220d3 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -666,10 +666,10 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
pictIndex = (pictIndex & 15) - 1;
- left = FROM_LE_16(pictPtr[pictIndex][pieceIndex].left);
- right = FROM_LE_16(pictPtr[pictIndex][pieceIndex].right);
- top = FROM_LE_16(pictPtr[pictIndex][pieceIndex].top);
- bottom = FROM_LE_16(pictPtr[pictIndex][pieceIndex].bottom);
+ left = READ_LE_UINT16(&pictPtr[pictIndex][pieceIndex].left);
+ right = READ_LE_UINT16(&pictPtr[pictIndex][pieceIndex].right);
+ top = READ_LE_UINT16(&pictPtr[pictIndex][pieceIndex].top);
+ bottom = READ_LE_UINT16(&pictPtr[pictIndex][pieceIndex].bottom);
if (flags & 2) {
if (destX < _vm->_mult->_animLeft) {
diff --git a/engines/gob/util.cpp b/engines/gob/util.cpp
index d7c3ab5337..ff6333aa9e 100644
--- a/engines/gob/util.cpp
+++ b/engines/gob/util.cpp
@@ -40,8 +40,6 @@ namespace Gob {
Util::Util(GobEngine *vm) : _vm(vm) {
_mouseButtons = 0;
- for (int i = 0; i < KEYBUFSIZE; i++)
- _keyBuffer[i] = 0;
_keyBufferHead = 0;
_keyBufferTail = 0;
_fastMode = 0;
@@ -108,13 +106,13 @@ void Util::processInput(bool scroll) {
break;
case Common::EVENT_KEYDOWN:
if (event.kbd.flags == Common::KBD_CTRL) {
- if (event.kbd.keycode == 'f')
+ if (event.kbd.keycode == Common::KEYCODE_f)
_fastMode ^= 1;
- else if (event.kbd.keycode == 'g')
+ else if (event.kbd.keycode == Common::KEYCODE_g)
_fastMode ^= 2;
break;
}
- addKeyToBuffer(event.kbd.ascii);
+ addKeyToBuffer(event.kbd);
break;
case Common::EVENT_KEYUP:
break;
@@ -145,7 +143,7 @@ bool Util::keyBufferEmpty() {
return (_keyBufferHead == _keyBufferTail);
}
-void Util::addKeyToBuffer(int16 key) {
+void Util::addKeyToBuffer(const Common::KeyState &key) {
if ((_keyBufferHead + 1) % KEYBUFSIZE == _keyBufferTail) {
warning("key buffer overflow");
return;
@@ -155,7 +153,7 @@ void Util::addKeyToBuffer(int16 key) {
_keyBufferHead = (_keyBufferHead + 1) % KEYBUFSIZE;
}
-bool Util::getKeyFromBuffer(int16& key) {
+bool Util::getKeyFromBuffer(Common::KeyState &key) {
if (_keyBufferHead == _keyBufferTail) return false;
key = _keyBuffer[_keyBufferTail];
@@ -164,44 +162,49 @@ bool Util::getKeyFromBuffer(int16& key) {
return true;
}
-int16 Util::translateKey(int16 key) {
+int16 Util::translateKey(const Common::KeyState &key) {
static struct keyS {
int16 from;
int16 to;
} keys[] = {
- {8, 0x0E08}, // Backspace
- {32, 0x3920}, // Space
- {13, 0x1C0D}, // Enter
- {27, 0x011B}, // ESC
- {127, 0x5300}, // Del
- {273, 0x4800}, // Up arrow
- {274, 0x5000}, // Down arrow
- {275, 0x4D00}, // Right arrow
- {276, 0x4B00}, // Left arrow
- {315, 0x3B00}, // F1
- {316, 0x3C00}, // F2
- {317, 0x3D00}, // F3
- {318, 0x3E00}, // F4
- {319, 0x011B}, // F5
- {320, 0x4000}, // F6
- {321, 0x4100}, // F7
- {322, 0x4200}, // F8
- {323, 0x4300}, // F9
- {324, 0x4400} // F10
+ {Common::KEYCODE_INVALID, 0x0000},
+ {Common::KEYCODE_BACKSPACE, 0x0E08},
+ {Common::KEYCODE_SPACE, 0x3920},
+ {Common::KEYCODE_RETURN, 0x1C0D},
+ {Common::KEYCODE_ESCAPE, 0x011B},
+ {Common::KEYCODE_DELETE, 0x5300},
+ {Common::KEYCODE_UP, 0x4800},
+ {Common::KEYCODE_DOWN, 0x5000},
+ {Common::KEYCODE_RIGHT, 0x4D00},
+ {Common::KEYCODE_LEFT, 0x4B00},
+ {Common::KEYCODE_F1, 0x3B00},
+ {Common::KEYCODE_F2, 0x3C00},
+ {Common::KEYCODE_F3, 0x3D00},
+ {Common::KEYCODE_F4, 0x3E00},
+ {Common::KEYCODE_F5, 0x011B},
+ {Common::KEYCODE_F6, 0x4000},
+ {Common::KEYCODE_F7, 0x4100},
+ {Common::KEYCODE_F8, 0x4200},
+ {Common::KEYCODE_F9, 0x4300},
+ {Common::KEYCODE_F10, 0x4400}
};
for (int i = 0; i < ARRAYSIZE(keys); i++)
- if (key == keys[i].from)
+ if (key.keycode == keys[i].from)
return keys[i].to;
- if ((key < 32) || (key >= 128))
- return 0;
+ if ((key.keycode >= Common::KEYCODE_SPACE) &&
+ (key.keycode <= Common::KEYCODE_DELETE)) {
+
+ // Used as a user input in Gobliins 2 notepad, in the save dialog, ...
+ return key.ascii;
+ }
- return key;
+ return 0;
}
int16 Util::getKey(void) {
- int16 key;
+ Common::KeyState key;
while (!getKeyFromBuffer(key)) {
processInput();
@@ -213,10 +216,9 @@ int16 Util::getKey(void) {
}
int16 Util::checkKey(void) {
- int16 key;
+ Common::KeyState key;
- if (!getKeyFromBuffer(key))
- key = 0;
+ getKeyFromBuffer(key);
return translateKey(key);
}
diff --git a/engines/gob/util.h b/engines/gob/util.h
index 09fe668518..2cc0547a20 100644
--- a/engines/gob/util.h
+++ b/engines/gob/util.h
@@ -26,6 +26,8 @@
#ifndef GOB_UTIL_H
#define GOB_UTIL_H
+#include "common/keyboard.h"
+
#include "gob/video.h"
namespace Gob {
@@ -90,7 +92,7 @@ public:
protected:
int16 _mouseButtons;
- int16 _keyBuffer[KEYBUFSIZE];
+ Common::KeyState _keyBuffer[KEYBUFSIZE];
int16 _keyBufferHead;
int16 _keyBufferTail;
@@ -99,9 +101,9 @@ protected:
GobEngine *_vm;
bool keyBufferEmpty();
- void addKeyToBuffer(int16 key);
- bool getKeyFromBuffer(int16& key);
- int16 translateKey(int16 key);
+ void addKeyToBuffer(const Common::KeyState &key);
+ bool getKeyFromBuffer(Common::KeyState &key);
+ int16 translateKey(const Common::KeyState &key);
void checkJoystick();
};
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 026f40eda8..e1b5a2b7c3 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -122,7 +122,7 @@ GameList Engine_KYRA_gameIDList() {
}
GameDescriptor Engine_KYRA_findGameID(const char *gameid) {
- return Common::AdvancedDetector::findGameID(gameid, detectionParams);
+ return Common::AdvancedDetector::findGameID(gameid, gameList);
}
GameList Engine_KYRA_detectGames(const FSList &fslist) {
@@ -133,7 +133,9 @@ PluginError Engine_KYRA_create(OSystem *syst, Engine **engine) {
assert(engine);
const char *gameid = ConfMan.get("gameid").c_str();
- const KYRAGameDescription *gd = (const KYRAGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ const KYRAGameDescription *gd = (const KYRAGameDescription *)(encapsulatedDesc.realDesc);
+
if (gd == 0) {
// maybe add non md5 based detection again?
return kNoGameDataFoundError;
diff --git a/engines/kyra/gui.cpp b/engines/kyra/gui.cpp
index 18fdd4436d..8cafb54fb8 100644
--- a/engines/kyra/gui.cpp
+++ b/engines/kyra/gui.cpp
@@ -596,7 +596,7 @@ int KyraEngine::buttonMenuCallback(Button *caller) {
calcCoords(_menu[i]);
_menuRestoreScreen = true;
- _keyPressed = 0;
+ _keyPressed.reset();
_mousePressFlag = false;
_toplevelMenu = 0;
@@ -826,7 +826,7 @@ void KyraEngine::gui_getInput() {
_mouseWheel = 1;
break;
case Common::EVENT_KEYDOWN:
- _keyPressed = event.kbd.ascii;
+ _keyPressed = event.kbd;
break;
default:
break;
@@ -1002,26 +1002,28 @@ void KyraEngine::gui_redrawTextfield() {
void KyraEngine::gui_updateSavegameString() {
int length;
- if (_keyPressed) {
+ if (_keyPressed.keycode) {
length = strlen(_savegameName);
- if (_keyPressed > 31 && _keyPressed < 127) {
+ if (_keyPressed.ascii > 31 && _keyPressed.ascii < 127) {
if (length < 31) {
- _savegameName[length] = _keyPressed;
+ _savegameName[length] = _keyPressed.ascii;
_savegameName[length+1] = 0;
gui_redrawTextfield();
}
- } else if (_keyPressed == 8 ||_keyPressed == 127) {
+ } else if (_keyPressed.keycode == Common::KEYCODE_BACKSPACE ||
+ _keyPressed.keycode == Common::KEYCODE_DELETE) {
if (length > 0) {
_savegameName[length-1] = 0;
gui_redrawTextfield();
}
- } else if (_keyPressed == 13) {
+ } else if (_keyPressed.keycode == Common::KEYCODE_RETURN ||
+ _keyPressed.keycode == Common::KEYCODE_KP_ENTER) {
_displaySubMenu = false;
}
}
- _keyPressed = 0;
+ _keyPressed.reset();
}
int KyraEngine::gui_saveGame(Button *button) {
diff --git a/engines/kyra/kyra.cpp b/engines/kyra/kyra.cpp
index 7b3251f878..249a5f6c21 100644
--- a/engines/kyra/kyra.cpp
+++ b/engines/kyra/kyra.cpp
@@ -110,6 +110,8 @@ KyraEngine::KyraEngine(OSystem *system, const GameFlags &flags)
_curSfxFile = _curMusicTheme = 0;
+ memset(&_itemBkgBackUp, 0, sizeof(_itemBkgBackUp));
+
// sets up all engine specific debug levels
Common::addSpecialDebugLevel(kDebugLevelScriptFuncs, "ScriptFuncs", "Script function debug level");
Common::addSpecialDebugLevel(kDebugLevelScript, "Script", "Script interpreter debug level");
@@ -615,7 +617,7 @@ void KyraEngine::delay(uint32 amount, bool update, bool isMainLoop) {
_quitFlag = true;
} else if (event.kbd.keycode == '.')
_skipFlag = true;
- else if (event.kbd.keycode == 13 || event.kbd.keycode == 32 || event.kbd.keycode == 27) {
+ else if (event.kbd.keycode == Common::KEYCODE_RETURN || event.kbd.keycode == Common::KEYCODE_SPACE || event.kbd.keycode == Common::KEYCODE_ESCAPE) {
_abortIntroFlag = true;
_skipFlag = true;
}
diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h
index 9d891ee511..bb41a68e6b 100644
--- a/engines/kyra/kyra.h
+++ b/engines/kyra/kyra.h
@@ -29,6 +29,7 @@
#include "engines/engine.h"
#include "common/rect.h"
#include "common/array.h"
+#include "common/events.h"
namespace Kyra {
@@ -744,7 +745,7 @@ protected:
int _gameToLoad;
char _savegameName[31];
const char *_specialSavegameString;
- uint8 _keyPressed;
+ Common::KeyState _keyPressed;
struct KyragemState {
uint16 nextOperation;
diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h
index 03d8f58cac..e103086dc4 100644
--- a/engines/kyra/kyra_v1.h
+++ b/engines/kyra/kyra_v1.h
@@ -26,8 +26,8 @@
#ifndef KYRA_KYRA_V1_H
#define KYRA_KYRA_V1_H
-#include "kyra.h"
-#include "script.h"
+#include "kyra/kyra.h"
+#include "kyra/script.h"
namespace Kyra {
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp
index 8482dc5aa2..6857b3ac09 100644
--- a/engines/kyra/kyra_v2.cpp
+++ b/engines/kyra/kyra_v2.cpp
@@ -112,7 +112,7 @@ void KyraEngine_v2::mainMenu() {
case 0:
break;
case 1:
- seq_playSequences(kSequenceOverview, kSequenceLibrary);
+ seq_playSequences(kSequenceOverview, kSequenceZanFaun);
break;
case 2:
break;
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index 49a4e5c09a..a002baec19 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -34,7 +34,9 @@ enum kSequences {
kSequenceTitle = 2,
kSequenceOverview = 3,
kSequenceLibrary = 4,
- kSequenceHand = 5
+ kSequenceHand = 5,
+ kSequencePoint = 6,
+ kSequenceZanFaun = 7
};
class WSAMovieV2;
@@ -92,6 +94,8 @@ private:
int seq_introOverview(int seqNum);
int seq_introLibrary(int seqNum);
int seq_introHand(int seqNum);
+ int seq_introPoint(int seqNum);
+ int seq_introZanFaun(int seqNum);
void seq_introOverviewOver1(int currentFrame);
void seq_introOverviewForest(int currentFrame);
diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp
index 17c6b2219b..02eb1c9ea7 100644
--- a/engines/kyra/screen.cpp
+++ b/engines/kyra/screen.cpp
@@ -355,6 +355,33 @@ void Screen::fadeToBlack(int delay) {
fadePalette(blackPal, delay);
}
+void Screen::k2IntroFadeToGrey(int delay) {
+ debugC(9, kDebugLevelScreen, "Screen::k2IntroFadeToGrey()");
+
+ for (int i = 0; i <= 50; ++i) {
+ if (i <= 8 || i >= 30) {
+ _currentPalette[3 * i + 0] = (_currentPalette[3 * i + 0] +
+ _currentPalette[3 * i + 1] +
+ _currentPalette[3 * i + 2]) / 3;
+ _currentPalette[3 * i + 1] = _currentPalette[3 * i + 0];
+ _currentPalette[3 * i + 2] = _currentPalette[3 * i + 0];
+ }
+ }
+
+ // color 71 is the same in both the overview and closeup scenes
+ // Converting it to greyscale makes the trees in the closeup look dull
+ for (int i = 71; i < 200; ++i) {
+ _currentPalette[3 * i + 0] = (_currentPalette[3 * i + 0] +
+ _currentPalette[3 * i + 1] +
+ _currentPalette[3 * i + 2]) / 3;
+ _currentPalette[3 * i + 1] = _currentPalette[3 * i + 0];
+ _currentPalette[3 * i + 2] = _currentPalette[3 * i + 0];
+ }
+ fadePalette(_currentPalette, delay);
+ // Make the font color white again
+ setPaletteIndex(254, 254, 254, 254);
+}
+
void Screen::fadeSpecialPalette(int palIndex, int startIndex, int size, int fadeTime) {
debugC(9, kDebugLevelScreen, "fadeSpecialPalette(%d, %d, %d, %d)", palIndex, startIndex, size, fadeTime);
assert(_vm->palTable1()[palIndex]);
diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h
index 5e3869d278..a60cdbd637 100644
--- a/engines/kyra/screen.h
+++ b/engines/kyra/screen.h
@@ -134,6 +134,8 @@ public:
void fadeFromBlack(int delay=0x54);
void fadeToBlack(int delay=0x54);
+ void k2IntroFadeToGrey(int delay=0x54);
+
void fadeSpecialPalette(int palIndex, int startIndex, int size, int fadeTime);
void fadePalette(const uint8 *palData, int delay);
diff --git a/engines/kyra/sequences_v2.cpp b/engines/kyra/sequences_v2.cpp
index 27b6064fb9..afda1091e6 100644
--- a/engines/kyra/sequences_v2.cpp
+++ b/engines/kyra/sequences_v2.cpp
@@ -49,7 +49,9 @@ void KyraEngine_v2::seq_playSequences(int startSeq, int endSeq) {
{1, "title.wsa", &KyraEngine_v2::seq_introTitle, 6, 10, 26, false, false},
{2, "over.cps", &KyraEngine_v2::seq_introOverview, 16, 30, 1, false, true},
{2, "library.cps", &KyraEngine_v2::seq_introLibrary, 16, 30, 1, false, true},
- {2, "hand.cps", &KyraEngine_v2::seq_introHand, 16, 90, 1, false, true}
+ {2, "hand.cps", &KyraEngine_v2::seq_introHand, 16, 90, 1, false, true},
+ {1, "point.wsa", &KyraEngine_v2::seq_introPoint, 16, 30, 1, false, true},
+ {1, "zanfaun.wsa", &KyraEngine_v2::seq_introZanFaun, 16, 90, 1, false, true}
};
assert(startSeq >= 0 && endSeq < ARRAYSIZE(sequences) && startSeq <= endSeq);
@@ -97,7 +99,9 @@ void KyraEngine_v2::seq_playSequences(int startSeq, int endSeq) {
seqDelay += _system->getMillis();
bool mayEndLoop = sequences[i].timeOut;
- while (!_quitFlag && !_skipFlag) {
+ // Skip the movie if esc is pressed or the mouse is clicked
+ // However, don't skip the menu movie, to match the behavior of the original interpreter
+ while ((!_quitFlag && !_skipFlag) || i == kSequenceTitle) {
uint32 startTime = _system->getMillis();
if (sequences[i].callback) {
@@ -140,63 +144,161 @@ void KyraEngine_v2::seq_playSequences(int startSeq, int endSeq) {
delete[] _activeChat;
}
+// FIXME: This part needs game dialogs, as it's not part of the intro, but
+// rather a game video. It has speech only in the CD version
+int KyraEngine_v2::seq_introZanFaun(int seqNum) {
+ debugC(9, kDebugLevelMain, "KyraEngine_v2::seq_introZanFaun(%i)", seqNum);
+
+ static const SequenceControl zanFaunWSAControl[] = {
+ {0, 6}, {1, 6}, {2, 6}, {3, 6},
+ {4, 6}, {5, 6}, {6, 6}, {7, 6},
+ {8, 6}, {9, 6}, {10, 6}, {11, 6},
+ {12, 6}, {13, 6}, {14, 6}, {15, 6},
+ {16, 6}, {17, 6}, {18, 6}, {19, 6},
+ {20, 6}, {21, 6}, {22, 6}, {23, 6},
+ {23, 6}, {22, 6}, {21, 6}, {20, 6},
+ {19, 6}, {18, 6}, {17, 6}, {16, 6},
+ {15, 6}, {14, 6}, {13, 6}, {12, 6},
+ {11, 6}, {10, 6}, {9, 6}, {8, 6},
+ {7, 6}, {6, 6}, {5, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {8, 6}, {9, 6}, {10, 6}, {-1, -1} };
+
+ switch (seqNum) {
+ case 0:
+ _sound->playTrack(8);
+ //XXX: palette stuff
+ //XXX: load dialogs
+ break;
+ case 1:
+ seq_loadWSA(1, "zanfaun.wsa", 9, 0, zanFaunWSAControl);
+ break;
+ case 0x294:
+ seq_waitForChatsToFinish();
+ seq_unloadWSA(1);
+ return 0;
+ default:
+ break;
+ }
+
+ return -1;
+}
+
+int KyraEngine_v2::seq_introPoint(int seqNum) {
+ debugC(9, kDebugLevelMain, "KyraEngine_v2::seq_introPoint(%i)", seqNum);
+
+ switch (seqNum) {
+ case 0:
+ _sound->playTrack(7);
+ break;
+ case 1:
+ seq_loadWSA(1, "point.wsa", 9);
+ seq_playIntroChat(11); // "Zanthia, youngest of the royal mystics has been selected"
+ break;
+ case 0x96:
+ seq_waitForChatsToFinish();
+ seq_unloadWSA(1);
+ return 0;
+ default:
+ break;
+ }
+
+ return -1;
+}
+
int KyraEngine_v2::seq_introHand(int seqNum) {
debugC(9, kDebugLevelMain, "KyraEngine_v2::seq_introHand(%i)", seqNum);
- static const SequenceControl hand1bWSAControl[] = {
+ // XXX: commented out to prevent compiler warnings
+ /*static const SequenceControl hand1bWSAControl[] = {
{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}, {7, 6},
{8, 6}, {9, 6}, {10, 6}, {11, 6}, {11, 12}, {12, 12}, {13, 12},
{12, 12}, {11, 12}, {-1, -1} };
static const SequenceControl hand1cWSAControl[] = {
{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {3, 6},
- {4, 6}, {5, 64}, {5, 6}, {-1, -1} };
+ {4, 6}, {5, 64}, {5, 6}, {-1, -1} };*/
static const SequenceControl hand2WSAControl[] = {
{0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
{0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
- {0, 6}, {1, 6}, {0, 6}, {1, 6}, {-1, -1} };
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6},
+ {0, 6}, {1, 6}, {0, 6}, {1, 6}, {0, 6}, {1, 6}, {-1, -1} };
static const SequenceControl hand3WSAControl[] = {
{0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
+ {0, 6}, {1, 6}, {2, 6}, {1, 6},
{0, 6}, {-1, -1} };
static const SequenceControl hand4WSAControl[] = {
{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
- {3, 6}, {2, 6}, {1, 6}, {-1, -1} };
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6},
+ {3, 6}, {2, 6}, {1, 6}, {0, 6},
+ {-1, -1} };
switch (seqNum) {
case 0:
_sound->playTrack(6);
- seq_playIntroChat(7);
//palette stuff
break;
case 1:
// XXX: these show as garbage. New frame encode?
- seq_loadWSA(1, "hand1a.wsa", 9);
+ /*seq_loadWSA(1, "hand1a.wsa", 9);
seq_loadWSA(2, "hand1b.wsa", 9, 0, hand1bWSAControl);
- seq_loadWSA(3, "hand1c.wsa", 9, 0, hand1cWSAControl);
+ seq_loadWSA(3, "hand1c.wsa", 9, 0, hand1cWSAControl);*/
+ seq_playIntroChat(7); // "Luckily, the Hand was experienced in these matters"
break;
case 0xc9:
// palette stuff
seq_loadWSA(4, "hand2.wsa", 9, 0, hand2WSAControl);
- seq_playIntroChat(8);
+ seq_waitForChatsToFinish();
+ seq_playIntroChat(8); // "and finally, a plan was approved"
break;
case 0x18b:
- seq_waitForChatsToFinish();
seq_loadWSA(5, "hand3.wsa", 9, 0, hand3WSAControl);
+ seq_waitForChatsToFinish();
+ seq_playIntroChat(9); // "which required a magic anchorstone"
break;
case 0x1f4:
- seq_waitForChatsToFinish();
seq_loadWSA(6, "hand4.wsa", 9, 0, hand4WSAControl);
+ seq_waitForChatsToFinish();
+ seq_playIntroChat(10); // "to be retrieved from the center of the world"
break;
- case 0x21c:
- seq_playIntroChat(10);
- break;
- case 0x276:
+ case 0x320:
seq_waitForChatsToFinish();
- seq_unloadWSA(1);
+ /*seq_unloadWSA(1);
seq_unloadWSA(2);
- seq_unloadWSA(3);
+ seq_unloadWSA(3);*/
seq_unloadWSA(4);
seq_unloadWSA(5);
seq_unloadWSA(6);
@@ -217,7 +319,7 @@ int KyraEngine_v2::seq_introLibrary(int seqNum) {
switch (seqNum) {
case 0:
_sound->playTrack(5);
- seq_playIntroChat(4);
+ seq_playIntroChat(4); // "The royal mystics are baffled"
//XXX: palette stuff
break;
case 1:
@@ -230,16 +332,18 @@ int KyraEngine_v2::seq_introLibrary(int seqNum) {
seq_loadWSA(2, "darm.wsa", 9);
break;
case 0x68:
- seq_playIntroChat(5);
+ seq_waitForChatsToFinish();
+ seq_playIntroChat(5); // "Every reference has been consulted"
break;
case 0xF0:
seq_waitForChatsToFinish();
seq_loadWSA(3, "library.wsa", 9);
break;
case 0x154:
+ seq_waitForChatsToFinish();
// palette stuff
seq_loadWSA(4, "marco.wsa", 9);
- seq_playIntroChat(6);
+ seq_playIntroChat(6); // "Even Marko and his new valet have been allowed"
break;
case 0x294:
seq_waitForChatsToFinish();
@@ -269,20 +373,23 @@ int KyraEngine_v2::seq_introOverview(int seqNum) {
seq_loadWSA(2, "over2.wsa", 9);
break;
case 120:
- seq_playIntroChat(0);
+ seq_playIntroChat(0); // "Kyrandia is disappearing!"
break;
case 200:
seq_waitForChatsToFinish();
// XXX: fade to grey
+ _screen->k2IntroFadeToGrey(40);
break;
case 201:
// XXX
break;
case 282:
+ seq_waitForChatsToFinish();
seq_loadWSA(3, "forest.wsa", 6, &KyraEngine_v2::seq_introOverviewForest);
- seq_playIntroChat(1);
+ seq_playIntroChat(1); // "Rock by rock..."
break;
case 434:
+ seq_waitForChatsToFinish();
seq_loadWSA(4, "dragon.wsa", 6, &KyraEngine_v2::seq_introOverviewDragon);
break;
case 540:
@@ -314,7 +421,7 @@ void KyraEngine_v2::seq_introOverviewForest(int currentFrame) {
seq_waitForChatsToFinish();
} else if(currentFrame == 12) {
delay(25);
- seq_playIntroChat(2);
+ seq_playIntroChat(2); // "...and tree by tree..."
}
}
@@ -322,7 +429,7 @@ void KyraEngine_v2::seq_introOverviewDragon(int currentFrame) {
debugC(9, kDebugLevelMain, "KyraEngine_v2::seq_introOverviewDragon(%i)", currentFrame);
if (currentFrame == 3)
- seq_playIntroChat(3);
+ seq_playIntroChat(3); // "Kyrandia ceases to exist!"
else if(currentFrame == 11)
seq_waitForChatsToFinish();
}
diff --git a/engines/kyra/text.cpp b/engines/kyra/text.cpp
index c187959476..58ce3c9d1e 100644
--- a/engines/kyra/text.cpp
+++ b/engines/kyra/text.cpp
@@ -307,7 +307,7 @@ void KyraEngine::characterSays(int vocFile, const char *chatStr, int8 charNum, i
if (textEnabled()) {
_animator->restoreAllObjectBackgrounds();
- _screen->copyRegion(12, _text->_talkMessageY, 12, 136, 296, _text->_talkMessageH, 2, 2);
+ _screen->copyRegion(12, _text->_talkMessageY, 12, 136, 308, _text->_talkMessageH, 2, 2);
_screen->hideMouse();
_text->printCharacterText(processedString, charNum, _characterList[charNum].x1);
@@ -326,12 +326,12 @@ void KyraEngine::characterSays(int vocFile, const char *chatStr, int8 charNum, i
if (textEnabled()) {
_animator->restoreAllObjectBackgrounds();
- _screen->copyRegion(12, 136, 12, _text->_talkMessageY, 296, _text->_talkMessageH, 2, 2);
+ _screen->copyRegion(12, 136, 12, _text->_talkMessageY, 308, _text->_talkMessageH, 2, 2);
_animator->preserveAllBackgrounds();
_animator->prepDrawAllObjects();
_screen->hideMouse();
- _screen->copyRegion(12, _text->_talkMessageY, 12, _text->_talkMessageY, 296, _text->_talkMessageH, 2, 0);
+ _screen->copyRegion(12, _text->_talkMessageY, 12, _text->_talkMessageY, 308, _text->_talkMessageH, 2, 0);
_screen->showMouse();
_animator->flagAllObjectsForRefresh();
_animator->copyChangedObjectsForward(0);
diff --git a/engines/lure/animseq.cpp b/engines/lure/animseq.cpp
index 7b65d2cf0b..39d74e5ec8 100644
--- a/engines/lure/animseq.cpp
+++ b/engines/lure/animseq.cpp
@@ -42,7 +42,7 @@ AnimAbortType AnimationSequence::delay(uint32 milliseconds) {
while (_system.getMillis() < delayCtr) {
while (events.pollEvent()) {
if (events.type() == Common::EVENT_KEYDOWN) {
- if (events.event().kbd.keycode == 27) return ABORT_END_INTRO;
+ if (events.event().kbd.keycode == Common::KEYCODE_ESCAPE) return ABORT_END_INTRO;
else return ABORT_NEXT_SCENE;
} else if (events.type() == Common::EVENT_LBUTTONDOWN)
return ABORT_NEXT_SCENE;
diff --git a/engines/lure/debug-input.cpp b/engines/lure/debug-input.cpp
deleted file mode 100644
index 9ec520e11d..0000000000
--- a/engines/lure/debug-input.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/* 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$
- * $Id$
- *
- */
-
-#include "lure/debug-input.h"
-#include "lure/luredefs.h"
-#include "lure/events.h"
-#include "lure/surface.h"
-#include "lure/screen.h"
-
-#ifdef LURE_DEBUG
-
-namespace Lure {
-
-bool get_string(char *buffer, uint32 maxSize, bool isNumeric, uint16 x, uint16 y) {
- Events &e = Events::getReference();
- buffer[0] = '\0';
-
- // Create surface for holding entered text
- Surface *s = new Surface((maxSize + 1) * FONT_WIDTH, FONT_HEIGHT);
-
- bool abortFlag = false;
- bool refreshFlag = true;
-
- while (!e.quitFlag && !abortFlag) {
- // Check for refreshing display of text
- if (refreshFlag) {
- uint16 strWidth = Surface::textWidth(buffer);
- s->empty();
- s->writeString(0, 0, buffer, false, DIALOG_TEXT_COLOUR);
- s->writeChar(strWidth, 0, '_', false, DIALOG_TEXT_COLOUR);
- s->copyToScreen(x, y);
-
- refreshFlag = false;
- }
-
- if (e.pollEvent()) {
- if (e.type() == Common::EVENT_KEYDOWN) {
- char ch = e.event().kbd.ascii;
- uint16 keycode = e.event().kbd.keycode;
-
- if ((ch == 13) || (keycode == 0x10f))
- break;
- else if (ch == 27)
- abortFlag = true;
- else if (ch == 8) {
- if (*buffer != '\0') {
- *((char *) buffer + strlen(buffer) - 1) = '\0';
- refreshFlag = true;
- }
- } else if ((ch >= ' ') && (strlen(buffer) < maxSize)) {
- if (((ch >= '0') && (ch <= '9')) || !isNumeric) {
- char *p = buffer + strlen(buffer);
- *p++ = ch;
- *p++ = '\0';
- refreshFlag = true;
- }
- }
- }
- }
- }
-
- delete s;
- if (e.quitFlag) abortFlag = true;
- return !abortFlag;
-}
-
-bool input_integer(Common::String desc, uint32 &value)
-{
- const int MAX_SIZE = 5;
- char buffer[MAX_SIZE + 1];
-
- uint16 width = DIALOG_EDGE_SIZE + Surface::textWidth(desc.c_str()) + FONT_WIDTH;
- uint16 totalWidth = width + FONT_WIDTH * (MAX_SIZE + 1) + DIALOG_EDGE_SIZE;
- uint16 totalHeight = FONT_HEIGHT + DIALOG_EDGE_SIZE * 2;
-
- Surface *s = new Surface(totalWidth, totalHeight);
- s->createDialog(true);
- s->writeString(DIALOG_EDGE_SIZE + 3, DIALOG_EDGE_SIZE, desc, false);
-
- uint16 xs = (FULL_SCREEN_WIDTH-totalWidth) / 2;
- uint16 ys = (FULL_SCREEN_HEIGHT-totalHeight) / 2;
- s->copyToScreen(xs, ys);
-
- bool result = get_string(&buffer[0], MAX_SIZE, true, xs+width, ys+DIALOG_EDGE_SIZE);
- Screen::getReference().update();
- if (!result || (buffer[0] == '\0'))
- return false;
-
- value = atoi(buffer);
- return true;
-}
-
-bool input_string(Common::String desc, char *buffer, uint32 maxSize)
-{
- uint16 width = Surface::textWidth(desc.c_str());
- if (width < FONT_WIDTH * maxSize) width = FONT_WIDTH * maxSize;
-
- Surface *s = new Surface(width + 2 * DIALOG_EDGE_SIZE, 2 * FONT_HEIGHT + 2 * DIALOG_EDGE_SIZE);
- s->createDialog();
- s->writeString(DIALOG_EDGE_SIZE, DIALOG_EDGE_SIZE, desc, false, DIALOG_TEXT_COLOUR);
-
- uint16 xs = (FULL_SCREEN_WIDTH-s->width()) / 2;
- uint16 ys = (FULL_SCREEN_HEIGHT-s->height()) / 2;
-
- s->copyToScreen(xs, ys);
- bool result = get_string(buffer, maxSize, true, xs + width, ys + DIALOG_EDGE_SIZE);
-
- Screen::getReference().update();
- return result;
-}
-
-} // end of namespace Lure
-
-#endif
diff --git a/engines/lure/debug-input.h b/engines/lure/debug-input.h
deleted file mode 100644
index aad2e58232..0000000000
--- a/engines/lure/debug-input.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 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$
- * $Id$
- *
- */
-
-#ifdef LURE_DEBUG
-#ifndef LURE_DEBUG_INPUT_H
-#define LURE_DEBUG_INPUT_H
-
-#include "common/stdafx.h"
-#include "common/str.h"
-#include "lure/surface.h"
-
-namespace Lure {
-
-bool get_string(char *buffer, uint32 maxSize, bool isNumeric, uint16 x, uint16 y);
-
-bool input_integer(Common::String desc, uint32 &value);
-
-bool input_string(Common::String desc, char *buffer, uint32 maxSize);
-
-} // End of namespace Lure
-
-#endif
-#endif
diff --git a/engines/lure/debug-methods.cpp b/engines/lure/debug-methods.cpp
deleted file mode 100644
index 520b29add6..0000000000
--- a/engines/lure/debug-methods.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/* 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$
- * $Id$
- *
- */
-
-#include "lure/debug-methods.h"
-#include "lure/luredefs.h"
-
-#include "lure/events.h"
-#include "lure/surface.h"
-#include "lure/screen.h"
-#include "lure/res.h"
-#include "lure/strings.h"
-#include "lure/room.h"
-
-#ifdef LURE_DEBUG
-
-namespace Lure {
-
-void showActiveHotspots() {
- char buffer[16384];
- char *lines[100];
- char *s = buffer;
- int numLines = 0;
- lines[0] = s;
- *s = '\0';
-
- Resources &resources = Resources::getReference();
- Mouse &mouse = Mouse::getReference();
- Events &events = Events::getReference();
- Screen &screen = Screen::getReference();
-
- HotspotList::iterator i = resources.activeHotspots().begin();
- for (; i != resources.activeHotspots().end(); ++i) {
- Hotspot &h = *i.operator*();
- lines[numLines++] = s;
-
- if (numLines == 16) {
- strcpy(s, "..more..");
- break;
- }
-
- sprintf(s, "%x", h.hotspotId());
- s += strlen(s);
-
- sprintf(s, "h pos=(%d,%d,%d) size=(%d,%d) - ",
- h.roomNumber(), h.x(), h.y(), h.width(), h.height());
- s += strlen(s);
-
- uint16 nameId = h.nameId();
- if (nameId != 0) {
- StringData::getReference().getString(nameId, s, NULL, NULL);
- s += strlen(s);
- }
- ++s;
- }
-
- Surface *surface = Surface::newDialog(300, numLines, (const char**)lines);
- mouse.cursorOff();
- surface->copyToScreen(10, 40);
- events.waitForPress();
- screen.update();
- mouse.cursorOn();
- delete surface;
-}
-
-void showRoomHotspots() {
- char buffer[16384];
- char *lines[100];
- char *s = buffer;
- int numLines = 0;
- lines[0] = s;
- *s = '\0';
-
- Resources &resources = Resources::getReference();
- Mouse &mouse = Mouse::getReference();
- Events &events = Events::getReference();
- Screen &screen = Screen::getReference();
- uint16 roomNumber = Room::getReference().roomNumber();
-
- HotspotDataList::iterator i = resources.hotspotData().begin();
- for (; i != resources.hotspotData().end(); ++i) {
- HotspotData &h = *i.operator*();
- if (h.roomNumber == roomNumber) {
- lines[numLines++] = s;
-
- sprintf(s, "%x", h.hotspotId);
- s += strlen(s);
-
- sprintf(s, "h pos=(%d,%d) size=(%d,%d) - ",
- h.startX, h.startY, h.width, h.height);
- s += strlen(s);
-
- uint16 nameId = h.nameId;
- if (nameId != 0) {
- StringData::getReference().getString(nameId, s, NULL, NULL);
- s += strlen(s);
- }
- ++s;
- }
- }
-
- Surface *surface = Surface::newDialog(300, numLines, (const char**)lines);
- mouse.cursorOff();
- surface->copyToScreen(10, 40);
- events.waitForPress();
- screen.update();
- mouse.cursorOn();
- delete surface;
-}
-
-
-} // end of namespace Lure
-
-#endif
diff --git a/engines/lure/debug-methods.h b/engines/lure/debug-methods.h
deleted file mode 100644
index 43b77d9191..0000000000
--- a/engines/lure/debug-methods.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 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$
- * $Id$
- *
- */
-
-#ifdef LURE_DEBUG
-#ifndef LURE_DEBUG_METHODS_H
-#define LURE_DEBUG_METHODS_H
-
-#include "common/stdafx.h"
-#include "lure/surface.h"
-
-namespace Lure {
-
-void showActiveHotspots();
-
-void showRoomHotspots();
-
-} // End of namespace Lure
-
-#endif
-#endif
diff --git a/engines/lure/debugger.cpp b/engines/lure/debugger.cpp
index 953e5643b7..5d1198c360 100644
--- a/engines/lure/debugger.cpp
+++ b/engines/lure/debugger.cpp
@@ -25,7 +25,10 @@
#include "common/stdafx.h"
#include "common/config-manager.h"
+#include "common/endian.h"
+#include "lure/luredefs.h"
#include "lure/debugger.h"
+#include "lure/decode.h"
#include "lure/res.h"
#include "lure/res_struct.h"
#include "lure/room.h"
@@ -44,6 +47,7 @@ Debugger::Debugger(): GUI::Debugger() {
DCmd_Register("hotspots", WRAP_METHOD(Debugger, cmd_hotspots));
DCmd_Register("hotspot", WRAP_METHOD(Debugger, cmd_hotspot));
DCmd_Register("room", WRAP_METHOD(Debugger, cmd_room));
+ DCmd_Register("showanim", WRAP_METHOD(Debugger, cmd_showAnim));
}
static int strToInt(const char *s) {
@@ -115,9 +119,13 @@ bool Debugger::cmd_listRooms(int argc, const char **argv) {
DebugPrintf("Available rooms are:\n");
for (RoomDataList::iterator i = rooms.begin(); i != rooms.end(); ++i) {
RoomData *room = *i;
- strings.getString(room->roomNumber, buffer);
- // DEBUG: Explictly note the second drawbridge room as "Alt" for now
- if (ctr == 42) { strcat(buffer, " (alt)"); }
+ // Explictly note the second drawbridge room as "Alt"
+ if (room->roomNumber == 49) {
+ strings.getString(47, buffer);
+ strcat(buffer, " (alt)");
+ } else {
+ strings.getString(room->roomNumber, buffer);
+ }
DebugPrintf("#%d - %s", room->roomNumber, buffer);
@@ -134,17 +142,6 @@ bool Debugger::cmd_listRooms(int argc, const char **argv) {
DebugPrintf("\n");
DebugPrintf("Current room: %d\n", Room::getReference().roomNumber());
- Resources &res = Resources::getReference();
- HotspotDataList &list = res.hotspotData();
- for (HotspotDataList::iterator i = list.begin(); i != list.end(); ++i)
- {
- HotspotData *data = *i;
- strings.getString(data->nameId, buffer);
-
- DebugPrintf("%xh - %s\n", data->hotspotId, buffer);
- }
- DebugPrintf("\n");
-
return true;
}
@@ -340,13 +337,13 @@ bool Debugger::cmd_hotspot(int argc, const char **argv) {
} else if (strcmp(argv[2], "activate") == 0) {
// Activate the hotspot
res.activateHotspot(hs->hotspotId);
- hs->flags &= !HOTSPOTFLAG_20;
+ hs->flags &= !HOTSPOTFLAG_MENU_EXCLUSION;
DebugPrintf("Activated\n");
} else if (strcmp(argv[2], "deactivate") == 0) {
// Activate the hotspot
res.deactivateHotspot(hs->hotspotId);
- hs->flags |= HOTSPOTFLAG_20;
+ hs->flags |= HOTSPOTFLAG_MENU_EXCLUSION;
DebugPrintf("Deactivated\n");
} else {
@@ -377,6 +374,8 @@ bool Debugger::cmd_hotspot(int argc, const char **argv) {
return true;
}
+const char *directionList[5] = {"UP", "DOWN", "LEFT", "RIGHT", "NONE"};
+
bool Debugger::cmd_room(int argc, const char **argv) {
Resources &res = Resources::getReference();
StringData &strings = StringData::getReference();
@@ -407,8 +406,7 @@ bool Debugger::cmd_room(int argc, const char **argv) {
RoomExitHotspotList &exits = room->exitHotspots;
if (exits.empty())
DebugPrintf(" none\n");
- else
- {
+ else {
RoomExitHotspotList::iterator i;
for (i = exits.begin(); i != exits.end(); ++i) {
RoomExitHotspotData *rec = *i;
@@ -420,7 +418,127 @@ bool Debugger::cmd_room(int argc, const char **argv) {
DebugPrintf("\n");
}
- DebugPrintf("\n");
+ DebugPrintf("Room exits:");
+ if (room->exits.empty())
+ DebugPrintf(" none\n");
+ else {
+ RoomExitList::iterator i2;
+ for (i2 = room->exits.begin(); i2 != room->exits.end(); ++i2) {
+ RoomExitData *rec2 = *i2;
+
+ DebugPrintf("\nExit - (%d,%d)-(%d,%d) Dest=%d,(%d,%d) Dir=%s Sequence=%xh",
+ rec2->xs, rec2->ys, rec2->xe, rec2->ye, rec2->roomNumber,
+ rec2->x, rec2->y, directionList[rec2->direction], rec2->sequenceOffset);
+ }
+
+ DebugPrintf("\n");
+ }
+
+ return true;
+}
+
+bool Debugger::cmd_showAnim(int argc, const char **argv) {
+ Resources &res = Resources::getReference();
+ if (argc < 2) {
+ DebugPrintf("showAnim animId [[frame_width frame_height] | list]\n");
+ return true;
+ }
+
+ // Get the animation Id
+ int animId = strToInt(argv[1]);
+ HotspotAnimData *data = res.getAnimation(animId);
+ if (data == NULL) {
+ DebugPrintf("No such animation Id exists\n");
+ return true;
+ }
+
+ // Figure out the total size of the animation - this will be used for guestimating
+ // frame sizes, or validating that a specified frame size is correct
+ MemoryBlock *src = Disk::getReference().getEntry(data->animId);
+
+ int numFrames = READ_LE_UINT16(src->data());
+ uint16 *headerEntry = (uint16 *) (src->data() + 2);
+ assert((numFrames >= 1) && (numFrames < 100));
+
+ // Calculate total needed size for output and create memory block to hold it
+ uint32 totalSize = 0;
+ for (uint16 ctr = 0; ctr < numFrames; ++ctr, ++headerEntry) {
+ totalSize += (READ_LE_UINT16(headerEntry) + 31) / 32;
+ }
+ totalSize = (totalSize + 0x81) << 4;
+ MemoryBlock *dest = Memory::allocate(totalSize);
+
+ uint32 srcStart = (numFrames + 1) * sizeof(uint16) + 6;
+ uint32 destSize = AnimationDecoder::decode_data(src, dest, srcStart) - 0x40;
+
+ // Figure out the frame size
+ int frameSize;
+
+ if ((data->flags & PIXELFLAG_HAS_TABLE) != 0) {
+ // Table based animation, so get frame size from frame 1 offset
+ frameSize = READ_LE_UINT16(src->data());
+ } else {
+ // Get frame size from dividing uncompressed size by number of frames
+ frameSize = destSize / numFrames;
+ }
+
+ // Free up the data
+ delete src;
+ delete dest;
+
+ int width, height;
+
+ if (argc == 4) {
+ // Width and height specified
+ width = strToInt(argv[2]);
+ height = strToInt(argv[3]);
+
+ if ((width * height) != (frameSize * 2)) {
+ DebugPrintf("Warning: Total size = %d, Frame size (%d,%d) * %d frames = %d bytes\n",
+ destSize, width, height, numFrames, width * height * numFrames / 2);
+ }
+ } else {
+ // Guestimate a frame size
+ frameSize = destSize / numFrames;
+
+ // Figure out the approximate starting point of a width 3/4 the frame size
+ width = frameSize * 3 / 4;
+
+ bool descFlag = (argc == 3);
+ if (descFlag) DebugPrintf("Target size = %d\n", frameSize * 2);
+
+ while ((width > 0) && (descFlag || (((frameSize * 2) % width) != 0))) {
+ if (((frameSize * 2) % width) == 0)
+ DebugPrintf("Frame size (%d,%d) found\n", width, frameSize * 2 / width);
+ --width;
+ }
+
+ if (argc == 3) {
+ DebugPrintf("Done\n");
+ return true;
+ } else if (width == 0) {
+ DebugPrintf("Total size = %d, # frames = %d, frame Size = %d - No valid frame dimensions\n",
+ destSize, numFrames, frameSize);
+ return true;
+ }
+
+ height = (frameSize * 2) / width;
+ DebugPrintf("# frames = %d, guestimated frame size = (%d,%d)\n",
+ numFrames, width, height);
+ }
+
+ // Bottle object is used as a handy hotspot holder that doesn't have any
+ // tick proc behaviour that we need to worry about
+ Hotspot *hotspot = res.activateHotspot(BOTTLE_HOTSPOT_ID);
+ hotspot->setLayer(0xfe);
+ hotspot->setSize(width, height);
+
+ Hotspot *player = res.activateHotspot(PLAYER_ID);
+ hotspot->setColourOffset(player->resource()->colourOffset);
+
+ hotspot->setAnimation(animId);
+
+ DebugPrintf("Done\n");
return true;
}
diff --git a/engines/lure/debugger.h b/engines/lure/debugger.h
index 55a381cca0..5c36bda13e 100644
--- a/engines/lure/debugger.h
+++ b/engines/lure/debugger.h
@@ -47,6 +47,7 @@ protected:
bool cmd_hotspots(int argc, const char **argv);
bool cmd_hotspot(int argc, const char **argv);
bool cmd_room(int argc, const char **argv);
+ bool cmd_showAnim(int argc, const char **argv);
};
} // End of namespace Lure
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index 4b2da03aa9..d072a009d5 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -27,6 +27,7 @@
#include "base/plugins.h"
+#include "common/advancedDetector.h"
#include "common/endian.h"
#include "common/file.h"
#include "common/fs.h"
@@ -77,24 +78,11 @@ static const PlainGameDescriptor lure_list[] = {
using namespace Lure;
GameList Engine_LURE_gameIDList() {
- GameList games;
- const PlainGameDescriptor *g = lure_list;
-
- while (g->gameid) {
- games.push_back(*g);
- g++;
- }
- return games;
+ return GameList(lure_list);
}
GameDescriptor Engine_LURE_findGameID(const char *gameid) {
- const PlainGameDescriptor *g = lure_list;
- while (g->gameid) {
- if (0 == scumm_stricmp(gameid, g->gameid))
- break;
- g++;
- }
- return GameDescriptor(g->gameid, g->description);
+ return Common::AdvancedDetector::findGameID(gameid, lure_list);
}
GameList Engine_LURE_detectGames(const FSList &fslist) {
diff --git a/engines/lure/disassembly/LURE.ASM b/engines/lure/disassembly/LURE.ASM
deleted file mode 100644
index af0ae8af7d..0000000000
--- a/engines/lure/disassembly/LURE.ASM
+++ /dev/null
@@ -1,39757 +0,0 @@
-lure.asm Sourcer v6.09 17-Nov- 5 5:53 pm Page 1
-
-
- PAGE 59,132
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;ÛÛ ÛÛ
- ;ÛÛ LURE ÛÛ
- ;ÛÛ ÛÛ
- ;ÛÛ Created: 23-Jun-95 ÛÛ
- ;ÛÛ Passes: 9 Analysis Options on: QRSX ÛÛ
- ;ÛÛ Copyright Revolution Software 1990-1992 ÛÛ
- ;ÛÛ ÛÛ
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
- .err Target Assembler set to NONE, re-assembly not recommended
-
-
-VGA_SEGMENT equ 0a000h
-SCREEN_WIDTH equ 320
-SCREEN_HEIGHT equ 200
-
-RECT_SIZE equ 32
-RECTANGLE_SIZE equ 32*32
-NUM_HORIZ_RECTS equ 10
-NUM_VERT_RECTS equ 6
-FULL_HORIZ_RECTS equ 18
-FULL_VERT_RECTS equ 14
-MAX_NUM_LAYERS equ 4
-
-ROOM_PATHS_WIDTH equ 40
-ROOM_PATHS_HEIGHT equ 24
-DECODED_PATHS_WIDTH equ 42
-DECODED_PATHS_HEIGHT equ 26
-
-WRITE_BUFFER_SIZE equ 0f010h
-FILE_BUFFER_SIZE equ 0600h
-ENTRY_READ_BUFFER equ 80h
-VIDEO_STYLE_VGA equ 1
-VIDEO_STYLE_EGA equ 2
-TIMER_TICKS_MAX equ 2EE0h
-MUSIC_NOTE equ 80h
-MUSIC_NOTE_OFF equ 7fh
-MUSIC_NOTE_VISIBLE equ 40h
-NOTE_DISPLAY_ADDR equ 185*SCREEN_WIDTH ; (A000:E740) line #186 on screen
-NOTE_IMAGE_WIDTH equ 14
-NOTE_IMAGE_HEIGHT equ 14
-
-MENUBAR_Y_SIZE equ 8
-MENUBAR_BLOCK_SIZE equ MENUBAR_Y_SIZE*SCREEN_WIDTH
-MENUITEM_NUM_MENUS equ 4
-
-STATUS_VIDEO_MODE_SET equ 1
-STATUS_UNKNOWN equ 2
-STATUS_TIMER_SET equ 4
-STATUS_CTRL_BREAK_SET equ 8
-STATUS_CRITICAL_SET equ 10h
-STATUS_UNKNOWN2 equ 20h
-STATUS_KEYBOARD_SET equ 40h
-STATUS_MOUSE_HANDLER_SET equ 80h
-
-SYS_HAS_FLOPPY_DRIVE equ 80h
-
-CURSOR_ARROW equ 0
-CURSOR_DISK equ 1
-CURSOR_TIME_UP equ 2
-CURSOR_TIME_UP_RIGHT equ 3
-CURSOR_TIME_RIGHT equ 4
-CURSOR_TIME_DOWN_RIGHT equ 5
-CURSOR_TIME_DOWN equ 6
-CURSOR_TIME_DOWN_LEFT equ 7
-CURSOR_TIME_LEFT equ 8
-CURSOR_TIME_UP_LEFT equ 9
-CURSOR_CROSS equ 10
-CURSOR_ARROW_UP equ 11
-CURSOR_ARROW_DOWN equ 12
-CURSOR_ARROW_LEFT equ 13
-CURSOR_ARROW_RIGHT equ 14
-CURSOR_CAMERA equ 15
-CURSOR_TALK equ 16
-CURSOR_MENUBAR_AREA equ 17
-CURSOR_ARROW_UP2 equ 18
-CURSOR_ARROW_DOWN2 equ 19
-CURSOR_ARROW_LEFT2 equ 20
-CURSOR_ARROW_RIGHT2 equ 21
-CURSOR_VOICE equ 22
-CURSOR_AXE_1 equ 23
-CURSOR_AXE_2 equ 24
-CURSOR_AXE_3 equ 25
-
-NUM_ACTIONS equ 25
-
-NUM_ANIMATION_SLOTS equ 2dh
-ANIMATION_SLOT_SIZE equ 29h
-
-NUM_PAUSED_CHARS_SLOTS equ 14h
-PAUSED_CHAR_SLOT_SIZE equ 8
-PC_SRC_CHAR_ID equ 0
-PC_DEST_CHAR_ID equ 2
-PC_COUNTER equ 4
-PC_HOTSPOT_PTR equ 6
-
-ACTION_GET equ 1
-ACTION_PUSH equ 3
-ACTION_PULL equ 4
-ACTION_OPERATE equ 5
-ACTION_OPEN equ 6
-ACTION_CLOSE equ 7
-ACTION_LOCK equ 8
-ACTION_UNLOCK equ 9
-ACTION_USE equ 10
-ACTION_GIVE equ 11
-ACTION_TALK_TO equ 12
-ACTION_TELL equ 13
-ACTION_BUY equ 14
-ACTION_LOOK equ 15
-ACTION_LOOK_AT equ 16
-ACTION_LOOK_THROUGH equ 17
-ACTION_ASK equ 18
-ACTION_EAT equ 19
-ACTION_DRINK equ 20
-ACTION_STATUS equ 21
-ACTION_GO_TO equ 22
-ACTION_RETURN equ 23
-ACTION_BRIBE equ 24
-ACTION_EXAMINE equ 25
-
-FLAG_RESTART equ 10h
-FLAG_CAUGHT equ 20h
-FLAG_RESTORERESTART equ 40h
-FLAG_HAS_FLOPPY_DRIVE equ 80h
-
-
-; Animation slot record constants
-ANIM_X equ 0
-ANIM_Y equ 2
-ANIM_WIDTH equ 4
-ANIM_HEIGHT equ 6
-ANIM_FRAME_OFFSET equ 8
-ANIM_SEGMENT equ 0Ah
-ANIM_LAYER equ 0Ch
-ANIM_FLAGS equ 0Dh
-ANIM_ROOM_NUM equ 0Eh
-ANIM_CAN_UNLOAD equ 10h
-ANIM_TICK_PROC equ 11h
-ANIM_WIDTH_COPY equ 13h
-ANIM_HEIGHT_COPY equ 15h
-ANIM_Y_CORRECTION equ 17h
-ANIM_HOTSPOT_OFFSET equ 19h
-ANIM_HOTSPOT_ID equ 1Bh
-ANIM_SKIP equ 1Dh
-ANIM_VOICE_CHAR_ID equ 1Eh
-ANIM_CTR equ 20h
-ANIM_CHAR_RECT_Y equ 22h
-ANIM_VOICE_CTR equ 24h
-ANIM_DIRECTION equ 26h
-ANIM_WALK_FLAG equ 27h
-ANIM_START_COLOUR equ 28h
-
-; Hotspot header record constants
-HOTSPOT_TABLE_ENTRY_SIZE equ 9
-HSH_OFFSET equ 0
-HSH_NAME equ 2
-HSH_DESC equ 4
-HSH_DESC_2 equ 6
-HSH_FLAGS equ 8
-
-; Hotspot record constants
-
-HS_DEST2_SET equ -1
-HS_DEST2_X equ -5
-HS_DEST2_Y equ -3
-HS_ACTIONS equ 0
-HS_FLAGS1 equ 3
-HS_ACTIONS_OFFSET equ 04h
-HS_ROOM_NUM equ 06h
-HS_LOAD_FLAG equ 08h
-HS_LOAD_OFFSET equ 09h
-HS_ANIM_OFFSET equ 0Bh
-HS_X equ 0Dh
-HS_Y equ 0Fh
-HS_WIDTH equ 11h
-HS_HEIGHT equ 13h
-HS_LAYER equ 15h
-HS_FLAGS2 equ 16h
-HS_TICK_PROC equ 17h
-HS_WIDTH_COPY equ 19h
-HS_HEIGHT_COPY equ 1Bh
-HS_Y_CORRECTION equ 1Dh
-HS_FRAME_CTR equ 1Fh
-HS_PIXEL_OFFSET equ 21h
-HS_START_COLOUR equ 23h
-HS_SCRIPT_OFFSET equ 24h
-HS_MOVEMENT_OFFSET equ 24h
-HS_STEP_CTR equ 26h
-HS_FRAME_OFFSET equ 28h
-HS_ACTION_CTR equ 2Ah
-HS_V2B equ 2Bh
-HS_HOTSPOT_SCRIPT_ID equ 2Dh
-HS_USE_HOTSPOT_ID equ 2Fh
-HS_V32 equ 32h
-HS_V33 equ 33h
-HS_TALK_X equ 35h
-HS_TALK_Y equ 36h
-HS_TALK_COUNTDOWN equ 37h
-HS_TALK_CHAR_ID equ 39h
-HS_RESPONSE_ID equ 3Ch
-HS_V3E equ 3Eh
-HS_V40 equ 40h
-HS_DELAY_CTR equ 42h
-HS_CHAR_MODE equ 44h
-HS_TICK_SCRIPT_OFFSET equ 45h
-SCRIPT_HOTSPOT_ID equ 47h
-HS_PATHFIND_COVERED equ 49h
-HS_PAUSE_CTR equ 4Ah
-HS_BLOCKED_FLAG equ 4Ch
-HS_V4D equ 4Dh
-HS_START_ROOM_NUM equ 4Eh
-HS_DIRECTION equ 50h
-HS_ACTION_HOTSPOT equ 50h
-HS_DEST_HOTSPOT equ 52h
-HS_DEST_X equ 54h
-HS_DEST_Y equ 56h
-HS_V58 equ 58h
-HS_MOVEMENT_SRC_OFFSET equ 5Ah
-HS_SUPPORT_TABLE equ 5Ch
-HS_BLOCKED_SUPPORT_OFFSET equ 5Eh
-HS_EXIT_CTR equ 60h
-HS_ACTION_OFFSET equ 61h
-HS_FIRST_ACTION_OFFSET equ 63h
-
-; Hotspot FLAGS1 flags
-HOTSPOTFLAG_HIGHLIGHTED equ 0x80
-HOTSPOTFLAG_SKIP equ 0x40
-HOTSPOTFLAG_20 equ 0x20
-
-; Pixel record constants
-PIXEL_DISK_ID equ 0
-PIXEL_FLAGS equ 2
-PIXEL_DATA_SEGMENT equ 3
-PIXEL_DATA_SIZE equ 5
-PIXEL_FRAME_SIZE equ 7
-PIXEL_MOVEREC_UP equ 9
-PIXEL_MOVEREC_DOWN equ 0Bh
-PIXEL_MOVEREC_LEFT equ 0Dh
-PIXEL_MOVEREC_RIGHT equ 0Fh
-PIXEL_FRAMENUM_UP equ 11h
-PIXEL_FRAMENUM_DOWN equ 12h
-PIXEL_FRAMENUM_LEFT equ 13h
-PIXEL_FRAMENUM_RIGHT equ 14h
-
-PIXELFLAG_HAS_TABLE equ 4
-
-NOONE_HOTSPOT_ID equ 3E7h
-PLAYER_HOTSPOT_ID equ 3E8h
-RATPOUCH_HOTSPOT_ID equ 3E9h
-SKORL_HOTSPOT_ID equ 3EAh
-GOEWIN_HOTSPOT_ID equ 3EFh
-FIRST_OBJECT_HOTSPOT_ID equ 408h
-START_EXIT_HOTSPOT_ID equ 2710h
-BOTTLE_HOTSPOT_ID equ 2710h
-START_NONVISUAL_HOTSPOT_ID equ 7530h
-
-
-; Room exit record constants
-ROOMEXIT_RECORD_SIZE equ 14
-ROOMEXIT_X_START equ 0
-ROOMEXIT_X_END equ 2
-ROOMEXIT_Y_START equ 4
-ROOMEXIT_Y_END equ 6
-ROOMEXIT_CURSOR_NUM equ 8
-ROOMEXIT_HOTSPOT_ID equ 10
-ROOMEXIT_DEST_ROOM equ 12
-
-; Room exit hotspot record constants
-REHS_RECORD_SIZE equ 11h
-REHS_HOTSPOT1_ID equ 0
-REHS_HOTSPOT1_CURRENT_FRAME equ 2
-REHS_HOTSPOT1_DEST_FRAME equ 3
-REHS_HOTSPOT2_ID equ 6
-REHS_HOTSPOT2_CURRENT_FRAME equ 8
-REHS_HOTSPOT2_DEST_FRAME equ 9
-REHS_EXIT_BLOCKED equ 0Ch
-REHS_HOTSPOT1_OFFSET equ 0Dh
-REHS_HOTSPOT2_OFFSET equ 0Fh
-
-; Room header record constants
-RH_OFFSET equ 0
-RH_ROOM_NUM equ 2
-RH_DESC_ID equ 4
-RH_FLAGS equ 8
-RH_TABLE_ENTRY_SIZE equ 9
-
-; Room record constants
-ROOM_NUM_LAYERS equ 8
-ROOM_FIRST_LAYER equ 9
-ROOM_SEQUENCE_OFFSET equ 11h
-ROOM_ENTRY_TIME equ 13h
-ROOM_V17 equ 17h
-ROOM_BOUNDS_INDEX equ 18h
-ROOM_X_START equ 19h
-ROOM_X_END equ 1Bh
-ROOM_EXITS_START equ 1Dh
-
-; Room exit constants for room exit list within room records
-ROOMREC_EXIT_X_START equ 0
-ROOMREC_EXIT_X_END equ 2
-ROOMREC_EXIT_Y_START equ 4
-ROOMREC_EXIT_Y_END equ 6
-ROOMREC_EXIT_SEQUENCE equ 8
-ROOMREC_EXIT_ROOM_NUM equ 10
-ROOMREC_EXIT_NEW_X equ 12
-ROOMREC_EXIT_NEW_Y equ 14
-
-; Room number constants
-ROOMNUM_TOWN_HALL equ 1fh
-ROOMNUM_MIDDLE_STREET equ 0Eh
-ROOMNUM_VILLAGE_SHOP equ 23h
-ROOMNUM_WINE_CELLAR equ 2Ah
-ROOMNUM_DINING_HALL equ 2Dh
-
-NUM_DELAY_ENTRIES equ 28h
-DELAY_ENTRY_SIZE equ 7
-
-DIR_UP equ 80h
-DIR_DOWN equ 40h
-DIR_LEFT equ 20h
-DIR_RIGHT equ 10h
-
-FACING_UP equ 0
-FACING_DOWN equ 1
-FACING_LEFT equ 2
-FACING_RIGHT equ 3
-
-FACING2_LEFT equ 1
-FACING2_RIGHT equ 2
-FACING2_UP equ 4
-FACING2_DOWN equ 8
-
-; Movement record constants
-MOVEMENT_FRAME_NUM equ 0
-MOVEMENT_X_CHANGE equ 2
-MOVEMENT_Y_CHANGE equ 4
-MOVEMENT_REC_SIZE equ 6
-
-; Talk constants
-TALK_PRE_SEQUENCE equ 0
-TALK_DESC_ID equ 2
-TALK_POST_SEQUENCE equ 4
-
-; Talk state constants
-TALK_START equ 0ffh
-TALK_SELECT equ 2
-TALK_UNKNOWN equ 3
-TALK_MAGIC_ID equ 424h
-
-TALK_DIALOG_WIDTH equ 128
-
-; Player actions used in player_tick_proc
-CURRENT_ACTION_RECORD_SIZE equ 5
-CURRENT_ACTION_SUPPORT_TABLE equ 1
-CURRENT_ACTION_ROOM_NUM equ 3
-
-CHAR_ACTION_NONE equ 0
-CHAR_ACTION_START_WALK equ 1
-CHAR_ACTION_DISPATCH_ACTION equ 2
-CHAR_ACTION_EXEC_SCRIPT equ 3
-CHAR_ACTION_PROCESSING_PATH equ 4
-CHAR_ACTION_CONTINUE_WALK equ 5
-
-PATHFIND_CHARACTER_ID equ 2
-PATHFIND_HS4C equ 4
-PATHFIND_DEST_STATE equ 5
-PATHFIND_DEST_X equ 6
-PATHFIND_DEST_Y equ 8
-PATHFIND_X equ 0Ch
-PATHFIND_Y equ 0Ah
-PATHFIND_0E equ 0Eh
-PATHFIND_DEST_X2 equ 10h
-PATHFIND_DEST_OCCUPIED equ 12h
-PATHFIND_CELL_POPULATED equ 13h
-PATHFIND_X_CHANGE1 equ 14h
-PATHFIND_Y_CHANGE1 equ 16h
-PATHFIND_X_CHANGE2 equ 18h
-PATHFIND_Y_CHANGE2 equ 1Ah
-
-WALKTO_RECORD_SIZE equ 6
-WALKTO_HOTSPOT_ID equ 0
-WALKTO_X equ 2
-WALKTO_Y equ 4
-
-; State values for the cursor_state variable
-CURSORSTATE_NONE equ 0
-CURSORSTATE_ACTION equ 1
-CURSORSTATE_SEQUENCE equ 2
-CURSORSTATE_TALK equ 3
-CURSORSTATE_BUMPED equ 4
-
-; Character modes
-CHARMODE_NONE equ 0
-CHARMODE_1 equ 1
-CHARMODE_IDLE equ 2
-CHARMODE_PAUSED equ 3
-CHARMODE_4 equ 4
-CHARMODE_CONVERSING equ 5
-CHARMODE_6 equ 6
-CHARMODE_7 equ 7
-CHARMODE_8 equ 8
-
-; Pathfinder results
-PF_OK equ 1
-PF_DEST_OCCUPIED equ 2
-
-; HS_BLOCKED_FLAG states
-BS_NONE equ 0
-BS_INITIAL equ 1
-BS_FINAL equ 2
-
-; Miscellaneous constants
-TALK_COUNTDOWN_MAX equ 40
-
-; Equates for variables in segment allocated at runtime
-ask_num_names equ 30D4h
-ask_name_list equ 30D6h
-data_31e4 equ 31E4h
-saved_zero equ 3350h
-saved_room_number equ 3356h
-saved_hotspot_id equ 3358h
-saved_num_inventory_items equ 3360h
-saved_menu_items_proc equ 3368h
-saved_menubar_block_size equ 336ah
-saved_display_character_proc eqy 336ch
-saved_char_width equ 336eh
-saved_font2_segment equ 3370h
-saved_screen_width equ 3374h
-saved_data_segment2 equ 3376h
-saved_room_number2 equ 3379h
-saved_font_segment equ 337bh
-saved_num_groats equ 337eh
-
- ;------------------------------------------------------------ seg_code ----
-
- seg_code segment byte public
- assume cs:seg_code , ds:seg_code , ss:stack_seg_k
-
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;
- ; Program Entry Point
- ;
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-
- lure proc far
-
-273F:0000 start:
-
-273F:0000 B8 31E4 mov ax, data_seg
-273F:0003 8E D8 mov ds, ax
-273F:0005 E8 04AE call initialise ; (04B6)
-273F:0008 loc_5: ; xref 273F:0171
-273F:0008 úB8 23FC mov ax, offset startup_sequence
-273F:000B E8 3E26 call sequence_execute
-273F:000E 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:0013 E8 1F49 call show_disk_cursor
-273F:0016 EB 59 jmp short loc_10 ; (0071)
-
-; The following code is jumped to if the game is to be restarted or the room changes
-
-273F:0018 loc_6: ; xref 273F:0135, 0149
-273F:0018 úC6 06 38B0 01 mov data_781, 1
-273F:001D E8 1F3F call show_disk_cursor
-273F:0020 FF 16 0766 call word ptr ds:[fade_out_proc]
-273F:0024 E8 4818 call clear_sequence_delay_table
-273F:0027 E8 10BE call hotspots_unload ; Disable unneeded hotspots
-273F:002A 83 3E BAAD 01 cmp room_exit_animation_flag, 1
-273F:002F 72 0A jb loc_8 ; Jump if below
-273F:0031 75 05 jnz loc_7 ; Jump if not zero
-273F:0033 E8 A576 call display_chute_animation
-273F:0036 EB 03 jmp short loc_8 ; (003B)
-273F:0038 loc_7: ; xref 273F:0031
-273F:0038 E8 A680 call display_barrel_animation
-273F:003B loc_8: ; xref 273F:002F, 0036
-273F:003B C7 06 BAAD 0000 mov room_exit_animation_flag, 0
-273F:0041 C6 06 9837 00 mov talk_dialog_active, 0
-273F:0046 C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
-273F:004C A1 9832 mov ax, room_number
-273F:004F E8 0C98 call get_room_resource_pointer2
-273F:0052 A1 B0AA mov ax, game_time_ctr
-273F:0055 89 44 13 mov [si+ROOM_EXIT_TIME], ax
-273F:0058 F7 06 BA23 FFFF test new_room_number, 0FFFFh
-273F:005E 74 08 jz loc_9 ; Jump if zero
-273F:0060 A1 BA23 mov ax, new_room_number
-273F:0063 A3 9832 mov room_number, ax
-273F:0066 EB 09 jmp short loc_10 ; (0071)
-273F:0068 loc_9: ; xref 273F:005E
-273F:0068 A1 982C mov ax, new_room_number_2
-273F:006B A3 9832 mov room_number, ax
-273F:006E E8 6004 call player_change_room ; Position player in new room
-
-273F:0071 loc_10: ; xref 273F:0016, 0066
-273F:0071 E8 A046 call sub_249 ; (A0BA)
-273F:0074 E8 08D7 call clear_layer_rects
-273F:0077 E8 08F5 call room_load_layers
-273F:007A E8 760F call animations_preload
-273F:007D FF 16 074E call word ptr ds:[74Eh] ; (273F:074E=8010h)
-273F:0081 E8 0963 call sub_16 ; (09E7)
-273F:0084 E8 0A77 call sub_19 ; (0AFE)
-273F:0087 E8 6F7B call menubar_clear_image
-273F:008A 8B 1E 9832 mov bx, room_number
-273F:008E 89 1E BA15 mov room_number_2, bx
-273F:0092 E8 0C53 call get_room_resource_pointer
-273F:0095 8B 44 11 mov ax, [si+ROOM_SEQUENCE_OFFSET] ; Get sequence offset
-273F:0098 3D FFFF cmp ax, 0FFFFh ; Is one defined?
-273F:009B 74 03 je loc_11 ; If no, skip execution
-273F:009D E8 3D94 call sequence_execute ; Exeecute room script
-
-273F:00A0 E8 0BDF loc_11: call hotspots_load
-273F:00A3 E8 4738 call animations_preload_ticks
-273F:00A6 E8 6038 call check_player_bumped
-273F:00A9 E8 1462 call room_add_animations
-273F:00AC E8 08B2 call clear_info_table
-273F:00AF E8 40E4 call animation_tick
-
-273F:00B2 loc_12: ; xref 273F:00C3
-273F:00B2 80 26 11D0 F7 and menubar_state, 0F7h
-273F:00B7 FF 16 0752 call [menubar_restore_area]
-273F:00BB E8 1450 call room_add_animations
-273F:00BE F6 06 11D0 08 test menubar_state, 8
-273F:00C3 75 ED jnz loc_12 ; Jump if not zero
-
-; Copy the completed room from the off-screen buffer data_segment2 to the screen
-
-273F:00C5 FF 16 0744 call [show_screen_proc] ; Copy screen over
-273F:00C9 E8 39E2 call replace_vga_palette ; Reset palette
-273F:00CC FF 16 0760 call word ptr [fade_in_proc] ; Fade in the screen
-273F:00D0 E8 1EA2 call show_arrow_cursor
-
-273F:00D3 33 C0 xor ax, ax ; Zero register
-273F:00D5 A3 BA23 mov new_room_number, ax ; Clear room change variable
-273F:00D8 A2 38B0 mov data_781, al
-273F:00DB A2 11DA mov mouse_buttons2, al
-273F:00DE A3 983F mov data_1090, ax
-273F:00E1 A3 9841 mov data_1091, ax
-273F:00E4 A2 983A mov data_432, al
-273F:00E7 E8 1F1A call sub_61
-273F:00EA F7 06 6CE4 FFFF test word ptr ds:[6CE4h],0FFFFh ; (273F:6CE4=0C18Bh)
-273F:00F0 75 03 jnz loc_13 ; Jump if not zero
-273F:00F2 E9 9667 jmp loc_1855 ; (975C)
-
-; Main in game loop
-
-273F:00F5 loc_13: ; xref 273F:00F0, 0147, 0167, 9782
-273F:00F5 ú83 06 B0AA 01 add game_time_ctr, 1
-273F:00FA 83 16 B0AC 00 adc game_time_ctr_2, 0
-273F:00FF C6 06 00B0 00 mov data_525, 0
-273F:0104 E8 92C1 call room_check_keypresses
-273F:0107 E8 4306 call character_paused_list_countdown
-273F:010A E8 1B05 call room_check_cursors
-273F:010D E8 1189 call room_handle_click
-273F:0110 E8 4083 call animation_tick
-273F:0113 E8 618B call handle_talking
-273F:0116 E8 4741 call sequence_delay_check
-273F:0119 FF 16 0752 call [menubar_restore_area]
-273F:011D E8 13EE call room_add_animations
-273F:0120 FF 16 0744 call [show_screen_proc]
-273F:0124 B8 0004 mov ax, 4 ; Wait for four cycles
-273F:0127 E8 4892 call room_sleep
-273F:012A E8 138B call set_vga_palette
-273F:012D F7 06 BA23 FFFF test new_room_number, 0FFFFh ; Need to change room?
-273F:0133 74 03 jz loc_14
-273F:0135 E9 FEE0 jmp loc_6 ; Yes, so go do so
-273F:0138 loc_14:
-273F:0138 F6 06 073D 10 test status_flags2, FLAG_RESTART ; Need to restart?
-273F:013D 75 0D jnz loc_16 ; Yes, so do so
-273F:013F F7 06 982C FFFF test new_room_number_2, 0FFFFh
-273F:0145 75 02 jnz loc_15 ; Jump if not zero
-273F:0147 EB AC jmp short loc_13 ; Normal in-game loop
-
-273F:0149 loc_15:
-273F:0149 E9 FECC jmp loc_6 ; Jump to restart
-273F:014C loc_16:
-273F:014C F6 06 073D 20 test status_flags2, FLAG_CAUGHT
-273F:0151 74 03 jz loc_17 ; Jump if zero
-273F:0153 E8 A507 call skorl_knockout
-273F:0156 loc_17: ; xref 273F:0151
-273F:0156 F6 06 073D 40 test status_flags2, FLAG_RESTORERESTART
-273F:015B 74 0C jz loc_18 ; Jump if zero
-273F:015D E8 91D6 call sub_228 ; Show restore/restart dialog
-273F:0160 75 0A jnz loc_19 ; Jump if not zero
-273F:0162 80 26 073D 8F and status_flags2, 8Fh
-273F:0167 EB 8C jmp short loc_13 ; (00F5)
-273F:0169 loc_18: ; xref 273F:015B
-273F:0169 E8 921F call sub_229 ; (938B)
-273F:016C loc_19: ; xref 273F:0160
-273F:016C 80 26 073D 8F and status_flags2, 8Fh ; Clear status flags
-273F:0171 E9 FE94 jmp loc_5
-
- lure endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:024F, 030A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0174 open_file proc near
-273F:0174 F6 06 00B5 80 test byte ptr ds:[file_handle+1],80h ; (273F:00B5=11h)
-273F:0179 75 0D jnz loc_20 ; Jump if not zero
-273F:017B 8B 1E 00B4 mov bx,word ptr ds:[file_handle] ; (273F:00B4=11D0h)
-273F:017F B4 3E mov ah,3Eh
-273F:0181 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:0183 C6 06 00B5 80 mov byte ptr ds:[file_handle+1],80h ; (273F:00B5=11h)
-273F:0188 loc_20: ; xref 273F:0179
-273F:0188 8A 1E 00B1 mov bl,byte ptr ds:[file_number] ; (273F:00B1=40h)
-273F:018C 32 FF xor bh,bh ; Zero register
-273F:018E D0 E3 shl bl,1 ; Shift w/zeros fill
-273F:0190 8B 97 00B6 mov dx,word ptr ds:[file_offset_table][bx]
-273F:0194 B8 3D00 mov ax,3D00h
-273F:0197 CD 21 int 21h ; DOS Services ah=function 3Dh
- ; open file, al=mode,name@ds:dx
-273F:0199 72 58 jc loc_22 ; Jump if carry Set
-273F:019B 2E: F6 06 0943 FF test byte ptr cs:critical_error,0FFh ; (273F:0943=0)
-273F:01A1 75 50 jnz loc_22 ; Jump if not zero
-273F:01A3 A3 00B4 mov word ptr ds:[file_handle],ax ; (273F:00B4=11D0h)
-273F:01A6 8B D8 mov bx,ax
-273F:01A8 B9 0008 mov cx,8
-273F:01AB úBA 0119 mov dx, offset file_buffer ; 273F:0119
-273F:01AE B4 3F mov ah,3Fh
-273F:01B0 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:01B2 2E: F6 06 0943 FF test byte ptr cs:critical_error,0FFh ; (273F:0943=0)
-273F:01B8 75 35 jnz loc_21 ; Validate file ident string
-273F:01BA 81 3E 0119 6568 cmp word ptr ds:[file_buffer],6568h ; 'he'
-273F:01C0 75 2D jne loc_21 ; Jump if not equal
-273F:01C2 81 3E 011B 7779 cmp word ptr ds:[file_buffer+2],7779h ; 'yw'
-273F:01C8 75 25 jne loc_21 ; Jump if not equal
-273F:01CA 81 3E 011D 776F cmp word ptr ds:[file_buffer+4],776Fh ; 'ow'
-273F:01D0 75 1D jne loc_21 ; Jump if not equal
-273F:01D2 A1 011F mov ax,word ptr ds:[file_filenum] ; Get in the file number
-273F:01D5 3A 26 00B1 cmp ah,byte ptr ds:[file_number] ; (273F:00B1=40h)
-273F:01D9 75 14 jne loc_21 ; Jump if not equal
-
-273F:01DB B9 05F8 mov cx, sizeof file_entries
-273F:01DE úBA 0121 mov dx, offset file_entries
-273F:01E1 B4 3F mov ah,3Fh
-273F:01E3 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:01E5 2E: F6 06 0943 FF test byte ptr cs:critical_error,0FFh ; (273F:0943=0)
-273F:01EB 75 02 jnz loc_21 ; Jump if not zero
-273F:01ED F8 clc ; Clear carry flag
-273F:01EE C3 retn
-273F:01EF loc_21: ; xref 273F:01B8, 01C0, 01C8, 01D0
- ; 01D9, 01EB
-273F:01EF B4 3E mov ah,3Eh
-273F:01F1 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:01F3 loc_22: ; xref 273F:0199, 01A1
-273F:01F3 2E: C6 06 0943 00 mov byte ptr cs:critical_error,0 ; (273F:0943=0)
-273F:01F9 F9 stc ; Set carry flag
-273F:01FA C3 retn
- open_file endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0974, 768C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:01FB read_and_validate_header proc near
-273F:01FB loc_23: ; xref 273F:02B1, 02DC
-273F:01FB úC6 06 00B0 01 mov data_525, 1
-273F:0200 F6 06 00B5 80 test byte ptr ds:[file_handle+1],80h ; (273F:00B5=11h)
-273F:0205 75 42 jnz loc_24 ; Jump if not zero
-273F:0207 C7 06 0119 0000 mov word ptr ds:[file_buffer],0 ; (273F:0119=16FFh)
-
-; Read in the file header, that includes the ident string, file number, and entries table
-
-273F:020D 1E push ds
-273F:020E 07 pop es
-273F:020F BA 0119 mov dx, offset file_buffer
-273F:0212 BB 0000 mov bx,0
-273F:0215 B9 0600 mov cx, FILE_BUFFER_SIZE
-273F:0218 33 ED xor bp,bp ; Zero register
-273F:021A E8 022D call read_file_entry ; (044A)
-273F:021D 72 2A jc loc_24 ; Jump if carry Set
-273F:021F 2E: F6 06 0943 FF test byte ptr cs:critical_error,0FFh ; Check if any error occurred
-273F:0225 75 22 jnz loc_24 ; Jump if not zero
-
-; Validate that the file starts with the correct identifier string
-
-273F:0227 A1 0119 mov ax,word ptr ds:[file_buffer] ; Validate file ident string
-273F:022A 3D 6568 cmp ax,6568h ; 'he'
-273F:022D 75 1A jne loc_24
-273F:022F A1 011B mov ax,word ptr ds:[file_buffer+2]
-273F:0232 3D 7779 cmp ax,7779h ; 'yw'
-273F:0235 75 12 jne loc_24
-273F:0237 A1 011D mov ax,word ptr ds:[file_buffer+4]
-273F:023A 3D 776F cmp ax,776Fh ; 'ow'
-273F:023D 75 0A jne loc_24 ; Jump if not equal
-273F:023F A1 011F mov ax,word ptr ds:[11Fh] ; (273F:011F=0FF13h)
-
-273F:0242 3A 26 00B1 cmp ah,byte ptr ds:[file_number] ; (273F:00B1=40h)
-273F:0246 75 01 jne loc_24 ; Jump if not equal
-273F:0248 C3 retn
-
-; If execution reaches this point, then some sort of error occurred
-
-273F:0249 loc_24: ; xref 273F:0205, 021D, 0225, 022D
- ; 0235, 023D, 0246, 0301
-273F:0249 ú2E: C6 06 0943 00 mov byte ptr cs:critical_error,0
-273F:024F E8 FF22 call open_file ; Try to reopen file
-273F:0252 73 68 jnc loc_ret_30 ; Jump if no error occurred
-
-273F:0254 80 3E 0786 02 cmp byte ptr ds:[drive_number],2 ; Is current drive C?
-273F:0259 72 19 jb loc_25 ; Jump if it's a floppy drive
-
-273F:025B A1 00B2 mov ax,word ptr ds:[drive_num] ; (273F:00B2=2680h)
-273F:025E E8 00A3 call open_file2
-273F:0261 73 51 jnc loc_29
-273F:0263 F6 06 073D 80 test status_flags2, FLAG_HAS_FLOPPY_DRIVE
-273F:0268 75 1B jnz loc_27
-273F:026A 83 36 00B2 01 xor word ptr ds:[drive_num], 1
-273F:026F A1 00B2 mov ax,word ptr ds:[drive_num]
-273F:0272 EB 0C jmp short loc_26
-
-; At this point, we know that the current drive is either A or B (ie. a floppy drive)
-273F:0274 loc_25:
-273F:0274 F6 06 073D 80 test status_flags2, FLAG_HAS_FLOPPY_DRIVE
-273F:0279 75 0A jnz loc_27
-273F:027B A0 0786 mov al,byte ptr ds:[drive_number]
-273F:027E 34 01 xor al,1
-273F:0280 loc_26: ; xref 273F:0272
-273F:0280 E8 0081 call open_file2 ; (0304)
-273F:0283 73 2F jnc loc_29 ; Jump if carry=0
-273F:0285 loc_27: ; xref 273F:0268, 0279
-273F:0285 8A 16 0786 mov dl,byte ptr ds:[drive_number] ; (273F:0786=0E8h)
-273F:0289 B4 0E mov ah,0Eh
-273F:028B CD 21 int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
-; Display a message to insert the correct disk in the floppy drive
-273F:028D A0 00B1 mov al,byte ptr ds:[file_number] ; (273F:00B1=40h)
-273F:0290 2C 01 sub al,1
-273F:0292 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:0294 04 04 add al,4
-273F:0296 32 E4 xor ah,ah ; Zero register
-273F:0298 B6 00 mov dh,0
-273F:029A E8 3D07 call display_message ; (3FA4)
-273F:029D 3C 1B cmp al,1Bh
-273F:029F 75 08 jne loc_28 ; Jump if not equal
-273F:02A1 B8 0000 mov ax,0
-273F:02A4 B6 01 mov dh,1
-273F:02A6 E8 3CFB call display_message ; (3FA4)
-273F:02A9 loc_28: ; xref 273F:029F
-273F:02A9 8A 16 0786 mov dl,byte ptr ds:[drive_number] ; (273F:0786=0E8h)
-273F:02AD B4 0E mov ah,0Eh
-273F:02AF CD 21 int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
-273F:02B1 E9 FF47 jmp loc_23 ; (01FB)
-273F:02B4 loc_29: ; xref 273F:0261, 0283
-273F:02B4 8A 16 0786 mov dl,byte ptr ds:[drive_number] ; (273F:0786=0E8h)
-273F:02B8 B4 0E mov ah,0Eh
-273F:02BA CD 21 int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
-
-273F:02BC loc_ret_30: ; xref 273F:0252
-273F:02BC C3 retn
- read_and_validate_header endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:034C, 040E, 757C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:02BD validate_header proc near
-273F:02BD B1 06 mov cl,6
-273F:02BF D2 EC shr ah,cl ; Shift w/zeros fill
-273F:02C1 80 E4 03 and ah,3
-273F:02C4 80 C4 01 add ah,1
-273F:02C7 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:02CC 75 03 jne loc_31 ; Jump if it's VGA
-273F:02CE 80 C4 04 add ah,4
-273F:02D1 loc_31:
-273F:02D1 88 26 00B1 mov byte ptr ds:[file_number],ah ; (273F:00B1=40h)
-273F:02D5 F6 06 00B0 FF test data_525, 0FFh
-273F:02DA 75 03 jnz loc_32 ; Jump if not zero
-273F:02DC E9 FF1C jmp loc_23 ; (01FB)
-273F:02DF loc_32: ; xref 273F:02DA
-273F:02DF A1 0119 mov ax,word ptr ds:[file_buffer] ; Validate file ident string
-273F:02E2 3D 6568 cmp ax,6568h ; 'he'
-273F:02E5 75 1A jne loc_33 ; Jump if not equal
-273F:02E7 A1 011B mov ax,word ptr ds:[file_buffer+2]
-273F:02EA 3D 7779 cmp ax,7779h ; 'yw'
-273F:02ED 75 12 jne loc_33 ; Jump if not equal
-273F:02EF A1 011D mov ax,word ptr ds:[file_buffer+4]
-273F:02F2 3D 776F cmp ax,776Fh ; 'ow'
-273F:02F5 75 0A jne loc_33 ; Jump if not equal
-273F:02F7 A1 011F mov ax,word ptr ds:[file_filenum] ; (273F:011F=0FF13h)
-273F:02FA 3A 26 00B1 cmp ah,byte ptr ds:[file_number] ; (273F:00B1=40h)
-273F:02FE 75 01 jne loc_33 ; Jump if not equal
-273F:0300 C3 retn
-273F:0301 loc_33: ; xref 273F:02E5, 02ED, 02F5, 02FE
-
-; Jumps to the error recovery code, which can open up the appropriate file and load it from scratch
-273F:0301 E9 FF45 jmp loc_24 ; (0249)
- validate_header endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:025E, 0280
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0304 open_file2 proc near
-273F:0304 8A D0 mov dl,al
-273F:0306 B4 0E mov ah,0Eh
-273F:0308 CD 21 int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
-273F:030A E8 FE67 call open_file ; (0174)
-273F:030D C3 retn
- open_file2 endp
-
-273F:030E 0000 data_121 dw 0 ; xref 273F:0314, 03D5
-273F:0310 0000 data_122 dw 0 ; xref 273F:0318, 03D9
-273F:0312 0000 data_123 dw 0 ; xref 273F:031D, 03DE
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0BDA, 3ACD, 3CA3, 7640, 7813, 7AC5, 7B63
- ; 7B80, 93A9, 9F6E, 9F8C, 9FB1, A302, A34F
- ; A7C0, A7E2, A900, A9B3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0314 read_entry proc near
-273F:0314 loc_34: ; xref 273F:03E3
-273F:0314 2E: A3 030E mov cs:data_121,ax ; (273F:030E=0)
-273F:0318 2E: 89 0E 0310 mov cs:data_122,cx ; (273F:0310=0)
-273F:031D 2E: 89 16 0312 mov cs:data_123,dx ; (273F:0312=0)
-273F:0322 8B D8 mov bx,ax
-273F:0324 81 E3 3FFF and bx,3FFFh
-273F:0328 81 FB 0120 cmp bx,120h
-273F:032C 74 11 je loc_35 ; Jump if equal
-273F:032E 81 FB 0311 cmp bx,311h
-273F:0332 74 0B je loc_35 ; Jump if equal
-273F:0334 83 FB 08 cmp bx,8
-273F:0337 74 06 je loc_35 ; Jump if equal
-273F:0339 81 FB 0410 cmp bx,410h
-273F:033D 75 0A jne loc_36 ; Jump if not equal
-273F:033F loc_35: ; xref 273F:032C, 0332, 0337
- assume ds:data_seg
-273F:033F F6 06 BAB9 FF test byte ptr script_val_88, 0FFh
-273F:0344 74 03 jz loc_36 ; Jump if zero
-273F:0346 80 F4 80 xor ah,80h
-273F:0349 loc_36: ; xref 273F:033D, 0344
-273F:0349 51 push cx
-273F:034A 52 push dx
-273F:034B 50 push ax
-273F:034C E8 FF6E call validate_header ; (02BD)
-273F:034F 58 pop ax
-273F:0350 5A pop dx
-273F:0351 úBB 0119 mov bx,offset file_buffer
-273F:0354 B9 00C0 mov cx,0C0h ; Number of header entries + 1
-
-273F:0357 locloop_37: ; xref 273F:035E
-273F:0357 3B 07 cmp ax,[bx]
-273F:0359 74 0D je loc_38 ; Jump if equal
-273F:035B 83 C3 08 add bx,8
-273F:035E E2 F7 loop locloop_37 ; Loop if cx > 0
-
-273F:0360 B8 0009 mov ax,9 ; 'Data file is corrupt.$'
-273F:0363 B6 01 mov dh,1
-273F:0365 E8 3C3C call display_message ; (3FA4)
-273F:0368 loc_38: ; xref 273F:0359
-273F:0368 07 pop es
-273F:0369 8B 4F 04 mov cx,[bx+4]
-273F:036C 8A 47 03 mov al,[bx+3]
-273F:036F 32 E4 xor ah,ah ; Zero register
-273F:0371 8B E8 mov bp,ax
-273F:0373 FF 77 01 push word ptr [bx+1]
-
-273F:0376 8B 5F 06 mov bx,[bx+6]
-273F:0379 51 push cx
-273F:037A 55 push bp
-273F:037B E8 00CC call read_file_entry ; (044A)
-273F:037E 5D pop bp
-273F:037F B1 0C mov cl,0Ch
-273F:0381 D3 E5 shl bp,cl ; Shift w/zeros fill
-273F:0383 59 pop cx
-273F:0384 8B D1 mov dx,cx
-273F:0386 83 EA 01 sub dx,1
-273F:0389 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:038B D1 EA shr dx,1 ; Shift w/zeros fill
-273F:038D D1 EA shr dx,1 ; Shift w/zeros fill
-273F:038F D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0391 83 C2 01 add dx,1
-273F:0394 03 D5 add dx,bp
-273F:0396 5B pop bx
-273F:0397 2E: F6 06 0943 FF test byte ptr cs:critical_error,0FFh ; (273F:0943=0)
-273F:039D 75 06 jnz loc_39 ; Jump if not zero
-273F:039F C6 06 0118 00 mov byte ptr retry_count,0 ; (31E4:0118=0)
-273F:03A4 C3 retn
-273F:03A5 loc_39: ; xref 273F:039D
-273F:03A5 80 06 0118 01 add byte ptr retry_count,1 ; (31E4:0118=0)
-273F:03AA 80 3E 0118 05 cmp byte ptr retry_count,5 ; (31E4:0118=0)
-273F:03AF 72 19 jb loc_40 ; Jump if below
-273F:03B1 C6 06 0118 00 mov byte ptr retry_count,0 ; (31E4:0118=0)
-273F:03B6 B8 0001 mov ax,1
-273F:03B9 B6 00 mov dh,0
-273F:03BB E8 3BE6 call display_message ; (3FA4)
-273F:03BE 3C 1B cmp al,1Bh
-273F:03C0 75 08 jne loc_40 ; Jump if not equal
-273F:03C2 B8 0000 mov ax,0
-273F:03C5 B6 01 mov dh,1
-273F:03C7 E8 3BDA call display_message ; (3FA4)
-273F:03CA loc_40: ; xref 273F:03AF, 03C0
-273F:03CA 2E: C6 06 0943 00 mov byte ptr cs:critical_error,0 ; (273F:0943=0)
-273F:03D0 C6 06 00B0 00 mov data_525, 0
-273F:03D5 2E: A1 030E mov ax,cs:data_121 ; (273F:030E=0)
-273F:03D9 2E: 8B 0E 0310 mov cx,cs:data_122 ; (273F:0310=0)
-273F:03DE 2E: 8B 16 0312 mov dx,cs:data_123 ; (273F:0312=0)
-273F:03E3 E9 FF2E jmp loc_34 ; (0314)
- read_entry endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:77F1, A7B4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:03E6 get_entry_size proc near
-273F:03E6 8B D8 mov bx,ax
-273F:03E8 81 E3 3FFF and bx,3FFFh
-273F:03EC 81 FB 0120 cmp bx,120h
-273F:03F0 74 11 je loc_41 ; Jump if equal
-273F:03F2 81 FB 0311 cmp bx,311h
-273F:03F6 74 0B je loc_41 ; Jump if equal
-273F:03F8 83 FB 08 cmp bx,8
-273F:03FB 74 06 je loc_41 ; Jump if equal
-273F:03FD 81 FB 0410 cmp bx,410h
-273F:0401 75 0A jne loc_42 ; Jump if not equal
-273F:0403 loc_41: ; xref 273F:03F0, 03F6, 03FB
-273F:0403 F6 06 BAB9 FF test byte ptr script_val_88, 0FFh
-273F:0408 74 03 jz loc_42 ; Jump if zero
-273F:040A 80 F4 80 xor ah,80h
-273F:040D loc_42: ; xref 273F:0401, 0408
-273F:040D 50 push ax
-273F:040E E8 FEAC call validate_header ; (02BD)
-273F:0411 58 pop ax
-273F:0412 úBB 0119 mov bx, offset file_buffer ; (273F:0119=0FFh)
-273F:0415 B9 00C0 mov cx,0C0h
-
-273F:0418 locloop_43: ; xref 273F:041F
-273F:0418 3B 07 cmp ax,[bx]
-273F:041A 74 0D je loc_44 ; Jump if equal
-273F:041C 83 C3 08 add bx,8
-273F:041F E2 F7 loop locloop_43 ; Loop if cx > 0
-
-273F:0421 B8 0009 mov ax,9 ; 'Data file is corrupt.$'
-273F:0424 B6 01 mov dh,1
-273F:0426 E8 3B7B call display_message ; (3FA4)
-273F:0429 loc_44: ; xref 273F:041A
-273F:0429 8A 4F 03 mov cl,[bx+3]
-273F:042C 32 ED xor ch,ch ; Zero register
-273F:042E 8B E9 mov bp,cx
-273F:0430 B1 0C mov cl,0Ch
-273F:0432 D3 E5 shl bp,cl ; Shift w/zeros fill
-273F:0434 8B 4F 04 mov cx,[bx+4]
-273F:0437 8B D1 mov dx,cx
-273F:0439 83 EA 01 sub dx,1
-273F:043C D1 EA shr dx,1 ; Shift w/zeros fill
-273F:043E D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0440 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0442 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0444 83 C2 01 add dx,1
-273F:0447 03 D5 add dx,bp
-273F:0449 C3 retn
- get_entry_size endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:021A, 037B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-
-273F:044A read_file_entry proc near
-273F:044A 1E push ds
-273F:044B 51 push cx
-273F:044C 52 push dx
-273F:044D B8 0020 mov ax,20h
-273F:0450 F7 E3 mul bx ; dx:ax = reg * ax
-273F:0452 8B CA mov cx,dx
-273F:0454 8B D0 mov dx,ax
-273F:0456 51 push cx
-273F:0457 52 push dx
-273F:0458 B8 4200 mov ax,4200h
-273F:045B 8B 1E 00B4 mov bx,word ptr ds:[file_handle] ; (273F:00B4=11D0h)
-273F:045F CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:0461 72 3F jc loc_47 ; Jump if carry Set
-273F:0463 5B pop bx
-273F:0464 59 pop cx
-273F:0465 3B CA cmp cx,dx
-273F:0467 75 3B jne loc_48 ; Jump if not equal
-273F:0469 3B C3 cmp ax,bx
-273F:046B 75 37 jne loc_48 ; Jump if not equal
-273F:046D 8B 1E 00B4 mov bx,word ptr ds:[file_handle] ; (273F:00B4=11D0h)
-273F:0471 5A pop dx
-273F:0472 D1 E5 shl bp,1 ; Shift w/zeros fill
-273F:0474 loc_45: ; xref 273F:0490
-273F:0474 ú83 ED 01 sub bp,1
-273F:0477 72 19 jc loc_46 ; Jump if carry Set
-273F:0479 8C C0 mov ax,es
-273F:047B 8E D8 mov ds,ax
-273F:047D 05 0800 add ax,800h
-273F:0480 8E C0 mov es,ax
-273F:0482 B4 3F mov ah,3Fh ; '?'
-273F:0484 B9 8000 mov cx,8000h
-273F:0487 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:0489 72 1A jc loc_49 ; Jump if carry Set
-273F:048B 3D 8000 cmp ax,8000h
-273F:048E 75 15 jne loc_49 ; Jump if not equal
-273F:0490 EB E2 jmp short loc_45 ; (0474)
-273F:0492 loc_46: ; xref 273F:0477
-273F:0492 59 pop cx
-273F:0493 06 push es
-273F:0494 1F pop ds
-273F:0495 B4 3F mov ah,3Fh
-273F:0497 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:0499 72 0B jc loc_50 ; Jump if carry Set
-273F:049B 3B C1 cmp ax,cx
-273F:049D 75 07 jne loc_50 ; Jump if not equal
-273F:049F 1F pop ds
-273F:04A0 F8 clc ; Clear carry flag
-273F:04A1 C3 retn
-273F:04A2 loc_47: ; xref 273F:0461
-273F:04A2 58 pop ax
-273F:04A3 58 pop ax
-273F:04A4 loc_48: ; xref 273F:0467, 046B
-273F:04A4 58 pop ax
-273F:04A5 loc_49: ; xref 273F:0489, 048E
-273F:04A5 58 pop ax
-273F:04A6 loc_50: ; xref 273F:0499, 049D
-273F:04A6 1F pop ds
-273F:04A7 F9 stc ; Set carry flag
-273F:04A8 C3 retn
- read_file_entry endp
-
-273F:04A9 00 db 0
-273F:04AA 0000 0000 old_timer_int_proc dw 0, 0 ; xref 273F:0699, 3FD2, 49A6
-273F:04AE 0000 0000 old_kbd_int_proc dw 0, 0 ; xref 273F:06F2, 4004, 94DC
-273F:04B2 0000 old_critical_int_proc dw 0, 0 ; xref 273F:06D1, 3FEB
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0005
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:04B6 initialise proc near
-273F:04B6 E8 0314 call sub_10 ; (07CD)
-273F:04B9 E8 0447 call sub_12 ; (0903)
-273F:04BC C7 06 5662 094D mov play_music_proc, offset retf_proc
-273F:04C2 8C 0E 5664 mov word ptr play_music_proc+2,cs
-273F:04C6 F6 06 0742 FF test video_style, 0FFh ; Is any video mode defined
-273F:04CB 74 07 jz loc_51 ; Jump if zero
-273F:04CD 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:04D2 74 20 je loc_53 ; Jump if equal
-273F:04D4 loc_51: ; xref 273F:04CB
-273F:04D4 B8 1A00 mov ax,1A00h
-273F:04D7 CD 10 int 10h ; Video display ah=functn 1Ah
- ; get display type in bx
-273F:04D9 3C 1A cmp al,1Ah
-273F:04DB 75 0C jne loc_52 ; Function not supported
-273F:04DD 80 FB 04 cmp bl,4 ; EGA monitor
-273F:04E0 74 12 je loc_53 ; Jump if equal
-273F:04E2 80 FB 08 cmp bl,8 ; VGA with analog colour model
-273F:04E5 75 10 jne loc_54 ; Jump if not equal
-273F:04E7 EB 16 jmp short loc_55 ; (04FF)
-
-273F:04E9 loc_52: ; xref 273F:04DB
-273F:04E9 B4 12 mov ah,12h
-273F:04EB B3 10 mov bl,10h ; bl=Return Config Info
-273F:04ED CD 10 int 10h ; Video display EGA/VGA special
-
-273F:04EF 80 FB 10 cmp bl,10h ; Not supported
-273F:04F2 74 03 je loc_54
-273F:04F4 loc_53: ; xref 273F:04D2, 04E0
-273F:04F4 E9 00C9 jmp loc_56
-
-; Computer doesn't support EGA or VGA
-273F:04F7 loc_54:
-273F:04F7 B8 0002 mov ax,2
-273F:04FA B6 01 mov dh,1
-273F:04FC E8 3AA5 call display_message
-
-; Game will run in VGA mode
-273F:04FF loc_55:
-273F:04FF C6 06 0743 13 mov video_mode, 13h ; 3200x200x256 mode
-273F:0504 C6 06 0742 01 mov video_style, VIDEO_STYLE_VGA ; Flag for VGA mode
-273F:0509 C7 06 0744 304E mov show_screen_proc, offset vga_show_screen
-273F:050F C7 06 074A 0008 mov char_width, 8
-273F:0515 C7 06 0746 FA00 mov screen_size, SCREEN_HEIGHT*SCREEN_WIDTH
-273F:051B C7 06 0748 0140 mov screen_width, SCREEN_WIDTH
-273F:0521 C7 06 074C 0A00 mov menubar_block_size, MENUBAR_Y_SIZE*SCREEN_WIDTH
-273F:0527 C7 06 074E 346D mov data_555, offset vga_346d
-273F:052D C7 06 0750 3527 mov segment_screen_proc, vga_segment_screen
-273F:0533 C7 06 0752 340F mov show_compressed_screen_proc, offset vga_show_compressed_screen
-273F:0539 C7 06 0754 37F2 mov add_animation_proc, offset vga_add_animation
-273F:053F C7 06 0756 33B3 mov draw_talk_dialog_proc, offset vga_draw_talk_dialog
-273F:0545 C7 06 0758 3242 mov talk_dialog_proc, vga_talk_dialog
-273F:054B C7 06 075A 3209 mov display2_character_proc, offset vga_display2_character
-273F:0551 C7 06 075C 3599 mov add_rect_proc, vga_add_rect
-273F:0557 C7 06 075E 3664 mov show_cursor_proc, offset vga_cursor
-273F:055D C7 06 0766 30E2 mov fade_out_proc, offset vga_fade_out
-273F:0563 C7 06 0760 3177 mov fade_in_proc, offset vga_fade_in
-273F:0569 C7 06 0762 31D3 mov set_lower_palette_proc, offset vga_set_lower_palette
-273F:056F C7 06 0764 31E9 mov empty_palette_proc, offset vga_empty_palette
-273F:0575 C7 06 076A 35F6 mov display_character_proc, offset vga_display_character
-273F:057B C7 06 076C 362D mov menu_items_proc, offset vga_menu_items
-273F:0581 C7 06 076E 1450 mov data_571, offset vga_unknown_rec
-273F:0587 C7 06 0770 3948 mov data_572,3948h ; (31E4:0770=0)
-273F:058D C7 06 0772 3AD7 mov toggle_menu_highlight_proc, offset vga_toggle_menu_highlight
-273F:0593 C7 06 0774 07ED mov data_574, offset vga_no_implementation
-273F:0599 C7 06 0776 07ED mov data_575, offset vga_no_implementation
-273F:059F C7 06 0778 3374 mov data_576,3374h ; (31E4:0778=0)
-273F:05A5 C7 06 077A 3295 mov draw_dialog_proc, offset vga_draw_dialog
-273F:05AB C7 06 077C 398A mov decode_entry_proc, offset decode_file_entry
-273F:05B1 C7 06 077E A7E6 mov copy_screen_proc, offset vga_copy_screen
-273F:05B7 C7 06 0780 A711 mov pic_decode_proc, offset vga_pic_decode
-273F:05BD E9 00C4 jmp loc_57
-
-; Game will run in EGA mode
-273F:05C0 loc_56: ; xref 273F:04F4
-273F:05C0 C6 06 0743 0D mov byte ptr video_mode,0Dh ; 320x200x16 mode
-273F:05C5 C6 06 0742 02 mov video_style, VIDEO_STYLE_EGA,2
-273F:05CA C7 06 0744 205C mov show_screen_proc, offset ega_show_screen
-273F:05D0 C7 06 074A 0004 mov char_width, 4
-273F:05D6 C7 06 0746 7D00 mov screen_size, 7D00h
-273F:05DC C7 06 0748 00A0 mov screen_width, SCREEN_WIDTH/2
-273F:05E2 C7 06 074C 0500 mov menubar_block_size, MENUBAR_Y_SIZE*SCREEN_WIDTH/2
-273F:05E8 C7 06 074E 2814 mov data_555,2814h ; (31E4:074E=0)
-273F:05EE C7 06 0750 270D mov segment_screen_proc, ega_segment_screen
-273F:05F4 C7 06 0752 27B1 mov show_compressed_screen_proc, offset ega_show_compressed_screen
-;menubar_restore_area
-273F:05FA C7 06 0754 2C76 mov add_animation_proc, offset ega_add_animation
-273F:0600 C7 06 0756 2275 mov draw_talk_dialog_proc, offset ega_draw_talk_dialog
-273F:0606 C7 06 0758 2217 mov talk_dialog_proc, offset ega_talk_dialog
-273F:060C C7 06 075A 2184 mov display2_character_proc, 2184h
-273F:0612 C7 06 075C 29A4 mov add_rect_proc, offset ega_add_layer
-273F:0618 C7 06 075E 2AB3 mov show_cursor_proc, offset ega_cursor
-273F:061E C7 06 0768 07ED mov data_568,07EDh
-273F:0624 C7 06 0766 215F mov fade_out_proc, offset ega_empty_palette
-273F:062A C7 06 0760 2174 mov fade_in_proc, offset ega_fade_in
-273F:0630 C7 06 0762 2174 mov set_lower_palette_proc, offset ega_fade_in
-273F:0636 C7 06 0764 215F mov empty_palette_proc, ega_empty_palette
-273F:063C C7 06 076A 2A31 mov display_character_proc, offset ega_display_character
-273F:0642 C7 06 076C 22C4 mov menu_items_proc, offset ega_menu_items
-273F:0648 C7 06 076E 1444 mov data_571, offset ega_unknown_rec
-273F:064E C7 06 0770 2F9C mov data_572,2F9Ch ; (31E4:0770=0)
-273F:0654 C7 06 0772 2FF3 mov toggle_menu_highlight_proc, offset ega_toggle_menu_highlight
-273F:065A C7 06 0774 2688 mov data_574,2688h ; (31E4:0774=0)
-273F:0660 C7 06 0776 26C7 mov data_575,26C7h ; (31E4:0776=0)
-273F:0666 C7 06 0778 23EA mov data_576,23EAh ; (31E4:0778=0)
-273F:066C C7 06 077A 2370 mov draw_dialog_proc, offset ega_draw_dialog
-273F:0672 C7 06 077C 246A mov decode_entry_proc, offset ega_decode_entry
-273F:0678 C7 06 077E A80C mov copy_screen_proc, offset ega_copy_screen
-273F:067E C7 06 0780 A75F mov pic_decode_proc, offset ega_pic_decode
-
-273F:0684 loc_57: ; xref 273F:05BD
-273F:0684 B4 30 mov ah,30h
-273F:0686 CD 21 int 21h ; DOS Services ah=function 30h
- ; get DOS version number ax
-273F:0688 3C 01 cmp al,1 ; At least DOS version 1.0?
-273F:068A 7F 08 jg loc_58 ; Jump if >
-273F:068C B8 0003 mov ax,3 ; Bail out with DOS error message
-273F:068F B6 01 mov dh,1
-273F:0691 E8 3910 call display_message
-
-273F:0694 loc_58:
-273F:0694 B8 3508 mov ax,3508h ; Get current timer handler address
-273F:0697 CD 21 int 21h ; DOS Services ah=function 35h
- ; get intrpt vector al in es:bx
-273F:0699 2E: 89 1E 04AA mov cs:old_timer_int_proc, bx
-273F:069E 8C C0 mov ax,es
-273F:06A0 2E: A3 04AC mov word ptr cs:old_timer_int_proc+2,ax
-273F:06A4 B8 2508 mov ax,2508h
-273F:06A7 1E push ds
-273F:06A8 0E push cs
-273F:06A9 1F pop ds
-273F:06AA úBA 48C6 mov dx,offset timer_handler
-273F:06AD CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:06AF 1F pop ds
-273F:06B0 80 0E 073C 04 or status_flags, STATUS_TIMER_SET
-273F:06B5 B9 5D38 mov cx,5D38h
-273F:06B8 B0 36 mov al,36h ; '6'
-273F:06BA E6 43 out 43h,al ; port 43h, 8253 timer control
-273F:06BC EB 00 jmp short $+2 ; delay for I/O
-273F:06BE EB 00 jmp short $+2 ; delay for I/O
-273F:06C0 8A C1 mov al,cl
-273F:06C2 E6 40 out 40h,al ; port 40h, 8253 timer 0 clock
-273F:06C4 EB 00 jmp short $+2 ; delay for I/O
-273F:06C6 EB 00 jmp short $+2 ; delay for I/O
-273F:06C8 8A C5 mov al,ch
-273F:06CA E6 40 out 40h,al ; port 40h, 8253 timer 0 clock
-273F:06CC B8 3524 mov ax,3524h
-273F:06CF CD 21 int 21h ; DOS Services ah=function 35h
- ; get intrpt vector al in es:bx
-273F:06D1 2E: 89 1E 04B2 mov cs:old_critical_int_proc, bx
-273F:06D6 8C C0 mov ax,es
-273F:06D8 2E: A3 04B4 mov cs:old_critical_int_proc+2,ax
-273F:06DC B8 2524 mov ax,2524h
-273F:06DF 1E push ds
-273F:06E0 0E push cs
-273F:06E1 1F pop ds
-273F:06E2 úBA 0944 mov dx,offset critical_handler ; Set new critical error handler
-273F:06E5 CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:06E7 1F pop ds
-273F:06E8 80 0E 073C 10 or status_flags, STATUS_CRITICAL_SET
-273F:06ED B8 3509 mov ax,3509h
-273F:06F0 CD 21 int 21h ; DOS Services ah=function 35h
- ; get intrpt vector al in es:bx
-273F:06F2 2E: 89 1E 04AE mov cs:old_kbd_int_proc, bx
-273F:06F7 8C C0 mov ax,es
-273F:06F9 2E: A3 04B0 mov word ptr cs:old_kbd_int_proc+2, ax
-273F:06FD B8 2509 mov ax,2509h
-273F:0700 1E push ds
-273F:0701 0E push cs
-273F:0702 1F pop ds
-273F:0703 úBA 94DB mov dx,offset keyboard_handler ; Set new keyboard handler
-273F:0706 CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:0708 1F pop ds
-273F:0709 80 0E 073C 40 or status_flags, STATUS_KEYBOARD_SET
-273F:070E B4 19 mov ah,19h
-273F:0710 CD 21 int 21h ; DOS Services ah=function 19h
- ; get default drive al (0=a:)
-273F:0712 A2 0786 mov default_drive, al
-273F:0715 CD 11 int 11h ; Put equipment bits in ax
-273F:0717 A8 C0 test al,0C0h ; How many floppy drives attached?
-273F:0719 75 05 jnz loc_59 ; Jump if not zero
-273F:071B 80 0E 073D 80 or status_flags2, FLAG_HAS_FLOPPY_DRIVE
-273F:0720 loc_59: ; xref 273F:0719
-273F:0720 B8 3300 mov ax,3300h
-273F:0723 CD 21 int 21h ; DOS Services ah=function 33h
- ; get ctrl-break flag in dl
-273F:0725 88 16 073E mov old_ctrl_break_flag, dl
-273F:0729 B8 3301 mov ax,3301h
-273F:072C B2 00 mov dl,0
-273F:072E CD 21 int 21h ; DOS Services ah=function 33h
- ; set ctrl-break flag dl=off/on
-273F:0730 80 0E 073C 08 or status_flags, STATUS_CTRL_BREAK_SET
-273F:0735 B8 0040 mov ax,40h
-273F:0738 8E C0 mov es,ax
-273F:073A 26: A0 0017 mov al,es:keybd_flags_1 ; (0040:0017=0)
-273F:073E A2 073F mov data_546,al ; (31E4:073F=1)
-273F:0741 B4 0F mov ah,0Fh
-273F:0743 CD 10 int 10h ; Video display ah=functn 0Fh
- ; get state, al=mode, bh=page
- ; ah=columns on screen
-273F:0745 A2 073B mov data_542,al ; (31E4:073B=0)
-273F:0748 B4 00 mov ah,0
-273F:074A A0 0743 mov al,video_mode ; (31E4:0743=0)
-273F:074D CD 10 int 10h ; Video display ah=functn 00h
- ; set display mode in al
-273F:074F 80 0E 073C 01 or status_flags, STATUS_VIDEO_MODE_SET
-273F:0754 80 3E 0742 01 cmp video_style, VIDEO_STYLE_VGA
-273F:0759 75 03 jne loc_60 ; Jump if not equal
-273F:075B E8 3A27 call set_upper_vga_palette
-273F:075E loc_60: ; xref 273F:0759
-273F:075E E8 6E1B call show_startup ; (757C)
-
-273F:0761 C7 06 11D6 00A0 mov mouse_x2, 160 ; Default mouse pos to center
-273F:0767 C7 06 11D1 00A0 mov mouse_x, 160
-273F:076D C7 06 11D8 0064 mov mouse_y2, 100
-273F:0773 C7 06 11D3 0064 mov mouse_y, 100
-
-273F:0779 B8 0000 mov ax,0
-273F:077C CD 33 int 33h ; Mouse driver ax=func 0000h
- ; installed?, ax=0 no, =-1 yes
- ; bx=number of mouse buttons
-273F:077E 0B C0 or ax,ax ; Zero ?
-273F:0780 74 45 jz loc_61 ; Mouse not installed
-273F:0782 1E push ds
-273F:0783 0E push cs
-273F:0784 07 pop es
-273F:0785 úBA 1EE8 mov dx,offset mouse_handler
-273F:0788 B9 007F mov cx,7Fh
-273F:078B B8 000C mov ax,0Ch
-273F:078E CD 33 int 33h ; Mouse driver ax=func 000Ch
- ; set user handler at es:dx
- ; cx=event mask
-273F:0790 1F pop ds
-273F:0791 80 0E 073C 80 or status_flags, STATUS_MOUSE_HANDLER_SET
-273F:0796 B9 0000 mov cx,0
-273F:0799 BA 027F mov dx, 639
-273F:079C B8 0007 mov ax,7
-273F:079F CD 33 int 33h ; Mouse driver ax=func 0007h
- ; set horz range 0 - 639
-273F:07A1 B9 0000 mov cx,0
-273F:07A4 BA 00C6 mov dx,0C6h
-273F:07A7 B8 0008 mov ax,8
-273F:07AA CD 33 int 33h ; Mouse driver ax=func 0008h
- ; set vert range 0 - 198
-273F:07AC B8 0003 mov ax,3
-273F:07AF CD 33 int 33h ; Mouse driver ax=func 0003h
- ; get position, cx=horz,dx=vert
- ; bx=mouse button status bits
-273F:07B1 88 1E 11D5 mov mouse_buttons, bl ; (31E4:11D5=0)
-273F:07B5 D1 E9 shr cx,1 ; Change 0-640 horiz to 0-320
-273F:07B7 89 0E 11D6 mov mouse_x2,cx ;
-273F:07BB 89 0E 11D1 mov mouse_x, cx
-273F:07BF 89 16 11D8 mov mouse_y2,dx
-273F:07C3 89 16 11D3 mov mouse_y, dx
-273F:07C7 loc_61: ; xref 273F:0780
-273F:07C7 80 26 11D0 FD and menubar_state, 0FDh ; (31E4:11D0=3)
-273F:07CC C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:04B6, AA1E
-
-273F:07CD sub_10:
-273F:07CD 8C D3 mov bx,ss
-273F:07CF 8C C0 mov ax,es
-273F:07D1 2B D8 sub bx,ax
-273F:07D3 8B C4 mov ax,sp
-273F:07D5 B1 04 mov cl,4
-273F:07D7 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:07D9 03 D8 add bx,ax
-273F:07DB 83 C3 03 add bx,3
-273F:07DE 89 1E 0740 mov data_547,bx ; (31E4:0740=0)
-273F:07E2 B4 4A mov ah,4Ah
-273F:07E4 CD 21 int 21h ; DOS Services ah=function 4Ah
- ; change memory allocation
- ; bx=bytes/16, es=mem segment
-273F:07E6 BB FFFF mov bx,0FFFFh
-273F:07E9 B4 48 mov ah,48h
-273F:07EB CD 21 int 21h ; DOS Services ah=function 48h
- ; allocate memory, bx=bytes/16
-273F:07ED vga_no_implementation retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6614
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- backup_variables proc near
-273F:07EE C6 06 38B0 01 mov data_781, 1
-273F:07F3 80 0E 11D0 01 or menubar_state, 1 ; (273F:11D0=56h)
-273F:07F8 FF 16 075E call [show_cursor_proc]
-273F:07FC 8C DD mov bp,ds
-273F:07FE A1 4CE6 mov ax, talk_dialog_buffer
-273F:0801 8E C0 mov es, ax
-273F:0803 B1 03 mov cl,3
-273F:0805 A1 11D8 mov ax, mouse_y2
-273F:0808 A3 0784 mov saved_mouse_y, ax
-273F:080B A1 11D6 mov ax, mouse_x2
-273F:080E A3 0782 mov saved_mouse_x, ax
-273F:0811 A1 076C mov ax, menu_items_proc
-273F:0814 26: A3 3368 mov es:saved_menu_items_proc, ax
-273F:0818 A0 9835 mov al, num_inventory_items
-273F:081B 26: A2 3360 mov es:saved_num_inventory_items, al
-273F:081F A1 BC49 mov ax, num_groats
-273F:0822 26: A3 337E mov es:saved_num_groats, ax
-273F:0826 A1 4CE4 mov ax, word ptr ds:data_segment2
-273F:0829 26: A3 3376 mov es:saved_data_segment2, ax
-273F:082D A1 4CF2 mov ax, font_segment
-273F:0830 26: A3 337B mov es:saved_font_segment, ax
-273F:0834 A1 4CF0 mov ax, font2_segment
-273F:0837 26: A3 3370 mov es:saved_font2_segment, ax
-273F:083B 26: C7 06 3362 0000 mov word ptr es:data_77e,0 ; (0874:3362=0AF06h)
-273F:0842 A1 1924 mov ax, hotspot_id
-273F:0845 26: A3 3358 mov es:saved_hotspot_id, ax
-273F:0849 A1 9832 mov ax, room_number
-273F:084C 26: A3 3356 mov es:saved_room_number, ax
-273F:0850 A1 074C mov ax, menubar_block_size
-273F:0853 26: A3 336A mov es:saved_menubar_block_size, ax
-273F:0857 A1 0748 mov ax, screen_width
-273F:085A 26: A3 3374 mov es:saved_screen_width, ax
-273F:085E A1 076A mov ax, display_character_proc
-273F:0861 26: A3 336C mov es:saved_display_character_proc, ax
-273F:0865 A1 074A mov ax, char_width
-273F:0868 26: A3 336E mov es:saved_char_width, ax
-273F:086C 8B 36 076E mov si, data_571
-273F:0870 8B 04 mov ax, [si]
-273F:0872 26: A3 33DE mov es:data_92e,ax ; (0874:33DE=0A21Dh)
-273F:0876 8B 44 02 mov ax,[si+2]
-273F:0879 26: A3 33DC mov es:data_91e,ax ; (0874:33DC=11A2h)
-273F:087D úBF 33E0 mov di,data_93e ; (0874:33E0=0F2h)
-273F:0880 B9 001B mov cx,1Bh
-273F:0883 úBE 0720 mov si,720h ; (273F:0720=0B8h)
-273F:0886 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:0888 06 push es
-273F:0889 1F pop ds
-273F:088A C3 retn
- backup_variables endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:088B ú8E C5 action_handle_2: mov es,bp
-273F:088D úBF 65F3 mov di, offset player_action_support_record
-273F:0890 úBE 3382 mov si, offset data_3382
-273F:0893 F7 04 FFFF test word ptr [si],0FFFFh
-273F:0897 78 37 js loc_65 ; Jump if sign=1
-273F:0899 loc_63: ; xref 273F:089F
-273F:0899 úAD lodsw ; String [si] to ax
-273F:089A 0B C0 or ax,ax ; Zero ?
-273F:089C 78 03 js loc_64 ; Jump if sign=1
-273F:089E A5 movsw ; Mov [si] to es:[di]
-273F:089F EB F8 jmp short loc_63 ; (0899)
-273F:08A1 loc_64: ; xref 273F:089C
-273F:08A1 33 C0 xor ax,ax ; Zero register
-273F:08A3 AB stosw ; Store ax to es:[di]
-273F:08A4 8E DD mov ds,bp
-273F:08A6 C6 06 9834 01 mov cursor_state, CURSORSTATE_ACTION
-273F:08AB A3 1924 mov hotspot_id, ax
-273F:08AE úBE 6CEF mov si, offset player_hotspot_rec
-273F:08B1 89 44 52 mov [si+HS_DEST_HOTSPOT],ax
-273F:08B4 88 44 2A mov [si+HS_ACTION_CTR],al
-273F:08B7 88 44 FF mov [si-1],al
-273F:08BA 8B DE mov bx,si
-273F:08BC 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:08BF 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:08C2 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:08C5 88 44 44 mov [si+HS_CHAR_MODE], al
-273F:08C8 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:08CB C7 47 01 65F3 mov word ptr [bx+CURRENT_ACTION_SUPPORT_TABLE], offset player_action_support_record
-273F:08D0 loc_65:
-273F:08D0 8E DD mov ds,bp
-273F:08D2 8B 0E 0782 mov cx, saved_mouse_x
-273F:08D6 89 0E 11D6 mov mouse_x2, cx
-273F:08DA 89 0E 11D1 mov mouse_x, cx
-273F:08DE 8B 16 0784 mov dx, saved_mouse_y
-273F:08E2 89 16 11D8 mov mouse_y2, dx
-273F:08E6 89 16 11D3 mov mouse_y, dx
-273F:08EA D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:08EC B8 0004 mov ax,4
-273F:08EF CD 33 int 33h ; Mouse driver ax=func 0004h
- ; set position, cx=horz,dx=vert
-273F:08F1 33 C0 xor ax,ax ; Zero register
-273F:08F3 A2 11DA mov mouse_buttons2, al
-273F:08F6 A2 38B0 mov data_781, al
-273F:08F9 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:08FE FF 16 075E call [show_cursor_proc]
-273F:0902 C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:04B9
-
-273F:0903 sub_12:
-273F:0903 B4 62 mov ah,62h
-273F:0905 CD 21 int 21h ; DOS Services ah=function 62h
- ; get Program Segment Prefix bx
-273F:0907 8E C3 mov es,bx
-273F:0909 26: F6 06 0080 FF test byte ptr es:data_8e,0FFh ; (0000:0080=0A0h)
-273F:090F 74 31 jz loc_ret_70 ; Jump if zero
-273F:0911 26: 8A 0E 0080 mov cl,es:data_8e ; (0000:0080=0A0h)
-273F:0916 32 ED xor ch,ch ; Zero register
-273F:0918 úBF 0081 mov di,data_8e+1 ; (0000:0081=1)
-
-273F:091B locloop_66: ; xref 273F:0940
-273F:091B 26: 8A 05 mov al,es:[di]
-273F:091E 3C 65 cmp al,65h ; 'e'
-273F:0920 75 07 jne loc_67 ; Jump if not equal
- assume ds:data_seg
-273F:0922 80 36 0742 02 xor video_style, 2
-273F:0927 EB 14 jmp short loc_69 ; (093D)
-273F:0929 loc_67: ; xref 273F:0920
-273F:0929 3C 6D cmp al,6Dh ; 'm'
-273F:092B 75 07 jne loc_68 ; Jump if not equal
-273F:092D 80 36 5660 08 xor music_status,8
-273F:0932 EB 09 jmp short loc_69 ; (093D)
-273F:0934 loc_68: ; xref 273F:092B
-273F:0934 3C 69 cmp al,69h ; 'i'
-273F:0936 75 05 jne loc_69 ; Jump if not equal
-273F:0938 80 36 11D0 40 xor menubar_state, 40h ; (31E4:11D0=3) '@'
-273F:093D loc_69: ; xref 273F:0927, 0932, 0936
-273F:093D 83 C7 01 add di,1
-273F:0940 E2 D9 loop locloop_66 ; Loop if cx > 0
-
-
-273F:0942 loc_ret_70: ; xref 273F:090F
-273F:0942 C3 retn
-273F:0943 00 critical_error db 0 ; xref 273F:019B, 01B2, 01E5, 01F3
- ; 021F, 0249, 0397, 03CA
- ; 0944
- initialise endp
-
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;
- ; External Entry Point
- ;
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-273F:0944 critical_handler proc far ; xref 273F:06E2
- assume ds:seg_code
-273F:0944 2E: C6 06 0943 01 mov cs:critical_error,1 ; (273F:0943=0)
-273F:094A 32 C0 xor al,al ; Zero register
-273F:094C CF iret ; Interrupt return
- critical_handler endp
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;
- ; External Entry Point
- ;
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-273F:094D CB retf_proc retf
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0074, 7097, 70BA, 8FB5
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:094E clear_layer_rects proc near
-273F:094E 1E push ds
-273F:094F 07 pop es
-273F:0950 úBF 0992 mov di,offset rects_layer_0
-273F:0953 B8 FFFF mov ax,0FFFFh
-273F:0956 B9 0200 mov cx,200h
-273F:0959 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
- assume ds:data_seg
-273F:095B A1 4CE0 mov ax, current_room_id
-273F:095E A3 4CE2 mov data_segment, ax
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:00AC, 3CBD, 411B, 7BB4, 8FC5, A825
-
-273F:0961 clear_hotspot_rects:
-273F:0961 1E push ds
-273F:0962 07 pop es
-273F:0963 úBF 0790 mov di,offset hotspot_rects_list
-273F:0966 B8 8181 mov ax,8181h
-273F:0969 B9 0100 mov cx,100h
-273F:096C F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:096E C3 retn
- clear_layer_rects endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0077, 709A, 70BD, 8FB8
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_load_layers proc near
-
-273F:096F loc_71: ; xref 273F:0977
-273F:096F 80 26 11D0 DF and menubar_state, 0DFh
-273F:0974 E8 F884 call read_and_validate_header
-273F:0977 72 F6 jc loc_71 ; Jump back if error occurred
-
-273F:0979 A1 4CE0 mov ax, current_room_id
-273F:097C 50 push ax
- assume ds:seg_code
-273F:097D 8B 1E 9832 mov bx, room_number
-273F:0981 E8 0364 call get_room_resource_pointer
-
-; At this point SI points to the data list for the room. For cell room, it's room=8181h to si=>c108h
-
-273F:0984 BF 0D92 mov di, offset room_layers
-273F:0987 83 C6 08 add si, ROOM_NUM_LAYERS
-273F:098A 8A 2C mov ch, [si] ; Get # screens
-273F:098C 83 C6 01 add si,1 ; Move to first layer id
-273F:098F F7 06 BA25 FFFF test viewing_room, 0FFFFh ; Viewing room without being there?
-273F:0995 74 03 jz loc_72
-273F:0997 80 C5 01 add ch,1 ; If yes, inc # screens to load
-273F:099A loc_72:
-273F:099A BB 0992 mov bx, offset rects_layer_0
-273F:099D 83 C3 4C add bx, offset rects_layer_0 - offset rects_layer_0 ; 4Ch
-273F:09A0 32 C9 xor cl, cl ; Starting at layer 0
-
-273F:09A2 loc_73:
-273F:09A2 51 push cx
-273F:09A3 56 push si
-273F:09A4 53 push bx
-273F:09A5 8B 04 mov ax,[si] ; Load the screen with palette
-273F:09A7 E8 0226 call read_screen
-273F:09AA A1 4CE0 mov ax, current_room_segment
-273F:09AD 89 05 mov [di], ax ; Store seg for layer start
-273F:09AF 57 push di
-273F:09B0 8E C0 mov es, ax
-273F:09B2 33 FF xor di,di ; Zero register
-273F:09B4 FF 16 0750 call [segment_screen_proc]
-273F:09B8 B1 04 mov cl,4
-273F:09BA D3 EF shr di,cl ; Convert to # paragraphs
-273F:09BC 01 3E 4CE0 add current_room_segment, di ; Increase by decoded size
-273F:09C0 01 3E 4CE2 add data_segment, di
-273F:09C4 5F pop di
-273F:09C5 83 C7 02 add di,2
-273F:09C8 A1 0DA2 mov ax, rectangle_size ; ax = 400h
-273F:09CB 89 05 mov [di],ax
-273F:09CD 83 C7 02 add di,2
-273F:09D0 5B pop bx
-273F:09D1 81 C3 0100 add bx,100h
-273F:09D5 5E pop si
-273F:09D6 83 C6 02 add si,2
-273F:09D9 59 pop cx
-273F:09DA 80 C1 01 add cl,1
-273F:09DD 80 ED 01 sub ch,1 ; Decrement number of layers
-273F:09E0 75 C0 jnz loc_73 ; Jump if not zero
-
-273F:09E2 58 pop ax
-273F:09E3 A3 4CE0 mov current_room_segment, ax
-273F:09E6 C3 retn
-
- room_load_layers endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0081, 70C4, 8FBF
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:09E7 sub_16 proc near
-273F:09E7 úBB 0ADE mov bx,offset data_593 ; (31E4:0ADE=0)
-273F:09EA E8 000D call sub_17 ; (09FA)
-273F:09ED úBB 0BDE mov bx,offset data_599 ; (31E4:0BDE=0)
-273F:09F0 E8 0007 call sub_17 ; (09FA)
-273F:09F3 úBB 0CDE mov bx,offset data_601 ; (31E4:0CDE=0)
-273F:09F6 E8 0001 call sub_17 ; (09FA)
-273F:09F9 C3 retn
- sub_16 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:09EA, 09F0, 09F6
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:09FA sub_17 proc near
-273F:09FA B9 0006 mov cx,6
-
-273F:09FD locloop_74: ; xref 273F:0A52
-273F:09FD 51 push cx
-273F:09FE 53 push bx
-273F:09FF B5 0A mov ch,0Ah
-273F:0A01 loc_75: ; xref 273F:0A4E
-273F:0A01 53 push bx
-273F:0A02 B1 06 mov cl,6
-273F:0A04 32 D2 xor dl,dl ; Zero register
-273F:0A06 loc_76: ; xref 273F:0A45
-273F:0A06 80 3F FF cmp byte ptr [bx],0FFh
-273F:0A09 75 04 jne loc_77 ; Jump if not equal
-273F:0A0B 32 D2 xor dl,dl ; Zero register
-273F:0A0D EB 30 jmp short loc_81 ; (0A3F)
-273F:0A0F loc_77: ; xref 273F:0A09
-273F:0A0F F6 C2 02 test dl,2
-273F:0A12 74 0A jz loc_78 ; Jump if zero
-273F:0A14 80 7F FF FF cmp byte ptr [bx-1],0FFh
-273F:0A18 75 04 jne loc_78 ; Jump if not equal
-273F:0A1A C6 47 FF FE mov byte ptr [bx-1],0FEh
-273F:0A1E loc_78: ; xref 273F:0A12, 0A18
-273F:0A1E F6 C2 04 test dl,4
-273F:0A21 74 0A jz loc_79 ; Jump if zero
-273F:0A23 80 7F 01 FF cmp byte ptr [bx+1],0FFh
-273F:0A27 75 04 jne loc_79 ; Jump if not equal
-273F:0A29 C6 47 01 FE mov byte ptr [bx+1],0FEh
-273F:0A2D loc_79: ; xref 273F:0A21, 0A27
-273F:0A2D 80 7F FF FF cmp byte ptr [bx-1],0FFh
-273F:0A31 74 03 je loc_80 ; Jump if equal
-273F:0A33 80 CA 02 or dl,2
-273F:0A36 loc_80: ; xref 273F:0A31
-273F:0A36 80 7F 01 FF cmp byte ptr [bx+1],0FFh
-273F:0A3A 74 03 je loc_81 ; Jump if equal
-273F:0A3C 80 CA 04 or dl,4
-273F:0A3F loc_81: ; xref 273F:0A0D, 0A3A
-273F:0A3F 83 C3 12 add bx,12h
-273F:0A42 80 E9 01 sub cl,1
-273F:0A45 75 BF jnz loc_76 ; Jump if not zero
-273F:0A47 5B pop bx
-273F:0A48 83 C3 01 add bx,1
-273F:0A4B 80 ED 01 sub ch,1
-273F:0A4E 75 B1 jnz loc_75 ; Jump if not zero
-273F:0A50 5B pop bx
-273F:0A51 59 pop cx
-273F:0A52 E2 A9 loop locloop_74 ; Loop if cx > 0
-
-273F:0A54 C3 retn
- sub_17 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1549, 15EF
- ; di = anim slot entry
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0A55 room_add_layer proc near
-273F:0A55 8B 05 mov ax, [di] ; Get X start
-273F:0A57 8B 5D 04 mov bx, [di+ANIM_WIDTH] ; Get width
-273F:0A5A 03 D8 add bx, ax
-273F:0A5C B1 05 mov cl,5
-273F:0A5E D3 E8 shr ax,cl ; ax=X rect start
-273F:0A60 D3 EB shr bx,cl ; bx=X rect end
-273F:0A62 2B D8 sub bx, ax
-273F:0A64 83 C3 01 add bx, 1 ; bx = num horiz rects
-273F:0A67 89 1E 0DAA mov num_horiz_rects, bx
-273F:0A6B 8B D8 mov bx, ax
-
-273F:0A6D 8B 45 02 mov ax, [di+ANIM_Y] ; Get Y position
-273F:0A70 8B 55 15 mov dx, [di+ANIM_HEIGHT_COPY] ; Get height copy
-273F:0A73 2D 0008 sub ax, 8
-273F:0A76 03 D0 add dx, ax
-273F:0A78 83 EA 01 sub dx, 1
-273F:0A7B B1 05 mov cl, 5
-273F:0A7D D3 E8 shr ax, cl ; ax=Y rect start
-273F:0A7F D3 EA shr dx, cl ; dx=Y rect end
-273F:0A81 2B D0 sub dx, ax ; dx=num vert rects-1
-273F:0A83 89 1E 0DA6 mov rect_x_start, bx
-273F:0A87 89 16 0DAC mov num_vert_rects, dx
-273F:0A8B 83 06 0DAC 01 add num_vert_rects, 1
-273F:0A90 03 C2 add ax, dx
-273F:0A92 A3 0DA8 mov rect_y_end, ax
-
-273F:0A95 D1 E0 shl ax,1 ; ax=y*2
-273F:0A97 8B F8 mov di,ax ; di=y*2
-273F:0A99 B1 03 mov cl,3
-273F:0A9B D3 E0 shl ax,cl ; ax=y*16
-273F:0A9D 03 C7 add ax,di ; ax=y*18
-273F:0A9F 03 C3 add ax,bx ; ax = yend*18 + x
-273F:0AA1 8B D8 mov bx,ax ; ax/bx = list start
-
-273F:0AA3 8B 0E 0DAA mov cx, num_horiz_rects
-
-; cx = num horiz rects,
-273F:0AA7 locloop_82:
-273F:0AA7 51 push cx
-273F:0AA8 53 push bx
-273F:0AA9 8B 16 0DA6 mov dx, rect_x_start
-273F:0AAD 83 EA 04 sub dx, 4
-273F:0AB0 72 3F jc loc_86 ; Jump if carry Set
-273F:0AB2 úBF 0A92 mov di, offset rects_layer_1
-273F:0AB5 BE 0D96 mov si, offset room_layers + 4 ; layer 1
-273F:0AB8 B9 0003 mov cx, 3 ; 3 layers
-
-273F:0ABB locloop_83: ; xref 273F:0AC7
-273F:0ABB 80 39 FF cmp byte ptr [bx+di], 0FFh ; Rect was empty?
-273F:0ABE 75 0B jne loc_84 ; If yes, then handle
-273F:0AC0 81 C7 0100 add di, 100h ; Check remaining layers
-273F:0AC4 83 C6 04 add si, 4 ; Next room_layers entry
-273F:0AC7 E2 F2 loop locloop_83 ; Loop layers
-
-273F:0AC9 EB 26 jmp short loc_86
-273F:0ACB loc_84:
-273F:0ACB 8B E9 mov bp,cx ; Save layer #
-273F:0ACD 8B 0E 0DAC mov cx,num_vert_rects
-273F:0AD1 A1 0DA8 mov ax,rect_y_end
-273F:0AD4 2D 0004 sub ax,4
-
-273F:0AD7 locloop_85: ; xref 273F:0AEF
-273F:0AD7 50 push ax
-273F:0AD8 51 push cx
-273F:0AD9 57 push di
-273F:0ADA 52 push dx
-273F:0ADB 53 push bx
-273F:0ADC 56 push si
-273F:0ADD FF 16 075C call [add_rect_proc] ; Add rect area (32x32)
-273F:0AE1 5E pop si
-273F:0AE2 5B pop bx
-273F:0AE3 5A pop dx
-273F:0AE4 5F pop di
-273F:0AE5 59 pop cx
-273F:0AE6 58 pop ax
-273F:0AE7 83 EB 12 sub bx, FULL_HORIZ_RECTS
-273F:0AEA 2D 0001 sub ax, 1
-273F:0AED 72 02 jc loc_86 ; Loop for remaining rows
-273F:0AEF E2 E6 loop locloop_85
-
-273F:0AF1 loc_86:
-273F:0AF1 5B pop bx
-273F:0AF2 83 C3 01 add bx, 1
-273F:0AF5 59 pop cx
-273F:0AF6 83 06 0DA6 01 add rect_x_start, 1
-273F:0AFB E2 AA loop locloop_82 ; Loop for remaining cols
-
-273F:0AFD C3 retn
- room_add_layer endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0084, 70C7, 8FC2
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0AFE sub_19 proc near
-273F:0AFE úBE 0B38 mov si, offset rects_layer_1 + 166
-273F:0B01 B9 0003 mov cx, MAX_NUM_LAYERS - 1
-
-273F:0B04 locloop_87: ; xref 273F:0B25
-273F:0B04 úBB 0009 mov bx, 9
-273F:0B07 loc_88: ; xref 273F:0B1F
-273F:0B07 80 38 FF cmp byte ptr [bx+si], 0FFh
-273F:0B0A 74 10 je loc_89 ; Jump if equal
-273F:0B0C C6 40 12 FE mov byte ptr [bx+si+12h], 0FEh
-273F:0B10 C6 40 24 FE mov byte ptr [bx+si+24h], 0FEh
-273F:0B14 C6 40 36 FE mov byte ptr [bx+si+36h], 0FEh
-273F:0B18 C6 40 48 FE mov byte ptr [bx+si+48h], 0FEh
-273F:0B1C loc_89: ; xref 273F:0B0A
-273F:0B1C 83 EB 01 sub bx, 1
-273F:0B1F 73 E6 jnc loc_88 ; Jump if carry=0
-273F:0B21 81 C6 0100 add si, 100h ; Move to next layer
-273F:0B25 E2 DD loop locloop_87
-
-273F:0B27 C3 retn
- sub_19 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1546, 15EC, 1631, 3CF9
- ; di = anim slot
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- flag_covered_cells proc near
-273F:0B28 50 push ax
-273F:0B29 8B 5D 02 mov bx, [di+ANIM_Y]
-273F:0B2C 83 EB 08 sub bx, MENUBAR_Y_SIZE
-273F:0B2F 8B C3 mov ax, bx ; bx = Y start
-273F:0B31 03 45 06 add ax, [di+ANIM_HEIGHT]
-273F:0B34 2D 0001 sub ax, 1 ; ax = Y end
-273F:0B37 B1 05 mov cl, 5
-273F:0B39 D3 E8 shr ax, cl ; ax=Y end/32
-273F:0B3B D3 EB shr bx, cl ; bx=Y start/32
-273F:0B3D 2B C3 sub ax, bx
-273F:0B3F 05 0001 add ax, 1 ; ax=# vert rects
-
-273F:0B42 50 push ax
-273F:0B43 D1 E3 shl bx, 1
-273F:0B45 8B D3 mov dx, bx
-273F:0B47 B1 03 mov cl, 3
-273F:0B49 D3 E3 shl bx, cl
-273F:0B4B 03 DA add bx, dx
-
-; The screen is broken down into a set of 10x6 32x32 cells.
-; bx = vertical cell rect block * 10
-
-273F:0B4D 8B 15 mov dx, [di] ; dx = X start
-273F:0B4F 8B 45 04 mov ax, [di+ANIM_WIDTH]
-273F:0B52 03 C2 add ax, dx
-273F:0B54 2D 0001 sub ax, 1 ; ax = X end
-273F:0B57 B1 05 mov cl, 5
-273F:0B59 D3 EA shr dx, cl ; dx = X start/32
-273F:0B5B D3 E8 shr ax, cl ; ax = X end/32
-273F:0B5D 2B C2 sub ax, dx
-273F:0B5F 03 DA add bx, dx ; bx = start rect index
-273F:0B61 ú81 C3 0790 add bx, offset hotspot_rects_list
-273F:0B65 05 0001 add ax, 1 ; ax = # horiz rects
-273F:0B68 5D pop bp
-273F:0B69 5A pop dx
-
-; Loop, bp = number of cell rows, ax = number of cell cols
-
-273F:0B6A loc_90:
-273F:0B6A 8B C8 mov cx, ax
-273F:0B6C 53 push bx
-
-273F:0B6D locloop_91:
-273F:0B6D 08 17 or [bx], dl ; Enable cell rect
-273F:0B6F 80 8F 0100 01 or byte ptr [bx+100h], 1
-273F:0B74 83 C3 01 add bx, 1
-273F:0B77 E2 F4 loop locloop_91 ; Loop through horiz # cells
-
-273F:0B79 5B pop bx
-273F:0B7A 83 C3 12 add bx, FULL_HORIZ_RECTS
-273F:0B7D 83 ED 01 sub bp, 1 ; Loop through vert # cells
-273F:0B80 75 E8 jnz loc_90
-273F:0B82 C3 retn
- flag_covered_cells endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1447, 3307, 6D22, 6FDD, 8B52
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0B83 sub_21 proc near
-273F:0B83 loc_92: ; xref 273F:23E7, 2450, 8CD8, 9333
-273F:0B83 ú51 push cx
-273F:0B84 B1 03 mov cl,3
-273F:0B86 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:0B88 D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:0B8A D3 E5 shl bp,cl ; Shift w/zeros fill
-273F:0B8C D3 E2 shl dx,cl ; Shift w/zeros fill
-273F:0B8E 59 pop cx
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:3291, 62D6, 8BE5, 8BFA
-
-273F:0B8F sub_22:
-273F:0B8F loc_93: ; xref 273F:2272, 33B0
-273F:0B8F ú51 push cx
-273F:0B90 03 E8 add bp,ax
-273F:0B92 03 D3 add dx,bx
-273F:0B94 83 C5 1F add bp,1Fh
-273F:0B97 83 C2 1F add dx,1Fh
-273F:0B9A B1 05 mov cl,5
-273F:0B9C D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:0B9E D3 EB shr bx,cl ; Shift w/zeros fill
-273F:0BA0 D3 ED shr bp,cl ; Shift w/zeros fill
-273F:0BA2 D3 EA shr dx,cl ; Shift w/zeros fill
-273F:0BA4 2B E8 sub bp,ax
-273F:0BA6 2B D3 sub dx,bx
-273F:0BA8 93 xchg bx,ax
-273F:0BA9 05 0004 add ax,4
-273F:0BAC B1 12 mov cl,12h
-273F:0BAE F6 E1 mul cl ; ax = reg * al
-273F:0BB0 03 C3 add ax,bx
-273F:0BB2 05 0794 add ax, offset hotspot_rects_list + 4 ; 794h
-273F:0BB5 8B D8 mov bx,ax
-273F:0BB7 58 pop ax
-273F:0BB8 loc_94: ; xref 273F:0BCD
-273F:0BB8 53 push bx
-273F:0BB9 8B CD mov cx,bp
-
-273F:0BBB locloop_95: ; xref 273F:0BC4
-273F:0BBB 08 07 or [bx],al
-273F:0BBD 08 87 0100 or byte ptr ds:[100h][bx],al ; (273F:0100=6)
-273F:0BC1 83 C3 01 add bx,1
-273F:0BC4 E2 F5 loop locloop_95 ; Loop if cx > 0
-
-273F:0BC6 5B pop bx
-273F:0BC7 83 C3 12 add bx,12h
-273F:0BCA 83 EA 01 sub dx,1
-273F:0BCD 75 E9 jnz loc_94 ; Jump if not zero
-273F:0BCF C3 retn
- sub_21 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:09A7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0BD0 read_screen proc near
-273F:0BD0 53 push bx
-273F:0BD1 51 push cx
-273F:0BD2 57 push di
-273F:0BD3 8B 0E 4CE2 mov cx, data_segment
-273F:0BD7 BA 0080 mov dx, ENTRY_READ_BUFFER
-273F:0BDA E8 F737 call read_entry ; (0314)
-273F:0BDD A1 4CE2 mov ax, data_segment
-273F:0BE0 8E C0 mov es,ax
-273F:0BE2 26: A1 0080 mov ax,es:[ENTRY_READ_BUFFER]
-273F:0BE6 86 E0 xchg ah,al
-273F:0BE8 25 FFFE and ax,0FFFEh
-273F:0BEB 3D 0140 cmp ax,140h
-273F:0BEE 74 2F je loc_97 ; Jump if equal
-
-273F:0BF0 A1 4CE4 mov ax, data_segment2
-273F:0BF3 8E C0 mov es,ax
-273F:0BF5 8B 16 4CE2 mov dx,data_segment
-273F:0BF9 E8 2D8E call decode_file_entry
-273F:0BFC 8B 1E 9832 mov bx, room_number ; Check if already processing
-273F:0C00 3A 1E 1456 cmp bl, current_room_num ; this room (if so, no need
-273F:0C04 74 15 je loc_96 ; to reload palette)
-273F:0C06 53 push bx
-273F:0C07 E8 00DE call get_room_resource_pointer
-273F:0C0A 8B 44 09 mov ax, [si+ROOM_FIRST_LAYER]
-273F:0C0D 25 FFE0 and ax, 0FFE0h
-273F:0C10 2D 0001 sub ax,1
-273F:0C13 E8 2EB1 call read_palette ; Get the palette
-273F:0C16 5B pop bx
-273F:0C17 88 1E 1456 mov current_room_num, bl
-273F:0C1B loc_96:
-273F:0C1B 5F pop di
-273F:0C1C 59 pop cx
-273F:0C1D 5B pop bx
-273F:0C1E C3 retn
-273F:0C1F loc_97: ; xref 273F:0BEE
-273F:0C1F 83 3E 9832 31 cmp room_number, 31h
-273F:0C24 75 05 jne loc_98 ; Jump if not equal
-273F:0C26 B8 F1FF mov ax,0F1FFh
-273F:0C29 EB 0A jmp short loc_99 ; (0C35)
-273F:0C2B loc_98: ; xref 273F:0C24
-273F:0C2B 83 3E 9832 06 cmp room_number, 6
-273F:0C30 75 0D jne loc_100 ; Jump if not equal
-273F:0C32 B8 45FF mov ax,45FFh
-273F:0C35 loc_99: ; xref 273F:0C29
-273F:0C35 E8 2E8F call read_palette ; (3AC7)
-273F:0C38 C6 06 1456 FF mov current_room_num, 0FFh
-273F:0C3D EB 23 jmp short loc_101 ; (0C62)
-273F:0C3F loc_100: ; xref 273F:0C30
-273F:0C3F 80 3E 1456 FF cmp current_room_num, 0FFh
-273F:0C44 75 1C jne loc_101 ; Jump if not equal
-273F:0C46 A0 00B1 mov al,data_526 ; (31E4:00B1=1)
-273F:0C49 2C 05 sub al,5
-273F:0C4B D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C4D D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C4F D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C51 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C53 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C55 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0C57 0D 00FF or ax,0FFh
-273F:0C5A E8 2E6A call read_palette ; (3AC7)
-273F:0C5D C6 06 1456 00 mov current_room_num, 0
-273F:0C62 loc_101: ; xref 273F:0C3D, 0C44
-273F:0C62 A1 4CE4 mov ax, data_segment2
-273F:0C65 8E C0 mov es,ax
-273F:0C67 8B 16 4CE2 mov dx,data_segment
-273F:0C6B E8 17FC call ega_decode_entry
-273F:0C6E 8B D1 mov dx,cx
-273F:0C70 83 EA 01 sub dx,1
-273F:0C73 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0C75 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0C77 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0C79 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:0C7B 83 C2 01 add dx,1
-273F:0C7E 5F pop di
-273F:0C7F 59 pop cx
-273F:0C80 5B pop bx
-273F:0C81 C3 retn
- read_screen endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00A0
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0C82 hotspots_load proc near
-273F:0C82 BF 5EB8 mov di, offset hotspot_table_5
-273F:0C85 BB 0407 mov bx,407h
-273F:0C88 E8 0006 call hotspots_load_2
-273F:0C8B úBF 623E mov di, offset hotspot_table_3
-273F:0C8E BB 270F mov bx,270Fh
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:0C88
-
-273F:0C91 hotspots_load_2:
-273F:0C91 loc_102: ; xref 273F:0CA5, 0CBB, 0CC3
-273F:0C91 ú83 C3 01 add bx,1
-273F:0C94 8B 35 mov si,[di] ; Get hotspot offset
-273F:0C96 83 FE FF cmp si,0FFFFh
-273F:0C99 74 2A je loc_ret_106
-273F:0C9B 83 C7 09 add di,9 ; Move to next hotspot header
-273F:0C9E 8B 54 06 mov dx,[si+6] ; Get room number
-273F:0CA1 3B 16 9832 cmp dx, room_number ; Is it the current room?
-273F:0CA5 75 EA jne loc_102 ; No, so move to next hotspot
-273F:0CA7 57 push di
-273F:0CA8 úBF B14E mov di, offset animation_table
-273F:0CAB B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:0CAE locloop_103:
-273F:0CAE 3B 5D 1B cmp bx,[di+ANIM_HOTSPOT_ID] ; Already present?
-273F:0CB1 74 07 je loc_104 ; If yes, don't add
-273F:0CB3 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:0CB6 E2 F6 loop locloop_103 ; Check remaining entries
-
-273F:0CB8 EB 03 jmp short loc_105 ; Jump to add entry
-273F:0CBA loc_104:
-273F:0CBA 5F pop di
-273F:0CBB EB D4 jmp short loc_102 ; (0C91)
-273F:0CBD loc_105: ; xref 273F:0CB8
-273F:0CBD 53 push bx ; Add hotspot entry
-273F:0CBE E8 0008 call animation_load_entry_2
-273F:0CC1 5B pop bx
-273F:0CC2 5F pop di
-273F:0CC3 EB CC jmp short loc_102 ; Check remaining hotspots
-
-273F:0CC5 loc_ret_106:
-273F:0CC5 C3 retn
- hotspots_load endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:965C, 9690
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0CC6 animation_load_entry: proc near
-273F:0CC6 úE8 001F call get_room_resource_pointer
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:0CBE
-
-273F:0CC9 animation_load_entry_2:
-273F:0CC9 F7 44 0B FFFF test word ptr [si+HS_ANIM_OFFSET], 0FFFFh ; Already acive?
-273F:0CCE 75 F5 jnz loc_ret_106 ; Jump if yes
-273F:0CD0 80 7C 15 FF cmp byte ptr [si+HS_LAYER], 0FFh ; Does hotspot have a layer?
-273F:0CD4 74 EF je loc_ret_106 ; Jump if no
-273F:0CD6 80 64 07 7F and byte ptr [si+7],7Fh ; Deactivate any suppression bit on room #
-273F:0CDA 8B 44 09 mov ax, [si+HS_LOAD_OFFSET]
-273F:0CDD F6 44 08 FF test byte ptr [si+HS_LOAD_FLAG],0FFh
-273F:0CE1 75 02 jnz loc_108 ; Jump if not zero
-273F:0CE3 FF E0 jmp ax
-273F:0CE5 loc_108: ; xref 273F:0CE1
-273F:0CE5 E9 314C jmp sequence_execute
- animation_load_entry endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0092, 0981, 0C07, 0CC6, 10AE, 1205, 46A4
- ; 46FE, 4703, 508F, 612B, 613D, 614D, 6267
- ; 6397, 64EA, 65AA, 65C1, 715D, 7164, 716F
- ; 76C4, 79C8, 7BF4, 7C03, 7C0B, 8277, 827F
- ; 8E6C, 9E8E, 9EB5, 9EBD, 9EC9, 9EE4, 9EF3
- ; 9F16, 9F59
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0CE8 get_room_resource_pointer proc near
-273F:0CE8 8B C3 mov ax, bx
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:004F, 11D1, 1481, 1490, 1A98, 428C, 4531
- ; 45C2, 45D1, 47E1, 547B, 5672, 58A2, 5AA7
- ; 5B08, 5B82, 5BE6, 5C0E, 5CF1, 5D23, 5DC0
- ; 5E90, 63BD, 6574, 664D, 82DB, 8422, 89D1
- ; 8DAF, 8DC4, 99C2, 99FC, A158
-
-273F:0CEA get_room_resource_pointer2:
-273F:0CEA BE BF40 mov si, offset room_info_table
-273F:0CED 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:0CF0 78 20 js loc_111 ; Jump if sign=1
-273F:0CF2 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
-273F:0CF5 73 08 jae loc_109 ; Jump if above or =
-273F:0CF7 BE 5D98 mov si, offset hotspot_table_2
-273F:0CFA 2D 03E8 sub ax, PLAYER_HOTSPOT_ID
-273F:0CFD EB 13 jmp short loc_111 ; (0D12)
-273F:0CFF loc_109: ; xref 273F:0CF5
-273F:0CFF 3D 4E20 cmp ax,4E20h
-273F:0D02 73 08 jae loc_110 ; Jump if above or =
-273F:0D04 BE 623E mov si, offset hotspot_table_3
-273F:0D07 2D 2710 sub ax, START_EXIT_HOTSPOT_ID
-273F:0D0A EB 06 jmp short loc_111 ; (0D12)
-273F:0D0C loc_110: ; xref 273F:0D02
-273F:0D0C úBE 63B1 mov si, offset hotspot_table_4
-273F:0D0F 2D 7530 sub ax, START_NONVISUAL_HOTSPOT_ID
-273F:0D12 loc_111: ; xref 273F:0CF0, 0CFD, 0D0A
-273F:0D12 03 F0 add si,ax
-273F:0D14 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D16 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D18 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D1A 03 F0 add si,ax
-273F:0D1C 8B 34 mov si,[si] ; Get reference from table
-273F:0D1E C3 retn
- get_room_resource_pointer endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:62FC, 6943, 87DB, 87E4, 8E8A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0D1F get_room_resource_pointer3 proc near
-273F:0D1F 8B C3 mov ax,bx
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:1378, 5452, 596E, 59B8, 5B5D, 7EB4, 8A6D
-
-273F:0D21 get_room_resource_pointer4:
-273F:0D21 BE BF40 mov si, offset room_info_table
-273F:0D24 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:0D27 72 20 jb loc_114 ; Jump if below
-273F:0D29 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
-273F:0D2C 73 08 jae loc_112 ; Jump if above or =
-273F:0D2E BE 5D98 mov si, offset hotspot_table_2
-273F:0D31 2D 03E8 sub ax, PLAYER_HOTSPOT_ID
-273F:0D34 EB 13 jmp short loc_114 ; (0D49)
-273F:0D36 loc_112: ; xref 273F:0D2C
-273F:0D36 3D 4E20 cmp ax,4E20h
-273F:0D39 73 08 jae loc_113 ; Jump if above or =
-273F:0D3B BE 623E mov si, offset hotspot_table_3
-273F:0D3E 2D 2710 sub ax, START_EXIT_HOTSPOT_ID
-273F:0D41 EB 06 jmp short loc_114 ; (0D49)
-273F:0D43 loc_113: ; xref 273F:0D39
-273F:0D43 BE 63B1 mov si, offset hotspot_table_4
-273F:0D46 2D 7530 sub ax, START_NONVISUAL_HOTSPOT_ID
-273F:0D49 loc_114: ; xref 273F:0D27, 0D34, 0D41
-273F:0D49 03 F0 add si,ax
-273F:0D4B D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D4D D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D4F D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:0D51 03 F0 add si,ax
-273F:0D53 C3 retn
- get_room_resource_pointer3 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:669E, 66B3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0D54 sub_32 proc near
-273F:0D54 1E push ds
-273F:0D55 1E push ds
-273F:0D56 07 pop es
-273F:0D57 8E DD mov ds,bp
-273F:0D59 55 push bp
-273F:0D5A úBF 31E6 mov di, offset popmenu_entry_contents
-273F:0D5D 26: C7 45 FE 0000 mov word ptr es:[di-2],0
-273F:0D63 úBE 623E mov si, offset hotspot_table_3
-273F:0D66 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
-273F:0D69 E8 0003 call sub_33 ; (0D6F)
-273F:0D6C 5D pop bp
-273F:0D6D 1F pop ds
-
-273F:0D6E loc_ret_115: ; xref 273F:0D74
-273F:0D6E C3 retn
- sub_32 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0D69
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0D6F sub_33 proc near
-273F:0D6F loc_116: ; xref 273F:0DAD
-273F:0D6F ú8B 1C mov bx,[si]
-273F:0D71 83 FB FF cmp bx,0FFFFh
-273F:0D74 74 F8 je loc_ret_115 ; Jump if equal
-273F:0D76 81 7F 06 03E8 cmp word ptr [bx+6], PLAYER_HOTSPOT_ID
-273F:0D7B 75 2A jne loc_118 ; Jump if not equal
-273F:0D7D 8A 44 08 mov al,[si+8]
-273F:0D80 3C 0F cmp al,0Fh
-273F:0D82 74 06 je loc_117 ; Jump if equal
-273F:0D84 84 06 9836 test al, header_flag_mask
-273F:0D88 74 1D jz loc_118 ; Jump if zero
-273F:0D8A loc_117: ; xref 273F:0D82
-273F:0D8A 8B C5 mov ax,bp
-273F:0D8C AB stosw ; Store ax to es:[di]
-273F:0D8D B0 01 mov al,1
-273F:0D8F AA stosb ; Store al to es:[di]
-273F:0D90 8B 44 02 mov ax,[si+2]
-273F:0D93 80 E4 1F and ah,1Fh
-273F:0D96 1E push ds
-273F:0D97 56 push si
-273F:0D98 06 push es
-273F:0D99 06 push es
-273F:0D9A 1F pop ds
-273F:0D9B E8 6F9C call decode_string
-273F:0D9E 07 pop es
-273F:0D9F 5E pop si
-273F:0DA0 1F pop ds
-273F:0DA1 26: 83 06 31E4 01 add es:data_31e4, 1
-273F:0DA7 loc_118: ; xref 273F:0D7B, 0D88
-273F:0DA7 83 C5 01 add bp,1
-273F:0DAA 83 C6 09 add si,9
-273F:0DAD EB C0 jmp short loc_116 ; (0D6F)
- sub_33 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:66EC, 6787, 680A, 6827, 684A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- prepare_ask_item_list proc near
-273F:0DAF C7 06 31E4 0000 mov data_31e4, 0
-273F:0DB5 C7 06 30D4 0000 mov hotspot_display_buffer, 0
-273F:0DBB 2D 0001 sub ax, 1
-273F:0DBE 33 DB xor bx, bx ; Set actions word index in hotspot
-273F:0DC0 3C 10 cmp al, ACTION_LOOK_THROUGH - 1
-273F:0DC2 72 05 jb loc_119 ; Jump if below
-273F:0DC4 BB 0002 mov bx, 2
-273F:0DC7 2C 10 sub al, 10h
-273F:0DC9 loc_119: ; xref 273F:0DC2
-273F:0DC9 BA 0001 mov dx,1
-273F:0DCC 8A C8 mov cl, al
-273F:0DCE D3 E2 shl dx, cl ; Set bitmask within actions word
-273F:0DD0 1E push ds
-273F:0DD1 07 pop es
-273F:0DD2 8E DD mov ds, bp
-273F:0DD4 úBF 31E6 mov di, offset popmenu_entry_contents
-273F:0DD7 26: 8B 0E 3379 mov cx, es:saved_room_number2
-273F:0DDC úBE BF49 mov si, offset room_info_table + RH_TABLE_ENTRY_SIZE
-273F:0DDF BD 0001 mov bp, 1
-273F:0DE2 E8 0029 call prepare_ask_item_list_inner
-273F:0DE5 úBE 5D98 mov si, offset hotspot_table_2
-273F:0DE8 BD 03E8 mov bp, PLAYER_HOTSPOT_ID
-273F:0DEB E8 0020 call prepare_ask_item_list_inner
-273F:0DEE úBE 5EB8 mov si, offset hotspot_table_5
-273F:0DF1 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
-273F:0DF4 E8 0017 call prepare_ask_item_list_inner
-273F:0DF7 úBE 623E mov si, offset hotspot_table_3
-273F:0DFA BD 2710 mov bp, START_EXIT_HOTSPOT_ID
-273F:0DFD E8 000E call prepare_ask_item_list_inner
-273F:0E00 úBE 63B1 mov si, offset hotspot_table_4
-273F:0E03 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
-273F:0E06 E8 0005 call prepare_ask_item_list_inner
-273F:0E09 8C DD mov bp, ds
-273F:0E0B 06 push es
-273F:0E0C 1F pop ds
-273F:0E0D C3 retn
- prepare_ask_item_list endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0DE2, 0DEB, 0DF4, 0DFD, 0E06
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- prepare_ask_item_list_inner proc near
-273F:0E0E ú56 push si
-273F:0E0F 83 3C FF cmp word ptr [si+HSH_OFFSET], 0FFFFh ; End of list reached?
-273F:0E12 75 02 jne loc_121 ; Jump if not equal
-273F:0E14 5E pop si ; Exit
-273F:0E15 C3 retn
-273F:0E16 loc_121: ; xref 273F:0E12
-273F:0E16 8A 44 08 mov al, [si+HSH_FLAGS]
-273F:0E19 3C 0F cmp al, 15
-273F:0E1B 74 09 je loc_122 ; Jump if equal
-273F:0E1D 84 06 9836 test al, header_flag_mask
-273F:0E21 75 03 jnz loc_122 ; Jump if not zero
-273F:0E23 E9 0080 jmp loc_128 ; (0EA6)
-273F:0E26 loc_122: ; xref 273F:0E1B, 0E21
-273F:0E26 8B 44 02 mov ax, [si+HSH_NAME] ; Get hotspot name
-273F:0E29 8B 34 mov si, [si+HSH_OFFSET]
-273F:0E2B F6 44 03 20 test byte ptr [si+HS_FLAGS1], 20h
-273F:0E2F 75 75 jnz loc_128 ; Jump if not zero
-273F:0E31 F6 44 03 80 test byte ptr [si+HS_FLAGS1], 80h
-273F:0E35 74 6F jz loc_128 ; Jump if zero
-273F:0E37 81 FD 03E8 cmp bp, PLAYER_HOTSPOT_ID ; Is it the room list?
-273F:0E3B 72 18 jb loc_124 ; Jump if yes
-273F:0E3D F6 44 03 10 test byte ptr [si+HS_FLAGS1], 10h
-273F:0E41 74 05 jz loc_123 ; Jump if zero
-273F:0E43 39 4C 06 cmp [si+HS_ROOM_NUM], cx
-273F:0E46 75 5E jne loc_128 ; Jump if not equal
-273F:0E48 loc_123: ; xref 273F:0E41
-273F:0E48 26: 3B 2E 3350 cmp bp, es:saved_zero
-273F:0E4D 74 57 je loc_128 ; Jump if equal
-273F:0E4F 3B 2E 1924 cmp bp, hotspot_id
-273F:0E53 74 51 je loc_128 ; Jump if equal
-273F:0E55 loc_124:
-273F:0E55 85 10 test dx, [bx+si] ; Check if hotspot has action
-273F:0E57 74 4D jz loc_128 ; Skip if not
-273F:0E59 3D 017A cmp ax, 17Ah ; Special name Ids to skip
-273F:0E5C 74 43 je loc_127
-273F:0E5E 3D 0147 cmp ax, 147h
-273F:0E61 74 3E je loc_127
-
-273F:0E63 úBE 30D6 mov si, offset ask_name_list
-273F:0E66 26: 8B 0E 30D4 mov cx, es:ask_num_names
-273F:0E6B 0B C9 or cx, cx ; Zero ?
-273F:0E6D 74 0A jz loc_126 ; Jump if zero
-
-273F:0E6F locloop_125: ; xref 273F:0E77
-273F:0E6F 26: 3B 04 cmp ax, es:[si] ; Is item's name in list?
-273F:0E72 74 2D je loc_127 ; If yes than skip
-273F:0E74 83 C6 02 add si, 2 ; Move to next entry
-273F:0E77 E2 F6 loop locloop_125 ; Loop if cx > 0
-
-273F:0E79 loc_126: ; xref 273F:0E6D
-273F:0E79 26: 89 2D mov es:[di], bp ; Save hotspot Id in output list
-273F:0E7C 26: C6 45 02 01 mov byte ptr es:[di+2], 1
-273F:0E81 83 C7 03 add di, 3
-273F:0E84 26: 83 06 31E4 01 add word ptr es:data_31e4, 1
-273F:0E8A 26: 89 04 mov es:[si], ax ; Save hotspot's name
-273F:0E8D 26: 83 06 30D4 01 add es:ask_num_names, 1
-273F:0E93 1E push ds
-273F:0E94 06 push es
-273F:0E95 1F pop ds
-273F:0E96 53 push bx
-273F:0E97 52 push dx
-273F:0E98 80 E4 1F and ah, 1Fh
-273F:0E9B E8 6E9C call decode_string
-273F:0E9E 5A pop dx
-273F:0E9F 5B pop bx
-273F:0EA0 1F pop ds
-273F:0EA1 loc_127: ; xref 273F:0E5C, 0E61, 0E72
-273F:0EA1 26: 8B 0E 3379 mov cx, es:saved_room_number2
-273F:0EA6 loc_128:
-
-273F:0EA6 5E pop si ; Move to next header entry
-273F:0EA7 83 C6 09 add si, HOTSPOT_TABLE_ENTRY_SIZE
-273F:0EAA 83 C5 01 add bp, 1
-273F:0EAD E9 FF5E jmp prepare_ask_item_list_inner
- prepare_ask_item_list_inner endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:522F, 6010
- ; Part of this procedure changes a player's frame
- ; si=hotspot, di=slot
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_update_frame proc near
-273F:0EB0 56 push si
-273F:0EB1 57 push di
-273F:0EB2 53 push bx
-273F:0EB3 8B 5C 24 mov bx, [si+HS_MOVEMENT_OFFSET]
-273F:0EB6 8B 44 26 mov ax, [si+HS_STEP_CTR]
-273F:0EB9 3B 47 02 cmp ax, [bx+2] ; Any steps remaining?
-273F:0EBC 75 23 jne loc_130 ; Yes, so carry on
-273F:0EBE 83 C3 04 add bx, 4 ; Move to next movement rec
-273F:0EC1 C7 44 26 0000 mov word ptr [si+HS_STEP_CTR], 0 ; Reset counter
-273F:0EC6 C7 44 28 0000 mov word ptr [si+HS_FRAME_OFFSET], 0 ; Reset offset
-273F:0ECB 89 5C 24 mov [si+HS_MOVEMENT_OFFSET], bx ; Update movement ptr
-273F:0ECE 83 3F FF cmp word ptr [bx], 0FFFFh ; At end of list?
-273F:0ED1 75 07 jne loc_129
-273F:0ED3 B8 0001 mov ax,1 ; Yes - so return
-273F:0ED6 5B pop bx
-273F:0ED7 5F pop di
-273F:0ED8 5E pop si
-273F:0ED9 C3 retn
-273F:0EDA loc_129:
-273F:0EDA 57 push di
-273F:0EDB 8B 3F mov di, [bx] ; Get ptr to direction frames
-273F:0EDD 33 DB xor bx, bx
-273F:0EDF EB 14 jmp short loc_131
-273F:0EE1 loc_130:
-273F:0EE1 57 push di
-273F:0EE2 8B 3F mov di, [bx] ; Get ptr to direction frames
-273F:0EE4 8B 5C 28 mov bx, [si+HS_FRAME_OFFSET]; Get offset for movement frame
-273F:0EE7 03 FB add di, bx ; Add on offset
-273F:0EE9 83 3D FF cmp word ptr [di], 0FFFFh ; End of movement set for direciton?
-273F:0EEC 75 07 jne loc_131 ; Jump if not
-273F:0EEE 2B FB sub di, bx
-273F:0EF0 33 DB xor bx, bx
-273F:0EF2 89 5C 28 mov [si+HS_FRAME_OFFSET], bx ; Reset to start of movement data
-; di=movement record 5bb8h, si=6cefh
-273F:0EF5 loc_131:
-273F:0EF5 8B 05 mov ax, [di+MOVEMENT_FRAME_NUM] ; Get new frame number
-273F:0EF7 57 push di
-273F:0EF8 8B 7C 21 mov di, [si+HS_PIXEL_OFFSET]
-273F:0EFB 8B 4D 07 mov cx, [di+PIXEL_FRAME_SIZE]
-273F:0EFE F7 E1 mul cx ; Calculate frame offset
-273F:0F00 8B 4D 03 mov cx, [di+PIXEL_DATA_SEGMENT] ; Get loaded data segment
-273F:0F03 5B pop bx ; bx = movement rec
-273F:0F04 5F pop di ; di = anim slot
-273F:0F05 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax ; Store new offset
-273F:0F08 89 4D 0A mov [di+ANIM_SEGMENT], cx ; Store segment
-273F:0F0B 8B 47 02 mov ax, [bx+MOVEMENT_X_CHANGE]
-273F:0F0E 0B C0 or ax, ax ; Any x change?
-273F:0F10 74 13 jz loc_134 ; Jump if zero
-273F:0F12 78 06 js loc_132 ; Jump if -x direction
-273F:0F14 C6 45 26 03 mov byte ptr [di+ANIM_DIRECTION], FACING_RIGHT
-273F:0F18 EB 04 jmp short loc_133
-273F:0F1A loc_132:
-273F:0F1A C6 45 26 02 mov byte ptr [di+ANIM_DIRECTION], FACING_LEFT
-273F:0F1E loc_133:
-273F:0F1E 03 05 add ax, [di+ANIM_X] ; Update char X pos
-273F:0F20 89 05 mov [di+ANIM_X], ax
-273F:0F22 89 44 0D mov [si+HS_X], ax
-273F:0F25 loc_134:
-273F:0F25 8B 47 04 mov ax, [bx+MOVEMENT_Y_CHANGE]
-273F:0F28 C7 45 22 0000 mov word ptr [di+22h], 0
-273F:0F2D 0B C0 or ax, ax ; Any y change?
-273F:0F2F 74 1C jz loc_137 ; Jump if none
-273F:0F31 78 06 js loc_135 ; Jump if -y direction
-273F:0F33 C6 45 26 01 mov byte ptr [di+ANIM_DIRECTION], FACING_DOWN
-273F:0F37 EB 04 jmp short loc_136 ; (0F3D)
-273F:0F39 loc_135: ; xref 273F:0F31
-273F:0F39 C6 45 26 00 mov byte ptr [di+ANIM_DIRECTION], FACING_UP
-273F:0F3D loc_136:
-273F:0F3D C7 45 22 0002 mov word ptr [di+22h], 2
-273F:0F42 03 45 02 add ax, [di+ANIM_Y] ; Update char Y pos
-273F:0F45 89 44 0F mov [si+HS_Y], ax
-273F:0F48 89 45 02 mov [di+ANIM_Y], ax
-273F:0F4B 8B 05 mov ax, [di+ANIM_X]
-273F:0F4D loc_137:
-273F:0F4D 83 44 28 06 add word ptr [si+HS_FRAME_OFFSET], MOVEMENT_REC_SIZE
-273F:0F51 83 44 26 01 add word ptr [si+HS_STEP_CTR], 1
-273F:0F55 33 C0 xor ax, ax
-273F:0F57 5B pop bx
-273F:0F58 5F pop di
-273F:0F59 5E pop si
-273F:0F5A C3 retn
- character_update_frame endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; hotspot_script_execute
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:0F5B loc_138:
-273F:0F5B 26: 8B 04 mov ax,es:[si] ; Set pointer to disk
-273F:0F5E 83 C6 02 add si,2 ; animation record
-273F:0F61 89 47 21 mov [bx+21h],ax
-273F:0F64 53 push bx
-273F:0F65 8B D8 mov bx,ax
-273F:0F67 8B 47 03 mov ax,[bx+3] ; Copy over pixel segment?
-273F:0F6A 5B pop bx
-273F:0F6B 89 45 0A mov [di+0Ah],ax
-273F:0F6E C7 45 08 0000 mov word ptr [di+8],0 ; Reset frame pointer
-273F:0F73 EB 3F jmp short loc_143
-
-273F:0F75 loc_139: ; xref 273F:0FC7
-273F:0F75 26: 8B 04 mov ax,es:[si] ; Get X start pos
-273F:0F78 83 C6 02 add si,2
-273F:0F7B 89 47 0D mov [bx+0Dh],ax ; Store X start in hotspot
-273F:0F7E 89 05 mov [di],ax ; resource and anim slot
-273F:0F80 26: 8B 04 mov ax,es:[si] ; Get Y start pos
-273F:0F83 83 C6 02 add si,2
-273F:0F86 89 47 0F mov [bx+0Fh],ax ; Store Y start in hotspot
-273F:0F89 89 45 02 mov [di+2],ax ; resource and anim slot
-273F:0F8C EB 26 jmp short loc_143
-
-273F:0F8E loc_140: ; xref 273F:0FC2
-273F:0F8E 26: 8B 04 mov ax,es:[si]
-273F:0F91 83 C6 02 add si,2
-273F:0F94 89 47 1F mov [bx+1Fh],ax
-273F:0F97 89 77 24 mov [bx+24h],si
-273F:0F9A 8B F3 mov si,bx
-273F:0F9C 5B pop bx
-273F:0F9D 0D 0001 or ax,1
-273F:0FA0 C3 retn
-273F:0FA1 loc_141: ; xref 273F:0FD1
-273F:0FA1 26: 8B 34 mov si,es:[si]
-273F:0FA4 EB 0E jmp short loc_143 ; (0FB4)
-273F:0FA6 loc_142: ; xref 273F:0FE5
-273F:0FA6 E9 00E8 jmp loc_153 ; (1091)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:0FA9 hotspot_script_execute proc near
-273F:0FA9 53 push bx
-273F:0FAA 8B DE mov bx, si
-273F:0FAC 8B 74 24 mov si, [si+HS_SCRIPT_OFFSET]
-273F:0FAF B8 40E6 mov ax, scripts2_seg
-273F:0FB2 8E C0 mov es, ax
-
-273F:0FB4 loc_143:
-273F:0FB4 ú26: 8B 04 mov ax,es:[si]
-273F:0FB7 83 C6 02 add si,2
-273F:0FBA 3D FFFC cmp ax,0FFFCh
-273F:0FBD 74 46 je loc_144 ; Ends the execution
-273F:0FBF 3D FFFF cmp ax,0FFFFh
-273F:0FC2 74 CA je loc_140 ; ??? Store word at 1fh of offset
-273F:0FC4 3D FFFE cmp ax,0FFFEh
-273F:0FC7 74 AC je loc_139 ; Set start position
-273F:0FC9 3D FFFB cmp ax,0FFFBh
-273F:0FCC 74 3D je loc_145 ; Set animation dimensions
-273F:0FCE 3D FFFA cmp ax,0FFFAh
-273F:0FD1 74 CE je loc_141 ; Jump to location
-273F:0FD3 3D FFF9 cmp ax,0FFF9h
-273F:0FD6 74 83 je loc_138 ; Set pixel data record
-273F:0FD8 3D FFF8 cmp ax,0FFF8h
-273F:0FDB 74 55 je loc_146 ; Something to do with room
-273F:0FDD 3D FFF7 cmp ax,0FFF7h
-273F:0FE0 74 74 je loc_149 ; play music #
-273F:0FE2 3D FFF6 cmp ax,0FFF6h
-273F:0FE5 74 BF je loc_142 ; Set action bitsets
-273F:0FE7 3D FFFD cmp ax,0FFFDh
-273F:0FEA 75 7E jne loc_150
-
-273F:0FEC 26: 8B 04 mov ax,es:[si] ; Change position by amount
-273F:0FEF 83 C6 02 add si, 2
-
-273F:0FF2 01 05 add [di+ANIM_X], ax ; Add to X start
-273F:0FF4 01 47 0D add [bx+HS_X], ax
-273F:0FF7 26: 8B 04 mov ax, es:[si]
-273F:0FFA 83 C6 02 add si, 2
-273F:0FFD 01 45 02 add [di+ANIM_Y], ax ; Add to Y start
-273F:1000 01 47 0F add [bx+HS_Y], ax
-273F:1003 EB AF jmp short loc_143
-
-273F:1005 loc_144: ; xref 273F:0FBD
-273F:1005 33 C0 xor ax, ax ; Zero register
-273F:1007 8B F3 mov si, bx
-273F:1009 5B pop bx
-273F:100A C3 retn
-273F:100B loc_145: ; xref 273F:0FCC
-273F:100B 26: 8B 04 mov ax,es:[si]
-273F:100E 83 C6 02 add si,2
-273F:1011 D1 E0 shl ax,1
-273F:1013 D1 E0 shl ax,1
-273F:1015 D1 E0 shl ax,1
-273F:1017 D1 E0 shl ax,1
-273F:1019 89 45 04 mov [di+ANIM_WIDTH], ax ; Store width
-273F:101C 89 45 13 mov [di+ANIM_WIDTH_COPY], ax
-273F:101F 26: 8B 04 mov ax, es:[si]
-273F:1022 83 C6 02 add si, 2
-273F:1025 89 45 06 mov [di+ANIM_HEIGHT],ax ; Store height
-273F:1028 EB 8A jmp short loc_143
-
- ;* No entry point to code
-273F:102A 26: 8B 04 mov ax,es:[si]
-273F:102D 83 C6 02 add si,2
-273F:1030 EB 82 jmp short loc_143 ; (0FB4)
-273F:1032 loc_146: ; xref 273F:0FDB
-273F:1032 26: 8B 04 mov ax,es:[si]
-273F:1035 83 C6 02 add si,2
-273F:1038 26: 8B 0C mov cx,es:[si]
-273F:103B 83 C6 02 add si,2
-273F:103E 0B C9 or cx,cx ; Zero ?
-273F:1040 74 06 jz loc_147 ; Jump if zero
-273F:1042 3B 0E 9832 cmp cx, room_number
-273F:1046 75 0B jne loc_148 ; Jump if not equal
-273F:1048 loc_147: ; xref 273F:1040
-273F:1048 56 push si
-273F:1049 53 push bx
-273F:104A 57 push di
-273F:104B 8B D8 mov bx,ax
-273F:104D E8 8F8F call sub_247 ; (9FDF)
-273F:1050 5F pop di
-273F:1051 5B pop bx
-273F:1052 5E pop si
-273F:1053 loc_148: ; xref 273F:1046
-273F:1053 E9 FF5E jmp loc_143 ; (0FB4)
-
-273F:1056 loc_149: ; xref 273F:0FE0
-273F:1056 26: 8B 04 mov ax,es:[si]
-273F:1059 83 C6 02 add si,2
-273F:105C 56 push si
-273F:105D 53 push bx
-273F:105E 57 push di
-273F:105F 8B D8 mov bx,ax
-273F:1061 E8 91A8 call play_music
-273F:1064 5F pop di
-273F:1065 5B pop bx
-273F:1066 5E pop si
-273F:1067 E9 FF4A jmp loc_143 ; (0FB4)
-
-273F:106A loc_150:
-273F:106A 89 77 24 mov [bx+HS_SCRIPT_OFFSET], si ; Set execution offset
-273F:106D 8B F3 mov si, bx
-273F:106F 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET] ; Get pixel data record
-273F:1072 F6 47 02 04 test byte ptr [bx+PIXEL_FLAGS], PIXELFLAG_HAS_TABLE
-273F:1076 74 0E jz loc_151 ; Jump if not
-273F:1078 8B 5F 03 mov bx, [bx+PIXEL_DATA_SEGMENT]
-273F:107B 8E C3 mov es, bx
-273F:107D D1 E0 shl ax, 1 ; Shift w/zeros fill
-273F:107F 8B D8 mov bx, ax
-273F:1081 26: 8B 07 mov ax, es:[bx] ; Get frame offset
-273F:1084 EB 03 jmp short loc_152
-273F:1086 loc_151:
-273F:1086 F7 67 07 mul word ptr [bx+PIXEL_FRAME_SIZE]
-273F:1089 loc_152:
-273F:1089 89 45 08 mov [di+ANIM_FRAME_OFFSET],ax ; Store current frame
-273F:108C 0D 0001 or ax, 1
-273F:108F 5B pop bx
-273F:1090 C3 retn
-
-273F:1091 loc_153:
-273F:1091 26: 8B 04 mov ax, es:[si] ; Set bitset actions
-273F:1094 89 07 mov [bx+HS_ACTIONS], ax
-273F:1096 26: 8B 44 02 mov ax, es:[si+2]
-273F:109A 89 47 02 mov [bx+HS_ACTIONS+2], ax
-273F:109D 83 C6 04 add si, 4
-273F:10A0 E9 FF11 jmp loc_143
-
- hotspot_script_execute endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx=character Id, cx=index in master script table
- ; Usage of action block for hotspot likely to be making the alternate
- ; hotspot script non-interruptable until done
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_set_blocking_hotspot_script proc near
-273F:10A3 81 FB 03E8 cmp bx, PLAYER_HOTSPOT_ID
-273F:10A7 75 05 jne loc_154 ; Jump if not equal
-273F:10A9 C6 06 9834 02 mov cursor_state, CURSORSTATE_SEQUENCE
-273F:10AE loc_154: ; xref 273F:10A7
-273F:10AE E8 FC37 call get_room_resource_pointer
-273F:10B1 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:10B3 81 C1 57E0 add cx, offset hotspot_script_master_list
-273F:10B7 8B D9 mov bx,cx
-273F:10B9 8B 07 mov ax,[bx]
-273F:10BB 89 44 24 mov [si+HS_SCRIPT_OFFSET], ax
-273F:10BE 8B DE mov bx, si
-273F:10C0 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:10C3 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:10C6 C6 07 03 mov byte ptr [bx], CHAR_ACTION_EXEC_SCRIPT
-273F:10C9 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:10CC C6 44 49 01 mov byte ptr [si+HS_PATHFIND_COVERED], 1
-273F:10D0 E9 605B jmp pathfind_flag_covered_cells
- seq_set_blocking_hotspot_script endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7172
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:10D3 animation_find_slot proc near
-273F:10D3 úBF B14E mov di, offset animation_table
-273F:10D6 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:10D9 locloop_155: ; xref 273F:10E2
-273F:10D9 F6 45 0C FF test byte ptr [di+0Ch],0FFh
-273F:10DD 74 08 jz loc_ret_156 ; Jump if zero
-273F:10DF 83 C7 29 add di,29h
-273F:10E2 E2 F5 loop locloop_155 ; Loop if cx > 0
-
-273F:10E4 83 EF 29 sub di,29h
-
-273F:10E7 loc_ret_156: ; xref 273F:10DD
-273F:10E7 C3 retn
- animation_find_slot endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0027
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:10E8 hotspots_unload proc near
-273F:10E8 úBF B14E mov di,offset animation_table
-273F:10EB B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:10EE locloop_157: ; Check if hotspot can be unloaded
-273F:10EE F6 45 10 FF test byte ptr [di+ANIM_CAN_UNLOAD],0FFh
-273F:10F2 74 11 jz loc_159 ; If no, then skip
-
-273F:10F4 33 C0 xor ax,ax
-273F:10F6 83 7D 1B FE cmp word ptr [di+ANIM_HOTSPOT_ID], 0FFFEh ; Check if hotspot Id
-273F:10FA 73 06 jae loc_158 ; is the special 0ffffh. Jump if yes
-273F:10FC 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET] ; Get hotspot resource
-273F:10FF 89 44 0B mov [si+HS_ANIM_OFFSET], ax ; Mark hotspot as inactive
-273F:1102 loc_158:
-273F:1102 E8 0172 call animation_unload_2
-273F:1105 loc_159:
-273F:1105 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:1108 E2 E4 loop locloop_157
-273F:110A C3 retn
- hotspots_unload endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4FBF, 5E61, 60E7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_find_impinging_chars proc near
-273F:110B 56 push si
-273F:110C 53 push bx
-273F:110D 8B 55 0E mov dx, [di+ANIM_ROOM_NUM]
-273F:1110 úBE B14E mov si, offset animation_table
-273F:1113 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:1116 úBB 10C0 mov bx, offset impinging_char_list
-273F:1119 C7 06 10BE 0000 mov num_impinging_chars, 0
-273F:111F 8B 05 mov ax, [di+ANIM_X]
-273F:1121 A3 10E6 mov char_rect_left, ax
-273F:1124 03 45 13 add ax, [di+ANIM_WIDTH_COPY]
-273F:1127 A3 10E8 mov char_rect_right, ax
-273F:112A 8B 45 02 mov ax, [di+ANIM_Y]
-273F:112D 03 45 15 add ax, [di+ANIM_HEIGHT_COPY]
-273F:1130 50 push ax
-273F:1131 2B 45 17 sub ax, [di+ANIM_Y_CORRECTION]
-273F:1134 2B 45 22 sub ax, [di+ANIM_CHAR_RECT_Y]
-273F:1137 A3 10EA mov char_rect_top, ax
-273F:113A 58 pop ax
-273F:113B 03 45 22 add ax, [di+ANIM_CHAR_RECT_Y]
-273F:113E A3 10EC mov char_rect_bottom, ax
-
-273F:1141 locloop_160: ; Loop through animations
-273F:1141 3B FE cmp di, si ; Is it the char's animation?
-273F:1143 74 55 je loc_161 ; Skip if yes
-273F:1145 F6 44 0C FF test byte ptr [si+ANIM_LAYER], 0FFh
-273F:1149 74 4F jz loc_161 ; If no layer, then skip
-273F:114B 3B 54 0E cmp dx, [si+ANIM_ROOM_NUM]
-273F:114E 75 4A jne loc_161 ; Skip if not in same room
-273F:1150 8B 44 1B mov ax, [si+ANIM_HOTSPOT_ID]
-273F:1153 3D 0408 cmp ax, FIRST_OBJECT_HOTSPOT_ID
-273F:1156 73 42 jae loc_161 ; Skip if anim not a character
-273F:1158 F6 44 1D FF test byte ptr [si+ANIM_SKIP], 0FFh
-273F:115C 75 3C jnz loc_161 ; Skip if skip flag set
-273F:115E 8B 44 19 mov ax, [si+ANIM_HOTSPOT_OFFSET]
-273F:1161 3B 45 24 cmp ax, [di+ANIM_VOICE_CTR]
-273F:1164 74 34 je loc_161 ; Jump if equal
-273F:1166 8B 04 mov ax, [si+ANIM_X]
-273F:1168 3B 06 10E8 cmp ax, char_rect_right
-273F:116C 73 2C jae loc_161 ; Jump if above or =
-273F:116E 03 44 13 add ax, [si+ANIM_WIDTH_COPY]
-273F:1171 3B 06 10E6 cmp ax, char_rect_left
-273F:1175 72 23 jb loc_161 ; Jump if below
-273F:1177 74 21 jz loc_161 ; Jump if zero
-273F:1179 8B 44 02 mov ax, [si+ANIM_Y]
-273F:117C 03 44 15 add ax, [si+ANIM_HEIGHT_COPY]
-273F:117F 8B E8 mov bp, ax
-273F:1181 03 44 22 add ax, [si+ANIM_CHAR_RECT_Y]
-273F:1184 3B 06 10EA cmp ax, char_rect_top
-273F:1188 72 10 jb loc_161 ; Jump if below
-273F:118A 8B C5 mov ax, bp
-273F:118C 2B 44 17 sub ax, [si+ANIM_Y_CORRECTION]
-273F:118F 2B 44 22 sub ax, [si+ANIM_CHAR_RECT_Y]
-273F:1192 3B 06 10EC cmp ax, char_rect_bottom
-273F:1196 74 0E je loc_162 ; Jump if equal
-273F:1198 72 0C jc loc_162 ; Jump if carry Set
-273F:119A loc_161:
-273F:119A ú83 C6 29 add si, ANIMATION_SLOT_SIZE
-273F:119D E2 A2 loop locloop_160
-
-273F:119F C7 07 0000 mov word ptr [bx], 0 ; Flag end of list
-273F:11A3 5B pop bx
-273F:11A4 5E pop si
-273F:11A5 C3 retn
-273F:11A6 loc_162: ; Animation is impinging char
-273F:11A6 8B 44 1B mov ax, [si+ANIM_HOTSPOT_ID]
-273F:11A9 89 07 mov [bx], ax ; Store character Id
-273F:11AB 83 C3 02 add bx, 2
-273F:11AE 83 06 10BE 01 add num_impinging_chars, 1
-273F:11B3 EB E5 jmp short loc_161 ; (119A)
- character_find_impinging_chars endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5217, 6009
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_paused_list_check proc near
-273F:11B5 53 push bx
-273F:11B6 úBB 10C0 mov bx, offset impinging_char_list
-273F:11B9 C7 06 10EE 0000 mov pl_check_result, 0
-273F:11BF loc_163:
-
-273F:11BF ú8B 07 mov ax, [bx] ; Get character Id
-273F:11C1 83 C3 02 add bx, 2 ; Move to next entry
-273F:11C4 0B C0 or ax, ax ; Is it the end of the list?
-273F:11C6 75 05 jnz loc_164 ; Jump if not
-273F:11C8 A1 10EE mov ax, pl_check_result ; Set return result
-273F:11CB 5B pop bx
-273F:11CC C3 retn
-273F:11CD loc_164:
-
-273F:11CD 8B EB mov bp, bx ; Store next table offset
-273F:11CF 50 push ax
-273F:11D0 56 push si
-273F:11D1 E8 FB16 call get_room_resource_pointer2 ;Get hotspot resource
-273F:11D4 8B DE mov bx, si
-273F:11D6 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:11D9 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:11DC 8A 1F mov bl, [bx] ; bl = char's current action
-273F:11DE 5E pop si
-273F:11DF 58 pop ax
-273F:11E0 80 FB 03 cmp bl, CHAR_ACTION_EXEC_SCRIPT ; Char in animation sequence?
-273F:11E3 74 12 je loc_166 ; Skip if yes
-
-; Scan through the list of currently paused characters to see if the character is in it
-
-273F:11E5 BB B0AE mov bx, offset character_pause_list
-273F:11E8 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
-273F:11EB 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
-
-273F:11EE locloop_165:
-273F:11EE 3B 17 cmp dx, [bx+PC_SRC_CHAR_ID] ; Source char in list?
-273F:11F0 75 09 jne loc_167 ; Jump if not
-273F:11F2 3B 47 02 cmp ax, [bx+PC_DEST_CHAR_ID]; List char Id in list?
-273F:11F5 75 04 jne loc_167 ; Jump if not equal
-273F:11F7 loc_166:
-273F:11F7 8B DD mov bx, bp ; Restore cached table offset
-273F:11F9 EB C4 jmp short loc_163 ; Check next entry
-273F:11FB loc_167:
-273F:11FB 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
-273F:11FE E2 EE loop locloop_165 ; Loop remaining action list
-
-; At this point we've found a character in the impinging_char_list list that isn't
-; currently blocked to execute a hotspot animation, and doesn't have a cross reference
-; against the calling character (such as the player) in the paused character list
-
-273F:1200 8B D8 mov bx, ax
-273F:1202 57 push di
-273F:1203 8B FE mov di, si
-273F:1205 E8 FAE0 call get_room_resource_pointer
-273F:1208 87 F7 xchg si, di ;di=list hotspot rec, si=caller rec
-273F:120A 8B C3 mov ax, bx
-273F:120C 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is list char the player?
-273F:120F 75 0F jne loc_168 ; Jump if not
-273F:1211 F6 45 49 FF test byte ptr [di+HS_PATHFIND_COVERED], 0FFh
-273F:1215 75 09 jnz loc_168 ; Jump if not zero
-273F:1217 5F pop di
-273F:1218 E8 314B call character_update_movement
-273F:121B 5B pop bx
-273F:121C B8 0001 mov ax, 1
-273F:121F C3 retn
-
-273F:1220 loc_168:
-273F:1220 BB B0AE mov bx, offset character_pause_list
-273F:1223 loc_169: ; Scan for end of list
-273F:1223 úF7 07 FFFF test word ptr [bx+PC_SRC_CHAR_ID], 0FFFFh
-273F:1227 74 05 jz loc_170
-273F:1229 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
-273F:122C EB F5 jmp short loc_169
-273F:122E loc_170: ; Inject entry into hotspot action list
-273F:122E 89 17 mov [bx+PC_SRC_CHAR_ID], dx
-273F:1230 89 47 02 mov [bx+PC_DEST_CHAR_ID], ax
-273F:1233 C7 47 04 000F mov word ptr [bx+PC_COUNTER], 15
-273F:1238 89 7F 06 mov [bx+PC_HOTSPOT_PTR], di
-273F:123B C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
-273F:123F 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
-273F:1242 73 1D jae loc_173 ; Jump if above or =
-273F:1244 8A 5D 44 mov bl, [di+HS_CHAR_MODE]
-273F:1247 80 FB 03 cmp bl, CHARMODE_PAUSED
-273F:124A 74 0D je loc_171 ; Jump if equal
-273F:124C F7 45 4A FFFF test word ptr [di+HS_PAUSE_CTR], 0FFFFh
-273F:1251 75 09 jnz loc_172 ; Jump if not zero
-273F:1253 F6 45 44 FF test byte ptr [di+HS_CHAR_MODE], 0FFh
-273F:1257 75 03 jnz loc_172 ; Jump if not zero
-273F:1259 loc_171:
-273F:1259 89 55 47 mov [di+SCRIPT_HOTSPOT_ID], dx
-273F:125C loc_172:
-273F:125C C7 45 4A 000F mov word ptr [di+HS_PAUSE_CTR], 0Fh
-273F:1261 loc_173:
-273F:1261 C7 06 10EE 0002 mov pl_check_result, 2
-273F:1267 5F pop di
-273F:1268 5B pop bx
-273F:1269 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:126C 53 push bx
-273F:126D 8B DD mov bx,bp
-273F:126F E9 FF4D jmp loc_163
- character_paused_list_check endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:544C, 7F46, 7F75, 7FAD, 7FFD, 811C, 8800
- ; 887E, 967C, 9E9E
- ; si = hotspot resource, di = animation slot hotspot is being removed from
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1272 animation_unload proc near
-273F:1272 C7 44 0B 0000 mov word ptr [si+HS_ANIM_OFFSET], 0 ; Mark hotspot as unloaded
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:1102
-
-273F:1277 animation_unload_2:
-273F:1277 ú33 C0 xor ax,ax ; Clear some of the
-273F:1279 88 45 0C mov [di+ANIM_LAYER], al ; slot fields
-273F:127C 89 45 1B mov [di+ANIM_HOTSPOT_ID], ax
-273F:127F 88 45 10 mov [di+ANIM_LOADED], al
-273F:1282 C3 retn
- animation_unload endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- ;* No entry point to code
-273F:1283 úBF B14E mov di, offset animation_table
-273F:1286 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:1289 locloop_175: ; xref 273F:1291
-273F:1289 39 5D 1E cmp [di+1Eh],bx
-273F:128C 74 06 je loc_176 ; Jump if equal
-273F:128E 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:1291 E2 F6 loop locloop_175 ; Loop if cx > 0
-273F:1293 C3 retn
-
-273F:1294 C6 45 0C 00 loc_176: mov byte ptr [di+ANIM_LAYER], 0
-273F:1298 loc_ret_177: retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:010D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1299 room_handle_click proc near
- assume ds:data_seg
-273F:1299 F6 06 11DA 07 test mouse_buttons2, 7 ; Any mouse button pressed?
-273F:129E 74 F8 jz loc_ret_177 ; Exit if not
-273F:12A0 F6 06 0DB4 FF test talk_dialog_close_flag, 0FFh ; Floating dialog active?
-273F:12A5 75 2F jnz loc_178 ; If yes then jump
-273F:12A7 F7 06 BA25 FFFF test viewing_room, 0FFFFh ; Viewing remote room?
-273F:12AD 75 2A jnz loc_179 ; If yes then jump
-273F:12AF 80 3E 9834 03 cmp cursor_state, CURSORSTATE_TALK
-273F:12B4 74 49 je loc_ret_182 ; Jump if equal
-273F:12B6 81 3E 11DD 0088 cmp char_dest_y, 80h + MENUBAR_Y_SIZE ; In menubar area?
-273F:12BC 72 42 jb loc_183 ; If yes then jump
-273F:12BE 80 3E 9834 02 cmp cursor_state, CURSORSTATE_SEQUENCE
-273F:12C3 74 35 je loc_181 ; Jump if equal
-273F:12C5 80 3E 9834 04 cmp cursor_state, CURSORSTATE_BUMPED
-273F:12CA 74 2E je loc_181 ; Jump if equal
-
-273F:12CC F6 06 11DA 01 test mouse_buttons2, 1
-273F:12D1 75 30 jnz loc_184 ; Jump if not zero
-273F:12D3 E9 0154 jmp loc_193 ; (142A)
-273F:12D6 loc_178: ; xref 273F:12A5
-273F:12D6 E9 01A0 jmp loc_195 ; (1479)
-
-; Handle returning to a prior room from viewing another room remotely
-273F:12D9 loc_179: ; xref 273F:12AD
-273F:12D9 83 3E 9832 23 cmp room_number, 23h
-273F:12DE 75 08 jne loc_180 ; Jump if not equal
-273F:12E0 F7 06 BAB7 FFFF test script_val_87, 0FFFFh
-273F:12E6 75 12 jnz loc_181 ; Jump if not zero
-273F:12E8 loc_180:
-273F:12E8 C7 06 B15F 5E44 mov slot0_tick_proc, offset player_tick_proc
-273F:12EE A1 BA25 mov ax, old_room_number
-273F:12F1 A3 BA23 mov new_room_number, ax
-273F:12F4 C7 06 BA25 0000 mov old_room_number, 0
-273F:12FA loc_181: ; xref 273F:12C3, 12CA, 12E6
-273F:12FA C6 06 11DA 00 mov mouse_buttons2, 0
-
-273F:12FF loc_ret_182: ; xref 273F:12B4
-273F:12FF C3 retn
-
-273F:1300 loc_183: ; xref 273F:12BC
-273F:1300 E9 5A4D jmp menubar_handle_menu
-
-; Left mouse clicked - can only be either for walking or looking at a hotspot
-273F:1303 loc_184: ` ; xref 273F:12D1
-273F:1303 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:1308 F7 06 1922 FFFF test dest_room_num, 0FFFFh
-273F:130E 74 03 jz loc_185 ; Jump if zero
-273F:1310 E9 0094 jmp loc_190 ; (13A7)
-273F:1313 loc_185: ; xref 273F:130E
-273F:1313 A1 1924 mov ax, hotspot_id
-273F:1316 0B C0 or ax,ax ; Clicked on hotspot?
-273F:1318 74 13 jz loc_186 ; If not, then jump
-273F:131A úBE 4CB0 mov si, offset exit_hotspots_list
-273F:131D 8B D8 mov bx,ax
-273F:131F E8 3271 call is_roomexit_hotspot ; Was the hotspot a room exit?
-273F:1322 75 0B jnz loc_187 ; If not, then jump
-273F:1324 8B C3 mov ax,bx
-273F:1326 E8 5EC5 call room_exit_hs_get_pointer
-273F:1329 F6 44 0C FF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh ; Is exit blocked?
-273F:132D loc_186:
-273F:132D 74 78 jz loc_190 ; If not blocked, standard walking
-
-; Handler code for looking at a hotspot
-
-273F:132F loc_187:
-273F:132F C6 06 9834 01 mov cursor_state, CURSORSTATE_ACTION
-273F:1334 úBE 6CEF mov si, offset player_hotspot_rec
-273F:1337 33 C0 xor ax,ax ; Zero register
-273F:1339 89 44 52 mov [si+HS_DEST_HOTSPOT], ax
-273F:133C 88 44 2A mov [si+HS_ACTION_CTR], al
-273F:133F 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:1342 88 44 44 mov [si+HS_CHAR_MODE], al
-273F:1345 8B DE mov bx,si
-273F:1347 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:134A 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:134D úBF 65F3 mov di, offset player_action_support_record
-273F:1350 89 7F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], di
-273F:1353 C7 05 0010 mov word ptr [di], ACTION_LOOK_AT
-273F:1357 A1 1924 mov ax, hotspot_id
-273F:135A 89 45 02 mov [di+2], ax
-273F:135D C7 45 04 0000 mov word ptr [di+4], 0
-273F:1362 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:1365 E8 5C9D call menubar_clear_image
-273F:1368 úBF 4B93 mov di, offset action_name ; Set up the "look at HOTSPOT"
-273F:136B úBE 10B5 mov si, offset look_at_str ; string
-273F:136E B9 0008 mov cx,8
-273F:1371 1E push ds
-273F:1372 07 pop es
-273F:1373 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:1375 A1 1924 mov ax, hotspot_id
-273F:1378 E8 F9A6 call get_room_resource_pointer3 ; Get hotspot name
-273F:137B 8B 44 02 mov ax, [si+HSH_NAME]
-273F:137E 80 E4 1F and ah, 1Fh
-273F:1381 E8 69B6 call decode_string
-273F:1384 A1 4CE4 mov ax, data_segment2
-273F:1387 8E C0 mov es,ax
-273F:1389 33 FF xor di,di ; Zero register
-273F:138B 33 C9 xor cx,cx ; Zero register
-273F:138D 8B 1E 076E mov bx, data_571
-273F:1391 8A 7F 04 mov bh, [bx+4]
-273F:1394 8B 2E 0748 mov bp, screen_width
-273F:1398 úBE 4B93 mov si, offset action_name
-273F:139B loc_188: ; Loop to display action
-273F:139B úAC lodsb ; String [si] to al
-273F:139C 2C 20 sub al,20h ; ' '
-273F:139E 72 06 jc loc_ret_189 ; Jump if carry Set
-273F:13A0 FF 16 075A call [display2_character_proc]
-273F:13A4 EB F5 jmp short loc_188 ; (139B)
-
-273F:13A6 loc_ret_189: ; xref 273F:139E
-273F:13A6 C3 retn
-
-; Handler code for starting the player walking to the clicked location
-273F:13A7 loc_190: ; xref 273F:1310, 132D
-273F:13A7 C7 06 11E1 0002 mov cursor_index, CURSOR_TIME_UP ; Start time animation
-273F:13AD 8B 1E 1922 mov bx, dest_room_num
-273F:13B1 0B DB or bx,bx ; Going to change room?
-273F:13B3 74 2C jz loc_191 ; No, so start in-room move
-
-; Walking to another room
-273F:13B5 A1 6CF5 mov ax, player_room_number
-273F:13B8 E8 401F call room_exit_get_coordinates
-273F:13BB 81 E2 0FFF and dx,0FFFh
-273F:13BF úBE 6CEF mov si, offset player_hotspot_rec
-273F:13C2 8B DE mov bx, si
-273F:13C4 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:13C7 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:13CA 89 4C 54 mov [si+HS_DEST_X], cx
-273F:13CD 89 54 56 mov [si+HS_DEST_Y], dx
-273F:13D0 C7 44 52 FFFF mov [si+HS_DEST_HOTSPOT], 0FFFFh
-273F:13D5 A1 1920 mov ax, room_exit_hotspot_id
-273F:13D8 0B C0 or ax, ax
-273F:13DA 74 2A jz loc_192
-273F:13DC 89 44 52 mov [si+HS_DEST_HOTSPOT], ax
-273F:13DF EB 25 jmp short loc_192 ; (1406)
-
-; In room walking
-273F:13E1 loc_191: ; xref 273F:13B3
-273F:13E1 úBE 6CEF mov si, offset player_hotspot_rec
-273F:13E4 8B DE mov bx,si
-273F:13E6 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:13E9 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:13EC C7 44 52 0000 mov [si+HS_DEST_HOTSPOT], 0
-273F:13F1 C7 06 B172 0000 mov data_1116,0 ; (31E4:B172=0)
-273F:13F7 A1 11DB mov ax, char_dest_x
-273F:13FA 2D 0010 sub ax,10h
-273F:13FD 89 44 54 mov [si+HS_DEST_X], ax
-273F:1400 A1 11DD mov ax, char_dest_y
-273F:1403 89 44 56 mov [si+HS_DEST_Y], ax
-273F:1406 loc_192: ; xref 273F:13DA, 13DF
-273F:1406 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:1409 33 C0 xor ax,ax ; Zero register
-273F:140B A2 9834 mov cursor_state, al
-273F:140E úBF 65F3 mov di, offset player_action_support_record
-273F:1411 89 7F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], di
-273F:1414 89 05 mov [di],ax
-273F:1416 88 44 FF mov [si-1],al
-273F:1419 88 44 2A mov [si+HS_ACTION_CTR],al
-273F:141C 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:141F 88 44 44 mov [si+HS_CHAR_MODE], al
-273F:1422 88 44 FF mov [si-1],al
-273F:1425 FF 16 075E call word ptr [show_cursor_proc]
-273F:1429 C3 retn
-
-273F:142A loc_193: ; xref 273F:12D3
-273F:142A F6 06 11DA 04 test mouse_buttons2, 4
-273F:142F 75 1A jnz loc_194 ; Jump if not zero
-
-; At this point the right mouse button has been clicked for the right-click menu.
-; This is either the context menu for a hotspot, or the general "Look/Status" menu
-
-273F:1431 E8 51E0 call room_show_rightclick_menu
-273F:1434 C7 06 11E4 FFFF mov hotspot_name_id2, 0FFFFh
-273F:143A 33 C0 xor ax,ax ; Zero register
-273F:143C 33 DB xor bx,bx ; Zero register
-273F:143E BD 0027 mov bp,27h
-273F:1441 BA 0001 mov dx,1
-273F:1444 B9 0081 mov cx,81h
-273F:1447 E8 F739 call sub_21 ; (0B83)
-273F:144A C3 retn
-273F:144B loc_194: ; xref 273F:142F
-273F:144B C6 06 11DA 00 mov mouse_buttons2, 0
-273F:1450 C3 retn
- room_handle_click endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sequence_set_hotspot_script proc near
-
-273F:1451 E8 94 F8 call get_room_resource_pointer
-273F:1454 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:1459 75 08 jnz loc_194_2
-273F:145B 83 F9 0C cmp cx, 0Ch
-273F:145E 75 03 jnz loc_194_2
-273F:1460 83 C1 03 add cx, 3
-273F:1463 D1 E1 loc_194_2: shl cx, 1
-273F:1465 81 C1 57E0 add cx, offset hotspot_script_master_list
-273F:1469 8B D9 mov bx, cx
-273F:146B 8B 07 mov ax, [bx] ; Get script offset from list
-273F:146D 89 44 24 mov [si+HS_SCRIPT_OFFSET], ax
-273F:1470 33 C0 xor ax, ax
-273F:1472 89 44 26 mov word ptr [si+26h], ax
-273F:1475 89 44 28 mov word ptr [si+28h], ax
-273F:1478 C3 ret
-
- sequence_set_hotspot_script endp
-
-; This code fragment is part of room_handle_click, and is called when either mouse
-; button is pressed when a talk dialog is active
-
-273F:1479 loc_195: ; xref 273F:12D6
-273F:1479 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:147E A1 983B mov ax, talk_character_id
-273F:1481 E8 F866 call get_room_resource_pointer2
-273F:1484 C7 44 37 0000 mov word ptr [si+HS_TALK_COUNTDOWN],0
-273F:1489 A1 9841 mov ax, data_1091
-273F:148C 0B C0 or ax,ax ; Zero ?
-273F:148E 74 0F jz loc_196 ; Jump if zero
-273F:1490 E8 F857 call get_room_resource_pointer2
-273F:1493 F7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
-273F:1498 74 05 jz loc_196 ; Jump if zero
-273F:149A C7 44 37 0028 mov word ptr [si+HS_TALK_COUNTDOWN],28h
-273F:149F loc_196: ; xref 273F:148E, 1498
-273F:149F E9 4E23 jmp loc_1248 ; (62C5)
- sub_44 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7B07, 8FC8, 93BE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:14A2 sub_45 proc near
-273F:14A2 úBE B883 mov si, offset animation_block_list
-273F:14A5 loc_197: ; xref 273F:14B5
-273F:14A5 úAD lodsw ; String [si] to ax
-273F:14A6 0B C0 or ax,ax
-273F:14A8 74 0D jz loc_ret_198 ; End of list found
-273F:14AA 8B F8 mov di,ax
-273F:14AC C7 45 03 0000 mov word ptr [di+3],0
-273F:14B1 80 65 02 DF and byte ptr [di+2],0DFh
-273F:14B5 EB EE jmp short loc_197 ; (14A5)
-
-273F:14B7 loc_ret_198: ; xref 273F:14A8
-273F:14B7 C3 retn
- sub_45 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:012A, 1F8B, 1F9E, 93EF
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:14B8 set_vga_palette proc near
-273F:14B8 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:14BD 74 40 je loc_ret_201 ; Jump if equal
-273F:14BF 81 3E F010 2EE0 cmp timer_ticks, TIMER_TICKS_MAX
-273F:14C5 72 38 jb loc_ret_201 ; Jump if below
-273F:14C7 1E push ds
-273F:14C8 07 pop es
-273F:14C9 úBE 1457 mov si,offset unprocessed_vga_palette
-273F:14CC úBF 0DB5 mov di,offset processed_vga_palette
-273F:14CF B9 0300 mov cx,300h
-
-273F:14D2 locloop_199: ; xref 273F:14D6
-273F:14D2 AC lodsb ; String [si] to al
-273F:14D3 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:14D5 AA stosb ; Store al to es:[di]
-273F:14D6 E2 FA loop locloop_199 ; Loop if cx > 0
-
-273F:14D8 úBA 0DB5 mov dx,offset processed_vga_palette
-273F:14DB B8 1012 mov ax,1012h
-273F:14DE BB 0000 mov bx,0
-273F:14E1 B9 0100 mov cx,100h
-273F:14E4 CD 10 int 10h ; Video display ah=functn 10h
- ; set cx color registers from
- ; ptr es:dx, bx=first reg
-273F:14E6 loc_200: ; xref 273F:14EF
-273F:14E6 E8 7EDF call room_check_keypresses
-273F:14E9 81 3E F010 2EE0 cmp timer_ticks, TIMER_TICKS_MAX
-273F:14EF 73 F5 jae loc_200 ; Jump if above or =
-273F:14F1 úBA 1457 mov dx,offset unprocessed_vga_palette
-273F:14F4 B8 1012 mov ax,1012h
-273F:14F7 BB 0000 mov bx,0
-273F:14FA B9 0100 mov cx,100h
-273F:14FD CD 10 int 10h ; Video display ah=functn 10h
- ; set cx color registers from
- ; ptr es:dx, bx=first reg
-
-273F:14FF loc_ret_201: ; xref 273F:14BD, 14C5
-273F:14FF C3 retn
- set_vga_palette endp
-
-273F:1500 00 00 data_215 db 0, 0 ; xref 273F:2C88, 2D34, 2E9A, 2EA3
- ; 37F2, 385B, 38FB
-273F:1502 0000 data_216 dw 0 ; xref 273F:2C8C, 2D3C, 2EA8
-273F:1504 00 data_217 db 0 ; xref 273F:2C90, 2D6E, 2F47
-273F:1505 0000 data_218 dw 0 ; xref 273F:2D0B, 2F86, 3869, 388E
- ; 3939
-273F:1507 0000 data_219 dw 0 ; xref 273F:2D03, 2F8C
-273F:1509 00 data_220 db 0 ; xref 273F:2CFF, 2D42, 2D69, 2DBA
- ; 2E95
-273F:150A 00 00 00 00 db 0, 0, 0, 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00A9, 00BB, 011D, 4171, 6A0D, 6E4B, 70D1
- ; 8922, 8FF3, 9769
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:150E room_add_animations proc near
-273F:150E B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:1511 úBB B14E mov bx, offset animation_table
-
-; This first part adds in any active hotspots for layer 3
-
-273F:1514 locloop_202: ; xref 273F:1551
-273F:1514 80 7F 0C 03 cmp byte ptr [bx+ANIM_LAYER], 3 ; Is hotspot in layer 3?
-273F:1518 75 34 jne loc_206 ; If found, then skip entry
-273F:151A 8B 16 9832 mov dx, room_number
-273F:151E 39 57 0E cmp [bx+ANIM_ROOM_NUM], dx ; Is animation for room?
-273F:1521 75 2B jne loc_206 ; If no, then skip
-273F:1523 51 push cx
-273F:1524 53 push bx
-273F:1525 8B 47 0A mov ax, [bx+ANIM_SEGMENT]
-273F:1528 0B C0 or ax,ax ; Zero ?
-273F:152A 75 05 jnz loc_203 ; Jump if not zero
-273F:152C E8 61CE call animation_resolve_segment
-273F:152F 72 1B jc loc_205 ; Jump if carry Set
-273F:1531 loc_203: ; xref 273F:152A
-273F:1531 8E C0 mov es,ax
-273F:1533 8B 77 08 mov si, [bx+ANIM_FRAME_OFFSET]
-273F:1536 FF 16 0754 call [add_animation_proc]
-273F:153A 5F pop di
-273F:153B 57 push di
-273F:153C B0 01 mov al,1
-273F:153E F6 45 0D FF test byte ptr [di+ANIM_FLAGS], 0FFh
-273F:1542 74 02 jz loc_204 ; Jump if zero
-273F:1544 B0 81 mov al, 81h
-273F:1546 loc_204: ; xref 273F:1542
-273F:1546 E8 F5DF call flag_covered_cells
-273F:1549 E8 F509 call room_add_layer
-273F:154C loc_205: ; xref 273F:152F
-273F:154C 5B pop bx
-273F:154D 59 pop cx
-273F:154E loc_206: ; xref 273F:1518, 1521
-273F:154E 83 C3 29 add bx, ANIMATION_SLOT_SIZE
-273F:1551 E2 C1 loop locloop_202 ; Loop if cx > 0
-
-; Next Get a set of animations where the layer = 1, forming a list of
-; the animation slot entries and the bottom row of the animation
-
-273F:1553 úBF B14E mov di, offset animation_table
-273F:1556 úBE 10F0 mov si, offset animation_table2
-273F:1559 8B 16 9832 mov dx, room_number
-273F:155D B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:1560 33 DB xor bx,bx ; Number of anims found
-273F:1562 locloop_207:
-273F:1562 80 7D 0C 01 cmp byte ptr [di+ANIM_LAYER], 1 ; Animation is layer 1?
-273F:1566 75 1E jne loc_208 ; If not, then skip
-273F:1568 39 55 0E cmp [di+ANIM_ROOM_NUM], dx ; Animation in the room?
-273F:156B 75 19 jne loc_208 ; If not, skip animation
-273F:156D F6 45 1D FF test byte ptr [di+ANIM_SKIP], 0FFh
-273F:1571 75 13 jnz loc_208 ; Jump if not zero
-273F:1573 8B 45 02 mov ax,[di+ANIM_Y] ; Get Y start
-273F:1576 03 45 15 add ax,[di+ANIM_HEIGHT_COPY] ; Copy height
-273F:1579 89 3C mov [si],di ; Store anim offset
-273F:157B 83 C6 02 add si, 2
-273F:157E 89 04 mov [si], ax ; Store bottom row
-273F:1580 83 C6 02 add si,2
-273F:1583 83 C3 01 add bx,1 ; Increment number found
-273F:1586 loc_208:
-273F:1586 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:1589 E2 D7 loop locloop_207 ; Loop if cx > 0
-
-; This next part sorts the newly formed list by the bottom row of each
-
-273F:158B 83 FB 01 cmp bx,1
-273F:158E 8B CB mov cx,bx
-273F:1590 72 67 jc loc_217 ; No entries
-273F:1592 74 2F jz loc_212 ; Only one entry
-273F:1594 51 push cx
-273F:1595 83 E9 01 sub cx,1
-273F:1598 locloop_209: ; xref 273F:15C0
-273F:1598 úBE 10F0 mov si,offset animation_table2
-273F:159B 51 push cx
-273F:159C locloop_210: ; xref 273F:15BD
-273F:159C 8B 44 06 mov ax, [si+6]
-273F:159F 3B 44 02 cmp ax, [si+2]
-273F:15A2 73 16 jae loc_211
-273F:15A4 8B 04 mov ax,[si]
-273F:15A6 8B 5C 04 mov bx,[si+4]
-273F:15A9 89 1C mov [si],bx
-273F:15AB 89 44 04 mov [si+4],ax
-273F:15AE 8B 44 02 mov ax,[si+2]
-273F:15B1 8B 5C 06 mov bx,[si+6]
-273F:15B4 89 5C 02 mov [si+2],bx
-273F:15B7 89 44 06 mov [si+6],ax
-273F:15BA loc_211:
-273F:15BA 83 C6 04 add si, 4
-273F:15BD E2 DD loop locloop_210 ; Loop if cx > 0
-
-273F:15BF 59 pop cx
-273F:15C0 E2 D6 loop locloop_209 ; Loop if cx > 0
-
-273F:15C2 59 pop cx
-273F:15C3 loc_212: ; xref 273F:1592
-
-; Add in the animations in order of the sorted list
-
-273F:15C3 BE 10F0 mov si, offset animation_table2
-273F:15C6 locloop_213: ; xref 273F:15F7
-273F:15C6 8B 1C mov bx, [si]
-273F:15C8 56 push si
-273F:15C9 51 push cx
-273F:15CA 53 push bx
-273F:15CB 8B 47 0A mov ax,[bx+ANIM_SEGMENT]
-273F:15CE 0B C0 or ax,ax ; Zero ?
-273F:15D0 75 08 jnz loc_214 ; Jump if not zero
-273F:15D2 E8 6128 call animation_resolve_segment
-273F:15D5 73 03 jnc loc_214 ; Jump if carry=0
-273F:15D7 5F pop di
-273F:15D8 EB 18 jmp short loc_216 ; (15F2)
-273F:15DA loc_214: ; xref 273F:15D0, 15D5
-273F:15DA 8E C0 mov es,ax
-273F:15DC 8B 77 08 mov si,[bx+ANIM_FRAME_OFFSET]
-273F:15DF FF 16 0754 call [add_animation_proc]
-273F:15E3 5F pop di
-273F:15E4 F6 45 0D FF test byte ptr [di+ANIM_FLAGS], 0FFh
-273F:15E8 74 05 jz loc_215 ; Jump if zero
-273F:15EA B0 81 mov al, 81h
-273F:15EC E8 F539 call flag_covered_cells
-273F:15EF loc_215: ; xref 273F:15E8
-273F:15EF E8 F463 call room_add_layer
-273F:15F2 loc_216: ; xref 273F:15D8
-273F:15F2 59 pop cx
-273F:15F3 5E pop si
-273F:15F4 83 C6 04 add si,4
-273F:15F7 E2 CD loop locloop_213 ; Loop if cx > 0
-
-; Add in animations for layer 2
-
-273F:15F9 loc_217: ; xref 273F:1590
-273F:15F9 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:15FC úBB B14E mov bx, offset animation_table
-
-273F:15FF locloop_218:
-273F:15FF 80 7F 0C 02 cmp byte ptr [bx+ANIM_LAYER],2
-273F:1603 75 31 jne loc_222 ; Jump if not equal
-273F:1605 8B 16 9832 mov dx, room_number
-273F:1609 39 57 0E cmp [bx+ANIM_ROOM_NUM], dx
-273F:160C 75 28 jne loc_222 ; Jump if not equal
-273F:160E 51 push cx
-273F:160F 53 push bx
-273F:1610 8B 47 0A mov ax,[bx+ANIM_SEGMENT]
-273F:1613 0B C0 or ax,ax ; Zero ?
-273F:1615 75 05 jnz loc_219 ; Jump if not zero
-273F:1617 E8 60E3 call animation_resolve_segment
-273F:161A 72 18 jc loc_221 ; Jump if carry Set
-273F:161C loc_219: ; xref 273F:1615
-273F:161C 8E C0 mov es,ax
-273F:161E 8B 77 08 mov si, [bx+ANIM_FRAME_OFFSET]
-273F:1621 FF 16 0754 call [add_animation_proc]
-273F:1625 5F pop di
-273F:1626 57 push di
-273F:1627 B0 01 mov al,1
-273F:1629 F6 45 0D FF test byte ptr [di+ANIM_FLAGS],0FFh
-273F:162D 74 02 jz loc_220 ; Jump if zero
-273F:162F B0 81 mov al, 81h
-273F:1631 loc_220: ; xref 273F:162D
-273F:1631 E8 F4F4 call flag_covered_cells
-273F:1634 loc_221: ; xref 273F:161A
-273F:1634 5B pop bx
-273F:1635 59 pop cx
-273F:1636 loc_222: ; xref 273F:1603, 160C
-273F:1636 83 C3 29 add bx, ANIMATION_SLOT_SIZE
-273F:1639 E2 C4 loop locloop_218 ; Loop if cx > 0
-
-273F:163B F6 06 9837 FF test talk_dialog_active, 0FFh
-273F:1640 74 04 jz loc_ret_223 ; Jump if zero
-273F:1642 FF 16 0758 call [talk_dialog_proc]
-
-273F:1646 loc_ret_223: ; xref 273F:1640
-273F:1646 C3 retn
- room_add_animations endp
-
-273F:1647 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7D4E, 7D60
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1648 decode_character proc near
-273F:1648 E8 675A call read_bit
-273F:164B 74 03 jz loc_224 ; Jump if zero
-273F:164D EB 3B jmp short loc_235 ; (168A)
-273F:164F 90 db 90h
-273F:1650 loc_224: ; 0
-273F:1650 E8 6752 call read_bit
-273F:1653 74 03 jz loc_225 ; Jump if zero
-273F:1655 EB 04 jmp short loc_226 ; (165B)
-273F:1657 90 db 90h
-273F:1658 loc_225: ; 00
-273F:1658 B0 20 mov al,20h ; ' '
-273F:165A C3 retn
-273F:165B loc_226: ; 01
-273F:165B E8 6747 call read_bit
-273F:165E 74 03 jz loc_227 ; Jump if zero
-273F:1660 EB 0F jmp short loc_230 ; (1671)
-273F:1662 90 db 90h
-273F:1663 loc_227: ; 010
-273F:1663 E8 673F call read_bit
-273F:1666 74 03 jz loc_228 ; Jump if zero
-273F:1668 EB 04 jmp short loc_229 ; (166E)
-273F:166A 90 db 90h
-273F:166B loc_228: ; 0100
-273F:166B B0 65 mov al,65h ; 'e'
-273F:166D C3 retn
-273F:166E loc_229: ; 0101
-273F:166E B0 6F mov al,6Fh ; 'o'
-273F:1670 C3 retn
-273F:1671 loc_230: ; 011
-273F:1671 E8 6731 call read_bit
-273F:1674 74 03 jz loc_231
-273F:1676 EB 04 jmp short loc_232
-273F:1678 90 db 90h
-273F:1679 loc_231: ; 0110
-273F:1679 B0 74 mov al,74h ; 't'
-273F:167B C3 retn
-273F:167C loc_232: ; 0111
-273F:167C E8 6726 call read_bit
-273F:167F 74 03 jz loc_233 ; Jump if zero
-273F:1681 EB 04 jmp short loc_234 ; (1687)
-273F:1683 90 db 90h
-273F:1684 loc_233: ; 01110
-273F:1684 B0 61 mov al,61h ; 'a'
-273F:1686 C3 retn
-273F:1687 loc_234: ; 01111
-273F:1687 B0 6E mov al,6Eh ; 'n'
-273F:1689 C3 retn
-273F:168A loc_235: ; 1
-273F:168A E8 6718 call read_bit
-273F:168D 74 03 jz loc_236 ; Jump if zero
-273F:168F EB 46 jmp short loc_249 ; (16D7)
-273F:1691 90 db 90h
-273F:1692 loc_236: ; 10
-273F:1692 E8 6710 call read_bit
-273F:1695 74 03 jz loc_237 ; Jump if zero
-273F:1697 EB 0F jmp short loc_240 ; (16A8)
-273F:1699 90 db 90h
-273F:169A loc_237: ; 100
-273F:169A E8 6708 call read_bit
-273F:169D 74 03 jz loc_238 ; Jump if zero
-273F:169F EB 04 jmp short loc_239 ; (16A5)
-273F:16A1 90 db 90h
-273F:16A2 loc_238: ; 1000
-273F:16A2 B0 73 mov al,73h ; 's'
-273F:16A4 C3 retn
-273F:16A5 loc_239: ; 1001
-273F:16A5 B0 69 mov al,69h ; 'i'
-273F:16A7 C3 retn
-273F:16A8 loc_240: ; 101
-273F:16A8 E8 66FA call read_bit
-273F:16AB 74 03 jz loc_241 ; Jump if zero
-273F:16AD EB 04 jmp short loc_242 ; (16B3)
-273F:16AF 90 db 90h
-273F:16B0 loc_241: ; 1010
-273F:16B0 B0 72 mov al,72h ; 'r'
-273F:16B2 C3 retn
-273F:16B3 loc_242: ; 1011
-273F:16B3 E8 66EF call read_bit
-273F:16B6 74 03 jz loc_243 ; Jump if zero
-273F:16B8 EB 04 jmp short loc_244 ; (16BE)
-273F:16BA 90 db 90h
-273F:16BB loc_243: ; 10110
-273F:16BB B0 68 mov al,68h ; 'h'
-273F:16BD C3 retn
-273F:16BE loc_244: ; 10111
-273F:16BE E8 66E4 call read_bit
-273F:16C1 74 03 jz loc_245 ; Jump if zero
-273F:16C3 EB 04 jmp short loc_246 ; (16C9)
-273F:16C5 90 db 90h
-273F:16C6 loc_245: ; 101110
-273F:16C6 B0 75 mov al,75h ; 'u'
-273F:16C8 C3 retn
-273F:16C9 loc_246: ; 101111
-273F:16C9 E8 66D9 call read_bit
-273F:16CC 74 03 jz loc_247 ; Jump if zero
-273F:16CE EB 04 jmp short loc_248 ; (16D4)
-273F:16D0 90 db 90h
-273F:16D1 loc_247: ; 1011110
-273F:16D1 B0 6C mov al,6Ch ; 'l'
-273F:16D3 C3 retn
-273F:16D4 loc_248: ; 1011111
-273F:16D4 B0 64 mov al,64h ; 'd'
-273F:16D6 C3 retn
-273F:16D7 loc_249: ; 11
-273F:16D7 E8 66CB call read_bit
-273F:16DA 74 03 jz loc_250 ; Jump if zero
-273F:16DC EB 51 jmp short loc_265 ; (172F)
-273F:16DE 90 db 90h
-273F:16DF loc_250: ; 110
-273F:16DF E8 66C3 call read_bit
-273F:16E2 74 03 jz loc_251 ; Jump if zero
-273F:16E4 EB 1A jmp short loc_256 ; (1700)
-273F:16E6 90 db 90h
-273F:16E7 loc_251: ; 1100
-273F:16E7 E8 66BB call read_bit
-273F:16EA 74 03 jz loc_252 ; Jump if zero
-273F:16EC EB 04 jmp short loc_253 ; (16F2)
-273F:16EE 90 db 90h
-273F:16EF loc_252: ; 11000
-273F:16EF B0 79 mov al,79h ; 'y'
-273F:16F1 C3 retn
-273F:16F2 loc_253: ; 11001
-273F:16F2 E8 66B0 call read_bit
-273F:16F5 74 03 jz loc_254 ; Jump if zero
-273F:16F7 EB 04 jmp short loc_255 ; (16FD)
-273F:16F9 90 db 90h
-273F:16FA loc_254: ; 110010
-273F:16FA B0 67 mov al,67h ; 'g'
-273F:16FC C3 retn
-273F:16FD loc_255: ; 110011
-273F:16FD B0 00 mov al,0
-273F:16FF C3 retn
-273F:1700 loc_256: ; 1101
-273F:1700 E8 66A2 call read_bit
-273F:1703 74 03 jz loc_257 ; Jump if zero
-273F:1705 EB 0F jmp short loc_260 ; (1716)
-273F:1707 90 db 90h
-273F:1708 loc_257: ; 11010
-273F:1708 E8 669A call read_bit
-273F:170B 74 03 jz loc_258 ; Jump if zero
-273F:170D EB 04 jmp short loc_259 ; (1713)
-273F:170F 90 db 90h
-273F:1710 loc_258: ; 110100
-273F:1710 B0 77 mov al,77h ; 'w'
-273F:1712 C3 retn
-273F:1713 loc_259: ; 110101
-273F:1713 B0 63 mov al,63h ; 'c'
-273F:1715 C3 retn
-273F:1716 loc_260: ; 11011
-273F:1716 E8 668C call read_bit
-273F:1719 74 03 jz loc_261 ; Jump if zero
-273F:171B EB 04 jmp short loc_262 ; (1721)
-273F:171D 90 db 90h
-273F:171E loc_261: ; 110110
-273F:171E B0 66 mov al,66h ; 'f'
-273F:1720 C3 retn
-273F:1721 loc_262: ; 110111
-273F:1721 E8 6681 call read_bit
-273F:1724 74 03 jz loc_263 ; Jump if zero
-273F:1726 EB 04 jmp short loc_264 ; (172C)
-273F:1728 90 db 90h
-273F:1729 loc_263: ; 1101110
-273F:1729 B0 2E mov al,2Eh ; '.'
-273F:172B C3 retn
-273F:172C loc_264: ; 1101111
-273F:172C B0 6D mov al,6Dh ; 'm'
-273F:172E C3 retn
-273F:172F loc_265: ; 111
-273F:172F E8 6673 call read_bit
-273F:1732 74 03 jz loc_266 ; Jump if zero
-273F:1734 EB 46 jmp short loc_279 ; (177C)
-273F:1736 90 db 90h
-273F:1737 loc_266: ; 1110
-273F:1737 E8 666B call read_bit
-273F:173A 74 03 jz loc_267 ; Jump if zero
-273F:173C EB 0F jmp short loc_270 ; (174D)
-273F:173E 90 db 90h
-273F:173F loc_267: ; 11100
-273F:173F E8 6663 call read_bit
-273F:1742 74 03 jz loc_268 ; Jump if zero
-273F:1744 EB 04 jmp short loc_269 ; (174A)
-273F:1746 90 db 90h
-273F:1747 loc_268: ; 111000
-273F:1747 B0 70 mov al,70h ; 'p'
-273F:1749 C3 retn
-273F:174A loc_269: ; 111001
-273F:174A B0 62 mov al,62h ; 'b'
-273F:174C C3 retn
-273F:174D loc_270: ; 11101
-273F:174D E8 6655 call read_bit
-273F:1750 74 03 jz loc_271 ; Jump if zero
-273F:1752 EB 0F jmp short loc_274 ; (1763)
-273F:1754 90 db 90h
-273F:1755 loc_271: ; 111010
-273F:1755 E8 664D call read_bit
-273F:1758 74 03 jz loc_272 ; Jump if zero
-273F:175A EB 04 jmp short loc_273 ; (1760)
-273F:175C 90 db 90h
-273F:175D loc_272: ; 1110100
-273F:175D B0 2C mov al,2Ch ; ','
-273F:175F C3 retn
-273F:1760 loc_273: ; 1110101
-273F:1760 B0 6B mov al,6Bh ; 'k'
-273F:1762 C3 retn
-273F:1763 loc_274: ; 111011
-273F:1763 E8 663F call read_bit
-273F:1766 74 03 jz loc_275 ; Jump if zero
-273F:1768 EB 04 jmp short loc_276 ; (176E)
-273F:176A 90 db 90h
-273F:176B loc_275: ; 1110110
-273F:176B B0 27 mov al,27h ; '''
-273F:176D C3 retn
-273F:176E loc_276: ; 1110111
-273F:176E E8 6634 call read_bit
-273F:1771 74 03 jz loc_277 ; Jump if zero
-273F:1773 EB 04 jmp short loc_278 ; (1779)
-273F:1775 90 db 90h
-273F:1776 loc_277: ; 11101110
-273F:1776 B0 49 mov al,49h ; 'I'
-273F:1778 C3 retn
-273F:1779 loc_278: ; 11101111
-273F:1779 B0 76 mov al,76h ; 'v'
-273F:177B C3 retn
-273F:177C loc_279: ; 1111
-273F:177C E8 6626 call read_bit
-273F:177F 74 03 jz loc_280 ; Jump if zero
-273F:1781 EB 46 jmp short loc_293 ; (17C9)
-273F:1783 90 db 90h
-273F:1784 loc_280: ; 11110
-273F:1784 E8 661E call read_bit
-273F:1787 74 03 jz loc_281 ; Jump if zero
-273F:1789 EB 0F jmp short loc_284 ; (179A)
-273F:178B 90 db 90h
-273F:178C loc_281: ; 111100
-273F:178C E8 6616 call read_bit
-273F:178F 74 03 jz loc_282 ; Jump if zero
-273F:1791 EB 04 jmp short loc_283 ; (1797)
-273F:1793 90 db 90h
-273F:1794 loc_282: ; 1111000
-273F:1794 B0 21 mov al,21h ; '!'
-273F:1796 C3 retn
-273F:1797 loc_283: ; 1111001
-273F:1797 B0 B4 mov al,0B4h
-273F:1799 C3 retn
-273F:179A loc_284: ; 111101
-273F:179A E8 6608 call read_bit
-273F:179D 74 03 jz loc_285 ; Jump if zero
-273F:179F EB 0F jmp short loc_288 ; (17B0)
-273F:17A1 90 db 90h
-273F:17A2 loc_285: ; 1111010
-273F:17A2 E8 6600 call read_bit
-273F:17A5 74 03 jz loc_286 ; Jump if zero
-273F:17A7 EB 04 jmp short loc_287 ; (17AD)
-273F:17A9 90 db 90h
-273F:17AA loc_286: ; 11110100
-273F:17AA B0 54 mov al,54h ; 'T'
-273F:17AC C3 retn
-273F:17AD loc_287: ; 11110101
-273F:17AD B0 B5 mov al,0B5h
-273F:17AF C3 retn
-273F:17B0 loc_288: ; 1111011
-273F:17B0 E8 65F2 call read_bit
-273F:17B3 74 03 jz loc_289 ; Jump if zero
-273F:17B5 EB 04 jmp short loc_290 ; (17BB)
-273F:17B7 90 db 90h
-273F:17B8 loc_289: ; 11110110
-273F:17B8 B0 3F mov al,3Fh ; '?'
-273F:17BA C3 retn
-273F:17BB loc_290: ; 11110111
-273F:17BB E8 65E7 call read_bit
-273F:17BE 74 03 jz loc_291 ; Jump if zero
-273F:17C0 EB 04 jmp short loc_292 ; (17C6)
-273F:17C2 90 db 90h
-273F:17C3 loc_291: ; 111101110
-273F:17C3 B0 B2 mov al,0B2h
-273F:17C5 C3 retn
-273F:17C6 loc_292: ; 111101111
-273F:17C6 B0 B3 mov al,0B3h
-273F:17C8 C3 retn
-273F:17C9 loc_293: ; 11111
-273F:17C9 E8 65D9 call read_bit
-273F:17CC 74 03 jz loc_294 ; Jump if zero
-273F:17CE EB 5C jmp short loc_311 ; (182C)
-273F:17D0 90 db 90h
-273F:17D1 loc_294: ; 111110
-273F:17D1 E8 65D1 call read_bit
-273F:17D4 74 03 jz loc_295 ; Jump if zero
-273F:17D6 EB 1A jmp short loc_300 ; (17F2)
-273F:17D8 90 db 90h
-273F:17D9 loc_295: ; 1111100
-273F:17D9 E8 65C9 call read_bit
-273F:17DC 74 03 jz loc_296 ; Jump if zero
-273F:17DE EB 04 jmp short loc_297 ; (17E4)
-273F:17E0 90 db 90h
-273F:17E1 loc_296: ; 11111000
-273F:17E1 B0 57 mov al,57h ; 'W'
-273F:17E3 C3 retn
-273F:17E4 loc_297: ; 11111001
-273F:17E4 E8 65BE call read_bit
-273F:17E7 74 03 jz loc_298 ; Jump if zero
-273F:17E9 EB 04 jmp short loc_299 ; (17EF)
-273F:17EB 90 db 90h
-273F:17EC loc_298: ; 111110010
-273F:17EC B0 48 mov al,48h ; 'H'
-273F:17EE C3 retn
-273F:17EF loc_299: ; 111110011
-273F:17EF B0 41 mov al,41h ; 'A'
-273F:17F1 C3 retn
-273F:17F2 loc_300: ; 1111101
-273F:17F2 E8 65B0 call read_bit
-273F:17F5 74 03 jz loc_301 ; Jump if zero
-273F:17F7 EB 0F jmp short loc_304 ; (1808)
-273F:17F9 90 db 90h
-273F:17FA loc_301: ; 11111010
-273F:17FA E8 65A8 call read_bit
-273F:17FD 74 03 jz loc_302 ; Jump if zero
-273F:17FF EB 04 jmp short loc_303 ; (1805)
-273F:1801 90 db 90h
-273F:1802 loc_302: ; 111110100
-273F:1802 B0 B1 mov al,0B1h
-273F:1804 C3 retn
-273F:1805 loc_303: ; 111110101
-273F:1805 B0 53 mov al,53h ; 'S'
-273F:1807 C3 retn
-273F:1808 loc_304: ; 11111011
-273F:1808 E8 659A call read_bit
-273F:180B 74 03 jz loc_305 ; Jump if zero
-273F:180D EB 04 jmp short loc_306 ; (1813)
-273F:180F 90 db 90h
-273F:1810 loc_305: ; 111110110
-273F:1810 B0 59 mov al,59h ; 'Y'
-273F:1812 C3 retn
-273F:1813 loc_306: ; 111110111
-273F:1813 E8 658F call read_bit
-273F:1816 74 03 jz loc_307 ; Jump if zero
-273F:1818 EB 04 jmp short loc_308 ; (181E)
-273F:181A 90 db 90h
-273F:181B loc_307: ; 1111101110
-273F:181B B0 47 mov al,47h ; 'G'
-273F:181D C3 retn
-273F:181E loc_308: ; 1111101111
-273F:181E E8 6584 call read_bit
-273F:1821 74 03 jz loc_309 ; Jump if zero
-273F:1823 EB 04 jmp short loc_310 ; (1829)
-273F:1825 90 db 90h
-273F:1826 loc_309: ; 11111011110
-273F:1826 B0 4D mov al,4Dh ; 'M'
-273F:1828 C3 retn
-273F:1829 loc_310: ; 11111011111
-273F:1829 B0 4E mov al,4Eh ; 'N'
-273F:182B C3 retn
-273F:182C loc_311: ; 111111
-273F:182C E8 6576 call read_bit
-273F:182F 74 03 jz loc_312 ; Jump if zero
-273F:1831 EB 51 jmp short loc_327 ; (1884)
-273F:1833 90 db 90h
-273F:1834 loc_312: ; 1111110
-273F:1834 E8 656E call read_bit
-273F:1837 74 03 jz loc_313 ; Jump if zero
-273F:1839 EB 1A jmp short loc_318 ; (1855)
-273F:183B 90 db 90h
-273F:183C loc_313: ; 11111100
-273F:183C E8 6566 call read_bit
-273F:183F 74 03 jz loc_314 ; Jump if zero
-273F:1841 EB 04 jmp short loc_315 ; (1847)
-273F:1843 90 db 90h
-273F:1844 loc_314: ; 111111000
-273F:1844 B0 4F mov al,4Fh ; 'O'
-273F:1846 C3 retn
-273F:1847 loc_315: ; 111111001
-273F:1847 E8 655B call read_bit
-273F:184A 74 03 jz loc_316 ; Jump if zero
-273F:184C EB 04 jmp short loc_317 ; (1852)
-273F:184E 90 db 90h
-273F:184F loc_316: ; 1111110010
-273F:184F B0 45 mov al,45h ; 'E'
-273F:1851 C3 retn
-273F:1852 loc_317: ; 1111110011
-273F:1852 B0 4C mov al,4Ch ; 'L'
-273F:1854 C3 retn
-273F:1855 loc_318: ; 11111101
-273F:1855 E8 654D call read_bit
-273F:1858 74 03 jz loc_319 ; Jump if zero
-273F:185A EB 0F jmp short loc_322 ; (186B)
-273F:185C 90 db 90h
-273F:185D loc_319: ; 111111010
-273F:185D E8 6545 call read_bit
-273F:1860 74 03 jz loc_320 ; Jump if zero
-273F:1862 EB 04 jmp short loc_321 ; (1868)
-273F:1864 90 db 90h
-273F:1865 loc_320: ; 1111110100
-273F:1865 B0 2D mov al,2Dh ; '-'
-273F:1867 C3 retn
-273F:1868 loc_321: ; 1111110101
-273F:1868 B0 52 mov al,52h ; 'R'
-273F:186A C3 retn
-273F:186B loc_322: ; 111111011
-273F:186B E8 6537 call read_bit
-273F:186E 74 03 jz loc_323 ; Jump if zero
-273F:1870 EB 04 jmp short loc_324 ; (1876)
-273F:1872 90 db 90h
-273F:1873 loc_323: ; 1111110110
-273F:1873 B0 42 mov al,42h ; 'B'
-273F:1875 C3 retn
-273F:1876 loc_324: ; 1111110111
-273F:1876 E8 652C call read_bit
-273F:1879 74 03 jz loc_325 ; Jump if zero
-273F:187B EB 04 jmp short loc_326 ; (1881)
-273F:187D 90 db 90h
-273F:187E loc_325: ; 11111101110
-273F:187E B0 44 mov al,44h ; 'D'
-273F:1880 C3 retn
-273F:1881 loc_326: ; 11111101111
-273F:1881 B0 A6 mov al,0A6h
-273F:1883 C3 retn
-273F:1884 loc_327: ; 1111111
-273F:1884 E8 651E call read_bit
-273F:1887 74 03 jz loc_328 ; Jump if zero
-273F:1889 EB 46 jmp short loc_341 ; (18D1)
-273F:188B 90 db 90h
-273F:188C loc_328: ; 11111110
-273F:188C E8 6516 call read_bit
-273F:188F 74 03 jz loc_329 ; Jump if zero
-273F:1891 EB 1A jmp short loc_334 ; (18AD)
-273F:1893 90 db 90h
-273F:1894 loc_329: ; 111111100
-273F:1894 E8 650E call read_bit
-273F:1897 74 03 jz loc_330 ; Jump if zero
-273F:1899 EB 04 jmp short loc_331 ; (189F)
-273F:189B 90 db 90h
-273F:189C loc_330: ; 1111111000
-273F:189C B0 43 mov al,43h ; 'C'
-273F:189E C3 retn
-273F:189F loc_331: ; 1111111001
-273F:189F E8 6503 call read_bit
-273F:18A2 74 03 jz loc_332 ; Jump if zero
-273F:18A4 EB 04 jmp short loc_333 ; (18AA)
-273F:18A6 90 db 90h
-273F:18A7 loc_332: ; 11111110010
-273F:18A7 B0 78 mov al,78h ; 'x'
-273F:18A9 C3 retn
-273F:18AA loc_333: ; 11111110011
-273F:18AA B0 6A mov al,6Ah ; 'j'
-273F:18AC C3 retn
-273F:18AD loc_334: ; 111111101
-273F:18AD E8 64F5 call read_bit
-273F:18B0 74 03 jz loc_335 ; Jump if zero
-273F:18B2 EB 04 jmp short loc_336 ; (18B8)
-273F:18B4 90 db 90h
-273F:18B5 loc_335: ; 1111111010
-273F:18B5 B0 AC mov al,0ACh
-273F:18B7 C3 retn
-273F:18B8 loc_336: ; 1111111011
-273F:18B8 E8 64EA call read_bit
-273F:18BB 74 03 jz loc_337 ; Jump if zero
-273F:18BD EB 04 jmp short loc_338 ; (18C3)
-273F:18BF 90 db 90h
-273F:18C0 loc_337: ; 11111110110
-273F:18C0 B0 A3 mov al,0A3h
-273F:18C2 C3 retn
-273F:18C3 loc_338: ; 11111110111
-273F:18C3 E8 64DF call read_bit
-273F:18C6 74 03 jz loc_339 ; Jump if zero
-273F:18C8 EB 04 jmp short loc_340 ; (18CE)
-273F:18CA 90 db 90h
-273F:18CB loc_339: ; 111111101110
-273F:18CB B0 50 mov al,50h ; 'P'
-273F:18CD C3 retn
-273F:18CE loc_340: ; 111111101111
-273F:18CE B0 55 mov al,55h ; 'U'
-273F:18D0 C3 retn
-273F:18D1 loc_341: ; 11111111
-273F:18D1 E8 64D1 call read_bit
-273F:18D4 74 03 jz loc_342 ; Jump if zero
-273F:18D6 EB 46 jmp short loc_355 ; (191E)
-273F:18D8 90 db 90h
-273F:18D9 loc_342: ; 111111110
-273F:18D9 E8 64C9 call read_bit
-273F:18DC 74 03 jz loc_343 ; Jump if zero
-273F:18DE EB 0F jmp short loc_346 ; (18EF)
-273F:18E0 90 db 90h
-273F:18E1 loc_343: ; 1111111100
-273F:18E1 E8 64C1 call read_bit
-273F:18E4 74 03 jz loc_344 ; Jump if zero
-273F:18E6 EB 04 jmp short loc_345 ; (18EC)
-273F:18E8 90 db 90h
-273F:18E9 loc_344: ; 11111111000
-273F:18E9 B0 71 mov al,71h ; 'q'
-273F:18EB C3 retn
-273F:18EC loc_345: ; 11111111001
-273F:18EC B0 AD mov al,0ADh
-273F:18EE C3 retn
-273F:18EF loc_346: ; 1111111101
-273F:18EF E8 64B3 call read_bit
-273F:18F2 74 03 jz loc_347 ; Jump if zero
-273F:18F4 EB 0F jmp short loc_350 ; (1905)
-273F:18F6 90 db 90h
-273F:18F7 loc_347: ; 11111111010
-273F:18F7 E8 64AB call read_bit
-273F:18FA 74 03 jz loc_348 ; Jump if zero
-273F:18FC EB 04 jmp short loc_349 ; (1902)
-273F:18FE 90 db 90h
-273F:18FF loc_348: ; 111111110100
-273F:18FF B0 46 mov al,46h ; 'F'
-273F:1901 C3 retn
-273F:1902 loc_349: ; 111111110101
-273F:1902 B0 31 mov al,31h ; '1'
-273F:1904 C3 retn
-273F:1905 loc_350: ; 11111111011
-273F:1905 E8 649D call read_bit
-273F:1908 74 03 jz loc_351 ; Jump if zero
-273F:190A EB 04 jmp short loc_352 ; (1910)
-273F:190C 90 db 90h
-273F:190D loc_351: ; 111111110110
-273F:190D B0 AF mov al,0AFh
-273F:190F C3 retn
-273F:1910 loc_352: ; 111111110111
-273F:1910 E8 6492 call read_bit
-273F:1913 74 03 jz loc_353 ; Jump if zero
-273F:1915 EB 04 jmp short loc_354 ; (191B)
-273F:1917 90 db 90h
-273F:1918 loc_353: ; 1111111101110
-273F:1918 B0 3B mov al,3Bh ; ';'
-273F:191A C3 retn
-273F:191B loc_354: ; 1111111101111
-273F:191B B0 7A mov al,7Ah ; 'z'
-273F:191D C3 retn
-273F:191E loc_355: ; 111111111
-273F:191E E8 6484 call read_bit
-273F:1921 74 03 jz loc_356 ; Jump if zero
-273F:1923 EB 46 jmp short loc_369 ; (196B)
-273F:1925 90 nop
-273F:1926 loc_356: ; 1111111110
-273F:1926 E8 647C call read_bit
-273F:1929 74 03 jz loc_357 ; Jump if zero
-273F:192B EB 1A jmp short loc_362 ; (1947)
-273F:192D 90 db 90h
-273F:192E loc_357: ; 11111111100
-273F:192E E8 6474 call read_bit
-273F:1931 74 03 jz loc_358 ; Jump if zero
-273F:1933 EB 04 jmp short loc_359 ; (1939)
-273F:1935 90 db 90h
-273F:1936 loc_358: ; 111111111000
-273F:1936 B0 A5 mov al,0A5h
-273F:1938 C3 retn
-273F:1939 loc_359: ; 111111111001
-273F:1939 E8 6469 call read_bit
-273F:193C 74 03 jz loc_360 ; Jump if zero
-273F:193E EB 04 jmp short loc_361 ; (1944)
-273F:1940 90 db 90h
-273F:1941 loc_360: ; 1111111110010
-273F:1941 B0 32 mov al,32h ; '2'
-273F:1943 C3 retn
-273F:1944 loc_361: ; 1111111110011
-273F:1944 B0 B0 mov al,0B0h
-273F:1946 C3 retn
-273F:1947 loc_362: ; 11111111101
-273F:1947 E8 645B call read_bit
-273F:194A 74 03 jz loc_363 ; Jump if zero
-273F:194C EB 04 jmp short loc_364 ; (1952)
-273F:194E 90 db 90h
-273F:194F loc_363: ; 111111111010
-273F:194F B0 4B mov al,4Bh ; 'K'
-273F:1951 C3 retn
-273F:1952 loc_364: ; 111111111011
-273F:1952 E8 6450 call read_bit
-273F:1955 74 03 jz loc_365 ; Jump if zero
-273F:1957 EB 04 jmp short loc_366 ; (195D)
-273F:1959 90 db 90h
-273F:195A loc_365: ; 1111111110110
-273F:195A B0 25 mov al,25h ; '%'
-273F:195C C3 retn
-273F:195D loc_366: ; 1111111110111
-273F:195D E8 6445 call read_bit
-273F:1960 74 03 jz loc_367 ; Jump if zero
-273F:1962 EB 04 jmp short loc_368 ; (1968)
-273F:1964 90 db 90h
-273F:1965 loc_367: ; 11111111101110
-273F:1965 B0 A2 mov al,0A2h
-273F:1967 C3 retn
-273F:1968 loc_368: ; 11111111101111
-273F:1968 B0 35 mov al,35h ; '5'
-273F:196A C3 retn
-273F:196B loc_369: ; 1111111111
-273F:196B E8 6437 call read_bit
-273F:196E 74 03 jz loc_370 ; Jump if zero
-273F:1970 EB 30 jmp short loc_379 ; (19A2)
-273F:1972 90 db 90h
-273F:1973 loc_370: ; 11111111110
-273F:1973 E8 642F call read_bit
-273F:1976 74 03 jz loc_371 ; Jump if zero
-273F:1978 EB 0F jmp short loc_374 ; (1989)
-273F:197A 90 db 90h
-273F:197B loc_371: ; 111111111100
-273F:197B E8 6427 call read_bit
-273F:197E 74 03 jz loc_372 ; Jump if zero
-273F:1980 EB 04 jmp short loc_373 ; (1986)
-273F:1982 90 db 90h
-273F:1983 loc_372: ; 1111111111000
-273F:1983 B0 3A mov al,3Ah ; ':'
-273F:1985 C3 retn
-273F:1986 loc_373: ; 1111111111001
-273F:1986 B0 4A mov al,4Ah ; 'J'
-273F:1988 C3 retn
-273F:1989 loc_374: ; 111111111101
-273F:1989 E8 6419 call read_bit
-273F:198C 74 03 jz loc_375 ; Jump if zero
-273F:198E EB 04 jmp short loc_376 ; (1994)
-273F:1990 90 db 90h
-273F:1991 loc_375: ; 1111111111010
-273F:1991 B0 56 mov al,56h ; 'V'
-273F:1993 C3 retn
-273F:1994 loc_376: ; 1111111111011
-273F:1994 E8 640E call read_bit
-273F:1997 74 03 jz loc_377 ; Jump if zero
-273F:1999 EB 04 jmp short loc_378 ; (199F)
-273F:199B 90 db 90h
-273F:199C loc_377: ; 11111111110110
-273F:199C B0 36 mov al,36h ; '6'
-273F:199E C3 retn
-273F:199F loc_378: ; 11111111110111
-273F:199F B0 33 mov al,33h ; '3'
-273F:19A1 C3 retn
-273F:19A2 loc_379: ; 11111111111
-273F:19A2 E8 6400 call read_bit
-273F:19A5 74 03 jz loc_380 ; Jump if zero
-273F:19A7 EB 25 jmp short loc_387 ; (19CE)
-273F:19A9 90 db 90h
-273F:19AA loc_380: ; 111111111110
-273F:19AA E8 63F8 call read_bit
-273F:19AD 74 03 jz loc_381 ; Jump if zero
-273F:19AF EB 04 jmp short loc_382 ; (19B5)
-273F:19B1 90 db 90h
-273F:19B2 loc_381: ; 1111111111100
-273F:19B2 B0 AB mov al,0ABh
-273F:19B4 C3 retn
-273F:19B5 loc_382: ; 1111111111101
-273F:19B5 E8 63ED call read_bit
-273F:19B8 74 03 jz loc_383 ; Jump if zero
-273F:19BA EB 04 jmp short loc_384 ; (19C0)
-273F:19BC 90 db 90h
-273F:19BD loc_383: ; 11111111111010
-273F:19BD B0 AE mov al,0AEh
-273F:19BF C3 retn
-273F:19C0 loc_384: ; 11111111111011
-273F:19C0 E8 63E2 call read_bit
-273F:19C3 74 03 jz loc_385 ; Jump if zero
-273F:19C5 EB 04 jmp short loc_386 ; (19CB)
-273F:19C7 90 db 90h
-273F:19C8 loc_385: ; 111111111110110
-273F:19C8 B0 30 mov al,30h ; '0'
-273F:19CA C3 retn
-273F:19CB loc_386: ; 111111111110111
-273F:19CB B0 34 mov al,34h ; '4'
-273F:19CD C3 retn
-273F:19CE loc_387: ; 111111111111
-273F:19CE E8 63D4 call read_bit
-273F:19D1 74 03 jz loc_388 ; Jump if zero
-273F:19D3 EB 1A jmp short loc_393 ; (19EF)
-273F:19D5 90 db 90h
-273F:19D6 loc_388: ; 1111111111110
-273F:19D6 E8 63CC call read_bit
-273F:19D9 74 03 jz loc_389 ; Jump if zero
-273F:19DB EB 04 jmp short loc_390 ; (19E1)
-273F:19DD 90 db 90h
-273F:19DE loc_389: ; 11111111111100
-273F:19DE B0 37 mov al,37h ; '7'
-273F:19E0 C3 retn
-273F:19E1 loc_390: ; 11111111111101
-273F:19E1 E8 63C1 call read_bit
-273F:19E4 74 03 jz loc_391 ; Jump if zero
-273F:19E6 EB 04 jmp short loc_392 ; (19EC)
-273F:19E8 90 db 90h
-273F:19E9 loc_391: ; 111111111111010
-273F:19E9 B0 39 mov al,39h ; '9'
-273F:19EB C3 retn
-273F:19EC loc_392: ; 111111111111011
-273F:19EC B0 22 mov al,22h ; '"'
-273F:19EE C3 retn
-273F:19EF loc_393: ; 1111111111111
-273F:19EF E8 63B3 call read_bit
-273F:19F2 74 03 jz loc_394 ; Jump if zero
-273F:19F4 EB 0F jmp short loc_397 ; (1A05)
-273F:19F6 90 db 90h
-273F:19F7 loc_394: ; 11111111111110
-273F:19F7 E8 63AB call read_bit
-273F:19FA 74 03 jz loc_395 ; Jump if zero
-273F:19FC EB 04 jmp short loc_396 ; (1A02)
-273F:19FE 90 db 90h
-273F:19FF loc_395: ; 111111111111100
-273F:19FF B0 38 mov al,38h ; '8'
-273F:1A01 C3 retn
-273F:1A02 loc_396: ; 111111111111101
-273F:1A02 B0 A7 mov al,0A7h
-273F:1A04 C3 retn
-273F:1A05 loc_397: ; 11111111111111
-273F:1A05 E8 639D call read_bit
-273F:1A08 74 03 jz loc_398 ; Jump if zero
-273F:1A0A EB 0F jmp short loc_401 ; (1A1B)
-273F:1A0C 90 db 90h
-273F:1A0D loc_398: ; 111111111111110
-273F:1A0D E8 6395 call read_bit
-273F:1A10 74 03 jz loc_399 ; Jump if zero
-273F:1A12 EB 04 jmp short loc_400 ; (1A18)
-273F:1A14 90 db 90h
-273F:1A15 loc_399: ; 1111111111111100
-273F:1A15 B0 2F mov al,2Fh ; '/'
-273F:1A17 C3 retn
-273F:1A18 loc_400: ; 1111111111111101
-273F:1A18 B0 51 mov al,51h ; 'Q'
-273F:1A1A C3 retn
-273F:1A1B loc_401: ; 111111111111111
-273F:1A1B E8 6387 call read_bit
-273F:1A1E 74 03 jz loc_402 ; Jump if zero
-273F:1A20 EB 0F jmp short loc_405 ; (1A31)
-273F:1A22 90 db 90h
-273F:1A23 loc_402: ; 1111111111111110
-273F:1A23 E8 637F call read_bit
-273F:1A26 74 03 jz loc_403 ; Jump if zero
-273F:1A28 EB 04 jmp short loc_404 ; (1A2E)
-273F:1A2A 90 db 90h
-273F:1A2B loc_403: ; 11111111111111100
-273F:1A2B B0 A8 mov al,0A8h
-273F:1A2D C3 retn
-273F:1A2E loc_404: ; 11111111111111101
-273F:1A2E B0 28 mov al,28h ; '('
-273F:1A30 C3 retn
-273F:1A31 loc_405: ; 1111111111111111
-273F:1A31 E8 6371 call read_bit
-273F:1A34 74 03 jz loc_406 ; Jump if zero
-273F:1A36 EB 0F jmp short loc_409 ; (1A47)
-273F:1A38 90 db 90h
-273F:1A39 loc_406: ; 11111111111111110
-273F:1A39 E8 6369 call read_bit
-273F:1A3C 74 03 jz loc_407 ; Jump if zero
-273F:1A3E EB 04 jmp short loc_408 ; (1A44)
-273F:1A40 90 db 90h
-273F:1A41 loc_407: ; 111111111111111100
-273F:1A41 B0 29 mov al,29h ; ')'
-273F:1A43 C3 retn
-273F:1A44 loc_408: ; 111111111111111101
-273F:1A44 B0 99 mov al,99h
-273F:1A46 C3 retn
-273F:1A47 loc_409: ; 11111111111111111
-273F:1A47 B0 A9 mov al,0A9h
-273F:1A49 C3 retn
- decode_character endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:631D
- ; si=Character name, di = speech text, talk_character_id = character hotspot Id
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_dialog_init proc near
-273F:1A4A 89 3E B9F9 mov talk_speech_ptr, di
-273F:1A4E BD 0080 mov bp, 80h
-273F:1A51 A1 4CF0 mov ax, font2_segment
-273F:1A54 8E C0 mov es, ax
-273F:1A56 56 push si
-273F:1A57 33 D2 xor dx, dx ; Zero register
-273F:1A59 B1 03 mov cl, 3
-273F:1A5B loc_410: ; xref 273F:1A68, 1A6D
-273F:1A5B úAC lodsb ; String [si] to al
-273F:1A5C 2C 20 sub al,20h ; ' '
-273F:1A5E 72 0F jc loc_411 ; Jump if carry Set
-273F:1A60 98 cbw ; Convrt byte to word
-273F:1A61 D3 E0 shl ax,cl ; Convert to font data offset
-273F:1A63 8B D8 mov bx,ax
-273F:1A65 26: 02 17 add dl,es:[bx] ; Increase width
-273F:1A68 73 F1 jnc loc_410 ; Jump if carry=0
-273F:1A6A 80 C6 01 add dh,1
-273F:1A6D EB EC jmp short loc_410 ; (1A5B)
-; dx = size of the character name?
-273F:1A6F loc_411: ; xref 273F:1A5E
-273F:1A6F B8 0080 mov ax,80h
-273F:1A72 2B C2 sub ax,dx
-273F:1A74 D1 E8 shr ax,1 ; Calculate centering name?
-273F:1A76 50 push ax
-273F:1A77 úBB B9F9 mov bx, offset talk_speech_ptr
-273F:1A7A E8 00B3 call word_wrap_string
-273F:1A7D A1 4CE6 mov ax, talk_dialog_buffer
-273F:1A80 A3 B9FF mov talk_buffer_segment, ax
-273F:1A83 8E C0 mov es, ax
-273F:1A85 BF 0000 mov di,0
-273F:1A88 89 3E BA01 mov talk_buffer_offset, di
-273F:1A8C 8B 2E B9FD mov bp, data_1122
-273F:1A90 57 push di
-273F:1A91 FF 16 0756 call [draw_talk_dialog_proc]
-
-273F:1A95 A1 983B mov ax, talk_character_id
-273F:1A98 E8 F24F call get_room_resource_pointer2
-273F:1A9B 8B 44 19 mov ax, [si+HS_WIDTH_COPY] ; Figure out hotspot X center
-273F:1A9E D1 E8 shr ax,1
-273F:1AA0 03 44 0D add ax, [si+HS_X]
-273F:1AA3 2D 0080 sub ax, 80h ; Remove 80h offset
-273F:1AA6 72 19 jc loc_412 ; Character off-screen
-273F:1AA8 8B 1E 11C4 mov bx, talk_dialog_width
-273F:1AAC D1 EB shr bx,1 ; ax=X start for centering
-273F:1AAE 2B C3 sub ax,bx ; dialog on character
-273F:1AB0 72 0F jc loc_412
-273F:1AB2 BB 0136 mov bx, 310
-273F:1AB5 2B 1E 11C4 sub bx, talk_dialog_width
-273F:1AB9 3B C3 cmp ax, bx ; Too far along horizontally?
-273F:1ABB 72 06 jb loc_413
-273F:1ABD 8B C3 mov ax,bx ; Yes, so limit x start
-273F:1ABF EB 02 jmp short loc_413
-273F:1AC1 loc_412:
-273F:1AC1 33 C0 xor ax,ax
-273F:1AC3 loc_413:
-273F:1AC3 A3 11C2 mov talk_dialog_left, ax ; Set the x start
-273F:1AC6 5F pop di
-273F:1AC7 8B 36 076E mov si, data_571
-273F:1ACB 8A 7C 04 mov bh, [si+4]
-273F:1ACE 8A 44 05 mov al, [si+5]
-273F:1AD1 A2 BA06 mov data_ba06, al
-273F:1AD4 58 pop ax
-273F:1AD5 5E pop si
-273F:1AD6 80 3E 0742 01 cmp video_style, VIDEO_STYLE_VGA
-273F:1ADB 74 2A je loc_414 ; Jump if equal
-273F:1ADD 81 C7 0140 add di,140h
-273F:1AE1 8B 0E BA01 mov cx, talk_buffer_offset
-273F:1AE5 81 C1 03C0 add cx, SCREEN_WIDTH*3 ; 3C0h ?
-273F:1AE9 89 0E BA01 mov talk_buffer_offset, cx
-273F:1AED 89 0E BA03 mov talk_buffer_offset_2, cx
-273F:1AF1 8A C8 mov cl,al
-273F:1AF3 80 E1 07 and cl,7
-273F:1AF6 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:1AF8 25 FFFC and ax,0FFFCh
-273F:1AFB 03 F8 add di,ax
-273F:1AFD BD 0040 mov bp,40h
-273F:1B00 C6 06 BA05 05 mov byte ptr ds:data_465e,5 ; (273F:BA05=0)
-273F:1B05 EB 19 jmp short loc_415 ; (1B20)
-273F:1B07 loc_414: ; xref 273F:1ADB
-273F:1B07 03 F8 add di,ax
-273F:1B09 81 C7 0280 add di,280h
-273F:1B0D 8B 0E BA01 mov cx, talk_buffer_offset
-273F:1B11 81 C1 0785 add cx,785h
-273F:1B15 89 0E BA01 mov talk_buffer_offset, cx
-273F:1B19 89 0E BA03 mov talk_buffer_offset_2, cx
-273F:1B1D BD 0080 mov bp,80h
-273F:1B20 loc_415: ; xref 273F:1B05
-273F:1B20 89 2E B9FB mov data_b9fb, bp
-
-; Loop for adding the character name into the dialog
-273F:1B24 úAC loc_416: lodsb ; String [si] to al
-273F:1B25 2C 20 sub al,20h ; ' '
-273F:1B27 72 06 jc loc_ret_417 ; Jump if carry Set
-273F:1B29 FF 16 075A call [display2_character_proc]
-273F:1B2D EB F5 jmp short loc_416 ; (1B24)
-273F:1B2F loc_ret_417: ; xref 273F:1B27
-273F:1B2F C3 retn
- talk_dialog_init endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1A7A, 8980
- ; bx = talk data details record offset
- ; di = text to handle
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1B30 word_wrap_string proc near
-273F:1B30 8B F7 mov si,di
-273F:1B32 C7 47 04 0000 mov word ptr [bx+4],0
-273F:1B37 loc_418: ; xref 273F:1B5C, 1B92
-273F:1B37 ú8B FE mov di,si
-273F:1B39 83 47 04 01 add word ptr [bx+4],1
-273F:1B3D BA 0009 mov dx,9
-273F:1B40 loc_419: ; xref 273F:1B8C
-273F:1B40 32 ED xor ch,ch ; Zero register
-273F:1B42 loc_420: ; xref 273F:1B51, 1B58
-273F:1B42 úAC lodsb ; String [si] to al
-273F:1B43 2C 20 sub al,20h ; ' '
-273F:1B45 74 17 jz loc_423 ; Jump if zero
-273F:1B47 72 0A jc loc_421 ; Jump if carry Set
-273F:1B49 98 cbw ; Convrt byte to word
-273F:1B4A D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:1B4C 93 xchg bx,ax
-273F:1B4D 26: 02 2F add ch,es:[bx]
-273F:1B50 93 xchg bx,ax
-273F:1B51 EB EF jmp short loc_420 ; (1B42)
-273F:1B53 loc_421: ; xref 273F:1B47
-273F:1B53 3C E1 cmp al,0E1h
-273F:1B55 75 03 jne loc_422 ; Jump if not equal
-273F:1B57 AC lodsb ; String [si] to al
-273F:1B58 EB E8 jmp short loc_420 ; (1B42)
-273F:1B5A loc_422: ; xref 273F:1B55
-273F:1B5A 3C ED cmp al,0EDh
-273F:1B5C 74 D9 je loc_418 ; Jump if equal
-273F:1B5E loc_423: ; xref 273F:1B45
-273F:1B5E 02 D5 add dl,ch
-273F:1B60 73 03 jnc loc_424 ; Jump if carry=0
-273F:1B62 80 C6 01 add dh,1
-273F:1B65 loc_424: ; xref 273F:1B60
-273F:1B65 3B EA cmp bp,dx
-273F:1B67 74 1D je loc_426 ; Jump if equal
-273F:1B69 73 0F jnc loc_425 ; Jump if carry=0
-273F:1B6B C6 45 FF 0D mov byte ptr [di-1],0Dh
-273F:1B6F 8A D5 mov dl,ch
-273F:1B71 80 C2 09 add dl,9
-273F:1B74 32 F6 xor dh,dh ; Zero register
-273F:1B76 83 47 04 01 add word ptr [bx+4],1
-273F:1B7A loc_425: ; xref 273F:1B69
-273F:1B7A 8B FE mov di,si
-273F:1B7C 26: 02 16 0000 add dl,es:data_1443e ; (8B57:0000=0)
-273F:1B81 73 03 jnc loc_426 ; Jump if carry=0
-273F:1B83 80 C6 01 add dh,1
-273F:1B86 loc_426: ; xref 273F:1B67, 1B81
-273F:1B86 0A C0 or al,al ; Zero ?
-273F:1B88 75 0A jnz loc_427 ; Jump if not zero
-273F:1B8A 3B D5 cmp dx,bp
-273F:1B8C 72 B2 jb loc_419 ; Jump if below
-273F:1B8E C6 44 FF 0D mov byte ptr [si-1],0Dh ; Add a carriage return
-273F:1B92 EB A3 jmp short loc_418
-273F:1B94 loc_427:
-273F:1B94 8B 47 04 mov ax,[bx+4]
-273F:1B97 C3 retn
- word_wrap_string endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:634C, 899B, 8E28
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1B98 sub_51 proc near
-273F:1B98 8B 37 mov si,[bx]
-273F:1B9A 8B 7F 08 mov di,[bx+8]
-273F:1B9D 8A 4F 0C mov cl,[bx+0Ch]
-273F:1BA0 8B 47 06 mov ax,[bx+6]
-273F:1BA3 8E C0 mov es,ax
-273F:1BA5 53 push bx
-273F:1BA6 8B 6F 02 mov bp, [bx+2]
-273F:1BA9 8A 7F 0D mov bh, [bx+0Dh]
-273F:1BAC loc_428: ; xref 273F:1BCE
-273F:1BAC úAC lodsb ; String [si] to al
-273F:1BAD 2C 20 sub al,20h ; ' '
-273F:1BAF 74 1F jz loc_430 ; Jump if zero
-273F:1BB1 73 17 jnc loc_429 ; Jump if carry=0
-273F:1BB3 3C E1 cmp al,0E1h
-273F:1BB5 72 29 jb loc_432 ; Jump if below
-273F:1BB7 5B pop bx
-273F:1BB8 8B 7F 0A mov di,[bx+0Ah]
-273F:1BBB B8 0007 mov ax,7
-273F:1BBE F7 67 02 mul word ptr [bx+2] ; dx:ax = data * ax
-273F:1BC1 03 F8 add di,ax
-273F:1BC3 89 7F 0A mov [bx+0Ah], di
-273F:1BC6 B1 05 mov cl, 5
-273F:1BC8 EB 0B jmp short loc_431 ; (1BD5)
-273F:1BCA loc_429: ; xref 273F:1BB1
-273F:1BCA FF 16 075A call [display2_character_proc]
-273F:1BCE EB DC jmp short loc_428 ; (1BAC)
-273F:1BD0 loc_430: ; xref 273F:1BAF
-273F:1BD0 FF 16 075A call [display2_character_proc]
-273F:1BD4 5B pop bx
-273F:1BD5 loc_431: ; xref 273F:1BC8
-273F:1BD5 89 7F 08 mov [bx+8],di
-273F:1BD8 88 4F 0C mov [bx+0Ch],cl
-273F:1BDB 89 37 mov [bx],si
-273F:1BDD 33 C0 xor ax,ax ; Zero register
-273F:1BDF C3 retn
-273F:1BE0 loc_432: ; xref 273F:1BB5
-273F:1BE0 5B pop bx
-273F:1BE1 0D FFFF or ax,0FFFFh
-273F:1BE4 C3 retn
- sub_51 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:59D2, 59F6, 5A2E, 5A68
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1BE5 sub_52 proc near
-273F:1BE5 8B 0E 074C mov cx, menubar_block_size
-273F:1BE9 F7 E1 mul cx ; dx:ax = reg * ax
-273F:1BEB 8B F8 mov di,ax
-273F:1BED A1 074A mov ax, char_width
-273F:1BF0 F7 E3 mul bx ; dx:ax = reg * ax
-273F:1BF2 03 F8 add di,ax
-273F:1BF4 A1 4CE4 mov ax, data_segment2
-273F:1BF7 8E C0 mov es,ax
-273F:1BF9 8B 2E 0748 mov bp, screen_width
-273F:1BFD 32 C9 xor cl,cl ; Zero register
-273F:1BFF 8B 1E 076E mov bx, data_571
-273F:1C03 8A 7F 05 mov bh,[bx+5]
-273F:1C06 loc_433: ; xref 273F:1C0F
-273F:1C06 úAC lodsb ; String [si] to al
-273F:1C07 2C 20 sub al,20h ; ' '
-273F:1C09 72 06 jc loc_ret_434 ; Jump if carry Set
-273F:1C0B FF 16 075A call [display2_character_proc]
-273F:1C0F EB F5 jmp short loc_433 ; (1C06)
-
-273F:1C11 loc_ret_434: ; xref 273F:1C09
-273F:1C11 C3 retn
- sub_52 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:010A, 93EC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_check_cursors proc near
-
- assume ds:data_seg
-273F:1C12 A1 11E1 mov ax, cursor_index
-273F:1C15 3D 0002 cmp ax, CURSOR_TIME_UP ; Check if it's in the clock animation
-273F:1C18 72 24 jb loc_437 ; No
-273F:1C1A 3D 0009 cmp ax, CURSOR_TIME_UP_LEFT
-273F:1C1D 73 1F jae loc_437 ; Too high
-273F:1C1F 80 3E 6D52 01 cmp player_action_state, CHAR_ACTION_START_WALK
-273F:1C24 74 07 je loc_435 ; Jump if equal
-273F:1C26 80 3E 6D52 04 cmp player_action_state, CHAR_ACTION_PROCESSING_PATH
-273F:1C2B 75 11 jne loc_437 ; Jump if not equal
-273F:1C2D loc_435: ; xref 273F:1C24
-273F:1C2D 05 0001 add ax,1
-273F:1C30 3D 000A cmp ax, CURSOR_CROSS ; Passed end of clock sequence?
-273F:1C33 72 03 jb loc_436 ; Jump if below
-273F:1C35 A1 0002 mov ax, CURSOR_TIME_UP ; Set clock back to start
-273F:1C38 loc_436:
-273F:1C38 A2 11E3 mov cursor_index_new, al
-273F:1C3B E9 0180 jmp loc_451
-
-273F:1C3E loc_437:
-273F:1C3E E8 0374 call talk_dialog_mouse_check
-273F:1C41 75 08 jnz loc_438 ; Not in dialog
-273F:1C43 C6 06 11E3 10 mov cursor_index_new, CURSOR_TALK ; Show talk cursor
-273F:1C48 E9 0173 jmp loc_451
-
-273F:1C4B loc_438: ; xref 273F:1C41
-273F:1C4B 80 3E 9834 04 cmp cursor_state, CURSORSTATE_BUMPED
-273F:1C50 74 5B je loc_440 ; Jump if equal
-273F:1C52 80 3E 9834 03 cmp cursor_state, CURSORSTATE_TALK
-273F:1C57 74 5C je loc_441 ; Jump if equal
-
-; Check for cursor in menubar area
-
-273F:1C59 83 3E 11D8 08 cmp mouse_y2, MENUBAR_Y_SIZE
-273F:1C5E 73 10 jae loc_439 ; Jump if above or =
-273F:1C60 F7 06 BA25 FFFF test old_room_number, 0FFFFh
-273F:1C66 75 55 jnz loc_ret_442 ; Jump if not zero
-273F:1C68 C6 06 11E3 11 mov cursor_index_new, CURSOR_MENUBAR_AREA
-273F:1C6D E9 014E jmp loc_451 ; (1DBE)
-273F:1C70 loc_439: ; xref 273F:1C5E
-273F:1C70 F6 06 9834 FF test cursor_state, 0FFh
-273F:1C75 74 47 jz loc_443 ; Jump if zero
-273F:1C77 C7 06 1924 0000 mov hotspot_id, 0
-273F:1C7D C6 06 11E3 0F mov cursor_index_new, CURSOR_CAMERA
-273F:1C82 8B 16 9832 mov dx, room_number
-273F:1C86 úBF 623E mov di, offset hotspot_table_3
-273F:1C89 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
-273F:1C8C E8 01BC call room_check_hotspots
-273F:1C8F úBF 63B1 mov di, offset hotspot_table_4
-273F:1C92 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
-273F:1C95 E8 01B3 call room_check_hotspots
-273F:1C98 úBF 5D98 mov di, offset hotspot_table_2
-273F:1C9B BD 03E8 mov bp, PLAYER_HOTSPOT_ID
-273F:1C9E E8 01AA call room_check_hotspots
-273F:1CA1 úBF 5EB8 mov di, offset hotspot_table_5
-273F:1CA4 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
-273F:1CA7 E8 01A1 call room_check_hotspots
-273F:1CAA E9 0111 jmp loc_451 ; (1DBE)
-273F:1CAD loc_440: ; xref 273F:1C50
-273F:1CAD C6 06 11E3 0F mov cursor_index_new, CURSOR_CAMERA
-273F:1CB2 E9 0109 jmp loc_451 ; (1DBE)
-273F:1CB5 loc_441: ; xref 273F:1C57
-273F:1CB5 C6 06 11E3 00 mov cursor_index_new, CURSOR_ARROW
-273F:1CBA E9 0101 jmp loc_451 ; (1DBE)
-
-273F:1CBD loc_ret_442: ; xref 273F:1C66
-273F:1CBD C3 retn
-273F:1CBE loc_443: ; xref 273F:1C75
-273F:1CBE C6 06 11E3 00 mov cursor_index_new, CURSOR_ARROW
-273F:1CC3 C7 06 1924 0000 mov hotspot_id, 0
-273F:1CC9 C7 06 11E6 0000 mov hotspot_name_id, 0
-273F:1CCF 8B 16 9832 mov dx, room_number
-273F:1CD3 úBF 623E mov di, offset hotspot_table_3
-273F:1CD6 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
-273F:1CD9 E8 016F call room_check_hotspots
-273F:1CDC úBF 5D98 mov di, offset hotspot_table_2
-273F:1CDF BD 03E8 mov bp, PLAYER_HOTSPOT_ID
-273F:1CE2 E8 0166 call room_check_hotspots
-273F:1CE5 úBF 63B1 mov di, offset hotspot_table_4
-273F:1CE8 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
-273F:1CEB E8 015D call room_check_hotspots
-273F:1CEE úBF 5EB8 mov di, offset hotspot_table_5
-273F:1CF1 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
-273F:1CF4 E8 0154 call room_check_hotspots
-273F:1CF7 F7 06 1924 FFFF test hotspot_id, 0FFFFh
-273F:1CFD 74 05 jz loc_444 ; Not on hotspot
-273F:1CFF C6 06 11E3 0A mov cursor_index_new, CURSOR_CROSS
-273F:1D04 loc_444: ; xref 273F:1CFD
-273F:1D04 A1 11E6 mov ax, hotspot_name_id
-273F:1D07 3B 06 11E4 cmp ax, hotspot_name_id2
-273F:1D0B 74 36 je loc_446 ; Jump if equal
-273F:1D0D A3 11E4 mov hotspot_name_id2, ax
-273F:1D10 E8 52F2 call menubar_clear_image
-273F:1D13 A1 11E4 mov ax, hotspot_name_id2
-273F:1D16 0B C0 or ax,ax ; Zero ?
-273F:1D18 74 29 jz loc_446 ; Jump if zero
-273F:1D1A BF 4B43 mov di, offset hotspot_name
-273F:1D1D E8 601A call decode_string
-273F:1D20 8B 36 076E mov si, data_571
-273F:1D24 8A 7C 05 mov bh,[si+5]
-273F:1D27 úBE 4B43 mov si,offset hotspot_name
-273F:1D2A BF 0000 mov di,0
-273F:1D2D B1 04 mov cl,4
-273F:1D2F 8B 2E 0748 mov bp, screen_width
-273F:1D33 A1 4CE4 mov ax, data_segment2
-273F:1D36 8E C0 mov es,ax
-273F:1D38 loc_445: ; xref 273F:1D41
-273F:1D38 úAC lodsb ; String [si] to al
-273F:1D39 2C 20 sub al,20h ; ' '
-273F:1D3B 72 06 jc loc_446 ; Jump if carry Set
-273F:1D3D FF 16 075A call [display2_character_proc]
-273F:1D41 EB F5 jmp short loc_445 ; (1D38)
-273F:1D43 loc_446: ; xref 273F:1D0B, 1D18, 1D3B
-273F:1D43 C7 06 1920 0000 mov room_exit_hotspot_id, 0
-273F:1D49 C7 06 1922 0000 mov dest_room_num, 0
-273F:1D4F 8B 1E 9832 mov bx, room_number
-273F:1D53 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:1D55 8B B7 2F61 mov si, room_exits_table[bx]
-273F:1D59 0B F6 or si,si ; Zero ?
-273F:1D5B 74 61 jz loc_451 ; Jump if zero
-273F:1D5D 8B 1E 11D6 mov bx, mouse_x2
-273F:1D61 81 C3 0080 add bx, 80h
-273F:1D65 8B 16 11D8 mov dx, mouse_y2
-273F:1D69 81 C2 0080 add dx,80h
-273F:1D6D loc_447: ; xref 273F:1D89
-273F:1D6D ú8B 04 mov ax,[si]
-273F:1D6F 0B C0 or ax,ax ; Record present?
-273F:1D71 74 4B jz loc_451 ; If no, exit loop
-273F:1D73 3B C3 cmp ax,bx
-273F:1D75 73 0F jae loc_448 ; Jump if above or =
-273F:1D77 3B 5C 02 cmp bx,[si+ROOMEXIT_X_END]
-273F:1D7A 73 0A jae loc_448 ; Jump if above or =
-273F:1D7C 3B 54 04 cmp dx,[si+ROOMEXIT_Y_START]
-273F:1D7F 72 05 jb loc_448 ; Jump if below
-273F:1D81 3B 54 06 cmp dx,[si+ROOMEXIT_Y_END]
-273F:1D84 72 05 jb loc_449 ; Jump if below
-273F:1D86 loc_448:
-273F:1D86 83 C6 0E add si, ROOMEXIT_RECORD_SIZE ; Move to next record
-273F:1D89 EB E2 jmp short loc_447
-273F:1D8B loc_449: ; xref 273F:1D84
-273F:1D8B 8B 44 0A mov ax,[si+ROOMEXIT_HOTSPOT_ID] ; Get asssociated hotspot Id
-273F:1D8E 0B C0 or ax,ax ; Is there one?
-273F:1D90 74 0D jz loc_450 ; No, so allow exit
-273F:1D92 56 push si
-273F:1D93 E8 5458 call room_exit_hs_get_pointer
-273F:1D96 5F pop di
-273F:1D97 87 F7 xchg si,di
-273F:1D99 F6 45 0C FF test byte ptr [di+REHS_EXIT_BLOCKED],0FFh ; Is exit blocked?
-273F:1D9D 75 1F jnz loc_451 ; Jump if yes
-273F:1D9F loc_450:
-273F:1D9F 8B 44 0A mov ax,[si+ROOMEXIT_HOTSPOT_ID]
-273F:1DA2 A3 1920 mov room_exit_hotspot_id, ax
-273F:1DA5 8B 44 0C mov ax,[si+ROOMEXIT_DEST_ROOM]
-273F:1DA8 A3 1922 mov dest_room_num, ax
-273F:1DAB 8B 44 08 mov ax,[si+ROOMEXIT_CURSOR_NUM]
-273F:1DAE A2 11E3 mov cursor_index_new, al
-273F:1DB1 F7 06 1924 FFFF test hotspot_id, 0FFFFh
-273F:1DB7 74 05 jz loc_451 ; Jump if zero
-273F:1DB9 80 06 11E3 07 add cursor_index_new, CURSOR_ARROW_UP2-CURSOR_ARROW_UP
- ; Change standard arrow to cross arrow
-273F:1DBE loc_451: ; xref 273F:1C3B, 1C48, 1C6D, 1CAA
- ; 1CB2, 1CBA, 1D5B, 1D71
- ; 1D9D, 1DB7
-273F:1DBE A0 11E3 mov al, cursor_index_new
-273F:1DC1 3A 06 11E1 cmp al, cursor_index
-273F:1DC5 74 15 je loc_ret_453 ; Jump if equal
-273F:1DC7 A2 11E1 mov cursor_index, al
-273F:1DCA C6 06 11DF 00 mov cursor_centroid, 0
-273F:1DCF 3C 0A cmp al, CURSOR_CROSS
-273F:1DD1 75 05 jne loc_452 ; Jump if not equal
-273F:1DD3 C6 06 11DF 07 mov cursor_centroid, 7
-273F:1DD8 loc_452: ; xref 273F:1DD1
-273F:1DD8 FF 16 075E call word ptr [show_cursor_proc]
-
-273F:1DDC loc_ret_453: ; xref 273F:1DC5, 1E50
-273F:1DDC C3 retn
-
- room_check_cursors endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:1DDD C3 retn
- ;* No entry point to code
-273F:1DDE A1 11D8 mov ax, mouse_y2
-273F:1DE1 3D 0008 cmp ax,8
-273F:1DE4 72 18 jb loc_454 ; Jump if below
-273F:1DE6 8A 1E CF09 mov bl, talk_line_num
-273F:1DEA 80 FB 02 cmp bl,2
-273F:1DED 72 15 jb loc_455 ; Jump if below
-273F:1DEF 80 C3 01 add bl,1
-273F:1DF2 32 FF xor bh,bh ; Zero register
-273F:1DF4 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:1DF6 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:1DF8 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:1DFA 3B C3 cmp ax,bx
-273F:1DFC 73 06 jae loc_455 ; Jump if above or =
-273F:1DFE loc_454: ; xref 273F:1DE4
-273F:1DFE C6 06 11E3 00 mov byte ptr ds:[11E3h],0 ; (273F:11E3=74h)
-273F:1E03 C3 retn
-273F:1E04 loc_455:
-273F:1E04 F6 06 9837 FF test talk_dialog_active, 0FFh
-273F:1E09 74 3A jz loc_457 ; Jump if zero
-273F:1E0B A1 11D6 mov ax, mouse_x2
-273F:1E0E 3B 06 11C2 cmp ax, talk_dialog_left
-273F:1E12 72 31 jb loc_457 ; Jump if below
-273F:1E14 2B 06 11C2 sub ax, talk_dialog_left
-273F:1E18 3B 06 11C4 cmp ax, talk_dialog_width
-273F:1E1C 73 27 jae loc_457 ; Jump if above or =
-273F:1E1E 80 3E CF08 03 cmp talk_state, 3
-273F:1E23 74 07 je loc_456 ; Jump if equal
-273F:1E25 80 3E CF08 04 cmp talk_state, 4
-273F:1E2A 75 19 jne loc_457 ; Jump if not equal
-273F:1E2C loc_456: ; xref 273F:1E23
-273F:1E2C A1 11D8 mov ax, mouse_y2
-273F:1E2F 3B 06 11C0 cmp ax, talk_dialog_top
-273F:1E33 72 10 jb loc_457 ; Jump if below
-273F:1E35 2B 06 11C0 sub ax, talk_dialog_top
-273F:1E39 3B 06 11C6 cmp ax, talk_dialog_height
-273F:1E3D 73 06 jae loc_457 ; Jump if above or =
-273F:1E3F C6 06 11E3 10 mov byte ptr ds:[11E3h],10h ; (273F:11E3=74h)
-273F:1E44 C3 retn
-273F:1E45 loc_457: ; xref 273F:1E09, 1E12, 1E1C, 1E2A
- ; 1E33, 1E3D
-273F:1E45 C6 06 11E3 16 mov byte ptr ds:[11E3h],16h ; (273F:11E3=74h)
-273F:1E4A C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1C8C, 1C95, 1C9E, 1CA7, 1CD9, 1CE2, 1CEB
- ; 1CF4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1E4B room_check_hotspots proc near
-273F:1E4B ú8B 35 mov si,[di] ; Get data ptr
-273F:1E4D 83 FE FF cmp si,0FFFFh ; Reached end of list?
-273F:1E50 74 8A je loc_ret_453 ; If yes, then exit
-273F:1E52 39 54 06 cmp [si+HS_ROOM_NUM], dx ; Entry in same room?
-273F:1E55 75 4F jne loc_463 ; No, so go move to next
-
-273F:1E57 F6 44 03 80 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_HIGHLIGHTED
-273F:1E5B 75 06 jnz loc_459 ; Jump if not zero
-273F:1E5D F6 44 03 40 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_SKIP
-273F:1E61 75 43 jnz loc_463
-273F:1E63 loc_459:
-273F:1E63 F6 44 03 20 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_20
-273F:1E67 75 3D jnz loc_463 ; Jump if not zero
-273F:1E69 81 FD 0409 cmp bp,409h
-273F:1E6D 73 05 jae loc_460 ; Jump if above or =
-273F:1E6F E8 293C call room_check_x_extents
-273F:1E72 75 32 jnz loc_463 ; Jump if not zero
-273F:1E74 loc_460: ; xref 273F:1E6D
-273F:1E74 úBB 2A01 mov bx,offset hotspot_table
-273F:1E77 loc_461: ; xref 273F:1E84
-273F:1E77 ú8B 07 mov ax,[bx]
-273F:1E79 0B C0 or ax,ax ; Zero ?
-273F:1E7B 74 31 jz loc_464 ; Jump if zero
-273F:1E7D 3B C5 cmp ax,bp
-273F:1E7F 74 05 je loc_462 ; Jump if equal
-273F:1E81 83 C3 0A add bx, HOTSPOT_TABLE_ENTRY_SIZE
-273F:1E84 EB F1 jmp short loc_461 ; Check next entry
-273F:1E86 loc_462:
-
-273F:1E86 A1 11D6 mov ax, mouse_x2
-273F:1E89 05 0080 add ax,80h
-273F:1E8C 3B 47 02 cmp ax,[bx+2]
-273F:1E8F 72 15 jb loc_463 ; Jump if below
-273F:1E91 3B 47 04 cmp ax,[bx+4]
-273F:1E94 73 10 jae loc_463 ; Jump if above or =
-273F:1E96 A1 11D8 mov ax, mouse_y2
-273F:1E99 05 0080 add ax,80h
-273F:1E9C 3B 47 06 cmp ax,[bx+6]
-273F:1E9F 72 05 jb loc_463 ; Jump if below
-273F:1EA1 3B 47 08 cmp ax,[bx+8]
-273F:1EA4 72 30 jb loc_465 ; Jump if below
-
-273F:1EA6 loc_463:
-273F:1EA6 83 C7 09 add di,9 ; Move to next entry
-273F:1EA9 83 C5 01 add bp,1 ; Increment result Id
-273F:1EAC EB 9D jmp room_check_hotspots
-
-273F:1EAE loc_464:
-273F:1EAE A1 11D6 mov ax, mouse_x2
-273F:1EB1 05 0080 add ax, 80h
-273F:1EB4 8B 4C 0D mov cx, [si+HS_X]
-273F:1EB7 3B C1 cmp ax, cx
-273F:1EB9 72 EB jb loc_463 ; Jump if below
-273F:1EBB 03 4C 19 add cx, [si+HS_WIDTH_COPY]
-273F:1EBE 3B C8 cmp cx, ax
-273F:1EC0 72 E4 jb loc_463 ; Jump if below
-273F:1EC2 A1 11D8 mov ax, mouse_y2
-273F:1EC5 05 0080 add ax, 80h
-273F:1EC8 8B 4C 0F mov cx, [si+HS_Y]
-273F:1ECB 3B C1 cmp ax, cx
-273F:1ECD 72 D7 jb loc_463 ; Jump if below
-273F:1ECF 03 4C 13 add cx, [si+HS_HEIGHT]
-273F:1ED2 3B C8 cmp cx, ax
-273F:1ED4 72 D0 jb loc_463 ; Jump if below
-273F:1ED6 loc_465: ; xref 273F:1EA4
-273F:1ED6 80 4C 03 80 or byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_HIGHLIGHTED
-273F:1EDA 89 2E 1924 mov hotspot_id, bp
-273F:1EDE 8B 45 02 mov ax, [di+2]
-273F:1EE1 80 E4 1F and ah, 1Fh
-273F:1EE4 A3 11E6 mov hotspot_name_id, ax ; Save actions for this hotspot
-273F:1EE7 C3 retn
- room_check_hotspots endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0785, 94C8, 9DCC, 9DE5, 9DFE, 9E19, 9E33
- ; 9E4D, 9E63, 9E79
- ; cx=horiz, dx=vert, bx=buttons, ax=trigger, si/di=horiz/vert mickeys
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1EE8 mouse_handler proc near
-273F:1EE8 50 push ax
-273F:1EE9 53 push bx
-273F:1EEA 51 push cx
-273F:1EEB 52 push dx
-273F:1EEC 56 push si
-273F:1EED 57 push di
-273F:1EEE 55 push bp
-273F:1EEF 1E push ds
-273F:1EF0 06 push es
-273F:1EF1 9C pushf ; Push flags
-273F:1EF2 81 F9 027E cmp cx, 638
-273F:1EF6 72 03 jb loc_466 ; Jump if below
-273F:1EF8 B9 027D mov cx, 637
-273F:1EFB loc_466:
-273F:1EFB D1 E9 shr cx,1 ; Translate horiz 0-637 to 0-318
-273F:1EFD 81 FA 00C8 cmp dx, 200
-273F:1F01 72 03 jb loc_467 ; Jump if below
-273F:1F03 BA 00C7 mov dx, 199
-273F:1F06 loc_467:
-273F:1F06 FC cld
-273F:1F07 B8 31E4 mov ax,data_seg
-273F:1F0A 8E D8 mov ds,ax
-273F:1F0C 3A 1E 11D5 cmp bl, mouse_buttons ; Check mouse buttons
-273F:1F10 74 27 je loc_468 ; Jump if no button change
-273F:1F12 88 1E 11D5 mov mouse_buttons, bl ; Save new button status
-273F:1F16 0A DB or bl,bl ; Zero ?
-273F:1F18 74 1F jz loc_468 ; Jump if no buttons pressed
-
-273F:1F1A F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:1F1F 75 18 jnz loc_468 ; Jump if not zero
-273F:1F21 88 1E 11DA mov mouse_buttons2, bl
-273F:1F25 89 0E 11DB mov char_dest_x, cx
-273F:1F29 81 06 11DB 0080 add char_dest_x, 80h
-273F:1F2F 89 16 11DD mov char_dest_y, dx
-273F:1F33 81 06 11DD 0080 add char_dest_y, 80h
-
-273F:1F39 loc_468: ; xref 273F:1F10, 1F18, 1F1F
-273F:1F39 89 0E 11D1 mov mouse_x, cx
-273F:1F3D 89 16 11D3 mov mouse_y, dx
-273F:1F41 F6 06 11D0 06 test menubar_state, 6 ; (31E4:11D0=3)
-273F:1F46 75 0C jnz loc_469 ; Jump if not zero
-273F:1F48 89 0E 11D6 mov mouse_x2, cx
-273F:1F4C 89 16 11D8 mov mouse_y2, dx
-273F:1F50 FF 16 075E call word ptr [show_cursor_proc]
-273F:1F54 loc_469: ; xref 273F:1F46
-273F:1F54 9D popf ; Pop flags
-273F:1F55 07 pop es
-273F:1F56 1F pop ds
-273F:1F57 5D pop bp
-273F:1F58 5F pop di
-273F:1F59 5E pop si
-273F:1F5A 5A pop dx
-273F:1F5B 59 pop cx
-273F:1F5C 5B pop bx
-273F:1F5D 58 pop ax
-273F:1F5E CB retf ; Return far
- mouse_handler endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0013, 001D, 70B3, 77EA, 8F5A, 938B, A5B5
- ; A661, A8E3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1F5F show_disk_cursor proc near
-273F:1F5F 80 3E 11E1 01 cmp cursor_index, CURSOR_DISK
-273F:1F64 74 0E je loc_ret_470 ; Jump if equal
-273F:1F66 C6 06 11E1 01 mov cursor_index, CURSOR_DISK
-273F:1F6B C6 06 11DF 00 mov cursor_centroid, 0
-273F:1F70 FF 16 075E call word ptr [show_cursor_proc]
-
-273F:1F74 loc_ret_470: ; xref 273F:1F64, 1F7A
-273F:1F74 C3 retn
- show_disk_cursor endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00D0, 3D2B, 6D5A, 6E7E, 9342
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1F75 show_arrow_cursor proc near
-273F:1F75 80 3E 11E1 00 cmp cursor_index, CURSOR_ARROW
-273F:1F7A 74 F8 je loc_ret_470 ; Jump if equal
-273F:1F7C C6 06 11E1 00 mov cursor_index, CURSOR_ARROW
-273F:1F81 C6 06 11DF 00 mov cursor_centroid, 0
-273F:1F86 FF 16 075E call word ptr [show_cursor_proc]
-273F:1F8A C3 retn
- show_arrow_cursor endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:40CB, 413F, 5A6F, 5A75, 705E, 88EA, 88F0
- ; 912C, 93E9, 9401
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1F8B mouse_wait proc near
-273F:1F8B loc_471: ; xref 273F:1F93
-273F:1F8B E8 F52A call set_vga_palette ; (14B8)
-273F:1F8E F6 06 11D5 07 test byte ptr mouse_buttons, 7
-273F:1F93 75 F6 jnz loc_471 ; Mouse button being held down
-273F:1F95 C3 retn
- mouse_wait endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:40C7, 4142, 5A72, 7061, 70B0, 88ED
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:1F96 pause_for_input proc near
-273F:1F96 loc_472: ; xref 273F:1F9C
-273F:1F96 B4 06 mov ah,6
-273F:1F98 B2 FF mov dl,0FFh
-273F:1F9A CD 21 int 21h ; Read character from STDIN
-273F:1F9C 75 F8 jnz loc_472 ; key pressed
-
-273F:1F9E loc_473: ; xref 273F:1FAB
-273F:1F9E E8 F517 call set_vga_palette ; (14B8)
-273F:1FA1 E8 757C call check_keypress ; (9520)
-273F:1FA4 75 0E jnz loc_ret_474 ; Jump if not zero
-273F:1FA6 F6 06 11D5 07 test mouse_buttons, 7
-273F:1FAB 74 F1 jz loc_473 ; No buttons pressed
-273F:1FAD C6 06 11DA 00 mov mouse_buttons2, 0
-273F:1FB2 33 C0 xor ax,ax ; Zero register
-
-273F:1FB4 loc_ret_474: ; xref 273F:1FA4
-273F:1FB4 C3 retn
- pause_for_input endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1C3E
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_dialog_mouse_check proc near
-273F:1FB5 C6 06 0DB4 00 mov talk_dialog_close_flag, 0
-273F:1FBA F6 06 9837 FF test talk_dialog_active, 0FFh ; Is the dialog active?
-273F:1FBF 74 3D jz loc_475 ; Jump if zero
-273F:1FC1 F6 06 4B40 FF test data_791, 0FFh
-273F:1FC6 75 36 jnz loc_475 ; Jump if not zero
-273F:1FC8 81 3E 983F 03E8 cmp data_1090, PLAYER_HOTSPOT_ID
-273F:1FCE 75 2E jne loc_475 ; Jump if not equal
-273F:1FD0 A1 11D6 mov ax, mouse_x2
-273F:1FD3 3B 06 11C2 cmp ax, talk_dialog_left
-273F:1FD7 72 25 jb loc_475 ; Jump if below
-273F:1FD9 2B 06 11C2 sub ax, talk_dialog_left
-273F:1FDD 3B 06 11C4 cmp ax, talk_dialog_width
-273F:1FE1 73 1B jae loc_475 ; Jump if above or =
-273F:1FE3 A1 11D8 mov ax, mouse_y2
-273F:1FE6 3B 06 11C0 cmp ax, talk_dialog_top
-273F:1FEA 72 12 jb loc_475 ; Jump if below
-273F:1FEC 2B 06 11C0 sub ax, talk_dialog_top
-273F:1FF0 3B 06 11C6 cmp ax, talk_dialog_height
-273F:1FF4 73 08 jae loc_475 ; Jump if above or =
-273F:1FF6 C6 06 0DB4 01 mov talk_dialog_close_flag, 1
-273F:1FFB 33 C0 xor ax,ax ; Zero register
-273F:1FFD C3 retn
-
-273F:1FFE loc_475: ; xref 273F:1FBF, 1FC6, 1FCE, 1FD7
- ; 1FE1, 1FEA, 1FF4
-273F:1FFE B0 01 mov al,1
-273F:2000 0B C0 or ax,ax ; Zero ?
-273F:2002 C3 retn
- talk_dialog_mouse_check endp
-
-273F:2003 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00E7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2004 sub_61 proc near
-273F:2004 83 3E 9832 1F cmp room_number, ROOMNUM_TOWN_HALL
-273F:2009 74 29 je loc_ret_476 ; Jump if equal
-273F:200B 83 3E 9832 0E cmp room_number, ROOMNUM_MIDDLE_STREET
-273F:2010 74 22 je loc_ret_476 ; Jump if equal
-273F:2012 F7 06 BAA9 FFFF test script_val_80, 0FFFFh
-273F:2018 74 1A jz loc_ret_476 ; Jump if zero
-273F:201A F7 06 BA4F FFFF test script_val_29, 0FFFFh
-273F:2020 74 12 jz loc_ret_476 ; Jump if zero
-273F:2022 83 2E BA4F 01 sub script_val_29, 1
-273F:2027 75 0B jnz loc_ret_476 ; Jump if not zero
-273F:2029 BB 0CB7 mov bx, 0CB7h
-273F:202C B9 0002 mov cx,2
-273F:202F 33 D2 xor dx,dx ; Zero register
-273F:2031 E8 27FC call add_sequence_delay
-
-273F:2034 loc_ret_476: ; xref 273F:2009, 2010, 2018, 2020
- ; 2027
-273F:2034 C3 retn
- sub_61 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:2035 83 3E BA3B 03 cmp talk_record_index, 3
-273F:203A 73 1A jae loc_ret_477 ; Jump if above or =
-273F:203C 83 3E 9832 2D cmp room_number, ROOMNUM_DINING_HALL
-273F:2041 75 13 jne loc_ret_477 ; Jump if not equal
-273F:2043 F6 06 BA9B FF test byte ptr script_val_73, 0FFh
-273F:2048 75 0C jnz loc_ret_477 ; Jump if not zero
-273F:204A C7 06 BA17 03E8 mov character_hotspot, PLAYER_HOTSPOT_ID
-273F:2050 B8 1E15 mov ax,1E15h
-273F:2053 E8 1DDE call sequence_execute
-
-273F:2056 loc_ret_477: ; xref 273F:203A, 2041, 2048
-273F:2056 C3 retn
-
-273F:2057 00 db 0
-273F:2058 00 data_233 db 0 ; xref 273F:2DA2, 2DD0, 2DD5, 2E2F
- ; 2E7B, 2EB9, 2EE8, 2EED
- ; 2F4F
-273F:2059 00 data_234 db 0 ; xref 273F:2DA7, 2DE7, 2DEC, 2E3C
- ; 2E80, 2EC0, 2EFF, 2F04
- ; 2F5C
-273F:205A 00 data_235 db 0 ; xref 273F:2DAC, 2DFE, 2E03, 2E49
- ; 2E85, 2EC7, 2F16, 2F1B
- ; 2F69
-273F:205B 00 data_236 db 0 ; xref 273F:2DB1, 2E15, 2E1A, 2E56
- ; 2E8A, 2ECE, 2F2D, 2F32
- ; 2F76
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7BBA, A7AD, A82B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:205C ega_show_srceen proc near
-273F:205C 80 0E 11D0 02 or menubar_state, 2 ; (31E4:11D0=3)
-273F:2061 BA 03CE mov dx,3CEh
-273F:2064 B8 0805 mov ax,805h
-273F:2067 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2068 B8 0007 mov ax,7
-273F:206B EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:206C B0 03 mov al,3
-273F:206E EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 3, data rotate
-273F:206F B8 FF08 mov ax,0FF08h
-273F:2072 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2073 B2 C4 mov dl,0C4h
-273F:2075 A1 0DB2 mov ax, screen_start_seg2
-273F:2078 8E C0 mov es,ax
-273F:207A F6 06 4BF0 FF test byte ptr data_794,0FFh ; (31E4:4BF0=0)
-273F:207F 74 03 jz loc_478 ; Jump if zero
-273F:2081 E8 0F41 call sub_68 ; (2FC5)
-273F:2084 loc_478: ; xref 273F:207F
-273F:2084 úBB 07DC mov bx, offset display_mask
-273F:2087 03 1E 0990 add bx,data_587 ; (31E4:0990=0)
-273F:208B B9 060A mov cx,60Ah
-273F:208E úBE 0500 mov si,data_12e ; (0000:0500=0)
-273F:2091 úBF 0140 mov di,data_1449e ; (A200:0140=0)
-273F:2094 loc_479: ; xref 273F:20E2, 20F4
-273F:2094 F6 07 01 test byte ptr [bx],1
-273F:2097 74 3D jz loc_482 ; Jump if zero
-273F:2099 56 push si
-273F:209A 57 push di
-273F:209B 51 push cx
-273F:209C 80 27 FE and byte ptr [bx],0FEh
-273F:209F 1E push ds
-273F:20A0 A1 4CE4 mov ax, data_segment2
-273F:20A3 8E D8 mov ds,ax
-273F:20A5 B8 0802 mov ax,802h
-273F:20A8 B9 0004 mov cx,4
-
-273F:20AB locloop_480: ; xref 273F:20D0
-273F:20AB 51 push cx
-273F:20AC 56 push si
-273F:20AD 57 push di
-273F:20AE EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:20AF B9 0020 mov cx,20h
-
-273F:20B2 locloop_481: ; xref 273F:20C6
-273F:20B2 A4 movsb ; Mov [si] to es:[di]
-273F:20B3 83 C6 03 add si,3
-273F:20B6 A4 movsb ; Mov [si] to es:[di]
-273F:20B7 83 C6 03 add si,3
-273F:20BA A4 movsb ; Mov [si] to es:[di]
-273F:20BB 83 C6 03 add si,3
-273F:20BE A4 movsb ; Mov [si] to es:[di]
-273F:20BF 81 C6 0093 add si,93h
-273F:20C3 83 C7 24 add di,24h
-273F:20C6 E2 EA loop locloop_481 ; Loop if cx > 0
-
-273F:20C8 5F pop di
-273F:20C9 5E pop si
-273F:20CA 83 C6 01 add si,1
-273F:20CD D0 EC shr ah,1 ; Shift w/zeros fill
-273F:20CF 59 pop cx
-273F:20D0 E2 D9 loop locloop_480 ; Loop if cx > 0
-
-273F:20D2 1F pop ds
-273F:20D3 59 pop cx
-273F:20D4 5F pop di
-273F:20D5 5E pop si
-273F:20D6 loc_482: ; xref 273F:2097
-273F:20D6 83 C6 10 add si,10h
-273F:20D9 83 C7 04 add di,4
-273F:20DC 83 C3 01 add bx,1
-273F:20DF 80 E9 01 sub cl,1
-273F:20E2 75 B0 jnz loc_479 ; Jump if not zero
-273F:20E4 83 C3 08 add bx,8
-273F:20E7 81 C6 1360 add si,1360h
-273F:20EB 81 C7 04D8 add di,4D8h
-273F:20EF B1 0A mov cl,0Ah
-273F:20F1 80 ED 01 sub ch,1
-273F:20F4 75 9E jnz loc_479 ; Jump if not zero
-273F:20F6 B8 0F02 mov ax,0F02h
-273F:20F9 EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:20FA B2 CE mov dl,0CEh
-273F:20FC B8 0005 mov ax,5
-273F:20FF EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2100 B8 0F07 mov ax,0F07h
-273F:2103 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2104 B8 FF08 mov ax,0FF08h
-273F:2107 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2108 A1 0DB0 mov ax, screen_start_seg ; Swap screen segment
-273F:210B 8B 1E 0DB2 mov bx, screen_start_seg2
-273F:210F 89 1E 0DB0 mov screen_start_seg, bx
-273F:2113 A3 0DB2 mov screen_start_seg2, ax
-273F:2116 1E push ds
-273F:2117 07 pop es
-273F:2118 úBE 11E8 mov si,offset data_638 ; (31E4:11E8=0)
-273F:211B úBF 12AE mov di,offset data_642 ; (31E4:12AE=0)
-273F:211E B9 0063 mov cx,63h
-273F:2121 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:2123 C7 06 11EC 0000 mov data_640,0 ; (31E4:11EC=0)
-273F:2129 E8 0987 call ega_cursor
-273F:212C A0 0DB1 mov al, [screen_start_seg+1]
-273F:212F D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2131 24 01 and al,1
-273F:2133 B4 05 mov ah,5
-273F:2135 CD 10 int 10h ; Video display ah=functn 05h
- ; set display page al
-273F:2137 B8 0040 mov ax,40h
-273F:213A 8E C0 mov es,ax
-273F:213C 26: 8B 16 0063 mov dx,es:video_port ; (0040:0063=3D4h)
-273F:2141 80 C2 06 add dl,6
-273F:2144 loc_483: ; xref 273F:2147
-273F:2144 EC in al,dx ; port 3DAh, CGA/EGA vid status
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 85
-
-273F:2145 A8 08 test al,8
-273F:2147 74 FB jz loc_483 ; Jump if zero
-273F:2149 úBE 12AE mov si,offset data_642 ; (31E4:12AE=0)
-273F:214C A1 0DB2 mov ax, screen_start_seg2
-273F:214F 8E C0 mov es,ax
-273F:2151 E8 0AD1 call sub_67 ; (2C25)
-273F:2154 80 36 0991 01 xor byte ptr data_587+1,1 ; (31E4:0991=0)
-273F:2159 80 26 11D0 FD and menubar_state, 0FDh ; (31E4:11D0=3)
-273F:215E C3 retn
- ega_show_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [fade_out_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_empty_palette proc near
-
-273F:215F 80 0E 073C 20 or byte ptr ds:[73Ch],20h ; (273F:073C=17h) ' '
-273F:2164 80 26 11D0 CF and menubar_state, 0CFh ; (273F:11D0=56h)
-273F:2169 B8 1002 mov ax,1002h
-273F:216C 1E push ds
-273F:216D 07 pop es
-273F:216E úBA 0DB5 mov dx,0DB5h ; (273F:0DB5=0C7h)
-273F:2171 CD 10 int 10h ; Video display ah=functn 10h
- ; set palette regs from es:dx
-273F:2173 C3 retn
-
- ega_empty_palette endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [fade_in_proc]
- ; For EGA cards, don't do a fade-in.. just set the whole palette
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_fade_in proc near
-273F:2174 80 26 073C DF and byte ptr ds:[73Ch],0DFh ; (273F:073C=17h)
-273F:2179 B8 1002 mov ax,1002h
-273F:217C 1E push ds
-273F:217D 07 pop es
-273F:217E úBA 1457 mov dx,offset unprocessed_vga_palette
-273F:2181 CD 10 int 10h ; Video display ah=functn 10h
- ; set palette regs from es:dx
-273F:2183 C3 retn
- ega_fade_in endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-
-273F:2184 1E push ds
-273F:2185 57 push di
-273F:2186 56 push si
-273F:2187 98 cbw ; Convrt byte to word
-273F:2188 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:218A D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:218C D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:218E 8B F0 mov si,ax
-273F:2190 8B 16 4CF0 mov dx, font2_segment
-273F:2194 8E DA mov ds,dx
-273F:2196 AC lodsb ; String [si] to al
-273F:2197 50 push ax
-273F:2198 B5 07 mov ch,7
-273F:219A loc_484: ; xref 273F:2202
-273F:219A AC lodsb ; String [si] to al
-273F:219B 8A E0 mov ah,al
-273F:219D 32 C0 xor al,al ; Zero register
-273F:219F D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:21A1 8B D0 mov dx,ax
-273F:21A3 F7 D2 not dx
-273F:21A5 8A DF mov bl,bh
-273F:21A7 D0 EB shr bl,1 ; Shift w/zeros fill
-273F:21A9 73 09 jnc loc_485 ; Jump if carry=0
-273F:21AB 26: 08 25 or es:[di],ah
-273F:21AE 26: 08 45 04 or es:[di+4],al
-273F:21B2 EB 07 jmp short loc_486 ; (21BB)
-
-273F:21B4 loc_485: ; xref 273F:21A9
-273F:21B4 26: 20 35 and es:[di],dh
-273F:21B7 26: 20 55 04 and es:[di+4],dl
-273F:21BB loc_486: ; xref 273F:21B2
-273F:21BB D0 EB shr bl,1 ; Shift w/zeros fill
-273F:21BD 73 0A jnc loc_487 ; Jump if carry=0
-273F:21BF 26: 08 65 01 or es:[di+1],ah
-273F:21C3 26: 08 45 05 or es:[di+5],al
-273F:21C7 EB 08 jmp short loc_488 ; (21D1)
-273F:21C9 loc_487: ; xref 273F:21BD
-273F:21C9 26: 20 75 01 and es:[di+1],dh
-273F:21CD 26: 20 55 05 and es:[di+5],dl
-273F:21D1 loc_488: ; xref 273F:21C7
-273F:21D1 D0 EB shr bl,1 ; Shift w/zeros fill
-273F:21D3 73 0A jnc loc_489 ; Jump if carry=0
-273F:21D5 26: 08 65 02 or es:[di+2],ah
-273F:21D9 26: 08 45 06 or es:[di+6],al
-273F:21DD EB 08 jmp short loc_490 ; (21E7)
-273F:21DF loc_489: ; xref 273F:21D3
-273F:21DF 26: 20 75 02 and es:[di+2],dh
-273F:21E3 26: 20 55 06 and es:[di+6],dl
-273F:21E7 loc_490: ; xref 273F:21DD
-273F:21E7 D0 EB shr bl,1 ; Shift w/zeros fill
-273F:21E9 73 0A jnc loc_491 ; Jump if carry=0
-273F:21EB 26: 08 65 03 or es:[di+3],ah
-273F:21EF 26: 08 45 07 or es:[di+7],al
-273F:21F3 EB 08 jmp short loc_492 ; (21FD)
-273F:21F5 loc_491: ; xref 273F:21E9
-273F:21F5 26: 20 75 03 and es:[di+3],dh
-273F:21F9 26: 20 55 07 and es:[di+7],dl
-273F:21FD loc_492: ; xref 273F:21F3
-273F:21FD 03 FD add di,bp
-273F:21FF 80 ED 01 sub ch,1
-273F:2202 75 96 jnz loc_484 ; Jump if not zero
-273F:2204 58 pop ax
-273F:2205 5E pop si
-273F:2206 5F pop di
-273F:2207 1F pop ds
-273F:2208 02 C8 add cl,al
-273F:220A 8A C1 mov al,cl
-273F:220C 80 E1 07 and cl,7
-273F:220F 25 00F8 and ax,0F8h
-273F:2212 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2214 03 F8 add di,ax
-273F:2216 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_talk_dialog proc near
-273F:2217 1E push ds
-273F:2218 A1 11C0 mov ax, talk_dialog_top
-273F:221B 50 push ax
-273F:221C 05 0008 add ax,8
-273F:221F 8B D0 mov dx,ax
-273F:2221 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2223 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2225 03 C2 add ax,dx
-273F:2227 B1 05 mov cl,5
-273F:2229 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:222B 8B F8 mov di,ax
-273F:222D A1 11C2 mov ax, talk_dialog_left
-273F:2230 24 F8 and al,0F8h
-273F:2232 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2234 03 F8 add di,ax
-273F:2236 B8 0007 mov ax,7
-273F:2239 F7 26 B9FD mul data_1122 ; dx:ax = data * ax
-273F:223D 05 0014 add ax,14h
-273F:2240 8B D0 mov dx,ax
-273F:2242 A3 11C6 mov talk_dialog_height, ax
-273F:2245 A1 4CE4 mov ax, data_segment2
-273F:2248 8E C0 mov es,ax
-273F:224A A1 4CE6 mov ax, talk_dialog_buffer
-273F:224D 8E D8 mov ds,ax
-273F:224F úBE 0000 mov si,data_69e ; (0874:0000=0C5h)
-273F:2252 loc_493: ; xref 273F:225D
-273F:2252 B9 0020 mov cx,20h
-273F:2255 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:2257 83 C7 60 add di,60h
-273F:225A 80 EA 01 sub dl,1
-273F:225D 75 F3 jnz loc_493 ; Jump if not zero
-273F:225F 5B pop bx
-273F:2260 1F pop ds
-273F:2261 8B 16 11C6 mov dx, talk_dialog_height
-273F:2265 A1 11C2 mov ax, talk_dialog_left
-273F:2268 BD 0080 mov bp,80h
-273F:226B 89 2E 11C4 mov talk_dialog_width, bp
-273F:226F B9 0001 mov cx,1
-273F:2272 E9 E91A jmp loc_93 ; (0B8F)
- ega_talk_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_draw_talk_dialog proc near
-273F:2275 B8 0007 mov ax,7
-273F:2278 F7 E5 mul bp ; dx:ax = reg * ax
-273F:227A 05 000E add ax,0Eh
-273F:227D A3 11C6 mov talk_dialog_height, ax
-273F:2280 8B E8 mov bp,ax
-273F:2282 C7 06 11C4 0080 mov talk_dialog_width, 80h
-273F:2288 1E push ds
-273F:2289 55 push bp
-273F:228A B8 44E4 mov ax, ega_talk_frame_seg
-273F:228D 8E D8 mov ds,ax
-273F:228F 33 F6 xor si,si ; Zero register
-273F:2291 BB 000E mov bx,0Eh
-273F:2294 BA 0003 mov dx,3
-273F:2297 loc_494: ; xref 273F:22A0
-273F:2297 E8 01B9 call sub_63 ; (2453)
-273F:229A 83 EF 60 sub di,60h
-273F:229D 83 EA 01 sub dx,1
-273F:22A0 75 F5 jnz loc_494 ; Jump if not zero
-273F:22A2 5A pop dx
-273F:22A3 loc_495: ; xref 273F:22AF
-273F:22A3 E8 01AD call sub_63 ; (2453)
-273F:22A6 83 EF 60 sub di,60h
-273F:22A9 83 EE 0C sub si,0Ch
-273F:22AC 83 EA 01 sub dx,1
-273F:22AF 75 F2 jnz loc_495 ; Jump if not zero
-273F:22B1 BA 0003 mov dx,3
-273F:22B4 83 C6 0C add si,0Ch
-273F:22B7 loc_496: ; xref 273F:22C0
-273F:22B7 E8 0199 call sub_63 ; (2453)
-273F:22BA 83 EF 60 sub di,60h
-273F:22BD 83 EA 01 sub dx,1
-273F:22C0 75 F5 jnz loc_496 ; Jump if not zero
-273F:22C2 1F pop ds
-273F:22C3 C3 retn
- ega_draw_talk_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_menu_items proc near
-
-273F:22C4 BA 03CE mov dx,3CEh
-273F:22C7 B8 0805 mov ax,805h
-273F:22CA EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:22CB B8 0007 mov ax,7
-273F:22CE EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:22CF B0 03 mov al,3
-273F:22D1 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 3, data rotate
-273F:22D2 B8 FF08 mov ax,0FF08h
-273F:22D5 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:22D6 B2 C4 mov dl,0C4h
-273F:22D8 55 push bp
-273F:22D9 1E push ds
-273F:22DA 8E DD mov ds,bp
-273F:22DC A1 0DB2 mov ax,ds:data_25e ; (0000:0DB2=8340h)
-273F:22DF 1F pop ds
-273F:22E0 8E C0 mov es,ax
-273F:22E2 úBF 08C1 mov di,data_1442e ; (8340:08C1=0)
-273F:22E5 8B 36 335A mov si,word ptr ds:[335Ah] ; (273F:335A=0ACA4h)
-273F:22E9 8A 1E 334E mov bl,byte ptr ds:[334Eh] ; (273F:334E=0E4h)
-273F:22ED 32 FF xor bh,bh ; Zero register
-273F:22EF 8B EB mov bp,bx
-273F:22F1 1E push ds
- assume ds:seg_code
-273F:22F2 A1 3376 mov ax,data_265 ; (273F:3376=0F632h)
-273F:22F5 8E D8 mov ds,ax
-273F:22F7 B8 0802 mov ax,802h
-273F:22FA B9 0004 mov cx,4
-
-273F:22FD locloop_497: ; xref 273F:2323
-273F:22FD 51 push cx
-273F:22FE 56 push si
-273F:22FF 57 push di
-273F:2300 EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:2301 B9 0048 mov cx,48h
-
-273F:2304 locloop_498: ; xref 273F:2319
-273F:2304 51 push cx
-273F:2305 56 push si
-273F:2306 57 push di
-273F:2307 8B CD mov cx,bp
-
-273F:2309 locloop_499: ; xref 273F:230D
-273F:2309 A4 movsb ; Mov [si] to es:[di]
-273F:230A 83 C6 03 add si,3
-273F:230D E2 FA loop locloop_499 ; Loop if cx > 0
-
-273F:230F 5F pop di
-273F:2310 5E pop si
-273F:2311 59 pop cx
-273F:2312 83 C7 28 add di,28h
-273F:2315 81 C6 00A0 add si,0A0h
-273F:2319 E2 E9 loop locloop_498 ; Loop if cx > 0
-
-273F:231B 5F pop di
-273F:231C 5E pop si
-273F:231D 83 C6 01 add si,1
-273F:2320 D0 EC shr ah,1 ; Shift w/zeros fill
-273F:2322 59 pop cx
-273F:2323 E2 D8 loop locloop_497 ; Loop if cx > 0
-
-273F:2325 1F pop ds
-273F:2326 5D pop bp
-273F:2327 B8 0F02 mov ax,0F02h
-273F:232A EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:232B B2 CE mov dl,0CEh
-273F:232D B8 0005 mov ax,5
-273F:2330 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2331 B8 0F07 mov ax,0F07h
-273F:2334 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2335 B8 FF08 mov ax,0FF08h
-273F:2338 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2339 1E push ds
-273F:233A 55 push bp
-273F:233B 8E DD mov ds,bp
-273F:233D A1 0DB0 mov ax, screen_start_seg
-273F:2340 8B 1E 0DB2 mov bx, screen_start_seg2
-273F:2344 89 1E 0DB0 mov screen_start_seg, bx
-273F:2348 A3 0DB2 mov screen_start_seg2, ax
-273F:234B A0 0DB1 mov al, [screen_start_seg+1]
-273F:234E D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2350 24 01 and al,1
-273F:2352 B4 05 mov ah,5
-273F:2354 CD 10 int 10h ; Video display ah=functn 05h
- ; set display page al
-273F:2356 B8 0040 mov ax,40h
-273F:2359 8E C0 mov es,ax
-273F:235B 26: 8B 16 0063 mov dx,es:video_port ; (0040:0063=3D4h)
-273F:2360 80 C2 06 add dl,6
-273F:2363 loc_500: ; xref 273F:2366
-273F:2363 EC in al,dx ; port 3DAh, CGA/EGA vid status
-273F:2364 A8 08 test al,8
-273F:2366 74 FB jz loc_500 ; Jump if zero
-273F:2368 80 36 0991 01 xor byte ptr ds:data_22e,1 ; (0000:0991=8Eh)
-273F:236D 5D pop bp
-273F:236E 1F pop ds
-273F:236F C3 retn
-
- ega_menu_items endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [fade_out_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_draw_dialog proc near
-
-273F:2370 32 E4 xor ah,ah ; Zero register
-273F:2372 32 FF xor bh,bh ; Zero register
-273F:2374 32 ED xor ch,ch ; Zero register
-273F:2376 32 F6 xor dh,dh ; Zero register
-273F:2378 52 push dx
-273F:2379 51 push cx
-273F:237A 53 push bx
-273F:237B 50 push ax
-273F:237C 52 push dx
-273F:237D 93 xchg bx,ax
-273F:237E BA 0500 mov dx,500h
-273F:2381 F7 E2 mul dx ; dx:ax = reg * ax
-273F:2383 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:2385 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:2387 03 C3 add ax,bx
-273F:2389 8B F8 mov di,ax
-273F:238B 5A pop dx
-273F:238C 83 C2 01 add dx,1
-273F:238F 8B C2 mov ax,dx
-273F:2391 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2393 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2395 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2397 F7 C5 FFFF test bp,0FFFFh
-273F:239B 75 02 jnz loc_501 ; Jump if not zero
-273F:239D 2B D0 sub dx,ax
-273F:239F loc_501: ; xref 273F:239B
-273F:239F 83 C2 01 add dx,1
-273F:23A2 8B D9 mov bx,cx
-273F:23A4 A1 4CE4 mov ax, data_segment2
-273F:23A7 8E C0 mov es,ax
-273F:23A9 1E push ds
-273F:23AA B8 44E4 mov ax, ega_talk_frame_seg
-273F:23AD 8E D8 mov ds,ax
-273F:23AF 33 F6 xor si,si ; Zero register
-273F:23B1 52 push dx
-273F:23B2 BA 0003 mov dx,3
-273F:23B5 loc_502: ; xref 273F:23BB
-273F:23B5 E8 009B call sub_63 ; (2453)
-273F:23B8 83 EA 01 sub dx,1
-273F:23BB 75 F8 jnz loc_502 ; Jump if not zero
-273F:23BD 5A pop dx
-273F:23BE loc_503: ; xref 273F:23C7
-273F:23BE E8 0092 call sub_63 ; (2453)
-273F:23C1 83 EE 0C sub si,0Ch
-273F:23C4 83 EA 01 sub dx,1
-273F:23C7 75 F5 jnz loc_503 ; Jump if not zero
-273F:23C9 83 C6 0C add si,0Ch
-273F:23CC BA 0003 mov dx,3
-273F:23CF loc_504: ; xref 273F:23D5
-273F:23CF E8 0081 call sub_63 ; (2453)
-273F:23D2 83 EA 01 sub dx,1
-273F:23D5 75 F8 jnz loc_504 ; Jump if not zero
-273F:23D7 1F pop ds
-273F:23D8 58 pop ax
-273F:23D9 5B pop bx
-273F:23DA 5D pop bp
-273F:23DB 5A pop dx
-273F:23DC 83 EB 01 sub bx,1
-273F:23DF 83 C2 02 add dx,2
-273F:23E2 83 C5 02 add bp,2
-273F:23E5 B1 81 mov cl,81h
-273F:23E7 E9 E799 jmp loc_92
-
- ega_draw_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:23EA 32 FF xor bh,bh ; Zero register
-273F:23EC 32 F6 xor dh,dh ; Zero register
-273F:23EE 53 push bx
-273F:23EF B0 0B mov al,0Bh
-273F:23F1 2A C2 sub al,dl
-273F:23F3 52 push dx
-273F:23F4 B9 0500 mov cx,500h
-273F:23F7 F7 E1 mul cx ; dx:ax = reg * ax
-273F:23F9 05 00A0 add ax,0A0h
-273F:23FC 5A pop dx
-273F:23FD 8B F8 mov di,ax
-273F:23FF D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2401 83 C2 01 add dx,1
-273F:2404 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2406 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:2408 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:240A 83 EA 08 sub dx,8
-273F:240D A1 4CE4 mov ax, data_segment2
-273F:2410 8E C0 mov es,ax
-273F:2412 1E push ds
-273F:2413 B8 44E4 mov ax, ega_talk_frame_seg
-273F:2416 8E D8 mov ds,ax
-273F:2418 33 F6 xor si,si ; Zero register
-273F:241A 52 push dx
-273F:241B BA 0003 mov dx,3
-273F:241E loc_505: ; xref 273F:2424
-273F:241E E8 0032 call sub_63 ; (2453)
-273F:2421 83 EA 01 sub dx,1
-273F:2424 75 F8 jnz loc_505 ; Jump if not zero
-273F:2426 5A pop dx
-273F:2427 loc_506: ; xref 273F:2430
-273F:2427 E8 0029 call sub_63 ; (2453)
-273F:242A 83 EE 0C sub si,0Ch
-273F:242D 83 EA 01 sub dx,1
-273F:2430 75 F5 jnz loc_506 ; Jump if not zero
-273F:2432 83 C6 0C add si,0Ch
-273F:2435 BA 0003 mov dx,3
-273F:2438 loc_507: ; xref 273F:243E
-273F:2438 E8 0018 call sub_63 ; (2453)
-273F:243B 83 EA 01 sub dx,1
-273F:243E 75 F8 jnz loc_507 ; Jump if not zero
-273F:2440 1F pop ds
-273F:2441 B8 0001 mov ax,1
-273F:2444 BB 0007 mov bx,7
-273F:2447 5D pop bp
-273F:2448 83 C5 02 add bp,2
-273F:244B BA 0009 mov dx,9
-273F:244E B1 81 mov cl,81h
-273F:2450 E9 E730 jmp loc_92 ; (0B83)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2297, 22A3, 22B7, 23B5, 23BE, 23CF, 241E
- ; 2427, 2438, 3039, 303C, 303F, 3045, 3048
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2453 sub_63 proc near
-273F:2453 57 push di
-273F:2454 A5 movsw ; Mov [si] to es:[di]
-273F:2455 A5 movsw ; Mov [si] to es:[di]
-273F:2456 AD lodsw ; String [si] to ax
-273F:2457 8B E8 mov bp,ax
-273F:2459 AD lodsw ; String [si] to ax
-273F:245A 8B CB mov cx,bx
-
-273F:245C locloop_508: ; xref 273F:2460
-273F:245C 95 xchg bp,ax
-273F:245D AB stosw ; Store ax to es:[di]
-273F:245E 95 xchg bp,ax
-273F:245F AB stosw ; Store ax to es:[di]
-273F:2460 E2 FA loop locloop_508 ; Loop if cx > 0
-
-273F:2462 A5 movsw ; Mov [si] to es:[di]
-273F:2463 A5 movsw ; Mov [si] to es:[di]
-273F:2464 5F pop di
-273F:2465 81 C7 00A0 add di,0A0h
-273F:2469 C3 retn
- sub_63 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0C6B, 7BB1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:246A ega_decode_entry proc near
-273F:246A 1E push ds
-273F:246B 8E DA mov ds,dx
-273F:246D úBE 0086 mov si,data_1435e ; (45F6:0086=15h)
-273F:2470 33 FF xor di,di ; Zero register
-273F:2472 BD 0020 mov bp,20h
-273F:2475 8B 14 mov dx,[si]
-273F:2477 86 F2 xchg dh,dl
-273F:2479 83 C6 02 add si,2
-273F:247C B9 0008 mov cx,8
-273F:247F 33 DB xor bx,bx ; Zero register
-273F:2481 loc_509: ; xref 273F:24C9, 24D3
-273F:2481 8A C6 mov al,dh
-273F:2483 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2485 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2487 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2489 88 01 mov [bx+di],al
-273F:248B D1 D2 rcl dx,1 ; Rotate thru carry
-273F:248D E2 07 loop locloop_510 ; Loop if cx > 0
-
-273F:248F 86 D0 xchg dl,al
-273F:2491 AC lodsb ; String [si] to al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 93
-
-273F:2492 86 D0 xchg dl,al
-273F:2494 B1 08 mov cl,8
-
-273F:2496 locloop_510: ; xref 273F:248D
-273F:2496 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2498 E2 07 loop locloop_511 ; Loop if cx > 0
-
-273F:249A 86 D0 xchg dl,al
-273F:249C AC lodsb ; String [si] to al
-273F:249D 86 D0 xchg dl,al
-273F:249F B1 08 mov cl,8
-
-273F:24A1 locloop_511: ; xref 273F:2498
-273F:24A1 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24A3 E2 07 loop locloop_512 ; Loop if cx > 0
-
-273F:24A5 86 D0 xchg dl,al
-273F:24A7 AC lodsb ; String [si] to al
-273F:24A8 86 D0 xchg dl,al
-273F:24AA B1 08 mov cl,8
-
-273F:24AC locloop_512: ; xref 273F:24A3
-273F:24AC D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24AE E2 07 loop locloop_513 ; Loop if cx > 0
-
-273F:24B0 86 D0 xchg dl,al
-273F:24B2 AC lodsb ; String [si] to al
-273F:24B3 86 D0 xchg dl,al
-273F:24B5 B1 08 mov cl,8
-
-273F:24B7 locloop_513: ; xref 273F:24AE
-273F:24B7 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24B9 E2 07 loop locloop_514 ; Loop if cx > 0
-
-273F:24BB 86 D0 xchg dl,al
-273F:24BD AC lodsb ; String [si] to al
-273F:24BE 86 D0 xchg dl,al
-273F:24C0 B1 08 mov cl,8
-
-273F:24C2 locloop_514: ; xref 273F:24B9
-273F:24C2 83 C3 20 add bx,20h
-273F:24C5 ú81 FB 0080 cmp bx,data_1434e ; (45F6:0080=0)
-273F:24C9 75 B6 jne loc_509 ; Jump if not equal
-273F:24CB 33 DB xor bx,bx ; Zero register
-273F:24CD 83 C7 01 add di,1
-273F:24D0 83 ED 01 sub bp,1
-273F:24D3 75 AC jnz loc_509 ; Jump if not zero
-273F:24D5 90 nop
-273F:24D6 33 FF xor di,di ; Zero register
-273F:24D8 8A C6 mov al,dh
-273F:24DA D0 E8 shr al,1 ; Shift w/zeros fill
-273F:24DC D0 E8 shr al,1 ; Shift w/zeros fill
-273F:24DE D0 E8 shr al,1 ; Shift w/zeros fill
-273F:24E0 AA stosb ; Store al to es:[di]
-273F:24E1 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24E3 E2 07 loop locloop_515 ; Loop if cx > 0
-
-273F:24E5 86 D0 xchg dl,al
-273F:24E7 AC lodsb ; String [si] to al
-273F:24E8 86 D0 xchg dl,al
-273F:24EA B1 08 mov cl,8
-
-273F:24EC locloop_515: ; xref 273F:24E3
-273F:24EC D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24EE E2 07 loop locloop_516 ; Loop if cx > 0
-
-273F:24F0 86 D0 xchg dl,al
-273F:24F2 AC lodsb ; String [si] to al
-273F:24F3 86 D0 xchg dl,al
-273F:24F5 B1 08 mov cl,8
-
-273F:24F7 locloop_516: ; xref 273F:24EE
-273F:24F7 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:24F9 E2 07 loop locloop_517 ; Loop if cx > 0
-
-273F:24FB 86 D0 xchg dl,al
-273F:24FD AC lodsb ; String [si] to al
-273F:24FE 86 D0 xchg dl,al
-273F:2500 B1 08 mov cl,8
-
-273F:2502 locloop_517: ; xref 273F:24F9
-273F:2502 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2504 E2 07 loop locloop_518 ; Loop if cx > 0
-
-273F:2506 86 D0 xchg dl,al
-273F:2508 AC lodsb ; String [si] to al
-273F:2509 86 D0 xchg dl,al
-273F:250B B1 08 mov cl,8
-
-273F:250D locloop_518: ; xref 273F:2504
-273F:250D D1 D2 rcl dx,1 ; Rotate thru carry
-273F:250F E2 07 loop locloop_519 ; Loop if cx > 0
-
-273F:2511 86 D0 xchg dl,al
-273F:2513 AC lodsb ; String [si] to al
-273F:2514 86 D0 xchg dl,al
-273F:2516 B1 08 mov cl,8
-
-273F:2518 locloop_519: ; xref 273F:250F
-273F:2518 8A D8 mov bl,al
-273F:251A 32 FF xor bh,bh ; Zero register
-273F:251C loc_520: ; xref 273F:252E, 2550, 2558, 256D
- ; 25C4, 2681
-273F:251C úD1 D2 rcl dx,1 ; Rotate thru carry
-273F:251E E2 07 loop locloop_521 ; Loop if cx > 0
-
-273F:2520 86 D0 xchg dl,al
-273F:2522 AC lodsb ; String [si] to al
-273F:2523 86 D0 xchg dl,al
-273F:2525 B1 08 mov cl,8
-
-273F:2527 locloop_521: ; xref 273F:251E
-273F:2527 72 07 jc loc_522 ; Jump if carry Set
-273F:2529 8A 1F mov bl,[bx]
-273F:252B 8A C3 mov al,bl
-273F:252D AA stosb ; Store al to es:[di]
-273F:252E EB EC jmp short loc_520 ; (251C)
-273F:2530 loc_522: ; xref 273F:2527
-273F:2530 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2532 E2 07 loop locloop_523 ; Loop if cx > 0
-
-273F:2534 86 D0 xchg dl,al
-273F:2536 AC lodsb ; String [si] to al
-273F:2537 86 D0 xchg dl,al
-273F:2539 B1 08 mov cl,8
-
-273F:253B locloop_523: ; xref 273F:2532
-273F:253B 72 1D jc loc_526 ; Jump if carry Set
-273F:253D D1 D2 rcl dx,1 ; Rotate thru carry
-273F:253F E2 07 loop locloop_524 ; Loop if cx > 0
-
-273F:2541 86 D0 xchg dl,al
-273F:2543 AC lodsb ; String [si] to al
-273F:2544 86 D0 xchg dl,al
-273F:2546 B1 08 mov cl,8
-
-273F:2548 locloop_524: ; xref 273F:253F
-273F:2548 72 08 jc loc_525 ; Jump if carry Set
-273F:254A 8A 5F 20 mov bl,[bx+20h]
-273F:254D 8A C3 mov al,bl
-273F:254F AA stosb ; Store al to es:[di]
-273F:2550 EB CA jmp short loc_520 ; (251C)
-273F:2552 loc_525: ; xref 273F:2548
-273F:2552 8A 5F 40 mov bl,[bx+40h]
-273F:2555 8A C3 mov al,bl
-273F:2557 AA stosb ; Store al to es:[di]
-273F:2558 EB C2 jmp short loc_520 ; (251C)
-273F:255A loc_526: ; xref 273F:253B
-273F:255A D1 D2 rcl dx,1 ; Rotate thru carry
-273F:255C E2 07 loop locloop_527 ; Loop if cx > 0
-
-273F:255E 86 D0 xchg dl,al
-273F:2560 AC lodsb ; String [si] to al
-273F:2561 86 D0 xchg dl,al
-273F:2563 B1 08 mov cl,8
-
-273F:2565 locloop_527: ; xref 273F:255C
-273F:2565 72 08 jc loc_528 ; Jump if carry Set
-273F:2567 8A 5F 60 mov bl,[bx+60h]
-273F:256A 8A C3 mov al,bl
-273F:256C AA stosb ; Store al to es:[di]
-273F:256D EB AD jmp short loc_520 ; (251C)
-273F:256F loc_528: ; xref 273F:2565
-273F:256F 8A C6 mov al,dh
-273F:2571 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2573 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2575 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2577 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2579 E2 07 loop locloop_529 ; Loop if cx > 0
-
-273F:257B 86 D0 xchg dl,al
-273F:257D AC lodsb ; String [si] to al
-273F:257E 86 D0 xchg dl,al
-273F:2580 B1 08 mov cl,8
-
-273F:2582 locloop_529: ; xref 273F:2579
-273F:2582 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2584 E2 07 loop locloop_530 ; Loop if cx > 0
-
-273F:2586 86 D0 xchg dl,al
-273F:2588 AC lodsb ; String [si] to al
-273F:2589 86 D0 xchg dl,al
-273F:258B B1 08 mov cl,8
-
-273F:258D locloop_530: ; xref 273F:2584
-273F:258D D1 D2 rcl dx,1 ; Rotate thru carry
-273F:258F E2 07 loop locloop_531 ; Loop if cx > 0
-
-273F:2591 86 D0 xchg dl,al
-273F:2593 AC lodsb ; String [si] to al
-273F:2594 86 D0 xchg dl,al
-273F:2596 B1 08 mov cl,8
-
-273F:2598 locloop_531: ; xref 273F:258F
-273F:2598 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:259A E2 07 loop locloop_532 ; Loop if cx > 0
-
-273F:259C 86 D0 xchg dl,al
-273F:259E AC lodsb ; String [si] to al
-273F:259F 86 D0 xchg dl,al
-273F:25A1 B1 08 mov cl,8
-
-273F:25A3 locloop_532: ; xref 273F:259A
-273F:25A3 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:25A5 E2 07 loop locloop_533 ; Loop if cx > 0
-
-273F:25A7 86 D0 xchg dl,al
-273F:25A9 AC lodsb ; String [si] to al
-273F:25AA 86 D0 xchg dl,al
-273F:25AC B1 08 mov cl,8
-
-273F:25AE locloop_533: ; xref 273F:25A5
-273F:25AE 3A 07 cmp al,[bx]
-273F:25B0 74 15 je loc_534 ; Jump if equal
-273F:25B2 3A 47 20 cmp al,[bx+20h]
-273F:25B5 74 27 je loc_536 ; Jump if equal
-273F:25B7 3A 47 40 cmp al,[bx+40h]
-273F:25BA 74 2D je loc_537 ; Jump if equal
-273F:25BC 3A 47 60 cmp al,[bx+60h]
-273F:25BF 74 77 je loc_544 ; Jump if equal
-273F:25C1 8A D8 mov bl,al
-273F:25C3 AA stosb ; Store al to es:[di]
-273F:25C4 E9 FF55 jmp loc_520 ; (251C)
-273F:25C7 loc_534: ; xref 273F:25B0
-273F:25C7 51 push cx
-273F:25C8 E8 4F56 call sub_187 ; (7521)
-273F:25CB 8A E0 mov ah,al
-273F:25CD E8 4F51 call sub_187 ; (7521)
-273F:25D0 8A EC mov ch,ah
-273F:25D2 8A C8 mov cl,al
-273F:25D4 0B C9 or cx,cx ; Zero ?
-273F:25D6 74 03 jz loc_535 ; Jump if zero
-273F:25D8 E9 00A1 jmp loc_550 ; (267C)
-273F:25DB loc_535: ; xref 273F:25D6
-273F:25DB E9 00A6 jmp loc_551 ; (2684)
-273F:25DE loc_536: ; xref 273F:25B5
-273F:25DE 51 push cx
-273F:25DF E8 4F3F call sub_187 ; (7521)
-273F:25E2 8A C8 mov cl,al
-273F:25E4 32 ED xor ch,ch ; Zero register
-273F:25E6 E9 0093 jmp loc_550 ; (267C)
-273F:25E9 loc_537: ; xref 273F:25BA
-273F:25E9 8A C6 mov al,dh
-273F:25EB D0 E8 shr al,1 ; Shift w/zeros fill
-273F:25ED D0 E8 shr al,1 ; Shift w/zeros fill
-273F:25EF D1 D2 rcl dx,1 ; Rotate thru carry
-273F:25F1 E2 07 loop locloop_538 ; Loop if cx > 0
-
-273F:25F3 86 D0 xchg dl,al
-273F:25F5 AC lodsb ; String [si] to al
-273F:25F6 86 D0 xchg dl,al
-273F:25F8 B1 08 mov cl,8
-
-273F:25FA locloop_538: ; xref 273F:25F1
-273F:25FA D1 D2 rcl dx,1 ; Rotate thru carry
-273F:25FC E2 07 loop locloop_539 ; Loop if cx > 0
-
-273F:25FE 86 D0 xchg dl,al
-273F:2600 AC lodsb ; String [si] to al
-273F:2601 86 D0 xchg dl,al
-273F:2603 B1 08 mov cl,8
-
-273F:2605 locloop_539: ; xref 273F:25FC
-273F:2605 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2607 E2 07 loop locloop_540 ; Loop if cx > 0
-
-273F:2609 86 D0 xchg dl,al
-273F:260B AC lodsb ; String [si] to al
-273F:260C 86 D0 xchg dl,al
-273F:260E B1 08 mov cl,8
-
-273F:2610 locloop_540: ; xref 273F:2607
-273F:2610 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2612 E2 07 loop locloop_541 ; Loop if cx > 0
-
-273F:2614 86 D0 xchg dl,al
-273F:2616 AC lodsb ; String [si] to al
-273F:2617 86 D0 xchg dl,al
-273F:2619 B1 08 mov cl,8
-
-273F:261B locloop_541: ; xref 273F:2612
-273F:261B D1 D2 rcl dx,1 ; Rotate thru carry
-273F:261D E2 07 loop locloop_542 ; Loop if cx > 0
-
-273F:261F 86 D0 xchg dl,al
-273F:2621 AC lodsb ; String [si] to al
-273F:2622 86 D0 xchg dl,al
-273F:2624 B1 08 mov cl,8
-
-273F:2626 locloop_542: ; xref 273F:261D
-273F:2626 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2628 E2 07 loop locloop_543 ; Loop if cx > 0
-
-273F:262A 86 D0 xchg dl,al
-273F:262C AC lodsb ; String [si] to al
-273F:262D 86 D0 xchg dl,al
-273F:262F B1 08 mov cl,8
-
-273F:2631 locloop_543: ; xref 273F:2628
-273F:2631 51 push cx
-273F:2632 8A C8 mov cl,al
-273F:2634 32 ED xor ch,ch ; Zero register
-273F:2636 EB 44 jmp short loc_550 ; (267C)
-273F:2638 loc_544: ; xref 273F:25BF
-273F:2638 8A C6 mov al,dh
-273F:263A D0 E8 shr al,1 ; Shift w/zeros fill
-273F:263C D0 E8 shr al,1 ; Shift w/zeros fill
-273F:263E D0 E8 shr al,1 ; Shift w/zeros fill
-273F:2640 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2642 E2 07 loop locloop_545 ; Loop if cx > 0
-
-273F:2644 86 D0 xchg dl,al
-273F:2646 AC lodsb ; String [si] to al
-273F:2647 86 D0 xchg dl,al
-273F:2649 B1 08 mov cl,8
-
-273F:264B locloop_545: ; xref 273F:2642
-273F:264B D1 D2 rcl dx,1 ; Rotate thru carry
-273F:264D E2 07 loop locloop_546 ; Loop if cx > 0
-
-273F:264F 86 D0 xchg dl,al
-273F:2651 AC lodsb ; String [si] to al
-273F:2652 86 D0 xchg dl,al
-273F:2654 B1 08 mov cl,8
-
-273F:2656 locloop_546: ; xref 273F:264D
-273F:2656 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2658 E2 07 loop locloop_547 ; Loop if cx > 0
-
-273F:265A 86 D0 xchg dl,al
-273F:265C AC lodsb ; String [si] to al
-273F:265D 86 D0 xchg dl,al
-273F:265F B1 08 mov cl,8
-
-273F:2661 locloop_547: ; xref 273F:2658
-273F:2661 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:2663 E2 07 loop locloop_548 ; Loop if cx > 0
-
-273F:2665 86 D0 xchg dl,al
-273F:2667 AC lodsb ; String [si] to al
-273F:2668 86 D0 xchg dl,al
-273F:266A B1 08 mov cl,8
-
-273F:266C locloop_548: ; xref 273F:2663
-273F:266C D1 D2 rcl dx,1 ; Rotate thru carry
-273F:266E E2 07 loop locloop_549 ; Loop if cx > 0
-
-273F:2670 86 D0 xchg dl,al
-273F:2672 AC lodsb ; String [si] to al
-273F:2673 86 D0 xchg dl,al
-273F:2675 B1 08 mov cl,8
-
-273F:2677 locloop_549: ; xref 273F:266E
-273F:2677 51 push cx
-273F:2678 8A C8 mov cl,al
-273F:267A 32 ED xor ch,ch ; Zero register
-273F:267C loc_550: ; xref 273F:25D8, 25E6, 2636
-273F:267C 8A C3 mov al,bl
-273F:267E F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:2680 59 pop cx
-273F:2681 E9 FE98 jmp loc_520 ; (251C)
-273F:2684 loc_551: ; xref 273F:25DB
-273F:2684 58 pop ax
-273F:2685 1F pop ds
-273F:2686 EB 00 jmp short $+2 ; delay for I/O
-273F:2688 57 push di
-273F:2689 8B EF mov bp,di
-273F:268B 1E push ds
-273F:268C 06 push es
-273F:268D 1F pop ds
-273F:268E 8B F7 mov si,di
-273F:2690 83 EE 02 sub si,2
-273F:2693 83 C7 06 add di,6
-273F:2696 8B CD mov cx,bp
-273F:2698 FD std ; Set direction flag
-273F:2699 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:269B F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:269D FC cld ; Clear direction
-273F:269E 33 FF xor di,di ; Zero register
-273F:26A0 úBE 0008 mov si,data_1459e ; (FF12:0008=0)
-273F:26A3 loc_552: ; xref 273F:26C2
-273F:26A3 B9 0008 mov cx,8
-
-273F:26A6 locloop_553: ; xref 273F:26BA
-273F:26A6 AC lodsb ; String [si] to al
-273F:26A7 D0 D8 rcr al,1 ; Rotate thru carry
-273F:26A9 D0 55 03 rcl byte ptr [di+3],1 ; Rotate thru carry
-273F:26AC D0 D8 rcr al,1 ; Rotate thru carry
-273F:26AE D0 55 02 rcl byte ptr [di+2],1 ; Rotate thru carry
-273F:26B1 D0 D8 rcr al,1 ; Rotate thru carry
-273F:26B3 D0 55 01 rcl byte ptr [di+1],1 ; Rotate thru carry
-273F:26B6 D0 D8 rcr al,1 ; Rotate thru carry
-273F:26B8 D0 15 rcl byte ptr [di],1 ; Rotate thru carry
-273F:26BA E2 EA loop locloop_553 ; Loop if cx > 0
-
-273F:26BC 83 C7 04 add di,4
-273F:26BF 83 ED 08 sub bp,8
-273F:26C2 77 DF ja loc_552 ; Jump if above
-273F:26C4 1F pop ds
-273F:26C5 59 pop cx
-273F:26C6 C3 retn
- ega_decode_entry endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:26C7 1E push ds
-273F:26C8 06 push es
-273F:26C9 1F pop ds
-273F:26CA úBE 0040 mov si,40h ; (273F:0040=0)
-273F:26CD 57 push di
-273F:26CE 2B FE sub di,si
-273F:26D0 8B EF mov bp,di
-273F:26D2 32 D2 xor dl,dl ; Zero register
-273F:26D4 loc_554: ; xref 273F:2708
-273F:26D4 8A 04 mov al,[si]
-273F:26D6 8A 64 01 mov ah,[si+1]
-273F:26D9 8A 5C 02 mov bl,[si+2]
-273F:26DC 8A 7C 03 mov bh,[si+3]
-273F:26DF B9 0004 mov cx,4
-
-273F:26E2 locloop_555: ; xref 273F:26F8, 2700
-273F:26E2 D0 D0 rcl al,1 ; Rotate thru carry
-273F:26E4 D0 14 rcl byte ptr [si],1 ; Rotate thru carry
-273F:26E6 D0 D0 rcl al,1 ; Rotate thru carry
-273F:26E8 D0 54 01 rcl byte ptr [si+1],1 ; Rotate thru carry
-273F:26EB D0 D0 rcl al,1 ; Rotate thru carry
-273F:26ED D0 54 02 rcl byte ptr [si+2],1 ; Rotate thru carry
-273F:26F0 D0 D0 rcl al,1 ; Rotate thru carry
-273F:26F2 D0 54 03 rcl byte ptr [si+3],1 ; Rotate thru carry
-273F:26F5 80 F2 01 xor dl,1
-273F:26F8 75 E8 jnz locloop_555 ; Jump if not zero
-273F:26FA 8A C4 mov al,ah
-273F:26FC 8A E3 mov ah,bl
-273F:26FE 8A DF mov bl,bh
-273F:2700 E2 E0 loop locloop_555 ; Loop if cx > 0
-
-273F:2702 83 C6 04 add si,4
-273F:2705 83 ED 04 sub bp,4
-273F:2708 77 CA ja loc_554 ; Jump if above
-273F:270A 5F pop di
-273F:270B 1F pop ds
-273F:270C C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_segment_screen proc near
-273F:270D C6 06 0DA4 00 mov datavar1, 0
-273F:2712 88 0E 0DA5 mov current_layer, cl
-273F:2716 C7 06 0DA2 0200 mov rectangle_size, 200h
-273F:271C 0A C9 or cl,cl ; Zero ?
-273F:271E 74 06 jz loc_556 ; Jump if zero
-273F:2720 81 06 0DA2 0080 add rectangle_size, 80h
-273F:2726 loc_556: ; xref 273F:271E
-273F:2726 33 F6 xor si,si ; Zero register
-273F:2728 B5 06 mov ch,6
-273F:272A loc_557: ; xref 273F:2771
-273F:272A B1 0A mov cl,0Ah
-273F:272C loc_558: ; xref 273F:2765
-273F:272C 1E push ds
-273F:272D 53 push bx
-273F:272E 51 push cx
-273F:272F 56 push si
-273F:2730 57 push di
-273F:2731 A1 4CE4 mov ax, data_segment2
-273F:2734 8E D8 mov ds,ax
-273F:2736 E8 003B call sub_65 ; (2774)
-273F:2739 5F pop di
-273F:273A 5E pop si
-273F:273B 59 pop cx
-273F:273C 5B pop bx
-273F:273D 1F pop ds
-273F:273E F6 06 0DA5 FF test byte ptr ds:[0DA5h],0FFh ; (273F:0DA5=31h)
-273F:2743 74 09 jz loc_559 ; Jump if zero
-273F:2745 0A F6 or dh,dh ; Zero ?
-273F:2747 75 05 jnz loc_559 ; Jump if not zero
-273F:2749 C6 07 FF mov byte ptr [bx],0FFh
-273F:274C EB 0E jmp short loc_560 ; (275C)
-273F:274E loc_559: ; xref 273F:2743, 2747
-273F:274E 03 3E 0DA2 add di, [rectangle_size]
-273F:2752 A0 0DA4 mov al, datavar1
-273F:2755 88 07 mov [bx], al
-273F:2757 80 06 0DA4 01 add datavar1, 1
-273F:275C loc_560: ; xref 273F:274C
-273F:275C 83 C6 10 add si,10h
-273F:275F 83 C3 01 add bx,1
-273F:2762 80 E9 01 sub cl,1
-273F:2765 75 C5 jnz loc_558 ; Jump if not zero
-273F:2767 ú81 C6 1360 add si,data_1464e ; (FF12:1360=1Eh)
-273F:276B 83 C3 08 add bx,8
-273F:276E 80 ED 01 sub ch,1
-273F:2771 75 B7 jnz loc_557 ; Jump if not zero
-273F:2773 C3 retn
- ega_segment_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2736
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2774 sub_65 proc near
-273F:2774 8B DF mov bx,di
-273F:2776 ú81 C3 0200 add bx,200h ; (273F:0200=0F6h)
-273F:277A 32 F6 xor dh,dh ; Zero register
-273F:277C B5 20 mov ch,20h ; ' '
-273F:277E loc_561: ; xref 273F:27AE
-273F:277E B1 04 mov cl,4
-273F:2780 loc_562: ; xref 273F:27A5
-273F:2780 32 D2 xor dl,dl ; Zero register
-273F:2782 AC lodsb ; String [si] to al
-273F:2783 0A D0 or dl,al
-273F:2785 0A F0 or dh,al
-273F:2787 AA stosb ; Store al to es:[di]
-273F:2788 AC lodsb ; String [si] to al
-273F:2789 0A D0 or dl,al
-273F:278B 0A F0 or dh,al
-273F:278D AA stosb ; Store al to es:[di]
-273F:278E AC lodsb ; String [si] to al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 102
-
-273F:278F 0A D0 or dl,al
-273F:2791 0A F0 or dh,al
-273F:2793 AA stosb ; Store al to es:[di]
-273F:2794 AC lodsb ; String [si] to al
-273F:2795 0A D0 or dl,al
-273F:2797 0A F0 or dh,al
-273F:2799 AA stosb ; Store al to es:[di]
-273F:279A F6 D2 not dl
-273F:279C 26: 88 17 mov es:[bx],dl
-273F:279F 83 C3 01 add bx,1
-273F:27A2 80 E9 01 sub cl,1
-273F:27A5 75 D9 jnz loc_562 ; Jump if not zero
-273F:27A7 81 C6 0090 add si,90h
-273F:27AB 80 ED 01 sub ch,1
-273F:27AE 75 CE jnz loc_561 ; Jump if not zero
-273F:27B0 C3 retn
- sub_65 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_show_compressed_screen proc near
-
-273F:27B1 úBB 07DC mov bx, offset display_mask
-273F:27B4 A1 4CE4 mov ax, data_segment2
-273F:27B7 8E C0 mov es,ax
-273F:27B9 úBF 0500 mov di,data_1462e ; (FF12:0500=0)
-273F:27BC 8B 16 4CE0 mov dx, current_room_segment
-273F:27C0 33 F6 xor si,si ; Zero register
-273F:27C2 B5 06 mov ch,6
-273F:27C4 loc_563: ; xref 273F:280C
-273F:27C4 B1 0A mov cl,0Ah
-273F:27C6 loc_564: ; xref 273F:2800
-273F:27C6 F6 07 80 test byte ptr [bx],80h
-273F:27C9 74 28 jz loc_567 ; Jump if zero
-273F:27CB 80 27 7F and byte ptr [bx],7Fh
-273F:27CE 80 0F 01 or byte ptr [bx],1
-273F:27D1 80 8F 0100 01 or byte ptr ds:[100h][bx],1 ; (273F:0100=6)
-273F:27D6 57 push di
-273F:27D7 1E push ds
-273F:27D8 56 push si
-273F:27D9 8E DA mov ds,dx
-273F:27DB B6 20 mov dh,20h ; ' '
-273F:27DD loc_565: ; xref 273F:27EC
-273F:27DD B2 08 mov dl,8
-273F:27DF loc_566: ; xref 273F:27E3
-273F:27DF A5 movsw ; Mov [si] to es:[di]
-273F:27E0 80 EA 01 sub dl,1
-273F:27E3 75 FA jnz loc_566 ; Jump if not zero
-273F:27E5 81 C7 0090 add di,90h
-273F:27E9 80 EE 01 sub dh,1
-273F:27EC 75 EF jnz loc_565 ; Jump if not zero
-273F:27EE 5E pop si
-273F:27EF 8C DA mov dx,ds
-273F:27F1 1F pop ds
-273F:27F2 5F pop di
-273F:27F3 loc_567: ; xref 273F:27C9
-273F:27F3 83 C3 01 add bx,1
-273F:27F6 83 C7 10 add di,10h
-273F:27F9 81 C6 0200 add si,200h
-273F:27FD 80 E9 01 sub cl,1
-273F:2800 75 C4 jnz loc_564 ; Jump if not zero
-273F:2802 83 C3 08 add bx,8
-273F:2805 ú81 C7 1360 add di,1360h ; (273F:1360=0)
-273F:2809 80 ED 01 sub ch,1
-273F:280C 75 B6 jnz loc_563 ; Jump if not zero
-273F:280E 80 0E 11D0 30 or menubar_state, 30h ; (273F:11D0=56h) '0'
-273F:2813 C3 retn
-
- ega_show_compressed_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:2814 úBE 0992 mov si, offset rects_layer_0
-273F:2817 83 C6 4C add si,4Ch
-273F:281A C7 06 0DA6 0D92 mov rect_x_start, offset room_layers
-273F:2820 C7 06 0DAA 0D96 mov num_horiz_rects, 0D96h
-273F:2826 B9 0003 mov cx,3
-273F:2829 loc_568: ; xref 273F:28E9
-273F:2829 ú51 push cx
-273F:282A úBB 0100 mov bx,100h ; (273F:0100=6)
-273F:282D loc_569: ; xref 273F:28CF
-273F:282D ú51 push cx
-273F:282E 56 push si
-273F:282F 8B 3E 0DA6 mov di, rect_x_start
-273F:2833 8B 05 mov ax,[di]
-273F:2835 8E C0 mov es,ax
-273F:2837 8B 45 02 mov ax,[di+2]
-273F:283A A3 0DA8 mov rect_y_end, ax
-273F:283D 8B 3E 0DAA mov di, num_horiz_rects
-273F:2841 8B 05 mov ax,[di]
-273F:2843 8B D0 mov dx,ax
-273F:2845 8B 45 02 mov ax,[di+2]
-273F:2848 A3 0DAC mov word ptr ds:[0DACh],ax ; (273F:0DAC=0EB09h)
-273F:284B B5 06 mov ch,6
-273F:284D loc_570: ; xref 273F:28BE
-273F:284D B1 0A mov cl,0Ah
-273F:284F loc_571: ; xref 273F:28B6
-273F:284F F6 04 80 test byte ptr [si],80h
-273F:2852 75 5C jnz loc_573 ; Jump if not zero
-273F:2854 F6 00 80 test byte ptr [bx+si],80h
-273F:2857 75 57 jnz loc_573 ; Jump if not zero
-273F:2859 56 push si
-273F:285A 52 push dx
-273F:285B 8A 04 mov al,[si]
-273F:285D 32 E4 xor ah,ah ; Zero register
-273F:285F F7 26 0DA8 mul rect_y_end
-273F:2863 8B F8 mov di,ax
-273F:2865 8A 00 mov al,[bx+si]
-273F:2867 32 E4 xor ah,ah ; Zero register
-273F:2869 F7 26 0DAC mul word ptr ds:[0DACh] ; (273F:0DAC=0EB09h) dx:ax = data * ax
-273F:286D 8B F0 mov si,ax
-273F:286F 5A pop dx
-273F:2870 1E push ds
-273F:2871 51 push cx
-273F:2872 53 push bx
-273F:2873 8E DA mov ds,dx
-273F:2875 B9 0080 mov cx,80h
-273F:2878 8B DE mov bx,si
-273F:287A ú81 C3 0200 add bx,data_11e ; (0000:0200=0)
-
-273F:287E locloop_572: ; xref 273F:28A8
-273F:287E 8A 17 mov dl,[bx]
-273F:2880 AC lodsb ; String [si] to al
-273F:2881 26: 20 15 and es:[di],dl
-273F:2884 26: 08 05 or es:[di],al
-273F:2887 AC lodsb ; String [si] to al
-273F:2888 26: 20 55 01 and es:[di+1],dl
-273F:288C 26: 08 45 01 or es:[di+1],al
-273F:2890 AC lodsb ; String [si] to al
-273F:2891 26: 20 55 02 and es:[di+2],dl
-273F:2895 26: 08 45 02 or es:[di+2],al
-273F:2899 AC lodsb ; String [si] to al
-273F:289A 26: 20 55 03 and es:[di+3],dl
-273F:289E 26: 08 45 03 or es:[di+3],al
-273F:28A2 83 C7 04 add di,4
-273F:28A5 83 C3 01 add bx,1
-273F:28A8 E2 D4 loop locloop_572 ; Loop if cx > 0
-
-273F:28AA 5B pop bx
-273F:28AB 59 pop cx
-273F:28AC 8C DA mov dx,ds
-273F:28AE 1F pop ds
-273F:28AF 5E pop si
-273F:28B0 loc_573: ; xref 273F:2852, 2857
-273F:28B0 83 C6 01 add si,1
-273F:28B3 80 E9 01 sub cl,1
-273F:28B6 75 97 jnz loc_571 ; Jump if not zero
-273F:28B8 83 C6 08 add si,8
-273F:28BB 80 ED 01 sub ch,1
-273F:28BE 75 8D jnz loc_570 ; Jump if not zero
-273F:28C0 83 06 0DAA 04 add num_horiz_rects, 4
-273F:28C5 81 C3 0100 add bx,100h
-273F:28C9 5E pop si
-273F:28CA 59 pop cx
-273F:28CB E2 02 loop locloop_574 ; Loop if cx > 0
-
-273F:28CD EB 03 jmp short loc_575 ; (28D2)
-
-273F:28CF locloop_574: ; xref 273F:28CB
-273F:28CF E9 FF5B jmp loc_569 ; (282D)
-273F:28D2 loc_575: ; xref 273F:28CD
-273F:28D2 59 pop cx
-273F:28D3 E2 02 loop locloop_576 ; Loop if cx > 0
-
-273F:28D5 EB 15 jmp short loc_577 ; (28EC)
-
-273F:28D7 locloop_576: ; xref 273F:28D3
-273F:28D7 81 C6 0100 add si,100h
-273F:28DB 83 06 0DA6 04 add rect_x_start, 4
-273F:28E0 A1 0DA6 mov ax, rect_x_start
-273F:28E3 05 0004 add ax,4
-273F:28E6 A3 0DAA mov num_horiz_rects, ax
-273F:28E9 E9 FF3D jmp loc_568 ; (2829)
-273F:28EC loc_577: ; xref 273F:28D5
-273F:28EC úBE 0A92 mov si, offset rects_layer_1
-273F:28EF 83 C6 4C add si, FULL_HORIZ_RECTS * 4 + 4 ; 4Ch
-273F:28F2 C7 06 0DA6 0D96 mov rect_x_start, 0D96h
-273F:28F8 C7 06 0DAA 0D9A mov num_horiz_rects, 0D9Ah
-273F:28FE B9 0002 mov cx,2
-273F:2901 loc_578: ; xref 273F:29A0
-273F:2901 ú51 push cx
-273F:2902 úBB 0100 mov bx,100h ; (273F:0100=6)
-273F:2905 loc_579: ; xref 273F:2986
-273F:2905 ú51 push cx
-273F:2906 56 push si
-273F:2907 8B 3E 0DA6 mov di, rect_x_start
-273F:290B 8B 05 mov ax,[di]
-273F:290D 8E C0 mov es,ax
-273F:290F 8B 45 02 mov ax,[di+2]
-273F:2912 A3 0DA8 mov rect_y_end, ax
-273F:2915 8B 3E 0DAA mov di, num_horiz_rects
-273F:2919 8B 05 mov ax,[di]
-273F:291B 8B D0 mov dx,ax
-273F:291D 8B 45 02 mov ax,[di+2]
-273F:2920 A3 0DAC mov word ptr ds:[0DACh],ax ; (273F:0DAC=0EB09h)
-273F:2923 B5 06 mov ch,6
-273F:2925 loc_580: ; xref 273F:2975
-273F:2925 B1 0A mov cl,0Ah
-273F:2927 loc_581: ; xref 273F:296D
-273F:2927 F6 04 80 test byte ptr [si],80h
-273F:292A 75 3B jnz loc_583 ; Jump if not zero
-273F:292C F6 00 80 test byte ptr [bx+si],80h
-273F:292F 75 36 jnz loc_583 ; Jump if not zero
-273F:2931 56 push si
-273F:2932 52 push dx
-273F:2933 8A 04 mov al,[si]
-273F:2935 32 E4 xor ah,ah ; Zero register
-273F:2937 F7 26 0DA8 mul rect_y_end
-273F:293B 8B F8 mov di,ax
-273F:293D 8A 00 mov al,[bx+si]
-273F:293F 32 E4 xor ah,ah ; Zero register
-273F:2941 F7 26 0DAC mul word ptr ds:[0DACh] ; (273F:0DAC=0EB09h) dx:ax = data * ax
-273F:2945 8B F0 mov si,ax
-273F:2947 5A pop dx
-273F:2948 1E push ds
-273F:2949 51 push cx
-273F:294A 53 push bx
-273F:294B 8E DA mov ds,dx
-273F:294D B9 0080 mov cx,80h
-273F:2950 ú81 C6 0200 add si,data_11e ; (0000:0200=0)
-273F:2954 ú81 C7 0200 add di,data_1436e ; (4789:0200=27h)
-
-273F:2958 locloop_582: ; xref 273F:295F
-273F:2958 AC lodsb ; String [si] to al
-273F:2959 26: 20 05 and es:[di],al
-273F:295C 83 C7 01 add di,1
-273F:295F E2 F7 loop locloop_582 ; Loop if cx > 0
-
-273F:2961 5B pop bx
-273F:2962 59 pop cx
-273F:2963 8C DA mov dx,ds
-273F:2965 1F pop ds
-273F:2966 5E pop si
-273F:2967 loc_583: ; xref 273F:292A, 292F
-273F:2967 83 C6 01 add si,1
-273F:296A 80 E9 01 sub cl,1
-273F:296D 75 B8 jnz loc_581 ; Jump if not zero
-273F:296F 83 C6 08 add si,8
-273F:2972 80 ED 01 sub ch,1
-273F:2975 75 AE jnz loc_580 ; Jump if not zero
-273F:2977 83 06 0DAA 04 add num_horiz_rects, 4
-273F:297C ú81 C3 0100 add bx,100h ; (273F:0100=6)
-273F:2980 5E pop si
-273F:2981 59 pop cx
-273F:2982 E2 02 loop locloop_584 ; Loop if cx > 0
-
-273F:2984 EB 03 jmp short loc_585 ; (2989)
-
-273F:2986 locloop_584: ; xref 273F:2982
-273F:2986 E9 FF7C jmp loc_579 ; (2905)
-273F:2989 loc_585: ; xref 273F:2984
-273F:2989 59 pop cx
-273F:298A E2 02 loop locloop_586 ; Loop if cx > 0
-
-273F:298C EB 15 jmp short loc_ret_587 ; (29A3)
-
-273F:298E locloop_586: ; xref 273F:298A
-273F:298E ú81 C6 0100 add si,100h ; (273F:0100=6)
-273F:2992 83 06 0DA6 04 add rect_x_start, 4
-273F:2997 A1 0DA6 mov ax, rect_x_start
-273F:299A 05 0004 add ax,4
-273F:299D A3 0DAA mov num_horiz_rects, ax
-273F:29A0 E9 FF5E jmp loc_578 ; (2901)
-
-273F:29A3 loc_ret_587: ; xref 273F:298C
-273F:29A3 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_add_layer proc near
-273F:29A4 8B CD mov cx, bp
-273F:29A6 locloop_588:
-273F:29A6 80 39 FE cmp byte ptr [bx+di],0FEh
-273F:29A9 72 0A jb loc_589 ; Jump if below
-273F:29AB ú81 C7 0100 add di,100h ; (273F:0100=6)
-273F:29AF 83 C6 04 add si,4
-273F:29B2 E2 F2 loop locloop_588 ; Loop if cx > 0
-
-273F:29B4 C3 retn
-273F:29B5 loc_589: ; xref 273F:29A9
-273F:29B5 1E push ds
-273F:29B6 52 push dx
-273F:29B7 8B D0 mov dx,ax
-273F:29B9 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:29BB D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:29BD 03 D0 add dx,ax
-273F:29BF B1 0A mov cl,0Ah
-273F:29C1 D3 E2 shl dx,cl ; Shift w/zeros fill
-273F:29C3 81 C2 0500 add dx,500h
-273F:29C7 58 pop ax
-273F:29C8 B1 04 mov cl,4
-273F:29CA D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:29CC 03 D0 add dx,ax
-273F:29CE 8A 01 mov al,[bx+di]
-273F:29D0 8B 1E 4CE4 mov bx, data_segment2
-273F:29D4 8E C3 mov es,bx
-273F:29D6 8B 1C mov bx,[si]
-273F:29D8 8E DB mov ds,bx
-273F:29DA 8B FA mov di,dx
-273F:29DC 32 E4 xor ah,ah ; Zero register
-273F:29DE 8B D0 mov dx,ax
-273F:29E0 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:29E2 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:29E4 03 C2 add ax,dx
-273F:29E6 B1 07 mov cl,7
-273F:29E8 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:29EA 8B F0 mov si,ax
-273F:29EC 8B DE mov bx,si
-273F:29EE ú81 C3 0200 add bx,data_1455e ; (E4B8:0200=0)
-273F:29F2 B9 0020 mov cx,20h
-
-273F:29F5 locloop_590: ; xref 273F:2A2D
-273F:29F5 51 push cx
-273F:29F6 B9 0004 mov cx,4
-
-273F:29F9 locloop_591: ; xref 273F:2A26
-273F:29F9 8A 17 mov dl,[bx]
-273F:29FB AC lodsb ; String [si] to al
-273F:29FC 26: 20 15 and es:[di],dl
-273F:29FF 26: 08 05 or es:[di],al
-273F:2A02 83 C7 01 add di,1
-273F:2A05 AC lodsb ; String [si] to al
-273F:2A06 26: 20 15 and es:[di],dl
-273F:2A09 26: 08 05 or es:[di],al
-273F:2A0C 83 C7 01 add di,1
-273F:2A0F AC lodsb ; String [si] to al
-273F:2A10 26: 20 15 and es:[di],dl
-273F:2A13 26: 08 05 or es:[di],al
-273F:2A16 83 C7 01 add di,1
-273F:2A19 AC lodsb ; String [si] to al
-273F:2A1A 26: 20 15 and es:[di],dl
-273F:2A1D 26: 08 05 or es:[di],al
-273F:2A20 83 C7 01 add di,1
-273F:2A23 83 C3 01 add bx,1
-273F:2A26 E2 D1 loop locloop_591 ; Loop if cx > 0
-
-273F:2A28 ú81 C7 0090 add di,90h ; (273F:0090=15h)
-273F:2A2C 59 pop cx
-273F:2A2D E2 C6 loop locloop_590 ; Loop if cx > 0
-
-273F:2A2F 1F pop ds
-273F:2A30 C3 retn
- ega_add_layer endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_display_character proc near
-
-273F:2A31 57 push di
-273F:2A32 1E push ds
-273F:2A33 51 push cx
-273F:2A34 56 push si
-273F:2A35 8E DD mov ds,bp
-273F:2A37 8A F2 mov dh,dl
-273F:2A39 2C 20 sub al,20h ; ' '
-273F:2A3B B1 03 mov cl,3
-273F:2A3D 32 E4 xor ah,ah ; Zero register
-273F:2A3F D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2A41 8B F0 mov si,ax
-273F:2A43 B9 0008 mov cx,8
-
-273F:2A46 locloop_592: ; xref 273F:2AA2
-273F:2A46 AC lodsb ; String [si] to al
-273F:2A47 8A E0 mov ah,al
-273F:2A49 F6 D4 not ah
-273F:2A4B 26: C6 05 00 mov byte ptr es:[di],0
-273F:2A4F D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A51 73 03 jnc loc_593 ; Jump if carry=0
-273F:2A53 26: 88 05 mov es:[di],al
-273F:2A56 loc_593: ; xref 273F:2A51
-273F:2A56 D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A58 73 03 jnc loc_594 ; Jump if carry=0
-273F:2A5A 26: 08 25 or es:[di],ah
-273F:2A5D loc_594: ; xref 273F:2A58
-273F:2A5D 83 C7 01 add di,1
-273F:2A60 26: C6 05 00 mov byte ptr es:[di],0
-273F:2A64 D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A66 73 03 jnc loc_595 ; Jump if carry=0
-273F:2A68 26: 88 05 mov es:[di],al
-273F:2A6B loc_595: ; xref 273F:2A66
-273F:2A6B D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A6D 73 03 jnc loc_596 ; Jump if carry=0
-273F:2A6F 26: 08 25 or es:[di],ah
-273F:2A72 loc_596: ; xref 273F:2A6D
-273F:2A72 83 C7 01 add di,1
-273F:2A75 26: C6 05 00 mov byte ptr es:[di],0
-273F:2A79 D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A7B 73 03 jnc loc_597 ; Jump if carry=0
-273F:2A7D 26: 88 05 mov es:[di],al
-273F:2A80 loc_597: ; xref 273F:2A7B
-273F:2A80 D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A82 73 03 jnc loc_598 ; Jump if carry=0
-273F:2A84 26: 08 25 or es:[di],ah
-273F:2A87 loc_598: ; xref 273F:2A82
-273F:2A87 83 C7 01 add di,1
-273F:2A8A 26: C6 05 00 mov byte ptr es:[di],0
-273F:2A8E D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A90 73 03 jnc loc_599 ; Jump if carry=0
-273F:2A92 26: 88 05 mov es:[di],al
-273F:2A95 loc_599: ; xref 273F:2A90
-273F:2A95 D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:2A97 73 03 jnc loc_600 ; Jump if carry=0
-273F:2A99 26: 08 25 or es:[di],ah
-273F:2A9C loc_600: ; xref 273F:2A97
-273F:2A9C 81 C7 009D add di,9Dh
-273F:2AA0 8A D6 mov dl,dh
-273F:2AA2 E2 A2 loop locloop_592 ; Loop if cx > 0
-
-273F:2AA4 5E pop si
-273F:2AA5 59 pop cx
-273F:2AA6 1F pop ds
-273F:2AA7 5F pop di
-
-273F:2AA8 loc_ret_601: ; xref 273F:2ABE
-273F:2AA8 C3 retn
-
- ega_display_character endp
-
-273F:2AA9 00 data_238 db 0 ; xref 273F:2B37, 2BA1
-273F:2AAA 00 data_239 db 0 ; xref 273F:2B0C, 2B9A
-273F:2AAB 0000 data_240 dw 0 ; xref 273F:2B3C, 2C04
-273F:2AAD loc_602: ; xref 273F:2ADD
-273F:2AAD 80 26 11D0 FB and menubar_state, 0FBh ; (273F:11D0=56h)
-273F:2AB2 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2129
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2AB3 ega_cursor proc near
-273F:2AB3 C7 06 F010 0000 mov timer_ticks, 0
-273F:2AB9 F6 06 11D0 04 test menubar_state, 4 ; (273F:11D0=56h)
-273F:2ABE 75 E8 jnz loc_ret_601 ; Jump if not zero
-273F:2AC0 80 0E 11D0 04 or menubar_state, 4 ; (273F:11D0=56h)
-273F:2AC5 F7 06 11EC FFFF test word ptr ds:[11ECh],0FFFFh ; (273F:11EC=1B55h)
-273F:2ACB 74 0B jz loc_603 ; Jump if zero
-273F:2ACD A1 0DB0 mov ax, screen_start_seg
-273F:2AD0 8E C0 mov es,ax
-273F:2AD2 úBE 11E8 mov si,offset data_638 ; (31E4:11E8=0)
-273F:2AD5 E8 014D call sub_67 ; (2C25)
-273F:2AD8 loc_603: ; xref 273F:2ACB
- assume ds:data_seg
-273F:2AD8 F6 06 11D0 01 test menubar_state, 1 ; (31E4:11D0=3)
-273F:2ADD 75 CE jnz loc_602 ; Jump if not zero
-273F:2ADF A1 11D8 mov ax, mouse_y2
-273F:2AE2 2B 06 11DF sub ax, cursor_centroid
-273F:2AE6 73 02 jnc loc_604 ; Jump if carry=0
-273F:2AE8 33 C0 xor ax,ax ; Zero register
-273F:2AEA loc_604: ; xref 273F:2AE6
-273F:2AEA BD 00C8 mov bp,0C8h
-273F:2AED 2B E8 sub bp,ax
-273F:2AEF 83 FD 11 cmp bp,11h
-273F:2AF2 72 03 jb loc_605 ; Jump if below
-273F:2AF4 BD 0010 mov bp,10h
-273F:2AF7 loc_605: ; xref 273F:2AF2
-273F:2AF7 89 2E 11EC mov data_640,bp ; (31E4:11EC=0)
-273F:2AFB 8B 36 11D6 mov si, mouse_x2
-273F:2AFF 2B 36 11DF sub si, cursor_centroid
-273F:2B03 73 02 jnc loc_606 ; Jump if carry=0
-273F:2B05 33 F6 xor si,si ; Zero register
-273F:2B07 loc_606: ; xref 273F:2B03
-273F:2B07 8B CE mov cx,si
-273F:2B09 80 E1 07 and cl,7
-273F:2B0C 2E: 88 0E 2AAA mov cs:data_239,cl ; (273F:2AAA=0)
-273F:2B11 B1 03 mov cl,3
-273F:2B13 D3 EE shr si,cl ; Shift w/zeros fill
-273F:2B15 BB 0028 mov bx,28h
-273F:2B18 2B DE sub bx,si
-273F:2B1A 80 FB 04 cmp bl,4
-273F:2B1D 72 02 jb loc_607 ; Jump if below
-273F:2B1F B3 03 mov bl,3
-273F:2B21 loc_607: ; xref 273F:2B1D
-273F:2B21 88 1E 11EA mov data_639,bl ; (31E4:11EA=0)
-273F:2B25 8B D0 mov dx,ax
-273F:2B27 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2B29 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2B2B 03 C2 add ax,dx
-273F:2B2D D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2B2F 03 F0 add si,ax
-273F:2B31 89 36 11E8 mov data_638,si ; (31E4:11E8=0)
-273F:2B35 32 FF xor bh,bh ; Zero register
-273F:2B37 2E: 88 1E 2AA9 mov cs:data_238,bl ; (273F:2AA9=0)
-273F:2B3C 2E: 89 2E 2AAB mov cs:data_240,bp ; (273F:2AAB=0)
-273F:2B41 BA 03CE mov dx,3CEh
-273F:2B44 B8 0005 mov ax,5
-273F:2B47 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2B48 B8 0007 mov ax,7
-273F:2B4B EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2B4C B0 03 mov al,3
-273F:2B4E EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 3, data rotate
-273F:2B4F FF 36 4CF4 push cursors_segment
-273F:2B53 FF 36 11E1 push cursor_index
-273F:2B57 1E push ds
-273F:2B58 07 pop es
-273F:2B59 A1 0DB0 mov ax, screen_start_seg
-273F:2B5C 8E D8 mov ds,ax
-273F:2B5E B8 0304 mov ax,304h
-273F:2B61 úBF 11EE mov di,offset data_641 ; (31E4:11EE=0)
-273F:2B64 loc_608: ; xref 273F:2B7A
-273F:2B64 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 4, read map select
-273F:2B65 56 push si
-273F:2B66 55 push bp
-273F:2B67 loc_609: ; xref 273F:2B73
-273F:2B67 56 push si
-273F:2B68 8B CB mov cx,bx
-273F:2B6A F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:2B6C 5E pop si
-273F:2B6D 83 C6 28 add si,28h
-273F:2B70 83 ED 01 sub bp,1
-273F:2B73 75 F2 jnz loc_609 ; Jump if not zero
-273F:2B75 5D pop bp
-273F:2B76 5E pop si
-273F:2B77 80 EC 01 sub ah,1
-273F:2B7A 73 E8 jnc loc_608 ; Jump if carry=0
-273F:2B7C 8B FE mov di,si
-273F:2B7E BA 03CE mov dx,3CEh
-273F:2B81 B8 0805 mov ax,805h
-273F:2B84 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2B85 B8 0007 mov ax,7
-273F:2B88 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2B89 B0 03 mov al,3
-273F:2B8B EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 3, data rotate
-273F:2B8C B8 FF08 mov ax,0FF08h
-273F:2B8F EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2B90 1E push ds
-273F:2B91 07 pop es
-273F:2B92 5E pop si
-273F:2B93 B1 06 mov cl,6
-273F:2B95 D3 E6 shl si,cl ; Shift w/zeros fill
-273F:2B97 1F pop ds
-273F:2B98 87 D5 xchg dx,bp
-273F:2B9A 2E: 8A 0E 2AAA mov cl,cs:data_239 ; (273F:2AAA=0)
-273F:2B9F loc_610: ; xref 273F:2C0A
-273F:2B9F 56 push si
-273F:2BA0 57 push di
-273F:2BA1 2E: 8A 2E 2AA9 mov ch,cs:data_238 ; (273F:2AA9=0)
-273F:2BA6 33 DB xor bx,bx ; Zero register
-273F:2BA8 33 D2 xor dx,dx ; Zero register
-273F:2BAA 8A 34 mov dh,[si]
-273F:2BAC D3 EA shr dx,cl ; Shift w/zeros fill
-273F:2BAE 8A E6 mov ah,dh
-273F:2BB0 B0 08 mov al,8
-273F:2BB2 87 D5 xchg dx,bp
-273F:2BB4 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2BB5 87 D5 xchg dx,bp
-273F:2BB7 8A 7C 01 mov bh,[si+1]
-273F:2BBA D3 EB shr bx,cl ; Shift w/zeros fill
-273F:2BBC 8A C7 mov al,bh
-273F:2BBE 26: 8A 25 mov ah,es:[di]
-273F:2BC1 AA stosb ; Store al to es:[di]
-273F:2BC2 80 ED 01 sub ch,1
-273F:2BC5 74 35 jz loc_612 ; Jump if zero
-273F:2BC7 8A 64 02 mov ah,[si+2]
-273F:2BCA 32 C0 xor al,al ; Zero register
-273F:2BCC D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:2BCE 0A E2 or ah,dl
-273F:2BD0 8A D0 mov dl,al
-273F:2BD2 87 D5 xchg dx,bp
-273F:2BD4 B0 08 mov al,8
-273F:2BD6 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2BD7 8A 64 03 mov ah,[si+3]
-273F:2BDA 32 C0 xor al,al ; Zero register
-273F:2BDC D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:2BDE 0A E3 or ah,bl
-273F:2BE0 8A D8 mov bl,al
-273F:2BE2 8A C4 mov al,ah
-273F:2BE4 26: 8A 25 mov ah,es:[di]
-273F:2BE7 AA stosb ; Store al to es:[di]
-273F:2BE8 80 ED 01 sub ch,1
-273F:2BEB 74 0D jz loc_611 ; Jump if zero
-273F:2BED 8B C5 mov ax,bp
-273F:2BEF 8A E0 mov ah,al
-273F:2BF1 B0 08 mov al,8
-273F:2BF3 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2BF4 8A C3 mov al,bl
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 112
-
-273F:2BF6 26: 8A 25 mov ah,es:[di]
-273F:2BF9 AA stosb ; Store al to es:[di]
-273F:2BFA loc_611: ; xref 273F:2BEB
-273F:2BFA 87 D5 xchg dx,bp
-273F:2BFC loc_612: ; xref 273F:2BC5
-273F:2BFC 5F pop di
-273F:2BFD 5E pop si
-273F:2BFE 83 C6 04 add si,4
-273F:2C01 83 C7 28 add di,28h
-273F:2C04 2E: 83 2E 2AAB 01 sub cs:data_240,1 ; (273F:2AAB=0)
-273F:2C0A 75 93 jnz loc_610 ; Jump if not zero
-273F:2C0C 87 D5 xchg dx,bp
-273F:2C0E B8 0005 mov ax,5
-273F:2C11 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2C12 B8 0F07 mov ax,0F07h
-273F:2C15 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2C16 B8 FF08 mov ax,0FF08h
-273F:2C19 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 8, data bit mask
-273F:2C1A B8 31E4 mov ax,data_seg
-273F:2C1D 8E D8 mov ds,ax
-273F:2C1F 80 26 11D0 FB and menubar_state, 0FBh ; (31E4:11D0=3)
-
-273F:2C24 loc_ret_613: ; xref 273F:2C31
-273F:2C24 C3 retn
-
- ega_cursor endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2151, 2AD5
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2C25 sub_67 proc near
-273F:2C25 8B 3C mov di,[si]
-273F:2C27 8A 5C 02 mov bl,[si+2]
-273F:2C2A 32 FF xor bh,bh ; Zero register
-273F:2C2C 8B 6C 04 mov bp,[si+4]
-273F:2C2F 0B ED or bp,bp ; Zero ?
-273F:2C31 74 F1 jz loc_ret_613 ; Jump if zero
-273F:2C33 C7 44 04 0000 mov word ptr [si+4],0
-273F:2C38 83 C6 06 add si,6
-273F:2C3B BA 03CE mov dx,3CEh
-273F:2C3E B8 0805 mov ax,805h
-273F:2C41 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 5, mode
-273F:2C42 B8 0007 mov ax,7
-273F:2C45 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 7, ignore color bits
-273F:2C46 B0 03 mov al,3
-273F:2C48 EF out dx,ax ; port 3CEh, EGA graphic index
- ; al = 3, data rotate
-273F:2C49 B8 FF08 mov ax,0FF08h
-273F:2C4C EF out dx,ax ; port 3CEh, EGA graphic index
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 113
-
- ; al = 8, data bit mask
-273F:2C4D B8 31E4 mov ax,data_seg
-273F:2C50 8E D8 mov ds,ax
-273F:2C52 B2 C4 mov dl,0C4h
-273F:2C54 B8 0802 mov ax,802h
-273F:2C57 B9 0004 mov cx,4
-
-273F:2C5A locloop_614: ; xref 273F:2C70
-273F:2C5A EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:2C5B 51 push cx
-273F:2C5C 57 push di
-273F:2C5D 8B CD mov cx,bp
-
-273F:2C5F locloop_615: ; xref 273F:2C6A
-273F:2C5F 51 push cx
-273F:2C60 57 push di
-273F:2C61 8B CB mov cx,bx
-273F:2C63 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:2C65 5F pop di
-273F:2C66 83 C7 28 add di,28h
-273F:2C69 59 pop cx
-273F:2C6A E2 F3 loop locloop_615 ; Loop if cx > 0
-
-273F:2C6C 5F pop di
-273F:2C6D 59 pop cx
-273F:2C6E D0 EC shr ah,1 ; Shift w/zeros fill
-273F:2C70 E2 E8 loop locloop_614 ; Loop if cx > 0
-
-273F:2C72 B4 0F mov ah,0Fh
-273F:2C74 EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:2C75 C3 retn
- sub_67 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_add_animation proc near
-
-273F:2C76 8A 47 04 mov al,[bx+4]
-273F:2C79 8A 6F 06 mov ch,[bx+6]
-273F:2C7C F6 E5 mul ch ; ax = reg * al
-273F:2C7E D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2C80 03 C6 add ax,si
-273F:2C82 A3 1440 mov word ptr ds:[1440h],ax ; (273F:1440=0BA00h)
-273F:2C85 B8 FFFF mov ax,0FFFFh
- assume ds:seg_code
-273F:2C88 2E: A3 1500 mov word ptr cs:data_215,ax ; (273F:1500=0)
-273F:2C8C 2E: A3 1502 mov cs:data_216,ax ; (273F:1502=0)
-273F:2C90 2E: A2 1504 mov cs:data_217,al ; (273F:1504=0)
-273F:2C94 C6 06 11B0 00 mov data_11b0, 0
-273F:2C99 8B 47 02 mov ax,[bx+2]
-273F:2C9C 2D 0088 sub ax,88h
-273F:2C9F 73 2A jnc loc_618 ; Jump if carry=0
-273F:2CA1 50 push ax
-273F:2CA2 03 47 06 add ax,[bx+6]
-273F:2CA5 58 pop ax
-273F:2CA6 74 02 jz loc_616 ; Jump if zero
-273F:2CA8 72 03 jc loc_617 ; Jump if carry Set
-273F:2CAA loc_616: ; xref 273F:2CA6, 2D26
-273F:2CAA E9 02EE jmp loc_ret_636 ; (2F9B)
-273F:2CAD loc_617: ; xref 273F:2CA8
-273F:2CAD F7 D8 neg ax
-273F:2CAF 2A E8 sub ch,al
-273F:2CB1 F6 67 04 mul byte ptr [bx+4] ; ax = data * al
-273F:2CB4 B1 03 mov cl,3
-273F:2CB6 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:2CB8 01 06 1440 add word ptr ds:[1440h],ax ; (273F:1440=0BA00h)
-273F:2CBC D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2CBE D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2CC0 03 F0 add si,ax
-273F:2CC2 33 C0 xor ax,ax ; Zero register
-273F:2CC4 C6 06 11B0 01 mov data_11b0, 1
-273F:2CC9 EB 1C jmp short loc_621 ; (2CE7)
-273F:2CCB loc_618: ; xref 273F:2C9F
-273F:2CCB 3D 00C0 cmp ax,0C0h
-273F:2CCE 72 03 jb loc_619 ; Jump if below
-273F:2CD0 E9 02C8 jmp loc_ret_636 ; (2F9B)
-273F:2CD3 loc_619: ; xref 273F:2CCE
-273F:2CD3 50 push ax
-273F:2CD4 03 47 06 add ax,[bx+6]
-273F:2CD7 3D 00C1 cmp ax,0C1h
-273F:2CDA 72 0A jb loc_620 ; Jump if below
-273F:2CDC 2D 00C0 sub ax,0C0h
-273F:2CDF 2A E8 sub ch,al
-273F:2CE1 C6 06 11B0 01 mov data_11b0, 1
-273F:2CE6 loc_620: ; xref 273F:2CDA
-273F:2CE6 58 pop ax
-273F:2CE7 loc_621: ; xref 273F:2CC9
-273F:2CE7 8B D0 mov dx,ax
-273F:2CE9 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2CEB D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2CED 03 C2 add ax,dx
-273F:2CEF B1 05 mov cl,5
-273F:2CF1 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2CF3 05 0500 add ax,500h
-273F:2CF6 8B F8 mov di,ax
-273F:2CF8 8B 47 04 mov ax,[bx+4]
-273F:2CFB B1 03 mov cl,3
-273F:2CFD D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:2CFF 2E: A2 1509 mov cs:data_220,al ; (273F:1509=0)
-273F:2D03 2E: A3 1507 mov cs:data_219,ax ; (273F:1507=0)
-273F:2D07 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2D09 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:2D0B 2E: A3 1505 mov cs:data_218,ax ; (273F:1505=0)
-273F:2D0F 8B 07 mov ax,[bx]
-273F:2D11 8A C8 mov cl,al
-273F:2D13 80 E1 07 and cl,7
-273F:2D16 89 0E 1442 mov word ptr ds:[1442h],cx ; (273F:1442=1)
-273F:2D1A 2D 0080 sub ax,80h
-273F:2D1D 73 31 jnc loc_623 ; Jump if carry=0
-273F:2D1F 50 push ax
-273F:2D20 8B 57 04 mov dx,[bx+4]
-273F:2D23 03 C2 add ax,dx
-273F:2D25 58 pop ax
-273F:2D26 74 82 jz loc_616 ; Jump if zero
-273F:2D28 72 03 jc loc_622 ; Jump if carry Set
-273F:2D2A E9 026E jmp loc_ret_636 ; (2F9B)
-273F:2D2D loc_622: ; xref 273F:2D28
-273F:2D2D F7 D0 not ax
-273F:2D2F 25 FFF8 and ax,0FFF8h
-273F:2D32 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2D34 2E: A3 1500 mov word ptr cs:data_215,ax ; (273F:1500=0)
-273F:2D38 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2D3A D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2D3C 2E: A3 1502 mov cs:data_216,ax ; (273F:1502=0)
-273F:2D40 04 01 add al,1
-273F:2D42 2E: 28 06 1509 sub cs:data_220,al ; (273F:1509=0)
-273F:2D47 C6 06 11B0 01 mov data_11b0, 1
-273F:2D4C 33 C0 xor ax,ax ; Zero register
-273F:2D4E EB 29 jmp short loc_625 ; (2D79)
-273F:2D50 loc_623: ; xref 273F:2D1D
-273F:2D50 3D 0140 cmp ax,140h
-273F:2D53 72 03 jb loc_624 ; Jump if below
-273F:2D55 E9 0243 jmp loc_ret_636 ; (2F9B)
-273F:2D58 loc_624: ; xref 273F:2D53
-273F:2D58 8B 57 04 mov dx,[bx+4]
-273F:2D5B 03 D0 add dx,ax
-273F:2D5D 81 EA 0140 sub dx,140h
-273F:2D61 72 16 jc loc_625 ; Jump if carry Set
-273F:2D63 74 14 jz loc_625 ; Jump if zero
-273F:2D65 B1 03 mov cl,3
-273F:2D67 D3 EA shr dx,cl ; Shift w/zeros fill
-273F:2D69 2E: 28 16 1509 sub cs:data_220,dl ; (273F:1509=0)
-273F:2D6E 2E: C6 06 1504 00 mov cs:data_217,0 ; (273F:1504=0)
-273F:2D74 C6 06 11B0 01 mov data_11b0, 1
-273F:2D79 loc_625: ; xref 273F:2D4E, 2D61, 2D63
-273F:2D79 25 FFF8 and ax,0FFF8h
-273F:2D7C D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:2D7E 03 F8 add di,ax
-273F:2D80 8B 0E 1442 mov cx,word ptr ds:[1442h] ; (273F:1442=1)
-273F:2D84 80 F1 07 xor cl,7
-273F:2D87 80 C1 01 add cl,1
-273F:2D8A 8B 1E 1440 mov bx,word ptr ds:[1440h] ; (273F:1440=0BA00h)
-273F:2D8E 80 3E 11B0 01 cmp data_11b0, 1
-273F:2D93 75 03 jne loc_626 ; Jump if not equal
-273F:2D95 E9 00D9 jmp loc_630 ; (2E71)
-273F:2D98 loc_626: ; xref 273F:2D93
-273F:2D98 1E push ds
-273F:2D99 06 push es
-273F:2D9A A1 4CE4 mov ax, data_segment2
-273F:2D9D 8E C0 mov es,ax
-273F:2D9F 1F pop ds
-273F:2DA0 loc_627: ; xref 273F:2E6B
-273F:2DA0 ú32 D2 xor dl,dl ; Zero register
-273F:2DA2 2E: 88 16 2058 mov cs:data_233,dl ; (273F:2058=0)
-273F:2DA7 2E: 88 16 2059 mov cs:data_234,dl ; (273F:2059=0)
-273F:2DAC 2E: 88 16 205A mov cs:data_235,dl ; (273F:205A=0)
-273F:2DB1 2E: 88 16 205B mov cs:data_236,dl ; (273F:205B=0)
-273F:2DB6 F6 D2 not dl
-273F:2DB8 51 push cx
-273F:2DB9 57 push di
-273F:2DBA 2E: 8A 2E 1509 mov ch,cs:data_220 ; (273F:1509=0)
-273F:2DBF loc_628: ; xref 273F:2E2D
-273F:2DBF 33 C0 xor ax,ax ; Zero register
-273F:2DC1 8A 07 mov al,[bx]
-273F:2DC3 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2DC5 F7 D0 not ax
-273F:2DC7 22 E2 and ah,dl
-273F:2DC9 8B D0 mov dx,ax
-273F:2DCB AC lodsb ; String [si] to al
-273F:2DCC 32 E4 xor ah,ah ; Zero register
-273F:2DCE D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2DD0 2E: 0A 26 2058 or ah,cs:data_233 ; (273F:2058=0)
-273F:2DD5 2E: A2 2058 mov cs:data_233,al ; (273F:2058=0)
-273F:2DD9 26: 20 35 and es:[di],dh
-273F:2DDC 26: 08 25 or es:[di],ah
-273F:2DDF 83 C7 01 add di,1
-273F:2DE2 AC lodsb ; String [si] to al
-273F:2DE3 32 E4 xor ah,ah ; Zero register
-273F:2DE5 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2DE7 2E: 0A 26 2059 or ah,cs:data_234 ; (273F:2059=0)
-273F:2DEC 2E: A2 2059 mov cs:data_234,al ; (273F:2059=0)
-273F:2DF0 26: 20 35 and es:[di],dh
-273F:2DF3 26: 08 25 or es:[di],ah
-273F:2DF6 83 C7 01 add di,1
-273F:2DF9 AC lodsb ; String [si] to al
-273F:2DFA 32 E4 xor ah,ah ; Zero register
-273F:2DFC D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2DFE 2E: 0A 26 205A or ah,cs:data_235 ; (273F:205A=0)
-273F:2E03 2E: A2 205A mov cs:data_235,al ; (273F:205A=0)
-273F:2E07 26: 20 35 and es:[di],dh
-273F:2E0A 26: 08 25 or es:[di],ah
-273F:2E0D 83 C7 01 add di,1
-273F:2E10 AC lodsb ; String [si] to al
-273F:2E11 32 E4 xor ah,ah ; Zero register
-273F:2E13 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2E15 2E: 0A 26 205B or ah,cs:data_236 ; (273F:205B=0)
-273F:2E1A 2E: A2 205B mov cs:data_236,al ; (273F:205B=0)
-273F:2E1E 26: 20 35 and es:[di],dh
-273F:2E21 26: 08 25 or es:[di],ah
-273F:2E24 83 C7 01 add di,1
-273F:2E27 83 C3 01 add bx,1
-273F:2E2A 80 ED 01 sub ch,1
-273F:2E2D 75 90 jnz loc_628 ; Jump if not zero
-273F:2E2F 2E: A0 2058 mov al,cs:data_233 ; (273F:2058=0)
-273F:2E33 26: 20 15 and es:[di],dl
-273F:2E36 26: 08 05 or es:[di],al
-273F:2E39 83 C7 01 add di,1
-273F:2E3C 2E: A0 2059 mov al,cs:data_234 ; (273F:2059=0)
-273F:2E40 26: 20 15 and es:[di],dl
-273F:2E43 26: 08 05 or es:[di],al
-273F:2E46 83 C7 01 add di,1
-273F:2E49 2E: A0 205A mov al,cs:data_235 ; (273F:205A=0)
-273F:2E4D 26: 20 15 and es:[di],dl
-273F:2E50 26: 08 05 or es:[di],al
-273F:2E53 83 C7 01 add di,1
-273F:2E56 2E: A0 205B mov al,cs:data_236 ; (273F:205B=0)
-273F:2E5A 26: 20 15 and es:[di],dl
-273F:2E5D 26: 08 05 or es:[di],al
-273F:2E60 5F pop di
-273F:2E61 ú81 C7 00A0 add di,data_1460e ; (FF12:00A0=0)
-273F:2E65 59 pop cx
-273F:2E66 80 ED 01 sub ch,1
-273F:2E69 74 03 jz loc_629 ; Jump if zero
-273F:2E6B E9 FF32 jmp loc_627 ; (2DA0)
-273F:2E6E loc_629: ; xref 273F:2E69
-273F:2E6E E9 0129 jmp loc_635 ; (2F9A)
-273F:2E71 loc_630: ; xref 273F:2D95
-273F:2E71 1E push ds
-273F:2E72 06 push es
-273F:2E73 A1 4CE4 mov ax, data_segment2
-273F:2E76 8E C0 mov es,ax
-273F:2E78 1F pop ds
-273F:2E79 loc_631: ; xref 273F:2F97
-273F:2E79 ú32 D2 xor dl,dl ; Zero register
-273F:2E7B 2E: 88 16 2058 mov cs:data_233,dl ; (273F:2058=0)
-273F:2E80 2E: 88 16 2059 mov cs:data_234,dl ; (273F:2059=0)
-273F:2E85 2E: 88 16 205A mov cs:data_235,dl ; (273F:205A=0)
-273F:2E8A 2E: 88 16 205B mov cs:data_236,dl ; (273F:205B=0)
-273F:2E8F F6 D2 not dl
-273F:2E91 51 push cx
-273F:2E92 53 push bx
-273F:2E93 56 push si
-273F:2E94 57 push di
-273F:2E95 2E: 8A 2E 1509 mov ch,cs:data_220 ; (273F:1509=0)
-273F:2E9A 2E: F7 06 1500 0080 test word ptr cs:data_215,80h ; (273F:1500=0)
-273F:2EA1 75 34 jnz loc_632 ; Jump if not zero
-273F:2EA3 2E: 03 36 1500 add si,word ptr cs:data_215 ; (273F:1500=0)
-273F:2EA8 2E: 03 1E 1502 add bx,cs:data_216 ; (273F:1502=0)
-273F:2EAD 8A 17 mov dl,[bx]
-273F:2EAF D3 E2 shl dx,cl ; Shift w/zeros fill
-273F:2EB1 F6 D2 not dl
-273F:2EB3 83 C3 01 add bx,1
-273F:2EB6 AC lodsb ; String [si] to al
-273F:2EB7 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EB9 2E: A2 2058 mov cs:data_233,al ; (273F:2058=0)
-273F:2EBD AC lodsb ; String [si] to al
-273F:2EBE D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EC0 2E: A2 2059 mov cs:data_234,al ; (273F:2059=0)
-273F:2EC4 AC lodsb ; String [si] to al
-273F:2EC5 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EC7 2E: A2 205A mov cs:data_235,al ; (273F:205A=0)
-273F:2ECB AC lodsb ; String [si] to al
-273F:2ECC D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2ECE 2E: A2 205B mov cs:data_236,al ; (273F:205B=0)
-273F:2ED2 F6 C5 FF test ch,0FFh
-273F:2ED5 74 78 jz loc_633 ; Jump if zero
-273F:2ED7 loc_632: ; xref 273F:2EA1, 2F45
-273F:2ED7 33 C0 xor ax,ax ; Zero register
-273F:2ED9 8A 07 mov al,[bx]
-273F:2EDB D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EDD F7 D0 not ax
-273F:2EDF 22 E2 and ah,dl
-273F:2EE1 8B D0 mov dx,ax
-273F:2EE3 AC lodsb ; String [si] to al
-273F:2EE4 32 E4 xor ah,ah ; Zero register
-273F:2EE6 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EE8 2E: 0A 26 2058 or ah,cs:data_233 ; (273F:2058=0)
-273F:2EED 2E: A2 2058 mov cs:data_233,al ; (273F:2058=0)
-273F:2EF1 26: 20 35 and es:[di],dh
-273F:2EF4 26: 08 25 or es:[di],ah
-273F:2EF7 83 C7 01 add di,1
-273F:2EFA AC lodsb ; String [si] to al
-273F:2EFB 32 E4 xor ah,ah ; Zero register
-273F:2EFD D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2EFF 2E: 0A 26 2059 or ah,cs:data_234 ; (273F:2059=0)
-273F:2F04 2E: A2 2059 mov cs:data_234,al ; (273F:2059=0)
-273F:2F08 26: 20 35 and es:[di],dh
-273F:2F0B 26: 08 25 or es:[di],ah
-273F:2F0E 83 C7 01 add di,1
-273F:2F11 AC lodsb ; String [si] to al
-273F:2F12 32 E4 xor ah,ah ; Zero register
-273F:2F14 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2F16 2E: 0A 26 205A or ah,cs:data_235 ; (273F:205A=0)
-273F:2F1B 2E: A2 205A mov cs:data_235,al ; (273F:205A=0)
-273F:2F1F 26: 20 35 and es:[di],dh
-273F:2F22 26: 08 25 or es:[di],ah
-273F:2F25 83 C7 01 add di,1
-273F:2F28 AC lodsb ; String [si] to al
-273F:2F29 32 E4 xor ah,ah ; Zero register
-273F:2F2B D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:2F2D 2E: 0A 26 205B or ah,cs:data_236 ; (273F:205B=0)
-273F:2F32 2E: A2 205B mov cs:data_236,al ; (273F:205B=0)
-273F:2F36 26: 20 35 and es:[di],dh
-273F:2F39 26: 08 25 or es:[di],ah
-273F:2F3C 83 C7 01 add di,1
-273F:2F3F 83 C3 01 add bx,1
-273F:2F42 80 ED 01 sub ch,1
-273F:2F45 75 90 jnz loc_632 ; Jump if not zero
-273F:2F47 2E: F6 06 1504 FF test cs:data_217,0FFh ; (273F:1504=0)
-273F:2F4D 74 31 jz loc_634 ; Jump if zero
-273F:2F4F loc_633: ; xref 273F:2ED5
-273F:2F4F 2E: A0 2058 mov al,cs:data_233 ; (273F:2058=0)
-273F:2F53 26: 20 15 and es:[di],dl
-273F:2F56 26: 08 05 or es:[di],al
-273F:2F59 83 C7 01 add di,1
-273F:2F5C 2E: A0 2059 mov al,cs:data_234 ; (273F:2059=0)
-273F:2F60 26: 20 15 and es:[di],dl
-273F:2F63 26: 08 05 or es:[di],al
-273F:2F66 83 C7 01 add di,1
-273F:2F69 2E: A0 205A mov al,cs:data_235 ; (273F:205A=0)
-273F:2F6D 26: 20 15 and es:[di],dl
-273F:2F70 26: 08 05 or es:[di],al
-273F:2F73 83 C7 01 add di,1
-273F:2F76 2E: A0 205B mov al,cs:data_236 ; (273F:205B=0)
-273F:2F7A 26: 20 15 and es:[di],dl
-273F:2F7D 26: 08 05 or es:[di],al
-273F:2F80 loc_634: ; xref 273F:2F4D
-273F:2F80 5F pop di
-273F:2F81 ú81 C7 00A0 add di,data_1460e ; (FF12:00A0=0)
-273F:2F85 5E pop si
-273F:2F86 2E: 03 36 1505 add si,cs:data_218 ; (273F:1505=0)
-273F:2F8B 5B pop bx
-273F:2F8C 2E: 03 1E 1507 add bx,cs:data_219 ; (273F:1507=0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 119
-
-273F:2F91 59 pop cx
-273F:2F92 80 ED 01 sub ch,1
-273F:2F95 74 03 jz loc_635 ; Jump if zero
-273F:2F97 E9 FEDF jmp loc_631 ; (2E79)
-273F:2F9A loc_635: ; xref 273F:2E6E, 2F95
-273F:2F9A 1F pop ds
-
-273F:2F9B loc_ret_636: ; xref 273F:2CAA, 2CD0, 2D2A, 2D55
-273F:2F9B C3 retn
-273F:2F9C loc_637: ; xref 273F:8E45
-273F:2F9C úD1 EF shr di,1 ; Shift w/zeros fill
-273F:2F9E D1 EB shr bx,1 ; Shift w/zeros fill
-273F:2FA0 D1 EB shr bx,1 ; Shift w/zeros fill
-273F:2FA2 D1 EB shr bx,1 ; Shift w/zeros fill
-273F:2FA4 A1 4CE4 mov ax, data_segment2
-273F:2FA7 8E C0 mov es,ax
-273F:2FA9 BA 0008 mov dx,8
-273F:2FAC loc_638: ; xref 273F:2FC2
-273F:2FAC 57 push di
-273F:2FAD 8B CB mov cx,bx
-
-273F:2FAF locloop_639: ; xref 273F:2FBA
-273F:2FAF 26: 8A 45 02 mov al,es:[di+2]
-273F:2FB3 26: 30 45 01 xor es:[di+1],al
-273F:2FB7 83 C7 04 add di,4
-273F:2FBA E2 F3 loop locloop_639 ; Loop if cx > 0
-
-273F:2FBC 5F pop di
-273F:2FBD ú81 C7 00A0 add di,data_68e ; (0031:00A0=0)
-273F:2FC1 4A dec dx
-273F:2FC2 75 E8 jnz loc_638 ; Jump if not zero
-273F:2FC4 C3 retn
-
- ega_add_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2081
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:2FC5 sub_68 proc near
-273F:2FC5 1E push ds
-273F:2FC6 A1 4CE4 mov ax, data_segment2
-273F:2FC9 8E D8 mov ds,ax
-273F:2FCB 33 F6 xor si,si ; Zero register
-273F:2FCD 33 FF xor di,di ; Zero register
-273F:2FCF B8 0802 mov ax,802h
-273F:2FD2 B9 0004 mov cx,4
-
-273F:2FD5 locloop_640: ; xref 273F:2FEA
-273F:2FD5 51 push cx
-273F:2FD6 56 push si
-273F:2FD7 57 push di
-273F:2FD8 EF out dx,ax ; port 3C4h, EGA sequencr index
- ; al = 2, map mask register
-273F:2FD9 B9 0140 mov cx,140h
-
-273F:2FDC locloop_641: ; xref 273F:2FE0
-273F:2FDC A4 movsb ; Mov [si] to es:[di]
-273F:2FDD 83 C6 03 add si,3
-273F:2FE0 E2 FA loop locloop_641 ; Loop if cx > 0
-
-273F:2FE2 5F pop di
-273F:2FE3 5E pop si
-273F:2FE4 83 C6 01 add si,1
-273F:2FE7 D0 EC shr ah,1 ; Shift w/zeros fill
-273F:2FE9 59 pop cx
-273F:2FEA E2 E9 loop locloop_640 ; Loop if cx > 0
-
-273F:2FEC 1F pop ds
-273F:2FED 80 2E 4BF0 01 sub byte ptr ds:[4BF0h],1 ; (273F:4BF0=3)
-273F:2FF2 C3 retn
- sub_68 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_toggle_menu_highlight proc near
-
-273F:2FF3 D1 EF shr di,1 ; Shift w/zeros fill
-273F:2FF5 83 E7 FC and di,0FFFCh
-273F:2FF8 B1 03 mov cl,3
-273F:2FFA 83 C3 07 add bx,7
-273F:2FFD D3 EB shr bx,cl ; Shift w/zeros fill
-273F:2FFF A1 4CE4 mov ax, data_segment2
-273F:3002 8E C0 mov es,ax
-273F:3004 BA 0008 mov dx,8
-273F:3007 loc_642: ; xref 273F:3022
-273F:3007 57 push di
-273F:3008 8B CB mov cx,bx
-
-273F:300A locloop_643: ; xref 273F:301A
-273F:300A 26: 8A 05 mov al,es:[di]
-273F:300D F6 D0 not al
-273F:300F 26: 30 45 01 xor es:[di+1],al
-273F:3013 26: 30 45 02 xor es:[di+2],al
-273F:3017 83 C7 04 add di,4
-273F:301A E2 EE loop locloop_643 ; Loop if cx > 0
-
-273F:301C 5F pop di
-273F:301D 81 C7 00A0 add di,0A0h
-273F:3021 4A dec dx
-273F:3022 75 E3 jnz loc_642 ; Jump if not zero
-273F:3024 C3 retn
-
- ega_toggle_menu_highlight endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:90CB
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3025 sub_69 proc near
-273F:3025 1E push ds
-273F:3026 A1 4CE4 mov ax, data_segment2
-273F:3029 8E C0 mov es,ax
-273F:302B úBF 1F48 mov di,data_1407e ; (44E4:1F48=0)
-273F:302E B8 44E4 mov ax, ega_talk_frame_seg
-273F:3031 8E D8 mov ds,ax
-273F:3033 úBE 0030 mov si,offset data_1405 ; (44E4:0030=3Fh)
-273F:3036 BB 0020 mov bx,20h
-273F:3039 E8 F417 call sub_63 ; (2453)
-273F:303C E8 F414 call sub_63 ; (2453)
-273F:303F E8 F411 call sub_63 ; (2453)
-273F:3042 úBE 000C mov si,offset data_1404 ; (44E4:000C=0)
-273F:3045 E8 F40B call sub_63 ; (2453)
-273F:3048 E8 F408 call sub_63 ; (2453)
-273F:304B 1F pop ds
-273F:304C C3 retn
- sub_69 endp
-
-273F:304D 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:304E vga_show_screen proc near
-
-273F:304E 80 0E 11D0 02 or menubar_state, 2
-273F:3053 E8FD06 call sub_unknown_1
-
-273F:3056 F6 06 4BF0 FF test byte ptr [4BF0h], 0ffh
-273F:305B 74 03 jz vga_loc_1
-273F:305D E8 0F 09 call menubar_copy_to_screen
-273F:3060 BE 0A00 vga_loc_1: mov si, MENUBAR_BLOCK_SIZE ; Set SI and DI to after menubar area
-273F:3063 8B FE mov di, si
-273F:3065 B9 060A mov cx, 060Ah ; 10x6 sets of 32x32 rectangles
-273F:3068 8C DA mov dx, ds ; Make a backup of DS
-273F:306A A1 0DB0 mov ax, screen_start_seg
-273F:306D 8E C0 mov es, ax
-273F:306F BB DC 07 mov bx, offset display_mask
-
-273F:3072 loc_644:
-273F:3072 F6 07 01 test byte ptr [bx],1 ; Is bit 0 turned on?
-273F:3075 74 23 jz loc_646 ; No, so jump
-273F:3077 80 27 FE and byte ptr [bx],0FEh ; Clear bit 0
-
-; The following code copies a rectangle from (x+0,y+0) - (x+31,y+31) from data_segment2 to screen_start_seg
-
-273F:307A 57 push di
-273F:307B 51 push cx
-273F:307C A1 4CE4 mov ax, data_segment2 ; Get screen source from data_segment2
-273F:307F 8E D8 mov ds, ax
-273F:3081 B8 0020 mov ax,20h ; Number of lines
-273F:3084 loc_645:
-273F:3084 B9 0010 mov cx,10h ; Rep when cx >0 Mov [si] to es:[di]
-273F:3087 F3/ A5 rep movsw ; (moves first 32 pixels of line)
-273F:3089 81 C6 0120 add si,120h ; Move to start of next line
-273F:308D 81 C7 0120 add di,120h
-273F:3091 2D 0001 sub ax,1 ; Decrement number of lines to do
-273F:3094 75 EE jnz loc_645 ; Jump if not zero
-273F:3096 8E DA mov ds,dx ; Restore data segment
-273F:3098 59 pop cx
-273F:3099 5F pop di
-
-273F:309A loc_646:
-273F:309A 83 C7 20 add di,20h ; Move to next rectangle position
-273F:309D 8B F7 mov si,di ; Match source to destination
-273F:309F 83 C3 01 add bx,1 ; Move to next mask position
-273F:30A2 80 E9 01 sub cl,1 ; Subtract remaining horiz blocks
-273F:30A5 75 CB jnz loc_644 ; Jump if not yet end of line
-273F:30A7 81 C7 26C0 add di,26C0h ; Reset soruce/dest to start of next
-273F:30AB 8B F7 mov si,di ; rect vertically at start of line
-273F:30AD 83 C3 08 add bx,8
-273F:30B0 B1 0A mov cl,0Ah ; Number of horizontal rectangles
-273F:30B2 80 ED 01 sub ch,1 ; Decrement remaining vertical rectangles
-273F:30B5 75 BB jnz loc_644 ; Jump if not done
-
-273F:30B7 E8 0704 call sub_73 ; (37BE)
-273F:30BA A1 11D6 mov ax, mouse_x2
-273F:30BD 39 06 11D1 cmp mouse_x, ax
-273F:30C1 75 09 jne loc_647 ; Jump if not equal
-273F:30C3 A1 11D8 mov ax, mouse_y2
-273F:30C6 39 06 11D3 cmp mouse_y, ax
-273F:30CA 74 10 je loc_648 ; Jump if equal
-273F:30CC loc_647: ; xref 273F:30C1
-273F:30CC A1 11D1 mov ax, mouse_x
-273F:30CF A3 11D6 mov mouse_x2, ax
-273F:30D2 A1 11D3 mov ax, mouse_y
-273F:30D5 A3 11D8 mov mouse_y2, ax
-273F:30D8 FF 16 075E call word ptr ds:data_18e ; (0000:075E=0)
-273F:30DC loc_648: ; xref 273F:30CA
-273F:30DC 80 26 11D0 FD and byte ptr ds:data_26e,0FDh ; (0000:11D0=80h)
-
-273F:30E1 loc_ret_649: ; xref 273F:30EC
-273F:30E1 C3 retn
-
- vga_show_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [fade_out_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:30E2 vga_fade_out proc near
-273F:30E2 80 26 11D0 CF and menubar_state, 0CFh ; (273F:11D0=56h)
-273F:30E7 F6 06 073C 20 test byte ptr ds:[73Ch],20h ; (273F:073C=17h) ' '
-273F:30EC 75 F3 jnz loc_ret_649 ; Jump if not zero
-273F:30EE 80 0E 073C 20 or byte ptr ds:[73Ch],20h ; (273F:073C=17h) ' '
-
-273F:30F3 úBE 1457 mov si, offset unprocessed_vga_palette
-273F:30F6 úBF 0DB5 mov di, offset processed_vga_palette
-273F:30F9 1E push ds
-273F:30FA 07 pop es
-273F:30FB B9 0156 mov cx,156h
-273F:30FE F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:3100 B9 0040 mov cx,40h
-
-273F:3103 locloop_650: ; xref 273F:3156
-273F:3103 51 push cx
-273F:3104 úBB 0DB5 mov bx, offset processed_vga_palette
-273F:3107 B9 00E4 mov cx,0E4h
-
-273F:310A locloop_651: ; xref 273F:3129
-273F:310A F6 07 3F test byte ptr [bx],3Fh ; '?'
-273F:310D 74 03 jz loc_652 ; Jump if zero
-273F:310F 80 2F 01 sub byte ptr [bx],1
-273F:3112 loc_652: ; xref 273F:310D
-273F:3112 F6 47 01 3F test byte ptr [bx+1],3Fh ; '?'
-273F:3116 74 04 jz loc_653 ; Jump if zero
-273F:3118 80 6F 01 01 sub byte ptr [bx+1],1
-273F:311C loc_653: ; xref 273F:3116
-273F:311C F6 47 02 3F test byte ptr [bx+2],3Fh ; '?'
-273F:3120 74 04 jz loc_654 ; Jump if zero
-273F:3122 80 6F 02 01 sub byte ptr [bx+2],1
-273F:3126 loc_654: ; xref 273F:3120
-273F:3126 83 C3 03 add bx,3
-273F:3129 E2 DF loop locloop_651 ; Loop if cx > 0
-
-273F:312B E8 002B call wait_for_video_port ; (3159)
-273F:312E 56 push si
-273F:312F 32 C0 xor al,al ; Zero register
-273F:3131 BA 03C8 mov dx,3C8h
-273F:3134 EE out dx,al ; port 3C8h, VGA pel address
-273F:3135 42 inc dx
-273F:3136 úBE 0DB5 mov si, offset processed_vga_palette
-273F:3139 B9 0156 mov cx,156h
-
-273F:313C locloop_655: ; xref 273F:313E
-273F:313C AC lodsb ; String [si] to al
-273F:313D EE out dx,al ; port 3C9h, VGA pel data reg
-273F:313E E2 FC loop locloop_655 ; Loop if cx > 0
-
-273F:3140 E8 0016 call wait_for_video_port ; (3159)
-273F:3143 B0 72 mov al,72h ; 'r'
-273F:3145 BA 03C8 mov dx,3C8h
-273F:3148 EE out dx,al ; port 3C8h, VGA pel address
-273F:3149 42 inc dx
-273F:314A úBE 0F0B mov si, offset processed_vga_palette + 156h
-273F:314D B9 0156 mov cx,156h
-
-273F:3150 locloop_656: ; xref 273F:3152
-273F:3150 AC lodsb ; String [si] to al
-273F:3151 EE out dx,al ; port 3C9h, VGA pel data reg
-273F:3152 E2 FC loop locloop_656 ; Loop if cx > 0
-
-273F:3154 5E pop si
-273F:3155 59 pop cx
-273F:3156 E2 AB loop locloop_650 ; Loop if cx > 0
-
-273F:3158 C3 retn
- vga_fade_out endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:312B, 3140, 31A5, 31BA, 3C86
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3159 wait_for_video_port proc near
-273F:3159 50 push ax
-273F:315A 06 push es
-273F:315B 52 push dx
-273F:315C B8 0040 mov ax,40h
-273F:315F 8E C0 mov es,ax
-273F:3161 26: 8B 16 0063 mov dx,es:video_port ; (0040:0063=3D4h)
-273F:3166 80 C2 06 add dl,6
-273F:3169 loc_657: ; xref 273F:316C
-273F:3169 EC in al,dx ; port 3DAh, CGA/EGA vid status
-273F:316A A8 08 test al,8
-273F:316C 74 FB jz loc_657 ; Jump if zero
-273F:316E loc_658: ; xref 273F:3171
-273F:316E EC in al,dx ; port 3DAh, CGA/EGA vid status
-273F:316F A8 08 test al,8
-273F:3171 75 FB jnz loc_658 ; Jump if not zero
-273F:3173 5A pop dx
-273F:3174 07 pop es
-273F:3175 58 pop ax
-273F:3176 C3 retn
- wait_for_video_port endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [fade_in_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_fade_in proc near
-273F:3177 80 26 073C DF and byte ptr ds:[73Ch],0DFh ; (273F:073C=17h)
-273F:317C 1E push ds
-273F:317D 07 pop es
-273F:317E úBF 0DB5 mov di, offset processed_vga_palette
-273F:3181 B9 0156 mov cx, 156h ; Only first 228 palette entries used
-273F:3184 33 C0 xor ax,ax ; Zero register
-273F:3186 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-
-273F:3188 úBE 0DB5 mov si, offset processed_vga_palette
-273F:318B úBF 1457 mov di, offset unprocessed_vga_palette
-273F:318E B9 0040 mov cx,40h ; Number of fade-in increments
-
-273F:3191 locloop_659:
-273F:3191 51 push cx
-273F:3192 B9 02AC mov cx,2ACh ; 228*3 (each paleete entry is 3 bytes)
-273F:3195 33 DB xor bx,bx
-; Update the RGB components of each palette entry by 1 unless a colour has already reached it's final value
-273F:3197 locloop_660:
-273F:3197 8A 00 mov al,[bx+si] ; Get in current palette intensity
-273F:3199 3A 01 cmp al,[bx+di] ; Has it reached final intensity?
-273F:319B 74 03 je loc_661 ; Jump if equal
-273F:319D 80 00 01 add byte ptr [bx+si],1 ; Increment the intensity
-273F:31A0 loc_661:
-273F:31A0 83 C3 01 add bx,1
-273F:31A3 E2 F2 loop locloop_660 ; Loop if cx > 0
-
-273F:31A5 E8 FFB1 call wait_for_video_port ; (3159)
-273F:31A8 56 push si
-273F:31A9 32 C0 xor al,al ; Zero register
-273F:31AB BA 03C8 mov dx,3C8h
-273F:31AE EE out dx,al ; port 3C8h, VGA pel address
-273F:31AF 42 inc dx
-; Output the first half ot the new set of palette entries
-273F:31B0 úBE 0DB5 mov si,0DB5h ; (273F:0DB5=0C7h)
-273F:31B3 B9 0156 mov cx,156h
-273F:31B6 locloop_662: ; xref 273F:31B8
-273F:31B6 AC lodsb ; String [si] to al
-273F:31B7 EE out dx,al ; port 3C9h, VGA pel data reg
-273F:31B8 E2 FC loop locloop_662 ; Loop if cx > 0
-
-273F:31BA E8 FF9C call wait_for_video_port ; (3159)
-273F:31BD B0 72 mov al,72h ; 'r'
-273F:31BF BA 03C8 mov dx,3C8h
-273F:31C2 EE out dx,al ; port 3C8h, VGA pel address
-273F:31C3 42 inc dx
-
-; Output the second half ot the new set of palette entries
-273F:31C4 úBE 0F0B mov si, offset processed_vga_palette + 156h
-273F:31C7 B9 0156 mov cx,156h
-273F:31CA locloop_663: ; xref 273F:31CC
-273F:31CA AC lodsb ; String [si] to al
-273F:31CB EE out dx,al ; port 3C9h, VGA pel data reg
-273F:31CC E2 FC loop locloop_663 ; Loop if cx > 0
-
-; Loop for remaining increments of fade-in sequence
-273F:31CE 5E pop si
-273F:31CF 59 pop cx
-273F:31D0 E2 BF loop locloop_659 ; Loop if cx > 0
-
-273F:31D2 C3 retn
- vga_fade_in endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:312B, 3140, 31A5, 31BA, 3C86
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_set_lower_palette proc near
-
-273F:31D3 80 26 073C DF and byte ptr ds:[73Ch],0DFh ; (273F:073C=17h)
-273F:31D8 1E push ds
-273F:31D9 07 pop es
-273F:31DA úBA 1457 mov dx,offset unprocessed_vga_palette
-273F:31DD B8 1012 mov ax,1012h
-273F:31E0 BB 0000 mov bx,0
-273F:31E3 B9 00E4 mov cx,0E4h
-273F:31E6 CD 10 int 10h ; Video display ah=functn 10h
- ; set cx color registers from
- ; ptr es:dx, bx=first reg
-273F:31E8 C3 retn
-
- vga_set_lower_palette endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:312B, 3140, 31A5, 31BA, 3C86
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_empty_palette proc near
-
-273F:31E9 80 0E 073C 20 or byte ptr ds:[73Ch],20h
-273F:31EE 1E push ds
-273F:31EF 07 pop es
-273F:31F0 úBF 0DB5 mov di, offset processed_vga_palette
-273F:31F3 B9 0156 mov cx,156h
-273F:31F6 33 C0 xor ax,ax ; Zero register
-273F:31F8 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:31FA úBA 0DB5 mov dx, offset processed_vga_palette
-273F:31FD B8 1012 mov ax,1012h
-273F:3200 BB 0000 mov bx,0
-273F:3203 B9 00E4 mov cx,0E4h
-273F:3206 CD 10 int 10h ; Video display ah=functn 10h
- ; set cx color registers from
- ; ptr es:dx, bx=first reg
-273F:3208 C3 retn
-
- vga_empty_palette endp
-
- vga_display2_character proc near
-273F:3209 1E push ds
-273F:320A 57 push di
-273F:320B 56 push si
-273F:320C 98 cbw ; Convrt byte to word
-273F:320D D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:320F D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:3211 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:3213 8B F0 mov si,ax
-273F:3215 8B 16 4CF0 mov dx, font2_segment
-273F:3219 8E DA mov ds,dx
-273F:321B AC lodsb ; String [si] to al
-273F:321C 32 E4 xor ah,ah ; Zero register
-273F:321E 50 push ax
-273F:321F B2 07 mov dl,7
-273F:3221 loc_664: ; xref 273F:3239
-273F:3221 AC lodsb ; String [si] to al
-273F:3222 B9 0008 mov cx,8
-
-273F:3225 locloop_665: ; xref 273F:322F
-273F:3225 D0 E0 shl al,1 ; Shift w/zeros fill
-273F:3227 73 03 jnc loc_666 ; Jump if carry=0
-273F:3229 26: 88 3D mov es:[di],bh
-273F:322C loc_666: ; xref 273F:3227
-273F:322C 83 C7 01 add di,1
-273F:322F E2 F4 loop locloop_665 ; Loop if cx > 0
-
-273F:3231 03 FD add di,bp
-273F:3233 83 EF 08 sub di,8
-273F:3236 80 EA 01 sub dl,1
-273F:3239 75 E6 jnz loc_664 ; Jump if not zero
-273F:323B 58 pop ax
-273F:323C 5E pop si
-273F:323D 5F pop di
-273F:323E 1F pop ds
-273F:323F 03 F8 add di,ax
-273F:3241 C3 retn
- vga_display2_character endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- vga_talk_dialog proc near
-273F:3242 1E push ds
-273F:3243 A1 11C0 mov ax, talk_dialog_top
-273F:3246 50 push ax
-273F:3247 05 0008 add ax, 8
-273F:324A 8B D0 mov dx, ax
-273F:324C D1 E2 shl dx, 1 ; Shift w/zeros fill
-273F:324E D1 E2 shl dx, 1 ; Shift w/zeros fill
-273F:3250 03 C2 add ax, dx
-273F:3252 B1 06 mov cl, 6
-273F:3254 D3 E0 shl ax, cl ; Shift w/zeros fill
-273F:3256 8B F8 mov di, ax
-273F:3258 03 3E 11C2 add di, talk_dialog_left
-273F:325C B8 0007 mov ax, 7
-273F:325F F7 26 B9FD mul data_1122 ; dx:ax = data * ax
-273F:3263 05 0013 add ax, 19 ; Number of lines?
-273F:3266 8B D0 mov dx, ax
-273F:3268 A1 4CE4 mov ax, data_segment2
-273F:326B 8E C0 mov es, ax
-273F:326D A1 4CE6 mov ax, talk_dialog_buffer
-273F:3270 8E D8 mov ds, ax
-273F:3272 úBE 0000 mov si, 0
-273F:3275 loc_667: ; xref 273F:3281
-273F:3275 B9 0040 mov cx, TALK_DIALOG_WIDTH/2
-273F:3278 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:327A 81 C7 00C0 add di, FULL_SCREEN_WIDTH-TALK_DIALOG_WIDTH
-273F:327E 80 EA 01 sub dl, 1
-273F:3281 75 F2 jnz loc_667 ; Jump if not zero
-273F:3283 5B pop bx
-273F:3284 1F pop ds
-273F:3285 8B 16 11C6 mov dx, talk_dialog_height
-273F:3289 A1 11C2 mov ax, talk_dialog_left
-273F:328C BD 0080 mov bp, 80h
-273F:328F B1 01 mov cl, 1
-273F:3291 E8 D8FB call sub_22 ; Specify non-redraw area
-273F:3294 C3 retn
- vga_talk_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called by the table entry [draw_dialog_proc]
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-; DL = number of lines?
-;???? Not sure about this method.
-
- vga_draw_dialog proc near
-
-273F:3295 32 E4 xor ah,ah ; Zero register
-273F:3297 32 FF xor bh,bh ; Zero register
-273F:3299 32 ED xor ch,ch ; Zero register
-273F:329B 32 F6 xor dh,dh ; Zero register
-273F:329D 52 push dx
-273F:329E 51 push cx
-273F:329F 53 push bx
-273F:32A0 50 push ax
-273F:32A1 8A EA mov ch,dl
-273F:32A3 93 xchg bx,ax
-273F:32A4 32 E4 xor ah,ah ; Zero register
-273F:32A6 BA 0A00 mov dx,0A00h
-273F:32A9 F7 E2 mul dx ; dx:ax = reg * ax
-273F:32AB 2D 03C0 sub ax,3C0h
-273F:32AE 3D 0640 cmp ax,640h
-273F:32B1 75 03 jne loc_668 ; Jump if not equal
-273F:32B3 05 03C0 add ax,3C0h
-273F:32B6 loc_668: ; xref 273F:32B1
-273F:32B6 32 FF xor bh,bh ; Zero register
-273F:32B8 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32BA D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32BC D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32BE 03 C3 add ax,bx
-273F:32C0 2D 0003 sub ax,3
-273F:32C3 8B F8 mov di,ax
-273F:32C5 A1 4CE4 mov ax, data_segment2
-273F:32C8 8E C0 mov es,ax
-273F:32CA 8A D9 mov bl,cl
-273F:32CC 32 FF xor bh,bh ; Zero register
-273F:32CE D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32D0 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32D2 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:32D4 83 C3 04 add bx,4
-273F:32D7 8A D5 mov dl,ch
-273F:32D9 32 F6 xor dh,dh ; Zero register
-273F:32DB 8B C2 mov ax,dx
-273F:32DD D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:32DF D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:32E1 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:32E3 F7 C5 FFFF test bp,0FFFFh
-273F:32E7 75 02 jnz loc_669 ; Jump if not zero
-273F:32E9 2B D0 sub dx,ax
-273F:32EB loc_669: ; xref 273F:32E7
-273F:32EB 83 C2 05 add dx,5
-273F:32EE E8 001A call draw_dialog_frame
-273F:32F1 58 pop ax
-273F:32F2 2D 0001 sub ax,1
-273F:32F5 5B pop bx
-273F:32F6 83 EB 02 sub bx,2
-273F:32F9 73 02 jnc loc_670 ; Jump if carry=0
-273F:32FB 33 DB xor bx,bx ; Zero register
-273F:32FD loc_670: ; xref 273F:32F9
-273F:32FD 5D pop bp
-273F:32FE 83 C5 04 add bp,4
-273F:3301 5A pop dx
-273F:3302 83 C2 04 add dx,4
-273F:3305 B1 81 mov cl,81h
-273F:3307 E8 D879 call sub_21 ; (0B83)
-273F:330A C3 retn
-
- vga_draw_menu endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:32EE, 339D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:330B draw_dialog_frame proc near
-273F:330B 1E push ds
-273F:330C B8 44EA mov ax, dialog_segment
-273F:330F 8E D8 mov ds,ax
-273F:3311 33 F6 xor si,si ; Zero register
-273F:3313 BD 0009 mov bp,9
-273F:3316 loc_671: ; xref 273F:3331
-273F:3316 57 push di
-273F:3317 B9 0007 mov cx,7
-273F:331A F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:331C AC lodsb ; String [si] to al
-273F:331D 8B CB mov cx,bx
-273F:331F 83 C1 02 add cx,2
-273F:3322 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:3324 B9 0009 mov cx,9
-273F:3327 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3329 5F pop di
-273F:332A ú81 C7 0140 add di, SCREEN_WIDTH
-273F:332E 83 ED 01 sub bp,1
-273F:3331 75 E3 jnz loc_671 ; Jump if not zero
-273F:3333 loc_672: ; xref 273F:334D
-273F:3333 56 push si
-273F:3334 57 push di
-273F:3335 B9 0009 mov cx,9
-273F:3338 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:333A AC lodsb ; String [si] to al
-273F:333B 8B CB mov cx,bx
-273F:333D F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:333F B9 0009 mov cx,9
-273F:3342 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3344 5F pop di
-273F:3345 5E pop si
-273F:3346 ú81 C7 0140 add di, SCREEN_WIDTH
-273F:334A 83 EA 01 sub dx,1
-273F:334D 75 E4 jnz loc_672 ; Jump if not zero
-273F:334F 83 C6 13 add si,13h
-273F:3352 BD 0009 mov bp,9
-273F:3355 loc_673: ; xref 273F:3370
-273F:3355 57 push di
-273F:3356 B9 0009 mov cx,9
-273F:3359 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:335B AC lodsb ; String [si] to al
-273F:335C 8B CB mov cx,bx
-273F:335E 83 C1 01 add cx,1
-273F:3361 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:3363 B9 0008 mov cx,8
-273F:3366 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3368 5F pop di
-273F:3369 81 C7 0140 add di, SCREEN_WIDTH
-273F:336D 83 ED 01 sub bp,1
-273F:3370 75 E3 jnz loc_673 ; Jump if not zero
-273F:3372 1F pop ds
-273F:3373 C3 retn
-
- draw_dialog_frame endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3374 32 FF xor bh, bh
-273F:3376 32 F6 xor dh, dh
-273F:3378 BF 62C0 mov di, 62C0h
-273F:337B B9 004E mov cx, 4Eh
-273F:337E 8B C2 mov ax, dx
-273F:3380 2D 0001 sub ax, 1
-273F:3383 74 0C jz loc_675 ; Jump if zero
-273F:3385 81 EF 0A00 sub di,0A00h
-273F:3389 83 E9 08 sub cx,8
-273F:338C 80 C2 01 add dl,1
-273F:338F EB EF jmp short loc_674 ; (3380)
-273F:3391 loc_675: ; xref 273F:3383
-273F:3391 51 push cx
-273F:3392 B1 03 mov cl,3
-273F:3394 D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:3396 D3 E2 shl dx,cl ; Shift w/zeros fill
-273F:3398 83 EB 01 sub bx,1
-273F:339B 53 push bx
-273F:339C 52 push dx
-273F:339D E8 FF6B call draw_dialog_frame
-273F:33A0 33 C0 xor ax,ax ; Zero register
-273F:33A2 5A pop dx
-273F:33A3 5D pop bp
-273F:33A4 5B pop bx
-273F:33A5 83 EB 08 sub bx,8
-273F:33A8 83 C5 12 add bp,12h
-273F:33AB 83 C2 14 add dx,14h
-273F:33AE B1 81 mov cl,81h
-273F:33B0 E9 D7DC jmp loc_93 ; (0B8F)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_draw_talk_dialog proc near
-273F:33B3 8B C5 mov ax,bp
-273F:33B5 D1 E5 shl bp,1 ; Shift w/zeros fill
-273F:33B7 D1 E5 shl bp,1 ; Shift w/zeros fill
-273F:33B9 D1 E5 shl bp,1 ; Shift w/zeros fill
-273F:33BB 2B E8 sub bp,ax
-273F:33BD 83 C5 0D add bp,0Dh
-273F:33C0 89 2E 11C6 mov talk_dialog_height, bp
-273F:33C4 83 06 11C6 12 add talk_dialog_height, 12h
-273F:33C9 C7 06 11C4 0080 mov talk_dialog_width, TALK_DIALOG_WIDTH
-273F:33CF 1E push ds
-273F:33D0 B8 44FF mov ax, vga_talk_frame_seg
-273F:33D3 8E D8 mov ds,ax
-273F:33D5 33 F6 xor si,si ; Zero register
-
-273F:33D7 BA 0003 mov dx,3 ; First three lines
-
-273F:33DA loc_676:
-273F:33DA A5 movsw ; Mov [si] to es:[di]
-273F:33DB AC lodsb ; String [si] to al
-273F:33DC B9 007B mov cx,7Bh
-273F:33DF F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:33E1 A5 movsw ; Mov [si] to es:[di]
-273F:33E2 A4 movsb ; Mov [si] to es:[di]
-273F:33E3 83 EA 01 sub dx,1
-273F:33E6 75 F2 jnz loc_676 ; Jump if not zero
-273F:33E8 loc_677: ; xref 273F:33F7
-273F:33E8 56 push si
-273F:33E9 A5 movsw ; Mov [si] to es:[di]
-273F:33EA A4 movsb ; Mov [si] to es:[di]
-273F:33EB AC lodsb ; String [si] to al
-273F:33EC B9 007A mov cx,7Ah
-273F:33EF F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:33F1 A5 movsw ; Mov [si] to es:[di]
-273F:33F2 A4 movsb ; Mov [si] to es:[di]
-273F:33F3 5E pop si
-273F:33F4 83 ED 01 sub bp,1
-273F:33F7 75 EF jnz loc_677 ; Jump if not zero
-273F:33F9 83 C6 07 add si,7
-273F:33FC BA 0003 mov dx,3
-273F:33FF loc_678: ; xref 273F:340B
-273F:33FF A5 movsw ; Mov [si] to es:[di]
-273F:3400 A4 movsb ; Mov [si] to es:[di]
-273F:3401 AC lodsb ; String [si] to al
-273F:3402 B9 007B mov cx,7Bh
-273F:3405 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:3407 A5 movsw ; Mov [si] to es:[di]
-273F:3408 83 EA 01 sub dx,1
-273F:340B 75 F2 jnz loc_678 ; Jump if not zero
-273F:340D 1F pop ds
-273F:340E C3 retn
- vga_draw_talk_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_show_compressed_screen proc near
-
-273F:340F úBB 07DC mov bx, offset display_mask
-273F:3412 A1 4CE4 mov ax, data_segment2
-273F:3415 8E C0 mov es,ax
-273F:3417 úBF 0A00 mov di,data_1463e ; (FF12:0A00=0)
-273F:341A 8B 16 4CE0 mov dx, current_room_segment
-273F:341E 33 F6 xor si,si ; Zero register
-273F:3420 B5 06 mov ch,6
-273F:3422 loc_679: ; xref 273F:3465
-273F:3422 B1 0A mov cl, NUM_HORIZ_RECTS
-273F:3424 loc_680: ; Screen horizontal loop
-273F:3424 F6 07 80 test byte ptr [bx],80h ; Does rect need displaying?
-273F:3427 74 23 jz loc_683 ; If not then skip
-273F:3429 80 27 7F and byte ptr [bx],7Fh ; Clear displayed bit
-273F:342C 80 0F 01 or byte ptr [bx],1
-273F:342F 57 push di
-273F:3430 56 push si
-273F:3431 1E push ds
-273F:3432 8E DA mov ds,dx
-
-273F:3434 B6 20 mov dh, RECT_SIZE
-273F:3436 loc_681: ; Vertical loop
-273F:3436 B2 10 mov dl, RECT_SIZE/2
-273F:3438 loc_682: ; Horizontal loop
-273F:3438 A5 movsw ; Mov [si] to es:[di]
-273F:3439 80 EA 01 sub dl,1
-273F:343C 75 FA jnz loc_682 ; End of horizontal loop
-
-273F:343E 81 C7 0120 add di, SCREEN_WIDTH-RECT_SIZE
-273F:3442 80 EE 01 sub dh,1
-273F:3445 75 EF jnz loc_681 ; End of vertical loop
-
-273F:3447 8C DA mov dx,ds
-273F:3449 1F pop ds
-273F:344A 5E pop si
-273F:344B 5F pop di
-273F:344C loc_683: ; xref 273F:3427
-273F:344C 83 C3 01 add bx,1
-273F:344F 83 C7 20 add di, RECT_SIZE ; Next horizontal rect
-273F:3452 81 C6 0400 add si, RECT_SIZE*RECT_SIZE ; Move to data for next src rect
-273F:3456 80 E9 01 sub cl,1
-273F:3459 75 C9 jnz loc_680 ; Jump if not zero
-
-273F:345B 83 C3 08 add bx,8
-273F:345E ú81 C7 26C0 add di,26C0h ; (273F:26C0=0EDh)
-273F:3462 80 ED 01 sub ch,1
-273F:3465 75 BB jnz loc_679 ; Jump if not zero
-273F:3467 80 0E 11D0 30 or menubar_state, 30h ; (273F:11D0=56h) '0'
-273F:346C C3 retn
-
- vga_show_compressed_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_346d proc near
-273F:346D úBE 0992 mov si, offset rects_layer_0
-273F:3470 83 C6 4C add si,4Ch
-273F:3473 C7 06 0DA6 0D92 mov rect_x_start, room_layers
-273F:3479 C7 06 0DAA 0D96 mov num_horiz_rects, 0D96h
-273F:347F B9 0003 mov cx,3
-273F:3482 loc_684: ; xref 273F:3523
-273F:3482 ú51 push cx
-273F:3483 úBB 0100 mov bx,100h ; (273F:0100=6)
-273F:3486 loc_685: ; xref 273F:3509
-273F:3486 ú51 push cx
-273F:3487 56 push si
-273F:3488 8B 3E 0DA6 mov di, rect_x_start
-273F:348C 8B 05 mov ax,[di]
-273F:348E 8E C0 mov es,ax
-273F:3490 8B 45 02 mov ax,[di+2]
-273F:3493 A3 0DA8 mov rect_y_end, ax
-273F:3496 8B 3E 0DAA mov di, num_horiz_rects
-273F:349A 8B 05 mov ax,[di]
-273F:349C 8B D0 mov dx,ax
-273F:349E 8B 45 02 mov ax,[di+2]
-273F:34A1 A3 0DAC mov word ptr ds:[0DACh],ax ; (273F:0DAC=0EB09h)
-273F:34A4 B5 06 mov ch,6
-273F:34A6 loc_686: ; xref 273F:34F8
-273F:34A6 B1 0A mov cl,0Ah
-273F:34A8 loc_687: ; xref 273F:34F0
-273F:34A8 F6 04 80 test byte ptr [si],80h
-273F:34AB 75 3D jnz loc_690 ; Jump if not zero
-273F:34AD F6 00 80 test byte ptr [bx+si],80h
-273F:34B0 75 38 jnz loc_690 ; Jump if not zero
-273F:34B2 56 push si
-273F:34B3 52 push dx
-273F:34B4 8A 04 mov al,[si]
-273F:34B6 32 E4 xor ah,ah ; Zero register
-273F:34B8 F7 26 0DA8 mul rect_y_end
-273F:34BC 8B F8 mov di,ax
-273F:34BE 8A 00 mov al,[bx+si]
-273F:34C0 32 E4 xor ah,ah ; Zero register
-273F:34C2 F7 26 0DAC mul word ptr ds:[0DACh] ; (273F:0DAC=0EB09h) dx:ax = data * ax
-273F:34C6 8B F0 mov si,ax
-273F:34C8 5A pop dx
-273F:34C9 1E push ds
-273F:34CA 51 push cx
-273F:34CB 53 push bx
-273F:34CC 8E DA mov ds,dx
-273F:34CE B9 0400 mov cx,400h
-273F:34D1 8B DE mov bx,si
-273F:34D3 81 C3 0200 add bx,200h
-
-273F:34D7 locloop_688: ; xref 273F:34E2
-273F:34D7 AC lodsb ; String [si] to al
-273F:34D8 0A C0 or al,al ; Zero ?
-273F:34DA 74 03 jz loc_689 ; Jump if zero
-273F:34DC 26: 88 05 mov es:[di],al
-273F:34DF loc_689: ; xref 273F:34DA
-273F:34DF 83 C7 01 add di,1
-273F:34E2 E2 F3 loop locloop_688 ; Loop if cx > 0
-
-273F:34E4 5B pop bx
-273F:34E5 59 pop cx
-273F:34E6 8C DA mov dx,ds
-273F:34E8 1F pop ds
-273F:34E9 5E pop si
-273F:34EA loc_690: ; xref 273F:34AB, 34B0
-273F:34EA 83 C6 01 add si,1
-273F:34ED 80 E9 01 sub cl,1
-273F:34F0 75 B6 jnz loc_687 ; Jump if not zero
-273F:34F2 83 C6 08 add si,8
-273F:34F5 80 ED 01 sub ch,1
-273F:34F8 75 AC jnz loc_686 ; Jump if not zero
-273F:34FA 83 06 0DAA 04 add num_horiz_rects, 4
-273F:34FF 81 C3 0100 add bx,100h
-273F:3503 5E pop si
-273F:3504 59 pop cx
-273F:3505 E2 02 loop locloop_691 ; Loop if cx > 0
-
-273F:3507 EB 03 jmp short loc_692 ; (350C)
-
-273F:3509 locloop_691: ; xref 273F:3505
-273F:3509 E9 FF7A jmp loc_685 ; (3486)
-273F:350C loc_692: ; xref 273F:3507
-273F:350C 59 pop cx
-273F:350D E2 02 loop locloop_693 ; Loop if cx > 0
-
-273F:350F EB 15 jmp short loc_ret_694 ; (3526)
-
-273F:3511 locloop_693: ; xref 273F:350D
-273F:3511 81 C6 0100 add si,100h
-273F:3515 83 06 0DA6 04 add rect_x_start, 4
-273F:351A A1 0DA6 mov ax, rect_x_start
-273F:351D 05 0004 add ax,4
-273F:3520 A3 0DAA mov num_horiz_rects, ax
-273F:3523 E9 FF5C jmp loc_684 ; (3482)
-
-273F:3526 loc_ret_694: ; xref 273F:350F
-273F:3526 C3 retn
- vga_346d endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; es:di = pointer to decoded screen
- ; bx = buffer to store status of each screen rectangle
- ; cl = layer number (0 to 3)
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_segment_screen proc near
-273F:3527 88 0E 0DA5 mov current_layer, cl
-273F:352B C6 06 0DA4 00 mov num_occupied_rects, 0
-273F:3530 C7 06 0DA2 0400 mov rectangle_size, RECTANGLE_SIZE
-273F:3536 33 F6 xor si, si ; Zero register
-273F:3538 B5 06 mov ch, NUM_VERT_RECTS
-273F:353A loc_695:
-273F:353A B1 0A mov cl, NUM_HORIZ_RECTS
-273F:353C loc_696:
-273F:353C 1E push ds
-273F:353D 51 push cx
-273F:353E 56 push si
-273F:353F 57 push di
-273F:3540 A1 4CE4 mov ax, data_segment2
-273F:3543 8E D8 mov ds,ax
-273F:3545 E8 003A call copy_rectangle
-273F:3548 5F pop di
-273F:3549 5E pop si
-273F:354A 59 pop cx
-273F:354B 1F pop ds
-273F:354C F6 06 0DA5 FF test current_layer, 0FFh ; Background layer?
-273F:3551 74 09 jz loc_697 ; If yes, ignore empty check
-273F:3553 0B D2 or dx,dx ; Was rectangle non-empty?
-273F:3555 75 05 jnz loc_697 ; If yes, then jump
-273F:3557 C6 07 FF mov byte ptr [bx], 0FFh ; Flag rect as empty
-273F:355A EB 0E jmp short loc_698
-273F:355C loc_697:
-273F:355C 03 3E 0DA2 add di, rectangle_size
-273F:3560 A0 0DA4 mov al, num_occupied_rects
-273F:3563 88 07 mov [bx], al
-273F:3565 80 06 0DA4 01 add num_occupied_rects, 1
-273F:356A loc_698: ; xref 273F:355A
-273F:356A 83 C6 20 add si, RECT_SIZE ; Move to next src rect
-273F:356D 83 C3 01 add bx, 1
-273F:3570 80 E9 01 sub cl, 1
-273F:3573 75 C7 jnz loc_696 ; Loop for horiz rects
-273F:3575 ú81 C6 26C0 add si, (RECT_SIZE-1) * SCREEN_WIDTH
-273F:3579 83 C3 08 add bx, 8
-273F:357C 80 ED 01 sub ch, 1
-273F:357F 75 B9 jnz loc_695 ; Loop for vert rects
-273F:3581 C3 retn
- vga_segment_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3545
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3582 copy_rectangle proc near
-273F:3582 33 D2 xor dx,dx ; Zero register
-273F:3584 B9 0020 mov cx, 32
-
-273F:3587 locloop_699: ; xref 273F:3596
-273F:3587 51 push cx
-273F:3588 B9 0010 mov cx, 32/2
-
-273F:358B locloop_700: ; Horizontal loop
-273F:358B AD lodsw
-273F:358C 0B D0 or dx, ax
-273F:358E AB stosw ; Store ax to es:[di]
-273F:358F E2 FA loop locloop_700 ; Loop if cx > 0
-
-273F:3591 81 C6 0120 add si, 320 - 32 ; Move to next line
-273F:3595 59 pop cx
-273F:3596 E2 EF loop locloop_699 ; Vertical loop
-
-273F:3598 C3 retn
- copy_rectangle endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; ax = Y rect, dx = x rect, bp = current layer num
- ; bx = rect mapping index
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_add_rect proc near
-273F:3599 8B CD mov cx, bp
-273F:359B locloop_701: ; xref 273F:35A7
-273F:359B 80 39 FE cmp byte ptr [bx+di],0FEh
-273F:359E 72 0A jb loc_702 ; Jump if below
-273F:35A0 ú81 C7 0100 add di, 100h
-273F:35A4 83 C6 04 add si, 4
-273F:35A7 E2 F2 loop locloop_701 ; Loop if cx > 0
-
-273F:35A9 C3 retn
-273F:35AA loc_702: ; xref 273F:359E
-273F:35AA 1E push ds
-273F:35AB 52 push dx
-273F:35AC 8B D0 mov dx, ax ; dx = y rect
-273F:35AE D1 E0 shl ax, 1 ; ax=y*2
-273F:35B0 D1 E0 shl ax, 1 ; ax=y*4
-273F:35B2 03 D0 add dx, ax ; dx=y*5
-273F:35B4 B1 0B mov cl, 11
-273F:35B6 D3 E2 shl dx,cl ; dx=y*(32*320)
-273F:35B8 81 C2 0A00 add dx, MENUBAR_BLOCK_SIZE ; dx =Y start on screen
-273F:35BC 58 pop ax ; ax = x rect
-273F:35BD B1 05 mov cl,5
-273F:35BF D3 E0 shl ax,cl ; ax=x*32
-273F:35C1 03 D0 add dx,ax ; dx=start pos on screen
-
-273F:35C3 8A 01 mov al, [bx+di] ; get cell status
-273F:35C5 8B 1E 4CE4 mov bx, data_segment2
-273F:35C9 8E C3 mov es,bx
-273F:35CB 8B 1C mov bx, [si] ; Get segment for layer to use
-273F:35CD 8E DB mov ds, bx ; ds = source data
-273F:35CF 8B FA mov di, dx ; es:di = destination
-273F:35D1 32 E4 xor ah, ah
-273F:35D3 B1 0A mov cl, 10
-273F:35D5 D3 E0 shl ax, cl ; ax=cell status*1024
-273F:35D7 8B F0 mov si, ax
-
-273F:35D9 B9 0020 mov cx, 32 ; Number of rows
-
-273F:35DC locloop_703: ; xref 273F:35F2
-273F:35DC 51 push cx
-273F:35DD B9 0020 mov cx, 32 ; Set pixel width
-
-273F:35E0 locloop_704:
-273F:35E0 AC lodsb ; Get next pixel
-273F:35E1 0A C0 or al,al ; Zero (transparent)?
-273F:35E3 74 03 jz loc_705 ; If yes, then skip
-273F:35E5 26: 88 05 mov es:[di],al ; Store pixel
-273F:35E8 loc_705:
-273F:35E8 83 C7 01 add di,1 ; Move to next dest pos
-273F:35EB E2 F3 loop locloop_704
-
-273F:35ED ú81 C7 0120 add di, 320 - 32 ; Move to next line of rect
-273F:35F1 59 pop cx
-273F:35F2 E2 E8 loop locloop_703 ; Loop remaining lines
-
-273F:35F4 1F pop ds
-273F:35F5 C3 retn
- vga_add_rect endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_display_character proc near
-
-273F:35F6 57 push di
-273F:35F7 1E push ds
-273F:35F8 53 push bx
-273F:35F9 51 push cx
-273F:35FA 56 push si
-273F:35FB 8E DD mov ds,bp
-273F:35FD 2C 20 sub al,20h ; ' '
-273F:35FF 32 E4 xor ah,ah ; Zero register
-273F:3601 B1 03 mov cl,3
-273F:3603 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:3605 8B F0 mov si,ax
-273F:3607 B3 08 mov bl,8 ; Number of rows
-273F:3609 loc_706:
-273F:3609 B9 0008 mov cx,8
-273F:360C AC lodsb ; String [si] to al
-
-273F:360D locloop_707: ; xref 273F:361C
-273F:360D D0 E0 shl al,1 ; Shift w/zeros fill
-273F:360F 72 05 jc loc_708 ; Jump if carry Set
-273F:3611 26: 88 15 mov es:[di],dl
-273F:3614 EB 03 jmp short loc_709 ; (3619)
-273F:3616 loc_708: ; xref 273F:360F
-273F:3616 26: 88 35 mov es:[di],dh
-273F:3619 loc_709: ; xref 273F:3614
-273F:3619 83 C7 01 add di,1
-273F:361C E2 EF loop locloop_707 ; Loop if cx > 0
-
-273F:361E ú81 C7 0138 add di,data_1445e ; (A000:0138=0)
-273F:3622 80 EB 01 sub bl,1
-273F:3625 75 E2 jnz loc_706 ; Jump if not zero
-273F:3627 5E pop si
-273F:3628 59 pop cx
-273F:3629 5B pop bx
-273F:362A 1F pop ds
-273F:362B 5F pop di
-273F:362C C3 retn
-
- vga_display_character endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_menu_items proc near
-
-273F:362D B8 A000 mov ax, VGA_SEGMENT
-273F:3630 8E C0 mov es,ax
-273F:3632 B1 03 mov cl,3
-273F:3634 BA 0048 mov dx,48h
-273F:3637 8A 1E 334E mov bl,byte ptr ds:[334Eh] ; (273F:334E=0E4h)
-273F:363B 32 FF xor bh,bh ; Zero register
-273F:363D D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:363F 1E push ds
-273F:3640 8B 36 335A mov si,word ptr ds:[335Ah] ; (273F:335A=0ACA4h)
-273F:3644 8B FE mov di,si
-273F:3646 A1 3376 mov ax,data_265 ; (273F:3376=0F632h)
-273F:3649 8E D8 mov ds,ax
-273F:364B loc_710: ; xref 273F:365A
-273F:364B 56 push si
-273F:364C 8B CB mov cx,bx
-273F:364E F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3650 5E pop si
-273F:3651 81 C6 0140 add si,140h
-273F:3655 8B FE mov di,si
-273F:3657 83 EA 01 sub dx,1
-273F:365A 75 EF jnz loc_710 ; Jump if not zero
-273F:365C 1F pop ds
-
-273F:365D loc_ret_711: ; xref 273F:366F
-273F:365D C3 retn
-273F:365E loc_712: ; xref 273F:36AD
-273F:365E 80 26 11D0 FB and menubar_state, 0FBh ; (273F:11D0=56h)
-273F:3663 C3 retn
-
- vga_menu_items endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [show_cursor_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_cursor proc near
-
-273F:3664 C7 06 F010 0000 mov timer_ticks, 0
-273F:366A F6 06 11D0 04 test menubar_state, 4 ; (273F:11D0=56h)
-273F:366F 75 EC jnz loc_ret_711 ; Jump if not zero
-273F:3671 80 0E 11D0 04 or menubar_state, 4 ; (273F:11D0=56h)
-273F:3676 8B 3E 11E8 mov di,word ptr ds:[11E8h] ; (273F:11E8=14B9h)
-273F:367A úBE 11EE mov si, offset data_641
-273F:367D 8B 1E 11EA mov bx,word ptr ds:[11EAh] ; (273F:11EA=8B00h)
-273F:3681 8B 16 11EC mov dx,word ptr ds:[11ECh] ; (273F:11EC=1B55h)
-273F:3685 0B D2 or dx,dx ; Zero ?
-273F:3687 74 1F jz loc_714 ; Jump if zero
-
-273F:3689 B8 A000 mov ax, VGA_SEGMENT
-273F:368C 8E C0 mov es,ax
-273F:368E loc_713: ; xref 273F:36A0
-273F:368E 56 push si
-273F:368F 57 push di
-273F:3690 8B CB mov cx,bx
-273F:3692 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3694 5F pop di
-273F:3695 5E pop si
-273F:3696 83 C6 10 add si,10h
-273F:3699 81 C7 0140 add di,140h
-273F:369D 83 EA 01 sub dx,1
-273F:36A0 75 EC jnz loc_713 ; Jump if not zero
-273F:36A2 C7 06 11EC 0000 mov word ptr ds:[11ECh],0 ; (273F:11EC=1B55h)
-273F:36A8 loc_714: ; xref 273F:3687
-273F:36A8 F6 06 11D0 01 test menubar_state, 1 ; (273F:11D0=56h)
-273F:36AD 75 AF jnz loc_712 ; Jump if not zero
-273F:36AF A1 11D8 mov ax, mouse_y2
-273F:36B2 2B 06 11DF sub ax, cursor_centroid
-273F:36B6 73 02 jnc loc_715 ; Jump if carry=0
-273F:36B8 33 C0 xor ax,ax ; Zero register
-273F:36BA loc_715: ; xref 273F:36B6
-273F:36BA BA 00C8 mov dx,0C8h
-273F:36BD 2B D0 sub dx,ax
-273F:36BF 83 FA 11 cmp dx,11h
-273F:36C2 72 03 jb loc_716 ; Jump if below
-273F:36C4 BA 0010 mov dx,10h
-273F:36C7 loc_716: ; xref 273F:36C2
-273F:36C7 89 16 11EC mov word ptr ds:[11ECh],dx ; (273F:11EC=1B55h)
-273F:36CB 8B 36 11D6 mov si, mouse_x2
-273F:36CF 2B 36 11DF sub si, cursor_centroid
-273F:36D3 73 02 jnc loc_717 ; Jump if carry=0
-273F:36D5 33 F6 xor si,si ; Zero register
-273F:36D7 loc_717: ; xref 273F:36D3
-273F:36D7 BD 0140 mov bp,140h
-273F:36DA 2B EE sub bp,si
-273F:36DC 83 FD 11 cmp bp,11h
-273F:36DF 72 03 jb loc_718 ; Jump if below
-273F:36E1 BD 0010 mov bp,10h
-273F:36E4 loc_718: ; xref 273F:36DF
-273F:36E4 89 2E 11EA mov word ptr ds:[11EAh],bp ; (273F:11EA=8B00h)
-273F:36E8 8B C8 mov cx,ax
-273F:36EA D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:36EC D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:36EE 03 C1 add ax,cx
-273F:36F0 B1 06 mov cl,6
-273F:36F2 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:36F4 03 F0 add si,ax
-273F:36F6 89 36 11E8 mov word ptr ds:[11E8h],si ; (273F:11E8=14B9h)
-273F:36FA 1E push ds
-273F:36FB FF 36 4CF4 push cursors_segment
-273F:36FF FF 36 11E1 push cursor_index
-273F:3703 1E push ds
-273F:3704 07 pop es
-273F:3705 B8 A000 mov ax, VGA_SEGMENT
-273F:3708 8E D8 mov ds,ax
-273F:370A úBF 11EE mov di, offset data_641
-273F:370D 56 push si
-273F:370E 52 push dx
-273F:370F loc_719: ; xref 273F:3721
-273F:370F 56 push si
-273F:3710 57 push di
-273F:3711 8B CD mov cx,bp
-273F:3713 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3715 5F pop di
-273F:3716 5E pop si
-273F:3717 ú81 C6 0140 add si,data_1451e ; (B2DE:0140=0)
-273F:371B 83 C7 10 add di,10h
-273F:371E 83 EA 01 sub dx,1
-273F:3721 75 EC jnz loc_719 ; Jump if not zero
-273F:3723 1E push ds
-273F:3724 07 pop es
-
-273F:3725 5A pop dx
-273F:3726 5F pop di
-273F:3727 58 pop ax
-273F:3728 86 E0 xchg ah,al
-273F:372A 8B F0 mov si,ax
-273F:372C 1F pop ds
-273F:372D loc_720: ; xref 273F:374A
-273F:372D 56 push si
-273F:372E 57 push di
-273F:372F 8B CD mov cx,bp
-
-273F:3731 locloop_721: ; xref 273F:373C
-273F:3731 AC lodsb ; String [si] to al
-273F:3732 0A C0 or al,al ; Zero ?
-273F:3734 74 03 jz loc_722 ; Jump if zero
-273F:3736 26: 88 05 mov es:[di],al
-273F:3739 loc_722: ; xref 273F:3734
-273F:3739 83 C7 01 add di,1
-273F:373C E2 F3 loop locloop_721 ; Loop if cx > 0
-
-273F:373E 5F pop di
-273F:373F 5E pop si
-273F:3740 83 C6 10 add si,10h
-273F:3743 81 C7 0140 add di,140h
-273F:3747 83 EA 01 sub dx,1
-273F:374A 75 E1 jnz loc_720 ; Jump if not zero
-273F:374C 1F pop ds
-273F:374D 80 26 11D0 FB and menubar_state, 0FBh ; (273F:11D0=56h)
-
-273F:3752 loc_ret_723: ; xref 273F:3758
-273F:3752 C3 retn
-
- vga_cursor endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sub_unknown_1 proc near
-
-273F:3753 F6 06 11D0 01 test menubar_state, 1
-273F:3758 75 F8 jnz loc_ret_723
-273F:375A 1E push ds
-273F:375B 8B 36 11E8 mov si,word ptr ds:[11E8h]
-273F:375F 8B 1E 11EA mov bx,word ptr ds:[11EAh]
-273F:3763 8B 16 11EC mov dx,word ptr ds:[11ECh]
-273F:3767 0B D2 or dx,dx
-273F:3769 74 51 jz loc_728
-273F:376B FF 36 4CF4 push cursors_segment
-273F:376F FF 36 11E1 push cursor_index
-273F:3773 52 push dx
-273F:3774 56 push si
-273F:3775 1E push ds
-273F:3776 07 pop es
-273F:3777 A1 4CE4 mov ax, data_segment2
-273F:377A 8E D8 mov ds,ax
-273F:377C úBF 11EE mov di,11EEh
-273F:377F loc_724:
-273F:377F 56 push si
-273F:3780 57 push di
-273F:3781 8B CB mov cx,bx
-273F:3783 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3785 5F pop di
-273F:3786 5E pop si
-273F:3787 83 C7 10 add di,10h
-273F:378A ú81 C6 0140 add si,data_1451e ; (B2DE:0140=0)
-273F:378E 83 EA 01 sub dx,1
-273F:3791 75 EC jnz loc_724 ; Jump if not zero
-273F:3793 1E push ds
-273F:3794 07 pop es
-273F:3795 5F pop di
-273F:3796 5A pop dx
-273F:3797 58 pop ax
-273F:3798 86 E0 xchg ah,al
-273F:379A 8B F0 mov si,ax
-273F:379C 1F pop ds
-273F:379D loc_725: ; xref 273F:37BA
-273F:379D 57 push di
-273F:379E 56 push si
-273F:379F 8B CB mov cx,bx
-
-273F:37A1 locloop_726: ; xref 273F:37AC
-273F:37A1 AC lodsb ; String [si] to al
-273F:37A2 0A C0 or al,al ; Zero ?
-273F:37A4 74 03 jz loc_727 ; Jump if zero
-273F:37A6 26: 88 05 mov es:[di],al
-273F:37A9 loc_727: ; xref 273F:37A4
-273F:37A9 83 C7 01 add di,1
-273F:37AC E2 F3 loop locloop_726 ; Loop if cx > 0
-
-273F:37AE 5E pop si
-273F:37AF 5F pop di
-273F:37B0 83 C6 10 add si,10h
-273F:37B3 ú81 C7 0140 add di, SCREEN_WIDTH
-273F:37B7 83 EA 01 sub dx,1
-273F:37BA 75 E1 jnz loc_725 ; Jump if not zero
-273F:37BC loc_728: ; xref 273F:3769
-273F:37BC 1F pop ds
-273F:37BD C3 retn
-
- sub_unknown_1 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:30B7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:37BE sub_73 proc near
-273F:37BE F6 06 11D0 01 test menubar_state, 1 ; (273F:11D0=56h)
-273F:37C3 75 2C jnz loc_ret_730 ; Jump if not zero
-273F:37C5 A1 4CE4 mov ax, data_segment2
-273F:37C8 8E C0 mov es,ax
-273F:37CA 8B 3E 11E8 mov di,word ptr ds:[11E8h] ; (273F:11E8=14B9h)
-273F:37CE 8B 1E 11EA mov bx,word ptr ds:[11EAh] ; (273F:11EA=8B00h)
-273F:37D2 8B 16 11EC mov dx,word ptr ds:[11ECh] ; (273F:11EC=1B55h)
-273F:37D6 0B D2 or dx,dx ; Zero ?
-273F:37D8 74 17 jz loc_ret_730 ; Jump if zero
-273F:37DA úBE 11EE mov si,11EEh ; (273F:11EE=3Bh)
-273F:37DD loc_729: ; xref 273F:37EF
-273F:37DD 57 push di
-273F:37DE 56 push si
-273F:37DF 8B CB mov cx,bx
-273F:37E1 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:37E3 5E pop si
-273F:37E4 5F pop di
-273F:37E5 81 C7 0140 add di,140h
-273F:37E9 83 C6 10 add si,10h
-273F:37EC 83 EA 01 sub dx,1
-273F:37EF 75 EC jnz loc_729 ; Jump if not zero
-
-273F:37F1 loc_ret_730: ; xref 273F:37C3, 37D8
-273F:37F1 C3 retn
- sub_73 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_add_animation proc near
-273F:37F2 2E: C7 06 1500 0000 mov word ptr cs:data_215,0 ; (273F:1500=0)
-273F:37F9 C6 06 11B0 00 mov data_11b0, 0
-273F:37FE 8A 6F 06 mov ch, [bx+ANIM_HEIGHT] ; Get height
-273F:3801 8A 4F 04 mov cl, [bx+ANIM_WIDTH] ; Get width
-273F:3804 8B 47 02 mov ax, [bx+ANIM_Y] ; Get Y position
-273F:3807 2D 0088 sub ax, 88h
-273F:380A 73 16 jnc loc_731
-
-273F:380C 8B D0 mov dx, ax ; Top clipping
-273F:380E 02 D5 add dl, ch
-273F:3810 73 15 jnc loc_ret_732 ; Jump if carry=0
-273F:3812 74 13 jz loc_ret_732 ; Jump if zero
-273F:3814 F7 D8 neg ax
-273F:3816 2A E8 sub ch, al
-273F:3818 F6 E1 mul cl ; ax = reg * al
-273F:381A D1 E8 shr ax, 1
-273F:381C 03 F0 add si, ax
-273F:381E 33 C0 xor ax, ax ; Zero register
-273F:3820 EB 13 jmp short loc_734
-273F:3822 loc_731: ; xref 273F:380A
-273F:3822 3D 00C0 cmp ax, 192 ; Below bottom row?
-273F:3825 72 01 jb loc_733
-
-273F:3827 loc_ret_732: ; xref 273F:3810, 3812
-273F:3827 C3 retn
-273F:3828 loc_733:
-273F:3828 8B D0 mov dx, ax ; Get start row
-273F:382A 03 57 06 add dx, [bx+ANIM_HEIGHT] ; Add number of rows
-273F:382D 81 EA 00C0 sub dx, 192 ; Bottom row > 192?
-273F:3831 76 02 jbe loc_734
-273F:3833 2A EA sub ch, dl ; Yes, reduce height to fit
-273F:3835 loc_734:
-273F:3835 51 push cx
-273F:3836 8B D0 mov dx, ax ; ax = line number, and
-273F:3838 D1 E0 shl ax, 1 ; will be * 320
-273F:383A D1 E0 shl ax, 1
-273F:383C 03 D0 add dx, ax
-273F:383E B1 06 mov cl, 6
-273F:3840 D3 E2 shl dx, cl
-273F:3842 8B FA mov di, dx ; di = start of line
-273F:3844 ú81 C7 0A00 add di, MENUBAR_BLOCK_SIZE ; Compensate for menubar
-273F:3848 59 pop cx
-
-273F:3849 8B 07 mov ax, [bx+ANIM_X] ; Get start X position
-273F:384B 2D 0080 sub ax, 80h
-273F:384E 73 21 jnc loc_736 ; Completely on-screen
-273F:3850 8B D0 mov dx, ax
-273F:3852 02 D1 add dl, cl
-273F:3854 72 01 jc loc_735 ; Jump if carry Set
-273F:3856 C3 retn
-273F:3857 loc_735: ; xref 273F:3854
-273F:3857 F7 D0 not ax
-273F:3859 2A C8 sub cl, al
-273F:385B 2E: A3 1500 mov word ptr cs:data_215, ax
-273F:385F C6 06 11B0 01 mov data_11b0, 1
-273F:3864 8B 47 04 mov ax, [bx+ANIM_WIDTH]
-273F:3867 D1 E8 shr ax, 1
-273F:3869 2E: A3 1505 mov cs:data_218, ax
-273F:386D 33 C0 xor ax, ax ; Zero register
-273F:386F EB 22 jmp short loc_738 ; (3893)
-273F:3871 loc_736: ; xref 273F:384E
-273F:3871 3D 0140 cmp ax, SCREEN_WIDTH
-273F:3874 72 01 jb loc_737 ; Jump if below
-273F:3876 C3 retn
-
-273F:3877 loc_737: ; xref 273F:3874
-273F:3877 8B D0 mov dx, ax
-273F:3879 03 57 04 add dx, [bx+ANIM_WIDTH]
-273F:387C 81 EA 0140 sub dx, SCREEN_WIDTH
-273F:3880 76 11 jbe loc_738 ; Jump if below or =
-273F:3882 2A CA sub cl, dl
-273F:3884 C6 06 11B0 01 mov data_11b0, 1
-
-273F:3889 8B 57 04 mov dx, [bx+ANIM_WIDTH]
-273F:388C D1 EA shr dx, 1
-273F:388E 2E: 89 16 1505 mov cs:data_218, dx
-273F:3893 loc_738:
-273F:3893 03 F8 add di, ax
-273F:3895 8A 5F 28 mov bl, [bx+ANIM_START_COLOUR] ; Colour offset start
-273F:3898 F6 06 11B0 FF test data_11b0, 0FFh
-273F:389D 75 47 jnz loc_743 ; Jump if not zero
-273F:389F 1E push ds
-273F:38A0 06 push es
-273F:38A1 A1 4CE4 mov ax, data_segment2
-273F:38A4 8E C0 mov es, ax
-273F:38A6 1F pop ds
-273F:38A7 8A D1 mov dl, cl
-273F:38A9 8A CD mov cl, ch
-273F:38AB 32 ED xor ch, ch ; Zero register
-273F:38AD 32 F6 xor dh, dh ; Zero register
-273F:38AF D1 EA shr dx, 1 ; Divide by 2
-
-; This seems to be the loop for applying an animation to the off-screen buffer
-; cx = height, dx = width/2, es:di = dest, bl = starting colour offset
-; ds:si = source - each byte consists of two pixels. An output pixel will
-; be the starting colour offset + the nibble value of the source byte
-
-273F:38B1 locloop_739: ; xref 273F:38E2
-273F:38B1 51 push cx
-273F:38B2 52 push dx
-273F:38B3 B1 04 mov cl, 4
-273F:38B5 57 push di
-273F:38B6 loc_740: ; xref 273F:38D9
-273F:38B6 AC lodsb ; String [si] to al
-273F:38B7 8A E0 mov ah, al
-273F:38B9 D2 EC shr ah, cl ; Shift w/zeros fill
-273F:38BB 25 0F0F and ax, 0F0Fh
-273F:38BE 0A E4 or ah,ah ; Zero ?
-273F:38C0 74 05 jz loc_741 ; Jump if zero
-273F:38C2 02 E3 add ah,bl
-273F:38C4 26: 88 25 mov es:[di],ah
-273F:38C7 loc_741: ; xref 273F:38C0
-273F:38C7 83 C7 01 add di, 1
-273F:38CA 0A C0 or al, al ; Zero ?
-273F:38CC 74 05 jz loc_742 ; Jump if zero
-273F:38CE 02 C3 add al, bl
-273F:38D0 26: 88 05 mov es:[di], al
-273F:38D3 loc_742: ; xref 273F:38CC
-273F:38D3 83 C7 01 add di,1
-273F:38D6 83 EA 01 sub dx,1
-273F:38D9 75 DB jnz loc_740 ; Jump if not zero
-
-273F:38DB 5F pop di
-273F:38DC ú81 C7 0140 add di, SCREEN_WIDTH
-273F:38E0 5A pop dx
-273F:38E1 59 pop cx
-273F:38E2 E2 CD loop locloop_739 ; Loop if cx > 0
-
-273F:38E4 1F pop ds
-273F:38E5 C3 retn
-
-
-273F:38E6 loc_743: ; xref 273F:389D
-273F:38E6 1E push ds
-273F:38E7 06 push es
-273F:38E8 A1 4CE4 mov ax, data_segment2
-273F:38EB 8E C0 mov es, ax
-273F:38ED 1F pop ds
-273F:38EE 8A D1 mov dl, cl
-273F:38F0 8A CD mov cl, ch
-273F:38F2 32 ED xor ch, ch ; Zero register
-273F:38F4 32 F6 xor dh, dh ; Zero register
-
-273F:38F6 locloop_744: ; xref 273F:3944
-273F:38F6 51 push cx
-273F:38F7 8B CA mov cx,dx
-273F:38F9 57 push di
-273F:38FA 56 push si
-273F:38FB 2E: A1 1500 mov ax,word ptr cs:data_215 ; (273F:1500=0)
-273F:38FF D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3901 9C pushf ; Push flags
-273F:3902 03 F0 add si,ax
-273F:3904 9D popf ; Pop flags
-273F:3905 73 05 jnc locloop_745 ; Jump if carry=0
-273F:3907 AC lodsb ; String [si] to al
-273F:3908 24 0F and al,0Fh
-273F:390A EB 1E jmp short locloop_747 ; (392A)
-
-273F:390C locloop_745: ; xref 273F:3905, 3936
-273F:390C AC lodsb ; String [si] to al
-273F:390D 8A E0 mov ah,al
-273F:390F D0 EC shr ah,1 ; Shift w/zeros fill
-273F:3911 D0 EC shr ah,1 ; Shift w/zeros fill
-273F:3913 D0 EC shr ah,1 ; Shift w/zeros fill
-273F:3915 D0 EC shr ah,1 ; Shift w/zeros fill
-273F:3917 25 0F0F and ax,0F0Fh
-273F:391A 0A E4 or ah,ah ; Zero ?
-273F:391C 74 05 jz loc_746 ; Jump if zero
-273F:391E 02 E3 add ah,bl
-273F:3920 26: 88 25 mov es:[di],ah
-273F:3923 loc_746: ; xref 273F:391C
-273F:3923 83 C7 01 add di,1
-273F:3926 E2 02 loop locloop_747 ; Loop if cx > 0
-
-273F:3928 EB 0E jmp short loc_749 ; (3938)
-
-273F:392A locloop_747: ; xref 273F:390A, 3926
-273F:392A 0A C0 or al,al ; Zero ?
-273F:392C 74 05 jz loc_748 ; Jump if zero
-273F:392E 02 C3 add al,bl
-273F:3930 26: 88 05 mov es:[di],al
-273F:3933 loc_748: ; xref 273F:392C
-273F:3933 83 C7 01 add di,1
-273F:3936 E2 D4 loop locloop_745 ; Loop if cx > 0
-
-273F:3938 loc_749: ; xref 273F:3928
-273F:3938 5E pop si
-273F:3939 2E: 03 36 1505 add si,cs:data_218 ; (273F:1505=0)
-273F:393E 5F pop di
-273F:393F ú81 C7 0140 add di, SCREEN_WIDTH
-273F:3943 59 pop cx
-273F:3944 E2 B0 loop locloop_744 ; Loop if cx > 0
-
-273F:3946 1F pop ds
-273F:3947 C3 retn
- vga_add_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:3948 A1 4CE4 mov ax, data_segment2
-273F:394B 8E C0 mov es,ax
-273F:394D B2 08 mov dl,8
-273F:394F loc_750: ; xref 273F:396C
-273F:394F 57 push di
-273F:3950 8B CB mov cx,bx
-
-273F:3952 locloop_751: ; xref 273F:3963
-273F:3952 26: 80 3D E2 cmp byte ptr es:[di],0E2h
-273F:3956 74 06 je loc_752 ; Jump if equal
-273F:3958 26: 80 3D FF cmp byte ptr es:[di],0FFh
-273F:395C 75 04 jne loc_753 ; Jump if not equal
-273F:395E loc_752: ; xref 273F:3956
-273F:395E 26: 80 35 1D xor byte ptr es:[di],1Dh
-273F:3962 loc_753: ; xref 273F:395C
-273F:3962 47 inc di
-273F:3963 E2 ED loop locloop_751 ; Loop if cx > 0
-
-273F:3965 5F pop di
-273F:3966 ú81 C7 0140 add di,data_1446e ; (A000:0140=0)
-273F:396A FE CA dec dl
-273F:396C 75 E1 jnz loc_750 ; Jump if not zero
-273F:396E C3 retn
-
- vga_add_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menubar_copy_to_screen proc near
-
-273F:396F B8 A000 mov ax, VGA_SEGMENT
-273F:3972 8E C0 mov es,ax
-273F:3974 1E push ds
-273F:3975 A1 4CE4 mov ax, data_segment2
-273F:3978 8E D8 mov ds,ax
-273F:397A B9 0500 mov cx, MENUBAR_BLOCK_SIZE/2 ; 500h words
-500h
-273F:397D 33 F6 xor si,si ; Zero register
-273F:397F 33 FF xor di,di ; Zero register
-273F:3981 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:3983 1F pop ds
-273F:3984 C6 06 4BF0 00 mov byte ptr ds:[4BF0h],0 ; (273F:4BF0=3)
-273F:3989 C3 retn
-
- menubar_copy_to_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0BF9, 7B99, A7CC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:398A decode_file_entry proc near
-273F:398A 83 C2 08 add dx,8
-273F:398D 1E push ds
-273F:398E 8C C3 mov bx,es
-273F:3990 8E C2 mov es,dx
-273F:3992 8E DA mov ds,dx
-273F:3994 A1 0402 mov ax, ds:[402h]
-273F:3997 B1 0C mov cl,0Ch
-273F:3999 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:399B 03 D0 add dx,ax
-273F:399D A1 0400 mov ax, ds:[400h]
-273F:39A0 B1 04 mov cl,4
-273F:39A2 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:39A4 03 D0 add dx,ax
-273F:39A6 8B 36 0400 mov si, ds:[400h]
-273F:39AA 83 E6 0F and si,0Fh
-273F:39AD 8E DA mov ds,dx
-273F:39AF 8B D3 mov dx,bx
-273F:39B1 33 FF xor di,di ; Zero register
-273F:39B3 úBB 0404 mov bx, ds:[404h]
-273F:39B6 26: 8A 2F mov ch,es:[bx]
-273F:39B9 83 C3 01 add bx,1
-273F:39BC B1 09 mov cl,9
-273F:39BE loc_754: ; xref 273F:3A70
-273F:39BE úAC lodsb ; String [si] to al
-273F:39BF 06 push es
-273F:39C0 8E C2 mov es,dx
-273F:39C2 AA stosb ; Store al to es:[di]
-273F:39C3 07 pop es
-273F:39C4 32 E4 xor ah,ah ; Zero register
-273F:39C6 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:39C8 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:39CA 8B E8 mov bp,ax
-273F:39CC loc_755: ; xref 273F:3A02, 3A1D, 3A9C
-273F:39CC ú80 E9 01 sub cl,1
-273F:39CF 75 08 jnz loc_756 ; Jump if not zero
-273F:39D1 26: 8A 2F mov ch,es:[bx]
-273F:39D4 B1 08 mov cl,8
-273F:39D6 83 C3 01 add bx,1
-273F:39D9 loc_756: ; xref 273F:39CF
-273F:39D9 D0 E5 shl ch,1 ; Shift w/zeros fill
-273F:39DB 72 42 jc loc_761 ; Jump if carry Set
-273F:39DD 80 E9 01 sub cl,1
-273F:39E0 75 08 jnz loc_757 ; Jump if not zero
-273F:39E2 26: 8A 2F mov ch,es:[bx]
-273F:39E5 B1 08 mov cl,8
-273F:39E7 83 C3 01 add bx,1
-273F:39EA loc_757: ; xref 273F:39E0
-273F:39EA D0 E5 shl ch,1 ; Shift w/zeros fill
-273F:39EC 72 16 jc loc_759 ; Jump if carry Set
-273F:39EE 87 DD xchg bx,bp
-273F:39F0 26: 8A 07 mov al,es:[bx]
-273F:39F3 8B DD mov bx,bp
-273F:39F5 loc_758: ; xref 273F:3A49, 3A53, 3A6E
-273F:39F5 ú06 push es
-273F:39F6 8E C2 mov es,dx
-273F:39F8 AA stosb ; Store al to es:[di]
-273F:39F9 07 pop es
-273F:39FA 32 E4 xor ah,ah ; Zero register
-273F:39FC D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:39FE D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:3A00 8B E8 mov bp,ax
-273F:3A02 EB C8 jmp short loc_755 ; (39CC)
-273F:3A04 loc_759: ; xref 273F:39EC
-273F:3A04 8B C5 mov ax,bp
-273F:3A06 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A08 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A0A 8A 24 mov ah,[si]
-273F:3A0C 83 C6 01 add si,1
-273F:3A0F 0A E4 or ah,ah ; Zero ?
-273F:3A11 74 60 jz loc_768 ; Jump if zero
-273F:3A13 06 push es
-273F:3A14 8E C2 mov es,dx
-273F:3A16 loc_760: ; xref 273F:3A1A
-273F:3A16 AA stosb ; Store al to es:[di]
-273F:3A17 80 EC 01 sub ah,1
-273F:3A1A 75 FA jnz loc_760 ; Jump if not zero
-273F:3A1C 07 pop es
-273F:3A1D EB AD jmp short loc_755 ; (39CC)
-273F:3A1F loc_761: ; xref 273F:39DB
-273F:3A1F 80 E9 01 sub cl,1
-273F:3A22 75 08 jnz loc_762 ; Jump if not zero
-273F:3A24 26: 8A 2F mov ch,es:[bx]
-273F:3A27 B1 08 mov cl,8
-273F:3A29 83 C3 01 add bx,1
-273F:3A2C loc_762: ; xref 273F:3A22
-273F:3A2C D0 E5 shl ch,1 ; Shift w/zeros fill
-273F:3A2E 72 25 jc loc_765 ; Jump if carry Set
-273F:3A30 80 E9 01 sub cl,1
-273F:3A33 75 08 jnz loc_763 ; Jump if not zero
-273F:3A35 26: 8A 2F mov ch,es:[bx]
-273F:3A38 B1 08 mov cl,8
-273F:3A3A 83 C3 01 add bx,1
-273F:3A3D loc_763: ; xref 273F:3A33
-273F:3A3D D0 E5 shl ch,1 ; Shift w/zeros fill
-273F:3A3F 72 0A jc loc_764 ; Jump if carry Set
-273F:3A41 87 DD xchg bx,bp
-273F:3A43 26: 8A 47 01 mov al,es:[bx+1]
-273F:3A47 8B DD mov bx,bp
-273F:3A49 EB AA jmp short loc_758 ; (39F5)
-273F:3A4B loc_764: ; xref 273F:3A3F
-273F:3A4B 87 DD xchg bx,bp
-273F:3A4D 26: 8A 47 02 mov al,es:[bx+2]
-273F:3A51 8B DD mov bx,bp
-273F:3A53 EB A0 jmp short loc_758 ; (39F5)
-273F:3A55 loc_765: ; xref 273F:3A2E
-273F:3A55 80 E9 01 sub cl,1
-273F:3A58 75 08 jnz loc_766 ; Jump if not zero
-273F:3A5A 26: 8A 2F mov ch,es:[bx]
-273F:3A5D B1 08 mov cl,8
-273F:3A5F 83 C3 01 add bx,1
-273F:3A62 loc_766: ; xref 273F:3A58
-273F:3A62 D0 E5 shl ch,1 ; Shift w/zeros fill
-273F:3A64 72 0A jc loc_767 ; Jump if carry Set
-273F:3A66 87 DD xchg bx,bp
-273F:3A68 26: 8A 47 03 mov al,es:[bx+3]
-273F:3A6C 8B DD mov bx,bp
-273F:3A6E EB 85 jmp short loc_758 ; (39F5)
-273F:3A70 loc_767: ; xref 273F:3A64
-273F:3A70 E9 FF4B jmp loc_754 ; (39BE)
-273F:3A73 loc_768: ; xref 273F:3A11
-273F:3A73 AC lodsb ; String [si] to al
-273F:3A74 0A C0 or al,al ; Zero ?
-273F:3A76 74 27 jz loc_769 ; Jump if zero
-273F:3A78 8B C7 mov ax,di
-273F:3A7A D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A7C D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A7E D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A80 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A82 03 D0 add dx,ax
-273F:3A84 83 E7 0F and di,0Fh
-273F:3A87 51 push cx
-273F:3A88 8C D9 mov cx,ds
-273F:3A8A 8B C6 mov ax,si
-273F:3A8C D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A8E D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A90 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A92 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3A94 03 C8 add cx,ax
-273F:3A96 8E D9 mov ds,cx
-273F:3A98 83 E6 0F and si,0Fh
-273F:3A9B 59 pop cx
-273F:3A9C E9 FF2D jmp loc_755 ; (39CC)
-273F:3A9F loc_769: ; xref 273F:3A76
-273F:3A9F 1F pop ds
-273F:3AA0 83 C7 0F add di,0Fh
-273F:3AA3 D1 EF shr di,1 ; Shift w/zeros fill
-273F:3AA5 D1 EF shr di,1 ; Shift w/zeros fill
-273F:3AA7 D1 EF shr di,1 ; Shift w/zeros fill
-273F:3AA9 D1 EF shr di,1 ; Shift w/zeros fill
-273F:3AAB 03 D7 add dx,di
-273F:3AAD C3 retn
- decode_file_entry endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00C9, 70CA, 8FFA
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3AAE replace_vga_palette proc near
-273F:3AAE 1E push ds
-273F:3AAF 07 pop es
-273F:3AB0 úBE 1757 mov si,offset replacement_vga_palette
-273F:3AB3 úBF 15DA mov di,offset unprocessed_vga_palette2
-273F:3AB6 B9 00B4 mov cx, 60*3 ; Move 60 palette entries
-273F:3AB9 F3/ A4 rep movsb
-
-273F:3ABB replace_vga_palette2:
-273F:3ABB úBE 180B mov si, offset replacement_vga_ palette2
-273F:3ABE úBF 16EB mov di, offset unprocessed_vga_palette3
-273F:3AC1 B9 0018 mov cx, 8*3 ; Move 8 palette entries
-273F:3AC4 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:3AC6 C3 retn
- replace_vga_palette endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0C13, 0C35, 0C5A, 3C95, 75AE, 75D2, 75F0
- ; 760E, A549, A5BB, A66D, A6C4, A914
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3AC7 read_palette proc near
-273F:3AC7 8C D9 mov cx,ds
-273F:3AC9 BA 1457 mov dx, unprocessed_vga_palette
-273F:3ACC 56 push si
-273F:3ACD E8 C844 call read_entry ; (0314)
-273F:3AD0 5E pop si
-273F:3AD1 C6 06 1456 FF mov current_room_num, 0FFh ; (31E4:1456=0FFh)
-273F:3AD6 C3 retn
- read_palette endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- vga_toggle_menu_highlight proc near
-
-273F:3AD7 A1 4CE4 mov ax, data_segment2
-273F:3ADA 8E C0 mov es,ax
-273F:3ADC BA 0008 mov dx,8 ; Number of lines
-273F:3ADF B0 F7 mov al,0F7h
-273F:3AE1 loc_770: ; xref 273F:3AFA
-273F:3AE1 57 push di
-273F:3AE2 8B CB mov cx,bx
-
-273F:3AE4 locloop_771: ; xref 273F:3AF2
-273F:3AE4 26: 84 05 test al,es:[di]
-273F:3AE7 74 05 jz loc_772 ; Jump if zero
-273F:3AE9 26: 38 05 cmp es:[di],al
-273F:3AEC 75 03 jne loc_773 ; Jump if not equal
-273F:3AEE loc_772: ; xref 273F:3AE7
-273F:3AEE 26: 30 05 xor es:[di],al
-273F:3AF1 loc_773: ; xref 273F:3AEC
-273F:3AF1 47 inc di
-273F:3AF2 E2 F0 loop locloop_771 ; Loop if cx > 0
-
-273F:3AF4 5F pop di
-273F:3AF5 81 C7 0140 add di,140h
-273F:3AF9 4A dec dx
-273F:3AFA 75 E5 jnz loc_770 ; Jump if not zero
-273F:3AFC C3 retn
-
- vga_toggle_menu_highlight endp
-
-273F:3AFD 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- copy_protection_check proc near
-
-273F:3AFE F6 06 1854 FF test cp_num_digits, 0FFh ; Sequence previously entered?
-273F:3B03 74 01 jz loc_3B06
-273F:3B05 C3 ret
-273F:3B06 8B 04 loc_3B06: mov ax, [si]
-273F:3B08 E8 86 01 call read_screen_alt
-273F:3B0B BB 1830 mov bx, offset animation_rec_1
-273F:3B0E E8 D1 3C call animation_decode
-273F:3B11 BB 1839 mov bx, offset animation_rec_2
-273F:3B14 E8 CB 3C call animation_decode
-273F:3B17 BB 1842 mov bx, offset animation_rec_3
-273F:3B1A E8 C5 3C call animation_decode
-
-; Make a backup copy of the first 10 animation table entries
-
-273F:3B1D A1 4D00 mov ax, buffer_segment
-273F:3B20 8EC0 mov es, ax
-273F:3B22 BE4EB1 mov si, offset animation_table
-273F:3B25 33FF xor di, di
-273F:3B27 B9CD00 mov cx, ANIMATION_SLOT_SIZE*10/2 ; 00CDh
-273F:3B2A F3 A5 rep movsw
-
-; Current hard coded jump to bypass copy protection code
-
-273F:3B2C E92401 jmp loc_784
-
-; Original program's code below
-
-273F:3B2C 1E push ds
-273F:3B2D 07 pop es
-273F:3B2E BF B14E mov di, offset animation_table
-273F:3B31 BE 1850 mov si, offset anim_src_table
-273F:3B34 BB 1830 mov bx, offset animation_rec_1
-273F:3B37 8B4703 mov ax, [bx+3]
-273F:3B3A B200 mov dl, 0
-273F:3B3C E8BE01 call animation_set_entry
-273F:3B3F E8BB01 call animation_set_entry
-273F:3B42 BB3918 mov bx, offset animation_rec_2
-273F:3B45 8B4703 mov ax, [bx+03]
-273F:3B48 B220 mov dl, 20
-273F:3B4A E8B001 call animation_set_entry
-273F:3B4D BB4218 mov bx, offset animation_rec_3
-273F:3B50 8B4703 mov ax, [bx+3]
-273F:3B53 E8A701 call animation_set_entry
-273F:3B56 E8A401 call animation_set_entry
-273F:3B59 E8A101 call animation_set_entry
-273F:3B5C E89E01 call animation_set_entry
-273F:3B5F FF164407 call [show_screen_proc]
-273F:3B63 FF166207 call [set_lower_palette_proc]
-
-273F:3B67 loc_774: ; xref 273F:3C48
-273F:3B67 úB8 0002 mov ax,2
-273F:3B6A úBB 0001 mov bx,1 ; (273F:0001=0E4h)
-273F:3B6D E8 0169 call animation_draw
-273F:3B70 FF 16 0744 call word ptr [show_screen_proc]
-273F:3B74 loc_775: ; xref 273F:3B82
-273F:3B74 B8 0005 mov ax,5
-273F:3B77 E8 0E6F call sleep ; (49E9)
-273F:3B7A E8 00EE call protection_cycle_characters
-273F:3B7D F6 06 11D5 FF test mouse_buttons, 0FFh
-273F:3B82 75 F0 jnz loc_775 ; Jump if not zero
-273F:3B84 loc_776: ; xref 273F:3B87
-273F:3B84 E8 5999 call check_keypress ; (9520)
-273F:3B87 75 FB jnz loc_776 ; Jump if not zero
-
-273F:3B89 loc_777: ; xref 273F:3B9C
-273F:3B89 B8 0005 mov ax,5
-273F:3B8C E8 0E5A call sleep ; (49E9)
-273F:3B8F E8 00D9 call protection_cycle_characters
-273F:3B92 E8 598B call check_keypress ; (9520)
-273F:3B95 75 07 jnz loc_778 ; Jump if not zero
-273F:3B97 F6 06 11D5 FF test mouse_buttons, 0FFh
-273F:3B9C 74 EB jz loc_777 ; Jump if zero
-273F:3B9E loc_778: ; xref 273F:3B95
-273F:3B9E B8 0002 mov ax,2 ; Change title text
-273F:3BA1 33 DB xor bx,bx ; Anim #2, frame #0
-273F:3BA3 E8 0133 call animation_draw
-273F:3BA6 FF 16 0744 call word ptr [show_screen_proc]
-273F:3BAA C6 06 1854 00 mov cp_num_digits, 0
-
-273F:3BAF loc_779: ; Get keypress
-273F:3BAF úE8 596E call check_keypress
-273F:3BB2 74 FB jz loc_779
-273F:3BB4 3C 08 cmp al,8 ; Backspace?
-273F:3BB6 74 28 je cp_backspace ; Jump if equal
-273F:3BB8 3C 30 cmp al,30h ; '0'
-273F:3BBA 72 F3 jb loc_779 ; Jump if below
-273F:3BBC 3C 3A cmp al,3Ah ; '9' + 1
-273F:3BBE 73 EF jae loc_779 ; Jump if above or =
-
-; At this point a numeric key has been pressed
-
-273F:3BC0 25 000F and ax,0Fh
-273F:3BC3 8B D8 mov bx,ax
-273F:3BC5 A0 1854 mov al, cp_num_digits
-273F:3BC8 05 0003 add ax,3
-273F:3BCB E8 010B call animation_draw
-273F:3BCE FF 16 0744 call word ptr [show_screen_proc]
-273F:3BD2 80 06 1854 01 add cp_num_digits, 1
-273F:3BD7 80 3E 1854 04 cmp cp_num_digits, 4
-273F:3BDC 72 D1 jb loc_779 ; Jump if below
-273F:3BDE 73 1F jnc cp_done ; Entered all 4 digits
-
-273F:3BE0 cp_backspace: ; xref 273F:3BB6
-273F:3BE0 F6 06 1854 FF test cp_num_digits, 0FFh
-273F:3BE5 74 C8 jz loc_779 ; Jump if zero
-273F:3BE7 80 2E 1854 01 sub cp_num_digits, 1
-273F:3BEC A0 1854 mov al, cp_num_digits
-273F:3BEF 04 03 add al,3
-273F:3BF1 32 E4 xor ah,ah ; Zero register
-273F:3BF3 úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:3BF6 E8 00E0 call animation_draw
-273F:3BF9 FF 16 0744 call word ptr [show_screen_proc]
-273F:3BFD EB B0 jmp short loc_779 ; (3BAF)
-
-; At this point four digits have been entered, so it's time to check if it's valid
-
-273F:3BFF cp_done: ; xref 273F:3BDE
-273F:3BFF C7 06 38B1 0000 mov time_ctr, 0
-273F:3C05 loc_782: ; xref 273F:3C0B
-273F:3C05 81 3E 38B1 00C8 cmp time_ctr, 0C8h
-273F:3C0B 72 F8 jb loc_782
-
-273F:3C0D FF 16 1856 call [cp_proc]
-273F:3C11 73 7D jnc loc_ret_786 ; Numbers correct
-
-; Redraw the originally displayed message
-
-273F:3C13 C6 06 1854 00 mov cp_num_digits, 0
-273F:3C18 B8 0003 mov ax,3
-273F:3C1B úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:3C1E E8 00B8 call animation_draw
-273F:3C21 B8 0004 mov ax,4
-273F:3C24 úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:3C27 E8 00AF call animation_draw
-273F:3C2A B8 0005 mov ax,5
-273F:3C2D úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:3C30 E8 00A6 call animation_draw
-273F:3C33 B8 0006 mov ax,6
-273F:3C36 úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:3C39 E8 009D call animation_draw
-273F:3C3C 80 06 1855 01 add cp_num_tries, 1
-273F:3C41 80 3E 1855 03 cmp cp_num_tries, 3
-273F:3C46 73 03 jae loc_783 ; Jump if above or =
-273F:3C48 E9 FF1C jmp loc_774 ; (3B67)
-273F:3C4B loc_783:
-273F:3C4B B8 000A mov ax,0Ah ; Copy protection failed
-273F:3C4E B6 01 mov dh,1
-273F:3C50 E8 0351 call display_message ; (3FA4)
-
-; Restore the backup copy of the current animation table
-
-273F:3C53 loc_784:
-273F:3C53 1E push ds
-273F:3C54 1E push ds
-273F:3C55 07 pop es
-273F:3C56 A1 4D00 mov ax, buffer_segment
-273F:3C59 8E D8 mov ds,ax
-273F:3C5B 33 F6 xor si,si ; Zero register
-273F:3C5D úBF B14E mov di, offset animation_table
-273F:3C60 B9 00CD mov cx, ANIMATION_SLOT_SIZE*10/2 ; 0CDh
-273F:3C63 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:3C65 1F pop ds
-273F:3C66 FF 16 0766 call word ptr ds:[fade_out_proc]
-273F:3C6A C3 retn
-
- copy_protection_check endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3B7A, 3B8F
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3C6B protection_cycle_characters proc near
-
-273F:3C6B 56 push si
-273F:3C6C 57 push di
-273F:3C6D 06 push es
-273F:3C6E B9 0014 mov cx,14h
-
-; Loop below to choose two random frames from the animation of possible characters.
-; If both selections are identical, it will loop back and re-generate two new values
-
-273F:3C71 loc_785: ; xref 273F:3C81
-273F:3C71 E8 07F8 call random
-273F:3C74 F7 E1 mul cx ; dx:ax = reg * ax
-273F:3C76 8B DA mov bx,dx
-273F:3C78 E8 07F1 call random
-273F:3C7B F7 E1 mul cx ; dx:ax = reg * ax
-273F:3C7D 8B C2 mov ax,dx
-273F:3C7F 3B C3 cmp ax,bx ; Prevent both images
-273F:3C81 74 EE je loc_785 ; being identical
-
-273F:3C83 E8 0045 call protection_draw_characters
-273F:3C86 E8 F4D0 call wait_for_video_port
-273F:3C89 FF 16 0744 call word ptr [show_screen_proc]
-273F:3C8D 07 pop es
-273F:3C8E 5F pop di
-273F:3C8F 5E pop si
-
-273F:3C90 loc_ret_786: ; xref 273F:3C11
-273F:3C90 C3 retn
-
- protection_cycle_characters endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3D22
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3C91 read_screen_alt proc near
-273F:3C91 50 push ax
-273F:3C92 2D 0001 sub ax,1
-273F:3C95 E8 FE2F call read_palette ; (3AC7)
-273F:3C98 E8 336A call menubar_clear_image
-273F:3C9B 58 pop ax
-273F:3C9C 8B 0E 4CE2 mov cx, data_segment
-273F:3CA0 BA 0080 mov dx,80h
-273F:3CA3 E8 C66E call read_entry ; (0314)
-273F:3CA6 A1 4CE4 mov ax, data_segment2
-273F:3CA9 8B 1E 074C mov bx, menubar_block_size
-273F:3CAD B1 04 mov cl,4
-273F:3CAF D3 EB shr bx,cl ; Shift w/zeros fill
-273F:3CB1 03 C3 add ax,bx
-273F:3CB3 8E C0 mov es,ax
-273F:3CB5 8B 16 4CE2 mov dx, data_segment
-273F:3CB9 FF 16 077C call [decode_entry_proc]
-273F:3CBD E8 CCA1 call clear_hotspot_rects
-273F:3CC0 80 0E 11D0 10 or menubar_state, 10h ; (273F:11D0=56h)
-273F:3CC5 80 26 11D0 DF and menubar_state, 0DFh ; (273F:11D0=56h)
-273F:3CCA C3 retn
- read_screen_alt endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3C83
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3CCB protection_draw_characters proc near
-273F:3CCB 50 push ax
-273F:3CCC B8 0001 mov ax,1
-273F:3CCF E8 0007 call animation_draw ; Draw right character
-273F:3CD2 5B pop bx
-273F:3CD3 33 C0 xor ax,ax
-273F:3CD5 E8 0001 call animation_draw ; Draw left character
-273F:3CD8 C3 retn
- protection_draw_characters endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3B6D, 3BA3, 3BCB, 3BF6, 3C1E, 3C27, 3C30
- ; 3C39, 3CCF, 3CD5, 3D48, 3D51, 3D8F, 3D98
- ; 3DE1, 3DEA, 3E11, 3E1A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animation_draw proc near
-273F:3CD9 B9 0029 mov cx, ANIMATION_SLOT_SIZE
-273F:3CDC F7 E1 mul cx
-273F:3CDE 05 B14E add ax, offset animation_table ; Calculate anim offset
-273F:3CE1 93 xchg bx,ax
-273F:3CE2 8B 77 19 mov si,[bx+19h] ; Get address for hotspot
-273F:3CE5 F7 64 07 mul word ptr [si+7] ; multiply by frame size
-273F:3CE8 8B F0 mov si,ax ; Store pixel data start
-273F:3CEA 89 77 08 mov [bx+8],si
-273F:3CED 53 push bx
-273F:3CEE FF 77 0A push word ptr [bx+0Ah] ; Pixel segment
-273F:3CF1 07 pop es
-273F:3CF2 FF 16 0754 call [add_animation_proc]
-273F:3CF6 5F pop di
-273F:3CF7 B0 01 mov al,1
-273F:3CF9 E8 CE2C call flag_covered_cells
-273F:3CFC C3 retn
- animation_draw endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3D3E, 3D41
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3CFD animation_set_entry proc near
-
-273F:3CFD 89 45 0A mov [di+0Ah],ax
-273F:3D00 89 5D 19 mov [di+19h],bx
-273F:3D03 88 55 28 mov [di+28h],dl
-273F:3D06 B9 0004 mov cx,4
-273F:3D09 F3/ A5 rep movsw ; Copy first 8 bytes
-273F:3D0B 83 C7 21 add di, ANIMATION_SLOT_SIZE - 8
-273F:3D0E C3 retn
-
- animation_set_entry endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- cp_proc_1 proc near
-
-273F:3D0F E8 075A call random
-273F:3D12 8A 1E 1855 mov bl, cp_num_tries
-273F:3D16 F6 26 1854 mul cp_num_digits ; ax = data * al
-273F:3D1A F8 clc ; Clear carry flag
-273F:3D1B 0B C0 or ax,ax ; Zero ?
-273F:3D1D C3 retn
-
- cp_proc_1 proc near
-
-273F:3D1E 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:937C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3D1F restart_restore_dialog proc near
-
-273F:3D1F B8 7900 mov ax,7900h ; Restart/Restore image
-273F:3D22 E8 FF6C call sub_79 ; Decode it
-273F:3D25 úBB 184B mov bx, offset animation_rec_4
-273F:3D28 E8 3AB7 call animation_decode
-273F:3D2B E8 E247 call show_arrow_cursor
-273F:3D2E 1E push ds
-273F:3D2F 07 pop es
-273F:3D30 úBF B14E mov di, offset animation_table
-273F:3D33 úBE 1890 mov si, 1890h
-273F:3D36 úBB 184B mov bx, offset animation_rec_4
-273F:3D39 8B 47 03 mov ax, [bx+3]
-273F:3D3C B2 00 mov dl, 0
-273F:3D3E E8 FFBC call animation_set_entry
-273F:3D41 E8 FFB9 call animation_set_entry
-273F:3D44 33 C0 xor ax,ax ; Zero register
-273F:3D46 33 DB xor bx,bx ; Zero register
-273F:3D48 E8 FF8E call animation_draw
-273F:3D4B B8 0001 mov ax,1
-273F:3D4E úBB 0001 mov bx,offset copyright+1 ; (31E4:0001='o')
-273F:3D51 E8 FF85 call animation_draw
-273F:3D54 FF 16 0744 call word ptr [show_screen_proc]
-273F:3D58 FF 16 0760 call word ptr [fade_in_proc]
-273F:3D5C C6 06 11DA 00 mov mouse_buttons2, 0
-273F:3D61 loc_787: ; xref 273F:3DB0, 3E02, 3E30
-273F:3D61 úFF 16 0744 call word ptr [show_screen_proc]
-273F:3D65 loc_788: ; xref 273F:3DA8
-273F:3D65 E8 5660 call room_check_keypresses
-273F:3D68 A1 11D6 mov ax, mouse_x2
-273F:3D6B 05 0080 add ax,80h
-273F:3D6E 2B 06 1890 sub ax,word ptr ds:[1890h] ; (31E4:1890=0F6h)
-273F:3D72 72 47 jc loc_791 ; Jump if carry Set
-273F:3D74 3D 0025 cmp ax,25h
-273F:3D77 73 42 jae loc_791 ; Jump if above or =
-273F:3D79 A1 11D8 mov ax, mouse_y2
-273F:3D7C 05 0080 add ax,80h
-273F:3D7F 2B 06 1892 sub ax,word ptr ds:[1892h] ; (31E4:1892=118h)
-273F:3D83 72 36 jc loc_791 ; Jump if carry Set
-273F:3D85 3D 000E cmp ax,0Eh
-273F:3D88 73 31 jae loc_791 ; Jump if above or =
-273F:3D8A 33 C0 xor ax,ax ; Zero register
-273F:3D8C úBB 0002 mov bx,offset copyright+2 ; (31E4:0002='py')
-273F:3D8F E8 FF47 call animation_draw
-273F:3D92 B8 0001 mov ax,1
-273F:3D95 úBB 0001 mov bx,offset copyright+1 ; (31E4:0001='o')
-273F:3D98 E8 FF3E call animation_draw
-273F:3D9B F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:3DA0 75 10 jnz loc_790 ; Jump if not zero
-273F:3DA2 2E: 80 3E 3D1E 01 cmp cs:data_288,1 ; (273F:3D1E=0)
-273F:3DA8 loc_789: ; xref 273F:3DFA
-273F:3DA8 74 BB je loc_788 ; Jump if equal
-273F:3DAA 2E: C6 06 3D1E 01 mov cs:data_288,1 ; (273F:3D1E=0)
-273F:3DB0 EB AF jmp short loc_787 ; (3D61)
-273F:3DB2 loc_790: ; xref 273F:3DA0
-273F:3DB2 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:3DB7 0D 0001 or ax,1
-273F:3DBA C3 retn
-273F:3DBB loc_791: ; xref 273F:3D72, 3D77, 3D83, 3D88
-273F:3DBB A1 11D6 mov ax, mouse_x2
-273F:3DBE 05 0080 add ax,80h
-273F:3DC1 2B 06 1898 sub ax,word ptr ds:[1898h] ; (31E4:1898=128h)
-273F:3DC5 72 46 jc loc_794 ; Jump if carry Set
-273F:3DC7 3D 0025 cmp ax,25h
-273F:3DCA 73 41 jae loc_794 ; Jump if above or =
-273F:3DCC A1 11D8 mov ax, mouse_y2
-273F:3DCF 05 0080 add ax,80h
-273F:3DD2 2B 06 189A sub ax,word ptr ds:[189Ah] ; (31E4:189A=118h)
-273F:3DD6 72 35 jc loc_794 ; Jump if carry Set
-273F:3DD8 3D 000E cmp ax,0Eh
-273F:3DDB 73 30 jae loc_794 ; Jump if above or =
-273F:3DDD 33 C0 xor ax,ax ; Zero register
-273F:3DDF 33 DB xor bx,bx ; Zero register
-273F:3DE1 E8 FEF5 call animation_draw
-273F:3DE4 B8 0001 mov ax,1
-273F:3DE7 úBB 0003 mov bx,offset copyright+3 ; (31E4:0003='y')
-273F:3DEA E8 FEEC call animation_draw
-273F:3DED F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:3DF2 75 11 jnz loc_793 ; Jump if not zero
-273F:3DF4 2E: 80 3E 3D1E 02 cmp cs:data_288,2 ; (273F:3D1E=0)
-273F:3DFA loc_792: ; xref 273F:3E28
-273F:3DFA 74 AC je loc_789 ; Jump if equal
-273F:3DFC 2E: C6 06 3D1E 02 mov cs:data_288,2 ; (273F:3D1E=0)
-273F:3E02 E9 FF5C jmp loc_787 ; (3D61)
-273F:3E05 loc_793: ; xref 273F:3DF2
-273F:3E05 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:3E0A 33 C0 xor ax,ax ; Zero register
-273F:3E0C C3 retn
-273F:3E0D loc_794: ; xref 273F:3DC5, 3DCA, 3DD6, 3DDB
-273F:3E0D 33 C0 xor ax,ax ; Zero register
-273F:3E0F 33 DB xor bx,bx ; Zero register
-273F:3E11 E8 FEC5 call animation_draw
-273F:3E14 B8 0001 mov ax,1
-273F:3E17 úBB 0001 mov bx,offset copyright+1 ; (31E4:0001='o')
-273F:3E1A E8 FEBC call animation_draw
-273F:3E1D C6 06 11DA 00 mov mouse_buttons2, 0
-273F:3E22 2E: F6 06 3D1E FF test cs:data_288,0FFh ; (273F:3D1E=0)
-273F:3E28 74 D0 jz loc_792 ; Jump if zero
-273F:3E2A 2E: C6 06 3D1E 00 mov cs:data_288,0 ; (273F:3D1E=0)
-273F:3E30 E9 FF2E jmp loc_787 ; (3D61)
-
- restart_restore_dialog endp
-
-273F:3E33 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:000B, 009D, 2053, 4792, 4FAB, 5024, 5423
- ; 5738, 57D3, 5838, 58DA, 592B, 5AF2, 5B55
- ; 5BCF, 5C21, 5C66, 5C87, 5CD7, 5D40, 8A0D
- ; 8AFF, 8C52, 8C67, 8C7A, 8CA4, 95F7, 962F
- ; 9635
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3E34 sequence_execute proc near
-273F:3E34 ú57 push di
-273F:3E35 56 push si
-273F:3E36 55 push bp
-273F:3E37 53 push bx
-273F:3E38 8B F0 mov si,ax
-273F:3E3A C7 06 BA1D 0000 mov sequence_result, 0
-273F:3E40 E8 000A call sequence_execute_inner
-273F:3E43 5B pop bx
-273F:3E44 5D pop bp
-273F:3E45 5E pop si
-273F:3E46 5F pop di
-273F:3E47 A1 BA1D mov ax, sequence_result
-273F:3E4A 0B C0 or ax,ax ; Zero ?
-273F:3E4C C3 retn
- sequence_execute endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3E40, 3F51
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
- sequence_execute_inner proc near
-273F:3E4D 89 26 1910 mov current_sp, sp
-273F:3E51 BF 1910 mov di, offset current_sp ; Set up stack frame
-273F:3E54 B8 450F mov ax, scripts_seg
-273F:3E57 8E C0 mov es,ax
-
-273F:3E59 loc_796:
-273F:3E59 ú26: 8A 1C mov bl,es:[si]
-273F:3E5C 83 C6 01 add si,1
-273F:3E5F F6 C3 01 test bl,1
-273F:3E62 74 06 jz loc_797 ; Jump if zero
-273F:3E64 26: 8B 14 mov dx,es:[si]
-273F:3E67 83 C6 02 add si,2
-273F:3E6A loc_797: ; xref 273F:3E62
-273F:3E6A 81 E3 00FE and bx,0FEh
-273F:3E6E FF A7 18A0 jmp word ptr ds:[sequence_table][bx]
- sequence_execute_inner endp
-
-
-273F:3E72 8B 05 sequence_add: mov ax,[di]
-273F:3E74 01 45 02 add [di+2],ax
-273F:3E77 83 C7 02 add di,2
-273F:3E7A EB DD jmp short loc_796 ; (3E59)
-
-
- ;* No entry point to code
-273F:3E7C 8B 05 sequence_subtract: mov ax,[di]
-273F:3E7E 29 45 02 sub [di+2],ax
-273F:3E81 83 C7 02 add di,2
-273F:3E84 EB D3 jmp short loc_796 ; (3E59)
- ;* No entry point to code
-273F:3E86 8B 05 sequence_multiply: mov ax,[di]
-273F:3E88 F7 65 02 mul word ptr [di+2] ; dx:ax = data * ax
-273F:3E8B 83 C7 02 add di,2
-273F:3E8E 89 05 mov [di],ax
-273F:3E90 EB C7 jmp short loc_796 ; (3E59)
-
-273F:3E92 8B 45 02 sequence_divide: mov ax,[di+2]
-273F:3E95 33 D2 xor dx,dx ; Zero register
-273F:3E97 F7 35 div word ptr [di] ; ax,dxrem=dx:ax/data
-273F:3E99 83 C7 02 add di,2
-273F:3E9C 89 05 mov [di],ax
-273F:3E9E EB B9 jmp short loc_796 ; (3E59)
-
-273F:3EA0 8B 05 sequence_not_equals: mov ax,[di]
-273F:3EA2 3B 45 02 cmp ax,[di+2]
-273F:3EA5 74 0A je loc_one ; Jump if equal
-
-273F:3EA7 úC7 45 02 0000 loc_zero: mov word ptr [di+2],0
-273F:3EAC 83 C7 02 add di,2
-273F:3EAF EB A8 jmp short loc_796 ; (3E59)
-
-273F:3EB1 ú83 C7 02 loc_one: add di,2
-273F:3EB4 C7 05 0001 mov word ptr [di],1
-273F:3EB8 EB 9F jmp short loc_796 ; (3E59)
-273F:3EBA 8B 05 sequence_equals: mov ax,[di]
-273F:3EBC 3B 45 02 cmp ax,[di+2]
-273F:3EBF 75 F0 jne loc_one ; Jump if not equal
-273F:3EC1 EB E4 jmp short loc_zero ; (3EA7)
-
-273F:3EC3 8B 45 02 sequence_greater: mov ax,[di+2]
-273F:3EC6 2B 05 sub ax,[di]
-273F:3EC8 72 E7 jc loc_one ; Jump if carry Set
-273F:3ECA EB DB jmp short loc_zero ; (3EA7)
-
-273F:3ECC 8B 05 sequence_smaller: mov ax,[di]
-273F:3ECE 2B 45 02 sub ax,[di+2]
-273F:3ED1 72 DE jc loc_one ; Jump if carry Set
-273F:3ED3 EB D2 jmp short loc_zero ; (3EA7)
-
-273F:3ED5 8B 05 sequence_smaller2: mov ax,[di]
-273F:3ED7 2B 45 02 sub ax,[di+2]
-273F:3EDA 78 CB js loc_zero ; Jump if sign=1
-273F:3EDC EB D3 jmp short loc_one ; (3EB1)
-
-273F:3EDE 8B 45 02 sequence_greater2: mov ax,[di+2]
-273F:3EE1 2B 05 sub ax,[di]
-273F:3EE3 78 C2 js loc_zero ; Jump if sign=1
-273F:3EE5 EB CA jmp short loc_one ; (3EB1)
-
-273F:3EE7 8B 05 sequence_and: mov ax,[di]
-273F:3EE9 21 45 02 and [di+2],ax
-273F:3EEC 83 C7 02 add di,2
-273F:3EEF E9 FF67 jmp loc_796 ; (3E59)
-
-273F:3EF2 8B 05 sequence_or: mov ax,[di]
-273F:3EF4 09 45 02 or [di+2],ax
-273F:3EF7 83 C7 02 add di,2
-273F:3EFA E9 FF5C jmp loc_796 ; (3E59)
-
-273F:3EFD F7 45 02 FFFF sequence_logical_and: test word ptr [di+2],0FFFFh
-273F:3F02 74 A3 jz loc_zero ; Jump if zero
-273F:3F04 F7 05 FFFF test word ptr [di],0FFFFh
-273F:3F08 74 9D jz loc_zero ; Jump if zero
-273F:3F0A EB A5 jmp short loc_one ; (3EB1)
-
-273F:3F0C F7 45 02 FFFF sequence_logical_or: test word ptr [di+2],0FFFFh
-273F:3F11 75 9E jnz loc_one ; Jump if not zero
-273F:3F13 F7 05 FFFF test word ptr [di],0FFFFh
-273F:3F17 75 98 jnz loc_one ; Jump if not zero
-273F:3F19 EB 8C jmp short loc_zero ; (3EA7)
-
-273F:3F1B 83 EF 02 sequence_get_field: sub di,2
-273F:3F1E 81 C2 BA15 add dx, offset room_number_2
-273F:3F22 57 push di
-273F:3F23 8B FA mov di,dx
-273F:3F25 8B 05 mov ax,[di]
-273F:3F27 5F pop di
-273F:3F28 89 05 mov [di],ax
-273F:3F2A E9 FF2C jmp loc_796 ; (3E59)
-
-273F:3F2D 81 C2 BA15 sequence_set_field: add dx, offset room_number_2
-273F:3F31 8B 05 mov ax,[di] ; Get value off stack
-273F:3F33 57 push di
-273F:3F34 8B FA mov di,dx
-273F:3F36 89 05 mov [di],ax ; Set field value
-273F:3F38 5F pop di
-273F:3F39 83 C7 02 add di,2 ; Pop stack element
-273F:3F3C E9 FF1A jmp loc_796
-
-273F:3F3F E8 052A sequence_random: call random
-273F:3F42 8A D4 mov dl,ah
-273F:3F44 32 F6 xor dh,dh ; Zero register
-
-273F:3F46 83 EF 02 sequence_push_value: sub di,2
-273F:3F49 89 15 mov [di],dx
-273F:3F4B E9 FF0B jmp loc_796 ; (3E59)
- ;* No entry point to code
-273F:3F4E 56 sequence_subroutine: push si
-273F:3F4F 8B F2 mov si,dx
-273F:3F51 E8 FEF9 call sequence_execute_inner
-273F:3F54 5E pop si
-273F:3F55 loc_800: ; xref 273F:3F97
-273F:3F55 E9 FF01 jmp loc_796 ; (3E59)
-
-273F:3F58 D1 E2 sequence_call_method: shl dx,1
-273F:3F5A 81 C2 BABF add dx, offset sequence_method_list
-273F:3F5E 57 push di
-273F:3F5F 8B FA mov di,dx
-273F:3F61 8B 05 mov ax,[di] ; Get address of method
-273F:3F63 5F pop di
-273F:3F64 ú81 FF 1910 cmp di, offset current_sp ; Any value on stack?
-273F:3F68 74 1B je loc_801 ; No, so go call method
-273F:3F6A 8B 1D mov bx,[di] ; bx = top stack value
-273F:3F6C 83 C7 02 add di,2
-273F:3F6F ú81 FF 1910 cmp di, offset current_sp ; Any value on stack?
-273F:3F73 74 10 je loc_801 ; No, so go call method
-273F:3F75 8B 0D mov cx,[di] ; cx = top stack value
-273F:3F77 83 C7 02 add di,2
-273F:3F7A ú81 FF 1910 cmp di, offset current_sp ; Any value on stack?
-273F:3F7E 74 05 je loc_801 ; No, so go call method
-273F:3F80 8B 15 mov dx,[di] ; dx = top stack value
-273F:3F82 83 C7 02 add di,2
-273F:3F85 loc_801:
-273F:3F85 56 push si
-273F:3F86 57 push di
-273F:3F87 06 push es
-273F:3F88 FF D0 call ax ; Call method
-273F:3F8A 07 pop es
-273F:3F8B 5F pop di
-273F:3F8C 5E pop si
-273F:3F8D E9 FEC9 jmp loc_796 ; (3E59)
-
-273F:3F90 8B 05 sequence_cond_jump: mov ax,[di]
-273F:3F92 83 C7 02 add di,2
-273F:3F95 0B C0 or ax,ax ; Zero ?
-273F:3F97 75 BC jnz loc_800 ; Jump if not zero
-273F:3F99 03 F2 sequence_jump: add si,dx
-273F:3F9B E9 FEBB jmp loc_796 ; (3E59)
-
-273F:3F9E C3 sequence_end: retn
-
-273F:3F9F 8B 26 10 19 sequence_restore_sp: mov sp, current_sp
-273F:3FA3 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:029A, 02A6, 0365, 03BB, 03C7, 0426, 04FC
- ; 0691, 3C50, 7041, 7591, 7B04, 902C, 9414
- ; AA1B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:3FA4 display_message proc near
-273F:3FA4 80 0E 073D 01 or status_flags2, 1
-273F:3FA9 80 0E 11D0 08 or menubar_state, 8
-273F:3FAE 3D 000C cmp ax,0Ch
-273F:3FB1 72 03 jb loc_802 ; Jump if below
-273F:3FB3 B8 000C mov ax,0Ch
-273F:3FB6 loc_802: ; xref 273F:3FB1
-273F:3FB6 F6 C6 FF test dh,0FFh
-273F:3FB9 75 03 jnz loc_803 ; Jump if not zero
-273F:3FBB E9 0128 jmp loc_816 ; (40E6)
-273F:3FBE loc_803: ; xref 273F:3FB9
-273F:3FBE 50 push ax
-273F:3FBF B8 31E4 mov ax,data_seg
-273F:3FC2 8E D8 mov ds,ax
-273F:3FC4 F6 06 073C 04 test status_flags, STATUS_TIMER_SET
-273F:3FC9 74 12 jz loc_804 ; Jump if zero
-273F:3FCB 1E push ds
-273F:3FCC 2E: A1 04AC mov ax,word ptr cs:old_timer_int_proc+2 ; (273F:04AC=40h)
-273F:3FD0 8E D8 mov ds,ax
-273F:3FD2 2E: 8B 16 04AA mov dx,cs:old_timer_int_proc
-273F:3FD7 B8 2508 mov ax,2508h
-273F:3FDA CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:3FDC 1F pop ds
-273F:3FDD loc_804: ; xref 273F:3FC9
-273F:3FDD F6 06 073C 10 test status_flags, STATUS_CRITICAL_SET
-273F:3FE2 74 12 jz loc_805 ; Jump if zero
-273F:3FE4 1E push ds
-273F:3FE5 2E: A1 04B4 mov ax,cs:old_critical_int_proc+2
-273F:3FE9 8E D8 mov ds,ax
-273F:3FEB 2E: 8B 16 04B2 mov dx,cs:old_critical_int_proc
-273F:3FF0 B8 2524 mov ax,2524h
-273F:3FF3 CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:3FF5 1F pop ds
-273F:3FF6 loc_805: ; xref 273F:3FE2
-273F:3FF6 F6 06 073C 40 test status_flags, STATUS_KEYBOARD_SET
-273F:3FFB 74 12 jz loc_806 ; Jump if zero
-273F:3FFD 1E push ds
-273F:3FFE 2E: A1 04B0 mov ax, word ptr cs:old_kbd_int_proc+2
-273F:4002 8E D8 mov ds,ax
-273F:4004 2E: 8B 16 04AE mov dx, cs:old_kbd_int_proc
-273F:4009 B8 2509 mov ax,2509h
-273F:400C CD 21 int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
-273F:400E 1F pop ds
-273F:400F loc_806: ; xref 273F:3FFB
-273F:400F F6 06 073C 01 test status_flags, STATUS_VIDEO_MODE_SET
-273F:4014 74 07 jz loc_807 ; Jump if zero
-273F:4016 A0 073B mov al,data_542 ; (31E4:073B=0)
-273F:4019 32 E4 xor ah,ah ; Zero register
-273F:401B CD 10 int 10h ; Video display ah=functn 00h
- ; set display mode in al
-273F:401D loc_807: ; xref 273F:4014
-273F:401D B8 0000 mov ax,0
-273F:4020 CD 33 int 33h ; Mouse driver ax=func 0000h
- ; installed?, ax=0 no, =-1 yes
- ; bx=number of mouse buttons
-273F:4022 F6 06 073C 08 test status_flags, STATUS_CTRL_BREAK_SET
-273F:4027 74 24 jz loc_808 ; Jump if zero
-273F:4029 B8 3301 mov ax,3301h
-273F:402C 8A 16 073E mov dl, old_ctrl_break_flag
-273F:4030 CD 21 int 21h ; DOS Services ah=function 33h
- ; set ctrl-break flag dl=off/on
-273F:4032 B8 0040 mov ax,40h
-273F:4035 8E C0 mov es,ax
-273F:4037 A0 073F mov al,data_546 ; (31E4:073F=1)
-273F:403A 24 70 and al,70h ; 'p'
-273F:403C 26: 80 26 0017 8F and byte ptr es:keybd_flags_1,8Fh ; (0040:0017=0)
-273F:4042 26: 08 06 0017 or es:keybd_flags_1,al ; (0040:0017=0)
-273F:4047 B4 06 mov ah,6
-273F:4049 B2 FF mov dl,0FFh
-273F:404B CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:404D loc_808: ; xref 273F:4027
-273F:404D 58 pop ax
-273F:404E 0B C0 or ax,ax ; Zero ?
-273F:4050 74 15 jz loc_809 ; Jump if zero
-273F:4052 50 push ax
-273F:4053 B4 09 mov ah,9
-273F:4055 úBA 3848 mov dx,offset data_779 ; (31E4:3848='')
-273F:4058 CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:405A 58 pop ax
-273F:405B D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:405D 8B D8 mov bx,ax
-273F:405F 8B 97 3670 mov dx,errormsg_list[bx] ; (31E4:3670=0)
-273F:4063 B4 09 mov ah,9
-273F:4065 CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:4067 loc_809: ; xref 273F:4050
-273F:4067 E8 6189 call sub_257 ; (A1F3)
-273F:406A B9 FFFF mov cx,0FFFFh
-273F:406D B0 36 mov al,36h ; '6'
-273F:406F E6 43 out 43h,al ; port 43h, 8253 timer control
-273F:4071 EB 00 jmp short $+2 ; delay for I/O
-273F:4073 EB 00 jmp short $+2 ; delay for I/O
-273F:4075 8A C1 mov al,cl
-273F:4077 E6 40 out 40h,al ; port 40h, 8253 timer 0 clock
-273F:4079 EB 00 jmp short $+2 ; delay for I/O
-273F:407B EB 00 jmp short $+2 ; delay for I/O
-273F:407D 8A C5 mov al,ch
-273F:407F E6 40 out 40h,al ; port 40h, 8253 timer 0 clock
-273F:4081 B0 00 mov al,0
-273F:4083 B4 4C mov ah,4Ch
-273F:4085 CD 21 int 21h ; DOS Services ah=function 4Ch
- ; terminate with al=return code
-273F:4087 loc_810: ; xref 273F:40F2
-273F:4087 50 push ax
-273F:4088 A0 073B mov al,data_542 ; (31E4:073B=0)
-273F:408B 32 E4 xor ah,ah ; Zero register
-273F:408D CD 10 int 10h ; Video display ah=functn 00h
- ; set display mode in al
-273F:408F EB 01 jmp short loc_812 ; (4092)
-273F:4091 loc_811: ; xref 273F:40EB
-273F:4091 50 push ax
-273F:4092 loc_812: ; xref 273F:408F
-273F:4092 B4 09 mov ah,9
-273F:4094 úBA 3848 mov dx,offset data_779 ; (31E4:3848='')
-273F:4097 CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:4099 58 pop ax
-273F:409A D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:409C 8B D8 mov bx,ax
-273F:409E 8B 97 3670 mov dx,errormsg_list[bx] ; (31E4:3670=0)
-273F:40A2 83 C2 02 add dx,2
-273F:40A5 B4 09 mov ah,9
-273F:40A7 CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:40A9 B4 09 mov ah,9
-273F:40AB úBA 3848 mov dx,offset data_779 ; (31E4:3848='')
-273F:40AE CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:40B0 F6 06 073C 80 test status_flags, STATUS_MOUSE_HANDLER_SET
-273F:40B5 74 09 jz loc_813 ; Jump if zero
-273F:40B7 B4 09 mov ah,9
-273F:40B9 úBA 37D0 mov dx,offset data_777 ; (31E4:37D0='Press a mouse bu')
-273F:40BC CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:40BE EB 07 jmp short loc_814 ; (40C7)
-273F:40C0 loc_813: ; xref 273F:40B5
-273F:40C0 B4 09 mov ah,9
-273F:40C2 úBA 37F2 mov dx,offset data_778 ; (31E4:37F2='and press any ke')
-273F:40C5 CD 21 int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-273F:40C7 loc_814: ; xref 273F:40BE
-273F:40C7 E8 DECC call pause_for_input ; (1F96)
-273F:40CA 50 push ax
-273F:40CB E8 DEBD call mouse_wait ; (1F8B)
-273F:40CE F6 06 073C 01 test status_flags, STATUS_VIDEO_MODE_SET
-273F:40D3 74 0A jz loc_815 ; Jump if zero
-273F:40D5 A0 0743 mov al,video_mode ; (31E4:0743=0)
-273F:40D8 32 E4 xor ah,ah ; Zero register
-273F:40DA CD 10 int 10h ; Video display ah=functn 00h
- ; set display mode in al
-273F:40DC E8 00A6 call set_upper_vga_palette ; (4185)
-273F:40DF loc_815: ; xref 273F:40D3
-273F:40DF 58 pop ax
-273F:40E0 80 26 073D FE and status_flags2, 0FEh
-273F:40E5 C3 retn
-273F:40E6 loc_816: ; xref 273F:3FBB
-273F:40E6 F6 06 073C 01 test status_flags, STATUS_VIDEO_MODE_SET
-273F:40EB 74 A4 jz loc_811 ; Jump if zero
-273F:40ED F6 06 073C 02 test status_flags, STATUS_UNKNOWN
-273F:40F2 74 93 jz loc_810 ; Jump if zero
-273F:40F4 8A 1E 11D0 mov bl,data_623 ; (31E4:11D0=3)
-273F:40F8 53 push bx
-273F:40F9 50 push ax
-273F:40FA 80 0E 11D0 01 or menubar_state, 1 ; (31E4:11D0=3)
-273F:40FF FF 16 075E call word ptr [show_cursor_proc]
-273F:4103 F6 06 11D0 10 test menubar_state, 10h ; (31E4:11D0=3)
-273F:4108 75 14 jnz loc_817 ; Jump if not zero
-273F:410A A1 4CE4 mov ax, data_segment2
-273F:410D 8E C0 mov es,ax
-273F:410F 33 C0 xor ax,ax ; Zero register
-273F:4111 8B 0E 0746 mov cx, screen_size
-273F:4115 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4117 33 FF xor di,di ; Zero register
-273F:4119 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:411B E8 C843 call clear_hotspot_rects
-273F:411E loc_817: ; xref 273F:4108
-273F:411E 58 pop ax
-273F:411F D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:4121 8B D8 mov bx,ax
-273F:4123 8B B7 3670 mov si,errormsg_list[bx] ; (31E4:3670=0)
-273F:4127 8B 34 mov si,[si]
-273F:4129 E8 47E1 call sub_216 ; (890D)
-273F:412C F6 06 073C 20 test status_flags, STATUS_UNKNOWN2
-273F:4131 74 0C jz loc_818 ; Jump if zero
-273F:4133 FF 36 073C push status_flags
-273F:4137 FF 16 0762 call [set_lower_palette_proc]
-273F:413B 8F 06 073C pop status_flags
-273F:413F loc_818: ; xref 273F:4131
-273F:413F E8 DE49 call mouse_wait ; (1F8B)
-273F:4142 E8 DE51 call pause_for_input ; (1F96)
-273F:4145 5B pop bx
-273F:4146 50 push ax
-273F:4147 53 push bx
-273F:4148 F6 06 073C 20 test status_flags, STATUS_UNKNOWN2
-273F:414D 74 09 jz loc_819 ; Jump if zero
-273F:414F 80 26 073C DF and status_flags, !STATUS_UNKNOWN2
-273F:4154 FF 16 0764 call [empty_palette_proc]
-273F:4158 loc_819:
-273F:4158 58 pop ax
-273F:4159 24 01 and al,1
-273F:415B 75 09 jnz loc_820 ; Jump if not zero
-273F:415D 80 26 11D0 FE and menubar_state, 0FEh ; (31E4:11D0=3)
-273F:4162 FF 16 075E call word ptr [show_cursor_proc]
-273F:4166 loc_820: ; xref 273F:415B
-273F:4166 F6 06 11D0 20 test menubar_state, 20h ; (31E4:11D0=3) ' '
-273F:416B 74 0B jz loc_821 ; Jump if zero
-273F:416D FF 16 0752 call [show_compressed_screen_proc]
-273F:4171 E8 D39A call room_add_animations
-273F:4174 FF 16 0744 call word ptr [show_screen_proc]
-273F:4178 loc_821: ; xref 273F:416B
-273F:4178 58 pop ax
-273F:4179 80 26 073D FE and status_flags2, 0FEh
-273F:417E C3 retn
- display_message endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_kill_player proc near
-273F:417F 80 0E 073D 50 or status_flags2, FLAG_RESTART|FLAG_RESTORERESTART ;50h
-273F:4184 C3 retn
- seq_kill_player endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; Sets the upper 16 palette entries of the VGA palette
- ;
- ; Called from: 273F:075B, 40DC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:4185 set_upper_vga_palette proc near
-273F:4185 1E push ds
-273F:4186 07 pop es
-273F:4187 B8 1012 mov ax,1012h
-273F:418A BB 00F0 mov bx,0F0h ; Start with palette entry #F0h
-273F:418D B9 0010 mov cx,10h ; Set 16 palette entries
-273F:4190 úBA 1727 mov dx,offset vga_palette ; es:dx pointer to table
-273F:4193 CD 10 int 10h ; Video display ah=functn 10h
- ; set cx color registers from
- ; ptr es:dx, bx=first reg
-273F:4195 C3 retn
- set_upper_vga_palette endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00AF, 0110, 60FF, 9762
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animation_tick proc near
-
-273F:4196 úBF B14E mov di, offset animation_table
-273F:4199 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:419C locloop_822:
-273F:419C F6 45 0C FF test byte ptr [di+0Ch], 0FFh
-273F:41A0 74 16 jz loc_823
-
-273F:41A2 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:41A5 A3 BA17 mov character_hotspot, ax
-273F:41A8 89 3E 1927 mov active_animation_offset, di
-273F:41AC 8B 45 11 mov ax, [di+ANIM_TICK_PROC]
-273F:41AF 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET]
-273F:41B2 57 push di
-273F:41B3 51 push cx
-273F:41B4 FF D0 call ax ; Call entry's handler proc
-273F:41B6 59 pop cx
-273F:41B7 5F pop di
-
-273F:41B8 loc_823:
-273F:41B8 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:41BB E2 DF loop locloop_822 ; Loop if cx > 0
-
-273F:41BD C3 null_tick_proc: retn
-
- animation_tick endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5F41
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:41BE action_dispatch proc near
-273F:41BE úC7 44 52 0000 mov [si+HS_DEST_HOTSPOT], 0
-273F:41C3 8B 5F 01 mov bx, [bx+CURRENT_ACTION_SUPPORT_TABLE]
-273F:41C6 8B EB mov bp, bx
-273F:41C8 8B 1F mov bx, [bx]
-273F:41CA 89 1E BB45 mov current_action_num, bx
-273F:41CE 83 C5 02 add bp, 2
-273F:41D1 D1 E3 shl bx, 1 ; Shift w/zeros fill
-273F:41D3 8B 87 3850 mov ax,word ptr ds:[actions2_proc_list][bx]
-273F:41D7 FF E0 jmp ax
- action_dispatch endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:41D9 loc_825: ; xref 273F:52BB
-273F:41D9 ú8B DE mov bx, si
-273F:41DB 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:41DE 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:41E1 F7 44 61 FFFF test word ptr [si+HS_ACTION_OFFSET], 0FFFFh
-273F:41E6 74 0F jz loc_826 ; Jump if zero
-273F:41E8 83 6C 61 05 sub word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:41EC 83 EB 05 sub bx, CURRENT_ACTION_RECORD_SIZE
-273F:41EF C6 44 4D 00 mov byte ptr [si+4Dh], 0
-273F:41F3 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:41F6 C3 retn
-273F:41F7 loc_826: ; xref 273F:41E6
-273F:41F7 C6 07 00 mov byte ptr [bx], CHAR_ACTION_NONE
-273F:41FA 81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
-273F:41FF 75 0B jne loc_ret_827 ; Jump if not equal
-273F:4201 C6 06 9834 00 mov cursor_state, CURSORSTATE_NONE
-273F:4206 C7 06 11E4 FFFF mov hotspot_name_id2, 0FFFFh
-
-273F:420C loc_ret_827: ; xref 273F:41FF
-273F:420C C3 retn
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:51EE, 5FE0
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_translate_movements proc near
-273F:420D 8B 4C 21 mov cx, [si+HS_PIXEL_OFFSET]
-273F:4210 8B 44 5A mov ax, [si+HS_MOVEMENT_SRC_OFFSET]
-273F:4213 89 44 24 mov [si+HS_MOVEMENT_OFFSET], ax
-273F:4216 C7 44 26 0000 mov word ptr [si+HS_STEP_CTR], 0
-273F:421B C7 44 28 0000 mov word ptr [si+HS_FRAME_OFFSET], 0
-273F:4220 56 push si
-273F:4221 57 push di
-273F:4222 53 push bx
-273F:4223 8B F8 mov di, ax
-273F:4225 8B F1 mov si, cx
-273F:4227 8B DA mov bx, dx
-
-273F:4229 loc_828:
-273F:4229 ú8B 0F mov cx, [bx]
-273F:422B 0B C9 or cx, cx ; No more movements needed?
-273F:422D 74 51 jz loc_832 ; Exit if yes
-273F:422F 8B 57 02 mov dx, [bx+2] ; Get direction
-273F:4232 83 C3 04 add bx, 4 ; Move ptr to next move rec
-273F:4235 83 FA 01 cmp dx, FACING2_LEFT
-273F:4238 74 26 je loc_830 ; Jump if equal
-273F:423A 83 FA 02 cmp dx, FACING2_RIGHT
-273F:423D 74 31 je loc_831 ; Jump if equal
-273F:423F 83 FA 04 cmp dx, FACING2_UP
-273F:4242 74 0E je loc_829 ; Jump if equal
-273F:4244 83 C1 01 add cx, 1
-273F:4247 D1 E9 shr cx, 1
-273F:4249 8B 44 0B mov ax, [si+PIXEL_MOVEREC_DOWN]
-273F:424C AB stosw ; Store movement records
-273F:424D 8B C1 mov ax,cx
-273F:424F AB stosw ; Store steps
-273F:4250 EB D7 jmp short loc_828
-273F:4252 loc_829:
-273F:4252 83 C1 01 add cx, 1
-273F:4255 D1 E9 shr cx, 1
-273F:4257 8B 44 09 mov ax, [si+PIXEL_MOVEREC_UP]
-273F:425A AB stosw ; Store movement records
-273F:425B 8B C1 mov ax,cx
-273F:425D AB stosw ; Store steps
-273F:425E EB C9 jmp short loc_828
-273F:4260 loc_830:
-273F:4260 83 C1 03 add cx, 3
-273F:4263 D1 E9 shr cx, 1
-273F:4265 D1 E9 shr cx, 1
-273F:4267 8B 44 0D mov ax, [si+PIXEL_MOVEREC_LEFT]
-273F:426A AB stosw ; Store movement records
-273F:426B 8B C1 mov ax,cx
-273F:426D AB stosw ; Store steps
-273F:426E EB B9 jmp short loc_828
-273F:4270 loc_831:
-273F:4270 83 C1 03 add cx, 3
-273F:4273 D1 E9 shr cx, 1
-273F:4275 D1 E9 shr cx, 1
-273F:4277 8B 44 0F mov ax, [si+PIXEL_MOVEREC_RIGHT]
-273F:427A AB stosw ; Store movement records
-273F:427B 8B C1 mov ax,cx
-273F:427D AB stosw ; Store steps
-273F:427E EB A9 jmp short loc_828
-273F:4280 loc_832:
-273F:4280 B8 FFFF mov ax,0FFFFh
-273F:4283 AB stosw ; Store end makrer
-273F:4284 5B pop bx
-273F:4285 5F pop di
-273F:4286 5E pop si
-273F:4287 C3 retn
- character_translate_movements endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5242
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_check_room_change proc near
-273F:4288 ú56 push si
-273F:4289 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:428C E8 CA5B call get_room_resource_pointer2 ; Get room resource
-273F:428F 83 C6 1D add si, ROOM_EXITS_START ; Get pointer to room exits list
-273F:4292 8B 05 mov ax, [di+ANIM_X] ; get X start
-273F:4294 8B 4D 13 mov cx, [di+ANIM_WIDTH_COPY]; Get animation width
-273F:4297 D1 E9 shr cx, 1
-273F:4299 03 C1 add ax, cx
-273F:429B 8B 55 02 mov dx, [di+ANIM_Y]
-273F:429E 03 55 15 add dx, [di+ANIM_HEIGHT_COPY]
-273F:42A1 8B 4D 17 mov cx, [di+ANIM_Y_CORRECTION]
-273F:42A4 D1 E9 shr cx,1
-273F:42A6 2B D1 sub dx,cx ; ax=x, dx=y
-
-273F:42A8 loc_834:
-273F:42A8 ú83 3C FF cmp word ptr [si],0FFFFh ; End of list reached?
-273F:42AB 74 3A je loc_837 ; Jump if yes
-273F:42AD 3B 04 cmp ax, [si+ROOMREC_EXIT_X_START] ; Check bounds of the
-273F:42AF 72 27 jb loc_836 ; room exit against character
-273F:42B1 3B 44 02 cmp ax, [si+ROOMREC_EXIT_X_END]
-273F:42B4 73 22 jae loc_836
-273F:42B6 3B 54 04 cmp dx, [si+ROOMREC_EXIT_Y_START]
-273F:42B9 72 1D jb loc_836
-273F:42BB 3B 54 06 cmp dx, [si+ROOMREC_EXIT_Y_END]
-273F:42BE 73 18 jae loc_836
-273F:42C0 8B 44 08 mov ax, [si+ROOMREC_EXIT_SEQUENCE]
-273F:42C3 3D FFFF cmp ax, 0FFFFh ; Any sequence to run?
-273F:42C6 74 04 je loc_835 ; If no, go set room directly
-273F:42C8 5E pop si
-273F:42C9 E9 FB68 jmp sequence_execute
-273F:42CC loc_835: ; xref 273F:42C6
-273F:42CC 8B 54 0A mov dx, [si+ROOMREC_EXIT_ROOM_NUM] ; Get new room #/direction
-273F:42CF 8B 4C 0C mov cx, [si+ROOMREC_EXIT_NEW_X] ; Get new X
-273F:42D2 8B 5C 0E mov bx, [si+ROOMREC_EXIT_NEW_Y] ; Get new Y
-273F:42D5 5E pop si
-273F:42D6 EB 11 jmp character_change_room
-273F:42D8 loc_836:
-273F:42D8 8B 5C 08 mov bx, [si+ROOMREC_EXIT_SEQUENCE] ; Get sequence Id
-273F:42DB 83 C6 0A add si, 0Ah ; Move to next entry
-273F:42DE 0B DB or bx, bx ; Did entry have a script?
-273F:42E0 79 C6 jns loc_834 ; If not, go check next record
-273F:42E2 83 C6 06 add si, 6 ; Skip over room/x/y vals
-273F:42E5 EB C1 jmp short loc_834 ; Check next record
-273F:42E7 loc_837:
-273F:42E7 5E pop si
-273F:42E8 C3 retn
- character_check_room_change endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:960F, 9628
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_change_room proc near
-273F:42E9 A1 BA17 mov ax, character_hotspot
-273F:42EC 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is character the player?
-273F:42EF 75 2E jne loc_840 ; Jump if not
-273F:42F1 F6 06 9834 FF test cursor_state, 0FFh
-273F:42F6 75 26 jnz loc_ret_839 ; Jump if not zero
-
-; Room change code for the player
-273F:42F8 úBE 6CEF mov si, offset player_hotspot_rec
-273F:42FB 88 74 50 mov [si+HS_DIRECTION], dh
-273F:42FE C6 44 51 00 mov byte ptr [si+HS_DIRECTION+1], 0
-273F:4302 32 F6 xor dh,dh ; Zero register
-273F:4304 83 EB 30 sub bx, 48
-273F:4307 89 16 982C mov new_room_number_2, dx
-273F:430B 89 0E 982E mov new_room_x, cx
-273F:430F 89 1E 9830 mov new_room_y, bx
-273F:4313 E8 1D23 call character_change_room_check_bumped
-273F:4316 75 06 jnz loc_ret_839 ; Jump if not zero
-273F:4318 C7 06 982C 0000 mov new_room_number_2, 0
-273F:431E loc_ret_839: retn
-
-; Room change code for other characters
-273F:431F loc_840:
-273F:431F 8B 3E 1927 mov di, active_animation_offset
-273F:4323 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET]
-273F:4326 53 push bx
-273F:4327 51 push cx
-273F:4328 52 push dx
-273F:4329 E8 017D call check_for_impinging_characters
-273F:432C 5A pop dx
-273F:432D 59 pop cx
-273F:432E 5B pop bx
-273F:432F 75 06 jnz loc_841 ; Jump if not zero
-273F:4331 33 C0 xor ax,ax ; Zero register
-273F:4333 E8 01F2 call set_new_dispatch_action
-273F:4336 C3 retn
-273F:4337 loc_841: ; xref 273F:432F
-273F:4337 83 E1 F8 and cx, 0FFF8h
-273F:433A 83 C9 05 or cx, 5
-273F:433D 89 0D mov [di+ANIM_X], cx
-273F:433F 89 4C 0D mov [si+HS_X], cx
-273F:4342 8A CE mov cl, dh
-273F:4344 32 F6 xor dh, dh ; Zero register
-273F:4346 89 55 0E mov [di+ANIM_ROOM_NUM], dx
-273F:4349 89 54 06 mov [si+HS_ROOM_NUM], dx
-273F:434C 2B 5C 1B sub bx, [si+HS_HEIGHT_COPY]
-273F:434F 83 E3 F8 and bx, 0FFF8h
-273F:4352 89 5D 02 mov [di+ANIM_Y], bx
-273F:4355 89 5C 0F mov [si+HS_Y], bx
-273F:4358 8B DE mov bx, si
-273F:435A 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:435D 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:4360 E9 0EE3 jmp character_change_room_2
- character_change_room endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_update_movement_2:
-273F:4363 ú88 44 44 mov [si+HS_CHAR_MODE], al
-
-
- character_update_movement proc near
-273F:4366 ú53 push bx
-273F:4367 8B DE mov bx, si
-273F:4369 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:436C 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:436F 8A 07 mov al, [bx]
-273F:4371 5B pop bx
-273F:4372 3C 03 cmp al, CHAR_ACTION_EXEC_SCRIPT
-273F:4374 74 10 je loc_ret_845 ; Exit if running script
-273F:4376 F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
-273F:437A 75 07 jnz loc_844 ; Jump if not zero
-273F:437C C6 44 49 01 mov byte ptr [si+HS_PATHFIND_COVERED], 1
-273F:4380 E8 2DAB call pathfind_flag_covered_cells
-273F:4383 loc_844: ; xref 273F:437A
-273F:4383 E9 032B jmp character_reset_direction
-
-273F:4386 loc_ret_845: ; xref 273F:4374, 438B
-273F:4386 C3 retn
- character_update_movement endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5050, 50B1, 512D, 5224, 5EC4, 5EF1, 5F5C
- ; 7758
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_pathfind_clear proc near
-273F:4387 F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
-273F:438B 74 F9 jz loc_ret_845 ; Jump if zero
-273F:438D C6 44 49 00 mov byte ptr [si+HS_PATHFIND_COVERED], 0
-273F:4391 E9 2DAF jmp pathfind_clear_covered_cells
- character_pathfind_clear endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:56D0, 712F, 7144
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_get_cell proc near
-273F:4394 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:4397 2D 0001 sub ax, 1 ; ax=room # - 1
-273F:439A 8B D8 mov bx, ax
-273F:439C B1 04 mov cl, 4
-273F:439E D3 E3 shl bx, cl ; bx=(R-1)*16
-273F:43A0 2B D8 sub bx, ax ; bx=(R-1)*15
-273F:43A2 B1 03 mov cl, 3
-273F:43A4 D3 E3 shl bx, cl ; bx=(R-1)*120
-273F:43A6 81 C3 984A add bx, offset pathfind_data2
-273F:43AA 8B 45 02 mov ax, [di+ANIM_Y]
-273F:43AD 2D 0088 sub ax, 88h
-273F:43B0 03 45 15 add ax, [di+ANIM_HEIGHT_COPY]
-273F:43B3 2D 0004 sub ax, 4
-273F:43B6 D3 E8 shr ax, cl
-273F:43B8 3D 0018 cmp ax, 18h ; (y+height-8-4) >= 200?
-273F:43BB 73 50 jae loc_850 ; If yes then jump to exit
-273F:43BD 8B D0 mov dx, ax ; ax=0->17
-273F:43BF D1 E0 shl ax, 1
-273F:43C1 D1 E0 shl ax, 1 ; ax=ax*4
-273F:43C3 03 C2 add ax, dx ; ax=ax*5
-273F:43C5 03 D8 add bx, ax ; Add bx onto offset
-
-; At this point bx = (Room# - 1) * 120 + (Y# * 5), where Y# is between 0 to 17
-273F:43C7 8B 05 mov ax, [di+ANIM_X]
-273F:43C9 D3 E8 shr ax, cl
-273F:43CB 8B 55 13 mov dx, [di+ANIM_WIDTH_COPY]
-273F:43CE D3 EA ` shr dx, cl ; ax=left/8, dx=width/8
-273F:43D0 75 03 jnz loc_846 ; Is width < 8 pixels?
-273F:43D2 BA 0001 mov dx, 1 ; Yes, default to 1 (8 pixels)
-273F:43D5 loc_846:
-273F:43D5 2D 0010 sub ax, 10h ; Is left < 0
-273F:43D8 73 0A jnc loc_847 ; Jump if not
-273F:43DA F7 D8 neg ax
-273F:43DC 2B D0 sub dx, ax
-273F:43DE 72 2D jc loc_850 ; Exit if offscreen to left
-273F:43E0 74 2B jz loc_850
-273F:43E2 33 C0 xor ax, ax ; Default to 0
-273F:43E4 loc_847:
-273F:43E4 8B E8 mov bp, ax
-273F:43E6 03 EA add bp, dx ; Add width
-273F:43E8 83 ED 29 sub bp, ROOM_PATHS_WIDTH+1
-273F:43EB 72 09 jc loc_848 ; Jump if on screen
-273F:43ED 83 C5 01 add bp, 1
-273F:43F0 2B D5 sub dx, bp
-273F:43F2 72 19 jc loc_850 ; Jump if carry Set
-273F:43F4 74 17 jz loc_850 ; Jump if zero
-273F:43F6 loc_848:
-273F:43F6 8B E8 mov bp, ax ; bp,ax=(left/8)-10h
-273F:43F8 D3 E8 shr ax, cl
-273F:43FA 03 D8 add bx, ax ; Increment X offset
-273F:43FC 8B CD mov cx, bp
-273F:43FE B8 0080 mov ax, 80h
-273F:4401 83 E1 07 and cx, 7
-273F:4404 74 02 jz loc_849
-273F:4406 D3 E8 shr ax, cl ; Setup bit mask
-273F:4408 loc_849: ; xref 273F:4404
-273F:4408 8B CA mov cx, dx
-273F:440A 0B C9 or cx, cx
-273F:440C C3 retn
-273F:440D loc_850: ; xref 273F:43BB, 43DE, 43E0, 43F2
- ; 43F4
-273F:440D 33 C9 xor cx, cx ; Zero register
-273F:440F C3 retn
- pathfind_get_cell endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0107, 60FC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_paused_list_countdown proc near
-273F:4410 BB B0AE mov bx, offset character_pause_list
-273F:4413 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
-
-273F:4416 locloop_851:
-273F:4416 F7 07 FFFF test word ptr [bx+PC_HOTSPOT_PTR],0FFFFh ; Entry position in use?
-273F:441A 74 1F jz loc_853 ; Skip entry if not
-273F:441C 83 6F 04 01 sub word ptr [bx+PC_COUNTER], 1 ; Decrement entry counter
-273F:4420 8B 47 04 mov ax, [bx+PC_COUNTER]
-273F:4423 0B C0 or ax,ax ; Reached zero?
-273F:4425 75 04 jnz loc_852 ; Jump if not
-273F:4427 C7 07 0000 mov word ptr [bx+PC_SRC_CHAR_ID], 0 ; Clear slot
-273F:442B loc_852:
-273F:442B 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
-273F:4430 73 09 jae loc_853 ; Jump if >= 2710h
-273F:4432 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
-273F:4435 05 0001 add ax, 1
-273F:4438 89 44 4A mov [si+HS_PAUSE_CTR], ax
-273F:443B loc_853:
-273F:443B 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
-273F:443E E2 D6 loop locloop_851 ; Loop if cx > 0
-
-273F:4440 C3 retn
- character_paused_list_countdown endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:479F, 51A8, 5FB9
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_paused_list_reset proc near
-273F:4441 53 push bx
-273F:4442 BB B0AE mov bx, offset character_pause_list
-273F:4445 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
-273F:4448 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-
-273F:444B locloop_854:
-273F:444B 3B 07 cmp ax, [bx+PC_SRC_CHAR_ID]
-273F:444D 75 16 jne loc_855 ; Skip if entry is empty
-273F:444F C7 47 04 0001 mov word ptr [bx+PC_COUNTER], 1
-273F:4454 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
-273F:4459 73 0A jae loc_855 ; Jump if above or =
-273F:445B 56 push si
-273F:445C 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
-273F:445F C7 44 4A 0001 mov word ptr [si+HS_PAUSE_CTR], 1
-273F:4464 5E pop si
-273F:4465 loc_855: ; Move to next entry
-273F:4465 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
-273F:4468 E2 E1 loop locloop_854 ; Loop through list
-
-273F:446A 5B pop bx
-273F:446B C3 retn
- character_paused_list_reset endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3C71, 3C78, 3D0F, 3F3F, 4971, 5687, 5697
- ; 7CAF, 7D2C, 81E1, 8224, 830A, 833D, 8385
- ; 988C, 9F4B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- random proc near
-273F:446C 56 push si
-273F:446D 57 push di
-273F:446E 53 push bx
-273F:446F 51 push cx
-273F:4470 8B 16 38A2 mov dx, random_v1
-273F:4474 A1 38A4 mov ax, random_v2
-273F:4477 B9 015A mov cx,15Ah
-273F:447A BB 4E35 mov bx,4E35h
-273F:447D 56 push si
-273F:447E 96 xchg si,ax
-273F:447F 92 xchg dx,ax
-273F:4480 85 C0 test ax,ax
-273F:4482 74 02 jz loc_856 ; Jump if zero
-273F:4484 F7 E3 mul bx ; dx:ax = reg * ax
-273F:4486 loc_856: ; xref 273F:4482
-273F:4486 91 xchg cx,ax
-273F:4487 85 C0 test ax,ax
-273F:4489 74 04 jz loc_857 ; Jump if zero
-273F:448B F7 E6 mul si ; dx:ax = reg * ax
-273F:448D 03 C8 add cx,ax
-273F:448F loc_857: ; xref 273F:4489
-273F:448F 96 xchg si,ax
-273F:4490 F7 E3 mul bx ; dx:ax = reg * ax
-273F:4492 03 D1 add dx,cx
-273F:4494 5E pop si
-273F:4495 05 0001 add ax,1
-273F:4498 83 D2 00 adc dx,0
-273F:449B 89 16 38A2 mov random_v1, dx
-273F:449F A3 38A4 mov random_v2, ax
-273F:44A2 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:44A4 59 pop cx
-273F:44A5 5B pop bx
-273F:44A6 5F pop di
-273F:44A7 5E pop si
-273F:44A8 C3 retn
- random endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4329, 603C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- check_for_impinging_characters proc near
-273F:44A9 úBB B14E mov bx, offset animation_table
-273F:44AC B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:44AF 8B 55 0E mov dx, [di+ANIM_ROOM_NUM]
-
-273F:44B2 locloop_858: ; xref 273F:44D0
-273F:44B2 F6 47 1D FF test byte ptr [bx+ANIM_SKIP], 0FFh
-273F:44B6 74 15 jz loc_859 ; Jump if zero
-273F:44B8 F6 47 0C FF test byte ptr [bx+ANIM_LAYER], 0FFh
-273F:44BC 74 0F jz loc_859 ; Jump if zero
-273F:44BE 3B 57 0E cmp dx, [bx+ANIM_ROOM_NUM]
-273F:44C1 75 0A jne loc_859 ; Jump if not equal
-273F:44C3 53 push bx
-273F:44C4 8B 5F 19 mov bx, [bx+ANIM_HOTSPOT_OFFSET]
-273F:44C7 E8 10D7 call characters_impinging_check
-273F:44CA 5B pop bx
-273F:44CB 75 09 jnz loc_860 ; Jump if not zero
-273F:44CD loc_859: ; xref 273F:44B6, 44BC, 44C1
-273F:44CD 83 C3 29 add bx, ANIMATION_SLOT_SIZE
-273F:44D0 E2 E0 loop locloop_858 ; Loop if cx > 0
-
-273F:44D2 0D 0001 or ax, 1
-273F:44D5 C3 retn
-273F:44D6 loc_860: ; xref 273F:44CB
-273F:44D6 33 C0 xor ax, ax
-273F:44D8 C3 retn
- check_for_impinging_characters endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:476C, 85A3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- char_face_up proc near
-273F:44D9 ú8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:44DC 8A 47 11 mov al, [bx+PIXEL_FRAMENUM_UP]
-273F:44DF C7 45 22 0004 mov word ptr [di+ANIM_CHAR_RECT_Y], 4
-273F:44E4 C6 45 26 00 mov byte ptr [di+ANIM_DIRECTION], FACING_UP
-273F:44E8 EB 33 jmp short char_face_end
- char_face_up endp
-
- char_face_down proc near
-273F:44EA ú8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:44ED 8A 47 12 mov al, [bx+PIXEL_FRAMENUM_DOWN]
-273F:44F0 C7 45 22 0004 mov word ptr [di+ANIM_CHAR_RECT_Y], 4
-273F:44F5 C6 45 26 01 mov byte ptr [di+ANIM_DIRECTION], FACING_DOWN
-273F:44F9 EB 22 jmp short char_face_end
- char_face_down endp
-
- char_face_left proc near
-273F:44FB ú8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:44FE 8A 47 13 mov al, [bx+PIXEL_FRAMENUM_LEFT]
-273F:4501 C7 45 22 0000 mov word ptr [di+ANIM_CHAR_RECT_Y], 0
-273F:4506 C6 45 26 02 mov byte ptr [di+ANIM_DIRECTION], FACING_LEFT
-273F:450A EB 11 jmp short char_face_end
- char_face_left endp
-
- char_face_right proc near
-273F:450C ú8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:450F 8A 47 14 mov al, [bx+PIXEL_FRAMENUM_RIGHT]
-273F:4512 C7 45 22 0000 mov word ptr [di+ANIM_CHAR_RECT_Y], 0
-273F:4517 C6 45 26 03 mov byte ptr [di+ANIM_DIRECTION], FACING_RIGHT
-273F:451B EB 00 jmp short char_face_end
- char_face_right endp
-
-273F:451D char_face_end:
-273F:451D 8B 5F 07 mov bx, [bx+PIXEL_FRAME_SIZE] ; Calculate frame offset
-273F:4520 32 E4 xor ah, ah
-273F:4522 F7 E3 mul bx
-273F:4524 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax
-273F:4527 C3 retn
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4333
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- set_new_dispatch_action proc near
-273F:4528 ú83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:452C EB 0C jmp short loc_868
- set_new_dispatch_action endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_set_new_dispatch_action proc near
-273F:452E 53 push bx
-273F:452F 8B C1 mov ax, cx ; Get param
-273F:4531 E8 C7B6 call get_room_resource_pointer2 ; Get HS resource
-273F:4534 58 pop ax
-273F:4535 loc_867:
-273F:4535 úC7 44 61 0005 mov word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:453A loc_868:
-273F:453A C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
-273F:453E D1 E0 shl ax, 1 ; Shift w/zeros fill
-273F:4540 05 1380 add ax, offset support_data_offset_list
-273F:4543 8B D8 mov bx, ax
-273F:4545 8B 07 mov ax, [bx] ; Get support entry
-273F:4547 8B DE mov bx, si
-273F:4549 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:454C 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:454F 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
-273F:4552 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:4555 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:4558 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:455B C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:455F C3 retn
- seq_set_new_dispatch_action endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5133, 5F63
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_paused_list_scan proc near
-273F:4560 úF6 44 4C FF test byte ptr [si+HS_BLOCKED_FLAG], 0FFh
-273F:4564 74 2C jz loc_ret_873 ; Jump if zero
- character_paused_list_scan_2:
-273F:4566 ú53 push bx
-273F:4567 BB B0AE mov bx, offset character_pause_list
-273F:456A B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
-273F:456D 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-
-273F:4570 locloop_871: ; xref 273F:458F
-273F:4570 3B 07 cmp ax, [bx+PC_SRC_CHAR_ID] ; Found slot for hotspot?
-273F:4572 75 18 jne loc_872 ; Skip if not
-273F:4574 C7 47 04 000F mov word ptr [bx+PC_COUNTER], 15
-273F:4579 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
-273F:457E 73 0C jae loc_872
-273F:4580 56 push si
-273F:4581 51 push cx
-273F:4582 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
-273F:4585 C7 44 4A 000F mov word ptr [si+HS_PAUSE_CTR], 15
-273F:458A 59 pop cx
-273F:458B 5E pop si
-273F:458C loc_872: ; xref 273F:4572, 457E
-273F:458C 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
-273F:458F E2 DF loop locloop_871 ; Loop if cx > 0
-
-273F:4591 5B pop bx
-
-273F:4592 loc_ret_873: ; xref 273F:4564
-273F:4592 C3 retn
- character_paused_list_scan endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:131F, 56FC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- is_roomexit_hotspot proc near
-273F:4593 loc_874: ; xref 273F:459F
-273F:4593 3B 04 cmp ax,[si]
-273F:4595 74 0D je loc_875 ; Jump if equal
-273F:4597 83 C6 02 add si,2
-273F:459A F7 44 FE FFFF test word ptr [si-2],0FFFFh
-273F:459F 75 F2 jnz loc_874 ; Jump if not zero
-273F:45A1 0C 01 or al,1
-273F:45A3 C3 retn
-273F:45A4 loc_875: ; xref 273F:4595
-273F:45A4 33 C0 xor ax,ax ; Zero register
-273F:45A6 C3 retn
- is_roomexit_hotspot endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5402, 5713, 5816, 5909, 5944, 5AB8, 5B30
- ; 5B96, 5C34, 5CB3, 5D7E, 5DAA, 89F0
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- hotspot_action_precheck proc near
-273F:45A7 3D 0420 cmp ax, 420h
-273F:45AA 74 0A je loc_876 ; Jump if equal
-273F:45AC 3D 0436 cmp ax, 436h
-273F:45AF 74 05 je loc_876 ; Jump if equal
-273F:45B1 3D 0429 cmp ax, 429h
-273F:45B4 75 1A jne loc_879 ; Jump if not equal
-273F:45B6 loc_876: ; xref 273F:45AA, 45AF
-273F:45B6 50 push ax
-273F:45B7 55 push bp
-273F:45B8 E8 3F9F call sub_213 ; (855A)
-273F:45BB 5D pop bp
-273F:45BC 0B C0 or ax, ax ; Zero ?
-273F:45BE 74 0B jz loc_878 ; Jump if zero
-273F:45C0 58 pop ax
-273F:45C1 56 push si
-273F:45C2 E8 C725 call get_room_resource_pointer2
-273F:45C5 5B pop bx
-273F:45C6 87 F3 xchg si, bx ; si=char, bx=hotspot
-273F:45C8 loc_877:
-273F:45C8 E9 00BB jmp loc_888
-273F:45CB loc_878:
-273F:45CB 58 pop ax
-273F:45CC B8 0003 mov ax, 3 ; Initial call for action
-273F:45CF C3 retn ; (prior to moving to it)
-273F:45D0 loc_879:
-273F:45D0 56 push si
-273F:45D1 E8 C716 call get_room_resource_pointer2
-273F:45D4 5B pop bx
-273F:45D5 87 DE xchg bx, si
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:58B0
-
- hotspot_action_precheck_2:
-273F:45D7 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Is object in same room
-273F:45DA 3B 47 06 cmp ax, [bx+HS_ROOM_NUM] ; as the character?
-273F:45DD 75 72 jne loc_884 ; Jump if not
-273F:45DF F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 0FFh
-273F:45E3 75 46 jnz loc_883 ; Jump if not zero
-273F:45E5 C6 44 2A 01 mov byte ptr [si+HS_ACTION_CTR], 1
-273F:45E9 81 3E BA1B 0408 cmp active_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
-273F:45EF 72 09 jb loc_881 ; Jump if below
-273F:45F1 loc_880: ; xref 273F:4606, 463B, 4641, 4647
- ; 464F
-273F:45F1 úE8 0E95 call character_walking_check
-273F:45F4 75 D2 jnz loc_877 ; Jump if not zero
-273F:45F6 B8 0003 mov ax, 3 ; Flag walking is required
-273F:45F9 C3 retn
-273F:45FA loc_881: ; xref 273F:45EF
-273F:45FA 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:45FD 3B 47 50 cmp ax, [bx+HS_ACTION_HOTSPOT]
-273F:4600 74 C6 je loc_877 ; Jump if equal
-273F:4602 80 7F 44 04 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_4
-273F:4606 74 E9 je loc_880 ; Jump if equal
-273F:4608 80 3E BAB9 02 cmp byte ptr script_val_88, 2
-273F:460D 74 0D je loc_882 ; Jump if equal
-273F:460F 53 push bx
-273F:4610 BB 0005 mov bx,5
-273F:4613 E8 1D8C call display_message_dialog_2
-273F:4616 5B pop bx
-273F:4617 C7 44 42 0004 mov word ptr [si+HS_DELAY_CTR], 4
-273F:461C loc_882: ; xref 273F:460D
-273F:461C C7 47 2B 002A mov word ptr [bx+HS_V2B], 2Ah
-273F:4621 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:4624 89 47 2F mov [bx+HS_USE_HOTSPOT_ID], ax
-273F:4627 B8 0003 mov ax,3
-273F:462A C3 retn
-273F:462B loc_883: ; xref 273F:45E3
-273F:462B 80 44 2A 01 add byte ptr [si+HS_ACTION_CTR], 1
-273F:462F 80 7C 2A 06 cmp byte ptr [si+HS_ACTION_CTR], 6
-273F:4633 73 41 jae loc_887 ; Jump if above or =
-273F:4635 81 3E BA1B 0408 cmp active_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
-273F:463B 73 B4 jae loc_880 ; Jump if above or =
-273F:463D 80 7F 44 08 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
-273F:4641 74 AE je loc_880 ; Jump if equal
-273F:4643 80 7F 44 04 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_4
-273F:4647 74 A8 je loc_880 ; Jump if equal
-273F:4649 80 7F 44 07 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_7
-273F:464D 75 17 jne loc_886 ; Jump if not equal
-273F:464F EB A0 jmp short loc_880 ; (45F1)
-273F:4651 loc_884: ; xref 273F:45DD
-273F:4651 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR],0FFh
-273F:4655 75 07 jnz loc_885 ; Jump if yes
-273F:4657 33 C0 xor ax, ax ; Zero register
-273F:4659 53 push bx
-273F:465A E8 1D54 call display_message_dialog_3
-273F:465D 5B pop bx
-273F:465E loc_885:
-273F:465E C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:4662 B8 0001 mov ax, 1
-273F:4665 C3 retn
-273F:4666 loc_886: ; xref 273F:464D
-273F:4666 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:466A B8 000E mov ax, 0Eh
-273F:466D 53 push bx
-273F:466E E8 1D40 call display_message_dialog_3
-273F:4671 5B pop bx
-273F:4672 B8 0002 mov ax,2
-273F:4675 C3 retn
-273F:4676 loc_887: ; xref 273F:4633
-273F:4676 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:467A B8 000D mov ax, 0Dh
-273F:467D 53 push bx
-273F:467E E8 1D30 call display_message_dialog_3
-273F:4681 5B pop bx
-273F:4682 B8 0004 mov ax,4
-273F:4685 C3 retn
-273F:4686 loc_888: ; xref 273F:45C8
-273F:4686 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:468A 81 3E BA1B 0408 cmp active_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
-273F:4690 73 0F jae loc_889 ; Jump if above or =
-273F:4692 C6 47 44 08 mov byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
-273F:4696 C7 47 42 001E mov word ptr [bx+HS_DELAY_CTR], 30
-273F:469B 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:469E 89 47 50 mov [bx+HS_ACTION_HOTSPOT], ax
-273F:46A1 loc_889: ; xref 273F:4690
-273F:46A1 33 C0 xor ax,ax ; Zero register
-273F:46A3 C3 retn
- hotspot_action_precheck endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_45 proc near
-273F:46A4 E8 C641 call get_room_resource_pointer
-273F:46A7 C6 44 44 07 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_7
-273F:46AB C7 44 42 0082 mov word ptr [si+HS_DELAY_CTR], 130
-273F:46B0 C3 retn
- seq_method_45 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_reset_direction proc near
-273F:46B1 53 push bx
-273F:46B2 80 25 F8 and byte ptr [di+ANIM_X], 0F8h
-273F:46B5 80 64 0D F8 and byte ptr [si+HS_X], 0F8h
-273F:46B9 80 0D 05 or byte ptr [di+ANIM_X], 5
-273F:46BC 80 4C 0D 05 or byte ptr [si+HS_X], 5
-273F:46C0 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:46C3 8A 45 26 mov al, [di+ANIM_DIRECTION]
-273F:46C6 3C 01 cmp al, FACING_DOWN
-273F:46C8 72 10 jb loc_893 ; Jump if up
-273F:46CA 74 09 jz loc_892 ; Jump if down
-273F:46CC 3C 03 cmp al, 3
-273F:46CE 72 0F jb loc_894 ; Jump if left
-273F:46D0 loc_891:
-273F:46D0 ú8A 47 14 mov al, [bx+PIXEL_FRAMENUM_RIGHT]
-273F:46D3 EB 0D jmp short loc_895
-273F:46D5 loc_892:
-273F:46D5 8A 47 12 mov al, [bx+PIXEL_FRAMENUM_DOWN]
-273F:46D8 EB 08 jmp short loc_895
-273F:46DA loc_893:
-273F:46DA 8A 47 11 mov al, [bx+PIXEL_FRAMENUM_UP]
-273F:46DD EB 03 jmp short loc_895
-273F:46DF loc_894:
-273F:46DF 8A 47 13 mov al, [bx+PIXEL_FRAMENUM_LEFT]
-273F:46E2 loc_895:
-273F:46E2 8B 5F 07 mov bx, [bx+PIXEL_FRAME_SIZE]
-273F:46E5 32 E4 xor ah, ah ; Zero register
-273F:46E7 F7 E3 mul bx ; dx:ax = reg * ax
-273F:46E9 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax
-273F:46EC 5B pop bx
-273F:46ED C3 retn
- character_reset_direction endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5411, 572B, 57C6, 58C3, 5920, 5958, 5ACA
- ; 5B43, 5BAA, 5C76, 5CC7, 8A00
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_face_hotspot proc near
-273F:46EE 53 push bx
-273F:46EF 57 push di
-273F:46F0 56 push si
-273F:46F1 EB 17 jmp short loc_896 ; (470A)
- ;* No entry point to code
-
-273F:46F3 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:46F6 8B 1E BA1B mov bx, active_hotspot_id
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:61C5, 61CA
-
- character_face_hotspot_2:
-273F:46FA 53 push bx
-273F:46FB 57 push di
-273F:46FC 56 push si
-273F:46FD 50 push ax
-273F:46FE E8 C5E7 call get_room_resource_pointer
-273F:4701 5B pop bx
-273F:4702 56 push si
-273F:4703 E8 C5E2 call get_room_resource_pointer
-273F:4706 5B pop bx
-273F:4707 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:470A loc_896: ; xref 273F:46F1
-273F:470A 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:470D 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:4710 72 70 jb loc_903 ; Jump if below
-273F:4712 3D 0408 cmp ax, FIRST_OBJECT_HOTSPOT_ID
-273F:4715 73 6B jae loc_903 ; Jump if above or =
-273F:4717 53 push bx
-273F:4718 8B DE mov bx, si
-273F:471A 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:471D 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:4720 8A 07 mov al, [bx] ; Get current action
-273F:4722 5B pop bx
-273F:4723 81 3E BA1B 7530 cmp active_hotspot_id, START_NONVISUAL_HOTSPOT_ID
-273F:4729 72 17 jb loc_897
-273F:472B 5E pop si ; Non selectable hotspot
-273F:472C 5F pop di
-273F:472D 8A 47 08 mov al, [bx+HS_LOAD_FLAG]
-273F:4730 88 45 26 mov [di+ANIM_DIRECTION], al
-273F:4733 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:4736 3C 01 cmp al, FACING_DOWN
-273F:4738 72 A0 jb loc_893 ; Jump if up
-273F:473A 74 99 jz loc_892 ; Jump if down
-273F:473C 3C 03 cmp al, FACING_LEFT
-273F:473E 72 9F jb loc_894 ; Jump if left
-273F:4740 EB 8E jmp short loc_891 ; Jump for right
-273F:4742 loc_897:
-273F:4742 8B 54 0F mov dx, [si+HS_Y]
-273F:4745 03 54 1B add dx, [si+HS_HEIGHT_COPY]
-273F:4748 2B 57 0F sub dx, [bx+HS_Y]
-273F:474B 2B 57 1B sub dx, [bx+HS_HEIGHT_COPY]
-273F:474E 8B 4C 0D mov cx, [si+HS_X]
-273F:4751 2B 4F 0D sub cx, [bx+HS_X]
-273F:4754 8B C1 mov ax, cx
-273F:4756 0B C0 or ax, ax ; Zero ?
-273F:4758 79 02 jns loc_898 ; Jump if not sign
-273F:475A F7 D8 neg ax
-273F:475C loc_898: ; xref 273F:4758
-273F:475C 8B DA mov bx, dx
-273F:475E 0B DB or bx, bx ; Zero ?
-273F:4760 79 02 jns loc_899 ; Jump if not sign
-273F:4762 F7 DB neg bx
-273F:4764 loc_899: ; xref 273F:4760
-273F:4764 3B D8 cmp bx, ax
-273F:4766 72 09 jb loc_900 ; Jump if below
-273F:4768 0B D2 or dx, dx ; Zero ?
-273F:476A 78 0E js loc_901 ; Jump if sign=1
-273F:476C E8 FD6A call char_face_up
-273F:476F EB 11 jmp short loc_903 ; (4782)
-273F:4771 loc_900: ; xref 273F:4766
-273F:4771 0B C9 or cx,cx ; Zero ?
-273F:4773 78 0A js loc_902 ; Jump if sign=1
-273F:4775 E8 FD83 call char_face_left
-273F:4778 EB 08 jmp short loc_903 ; (4782)
-273F:477A loc_901: ; xref 273F:476A
-273F:477A E8 FD6D call char_face_down
-273F:477D EB 03 jmp short loc_903 ; (4782)
-273F:477F loc_902: ; xref 273F:4773
-273F:477F E8 FD8A call char_face_right
-273F:4782 loc_903: ; xref 273F:4710, 4715, 476F, 4778
- ; 477D
-273F:4782 5E pop si
-273F:4783 5F pop di
-273F:4784 5B pop bx
-273F:4785 C3 retn
- character_face_hotspot endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_execute_script_proc proc near
-273F:4786 8B DD mov bx, bp
-273F:4788 8B 07 mov ax, [bx]
-273F:478A 50 push ax
-273F:478B 83 C5 02 add bp, 2
-273F:478E E8 0DF0 call character_walking_end
-273F:4791 58 pop ax
-273F:4792 E8 F69F call sequence_execute
-273F:4795 C3 retn
- npc_execute_script_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_reset_paused_list proc near
-273F:4796 C6 44 44 01 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_1
-273F:479A C7 44 42 0016 mov word ptr [si+HS_DELAY_CTR], 16h
-273F:479F E8 FC9F call character_paused_list_reset
-273F:47A2 8B DE mov bx,si ; Move to next npc action
-273F:47A4 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:47A7 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:47AA 89 6F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
-273F:47AD C3 retn
- npc_reset_paused_list endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1E6F, 6279, 6585
- ; si = hotspot record
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_check_x_extents proc near
-273F:47AE 53 push bx
-273F:47AF 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:47B2 B3 09 mov bl, RH_TABLE_ENTRY_SIZE
-273F:47B4 F6 E3 mul bl ; Calculate offset
-273F:47B6 8B D8 mov bx, ax
-273F:47B8 8B 9F BF40 mov bx, [room_info_table][bx] ; Get room record ptr
-273F:47BC 83 C3 19 add bx, ROOM_X_START
-273F:47BF 8B 44 0D mov ax, [si+HS_X] ; Get X start
-273F:47C2 3B 07 cmp ax, [bx]
-273F:47C4 72 13 jb loc_905 ; Jump if below
-273F:47C6 05 0020 add ax, 20h
-273F:47C9 F7 47 02 FFFF test word ptr [bx+2], 0FFFFh
-273F:47CE 74 05 jz loc_904 ; Jump if zero
-273F:47D0 3B 47 02 cmp ax, [bx+2]
-273F:47D3 73 04 jae loc_905 ; Jump if above or =
-273F:47D5 loc_904: ; xref 273F:47CE
-273F:47D5 5B pop bx
-273F:47D6 33 C0 xor ax,ax ; Zero register
-273F:47D8 C3 retn
-273F:47D9 loc_905: ; xref 273F:47C4, 47D3
-273F:47D9 5B pop bx
-273F:47DA 0D 0001 or ax,1
-273F:47DD C3 retn
- room_check_x_extents endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00A3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animations_preload_ticks proc near
-273F:47DE A1 9832 mov ax, room_number
-273F:47E1 E8 C506 call get_room_resource_pointer2
-273F:47E4 83 7C 13 FF cmp word ptr [si+ROOM_ENTRY_TIME], 0FFFFh
-273F:47E8 74 3F je loc_909 ; Jump if equal
-273F:47EA 8B 0E B0AA mov cx, game_time_ctr
-273F:47EE 2B 4C 13 sub cx, [si+ROOM_ENTRY_TIME]
-273F:47F1 74 36 jz loc_909 ; Exit if same
-273F:47F3 C6 06 1926 01 mov data_669, 1
-
-273F:47F8 81 F9 012C cmp cx, 300 ; Max value
-273F:47FC 72 03 jb locloop_906 ; Jump if below
-273F:47FE B9 012C mov cx, 300
-
-273F:4801 locloop_906:
-273F:4801 51 push cx
-273F:4802 úBF B14E mov di, offset animation_table
-273F:4805 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:4808 locloop_907: ; xref 273F:4824
-273F:4808 F6 45 0C FF test byte ptr [di+ANIM_LAYER], 0FFh
-273F:480C 74 13 jz loc_908 ; Skip animation
-273F:480E 81 7D 1B 0408 cmp word ptr [di+ANIM_HOTSPOT_ID], FIRST_OBJECT_HOTSPOT_ID
-273F:4813 72 0C jb loc_908 ; Skip character hotspots
-273F:4815 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET]
-273F:4818 8B 45 11 mov ax, [di+ANIM_TICK_PROC]
-273F:481B 57 push di
-273F:481C 51 push cx
-273F:481D FF D0 call ax ; Call hotspot's tick proc
-273F:481F 59 pop cx
-273F:4820 5F pop di
-273F:4821 loc_908: ; xref 273F:480C, 4813
-273F:4821 83 C7 29 add di, ANIMATION_SLOT_SIZE ; Move to next animation
-273F:4824 E2 E2 loop locloop_907
-
-273F:4826 59 pop cx
-273F:4827 E2 D8 loop locloop_906 ; Loop if cx > 0
-
-273F:4829 loc_909: ; xref 273F:47E8, 47F1
-273F:4829 C6 06 1926 00 mov data_669, 0
-273F:482E C3 retn
- animations_preload_ticks endp
-
-273F:482F 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:2031
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- add_sequence_delay proc near
-273F:4830 03 0E B8AB add cx, seq_timer_ctr
-273F:4834 33 C0 xor ax,ax ; Zero register
-273F:4836 13 06 B8AD adc ax, seq_timer_ctr_2
-273F:483A BE B8AF mov si, offset sequence_delay_table
-273F:483D EB 62 jmp short add_sequence_delay_2
- add_sequence_delay endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0024
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- clear_sequence_delay_table proc near
-273F:483F úBE B8AF mov si,offset sequence_delay_table
-273F:4842 B9 0028 mov cx, NUM_DELAY_ENTRIES
-
-273F:4845 locloop_910: ; xref 273F:4857
-273F:4845 F6 44 06 FF test byte ptr [si+6], 0FFh ; Can the entry be cleared?
-273F:4849 74 09 jz loc_911 ; Skip if not
-273F:484B C7 04 0000 mov word ptr [si], 0 ; Clear the entry
-273F:484F C7 44 02 0000 mov word ptr [si+2], 0
-273F:4854 loc_911:
-273F:4854 83 C6 07 add si, DELAY_ENTRY_SIZE
-273F:4857 E2 EC loop locloop_910 ; Loop if cx > 0
-
-273F:4859 C3 retn
- clear_sequence_delay_table endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sequence_delay_check proc near
-273F:485A 8B 16 B8AB mov dx, seq_timer_ctr
-273F:485E 8B 1E B8AD mov bx, seq_timer_ctr_2
-273F:4862 úBE B8AF mov si, offset sequence_delay_table
-273F:4865 B9 0028 mov cx, NUM_DELAY_ENTRIES
-
-273F:4868 locloop_912: ; xref 273F:4889
-273F:4868 F7 04 FFFF test word ptr [si], 0FFFFh ; Any entry here?
-273F:486C 74 18 jz loc_913 ; Skip if not
-273F:486E 3B 5C 02 cmp bx, [si+2] ; Check high word of expiry time
-273F:4871 72 13 jb loc_913 ; Jump if below
-273F:4873 3B 14 cmp dx, [si] ; Check low word
-273F:4875 72 0F jb loc_913 ; Jump if below
-273F:4877 C7 04 0000 mov word ptr [si], 0 ; Timeout for entry reached
-273F:487B C7 44 02 0000 mov word ptr [si+2], 0
-273F:4880 8B 44 04 mov ax, [si+4] ; Get script to execute
-273F:4883 E9 F5AE jmp sequence_execute ; Execute the script
-273F:4886 loc_913:
-273F:4886 83 C6 07 add si, DELAY_ENTRY_SIZE ; Move to next entry
-273F:4889 E2 DD loop locloop_912 ; Loop if cx > 0
-273F:488B C3 retn
- sequence_delay_check endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sequence_delay_list_init proc near
-273F:488C úBE B8AF mov si, offset sequence_delay_table
-273F:488F B9 0028 mov cx, NUM_DELAY_ENTRIES
-273F:4892 locloop_914:
-273F:4892 C7 04 0000 mov word ptr [si], 0
-273F:4896 83 C6 07 add si, DELAY_ENTRY_SIZE
-273F:4899 E2 F7 loop locloop_914 ; Loop if cx > 0
-273F:489B C3 retn
- sequence_delay_list_init endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:489C BE B8AF mov si, offset sequence_delay_table
-273F:489F 33 C0 xor ax, ax
- add_sequence_delay_2:
-273F:48A1 8B E9 mov bp, cx
-273F:48A3 B9 0028 mov cx, NUM_DELAY_ENTRIES
-
-273F:48A6 locloop_916:
-273F:48A6 F7 04 FFFF test word ptr [si],0FFFFh ; Slot free?
-273F:48AA 75 13 jnz loc_917 ; If not, then skip
-273F:48AC F7 44 02 FFFF test word ptr [si+2],0FFFFh
-273F:48B1 75 0C jnz loc_917
-273F:48B3 89 2C mov [si],bp ; Store low word of expiry time
-273F:48B5 89 44 02 mov [si+2], ax ; Store high word of expiry time
-273F:48B8 89 5C 04 mov [si+4], bx ; Store script offset
-273F:48BB 88 54 06 mov [si+6], dl
-273F:48BE C3 retn
-273F:48BF loc_917:
-273F:48BF 83 C6 07 add si, DELAY_ENTRY_SIZE ; Loop through table
-273F:48C2 E2 E2 loop locloop_916
-
-273F:48C4 03 00 add ax, [bx+si]
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;
- ; External Entry Point
- ;
- ; Timer Handler
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-273F:48C6 timer_handler proc far ; xref 273F:06AA
-273F:48C6 50 push ax
-273F:48C7 53 push bx
-273F:48C8 51 push cx
-273F:48C9 52 push dx
-273F:48CA 56 push si
-273F:48CB 57 push di
-273F:48CC 55 push bp
-273F:48CD 1E push ds
-273F:48CE 06 push es
-273F:48CF 9C pushf ; Push flags
-273F:48D0 B8 31E4 mov ax,data_seg
-273F:48D3 8E D8 mov ds,ax
-
-; Timer ticks incrementor
-
-273F:48D5 81 3E F010 2EE0 cmp timer_ticks, TIMER_TICKS_MAX
-273F:48DB 73 05 jae loc_918 ; Jump if above or =
-273F:48DD 83 06 F010 01 add timer_ticks, 1 ; (31E4:F010=0)
-273F:48E2 loc_918:
-
-; Code below is responsible for blinking musical note and playing music if a music sequence is set
-
-273F:48E2 F6 06 5668 FF test note_flag, 0FFh ; Any need to display note?
-273F:48E7 74 52 jz loc_923 ; No, so skip this section
-273F:48E9 A0 5668 mov al, note_flag
-273F:48EC 24 3F and al,3Fh
-273F:48EE 75 46 jnz loc_922 ; Not yet at blink switch over
-273F:48F0 80 0E 5668 0F or note_flag, 0Fh ; Reset for blink interval
-273F:48F5 80 36 5668 40 xor note_flag, 40h ; Toggle whether note is visble
-273F:48FA B8 A000 mov ax, VGA_SEGMENT
-273F:48FD 8E C0 mov es,ax
-273F:48FF úBF E740 mov di, NOTE_DISPLAY_ADDR ; Where note will be displayed
-273F:4902 BB 0007 mov bx, NOTE_IMAGE_WIDTH/2 ; Number of horiz words (width/2)
-273F:4905 BA 000E mov dx, NOTE_IMAGE_HEIGHT ; Number of lines to display
-273F:4908 F6 06 5668 40 test note_flag, MUSIC_NOTE_VISIBLE
-273F:490D 74 18 jz loc_920 ; No, so wipe out area
-273F:490F 1E push ds
-273F:4910 B8 4502 mov ax, musical_note_seg
-273F:4913 8E D8 mov ds,ax
-273F:4915 33 F6 xor si,si
-273F:4917 loc_919:
-273F:4917 8B CB mov cx,bx
-273F:4919 F3/ A5 rep movsw ; Loop for moving one line of image
-273F:491B ú81 C7 0132 add di, 320-MUSIC_NOTE_WIDTH ; Move to start of next line
-273F:491F 83 EA 01 sub dx,1
-273F:4922 75 F3 jnz loc_919 ; Jump if not zero
-273F:4924 1F pop ds
-273F:4925 EB 14 jmp short loc_923 ; (493B)
-273F:4927 loc_920: ; xref 273F:490D
-273F:4927 33 C0 xor ax,ax ; Blank out area where note is
-273F:4929 loc_921:
-273F:4929 8B CB mov cx,bx
-273F:492B F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:492D 81 C7 0132 add di,132h
-273F:4931 83 EA 01 sub dx,1
-273F:4934 75 F3 jnz loc_921 ; Jump if not zero
-273F:4936 loc_922: ; xref 273F:48EE
-273F:4936 80 2E 5668 01 sub note_flag, 1 ; Decrement remaining time until
-273F:493B loc_923: ; next time note is shown/hidden
-273F:493B F6 06 5660 04 test music_status,4 ; Once every 8 cycles (approx every
-273F:4940 74 0D jz loc_924 ; 1/2 second), keep music playing
-273F:4942 F6 06 5660 02 test music_status,2
-273F:4947 75 06 jnz loc_924
-273F:4949 B4 02 mov ah,2
-273F:494B FF 1E 5662 call dword ptr [play_music_proc]
-
-; Remaining code is as of yet unknown
-
-273F:494F loc_924:
-273F:494F F6 06 38B0 FF test data_781, 0FFh
-273F:4954 75 1E jnz loc_925 ; Jump if not zero
-273F:4956 80 2E 38B3 01 sub byte ptr data_783,1 ; (31E4:38B3=32h)
-273F:495B 75 17 jnz loc_925 ; Jump if not zero
-273F:495D 83 06 B8AB 01 add seq_timer_ctr, 1
-273F:4962 83 16 B8AD 00 adc seq_timer_ctr_2, 0
-273F:4967 C6 06 38B3 32 mov byte ptr data_783,32h ; (31E4:38B3=32h) '2'
-273F:496C 80 0E 073D 02 or status_flags2, 2
-273F:4971 E8 FAF8 call random
-273F:4974 loc_925: ; xref 273F:4954, 495B
-273F:4974 83 06 38B1 01 add time_ctr, 1 ; (31E4:38B1=0)
-273F:4979 2E: 80 2E 48C4 01 sub byte ptr cs:[48C4h],1 ; (273F:48C4=3)
-273F:497F 75 2C jnz loc_928 ; Jump if not zero
-273F:4981 B0 02 mov al,2
-273F:4983 2E: 80 3E 48C5 44 cmp byte ptr cs:[48C5h],44h ; (273F:48C5=0) 'D'
-273F:4989 73 02 jae loc_926 ; Jump if above or =
-273F:498B 04 01 add al,1
-273F:498D loc_926: ; xref 273F:4989
-273F:498D 2E: A2 48C4 mov byte ptr cs:[48C4h],al ; (273F:48C4=3)
-273F:4991 2E: 80 06 48C5 01 add byte ptr cs:[48C5h],1 ; (273F:48C5=0)
-273F:4997 2E: 80 3E 48C5 5B cmp byte ptr cs:[48C5h],5Bh ; (273F:48C5=0) '['
-273F:499D 72 06 jb loc_927 ; Jump if below
-273F:499F 2E: C6 06 48C5 00 mov byte ptr cs:[48C5h],0 ; (273F:48C5=0)
-
-
-; Interrupt ending code - either send to old timer interrupt, or signal end without calling it
-
-273F:49A5 loc_927: ; xref 273F:499D
-273F:49A5 9C pushf ; Push flags
-273F:49A6 2E: FF 1E 04AA call dword ptr cs:old_timer_int_proc
-273F:49AB EB 04 jmp short loc_929 ; (49B1)
-273F:49AD loc_928: ; xref 273F:497F
-273F:49AD B0 20 mov al,20h ; ' '
-273F:49AF E6 20 out 20h,al ; port 20h, 8259-1 int command
- ; al = 20h, end of interrupt
-273F:49B1 loc_929: ; xref 273F:49AB
-273F:49B1 9D popf ; Pop flags
-273F:49B2 07 pop es
-273F:49B3 1F pop ds
-273F:49B4 5D pop bp
-273F:49B5 5F pop di
-273F:49B6 5E pop si
-273F:49B7 5A pop dx
-273F:49B8 59 pop cx
-273F:49B9 5B pop bx
-273F:49BA 58 pop ax
-273F:49BB CF iret ; Interrupt return
- timer_handler endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0127
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:49BC room_sleep proc near
-273F:49BC 83 3E 9832 23 cmp room_number, ROOMNUM_VILLAGE_SHOP
-273F:49C1 75 26 jne sleep
-273F:49C3 F7 06 BA25 FFFF test old_room_number, 0FFFFh
-273F:49C9 75 1E jnz sleep
-273F:49CB F6 06 073D 02 test status_flags2, 2
-273F:49D0 74 17 jz sleep
-273F:49D2 50 push ax
-273F:49D3 BB 0010 mov bx,10h
-273F:49D6 F6 06 073D 04 test status_flags2, 4
-273F:49DB 75 03 jnz loc_930 ; Jump if not zero
-273F:49DD BB 0032 mov bx,32h
-273F:49E0 loc_930: ; xref 273F:49DB
-273F:49E0 E8 561A call play_sound ; (9FFD)
-273F:49E3 80 36 073D 06 xor status_flags2, 6
-273F:49E8 58 pop ax
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:3B77, 3B8C, 75BC, 75C8, 75DA, 75E6, 75F8
- ; 7604, 7616, 764A, 977D, A1C3, A1D9, A5E6
- ; A615, A63A, A68D, A6F0, A93F, AA03
-
-273F:49E9 sleep:
-273F:49E9 loc_931: ; xref 273F:49C1, 49C9, 49D0, 49ED
-273F:49E9 39 06 38B1 cmp time_ctr, ax
-273F:49ED 72 FA jb loc_931
-273F:49EF C7 06 38B1 0000 mov time_ctr, 0
-273F:49F5 C3 retn
- room_sleep endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5142, 5F79
- ; ax=character Hotspot Id, bx=dest x, cx=dest y, dl=[4ch]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_pathfind proc near
-273F:49F6 89 26 3942 mov pathfind_sp, sp ; Backup current SP
-273F:49FA C7 06 3944 0FA0 mov pathfind_countdown_ctr, 0FA0h
-273F:4A00 F6 06 3946 FF test pathfind_in_progress, 0FFh
-273F:4A05 74 0E jz loc_933 ; Jump if zero
-273F:4A07 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:4A0A 74 03 je loc_932 ; Jump if equal
-273F:4A0C 33 C0 xor ax,ax ; Zero register
-273F:4A0E C3 retn
-273F:4A0F loc_932:
-273F:4A0F úBE 3983 mov si, offset player_pathfind_data
-273F:4A12 8B 24 mov sp, [si] ; Get SP for restore point
-273F:4A14 C3 retn ; (ie. carry on where we left off)
-273F:4A15 loc_933:
-273F:4A15 BE 3983 mov si, offset player_pathfind_data
-273F:4A18 BD 03E8 mov bp, PLAYER_HOTSPOT_ID
-273F:4A1B 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:4A1E 74 17 je loc_935 ; Jump if equal
-273F:4A20 úBE 4227 mov si, offset chars_pathfind_data
-273F:4A23 BD 057A mov bp, 57Ah
-273F:4A26 F7 04 FFFF test word ptr [si], 0FFFFh
-273F:4A2A 74 10 jz loc_936 ; Jump if zero
-273F:4A2C 3B 44 02 cmp ax, [si+2]
-273F:4A2F 74 03 je loc_934 ; Jump if equal
-273F:4A31 33 C0 xor ax, ax ; Zero register
-273F:4A33 C3 retn
-273F:4A34 loc_934: ; xref 273F:4A2F
-273F:4A34 8B 24 mov sp, [si]
-273F:4A36 C3 retn
-273F:4A37 loc_935: ; xref 273F:4A1E
-273F:4A37 C6 06 3946 01 mov pathfind_in_progress, 1
-273F:4A3C loc_936: ; xref 273F:4A2A
-273F:4A3C 88 54 04 mov [si+PATHFIND_HS4C], dl
-273F:4A3F 89 44 02 mov [si+PATHFIND_CHARACTER_ID], ax ; Store character Id
-273F:4A42 8B E5 mov sp, bp
-
-; Handle adjusting destination X for left & right screen edges to place it completely
-; off-screen. This will allows characters to walk completely off-screen as they exit
-273F:4A44 81 FB 008A cmp bx, 80h + 10 ; dest x >= 10?
-273F:4A48 73 05 jae loc_937 ; Jump if yes
-273F:4A4A 83 EB 32 sub bx, 50
-273F:4A4D EB 09 jmp short loc_938 ; (4A58)
-273F:4A4F loc_937: ; xref 273F:4A48
-273F:4A4F 81 FB 01B6 cmp bx, 80h + 310
-273F:4A53 72 03 jb loc_938 ; Jump if below
-273F:4A55 83 C3 32 add bx, 50
-273F:4A58 loc_938:
-273F:4A58 89 5C 06 mov [si+PATHFIND_DEST_X], bx ; Store X
-273F:4A5B 89 4C 08 mov [si+PATHFIND_DEST_Y], cx ; Store Y
-
-273F:4A5E 8B 6D 13 mov bp, [di+ANIM_WIDTH_COPY]
-273F:4A61 83 ED 01 sub bp, 1
-273F:4A64 B1 03 mov cl, 3
-273F:4A66 D3 ED shr bp, cl ; bp=(width copy-1)/8
-273F:4A68 57 push di
-273F:4A69 ú81 C6 08A2 add si, 8A2h
-
-; Figure out the address for the bit-compressed data for screen walkable areas
-273F:4A6D 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:4A70 8B D8 mov bx, ax
-273F:4A72 B1 04 mov cl, 4
-273F:4A74 D3 E0 shl ax, cl
-273F:4A76 2B C3 sub ax, bx
-273F:4A78 B1 03 mov cl, 3
-273F:4A7A D3 E0 shl ax, cl ; ax=Room # * 120
-
-; Extract the bit-compressed data of the pathfinding data for the room into an
-; uncompressed 26*42 byte array indicating whether each 8x8 pixel block on screen
-; (and a surrounding column and row around the screen edge) can be traveled on
-; cx = bit number, dl = number of columns, dh = number of rows
-
-273F:4A7C 05 9849 add ax, offset pathfind_data2 - 1
-273F:4A7F 1E push ds
-273F:4A80 07 pop es
-273F:4A81 8B FE mov di, si ; for player di=4225h
-273F:4A83 8B F0 mov si, ax ; si=end of pathfind layer for room
-273F:4A85 FD std ; Set for reverse direction
-273F:4A86 33 C0 xor ax, ax
-273F:4A88 B9 002B mov cx, 2Bh ; # cols + end col of 2nd last row
-273F:4A8B F3/ AB rep stosw ; Clear area
-273F:4A8D 83 C7 01 add di, 1 ; For player di=41D0h
-
-273F:4A90 B6 18 mov dh, 24 ; Number of rows on-screen
-273F:4A92 loc_939:
-273F:4A92 B2 05 mov dl, 5 ; Number of bytes horizontally
-
-273F:4A94 loc_940:
-273F:4A94 AC lodsb ; Get next byte
-273F:4A95 86 E0 xchg ah, al ; Move it into AH
-273F:4A97 32 C0 xor al, al ; Reset AL to 0 for storage
-273F:4A99 B9 0008 mov cx, 8 ; Number of bits in the byte
-
-273F:4A9C locloop_941: ; xref 273F:4AA2, 4AB3
-273F:4A9C D0 EC shr ah, 1 ; Move next bit for processing
-273F:4A9E 72 06 jc loc_942 ; Jump if bit set (block occupied)
-273F:4AA0 AA stosb ; Store 0 to es:[di]
-273F:4AA1 AA stosb ; Store 0 to es:[di]
-273F:4AA2 E2 F8 loop locloop_941 ; Loop for remaining bits
-
-273F:4AA4 EB 33 jmp short loc_948
-273F:4AA6 loc_942: ; Handling for occupied blocks
-273F:4AA6 F6 D0 not al
-273F:4AA8 AA stosb ; Store 0FFh to es:[di]
-273F:4AA9 AA stosb ; Store 0FFh to es:[di]
-273F:4AAA F6 D0 not al
-273F:4AAC 8B DD mov bx, bp ; Get width/8 val
-273F:4AAE 83 EB 01 sub bx, 1
-273F:4AB1 73 1D jnc loc_947 ; Jump if width/8 val != 0
-273F:4AB3 loc_943:
-273F:4AB3 E2 E7 loop locloop_941 ; Keep looping
-
-273F:4AB5 EB 22 jmp short loc_948 ; (4AD9)
-273F:4AB7 loc_944: ; xref 273F:4AD5
-273F:4AB7 B9 0008 mov cx,8
-273F:4ABA AC lodsb ; String [si] to al
-273F:4ABB 86 E0 xchg ah,al
-273F:4ABD 32 C0 xor al,al ; Zero register
-
-273F:4ABF locloop_945: ; xref 273F:4AD0
-273F:4ABF D0 EC shr ah,1 ; Shift w/zeros fill
-273F:4AC1 73 02 jnc loc_946 ; Jump if carry=0
-273F:4AC3 8B DD mov bx,bp
-273F:4AC5 loc_946: ; xref 273F:4AC1
-273F:4AC5 F6 D0 not al
-273F:4AC7 AA stosb ; Store al to es:[di]
-273F:4AC8 AA stosb ; Store al to es:[di]
-273F:4AC9 F6 D0 not al
-273F:4ACB 83 EB 01 sub bx,1
-273F:4ACE 72 E3 jc loc_943 ; Jump if carry Set
-273F:4AD0 loc_947: ; xref 273F:4AB1
-273F:4AD0 E2 ED loop locloop_945 ; Loop if cx > 0
-
-273F:4AD2 80 EA 01 sub dl,1
-273F:4AD5 75 E0 jnz loc_944 ; Jump if not zero
-273F:4AD7 EB 05 jmp short loc_949 ; (4ADE)
-
-273F:4AD9 loc_948: ; xref 273F:4AA4, 4AB5
-273F:4AD9 80 EA 01 sub dl,1
-273F:4ADC 75 B6 jnz loc_940 ; Jump if not zero
-273F:4ADE loc_949:
-273F:4ADE B9 0004 mov cx, 4 ; Store end col, next row start col
-273F:4AE1 F3/ AA rep stosb
-273F:4AE3 B2 05 mov dl, 5
-273F:4AE5 80 EE 01 sub dh, 1
-273F:4AE8 75 A8 jnz loc_939 ; Jump if not zero
-
-273F:4AEA 83 EF 01 sub di, 1
-273F:4AED B9 0029 mov cx, 29h ; Handle final top off-screen row
-273F:4AF0 33 C0 xor ax, ax
-273F:4AF2 F3/ AB rep stosw
-
-; End of decompression code for the path finding layer.
-
-273F:4AF4 83 EF 1A sub di, 1Ah ; di=3983 again (skips local variables)
-273F:4AF7 5E pop si ; si=anim slot
-273F:4AF8 33 C0 xor ax, ax ; Zero register
-273F:4AFA 89 45 0A mov [di+PATHFIND_Y], ax
-273F:4AFD 89 45 0C mov [di+PATHFIND_X], ax
-273F:4B00 89 45 10 mov [di+PATHFIND_DEST_X2], ax
-273F:4B03 89 45 0E mov [di+PATHFIND_0E], ax
-273F:4B06 88 45 05 mov [di+PATHFIND_DEST_STATE], al
-273F:4B09 81 2E 3944 02BC sub pathfind_countdown_ctr, 2BCh ; v2=0FA0h-2BCh=CE4h
-273F:4B0F 8B 04 mov ax, [si+ANIM_X] ; Get current X
-273F:4B11 2D 0080 sub ax, 80h ; Subtract the 80h offset
-273F:4B14 73 05 jnc loc_950 ; Jump if current X on-screen
-273F:4B16 89 45 0C mov [di+PATHFIND_X], ax
-273F:4B19 33 C0 xor ax, ax ; Zero register
-273F:4B1B loc_950: ; ax = max(0, X)
-273F:4B1B BB 013F mov bx, 319
-273F:4B1E 2B 5C 13 sub bx, [si+ANIM_WIDTH_COPY]
-273F:4B21 3B C3 cmp ax, bx
-273F:4B23 72 07 jb loc_951 ; X + full width on screen?
-273F:4B25 2B C3 sub ax, bx
-273F:4B27 89 45 0C mov [di+PATHFIND_X], ax ; X = min(X, 319 - width)
-273F:4B2A 8B C3 mov ax, bx
-273F:4B2C loc_951:
-273F:4B2C 8B 5C 02 mov bx, [si+ANIM_Y]
-273F:4B2F 80 E3 F8 and bl, 0F8h
-273F:4B32 03 5C 15 add bx, [si+ANIM_HEIGHT_COPY]
-273F:4B35 83 EB 04 sub bx, 4
-273F:4B38 81 EB 0088 sub bx, 88h ; bx=(Y&0F8h+height-4-8)
-273F:4B3C 73 05 jnc loc_952 ; Jump if bx (y bottom) < 0
-273F:4B3E 89 5D 0A mov [di+PATHFIND_Y], bx
-273F:4B41 33 DB xor bx, bx ; Zero register
-273F:4B43 loc_952:
-273F:4B43 81 FB 00C0 cmp bx, 192 ; Is it on-screen?
-273F:4B47 72 0A jb loc_953 ; Jump if below
-273F:4B49 81 EB 00BF sub bx, 191
-273F:4B4D 89 5D 0A mov [di+PATHFIND_Y], bx
-273F:4B50 BB 00BF mov bx, 191
-
-273F:4B53 loc_953:
-273F:4B53 8B 4D 06 mov cx, [di+PATHFIND_DEST_X]
-273F:4B56 81 E9 0080 sub cx, 128
-273F:4B5A 73 05 jnc loc_954 ; Jump if x >= 0
-273F:4B5C 89 4D 10 mov [di+PATHFIND_DEST_X2], cx ; Store X (will be negative)
-273F:4B5F 33 C9 xor cx, cx
-273F:4B61 loc_954:
-273F:4B61 BA 0140 mov dx, SCREEN_WIDTH
-273F:4B64 2B 54 13 sub dx, [si+ANIM_WIDTH_COPY]
-273F:4B67 3B CA cmp cx, dx
-273F:4B69 72 07 jb loc_955 ; Jump if fully on screen
-273F:4B6B 2B CA sub cx, dx
-273F:4B6D 89 4D 10 mov [di+PATHFIND_DEST_X2], cx
-273F:4B70 8B CA mov cx, dx
-273F:4B72 loc_955:
-273F:4B72 8B 55 08 mov dx, [di+PATHFIND_DEST_Y]
-273F:4B75 81 EA 0088 sub dx, 88h
-273F:4B79 73 02 jnc loc_956 ; Jump if y >= 0
-273F:4B7B 33 D2 xor dx, dx ; Zero register
-273F:4B7D loc_956:
-273F:4B7D 81 FA 00C0 cmp dx, 192
-273F:4B81 72 03 jb loc_957 ; Jump if below
-273F:4B83 BA 00BF mov dx, 191
-273F:4B86 loc_957: ; xref 273F:4B81
-273F:4B86 8B E9 mov bp, cx
-
-; current=(ax,bx), dest=(bp,dx). Check to see if a move of only a few pixels is required
-273F:4B88 B1 03 mov cl, 3
-273F:4B8A D3 E8 shr ax, cl
-273F:4B8C D3 EB shr bx, cl
-273F:4B8E D3 ED shr bp, cl
-273F:4B90 D3 EA shr dx, cl
-273F:4B92 3B C5 cmp ax, bp ; Is x/8=dest_x/8?
-273F:4B94 75 2B jne loc_961 ; Jump if not
-273F:4B96 3B DA cmp bx, dx ; Is y/8=dest_y/8?
-273F:4B98 75 27 jne loc_961 ; Jump if not
-
-; Destination is very close to source.
-; If (I think) the PATHFIND_DEST_X2 != 0 (ie. dest is partially off-screen), then
-; an initial walk entry is placed. Then irrespective, control jumps to loc_1003,
-; which puts another left/right walking entry to move the character to dest X
-
-273F:4B9A úBB 3940 mov bx, offset pathfind_buffer_end
-273F:4B9D C7 07 0000 mov word ptr [bx], 0 ; Set end of pathfind sequence
-273F:4BA1 8B 45 10 mov ax, [di+PATHFIND_DEST_X2]
-273F:4BA4 0B C0 or ax, ax ; Any partial off-screen move?
-273F:4BA6 74 16 jz loc_960 ; Jump if zero
-273F:4BA8 78 07 js loc_958 ; Jump if sign=1
-273F:4BAA C7 47 FE 0002 mov word ptr [bx-2], FACING2_RIGHT
-273F:4BAF EB 07 jmp short loc_959 ; (4BB8)
-273F:4BB1 loc_958: ; xref 273F:4BA8
-273F:4BB1 C7 47 FE 0001 mov word ptr [bx-2], FACING2_LEFT
-273F:4BB6 F7 D8 neg ax
-273F:4BB8 loc_959: ; xref 273F:4BAF
-273F:4BB8 89 47 FC mov [bx-4], ax ; Store # steps
-273F:4BBB 83 EB 04 sub bx, 4 ; Move back for next record
-273F:4BBE loc_960:
-273F:4BBE E9 02B3 jmp loc_1003
-
-; Destination isn't close, so here's where the actual pathfinding needs to be done
-; current=(ax,bx)/8, dest=(bp,dx)/8
-
-273F:4BC1 loc_961: ; xref 273F:4B94, 4B98
-273F:4BC1 50 push ax
-273F:4BC2 53 push bx
-273F:4BC3 55 push bp
-273F:4BC4 52 push dx
-273F:4BC5 89 6D 06 mov [di+PATHFIND_DEST_X], bp ; Store dest pos/8
-273F:4BC8 89 55 08 mov [di+PATHFIND_DEST_Y], dx
-
-273F:4BCB D1 E0 shl ax, 1 ; ax=sb_x*2
-273F:4BCD 8B F3 mov si, bx ; si=sb_y
-273F:4BCF B1 02 mov cl, 2
-273F:4BD1 D3 E3 shl bx, cl ; bx=sb_y*4
-273F:4BD3 03 DE add bx, si ; bx=sb_y*5
-273F:4BD5 D3 E3 shl bx, cl ; bx=sb_y*20
-273F:4BD7 03 DE add bx, si ; bx=sb_y*21
-273F:4BD9 D3 E3 shl bx, cl ; bx=sb_y*84
-273F:4BDB 03 D8 add bx, ax ; bx=sb_y*84 + sb_x*2
-273F:4BDD 83 C3 72 add bx, 72h ; Add on buffer & blank line offset
-273F:4BE0 03 DF add bx, di ; bx=source cell
-273F:4BE2 C7 07 0001 mov word ptr [bx],1 ; Flag source cell
-273F:4BE6 D1 E5 shl bp, 1
-273F:4BE8 8B F2 mov si, dx
-273F:4BEA D3 E6 shl si, cl
-273F:4BEC 03 F2 add si, dx
-273F:4BEE D3 E6 shl si, cl
-273F:4BF0 03 F2 add si, dx
-273F:4BF2 D3 E6 shl si, cl
-273F:4BF4 03 F5 add si, bp
-273F:4BF6 83 C6 72 add si, 72h
-273F:4BF9 03 F7 add si, di ; si=dest cell
-273F:4BFB C6 45 12 00 mov byte ptr [di+PATHFIND_DEST_OCCUPIED], 0
-273F:4BFF F6 04 FF test byte ptr [si], 0FFh ; Is dest cell blocked?
-273F:4C02 74 0C jz loc_962 ; Jump if clear
-273F:4C04 C7 04 0000 mov word ptr [si], 0 ; Mark dest cell as unblocked
-273F:4C08 C6 45 12 01 mov byte ptr [di+PATHFIND_DEST_OCCUPIED], 1
-273F:4C0C C6 45 05 01 mov byte ptr [di+PATHFIND_DEST_STATE], 1 ; Dest occupied
-273F:4C10 loc_962:
-273F:4C10 F6 45 04 FF test byte ptr [di+PATHFIND_HS4C],0FFh
-273F:4C14 74 00 jz $+2
-273F:4C16 5A pop dx
-273F:4C17 59 pop cx
-273F:4C18 5D pop bp
-273F:4C19 58 pop ax
-
-; Source/8=(ax,bp), Dest/8=(cx,dx), bx=source cell, si=dest cell
-273F:4C1A 3B C1 cmp ax,cx ; Start X against Dest X
-273F:4C1C 73 19 jae loc_964 ; Jump if >=
-273F:4C1E 0B C0 or ax,ax ; Is Start X 0?
-273F:4C20 74 06 jz loc_963 ; Jump if yes
-273F:4C22 2D 0001 sub ax, 1
-273F:4C25 83 EB 02 sub bx, 2
-273F:4C28 loc_963:
-273F:4C28 C7 45 14 0002 mov word ptr [di+PATHFIND_X_CHANGE1], 2
-273F:4C2D B9 0028 mov cx, ROOM_PATHS_WIDTH
-273F:4C30 2B C8 sub cx, ax
-273F:4C32 89 4D 18 mov [di+PATHFIND_X_CHANGE2], cx
-273F:4C35 EB 17 jmp short loc_966 ; (4C4E)
-273F:4C37 loc_964: ; xref 273F:4C1C
-273F:4C37 3D 0027 cmp ax, ROOM_PATHS_WIDTH - 1
-273F:4C3A 74 06 je loc_965 ; Jump if equal
-273F:4C3C 05 0001 add ax, 1
-273F:4C3F 83 C3 02 add bx, 2
-273F:4C42 loc_965: ; xref 273F:4C3A
-273F:4C42 C7 45 14 FFFE mov word ptr [di+PATHFIND_X_CHANGE1], 0FFFEh
-273F:4C47 89 45 18 mov [di+PATHFIND_X_CHANGE2],ax
-273F:4C4A 83 45 18 01 add word ptr [di+PATHFIND_X_CHANGE2], 1
-273F:4C4E loc_966: ; xref 273F:4C35
-273F:4C4E 3B EA cmp bp, dx
-273F:4C50 72 19 jb loc_968 ; Jump if below
-273F:4C52 83 FD 17 cmp bp, ROOM_PATHS_HEIGHT - 1
-273F:4C55 74 06 je loc_967 ; Jump if equal
-273F:4C57 83 C5 01 add bp, 1
-273F:4C5A 83 C3 54 add bx, DECODED_PATHS_WIDTH * 2
-273F:4C5D loc_967: ; xref 273F:4C55
-273F:4C5D C7 45 16 FFAC mov [di+PATHFIND_Y_CHANGE1], -DECODED_PATHS_WIDTH*2
-273F:4C62 89 6D 1A mov [di+PATHFIND_Y_CHANGE2], bp
-273F:4C65 83 45 1A 01 add [di+PATHFIND_Y_CHANGE2], 1
-273F:4C69 EB 17 jmp short loc_970 ; (4C82)
-273F:4C6B loc_968: ; xref 273F:4C50
-273F:4C6B 0B ED or bp, bp ; Zero ?
-273F:4C6D 74 06 jz loc_969 ; Jump if zero
-273F:4C6F 83 ED 01 sub bp, 1
-273F:4C72 83 EB 54 sub bx, DECODED_PATHS_WIDTH * 2
-273F:4C75 loc_969: ; xref 273F:4C6D
-273F:4C75 C7 45 16 0054 mov word ptr [di+PATHFIND_Y_CHANGE1], DECODED_PATHS_WIDTH * 2
-273F:4C7A B9 0018 mov cx, ROOM_PATHS_HEIGHT
-273F:4C7D 2B CD sub cx, bp
-273F:4C7F 89 4D 1A mov [di+PATHFIND_Y_CHANGE2], cx
-273F:4C82 loc_970:
-
-; This next section populates the walkable sections of the decompressed array
-; with incrementing numbers indicating the number of cells away each cell is
-; from the source. A walkable path can be later formed by following the
-; path of decrementing numbers from the destination to the source and reversing it
-
-273F:4C82 8B 55 14 mov dx,[di+PATHFIND_X_CHANGE1]
-273F:4C85 loc_971: ; xref 273F:4CC6, 4CCE, 4CDA
-273F:4C85 ú56 push si
-273F:4C86 53 push bx
-273F:4C87 8B 36 3944 mov si, pathfind_countdown_ctr
-273F:4C8B 8B 4D 1A mov cx, [di+PATHFIND_Y_CHANGE2]
-
-273F:4C8E locloop_972: ; xref 273F:4C9F
-273F:4C8E 51 push cx
-273F:4C8F 53 push bx
-273F:4C90 8B 4D 18 mov cx, [di+PATHFIND_X_CHANGE2]
-
-273F:4C93 locloop_973: ; xref 273F:4C98
-273F:4C93 E8 021A call pathfind_populate_cells
-273F:4C96 03 DA add bx, dx
-273F:4C98 E2 F9 loop locloop_973 ; Loop if cx > 0
-
-273F:4C9A 5B pop bx
-273F:4C9B 59 pop cx
-273F:4C9C 03 5D 16 add bx, [di+PATHFIND_Y_CHANGE1]
-273F:4C9F E2 ED loop locloop_972 ; Loop if cx > 0
-
-273F:4CA1 89 36 3944 mov pathfind_countdown_ctr, si
-273F:4CA5 5B pop bx
-273F:4CA6 5E pop si
-273F:4CA7 F7 04 FFFF test word ptr [si], 0FFFFh ; Dest been filled in yet?
-273F:4CAB 75 2F jnz loc_977 ; Jump if yes
-
-273F:4CAD 80 7D 1A 18 cmp byte ptr [di+PATHFIND_Y_CHANGE2], ROOM_PATHS_HEIGHT
-273F:4CB1 75 08 jne loc_974 ; Jump if not equal
-273F:4CB3 80 7D 18 28 cmp byte ptr [di+PATHFIND_X_CHANGE2], ROOM_PATHS_WIDTH
-273F:4CB7 74 17 je loc_976 ; Jump if equal
-273F:4CB9 EB 07 jmp short loc_975
-273F:4CBB loc_974: ; xref 273F:4CB1
-273F:4CBB 2B 5D 16 sub bx, [di+PATHFIND_Y_CHANGE1]
-273F:4CBE 83 45 1A 01 add word ptr [di+PATHFIND_Y_CHANGE2], 1
-273F:4CC2 loc_975:
-273F:4CC2 80 7D 18 28 cmp byte ptr [di+PATHFIND_X_CHANGE2], ROOM_PATHS_WIDTH
-273F:4CC6 74 BD je loc_971 ; Jump if equal
-273F:4CC8 2B DA sub bx, dx
-273F:4CCA 83 45 18 01 add word ptr [di+PATHFIND_X_CHANGE2], 1
-273F:4CCE EB B5 jmp short loc_971
-
-273F:4CD0 loc_976:
-273F:4CD0 F6 45 13 FF test byte ptr [di+PATHFIND_CELL_POPULATED], 0FFh
-273F:4CD4 74 08 jz loc_978 ; Jump if no cell populated
-273F:4CD6 C6 45 13 00 mov byte ptr [di+PATHFIND_CELL_POPULATED], 0
-273F:4CDA EB A9 jmp short loc_971 ; Jump for another try
-273F:4CDC loc_977:
-273F:4CDC EB 66 jmp short loc_982
-273F:4CDE loc_978:
-273F:4CDE C6 45 05 02 mov byte ptr [di+PATHFIND_DEST_STATE], 2 ; No path to destination
-273F:4CE2 loc_979:
-273F:4CE2 F6 45 12 FF test byte ptr [di+PATHFIND_DEST_OCCUPIED], 0FFh
-273F:4CE6 74 08 jz loc_980 ; Jump if zero
-273F:4CE8 C7 04 FFFF mov word ptr [si], 0FFFFh ; Restore destination occupied
-273F:4CEC C6 45 12 00 mov byte ptr [di+PATHFIND_DEST_OCCUPIED], 0
-273F:4CF0 loc_980:
-
-; Do a scan of the lines, if necessary, to allow the character to walk up to
-; a wall without walking into it
-273F:4CF0 57 push di
-273F:4CF1 8B EE mov bp, si
-273F:4CF3 8B DE mov bx, si ; bx=bp=destination cell
-273F:4CF5 B2 FF mov dl, 0FFh
-273F:4CF7 8B 4D 06 mov cx, [di+PATHFIND_DEST_X]
-273F:4CFA 83 C1 01 add cx, 1
-273F:4CFD BF FFFE mov di, 0FFFEh
-273F:4D00 E8 0220 call pathfind_scan_line
-273F:4D03 5F pop di
-273F:4D04 57 push di
-273F:4D05 B9 0028 mov cx, ROOM_PATHS_WIDTH
-273F:4D08 2B 4D 06 sub cx, [di+PATHFIND_DEST_X]
-273F:4D0B BF 0002 mov di, 2
-273F:4D0E E8 0212 call pathfind_scan_line
-273F:4D11 5F pop di
-273F:4D12 57 push di
-273F:4D13 8B 4D 08 mov cx, [di+PATHFIND_DEST_Y]
-273F:4D16 83 C1 01 add cx, 1
-273F:4D19 BF FFAC mov di, -DECODED_PATHS_WIDTH*2
-273F:4D1C E8 0204 call pathfind_scan_line
-273F:4D1F 5F pop di
-273F:4D20 57 push di
-273F:4D21 B9 0018 mov cx, ROOM_PATHS_HEIGHT
-273F:4D24 2B 4D 08 sub cx, [di+PATHFIND_DEST_Y]
-273F:4D27 BF 0054 mov di, DECODED_PATHS_WIDTH*2
-273F:4D2A E8 01F6 call pathfind_scan_line
-273F:4D2D 5F pop di
-273F:4D2E 8B F5 mov si, bp
-273F:4D30 3B DE cmp bx, si
-273F:4D32 75 0E jne loc_981 ; Jump if not equal
-273F:4D34 C6 45 05 03 mov byte ptr [di+PATHFIND_DEST_STATE], 3
-273F:4D38 úBB 3940 mov bx, offset pathfind_buffer_end
-273F:4D3B C7 07 0000 mov word ptr [bx], 0
-273F:4D3F E9 0132 jmp loc_1003 ; (4E74)
-273F:4D42 loc_981: ; xref 273F:4D32
-273F:4D42 8B F3 mov si, bx
-
-273F:4D44 loc_982: ; xref 273F:4CDC
-273F:4D44 F6 45 12 FF test byte ptr [di+PATHFIND_DEST_OCCUPIED], 0FFh
-273F:4D48 75 98 jnz loc_979 ; Jump if not zero
-
-; end of cell population
-; Fill out any cells that are still blank (ie. anywhere that can't reach the
-; destination) as occupied
-
-273F:4D4A FC cld ; Clear direction
-273F:4D4B 57 push di
-273F:4D4C 83 C7 1C add di, 1Ch ; di=start of grid
-273F:4D4F B9 0445 mov cx, DECODED_PATHS_WIDTH*DECODED_PATHS_HEIGHT+1 ;445h
-273F:4D52 33 C0 xor ax, ax
-273F:4D54 loc_983:
-273F:4D54 úF2/ AF repne scasw ; Scan for an empty cell
-273F:4D56 0B C9 or cx, cx ; Reached end of list?
-273F:4D58 74 07 jz loc_984 ; Jump if yes
-273F:4D5A C7 45 FE FFFF mov word ptr [di-2], 0FFFFh ; Replace it with occupied state
-273F:4D5F EB F3 jmp short loc_983
-
-273F:4D61 loc_984:
-273F:4D61 5F pop di
-273F:4D62 33 D2 xor dx, dx
-273F:4D64 B1 FF mov cl,0FFh
-273F:4D66 úBB 3940 mov bx, offset pathfind_buffer_end
-273F:4D69 C7 07 0000 mov word ptr [bx], 0
-273F:4D6D F6 45 05 FF test byte ptr [di+PATHFIND_DEST_STATE], 0FFh
-273F:4D71 75 1D jnz loc_987 ; Jump if not zero
-273F:4D73 8B 45 10 mov ax, [di+PATHFIND_DEST_X2]
-273F:4D76 0B C0 or ax,ax ; Zero ?
-273F:4D78 74 16 jz loc_987 ; Jump if zero
-273F:4D7A 78 07 js loc_985 ; Jump if sign=1
-273F:4D7C C7 47 FE 0002 mov word ptr [bx-2], FACING2_RIGHT
-273F:4D81 EB 07 jmp short loc_986 ; (4D8A)
-273F:4D83 loc_985: ; xref 273F:4D7A
-273F:4D83 C7 47 FE 0001 mov word ptr [bx-2], FACING2_LEFT
-273F:4D88 F7 D8 neg ax
-273F:4D8A loc_986: ; xref 273F:4D81
-273F:4D8A 89 47 FC mov [bx-4], ax ; Save # steps
-273F:4D8D 83 EB 04 sub bx, 4
-273F:4D90 loc_987: ; xref 273F:4D71, 4D78, 4E64, 4E6F
-
-273F:4D90 ú53 push bx
-273F:4D91 56 push si
-
-; Form a set of steps starting at the source
-273F:4D92 loc_988:
-273F:4D92 ú8B 04 mov ax, [si] ; Get steps value from current pos
-273F:4D94 2D 0001 sub ax, 1
-273F:4D97 74 4A jz loc_992 ; Jump if zero
-273F:4D99 F6 C2 26 test dl, 38
-273F:4D9C 75 11 jnz loc_989 ; Jump if not zero
-273F:4D9E 39 44 AC cmp [si-DECODED_PATHS_WIDTH*2], ax
-273F:4DA1 74 67 je loc_996 ; Jump if equal
-273F:4DA3 39 44 54 cmp [si+DECODED_PATHS_WIDTH*2], ax
-273F:4DA6 74 60 je loc_995 ; Jump if equal
-273F:4DA8 39 44 02 cmp [si+2], ax
-273F:4DAB 74 38 je loc_993 ; Jump if equal
-273F:4DAD EB 11 jmp short loc_990 ; (4DC0)
-273F:4DAF loc_989: ; xref 273F:4D9C
-273F:4DAF 39 44 02 cmp [si+2], ax
-273F:4DB2 74 31 je loc_993 ; Jump if equal
-273F:4DB4 39 44 FE cmp [si-2], ax
-273F:4DB7 74 07 je loc_990 ; Jump if equal
-273F:4DB9 39 44 54 cmp [si+DECODED_PATHS_WIDTH*2], ax
-273F:4DBC 74 70 je loc_998 ; Jump if equal
-273F:4DBE EB 4A jmp short loc_996 ; (4E0A)
-273F:4DC0 loc_990: ; xref 273F:4DAD, 4DB7
-273F:4DC0 80 E2 03 and dl,3
-273F:4DC3 F6 C2 02 test dl,2
-273F:4DC6 75 10 jnz loc_991 ; Jump if not zero
-273F:4DC8 80 C6 01 add dh,1
-273F:4DCB C7 47 FE 0002 mov word ptr [bx-2], FACING2_RIGHT
-273F:4DD0 C7 47 FC 0000 mov word ptr [bx-4], 0
-273F:4DD5 83 EB 04 sub bx, 4
-273F:4DD8 loc_991: ; xref 273F:4DC6
-273F:4DD8 83 EE 02 sub si,2
-273F:4DDB 83 07 08 add word ptr [bx],8
-273F:4DDE 80 CA 02 or dl,2
-273F:4DE1 EB AF jmp short loc_988 ; (4D92)
-273F:4DE3 loc_992: ; xref 273F:4D97
-273F:4DE3 EB 6D jmp short loc_1000 ; (4E52)
-273F:4DE5 loc_993: ; xref 273F:4DAB, 4DB2
-273F:4DE5 80 E2 05 and dl,5
-273F:4DE8 F6 C2 04 test dl,4
-273F:4DEB 75 10 jnz loc_994 ; Jump if not zero
-273F:4DED 80 C6 01 add dh,1
-273F:4DF0 C7 47 FE 0001 mov word ptr [bx-2], FACING2_LEFT
-273F:4DF5 C7 47 FC 0000 mov word ptr [bx-4], 0
-273F:4DFA 83 EB 04 sub bx, 4
-273F:4DFD loc_994: ; xref 273F:4DEB
-273F:4DFD 83 C6 02 add si, 2
-273F:4E00 83 07 08 add word ptr [bx], 8 ; Add # steps
-273F:4E03 80 CA 04 or dl, 4
-273F:4E06 EB 8A jmp short loc_988 ; (4D92)
-273F:4E08 loc_995: ; xref 273F:4DA6
-273F:4E08 EB 24 jmp short loc_998 ; (4E2E)
-273F:4E0A loc_996: ; xref 273F:4DA1, 4DBE
-273F:4E0A 80 E2 09 and dl,9
-273F:4E0D F6 C2 08 test dl,8
-273F:4E10 75 10 jnz loc_997 ; Jump if not zero
-273F:4E12 80 C6 01 add dh,1
-273F:4E15 C7 47 FE 0008 mov word ptr [bx-2], FACING2_DOWN
-273F:4E1A C7 47 FC 0000 mov word ptr [bx-4], 0
-273F:4E1F 83 EB 04 sub bx, 4
-273F:4E22 loc_997: ; xref 273F:4E10
-273F:4E22 83 EE 54 sub si, DECODED_PATHS_WIDTH*2
-273F:4E25 83 07 08 add word ptr [bx], 8 ; Add # steps
-273F:4E28 80 CA 08 or dl, 8
-273F:4E2B E9 FF64 jmp loc_988 ; (4D92)
-273F:4E2E loc_998: ; xref 273F:4DBC, 4E08
-273F:4E2E 80 E2 11 and dl,11h
-273F:4E31 F6 C2 10 test dl,10h
-273F:4E34 75 10 jnz loc_999 ; Jump if not zero
-273F:4E36 80 C6 01 add dh,1
-273F:4E39 C7 47 FE 0004 mov word ptr [bx-2], FACING2_UP
-273F:4E3E C7 47 FC 0000 mov word ptr [bx-4], 0
-273F:4E43 83 EB 04 sub bx, 4
-273F:4E46 loc_999: ; xref 273F:4E34
-273F:4E46 83 C6 54 add si, DECODED_PATHS_WIDTH*2
-273F:4E49 83 07 08 add word ptr [bx], 8 ; Add # steps
-273F:4E4C 80 CA 10 or dl, 10h
-273F:4E4F E9 FF40 jmp loc_988 ; (4D92)
-
-; This post-check is used to go through the paths two times - the first two
-; tries the path using standard direction checks, the second using the alternate
-; checks. If the first run through was the shortest, redo the process a third
-; time to get the walking sequence that was obtained the first time
-273F:4E52 loc_1000:
-273F:4E52 F6 C2 01 test dl, 1 ; Test for exit flag
-273F:4E55 75 1B jnz loc_1002 ; Jump if yes
-273F:4E57 F6 C1 80 test cl, 80h
-273F:4E5A 74 0B jz loc_1001 ; Jump if zero
-273F:4E5C 5E pop si
-273F:4E5D 5B pop bx
-273F:4E5E 8A CE mov cl, dh ; Store number of steps
-273F:4E60 32 F6 xor dh, dh ; Reset counter
-273F:4E62 B2 20 mov dl, 20h ; Flag for alt direction check
-273F:4E64 E9 FF29 jmp loc_987 ; Go get directions again
-273F:4E67 loc_1001:
-273F:4E67 3A CE cmp cl, dh
-273F:4E69 73 07 jae loc_1002 ; Jump if above or =
-273F:4E6B 5E pop si
-273F:4E6C 5B pop bx
-273F:4E6D B2 01 mov dl, 1 ; Flag for exit after retry
-273F:4E6F E9 FF1E jmp loc_987
-
-273F:4E72 loc_1002:
-273F:4E72 5E pop si
-273F:4E73 58 pop ax
-
-273F:4E74 loc_1003:
-273F:4E74 FC cld ; Clear direction
-273F:4E75 8B 45 0C mov ax, [di+PATHFIND_X]
-273F:4E78 A9 FFFF test ax, 0FFFFh ; Check X position
-273F:4E7B 74 19 jz loc_1006
-273F:4E7D 78 0A js loc_1004 ; Move
-273F:4E7F C7 47 FE 0001 mov word ptr [bx-2], FACING2_LEFT
-273F:4E84 89 47 FC mov [bx-4], ax ; Save # steps
-273F:4E87 EB 0A jmp short loc_1005
-273F:4E89 loc_1004: ; xref 273F:4E7D
-273F:4E89 C7 47 FE 0002 mov word ptr [bx-2], FACING2_RIGHT
-273F:4E8E F7 D8 neg ax
-273F:4E90 89 47 FC mov [bx-4], ax ; Save # steps
-273F:4E93 loc_1005:
-273F:4E93 83 EB 04 sub bx, 4 ; Move back one record
-273F:4E96 loc_1006: ; End of pathfinding
-273F:4E96 C7 05 0000 mov word ptr [di], 0
-273F:4E9A 8B 26 3942 mov sp, pathfind_sp
-273F:4E9E C6 06 3946 00 mov pathfind_in_progress, 0 ; Reset in-progress flag
-273F:4EA3 B8 0001 mov ax, 1 ; Set return value
-273F:4EA6 02 45 05 add al, [di+PATHFIND_DEST_STATE]
-273F:4EA9 50 push ax
-273F:4EAA 53 push bx
-273F:4EAB 06 push es
-273F:4EAC 07 pop es
-273F:4EAD 5B pop bx
-273F:4EAE 58 pop ax
-273F:4EAF C3 retn
- character_pathfind endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4C93
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_populate_cells proc near
-273F:4EB0 F7 07 FFFF test word ptr [bx], 0FFFFh ; Is cell occupied?
-273F:4EB4 75 48 jnz loc_1013 ; Jump if it is
-273F:4EB6 BD FFFF mov bp, 0FFFFh
-273F:4EB9 8B 47 AC mov ax, [bx-(DECODED_PATHS_WIDTH*2)] ; Get cell from one line up
-273F:4EBC 0B C0 or ax, ax ; Is it occupied
-273F:4EBE 74 06 jz loc_1007 ; Jump if not
-273F:4EC0 3B C5 cmp ax, bp ; Is it standard occupied indicator?
-273F:4EC2 73 02 jae loc_1007
-273F:4EC4 8B E8 mov bp,ax ; Store loaded cell value
-273F:4EC6 loc_1007:
-273F:4EC6 8B 47 54 mov ax, [bx+(DECODED_PATHS_WIDTH*2)] ; Get cell from next line
-273F:4EC9 0B C0 or ax, ax ; Is it occupied?
-273F:4ECB 74 06 jz loc_1008 ; Jump if not
-273F:4ECD 3B C5 cmp ax, bp
-273F:4ECF 73 02 jae loc_1008
-273F:4ED1 8B E8 mov bp, ax ; Store loaded cell value
-273F:4ED3 loc_1008:
-273F:4ED3 8B 47 FE mov ax, [bx-2] ; Get cell from left
-273F:4ED6 0B C0 or ax, ax ; Is it occupied?
-273F:4ED8 74 06 jz loc_1009 ; Jump if not
-273F:4EDA 3B C5 cmp ax, bp
-273F:4EDC 73 02 jae loc_1009 ; Store loaded cell value
-273F:4EDE 8B E8 mov bp, ax
-273F:4EE0 loc_1009:
-273F:4EE0 8B 47 02 mov ax, [bx+2] ; Get cell from right
-273F:4EE3 0B C0 or ax, ax ; Is it occupied?
-273F:4EE5 74 06 jz loc_1010 ; Jump if not
-273F:4EE7 3B C5 cmp ax, bp
-273F:4EE9 73 02 jae loc_1010
-273F:4EEB 8B E8 mov bp, ax ; Store loaded cell value
-273F:4EED loc_1010:
-
-; At this point, bp contains the lowest value from the surrounding cells, not
-; counting entries with 0ffff (occupied). Below we will now add 1 to the value
-; and store it in the cell. By repeated calls processing the entire grid, we
-; can figure out a path to the destination by following sequential numbers
-273F:4EED 83 C5 01 add bp, 1
-273F:4EF0 74 06 jz loc_1011 ; If no vals found, skip save
-273F:4EF2 89 2F mov [bx], bp ; Store value
-273F:4EF4 C6 45 13 01 mov byte ptr [di+PATHFIND_CELL_POPULATED], 1
-273F:4EF8 loc_1011: ; xref 273F:4EF0
-273F:4EF8 83 EE 03 sub si, 3 ; Decrement countdown ctr
-273F:4EFB 72 06 jc loc_1014 ; Break if countdown ended
-
-273F:4EFD loc_ret_1012: ; xref 273F:4F01
-273F:4EFD C3 retn
-273F:4EFE loc_1013: ; xref 273F:4EB4
-273F:4EFE 83 EE 01 sub si, 1 ; Decrement countdown ctr
-273F:4F01 73 FA jnc loc_ret_1012 ; Don't break if countdown not ended
-273F:4F03 loc_1014:
-273F:4F03 89 36 3944 mov pathfind_countdown_ctr, si
-273F:4F07 50 push ax
-273F:4F08 53 push bx
-273F:4F09 51 push cx
-273F:4F0A 52 push dx
-273F:4F0B 56 push si
-273F:4F0C 57 push di
-273F:4F0D 55 push bp
-273F:4F0E 1E push ds
-273F:4F0F 06 push es
-273F:4F10 9C pushf
-273F:4F11 E8 0034 call pathfind_return_to_sp
-273F:4F14 9D popf
-273F:4F15 07 pop es
-273F:4F16 1F pop ds
-273F:4F17 5D pop bp
-273F:4F18 5F pop di
-273F:4F19 5E pop si
-273F:4F1A 5A pop dx
-273F:4F1B 59 pop cx
-273F:4F1C 5B pop bx
-273F:4F1D 58 pop ax
-273F:4F1E 8B 36 3944 mov si, pathfind_countdown_ctr
-273F:4F22 C3 retn
- pathfind_populate_cells endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4D00, 4D0E, 4D1C, 4D2A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_scan_line proc near
-273F:4F23 8B F5 mov si, bp
-273F:4F25 32 F6 xor dh, dh
-
-273F:4F27 locloop_1015: ; xref 273F:4F45
-273F:4F27 03 F7 add si, di ; Add increment amount
-273F:4F29 80 C6 01 add dh,1
-273F:4F2C F7 04 FFFF test word ptr [si], 0FFFFh ; Check cell
-273F:4F30 74 13 jz loc_1018 ; Skip if empty (unpopulated)
-273F:4F32 78 11 js loc_1018 ; Or if occupied
-273F:4F34 3A D6 cmp dl, dh ; Check ctr against max
-273F:4F36 72 0C jb loc_ret_1017 ; Exit if below
-273F:4F38 75 06 jnz loc_1016 ; Jump if not equal
-273F:4F3A 8B 04 mov ax, [si]
-273F:4F3C 3B 07 cmp ax, [bx]
-273F:4F3E 73 04 jae loc_ret_1017 ; Jump if above or =
-273F:4F40 loc_1016: ; xref 273F:4F38
-273F:4F40 8B DE mov bx,si
-273F:4F42 8A D6 mov dl, dh
-
-273F:4F44 loc_ret_1017: ; xref 273F:4F36, 4F3E
-273F:4F44 C3 retn
-273F:4F45 loc_1018: ; xref 273F:4F30, 4F32
-273F:4F45 E2 E0 loop locloop_1015 ; Loop if cx > 0
-
-273F:4F47 C3 retn
- pathfind_scan_line endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4F11
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_return_to_sp proc near
-273F:4F48 89 25 mov [di], sp
-273F:4F4A 8B 26 3942 mov sp, pathfind_sp
-273F:4F4E 33 C0 xor ax, ax
-273F:4F50 FC cld ; Clear direction
-273F:4F51 C3 retn
- pathfind_return_to_sp endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5039, 5127, 5EB0, 5EE9, 5F56
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_reset proc near
-273F:4F52 53 push bx
-273F:4F53 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:4F56 75 0E jne loc_1019 ; Jump if not equal
-273F:4F58 úBB 3983 mov bx, offset player_pathfind_data
-273F:4F5B C6 06 3946 00 mov pathfind_in_progress, 0
-273F:4F60 C7 07 0000 mov word ptr [bx], 0
-273F:4F64 5B pop bx
-273F:4F65 C3 retn
-273F:4F66 loc_1019: ; xref 273F:4F56
-273F:4F66 úBB 4227 mov bx, offset chars_pathfind_data
-273F:4F69 3B 47 02 cmp ax, [bx+2]
-273F:4F6C 75 04 jne loc_1020 ; Jump if not equal
-273F:4F6E C7 07 0000 mov word ptr [bx], 0
-273F:4F72 loc_1020: ; xref 273F:4F6C
-273F:4F72 5B pop bx
-273F:4F73 C3 retn
- pathfind_reset endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8FE4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_pathfind_reset proc near
-273F:4F74 C6 06 3946 00 mov pathfind_in_progress, 0
-273F:4F79 úBE 4227 mov si, offset chars_pathfind_data
-273F:4F7C C7 04 0000 mov word ptr [si], 0
-273F:4F80 C3 retn
- seq_pathfind_reset endp
-
-273F:4F81 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Contains all the standard handling for characters, such as the Skorl
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- standard_character_tick_proc proc near
-273F:4F82 ú8B DE mov bx, si
-273F:4F84 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:4F87 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:4F8A E8 11EB call talk_countdown_handler
-273F:4F8D F7 44 2F FFFF test word ptr [si+HS_USE_HOTSPOT_ID], 0FFFFh
-273F:4F92 74 1F jz loc_1023 ; Jump if no hotspot to use
-273F:4F94 8B 44 2B mov ax, [si+HS_V2B]
-273F:4F97 3D 002A cmp ax, 2Ah
-273F:4F9A 74 03 je loc_1022 ; Jump if equal
-273F:4F9C E9 F3C7 jmp character_update_movement
-
-273F:4F9F loc_1022: ; xref 273F:4F9A
-273F:4F9F A3 BA1B mov active_hotspot_id, ax
-273F:4FA2 8B 44 2F mov ax, [si+HS_USE_HOTSPOT_ID]
-273F:4FA5 A3 BA19 mov use_hotspot_id, ax
-273F:4FA8 8B 44 2D mov ax, [si+HS_HOTSPOT_SCRIPT_ID]
-273F:4FAB E8 EE86 call sequence_execute
-273F:4FAE C7 44 2F 0000 mov word ptr [si+HS_USE_HOTSPOT_ID], 0
-273F:4FB3 loc_1023:
-273F:4FB3 F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:4FB8 74 05 jz loc_1024
-273F:4FBA 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR], 1
-273F:4FBE C3 retn
-273F:4FBF loc_1024:
-273F:4FBF E8 C149 call character_find_impinging_chars
-273F:4FC2 F6 45 1D FF test byte ptr [di+ANIM_SKIP], 0FFh
-273F:4FC6 74 4C jz loc_1028 ; Skip if necessary
-273F:4FC8 F7 06 10BE FFFF test num_impinging_chars, 0FFFFh ; Bumped into anyone?
-273F:4FCE 74 40 jz loc_1027 ; Jump if not
-273F:4FD0 56 push si
-273F:4FD1 úBE 10C0 mov si, offset impinging_char_list
-273F:4FD4 loc_1025:
-273F:4FD4 AD lodsw ; Get character Id
-273F:4FD5 0B C0 or ax, ax ; End of list reached?
-273F:4FD7 74 2C jz loc_1026 ; Jump if yes
-273F:4FD9 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is it the player?
-273F:4FDC 75 F6 jne loc_1025 ; Skip if yes
-273F:4FDE 80 3E 6D33 02 cmp [player_hotspot_rec+HS_CHAR_MODE], CHARMODE_IDLE
-273F:4FE3 75 20 jne loc_1026 ; Jump if not equal
-273F:4FE5 5E pop si ; Signal the player to move
-273F:4FE6 úBE 6CEF mov si, offset player_hotspot_rec ; out of the way
-273F:4FE9 BF B14E mov di, offset animation_table
-273F:4FEC 8B DE mov bx, si
-273F:4FEE 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:4FF1 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:4FF4 C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
-273F:4FF8 C7 44 52 0000 mov [si+HS_DEST_HOTSPOT], 0
-273F:4FFD C6 06 9834 04 mov cursor_state, CURSORSTATE_BUMPED
-273F:5002 E9 0661 jmp character_set_random_dest
-
-273F:5005 loc_1026:
-273F:5005 5E pop si
-273F:5006 C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_PAUSED
-273F:500A C7 44 42 000A mov word ptr [si+HS_DELAY_CTR], 10
-273F:500F C3 retn
-
-273F:5010 loc_1027:
-273F:5010 C6 45 1D 00 mov byte ptr [di+ANIM_SKIP], 0
-273F:5014 loc_1028:
-273F:5014 F7 44 47 FFFF test [si+SCRIPT_HOTSPOT_ID], 0FFFFh
-273F:5019 74 11 jz loc_1029 ; Jump if zero
-273F:501B 8B 44 47 mov ax, [si+SCRIPT_HOTSPOT_ID]
-273F:501E A3 BA19 mov use_hotspot_id, ax
-273F:5021 8B 44 45 mov ax, [si+HS_TICK_SCRIPT_OFFSET]
-273F:5024 E8 EE0D call sequence_execute
-273F:5027 C7 44 47 0000 mov word ptr [si+SCRIPT_HOTSPOT_ID], 0
-
-273F:502C loc_1029:
-273F:502C F7 44 4A FFFF test word ptr [si+HS_PAUSE_CTR], 0FFFFh
-273F:5031 74 21 jz loc_1031 ; Jump if zero
-273F:5033 E8 F330 call character_update_movement
-273F:5036 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:5039 E8 FF16 call pathfind_reset
-273F:503C 83 7C 4A 01 cmp word ptr [si+HS_PAUSE_CTR], 1
-273F:5040 74 03 je loc_1030 ; Jump if equal
-273F:5042 E9 F521 jmp character_paused_list_scan_2
-273F:5045 loc_1030: ; xref 273F:5040
-273F:5045 C7 44 4A 0000 mov word ptr [si+HS_PAUSE_CTR], 0
-273F:504A F6 44 44 FF test byte ptr [si+HS_CHAR_MODE], 0FFh
-273F:504E 75 04 jnz loc_1031 ; Jump if not zero
-273F:5050 E8 F334 call character_pathfind_clear
-273F:5053 C3 retn
-
-273F:5054 loc_1031: ; xref 273F:5031, 504E
-273F:5054 F6 44 44 FF test byte ptr [si+HS_CHAR_MODE], 0FFh
-273F:5058 75 02 jnz loc_1032 ; Jump if not zero
-273F:505A EB 6C jmp short loc_1040 ; (50C8)
-273F:505C loc_1032: ; xref 273F:5058
-273F:505C 8A 44 44 mov al, [si+HS_CHAR_MODE]
-273F:505F 3C 06 cmp al, CHARMODE_6
-273F:5061 75 17 jne loc_1034 ; Jump if not equal
-273F:5063 E8 F300 call character_update_movement
-273F:5066 53 push bx
-273F:5067 úBB 10BE mov bx, offset num_impinging_chars
-273F:506A loc_1033: ; xref 273F:5076
-273F:506A 8B 07 mov ax, [bx] ; Get impinging char Id
-273F:506C 0B C0 or ax, ax ; End of list reached?
-273F:506E 74 37 jz loc_1037
-273F:5070 83 C3 02 add bx, 2 ; Move to next entry
-273F:5073 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is character the player?
-273F:5076 75 F2 jne loc_1033 ; Keep looping
-273F:5078 5B pop bx
-273F:5079 C3 retn
-
-273F:507A loc_1034:
-273F:507A F7 44 42 FFFF test word ptr [si+HS_DELAY_CTR], 0FFFFh
-273F:507F 74 27 jz loc_1038 ; Jump if zero
-273F:5081 E8 F2E2 call character_update_movement
-273F:5084 F7 44 50 FFFF test word ptr [si+HS_ACTION_HOTSPOT], 0FFFFh
-273F:5089 74 17 jz loc_1035 ; Jump if zero
-273F:508B 56 push si
-273F:508C 8B 5C 50 mov bx, [si+HS_ACTION_HOTSPOT]
-273F:508F E8 BC56 call get_room_resource_pointer
-273F:5092 5B pop bx
-273F:5093 87 F3 xchg si, bx ; si=char Id,
-273F:5095 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:5098 3B 47 06 cmp ax, [bx+HS_ROOM_NUM]
-273F:509B 75 0B jne loc_1038 ; Jump if not equal
-273F:509D E8 0501 call characters_impinging_check
-273F:50A0 74 06 jz loc_1038 ; Jump if zero
-273F:50A2 loc_1035: ; xref 273F:5089
-273F:50A2 83 6C 42 01 sub word ptr [si+HS_DELAY_CTR], 1
-
-273F:50A6 loc_ret_1036: ; xref 273F:50BB
-273F:50A6 C3 retn
-273F:50A7 loc_1037: ; xref 273F:506E
-273F:50A7 5B pop bx
-273F:50A8 loc_1038: ; xref 273F:507F, 509B, 50A0
-273F:50A8 33 C0 xor ax,ax ; Zero register
-273F:50AA 89 44 50 mov [si+HS_ACTION_HOTSPOT], ax
-273F:50AD 86 44 44 xchg [si+HS_CHAR_MODE], al
-273F:50B0 50 push ax
-273F:50B1 E8 F2D3 call character_pathfind_clear
-273F:50B4 58 pop ax
-273F:50B5 3C 04 cmp al, CHARMODE_4
-273F:50B7 74 04 je loc_1039 ; Jump if equal
-273F:50B9 3C 07 cmp al, CHARMODE_7
-273F:50BB 75 E9 jne loc_ret_1036 ; Jump if not equal
-273F:50BD loc_1039: ; xref 273F:50B7
-273F:50BD C7 44 33 0000 mov word ptr [si+HS_V33], 0
-273F:50C2 B8 0001 mov ax, 1
-273F:50C5 E9 12E9 jmp display_message_dialog
-
-273F:50C8 loc_1040: ; xref 273F:505A
-273F:50C8 F7 44 58 FFFF test word ptr [si+HS_V58], 0FFFFh
-273F:50CD 74 0F jz loc_1041 ; Jump if zero
-273F:50CF F6 06 6D52 FF test player_action_state, 0FFh
-273F:50D4 74 08 jz loc_1041 ; Jump if zero
-273F:50D6 C6 44 2A C7 mov byte ptr [si+HS_ACTION_CTR], 199
-273F:50DA C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:50DD C3 retn
-
-273F:50DE loc_1041: ; xref 273F:50CD, 50D4
-273F:50DE 8A 07 mov al, [bx] ; Get current atcion
-273F:50E0 0A C0 or al,al ; Any defined?
-273F:50E2 75 06 jnz loc_1042 ; Jump if yes
-273F:50E4 B8 0002 mov ax, 2
-273F:50E7 E9 F279 jmp character_update_movement_2
-273F:50EA loc_1042: ; xref 273F:50E2
-273F:50EA 3C 05 cmp al, CHAR_ACTION_CONTINUE_WALK
-273F:50EC 74 28 je loc_1045
-273F:50EE 3C 01 cmp al, CHAR_ACTION_START_WALK
-273F:50F0 74 32 je loc_1048 ; Jump if equal
-273F:50F2 3C 04 cmp al, CHAR_ACTION_PROCESSING_PATH
-273F:50F4 74 3A je loc_1049 ; Jump if equal
-273F:50F6 3C 03 cmp al, CHAR_ACTION_EXEC_SCRIPT
-273F:50F8 74 1F je loc_1046 ; Jump if equal
-
-; Dispatching action
-273F:50FA 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:50FD F7 47 03 FFFF test word ptr [bx+CURRENT_ACTION_ROOM_NUM], 0FFFFh
-273F:5102 75 03 jnz loc_1043 ; Jump if not zero
-273F:5104 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:5107 loc_1043: ; xref 273F:5102
-273F:5107 3B 47 03 cmp ax, [bx+CURRENT_ACTION_ROOM_NUM] ; Compare against room number
-273F:510A 74 03 je loc_1044 ; Jump if equal
-273F:510C E9 01F6 jmp npc_change_room
-273F:510F loc_1044: ; xref 273F:510A
-273F:510F C6 45 1D 00 mov byte ptr [di+ANIM_SKIP], 0
-273F:5113 E9 F0A8 jmp action_dispatch
-273F:5116 loc_1045: ; xref 273F:50EC
-273F:5116 E9 00E0 jmp loc_1060 ; (51F9)
-273F:5119 loc_1046: ; xref 273F:50F8
-273F:5119 E8 BE8D call hotspot_script_execute
-273F:511C 0B C0 or ax,ax ; Zero ?
-273F:511E 75 03 jnz loc_ret_1047 ; Jump if not zero
-273F:5120 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-
-273F:5123 loc_ret_1047: ; xref 273F:511E
-273F:5123 C3 retn
-273F:5124 loc_1048: ; Start walk
-273F:5124 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:5127 E8 FE28 call pathfind_reset
-273F:512A C6 07 04 mov byte ptr [bx], CHAR_ACTION_PROCESSING_PATH
-273F:512D E8 F257 call character_pathfind_clear
-
-273F:5130 loc_1049: ; Processing walk path
-273F:5130 56 push si
-273F:5131 57 push di
-273F:5132 53 push bx
-273F:5133 E8 F42A call character_paused_list_scan
-273F:5136 8B 4C 56 mov cx, [si+HS_DEST_Y]
-273F:5139 8B 5C 54 mov bx, [si+HS_DEST_X]
-273F:513C 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:513F 8A 54 4C mov dl, [si+HS_BLOCKED_FLAG]
-273F:5142 E8 F8B1 call character_pathfind
-273F:5145 5A pop dx
-273F:5146 5F pop di
-273F:5147 5E pop si
-273F:5148 0B C0 or ax,ax ; Zero ?
-273F:514A 75 01 jnz loc_1050 ; Jump if not zero
-273F:514C C3 retn
-273F:514D loc_1050: ; xref 273F:514A
-273F:514D 3D 0001 cmp ax, PF_OK
-273F:5150 74 0C je loc_1051 ; Jump if equal
-273F:5152 F7 44 52 FFFF test [si+HS_DEST_HOTSPOT], 0FFFFh
-273F:5157 75 07 jnz loc_1052 ; Jump if not zero
-273F:5159 3D 0002 cmp ax, PF_DEST_OCCUPIED
-273F:515C 75 02 jne loc_1052 ; Jump if not equal
-273F:515E loc_1051: ; xref 273F:5150
-273F:515E EB 79 jmp short loc_1058 ; (51D9)
-273F:5160 loc_1052: ; xref 273F:5157, 515C
-273F:5160 87 D3 xchg dx,bx
-273F:5162 80 7C 4C 02 cmp byte ptr [si+HS_BLOCKED_FLAG], BS_FINAL
-273F:5166 74 24 je loc_1054 ; Jump if equal
-273F:5168 80 44 4C 01 add byte ptr [si+HS_BLOCKED_FLAG], 1
-273F:516C F6 44 4D FF test byte ptr [si+HS_V4D], 0FFh
-273F:5170 75 0B jnz loc_1053 ; Jump if not zero
-273F:5172 83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:5176 C6 44 4D 01 mov byte ptr [si+HS_V4D], 1
-273F:517A 83 C3 05 add bx, CURRENT_ACTION_RECORD_SIZE
-273F:517D loc_1053: ; xref 273F:5170
-273F:517D C7 47 01 13C2 mov word ptr [bx+CURRENT_ACTION_SUPPORT_TABLE], 13C2h
-273F:5182 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:5185 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:5188 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:518B C3 retn
-273F:518C loc_1054: ; xref 273F:5166
-273F:518C 53 push bx
-273F:518D úBB 10C0 mov bx, offset impinging_char_list
-273F:5190 loc_1055: ; xref 273F:519C
-273F:5190 8B 07 mov ax, [bx]
-273F:5192 0B C0 or ax,ax ; Zero ?
-273F:5194 74 11 jz loc_1056 ; Jump if zero
-273F:5196 83 C3 02 add bx,2
-273F:5199 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:519C 75 F2 jne loc_1055 ; Jump if not equal
-273F:519E 5B pop bx
-273F:519F E8 0006 call sub_125 ; (51A8)
-273F:51A2 C6 44 44 06 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_6
-273F:51A6 C3 retn
-273F:51A7 loc_1056: ; xref 273F:5194
-273F:51A7 5B pop bx
-
-273F:51A8 sub_125 proc near
-273F:51A8 E8 F296 call character_paused_list_reset
-273F:51AB E8 F1B8 call character_update_movement
-273F:51AE 83 6C 61 05 sub word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:51B2 C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
-273F:51B6 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
-273F:51BA C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_3
-273F:51BE C7 44 42 0002 mov word ptr [si+HS_DELAY_CTR], 2
-273F:51C3 8B DE mov bx, si
-273F:51C5 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:51C8 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:51CB 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:51CE 3B 47 03 cmp ax, [bx+CURRENT_ACTION_ROOM_NUM]
-273F:51D1 74 05 je loc_ret_1057 ; Jump if equal
-273F:51D3 C7 44 52 FFFF mov [si+HS_DEST_HOTSPOT], 0FFFFh
-
-273F:51D8 loc_ret_1057: ; xref 273F:51D1
-273F:51D8 C3 retn
- sub_125 endp
- standard_character_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:51D9 loc_1058: ; xref 273F:515E
-273F:51D9 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
-273F:51DD F7 07 FFFF test word ptr [bx], 0FFFFh ; Any pathfinding set defined?
-273F:51E1 75 06 jnz loc_1059 ; Jump if yes
-273F:51E3 8B DA mov bx, dx
-273F:51E5 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:51E8 C3 retn
-273F:51E9 loc_1059: ; xref 273F:51E1
-273F:51E9 87 DA xchg bx,dx
-273F:51EB C6 07 05 mov byte ptr [bx], CHAR_ACTION_CONTINUE_WALK
-273F:51EE E8 F01C call character_translate_movements
-273F:51F1 83 65 02 F8 and word ptr [di+ANIM_Y], 0FFF8h
-273F:51F5 83 64 0F F8 and word ptr [si+HS_Y], 0FFF8h
-273F:51F9 loc_1060: ; xref 273F:5116
-273F:51F9 8B 44 52 mov ax, [si+HS_DEST_HOTSPOT]
-273F:51FC 0B C0 or ax,ax ; Zero ?
-273F:51FE 74 17 jz loc_1062 ; Jump if zero
-273F:5200 3D FFFF cmp ax,0FFFFh
-273F:5203 74 12 je loc_1062 ; Jump if equal
-273F:5205 56 push si
-273F:5206 53 push bx
-273F:5207 E8 1FE4 call room_exit_hs_get_pointer
-273F:520A 8A 44 0C mov al,[si+REHS_EXIT_BLOCKED]
-273F:520D 5B pop bx
-273F:520E 5E pop si
-273F:520F 0A C0 or al,al ; Zero ?
-273F:5211 74 04 jz loc_1062 ; Jump if zero
-273F:5213 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-
-273F:5216 loc_ret_1061: ; xref 273F:521C
-273F:5216 C3 retn
-273F:5217 loc_1062: ; xref 273F:51FE, 5203, 5211
-273F:5217 E8 BF9B call character_paused_list_check
-273F:521A 0B C0 or ax,ax ; Zero ?
-273F:521C 75 F8 jnz loc_ret_1061 ; Jump if not zero
-273F:521E F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
-273F:5222 74 03 jz loc_1063 ; Jump if zero
-273F:5224 E8 F160 call character_pathfind_clear
-273F:5227 loc_1063:
-273F:5227 8B DE mov bx,si
-273F:5229 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:522C 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:522F E8 BC7E call character_update_frame
-273F:5232 0A C0 or al, al ; Zero ?
-273F:5234 75 02 jnz loc_1064 ; Jump if not zero
-273F:5236 EB 03 jmp short loc_1065
-273F:5238 loc_1064:
-273F:5238 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:523B loc_1065:
-273F:523B F7 44 52 FFFF test [si+HS_DEST_HOTSPOT], 0FFFFh ; Walking to exit?
-273F:5240 74 03 jz loc_ret_1066 ; If not then return
-273F:5242 E8 F043 call character_check_room_change ; Room change check
-
-273F:5245 loc_ret_1066:
-273F:5245 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- character_change_room_2:
-273F:5246 80 25 F8 and byte ptr [di+ANIM_X], 0F8h
-273F:5249 80 64 0D F8 and byte ptr [si+HS_X], 0F8h
-273F:524D 80 0D 05 or byte ptr [di+ANIM_X], 5
-273F:5250 80 4C 0D 05 or byte ptr [si+HS_X], 5
-273F:5254 C6 44 60 00 mov byte ptr [si+HS_EXIT_CTR], 0
-273F:5258 C6 45 1D 2A mov byte ptr [di+ANIM_SKIP], 2Ah
-273F:525C C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:525F F6 C1 FF test cl, 0FFh ; Any direction specified?
-273F:5262 74 12 jz loc_ret_1068 ; Exit if not
-273F:5264 F6 C1 80 test cl, 80h
-273F:5267 75 0E jnz loc_1069 ; Face up
-273F:5269 F6 C1 40 test cl, 40h
-273F:526C 75 0C jnz loc_1070 ; Face down
-273F:526E F6 C1 20 test cl, 20h
-273F:5271 75 0A jnz loc_1071 ; Face left
-273F:5273 E9 F296 jmp char_face_right
-
-273F:5276 loc_ret_1068:
-273F:5276 C3 retn
-273F:5277 loc_1069:
-273F:5277 E9 F25F jmp char_face_up
-273F:527A loc_1070:
-273F:527A E9 F26D jmp char_face_down
-273F:527D loc_1071:
-273F:527D E9 F27B jmp char_face_left
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_unknown_1 proc near
-273F:5280 F6 06 6D52 FF test player_action_state, 0FFh
-273F:5285 74 0E jz loc_1072 ; Jump if zero
-273F:5287 C7 44 42 000C mov word ptr [si+HS_DELAY_CTR], 0Ch
-273F:528C C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_3
-273F:5290 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:5294 C3 retn
-273F:5295 loc_1072:
-273F:5295 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
-273F:5298 89 0E 983F mov data_1090, cx
-273F:529C C7 06 9841 0000 mov data_1091, 0
-273F:52A2 55 push bp
-273F:52A3 BB 0022 mov bx,22h
-273F:52A6 BA 03E8 mov dx, PLAYER_HOTSPOT_ID
-273F:52A9 E8 10E4 call display_message_dialog
-
-273F:52AC C6 44 44 04 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_4
-273F:52B0 C7 44 42 0082 mov word ptr [si+HS_DELAY_CTR], 82h
-273F:52B5 5B pop bx
-273F:52B6 8B 07 mov ax, [bx]
-273F:52B8 89 44 33 mov [si+HS_V33], ax
-273F:52BB E9 EF1B jmp loc_825 ; (41D9)
- npc_unknown_1 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:52BE loc_1073: ; xref 273F:530D
-273F:52BE C6 44 60 00 mov byte ptr [si+HS_EXIT_CTR], 0
-273F:52C2 F7 44 61 FFFF test word ptr [si+HS_ACTION_OFFSET], 0FFFFh
-273F:52C7 74 28 jz loc_1077 ; Jump if no cached actions
-273F:52C9 53 push bx
-273F:52CA F7 44 4E FFFF test word ptr [si+HS_START_ROOM_NUM], 0FFFFh
-273F:52CF 74 18 jz loc_1075 ; Jump if zero
-273F:52D1 8B 5F 01 mov bx, [bx+CURRENT_ACTION_SUPPORT_TABLE]
-273F:52D4 81 FB 13BE cmp bx, 13BEh
-273F:52D8 72 06 jb loc_1074 ; Jump if below
-273F:52DA ú81 FB 13CE cmp bx, 13CEh ; (273F:13CE=54h)
-273F:52DE 72 09 jb loc_1075 ; Jump if below
-273F:52E0 loc_1074: ; xref 273F:52D8
-273F:52E0 C7 07 0017 mov word ptr [bx], ACTION_RETURN
-273F:52E4 C7 47 02 0000 mov word ptr [bx+2], 0
-273F:52E9 loc_1075: ; xref 273F:52CF, 52DE
-273F:52E9 5B pop bx
-273F:52EA 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:52ED 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-
-273F:52F0 loc_ret_1076: ; xref 273F:52F6
-273F:52F0 C3 retn
-273F:52F1 loc_1077: ; xref 273F:52C7
-273F:52F1 F7 44 5E FFFF test word ptr [si+HS_BLOCKED_SUPPORT_OFFSET], 0FFFFh
-273F:52F6 74 F8 jz loc_ret_1076 ; Jump if zero
-273F:52F8 8B 44 5E mov ax, [si+HS_BLOCKED_SUPPORT_OFFSET]
-273F:52FB 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
-273F:52FE 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:5301 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:5304 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ; This code is jumped to if the NPC is not in the room designated
- ; by the room number in the current action record. It starts the
- ; character walking to the exit to route them to the right room
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_change_room:
-273F:5305 80 44 60 01 add byte ptr [si+HS_EXIT_CTR], 1
-273F:5309 80 7C 60 05 cmp byte ptr [si+HS_EXIT_CTR], 5
-273F:530D 73 AF jae loc_1073 ; Jump if above or =
-273F:530F 53 push bx
-273F:5310 8B 5F 03 mov bx,[bx+CURRENT_ACTION_ROOM_NUM]
-273F:5313 E8 00C4 call room_exit_get_coordinates
-273F:5316 81 7D 1B 03E9 cmp word ptr [di+ANIM_HOTSPOT_ID], RATPOUCH_HOTSPOT_ID
-273F:531B 74 39 je loc_1081 ; Jump if equal
-
-; The following loop counts up the number of characters in that room into dl
-273F:531D 51 push cx
-273F:531E 52 push dx
-273F:531F úBB B14E mov bx, offset animation_table
-273F:5322 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:5325 33 D2 xor dx,dx ; Zero register
-273F:5327 locloop_1079: ; xref 273F:5346
-273F:5327 39 47 0E cmp [bx+ANIM_ROOM_NUM], ax
-273F:532A 75 17 jne loc_1080 ; Jump if not equal
-273F:532C F6 47 0C FF test byte ptr [bx+ANIM_LAYER], 0FFh
-273F:5330 74 11 jz loc_1080 ; Jump if zero
-273F:5332 81 7F 1B 03E8 cmp word ptr [bx+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
-273F:5337 72 0A jb loc_1080 ; Jump if below
-273F:5339 81 7F 1B 0408 cmp word ptr [bx+ANIM_HOTSPOT_ID], FIRST_OBJECT_HOTSPOT_ID
-273F:533E 73 03 jae loc_1080 ; Jump if above or =
-273F:5340 80 C2 01 add dl,1
-273F:5343 loc_1080:
-273F:5343 83 C3 29 add bx, ANIMATION_SLOT_SIZE
-273F:5346 E2 DF loop locloop_1079 ; Loop if cx > 0
-273F:5348 8A C2 mov al,dl
-273F:534A 5A pop dx
-273F:534B 59 pop cx
-
-273F:534C 3C 04 cmp al,4 ; 4 or more chars in room?
-273F:534E 72 06 jb loc_1081 ; Jump if not
-273F:5350 5B pop bx
-273F:5351 33 C0 xor ax,ax ; Set action to index #0 in list
-273F:5353 E9 F1D2 jmp set_new_dispatch_action
-
-273F:5356 loc_1081:
-273F:5356 5B pop bx
-273F:5357 8A C6 mov al,dh
-273F:5359 80 E6 0F and dh,0Fh
-273F:535C 89 4C 54 mov [si+HS_DEST_X],cx
-273F:535F 89 54 56 mov [si+HS_DEST_Y],dx
-273F:5362 C7 44 52 FFFF mov [si+HS_DEST_HOTSPOT], 0FFFFh
-273F:5367 53 push bx
-
-273F:5368 úBB 2E57 mov bx, offset room_exit_hotspots
-273F:536B 24 F0 and al, 0F0h
-273F:536D 8B 54 06 mov dx, [si+HS_ROOM_NUM]
-273F:5370 loc_1082: ; xref 273F:5381
-273F:5370 úF6 07 FF test byte ptr [bx], 0FFh
-273F:5373 74 5C jz loc_1085 ; Jump if zero
-273F:5375 3A 17 cmp dl, [bx]
-273F:5377 75 05 jne loc_1083 ; Jump if not equal
-273F:5379 3A 47 01 cmp al, [bx+1]
-273F:537C 74 05 je loc_1084 ; Jump if equal
-273F:537E loc_1083: ; xref 273F:5377
-273F:537E 83 C3 04 add bx, 4
-273F:5381 EB ED jmp short loc_1082 ; (5370)
-273F:5383 loc_1084:
-273F:5383 8B 47 02 mov ax, [bx+2] ; Found an entry, set it
-273F:5386 89 44 52 mov [si+HS_DEST_HOTSPOT], ax ; into the dest hotspot Id
-273F:5389 50 push ax
-273F:538A 56 push si
-273F:538B E8 1E60 call room_exit_hs_get_pointer
-273F:538E 5B pop bx
-273F:538F 87 DE xchg bx,si
-273F:5391 58 pop ax
-273F:5392 F6 47 0C FF test byte ptr [bx+REHS_EXIT_BLOCKED], 0FFh ; Exit blocked?
-273F:5396 74 39 jz loc_1085 ; Jump if not blocked
-
-; Code reaches this point if the needed exit is blocked
-273F:5398 50 push ax ; Save dest hotspot Id
-273F:5399 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]; Calc offset into support
-273F:539C BB 0006 mov bx, 6 ; data set starting at 0bb95h
-273F:539F 2D 03E9 sub ax, RATPOUCH_HOTSPOT_ID
-273F:53A2 F7 E3 mul bx
-273F:53A4 úBB BB95 mov bx, offset support_data_rec_bb95
-273F:53A7 03 D8 add bx, ax
-273F:53A9 58 pop ax ; Restore dest hotspot Id
-273F:53AA 89 47 02 mov [bx+2], ax ; Store id into record as param #1
-273F:53AD C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
-273F:53B1 83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:53B5 8B C3 mov ax, bx
-273F:53B7 5B pop bx
-273F:53B8 8B DE mov bx, si
-273F:53BA 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:53BD 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:53C0 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
-273F:53C3 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:53C6 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:53C9 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:53CC C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:53D0 C3 retn
-
-; Exit has no hotspot, or has one that's not not blocked, so it's safe to simply start walking to it
-273F:53D1 loc_1085:
-273F:53D1 5B pop bx
-273F:53D2 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:53D5 C6 45 27 01 mov byte ptr [di+ANIM_WALK_FLAG], 1
-273F:53D9 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:13B8, 5313
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_exit_get_coordinates proc near
-273F:53DA 48 dec ax
-273F:53DB B9 0058 mov cx,58h
-273F:53DE F7 E1 mul cx ; dx:ax = reg * ax
-273F:53E0 05 1929 add ax, offset exit_coord_list
-273F:53E3 03 D8 add bx, ax ; Move offset for indexing
-273F:53E5 8A 5F 23 mov bl, [bx+23h]
-273F:53E8 32 FF xor bh, bh ; Zero register
-273F:53EA 03 D8 add bx, ax
-273F:53EC 8B 0F mov cx, [bx]
-273F:53EE 8B 57 02 mov dx, [bx+2]
-273F:53F1 8B 47 04 mov ax, [bx+4]
-273F:53F4 C3 retn
- room_exit_get_coordinates endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bp = Address of offset 2 in the Support data for the DISPATCH_ACTION
- ; character action that launched this action
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- get_proc proc near
-273F:53F5 8B DD mov bx, bp
-273F:53F7 8B 07 mov ax, [bx] ; Get hotspot Id
-273F:53F9 83 C5 02 add bp,2
-273F:53FC A3 BA19 mov use_hotspot_id, ax
-273F:53FF A3 BA1B mov active_hotspot_id, ax
-273F:5402 E8 F1A2 call hotspot_action_precheck
-273F:5405 0B C0 or ax,ax ; Zero ?
-273F:5407 74 08 jz loc_1086 ; Jump if zero
-273F:5409 3D 0003 cmp ax,3
-273F:540C 74 4E je loc_ret_1090 ; Jump if equal
-273F:540E E9 0170 jmp character_walking_end
-273F:5411 loc_1086: ; xref 273F:5407
-273F:5411 E8 F2DA call character_face_hotspot
-273F:5414 53 push bx
-273F:5415 E8 0169 call character_walking_end
-273F:5418 5B pop bx
-273F:5419 E8 01DA call hotspot_get_action_sequence
-273F:541C 79 03 jns loc_1087 ; Jump if not sign
-273F:541E E9 0F90 jmp display_message_dialog_3
-273F:5421 loc_1087: ; xref 273F:541C
-273F:5421 74 0D jz loc_1088 ; Jump if zero
-273F:5423 E8 EA0E call sequence_execute
-273F:5426 74 08 jz loc_1088 ; Jump if zero
-273F:5428 3D 0001 cmp ax,1
-273F:542B 74 2F je loc_ret_1090 ; Jump if equal
-273F:542D E9 0F81 jmp display_message_dialog_3
-273F:5430 loc_1088:
-273F:5430 8B 45 1B mov ax,[di+ANIM_HOTSPOT_ID] ; Move item into char's inventory
-273F:5433 89 47 06 mov [bx+HS_ROOM_NUM], ax
-273F:5436 E8 0920 call player_inc_inventory_items
-273F:5439 81 3E BA19 7530 cmp use_hotspot_id, START_NONVISUAL_HOTSPOT_ID
-273F:543F 73 1B jae loc_ret_1090 ; Jump if above or =
-273F:5441 56 push si
-273F:5442 57 push di
-273F:5443 8B F3 mov si,bx
-273F:5445 8B 7C 0B mov di,[si+HS_ANIM_OFFSET]
-273F:5448 0B FF or di,di ; Zero ?
-273F:544A 74 03 jz loc_1089 ; Jump if zero
-273F:544C E8 BE23 call animation_unload
-273F:544F loc_1089: ; xref 273F:544A
-273F:544F A1 BA19 mov ax, use_hotspot_id ; Get hotspot header
-273F:5452 E8 B8CC call get_room_resource_pointer3
-273F:5455 C7 44 06 0000 mov word ptr [si+HSH_DESC_2], 0 ; Remove first description
-273F:545A 5F pop di
-273F:545B 5E pop si
-
-273F:545C loc_ret_1090: ; xref 273F:540C, 542B, 543F, 5487
-273F:545C C3 retn
- get_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_walking_check proc near
-273F:545D 8B DD mov bx, bp
-273F:545F 8B 07 mov ax, [bx] ; Get hotspot Id
-273F:5461 83 C5 02 add bp, 2
-273F:5464 8B DE mov bx, si
-273F:5466 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5469 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:546C 89 6F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
-273F:546F A3 BA19 mov use_hotspot_id, ax
-273F:5472 A3 BA1B mov active_hotspot_id, ax
-273F:5475 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:5478 72 0F jb character_walking_check
-273F:547A 56 push si
-273F:547B E8 B86C call get_room_resource_pointer2
-273F:547E 5B pop bx
-273F:547F 87 DE xchg bx, si
-273F:5481 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Make sure hotspot
-273F:5484 3B 47 06 cmp ax, [bx+HS_ROOM_NUM] ; is in char's room
-273F:5487 75 D3 jne loc_ret_1090
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:45F1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_walking_check proc near
-273F:5489 57 push di
-273F:548A úBF BC4B mov di, offset hotspot_walkto_list
-273F:548D A1 BA1B mov ax, active_hotspot_id
-273F:5490 loc_1092: ; xref 273F:549D
-273F:5490 úF7 05 FFFF test word ptr [di+WALKTO_HOTSPOT_ID], 0FFFFh ; End of list reached?
-273F:5494 74 4F jz loc_1094 ; Jump if yes
-273F:5496 3B 05 cmp ax, [di+WALKTO_HOTSPOT_ID] ; Found entry for active hotspot?
-273F:5498 74 05 je loc_1093 ; Jump if yes
-273F:549A 83 C7 06 add di, WALKTO_RECORD_SIZE ; Move to next record
-273F:549D EB F1 jmp short loc_1092
-273F:549F loc_1093:
-273F:549F 8B 4D 02 mov cx, [di+WALKTO_X]
-273F:54A2 8B 55 04 mov dx, [di+WALKTO_Y]
-273F:54A5 B0 01 mov al, 1
-273F:54A7 F6 C6 80 test dh, 80h
-273F:54AA 74 47 jz loc_1095 ; Jump if zero
-273F:54AC 5F pop di
-273F:54AD 88 45 27 mov [di+ANIM_WALK_FLAG], al
-273F:54B0 80 E6 7F and dh, 7Fh
-273F:54B3 8B 44 0D mov ax, [si+HS_X]
-273F:54B6 D1 E8 shr ax, 1
-273F:54B8 D1 E8 shr ax, 1
-273F:54BA D1 E8 shr ax, 1 ; ax = player X / 8
-273F:54BC 51 push cx
-273F:54BD D1 E9 shr cx, 1
-273F:54BF D1 E9 shr cx, 1
-273F:54C1 D1 E9 shr cx, 1 ; cx = list[2] / 8
-273F:54C3 2B C1 sub ax, cx ; ax -= cx
-273F:54C5 59 pop cx
-273F:54C6 75 51 jnz character_start_walking ; If NZ, jump to start walking
-273F:54C8 8B 44 0F mov ax, [si+HS_Y]
-273F:54CB 03 44 1B add ax, [si+HS_HEIGHT_COPY]
-273F:54CE D1 E8 shr ax, 1
-273F:54D0 D1 E8 shr ax, 1
-273F:54D2 D1 E8 shr ax, 1
-273F:54D4 2D 0001 sub ax, 1 ; ax = (HS+height)/8 - 1
-273F:54D7 52 push dx
-273F:54D8 D1 EA shr dx, 1
-273F:54DA D1 EA shr dx, 1
-273F:54DC D1 EA shr dx, 1
-273F:54DE 2B C2 sub ax, dx ; ax -= dx
-273F:54E0 5A pop dx
-273F:54E1 75 36 jnz character_start_walking ; If NZ, jump to start walking
-273F:54E3 EB 65 jmp short loc_1100
-
-273F:54E5 loc_1094: ; xref 273F:5494
-273F:54E5 8B 4F 0D mov cx, [bx+HS_X]
-273F:54E8 8B 57 0F mov dx, [bx+HS_Y]
-273F:54EB 03 57 1B add dx, [bx+HS_HEIGHT_COPY]
-273F:54EE 83 EA 04 sub dx, 4
-273F:54F1 B0 00 mov al, 0
-273F:54F3 loc_1095: ; xref 273F:54AA
-273F:54F3 5F pop di
-273F:54F4 88 45 27 mov [di+ANIM_WALK_FLAG], al
-273F:54F7 8B 44 0D mov ax, [si+HS_X]
-273F:54FA 2B C1 sub ax, cx
-273F:54FC 73 02 jnc loc_1096 ; Jump if carry=0
-273F:54FE F7 D8 neg ax
-273F:5500 loc_1096: ; xref 273F:54FC
-273F:5500 3D 0008 cmp ax, 8
-273F:5503 73 14 jae character_start_walking ; If NZ, jump to start walking
-273F:5505 8B 44 0F mov ax, [si+HS_Y]
-273F:5508 03 44 1B add ax, [si+HS_HEIGHT_COPY]
-273F:550B 2D 0001 sub ax, 1
-273F:550E 2B C2 sub ax, dx
-273F:5510 73 02 jnc loc_1097 ; Jump if carry=0
-273F:5512 F7 D8 neg ax
-273F:5514 loc_1097: ; xref 273F:5510
-273F:5514 3D 0013 cmp ax, 13h
-273F:5517 72 31 jb loc_1100 ; Jump if below
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:8541
-
- character_start_walking proc near
-273F:5519 81 FE 6CEF cmp si, offset player_hotspot_rec
-273F:551D 75 17 jne loc_1099 ; Jump if not equal
-273F:551F C7 06 11E1 0002 mov cursor_index, CURSOR_TIME_UP
-273F:5525 C6 06 11DF 00 mov cursor_centroid, 0
-273F:552A 56 push si
-273F:552B 57 push di
-273F:552C 51 push cx
-273F:552D 52 push dx
-273F:552E FF 16 075E call [show_cursor_proc]
-273F:5532 5A pop dx
-273F:5533 59 pop cx
-273F:5534 5F pop di
-273F:5535 5E pop si
-273F:5536 loc_1099: ; xref 273F:551D
-273F:5536 8B DE mov bx,si
-273F:5538 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:553B 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:553E C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:5541 89 54 56 mov [si+HS_DEST_Y], dx
-273F:5544 89 4C 54 mov [si+HS_DEST_X], cx
-273F:5547 33 C0 xor ax, ax
-273F:5549 C3 retn
-273F:554A loc_1100: ; xref 273F:54E3, 5517
-273F:554A 0D 0001 or ax,1
-273F:554D C3 retn
- character_start_walking endp
- character_walking_check endp
- npc_walking_check endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- npc_set_support_offset_conditional proc near
-273F:554E 8B DD mov bx, bp
-273F:5550 8B 07 mov ax, [bx] ; Get sequence offset
-273F:5552 E8 DF E8 call sequence_execute ; Execute it
-273F:5555 74 11 jz loca_5568 ; Skip if zero return
-273F:5557 8B 47 02 mov ax, [bx+2] ; Get new action offset
-273F:555A loc_1101:
-273F:555A ú8B DE mov bx, si
-273F:555C 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:555F 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5562 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax ; Set it action rec
-273F:5565 E9 EC56 jmp action_dispatch
- loca_5568:
-273F:5568 8B C5 mov ax, bp
-273F:556A 05 0004 add ax, 4
-273F:556D EB EB jmp short loc_1101 ; (555A)
- npc_set_support_offset_conditional endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_set_support_offset proc near
-273F:556F 8B DD mov bx,bp
-273F:5571 8B 07 mov ax, [bx]
-273F:5573 8B DE mov bx, si
-273F:5575 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5578 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:557B 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
-273F:557E E9 EC3D jmp action_dispatch
- npc_set_support_offset endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:478E, 5415, 5723, 57BE, 58CC, 591C, 5954
- ; 5968, 5ACE, 5B47, 5BA6, 5C15, 5C7A, 5D32
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_walking_end proc near
-273F:5581 ú81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
-273F:5586 75 05 jne character_walking_end_2
-273F:5588 80 26 9834 02 and cursor_state, 2
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
-
- character_walking_end_2:
-273F:558D ú33 C0 xor ax, ax
-273F:558F 89 45 24 mov [di+ANIM_VOICE_CTR], ax
-273F:5592 88 44 2A mov [si+HS_ACTION_CTR], al
-273F:5595 8B DE mov bx, si
-273F:5597 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:559A 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:559D 89 6F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
-273F:55A0 C3 retn
- character_walking_end endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:44C7, 509D, 7F5D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- characters_impinging_check proc near
-273F:55A1 8B 47 0D mov ax, [bx+HS_X]
-273F:55A4 03 47 19 add ax, [bx+HS_WIDTH_COPY]
-273F:55A7 05 0004 add ax, 4
-273F:55AA 3B 44 0D cmp ax, [si+HS_X]
-273F:55AD 72 44 jb loc_1104 ; Jump if below
-273F:55AF 8B 44 0D mov ax, [si+HS_X]
-273F:55B2 03 44 19 add ax, [si+HS_WIDTH_COPY]
-273F:55B5 05 0004 add ax, 4
-273F:55B8 3B 47 0D cmp ax, [bx+HS_X]
-273F:55BB 72 36 jb loc_1104 ; Jump if below
-
-273F:55BD 8B 44 0F mov ax, [si+HS_Y]
-273F:55C0 03 44 1B add ax, [si+HS_HEIGHT_COPY]
-273F:55C3 2B 44 1D sub ax, [si+HS_Y_CORRECTION]
-273F:55C6 2D 0002 sub ax, 2
-273F:55C9 8B 4F 0F mov cx, [bx+HS_Y]
-273F:55CC 03 4F 1B add cx, [bx+HS_HEIGHT_COPY]
-273F:55CF 83 C1 02 add cx, 2
-273F:55D2 3B C1 cmp ax, cx
-273F:55D4 73 1D jae loc_1104 ; Jump if above or =
-273F:55D6 8B 44 0F mov ax, [si+HS_Y]
-273F:55D9 03 44 1B add ax, [si+HS_HEIGHT_COPY]
-273F:55DC 05 0002 add ax, 2
-273F:55DF 8B 4F 0F mov cx, [bx+HS_Y]
-273F:55E2 03 4F 1B add cx, [bx+HS_HEIGHT_COPY]
-273F:55E5 2B 4F 1D sub cx, [bx+HS_Y_CORRECTION]
-273F:55E8 83 E9 02 sub cx, 2
-273F:55EB 3B C1 cmp ax, cx
-273F:55ED 72 04 jb loc_1104 ; Jump if below
-273F:55EF 0D 0001 or ax,1
-273F:55F2 C3 retn
-273F:55F3 loc_1104: ; xref 273F:55AD, 55BB, 55D4, 55ED
-273F:55F3 33 C0 xor ax,ax ; Zero register
-273F:55F5 C3 retn
- characters_impinging_check endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5419, 572E, 57C9, 5830, 58D0, 5923, 595B
- ; 5AE2, 5B4B, 5BC5, 5C19, 5C82, 5CD0, 5D36
- ; 8A03
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- hotspot_get_action_sequence proc near
-273F:55F6 53 push bx
-273F:55F7 8B 5F 04 mov bx, [bx+HS_ACTIONS_OFFSET]
-273F:55FA 0B DB or bx, bx ; Hotspot have actions?
-273F:55FC 74 1C jz loc_1107 ; Jump if not
-
-273F:55FE 8B 0F mov cx,[bx] ; Get # entries
-273F:5600 83 C3 02 add bx,2 ; Move to first entry
-273F:5603 A1 BB45 mov ax, current_action_num ; Get action number
-273F:5606 0B C9 or cx,cx ; List have any items?
-273F:5608 74 10 jz loc_1107 ; Jump if not
-
-273F:560A locloop_1105:
-273F:560A 3A 07 cmp al, [bx] ; Get action number
-273F:560C 75 07 jne loc_1106 ; Skip if not wanted action
-273F:560E 8B 47 01 mov ax, [bx+1] ; Get sequence offset
-273F:5611 5B pop bx
-273F:5612 0B C0 or ax, ax ; Zero ?
-273F:5614 C3 retn
-273F:5615 loc_1106: ; xref 273F:560C
-273F:5615 83 C3 03 add bx,3
-273F:5618 E2 F0 loop locloop_1105 ; Loop if cx > 0
-
-273F:561A loc_1107: ; xref 273F:55FC, 5608
-273F:561A 5B pop bx
-273F:561B 33 C0 xor ax, ax ; Zero register
-273F:561D C3 retn
- hotspot_get_action_sequence endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_set_blocked_offset_proc proc near
-273F:561E 8B DD mov bx, bp
-273F:5620 8B 07 mov ax, [bx]
-273F:5622 8B 4F 02 mov cx, [bx+2]
-273F:5625 83 C5 04 add bp, 4
-273F:5628 89 4C 5E mov [si+HS_BLOCKED_SUPPORT_OFFSET], cx
-273F:562B C6 44 60 00 mov byte ptr [si+HS_EXIT_CTR], 0
-273F:562F 8B DE mov bx, si
-273F:5631 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5634 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5637 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:563A E9 FF44 jmp character_walking_end
- npc_set_blocked_offset_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- go_to_proc proc near
-273F:563D 8B DD mov bx,bp
-273F:563F 8B 07 mov ax,[bx]
-273F:5641 83 C5 02 add bp,2
-273F:5644 C7 44 5E 0000 mov word ptr [si+HS_BLOCKED_SUPPORT_OFFSET], 0
-273F:5649 C6 44 60 00 mov byte ptr [si+HS_EXIT_CTR], 0
-273F:564D 8B DE mov bx,si
-273F:564F 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5652 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5655 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:5658 E9 FF26 jmp character_walking_end
- go_to_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_set_random_dest proc near
-273F:565B 8B DE mov bx, si
-273F:565D 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5660 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5663 89 6F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:606B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_set_random_dest proc near
-273F:5666 úC6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:5669 C6 45 27 01 mov byte ptr [di+ANIM_WALK_FLAG], 1
-273F:566D 56 push si
-273F:566E 56 push si
-273F:566F 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Get char's room rsc
-273F:5672 E8 B675 call get_room_resource_pointer2
-273F:5675 8A 5C 18 mov bl, [si+ROOM_BOUNDS_INDEX]
-273F:5678 32 FF xor bh, bh
-273F:567A B1 03 mov cl, 3
-273F:567C D3 E3 shl bx, cl
-273F:567E 81 C3 2EB1 add bx, offset room_bounds_table
-273F:5682 B9 0014 mov cx, 20 ; # attempts
-273F:5685 5E pop si
-
-273F:5686 locloop_1109: ; xref 273F:56C3
-273F:5686 51 push cx
-
-; Chooses a random destination for the character within the given rectangle
-273F:5687 E8 EDE2 call random ; Get random value
-273F:568A 8B 4F 02 mov cx, [bx+2]
-273F:568D 2B 0F sub cx, [bx]
-273F:568F F7 E1 mul cx ; dx:ax = reg * ax
-273F:5691 03 17 add dx,[bx]
-273F:5693 89 54 54 mov [si+HS_DEST_X],dx
-273F:5696 52 push dx
-273F:5697 E8 EDD2 call random
-273F:569A 8B 4F 06 mov cx, [bx+6]
-273F:569D 2B 4F 04 sub cx, [bx+4]
-273F:56A0 F7 E1 mul cx ; dx:ax = reg * ax
-273F:56A2 03 57 04 add dx, [bx+4]
-273F:56A5 89 54 56 mov [si+HS_DEST_Y], dx
-273F:56A8 8B C2 mov ax, dx
-273F:56AA 5A pop dx
-273F:56AB B9 0003 mov cx,3
-273F:56AE E8 001D call character_check_dest_occupied
-273F:56B1 0B C0 or ax, ax ; Occupied?
-273F:56B3 75 0D jnz loc_1110 ; Jump if yes
-273F:56B5 05 0008 add ax, 8
-273F:56B8 B9 0003 mov cx, 3
-273F:56BB E8 0010 call character_check_dest_occupied
-273F:56BE 0B C0 or ax, ax ; Occupied
-273F:56C0 74 07 jz loc_1111 ; Jump if not
-273F:56C2 loc_1110:
-273F:56C2 59 pop cx ; Loop to choose another
-273F:56C3 E2 C1 loop locloop_1109 ; random destination
-
-273F:56C5 5B pop bx
-273F:56C6 87 DE xchg bx,si
-273F:56C8 C3 retn
-273F:56C9 loc_1111: ; xref 273F:56C0
-273F:56C9 59 pop cx
-273F:56CA 5B pop bx
-273F:56CB 87 DE xchg bx,si
-273F:56CD C3 retn
- character_set_random_dest endp
- npc_set_random_dest endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:56AE, 56BB
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_check_dest_occupied proc near
-273F:56CE 53 push bx
-273F:56CF 51 push cx
-273F:56D0 E8 ECC1 call pathfind_get_cell
-273F:56D3 59 pop cx
-
-273F:56D4 locloop_1112: ; xref 273F:56E1
-273F:56D4 85 07 test ax,[bx] ; Is the dest occupied?
-273F:56D6 75 0F jnz loc_1114 ; Jump if yes
-273F:56D8 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:56DA 73 05 jnc loc_1113 ; Jump if carry=0
-273F:56DC 83 C3 01 add bx,1
-273F:56DF B0 80 mov al,80h
-273F:56E1 loc_1113: ; xref 273F:56DA
-273F:56E1 E2 F1 loop locloop_1112 ; Loop if cx > 0
-
-273F:56E3 5B pop bx
-273F:56E4 33 C0 xor ax,ax ; Zero register
-273F:56E6 C3 retn
-273F:56E7 loc_1114: ; xref 273F:56D6
-273F:56E7 5B pop bx
-273F:56E8 B0 01 mov al,1
-273F:56EA C3 retn
- character_check_dest_occupied endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- open_proc proc near
-273F:56EB 8B DD mov bx,bp
-273F:56ED 8B 07 mov ax,[bx]
-273F:56EF 83 C5 02 add bp,2
-273F:56F2 A3 BA19 mov use_hotspot_id, ax
-273F:56F5 A3 BA1B mov active_hotspot_id, ax
-273F:56F8 56 push si
-273F:56F9 úBE 4CB0 mov si, offset exit_hotspots_list
-273F:56FC E8 EE94 call is_roomexit_hotspot
-273F:56FF 75 0E jnz loc_1115 ; Not a valid door
-273F:5701 53 push bx
-273F:5702 A1 BA19 mov ax, use_hotspot_id
-273F:5705 E8 1AE6 call room_exit_hs_get_pointer
-273F:5708 5B pop bx
-273F:5709 F6 44 0C FF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh
-273F:570D 74 58 jz loc_1120 ; Jump if exit blocked (closed)
-273F:570F loc_1115:
-273F:570F 5E pop si
-273F:5710 A1 BA19 mov ax, use_hotspot_id
-273F:5713 E8 EE91 call hotspot_action_precheck
-273F:5716 0B C0 or ax, ax ; Execute?
-273F:5718 74 08 jz loc_1116 ; Jump if yes
-273F:571A 3D 0003 cmp ax, 3 ; Initial?
-273F:571D 74 47 je loc_ret_1119 ; Exit if not
-273F:571F E9 FE5F jmp character_walking_end
-273F:5722 loc_1116: ; xref 273F:5718
-273F:5722 53 push bx
-273F:5723 E8 FE5B call character_walking_end
-273F:5726 5B pop bx
-273F:5727 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:572B E8 EFC0 call character_face_hotspot
-273F:572E E8 FEC5 call hotspot_get_action_sequence
-273F:5731 79 03 jns loc_1117 ; Jump if not sign
-273F:5733 E9 0C7B jmp display_message_dialog_3
-273F:5736 loc_1117: ; xref 273F:5731
-273F:5736 74 0A jz loc_1118 ; Jump if zero
-273F:5738 E8 E6F9 call sequence_execute
-273F:573B 3D 0001 cmp ax,1
-273F:573E 74 26 je loc_ret_1119 ; Jump if equal
-273F:5740 73 2F jnc loc_1121 ; Jump if carry=0
-273F:5742 loc_1118: ; xref 273F:5736
-273F:5742 A1 BA19 mov ax, use_hotspot_id
-273F:5745 56 push si
-273F:5746 E8 1AA5 call room_exit_hs_get_pointer
-273F:5749 5B pop bx
-273F:574A 87 F3 xchg si,bx
-273F:574C F6 47 0C FF test byte ptr [bx+REHS_EXIT_BLOCKED], 0FFh
-273F:5750 74 14 jz loc_ret_1119 ; Jump if zero
-273F:5752 C6 47 0C 00 mov byte ptr [bx+REHS_EXIT_BLOCKED], 0
-273F:5756 81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
-273F:575B 74 09 je loc_ret_1119 ; Jump if equal
-273F:575D C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_3
-273F:5761 C7 44 42 0004 mov word ptr [si+HS_DELAY_CTR], 4
-
-273F:5766 loc_ret_1119: ; xref 273F:571D, 573E, 5750, 575B
-273F:5766 C3 retn
-273F:5767 loc_1120: ; xref 273F:570D
-273F:5767 5E pop si
-273F:5768 B8 0004 mov ax,4
-273F:576B E8 0C43 call display_message_dialog_3
-273F:576E E9 FE10 jmp character_walking_end
-273F:5771 loc_1121: ; xref 273F:5740
-273F:5771 F6 44 60 FF test byte ptr [si+HS_EXIT_CTR],0FFh
-273F:5775 74 04 jz loc_1122 ; Jump if zero
-273F:5777 C6 44 60 04 mov byte ptr [si+HS_EXIT_CTR], 4
-273F:577B loc_1122: ; xref 273F:5775
-273F:577B E9 0C33 jmp display_message_dialog_3
- open_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- close_proc proc near
-273F:577E 8B DD mov bx, bp
-273F:5780 8B07 mov ax, [bx]
-273F:5782 83C502 add bp, 2
-273F:5785 A319BA mov use_hotspot_id, ax
-273F:5788 A31BBA mov active_hotspot_id, ax
-273F:578B 56 push si
-273F:578C BEB04C mov si, offset exit_hotspots_list
-273F:578F E801EE call is_roomexit_hotspot
-273F:5792 7516 jnz close_proc_2
-273F:5794 A119BA mov ax, use_hotspot_id
-273F:5797 E8541A call room_exit_hs_get_pointer
-273F:579A F6440CFF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh
-273F:579E 740A jz close_proc_2
-273F:57A0 5E pop si
-273F:57A1 B80300 mov ax, 3
-273F:57A4 E80A0C call display_message_dialog_3
-273F:57A7 E9D7FD jmp character_walking_end
-273F:57AA A119BA close_proc_2: mov ax, use_hotspot_id
-273F:57AD 5E pop si
-273F:57AE E8F6ED call hotspot_action_precheck
-273F:57B1 0BC0 or ax, ax
-273F:57B3 7408 jz loc_1123
-273F:57B5 3D0300 cmp ax, 3
-273F:57B8 7448 jz loc_ret_1127
-273F:57BA E9C4FD jmp character_walking_end
-273F:57BD loc_1123:
-273F:57BD 53 push bx
-273F:57BE E8 FDC0 call character_walking_end
-273F:57C1 5B pop bx
-273F:57C2 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:57C6 E8 EF25 call character_face_hotspot
-273F:57C9 E8 FE2A call hotspot_get_action_sequence
-273F:57CC 79 03 jns loc_1125 ; Jump if not sign
-273F:57CE loc_1124: ; xref 273F:57D6
-273F:57CE E9 0BE0 jmp display_message_dialog_3
-273F:57D1 loc_1125: ; xref 273F:57CC
-273F:57D1 74 05 jz loc_1126 ; Jump if zero
-273F:57D3 E8 E65E call sequence_execute
-273F:57D6 75 F6 jnz loc_1124 ; Jump if not zero
-273F:57D8 loc_1126: ; xref 273F:57D1
-273F:57D8 56 push si
-273F:57D9 A1 BA19 mov ax, use_hotspot_id
-273F:57DC E8 1A0F call room_exit_hs_get_pointer
-273F:57DF 5B pop bx
-273F:57E0 87 DE xchg bx,si
-273F:57E2 F6 47 0C FF test byte ptr [bx+REHS_EXIT_BLOCKED], 0FFh
-273F:57E6 75 1A jnz loc_ret_1127 ; Jump if not zero
-273F:57E8 8B EB mov bp, bx
-
-273F:57EA 8B 5F 0D mov bx, [bx+REHS_HOTSPOT1_OFFSET]
-273F:57ED E8 1A7B call door_close_check
-273F:57F0 74 11 jz loc_1128 ; Jump if can't close
-273F:57F2 8B DD mov bx, bp
-273F:57F4 8B 5F 0F mov bx, [bx+REHS_HOTSPOT2_OFFSET]
-273F:57F7 E8 1A71 call door_close_check
-273F:57FA 74 07 jz loc_1128 ; Jump if can't close
-273F:57FC 8B DD mov bx,bp
-273F:57FE C6 47 0C 01 mov byte ptr [bx+REHS_EXIT_BLOCKED], 1
-
-273F:5802 loc_ret_1127: ; xref 273F:57E6, 581F
-273F:5802 C3 retn
-273F:5803 loc_1128: ; xref 273F:57F0, 57FA
-273F:5803 B8 0002 mov ax,2
-273F:5806 E9 0BA8 jmp display_message_dialog_3
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- tell_proc proc near
-273F:5809 8B DD mov bx, bp
-273F:580B 8B 07 mov ax, [bx] ; Talked to Hotspot Id
-273F:580D 83 C5 02 add bp, 2
-273F:5810 A3 BA19 mov use_hotspot_id, ax
-273F:5813 A3 BA1B mov active_hotspot_id, ax
-273F:5816 E8 ED8E call hotspot_action_precheck
-273F:5819 0B C0 or ax,ax ; Zero ?
-273F:581B 74 06 jz loc_1129 ; Jump if zero
-273F:581D 3C 03 cmp al,3
-273F:581F 74 E1 je loc_ret_1127 ; Jump if equal
-273F:5821 EB 68 jmp short loc_1134 ; (588B)
-273F:5823 loc_1129: ; xref 273F:581B
-273F:5823 8B 0E BA19 mov cx, use_hotspot_id
-273F:5827 B8 0001 mov ax, 1
-273F:582A BA 007C mov dx, 7Ch
-273F:582D E8 0922 call talk_converse_2
-273F:5830 E8 FDC3 call hotspot_get_action_sequence
-273F:5833 79 03 jns loc_1130
-273F:5835 E9 0B79 jmp display_message_dialog_3
-273F:5838 loc_1130: ; xref 273F:5833
-273F:5838 E8 E5F9 call sequence_execute
-273F:583B 75 4E jnz loc_1134 ; Jump if not zero
-273F:583D 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; si/di=Player, bx=Ratpouch
-273F:5840 89 47 4E mov [bx+HS_START_ROOM_NUM], ax
-273F:5843 C7 47 61 0005 mov word ptr [bx+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:5848 C6 47 4D 00 mov byte ptr [bx+HS_V4D], 0
-273F:584C 8B 4F 5C mov cx, [bx+HS_SUPPORT_TABLE] ; Get support table to use
-273F:584F 89 4F 69 mov [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE+CURRENT_ACTION_SUPPORT_TABLE], cx
-273F:5852 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:5855 89 47 6B mov [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE+CURRENT_ACTION_ROOM_NUM], ax
-273F:5858 C6 47 68 02 mov byte ptr [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE], CHAR_ACTION_DISPATCH_ACTION
-273F:585C 56 push si
-273F:585D 57 push di
-273F:585E 8B F5 mov si, bp ; si => instruction data
-273F:5860 8B F9 mov di, cx ; cx => start of support table buffer
-273F:5862 1E push ds
-273F:5863 07 pop es
-273F:5864 loc_1131:
-273F:5864 úAD lodsw ; Get next word
-273F:5865 8B D0 mov dx,ax
-273F:5867 loc_1132:
-273F:5867 AB stosw ; Store in output buffer
-273F:5868 0B C0 or ax, ax ; Zero ?
-273F:586A 74 11 jz loc_1133 ; Jump if zero
-273F:586C AD lodsw ; String [si] to ax
-273F:586D 3D 7D00 cmp ax, 7D00h
-273F:5870 75 F5 jne loc_1132 ; Jump if not equal
-273F:5872 83 FA 17 cmp dx, 17h
-273F:5875 75 ED jne loc_1131 ; Jump if not equal
-273F:5877 B8 0020 mov ax, 20h
-273F:587A AB stosw ; Store ax to es:[di]
-273F:587B EB E7 jmp short loc_1131 ; (5864)
-273F:587D loc_1133: ; xref 273F:586A
-273F:587D 26: C7 45 FE 0020 mov word ptr es:[di-2], 20h
-273F:5883 AB stosw ; Store ax to es:[di]
-273F:5884 8B EE mov bp, si
-273F:5886 83 ED 02 sub bp, 2
-273F:5889 5F pop di
-273F:588A 5E pop si
-273F:588B loc_1134:
-273F:588B 8B DD mov bx, bp
-273F:588D C7 07 0000 mov word ptr [bx], 0
-273F:5891 E9 FCF9 jmp character_walking_end_2
- tell_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; xi=player hotspot, di=player anim slot, bp=??
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- look_through_proc proc near
-273F:5894 8B DD mov bx,bp
-273F:5896 8B 07 mov ax,[bx]
-273F:5898 83 C5 02 add bp,2
-273F:589B A3 BA19 mov use_hotspot_id, ax
-273F:589E A3 BA1B mov active_hotspot_id, ax
-273F:58A1 56 push si
-273F:58A2 E8 B445 call get_room_resource_pointer2 ; Get hotspot ptr
-273F:58A5 5B pop bx
-273F:58A6 87 DE xchg bx,si ; si=player, bx=hotspot
-273F:58A8 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
-273F:58AB 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID] ; In player's inventory?
-273F:58AE 74 1B je loc_1136 ; If yes then jump
-273F:58B0 E8 ED24 call hotspot_action_precheck_2
-273F:58B3 0B C0 or ax, ax ; Zero ?
-273F:58B5 74 08 jz loc_1135 ; Jump if zero
-273F:58B7 3D 0003 cmp ax,3
-273F:58BA 74 3E je loc_ret_1139 ; Jump if equal
-273F:58BC E9 FCC2 jmp character_walking_end
-273F:58BF loc_1135: ; xref 273F:58B5
-273F:58BF C6 44 2A 00 mov byte ptr [si+2Ah],0
-273F:58C3 E8 EE28 call character_face_hotspot
-273F:58C6 55 push bp
-273F:58C7 E8 EA9C call character_update_movement
-273F:58CA 5D pop bp
-273F:58CB loc_1136:
-273F:58CB 53 push bx
-273F:58CC E8 FCB2 call character_walking_end
-273F:58CF 5B pop bx
-273F:58D0 E8 FD23 call hotspot_get_action_sequence
-273F:58D3 79 03 jns loc_1137 ; Jump if not sign
-273F:58D5 E9 0AD9 jmp display_message_dialog_3
-273F:58D8 loc_1137: ; xref 273F:58D3
-273F:58D8 74 13 jz loc_ret_1138 ; Jump if zero
-273F:58DA E8 E557 call sequence_execute
-273F:58DD 74 0E jz loc_ret_1138 ; Jump if zero
-273F:58DF 3D 002A cmp ax,2Ah
-273F:58E2 75 09 jne loc_ret_1138 ; Jump if not equal
-273F:58E4 C7 44 42 0050 mov word ptr [si+HS_DELAY_CTR], 80
-273F:58E9 C6 44 44 02 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_IDLE
-
-273F:58ED loc_ret_1138: ; xref 273F:58D8, 58DD, 58E2
-273F:58ED C3 retn
- look_through_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Sets up things for remotely viewing a room - storing the room to
- ; return to, and disabling the tick proc for the player
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_room_remote_view_setup proc near
- assume ds:seg_code
-273F:58EE A1 9832 mov ax, room_number
-273F:58F1 A3 BA25 mov old_room_number, ax
-273F:58F4 C7 06 B15F 58FB mov slot0_tick_proc, offset loc_ret_1140
-
-273F:58FA loc_ret_1139: ; xref 273F:58BA
-273F:58FA C3 retn
- seq_room_remote_view_setup endp
-
-
-
-273F:58FB loc_ret_1140: ; xref 273F:5913, 594E, 5963
-273F:58FB C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; xi=player hotspot, di=player anim slot, bp=??
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- operate_proc proc near
-273F:58FC 8B DD mov bx,bp
-273F:58FE 8B 07 mov ax,[bx]
-273F:5900 83 C5 02 add bp,2
-273F:5903 A3 BA19 mov use_hotspot_id, ax
-273F:5906 A3 BA1B mov active_hotspot_id, ax
-273F:5909 E8 EC9B call hotspot_action_precheck
-273F:590C 0B C0 or ax,ax ; Zero ?
-273F:590E 74 08 jz loc_1141 ; Jump if zero
-273F:5910 3D 0003 cmp ax,3
-273F:5913 74 E6 je loc_ret_1140 ; Jump if equal
-273F:5915 E9 FC69 jmp character_walking_end
-273F:5918 loc_1141: ; xref 273F:590E
-273F:5918 88 44 2A mov [si+HS_ACTION_CTR], al
-273F:591B 53 push bx
-273F:591C E8 FC62 call character_walking_end
-273F:591F 5B pop bx
-273F:5920 E8 EDCB call character_face_hotspot
-273F:5923 E8 FCD0 call hotspot_get_action_sequence
-273F:5926 79 03 jns loc_1142 ; Jump if not sign
-273F:5928 E9 0A86 jmp display_message_dialog_3
-273F:592B loc_1142: ; xref 273F:5926
-273F:592B E8 E506 call sequence_execute
-273F:592E 3D 0002 cmp ax,2
-273F:5931 72 03 jb loc_ret_1143 ; Jump if below
-273F:5933 E9 0A7B jmp display_message_dialog_3
-
-273F:5936 loc_ret_1143: ; xref 273F:5931
-273F:5936 C3 retn
- operate_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- lock_unlock_proc proc near
-273F:5937 8B DD mov bx,bp
-273F:5939 8B 07 mov ax,[bx]
-273F:593B 83 C5 02 add bp,2
-273F:593E A3 BA19 mov use_hotspot_id, ax
-273F:5941 A3 BA1B mov active_hotspot_id, ax
-273F:5944 E8 EC60 call hotspot_action_precheck
-273F:5947 0B C0 or ax,ax ; Zero ?
-273F:5949 74 08 jz loc_1144 ; Jump if zero
-273F:594B 3D 0003 cmp ax,3
-273F:594E 74 AB je loc_ret_1140 ; Jump if equal
-273F:5950 E9 FC2E jmp character_walking_end
-273F:5953 loc_1144: ; xref 273F:5949
-273F:5953 53 push bx
-273F:5954 E8 FC2A call character_walking_end
-273F:5957 5B pop bx
-273F:5958 E8 ED93 call character_face_hotspot
-273F:595B E8 FC98 call hotspot_get_action_sequence
-273F:595E 79 03 jns loc_1145 ; Jump if not sign
-273F:5960 E9 0A4E jmp display_message_dialog_3
-273F:5963 loc_1145: ; xref 273F:595E
-273F:5963 74 96 jz loc_ret_1140 ; Jump if zero
-273F:5965 E9 E4CC jmp sequence_execute
- lock_unlock_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:56AE, 56BB
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- look_proc proc near
-
-273F:5968 E8 FC16 call character_walking_end
-273F:596B 8B 44 06 mov ax, [si+6]
-273F:596E E8 B3B0 call get_room_resource_pointer4
-273F:5971 8B 5C 04 mov bx, [si+RH_DESC_ID]
-273F:5974 E9 2F45 jmp display_dialog
-
- look_proc endp
-
-273F:5977 00 data_359 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- status_proc proc near
-
-31E4:5978 E8 06 FC call character_walking_end
-31E4:597B 80 0E 11D0 01 or menubar_state, 1
-31E4:5980 FF 16 075E call [show_cursor_proc]
-31E4:5984 B0 09 mov al, 9
-31E4:5986 B1 16 mov cl, 16
-31E4:5988 B2 03 mov dl, 3
-31E4:598A F7 06 BC49 FFFF test num_groats, 0ffffh
-31E4:5990 74 03 jz status_loc_2
-31E4:5992 80 C2 02 add dl, 2
- status_loc_2:
-31E4:5995 F6 06 9835 FF test num_inventory_items, 0ffh
-31E4:599A 74 07 jz loc_1146
-31E4:599C 02 16 9835 mov dl, num_inventory_items
-31E4:59A0 80 EA 01 sub dl, 1
-
-273F:59A3 loc_1146:
-273F:59A3 B3 18 mov bl,18h
-273F:59A5 2A DA sub bl,dl
-273F:59A7 D0 EB shr bl,1 ; Shift w/zeros fill
-273F:59A9 2E: 88 1E 5977 mov cs:data_359,bl ; (273F:5977=0)
-273F:59AE BD 0001 mov bp,1
-273F:59B1 FF 16 077A call [draw_dialog_proc]
-273F:59B5 A1 9832 mov ax, room_number ; Get the current room's
-273F:59B8 E8 B366 call get_room_resource_pointer3 ; short name
-273F:59BB 8B 44 02 mov ax,[si+2]
-273F:59BE BF 4B43 mov di, offset hotspot_name
-273F:59C1 E8 2376 call decode_string
-273F:59C4 2E: A0 5977 mov al, cs:data_359
-273F:59C8 04 01 add al,1
-273F:59CA 32 E4 xor ah,ah ; Zero register
-273F:59CC úBB 000A mov bx, 10
-273F:59CF úBE 4B43 mov si, offset hotspot_name
-273F:59D2 E8 C210 call sub_52
-
-273F:59D5 C7 06 4B19 6F6E mov data_789,6F6Eh ; (31E4:4B19=6F6Eh)
-273F:59DB F6 06 9835 FF test num_inventory_items, 0FFh
-273F:59E0 74 06 jz loc_1147 ; Jump if zero
-273F:59E2 C7 06 4B19 003A mov data_789,3Ah ; (31E4:4B19=6F6Eh)
-273F:59E8 loc_1147: ; xref 273F:59E0
-273F:59E8 2E: A0 5977 mov al,cs:data_359 ; (273F:5977=0)
-273F:59EC 04 03 add al,3
-273F:59EE 32 E4 xor ah,ah ; Zero register
-273F:59F0 úBB 000A mov bx, 10
-273F:59F3 úBE 4B08 mov si, offset carrying_str
-273F:59F6 E8 C1EC call sub_52 ; (1BE5)
-
-273F:59F9 2E: 8A 0E 5977 mov cl,cs:data_359 ; (273F:5977=0)
-273F:59FE 80 C1 03 add cl,3
-273F:5A01 32 ED xor ch,ch ; Zero register
-273F:5A03 F6 06 9835 FF test num_inventory_items, 0FFh
-273F:5A08 74 34 jz loc_1151 ; Jump if zero
-
-273F:5A0A úBE 623E mov si, offset hotspot_table_3
-273F:5A0D loc_1148:
-273F:5A0D ú8B 3C mov di,[si] ; Get hotspot offset
-273F:5A0F 83 FF FF cmp di,0FFFFh ; End of sublist?
-273F:5A12 74 27 je loc_1150 ; If yes, then jump
-273F:5A14 81 7D 06 03E8 cmp word ptr [di+HS_ROOM_NUM], PLAYER_HOTSPOT_ID ; In player's inventory?
-273F:5A19 75 1B jne loc_1149 ; If not, move to next
-273F:5A1B 56 push si
-273F:5A1C 8B 44 02 mov ax, [si+HSH_NAME] ; Get hotspot name
-273F:5A1F BF 4B43 mov di, offset hotspot_name
-273F:5A22 51 push cx
-273F:5A23 E8 2314 call decode_string
-273F:5A26 58 pop ax
-273F:5A27 50 push ax
-273F:5A28 úBB 0016 mov bx,16h ; (273F:0016=0EBh)
-273F:5A2B úBE 4B43 mov si, offset hotspot_name
-273F:5A2E E8 C1B4 call sub_52 ; (1BE5)
-273F:5A31 59 pop cx
-273F:5A32 83 C1 01 add cx,1
-273F:5A35 5E pop si
-273F:5A36 loc_1149: ; xref 273F:5A19
-273F:5A36 83 C6 09 add si,9
-273F:5A39 EB D2 jmp short loc_1148 ; (5A0D)
-273F:5A3B loc_1150: ; xref 273F:5A12
-273F:5A3B 83 E9 01 sub cx,1
-273F:5A3E loc_1151: ; xref 273F:5A08
-273F:5A3E A1 BC49 mov ax, num_groats
-273F:5A41 0B C0 or ax,ax ; Zero ?
-273F:5A43 74 26 jz loc_1153 ; Jump if zero
-273F:5A45 04 30 add al,30h ; '0'
-273F:5A47 A2 4B2B mov s_num_groats, al ; Fill out # groats
-273F:5A4A C7 06 4B32 0073 mov s_groats_plural, 's' ; Add in a plural 's'
-
-273F:5A50 83 3E BC49 01 cmp num_groats, 1 ; Is a plural necessary?
-273F:5A55 75 06 jne loc_1152 ; Yes, so skip removal
-273F:5A57 C7 06 4B32 0000 mov s_groats_plural, 0 ; Remove plural 's'
-273F:5A5D loc_1152:
-273F:5A5D 8B C1 mov ax,cx
-273F:5A5F 05 0002 add ax,2
-273F:5A62 úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:5A65 úBE 4B22 mov si, offset money_str
-273F:5A68 E8 C17A call sub_52 ; (1BE5)
-273F:5A6B loc_1153: ; xref 273F:5A43
-273F:5A6B FF 16 0744 call word ptr [show_screen_proc]
-273F:5A6F E8 C519 call mouse_wait ; (1F8B)
-273F:5A72 E8 C521 call pause_for_input ; (1F96)
-273F:5A75 E8 C513 call mouse_wait ; (1F8B)
-273F:5A78 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:5A7D FF 16 075E call [show_cursor_proc]
-273F:5A81 C3 retn
-
- status_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- return_proc proc near
-273F:5A82 8B DE mov bx, si
-273F:5A84 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5A87 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5A8A 8B 44 4E mov ax, [si+HS_START_ROOM_NUM]
-273F:5A8D 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:5A90 E9 FAEE jmp character_walking_end
- return_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- use_proc proc near
-273F:5A93 8B DD mov bx,bp
-273F:5A95 8B 07 mov ax,[bx]
-273F:5A97 A3 BA19 mov use_hotspot_id, ax
-273F:5A9A 8B 47 02 mov ax,[bx+2]
-273F:5A9D A3 BA1B mov active_hotspot_id, ax
-273F:5AA0 83 C5 04 add bp,4
-273F:5AA3 56 push si
-273F:5AA4 A1 BA19 mov ax, use_hotspot_id
-273F:5AA7 E8 B240 call get_room_resource_pointer2
-273F:5AAA 5B pop bx
-273F:5AAB 87 DE xchg bx,si ; bx=item to use, si=hotspot
-273F:5AAD 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
-273F:5AB0 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID]; Item in char's inventory?
-273F:5AB3 75 12 jne loc_1155 ; Jump if not equal
-273F:5AB5 A1 BA1B mov ax, active_hotspot_id
-273F:5AB8 E8 EAEC call hotspot_action_precheck
-273F:5ABB 0B C0 or ax,ax ; Zero ?
-273F:5ABD 74 0B jz loc_1156 ; Jump if zero
-273F:5ABF 3C 03 cmp al,3
-273F:5AC1 74 03 je loc_ret_1154 ; Jump if equal
-273F:5AC3 E9 FABB jmp character_walking_end
-
-273F:5AC6 loc_ret_1154: ; xref 273F:5AC1, 5AF5, 5B3A
-273F:5AC6 C3 retn
-273F:5AC7 loc_1155: ; xref 273F:5AB3
-273F:5AC7 E9 0242 jmp loc_1187 ; (5D0C)
-273F:5ACA loc_1156: ; xref 273F:5ABD
-273F:5ACA E8 EC21 call character_face_hotspot
-273F:5ACD 53 push bx
-273F:5ACE E8 FAB0 call character_walking_end
-273F:5AD1 5B pop bx
-273F:5AD2 81 7D 1B 03E9 cmp word ptr [di+ANIM_HOTSPOT_ID], RATPOUCH_HOTSPOT_ID
-273F:5AD7 75 09 jne loc_1157 ; Jump if not equal
-273F:5AD9 C6 44 FF 28 mov byte ptr [si-1], 28h ; '('
-273F:5ADD C7 44 1F 0050 mov word ptr [si+HS_FRAME_CTR], 50h
-273F:5AE2 loc_1157: ; xref 273F:5AD7
-273F:5AE2 E8 FB11 call hotspot_get_action_sequence
-273F:5AE5 79 03 jns loc_1158 ; Jump if not sign
-273F:5AE7 E9 08C7 jmp display_message_dialog_3
-273F:5AEA loc_1158: ; xref 273F:5AE5
-273F:5AEA 75 06 jnz loc_1159 ; Jump if not zero
-273F:5AEC B8 0011 mov ax,11h
-273F:5AEF E9 08BF jmp display_message_dialog_3
-273F:5AF2 loc_1159: ; xref 273F:5AEA
-273F:5AF2 E8 E33F call sequence_execute
-273F:5AF5 74 CF jz loc_ret_1154 ; Jump if zero
-273F:5AF7 E9 08B7 jmp display_message_dialog_3
- use_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- look_at_proc proc near
-273F:5AFA 8B DD mov bx,bp
-273F:5AFC 8B 07 mov ax,[bx]
-273F:5AFE 83 C5 02 add bp,2
-273F:5B01 A3 BA19 mov use_hotspot_id, ax
-273F:5B04 A3 BA1B mov active_hotspot_id, ax
-273F:5B07 56 push si
-273F:5B08 E8 B1DF call get_room_resource_pointer2
-273F:5B0B 5B pop bx
-273F:5B0C 87 DE xchg bx,si
-273F:5B0E 81 3E BA19 0408 cmp use_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
-273F:5B14 72 29 jb loc_1163 ; Jump if below
-273F:5B16 56 push si
-273F:5B17 úBE 4AD0 mov si, offset lookat_hotspot_list
-273F:5B1A 8B 0E BA19 mov cx, use_hotspot_id
-273F:5B1E loc_1160:
-273F:5B1E úAD lodsw ; Get next hotspot Id
-273F:5B1F 0B C0 or ax,ax ; Reached end of list?
-273F:5B21 74 09 jz loc_1162 ; Jump if yes
-273F:5B23 3B C1 cmp ax,cx ; Found hotspot?
-273F:5B25 74 02 je loc_1161 ; Jump if yes
-273F:5B27 EB F5 jmp short loc_1160 ; Keep scanning
-273F:5B29 loc_1161:
-273F:5B29 5E pop si
-273F:5B2A EB 13 jmp short loc_1163
-273F:5B2C loc_1162:
-273F:5B2C 5E pop si ; Hotspot not found
-273F:5B2D A1 BA19 mov ax, use_hotspot_id
-273F:5B30 E8 EA74 call hotspot_action_precheck
-273F:5B33 0B C0 or ax,ax ; Zero ?
-273F:5B35 74 08 jz loc_1163 ; Jump if zero
-273F:5B37 3D 0003 cmp ax,3
-273F:5B3A 74 8A je loc_ret_1154 ; Jump if equal
-273F:5B3C E9 FA42 jmp character_walking_end
-273F:5B3F loc_1163: ; xref 273F:5B14, 5B2A, 5B35
-273F:5B3F C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:5B43 E8 EBA8 call character_face_hotspot
-273F:5B46 53 push bx
-273F:5B47 E8 FA37 call character_walking_end
-273F:5B4A 5B pop bx
-273F:5B4B E8 FAA8 call hotspot_get_action_sequence
-273F:5B4E 79 03 jns loc_1164 ; Jump if not sign
-273F:5B50 E9 085E jmp display_message_dialog_3
-273F:5B53 loc_1164: ; xref 273F:5B4E
-273F:5B53 74 05 jz loc_1165 ; Jump if zero
-273F:5B55 E8 E2DC call sequence_execute
-273F:5B58 75 16 jnz loc_ret_1167 ; Jump if not zero
-273F:5B5A loc_1165: ; xref 273F:5B53, 5C1E
-273F:5B5A úA1 BA1B mov ax, active_hotspot_id
-273F:5B5D E8 B1C1 call get_room_resource_pointer3
-273F:5B60 8B 5C 06 mov bx, [si+HSH_DESC_2]
-273F:5B63 0B DB or bx, bx ; Zero ?
-273F:5B65 75 03 jnz loc_1166 ; Jump if not zero
-273F:5B67 8B 5C 04 mov bx, [si+HSH_DESC]
-273F:5B6A loc_1166:
-273F:5B6A 80 E7 1F and bh, 1Fh
-273F:5B6D E9 2D4C jmp display_dialog
-273F:5B70 loc_ret_1167: ; xref 273F:5B58, 5BA0, 5BCD, 5BDD
-273F:5B70 C3 retn
- look_at_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- give_proc proc near
-273F:5B71 8B DD mov bx,bp
-273F:5B73 8B 47 02 mov ax, [bx+2]
-273F:5B76 A3 BA1B mov active_hotspot_id, ax
-273F:5B79 8B 07 mov ax, [bx]
-273F:5B7B A3 BA19 mov use_hotspot_id, ax
-273F:5B7E 83 C5 04 add bp, 4
-273F:5B81 56 push si
-273F:5B82 E8 B165 call get_room_resource_pointer2
-273F:5B85 5B pop bx
-273F:5B86 87 DE xchg bx,si
-273F:5B88 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
-273F:5B8B 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID]; Is item in char's inventory?
-273F:5B8E 74 03 je loc_1168 ; Jump if equal
-273F:5B90 E9 0179 jmp loc_1187 ; (5D0C)
-273F:5B93 loc_1168: ; xref 273F:5B8E
-273F:5B93 A1 BA1B mov ax, active_hotspot_id
-273F:5B96 E8 EA0E call hotspot_action_precheck
-273F:5B99 0B C0 or ax,ax ; Zero ?
-273F:5B9B 74 08 jz loc_1169 ; Jump if zero
-273F:5B9D 3D 0003 cmp ax,3
-273F:5BA0 74 CE je loc_ret_1167 ; Jump if equal
-273F:5BA2 E9 F9DC jmp character_walking_end
-273F:5BA5 loc_1169: ; xref 273F:5B9B
-273F:5BA5 53 push bx
-273F:5BA6 E8 F9D8 call character_walking_end
-273F:5BA9 5B pop bx
-273F:5BAA E8 EB41 call character_face_hotspot
-273F:5BAD 81 3E BA1B 0412 cmp active_hotspot_id, 412h
-273F:5BB3 75 08 jne loc_1170 ; Jump if not equal
-273F:5BB5 81 3E BA19 2710 cmp use_hotspot_id, BOTTLE_HOTSPOT_ID
-273F:5BBB 74 08 je loc_1171 ; Jump if equal
-273F:5BBD loc_1170: ; xref 273F:5BB3
-273F:5BBD 53 push bx
-273F:5BBE BB 0007 mov bx,7
-273F:5BC1 E8 07DE call display_message_dialog_2
-273F:5BC4 5B pop bx
-273F:5BC5 loc_1171: ; xref 273F:5BBB
-273F:5BC5 E8 FA2E call hotspot_get_action_sequence
-273F:5BC8 79 03 jns loc_1172 ; Jump if not sign
-273F:5BCA E9 07E4 jmp display_message_dialog_3
-273F:5BCD loc_1172: ; xref 273F:5BC8
-273F:5BCD 74 A1 jz loc_ret_1167 ; Jump if zero
-273F:5BCF E8 E262 call sequence_execute
-273F:5BD2 3D 03E7 cmp ax, NOONE_HOTSPOT_ID
-273F:5BD5 75 03 jne loc_1173 ; Jump if not equal
-273F:5BD7 E9 2DD6 jmp loc_1705 ; (89B0)
-273F:5BDA loc_1173: ; xref 273F:5BD5
-273F:5BDA 3D 0001 cmp ax, 1
-273F:5BDD 74 91 je loc_ret_1167 ; Jump if equal
-273F:5BDF 73 13 jnc loc_1174 ; Jump if carry=0
-273F:5BE1 56 push si
-273F:5BE2 53 push bx
-273F:5BE3 A1 BA19 mov ax, use_hotspot_id
-273F:5BE6 E8 B101 call get_room_resource_pointer2
-273F:5BE9 A1 BA1B mov ax, active_hotspot_id
-273F:5BEC 89 44 06 mov [si+HSH_DESC_2], ax
-273F:5BEF 5B pop bx
-273F:5BF0 5E pop si
-273F:5BF1 E9 0171 jmp loc_1193 ; (5D65)
-273F:5BF4 loc_1174: ; xref 273F:5BDF
-273F:5BF4 8B D8 mov bx, ax
-273F:5BF6 8B 0E BA1B mov cx, active_hotspot_id
-273F:5BFA 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
-273F:5BFD E9 0790 jmp display_message_dialog
- give_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- examine_proc proc near
-273F:5C00 8B DD mov bx,bp
-273F:5C02 8B 07 mov ax,[bx]
-273F:5C04 A3 BA19 mov use_hotspot_id, ax
-273F:5C07 A3 BA1B mov active_hotspot_id, ax
-273F:5C0A 83 C5 02 add bp,2
-273F:5C0D 56 push si
-273F:5C0E E8 B0D9 call get_room_resource_pointer2
-273F:5C11 5B pop bx
-273F:5C12 87 DE xchg bx,si
-273F:5C14 53 push bx
-273F:5C15 E8 F969 call character_walking_end
-273F:5C18 5B pop bx
-273F:5C19 E8 F9DA call hotspot_get_action_sequence
-273F:5C1C 75 03 jnz loc_1176 ; Jump if not zero
-273F:5C1E loc_1175: ; xref 273F:5C24
-273F:5C1E E9 FF39 jmp loc_1165 ; (5B5A)
-273F:5C21 loc_1176: ; xref 273F:5C1C
-273F:5C21 E8 E210 call sequence_execute
-273F:5C24 74 F8 jz loc_1175 ; Jump if zero
-
-273F:5C26 loc_ret_1177: ; xref 273F:5C3E, 5C8A
-273F:5C26 C3 retn
- examine_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- bribe_proc proc near
-273F:5C27 8B DD mov bx,bp
-273F:5C29 8B 07 mov ax,[bx]
-273F:5C2B A3 BA19 mov use_hotspot_id, ax
-273F:5C2E A3 BA1B mov active_hotspot_id, ax
-273F:5C31 83 C5 02 add bp,2
-273F:5C34 E8 E970 call hotspot_action_precheck
-273F:5C37 0B C0 or ax,ax ; Zero ?
-273F:5C39 74 08 jz loc_1178 ; Jump if zero
-273F:5C3B 3D 0003 cmp ax,3
-273F:5C3E 74 E6 je loc_ret_1177 ; Jump if equal
-273F:5C40 E9 F93E jmp character_walking_end
-273F:5C43 loc_1178: ; xref 273F:5C39
-273F:5C43 B8 014B mov ax,14Bh
-273F:5C46 8B 16 BA1B mov dx, active_hotspot_id
-273F:5C4A 53 push bx
-273F:5C4B úBB 4AE6 mov bx, offset bribe_hotspot_list - 4
-273F:5C4E loc_1179:
-273F:5C4E 83 C3 04 add bx, 4 ; Move to next entry
-273F:5C51 F7 07 FFFF test word ptr [bx],0FFFFh ; End of list reached?
-273F:5C55 74 12 jz loc_1180 ; Jump if yes
-273F:5C57 3B 17 cmp dx, [bx] ; Char Id found?
-273F:5C59 75 F3 jne loc_1179 ; Keep scanning if not
-273F:5C5B 8B 47 02 mov ax, [bx+2] ; Get
-273F:5C5E F6 C4 80 test ah, 80h
-273F:5C61 74 06 jz loc_1180 ; Jump if zero
-273F:5C63 80 E4 7F and ah,7Fh
-273F:5C66 E8 E1CB call sequence_execute
-273F:5C69 loc_1180: ; xref 273F:5C55, 5C61
-273F:5C69 8B D0 mov dx,ax
-273F:5C6B BB 03E8 mov bx, PLAYER_HOTSPOT_ID
-273F:5C6E 8B 0E BA1B mov cx, active_hotspot_id
-273F:5C72 E8 04A7 call talk_setup
-273F:5C75 5B pop bx
-273F:5C76 E8 EA75 call character_face_hotspot
-273F:5C79 53 push bx
-273F:5C7A E8 F904 call character_walking_end
-273F:5C7D 5B pop bx
-273F:5C7E C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:5C82 E8 F971 call hotspot_get_action_sequence
-273F:5C85 74 05 jz loc_1181 ; Jump if zero
-273F:5C87 E8 E1AA call sequence_execute
-273F:5C8A 75 9A jnz loc_ret_1177 ; Jump if not zero
-273F:5C8C loc_1181: ; xref 273F:5C85
-273F:5C8C BA 03E8 mov dx, PLAYER_HOTSPOT_ID
-273F:5C8F 8B 0E BA19 mov cx, use_hotspot_id
-273F:5C93 BB 0029 mov bx, 29h
-273F:5C96 83 3E BA3B 06 cmp talk_record_index, 6
-273F:5C9B 75 03 jne loc_1182 ; Jump if not equal
-273F:5C9D úBB 0030 mov bx, 30h
-273F:5CA0 loc_1182: ; xref 273F:5C9B
-273F:5CA0 E9 06ED jmp display_message_dialog
- bribe_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ask_proc proc near
-273F:5CA3 8B DD mov bx,bp
-273F:5CA5 8B 47 02 mov ax,[bx+2]
-273F:5CA8 A3 BA19 mov use_hotspot_id, ax
-273F:5CAB 8B 07 mov ax,[bx]
-273F:5CAD A3 BA1B mov active_hotspot_id, ax
-273F:5CB0 83 C5 04 add bp,4
-273F:5CB3 E8 E8F1 call hotspot_action_precheck
-273F:5CB6 0B C0 or ax,ax ; Zero ?
-273F:5CB8 74 08 jz loc_1183 ; Jump if zero
-273F:5CBA 3D 0003 cmp ax,3
-273F:5CBD 74 4C je loc_ret_1186 ; Jump if equal
-273F:5CBF E9 F8BF jmp character_walking_end
-273F:5CC2 loc_1183: ; xref 273F:5CB8
-273F:5CC2 53 push bx
-273F:5CC3 E8 F8C7 call character_walking_end_2
-273F:5CC6 5B pop bx
-273F:5CC7 E8 EA24 call character_face_hotspot
-273F:5CCA BB 0009 mov bx, 9
-273F:5CCD E8 06D2 call display_message_dialog_2
-273F:5CD0 E8 F923 call hotspot_get_action_sequence
-273F:5CD3 78 0C js loc_1184 ; Jump if sign=1
-273F:5CD5 74 34 jz loc_ret_1186 ; Jump if zero
-273F:5CD7 E8 E15A call sequence_execute
-273F:5CDA 74 11 jz loc_1185 ; Jump if zero
-273F:5CDC 3D 0001 cmp ax,1
-273F:5CDF 74 2A je loc_ret_1186 ; Jump if equal
-273F:5CE1 loc_1184: ; xref 273F:5CD3
-273F:5CE1 8B 0E BA1B mov cx, active_hotspot_id
-273F:5CE5 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
-273F:5CE8 8B D8 mov bx, ax
-273F:5CEA E9 06A3 jmp display_message_dialog
-273F:5CED loc_1185: ; xref 273F:5CDA
-273F:5CED 56 push si
-273F:5CEE A1 BA19 mov ax, use_hotspot_id
-273F:5CF1 E8 AFF6 call get_room_resource_pointer2
-273F:5CF4 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
-273F:5CF7 89 4C 06 mov [si+HS_ROOM_NUM], cx
-273F:5CFA 5E pop si
-273F:5CFB E8 005B call player_inc_inventory_items
-273F:5CFE BB 0020 mov bx, 20h
-273F:5D01 8B 0E BA1B mov cx, active_hotspot_id
-273F:5D05 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
-273F:5D08 E9 0685 jmp display_message_dialog
-
-273F:5D0B loc_ret_1186: ; xref 273F:5CBD, 5CD5, 5CDF
-273F:5D0B C3 retn
- ask_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:5D0C loc_1187: ; xref 273F:5AC7, 5B90, 5D2F
-273F:5D0C B8 000F mov ax, 0Fh ; "What???"
-273F:5D0F E8 069F call display_message_dialog_3
-273F:5D12 E9 F86C jmp character_walking_end
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- drink_proc proc near
-273F:5D15 8B DD mov bx,bp
-273F:5D17 8B 07 mov ax,[bx]
-273F:5D19 83 C5 02 add bp,2
-273F:5D1C A3 BA19 mov use_hotspot_id, ax
-273F:5D1F A3 BA1B mov active_hotspot_id, ax
-273F:5D22 56 push si
-273F:5D23 E8 AFC4 call get_room_resource_pointer2
-273F:5D26 5B pop bx
-273F:5D27 87 DE xchg bx,si
-273F:5D29 8B 45 1B mov ax,[di+ANIM_HOTSPOT_ID] ; Validate item is in
-273F:5D2C 3B 47 06 cmp ax,[bx+HS_ROOM_NUM] ; character's inventory
-273F:5D2F 75 DB jne loc_1187 ; Jump if not equal
-273F:5D31 53 push bx
-273F:5D32 E8 F84C call character_walking_end
-273F:5D35 5B pop bx
-273F:5D36 E8 F8BD call hotspot_get_action_sequence
-273F:5D39 79 03 jns loc_1188 ; Jump if not sign
-273F:5D3B E9 0673 jmp display_message_dialog_3
-273F:5D3E loc_1188: ; xref 273F:5D39
-273F:5D3E 74 13 jz loc_1191 ; Jump if zero
-273F:5D40 E8 E0F1 call sequence_execute
-273F:5D43 74 08 jz loc_1189 ; Jump if zero
-273F:5D45 3D 0001 cmp ax,1
-273F:5D48 74 08 je loc_ret_1190 ; Jump if equal
-273F:5D4A E9 0664 jmp display_message_dialog_3
-273F:5D4D loc_1189: ; xref 273F:5D43
-273F:5D4D C7 47 06 0000 mov word ptr [bx+HS_ROOM_NUM], 0
-
-273F:5D52 loc_ret_1190: ; xref 273F:5D48
-273F:5D52 C3 retn
-273F:5D53 loc_1191: ; xref 273F:5D3E
-273F:5D53 B8 0016 mov ax,16h
-273F:5D56 E9 0658 jmp display_message_dialog_3
- drink_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:5436, 5CFB
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- player_inc_inventory_items proc near
-273F:5D59 81 FE 6CEF cmp si, offset player_hotspot_rec
-273F:5D5D 75 05 jne loc_ret_1192 ; Jump if not equal
-273F:5D5F 80 06 9835 01 add num_inventory_items, 1
-273F:5D64 loc_ret_1192: ; xref 273F:5D5D, 5D69, 5DB4
-273F:5D64 C3 retn
- player_inc_inventory_items proc near
-
-
-273F:5D65 loc_1193: ; xref 273F:5BF1
-273F:5D65 ú81 FE 6CEF cmp si, offset player_hotspot_rec
-273F:5D69 75 F9 jne loc_ret_1192 ; Jump if not equal
-273F:5D6B 80 2E 9835 01 sub num_inventory_items, 1
-
-273F:5D70 loc_ret_1194: ; xref 273F:5D8B
-273F:5D70 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_dispatch_action proc near
-273F:5D71 8B DD mov bx,bp
-273F:5D73 8B 07 mov ax,[bx]
-273F:5D75 83 C5 04 add bp,4
-273F:5D78 A3 BA19 mov use_hotspot_id, ax
-273F:5D7B A3 BA1B mov active_hotspot_id, ax
-273F:5D7E E8 E826 call hotspot_action_precheck
-273F:5D81 0B C0 or ax,ax ; Zero ?
-273F:5D83 75 03 jnz loc_1195 ; Jump if not zero
-273F:5D85 E9 F7F9 jmp character_walking_end
-273F:5D88 loc_1195: ; xref 273F:5D83
-273F:5D88 3D 0003 cmp ax, 3 ; Initial state?
-273F:5D8B 74 E3 je loc_ret_1194 ; Exit if yes
-273F:5D8D 8B DD mov bx,bp
-273F:5D8F 8B 47 FE mov ax,[bx-2]
-273F:5D92 8B DE mov bx,si
-273F:5D94 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5D97 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5D9A 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
-273F:5D9D E9 E41E jmp action_dispatch
- npc_dispatch_action endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_unknown_3 proc near
-273F:5DA0 8B DD mov bx,bp
-273F:5DA2 8B 07 mov ax,[bx]
-273F:5DA4 A3 BA19 mov use_hotspot_id, ax
-273F:5DA7 A3 BA1B mov active_hotspot_id, ax
-273F:5DAA E8 E7FA call hotspot_action_precheck
-273F:5DAD 0B C0 or ax,ax ; Zero ?
-273F:5DAF 74 0B jz loc_1196 ; Jump if zero
-273F:5DB1 3D 0003 cmp ax,3
-273F:5DB4 74 AE je loc_ret_1192 ; Jump if equal
-273F:5DB6 83 C5 0A add bp,0Ah
-273F:5DB9 E9 F7C5 jmp character_walking_end
-273F:5DBC loc_1196: ; xref 273F:5DAF
-273F:5DBC A1 BA1B mov ax, active_hotspot_id
-273F:5DBF 56 push si
-273F:5DC0 E8 AF27 call get_room_resource_pointer2
-273F:5DC3 5B pop bx
-273F:5DC4 87 DE xchg bx,si
-273F:5DC6 F7 47 37 FFFF test word ptr [bx+HS_TALK_COUNTDOWN], 0FFFFh
-273F:5DCB 75 36 jnz loc_ret_1199 ; Jump if not zero
-273F:5DCD 83 C5 02 add bp, 2
-273F:5DD0 8B DD mov bx, bp
-273F:5DD2 8B 17 mov dx, [bx] ; Get param #2
-273F:5DD4 0B D2 or dx, dx ; Zero ?
-273F:5DD6 74 11 jz loc_1197 ; Jump if zero
-273F:5DD8 8B 4F FE mov cx, [bx-2]
-273F:5DDB 53 push bx
-273F:5DDC E8 0350 call talk_setup_3 ; (612F)
-273F:5DDF 5B pop bx
-273F:5DE0 8B 47 02 mov ax, [bx+2]
-273F:5DE3 01 44 42 add [si+HS_DELAY_CTR], ax
-273F:5DE6 01 44 37 add [si+HS_TALK_COUNTDOWN], ax
-273F:5DE9 loc_1197: ; xref 273F:5DD6
-273F:5DE9 83 C3 04 add bx, 4
-273F:5DEC 8B 17 mov dx, [bx] ; Param #4
-273F:5DEE 0B D2 or dx, dx ; Zero ?
-273F:5DF0 74 0B jz loc_1198 ; Jump if zero
-273F:5DF2 8B 5F FA mov bx, [bx-6] ; Param #1
-273F:5DF5 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
-273F:5DF8 56 push si
-273F:5DF9 E8 032E call talk_setup_2
-273F:5DFC 5E pop si
-273F:5DFD loc_1198:
-273F:5DFD 83 C5 08 add bp, 8
-273F:5E00 E9 F77E jmp character_walking_end
-
-273F:5E03 loc_ret_1199:
-273F:5E03 C3 retn
- npc_unknown_3 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_pause proc near
-273F:5E04 8B DD mov bx,bp
-273F:5E06 8B 47 02 mov ax, [bx+2]
-273F:5E09 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:5E0C C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_3
-273F:5E10 83 C5 04 add bp, 4
-273F:5E13 E9 F76B jmp character_walking_end
- npc_pause endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_start_talking proc near
-273F:5E16 8B DE mov bx, si
-273F:5E18 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5E1B 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5E1E 83 47 01 06 add word ptr [bx+CURRENT_ACTION_SUPPORT_TABLE], 6
-273F:5E22 8B DD mov bx, bp
-273F:5E24 8B 17 mov dx, [bx]
-273F:5E26 8B 47 02 mov ax, [bx+2]
-273F:5E29 8B 5D 1B mov bx, [di+ANIM_HOTSPOT_ID]
-273F:5E2C B9 03E7 mov cx, NOONE_ID
-273F:5E2F E9 0319 jmp talk_converse
- npc_start_talking endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_jump_to_address proc near
-273F:5E32 8B DE mov bx,si
-273F:5E34 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5E37 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5E3A 83 47 01 04 add word ptr [bx+CURRENT_ACTION_SUPPORT_TABLE], 4
-273F:5E3E 8B DD mov bx,bp
-273F:5E40 8B 07 mov ax,[bx] ; Load address
-273F:5E42 FF E0 jmp ax ; Jump to it
- npc_jump_to_address endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; This method is the tick handler proc for the player, and gets
- ; called once every frame
- ; di = animation slot entry, si = hotspot resource
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- player_tick_proc proc near
-
-273F:5E44 8B DE mov bx, si
-273F:5E46 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:5E49 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5E4C E8 0329 call talk_countdown_handler
-273F:5E4F F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:5E54 74 0B jz loc_1200 ; Jump if zero
-273F:5E56 C7 06 F010 0000 mov timer_ticks, 0
-273F:5E5C 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR],1
-273F:5E60 C3 retn
-273F:5E61 loc_1200:
-273F:5E61 E8 B2A7 call character_find_impinging_chars
-273F:5E64 F6 45 1D FF test byte ptr [di+ANIM_SKIP], 0FFh
-273F:5E68 74 13 jz loc_1202 ; Jump if zero
-273F:5E6A C7 06 F010 0000 mov timer_ticks, 0
-273F:5E70 F7 06 10BE FFFF test num_impinging_chars, 0FFFFh
-273F:5E76 74 01 jz loc_1201 ; Jump if zero
-273F:5E78 C3 retn
-273F:5E79 loc_1201: ; xref 273F:5E76
-273F:5E79 C6 45 1D 00 mov byte ptr [di+ANIM_SKIP], 0
-273F:5E7D loc_1202: ; xref 273F:5E68
-273F:5E7D 8B 44 58 mov ax, [si+HS_V58]
-273F:5E80 0B C0 or ax, ax ; Zero ?
-273F:5E82 74 19 jz loc_1203 ; Jump if zero
-273F:5E84 C7 06 F010 0000 mov timer_ticks, 0
-273F:5E8A C7 44 58 0000 mov word ptr [si+HS_V58], 0
-273F:5E8F 56 push si
-273F:5E90 E8 AE57 call get_room_resource_pointer2
-273F:5E93 80 7C 44 07 cmp byte ptr [si+HS_CHAR_MODE], CHARMODE_7
-273F:5E97 5E pop si
-273F:5E98 74 03 jz loc_1203
-273F:5E9A C6 07 00 mov byte ptr [bx], 0 ; Reset action
-
-273F:5E9D loc_1203:
-273F:5E9D F7 44 4A FFFF test word ptr [si+HS_PAUSE_CTR], 0FFFFh
-273F:5EA2 74 27 jz loc_1205 ; Jump if zero
-273F:5EA4 C7 06 F010 0000 mov timer_ticks, 0
-273F:5EAA E8 E4B9 call character_update_movement
-273F:5EAD 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:5EB0 E8 F09F call pathfind_reset
-273F:5EB3 83 7C 4A 01 cmp word ptr [si+HS_PAUSE_CTR], 1
-273F:5EB7 75 0F jne loc_1204 ; Jump if not equal
-273F:5EB9 C7 44 4A 0000 mov word ptr [si+HS_PAUSE_CTR], 0
-273F:5EBE F6 44 44 FF test byte ptr [si+HS_CHAR_MODE], 0FFh
-273F:5EC2 75 07 jnz loc_1205 ; Jump if not zero
-273F:5EC4 E8 E4C0 call character_pathfind_clear
-273F:5EC7 C3 retn
-273F:5EC8 loc_1204:
-273F:5EC8 E9 E695 jmp character_paused_list_scan
-273F:5ECB loc_1205:
-273F:5ECB 8A 44 44 mov al, [si+HS_CHAR_MODE]
-273F:5ECE 0A C0 or al, al ; CHARMODE_NONE?
-273F:5ED0 74 44 jz loc_1208 ; Jump if yes
-273F:5ED2 3C 02 cmp al, CHARMODE_IDLE
-273F:5ED4 74 40 je loc_1208
-273F:5ED6 C7 06 F010 0000 mov timer_ticks, 0
-273F:5EDC F7 44 42 FFFF test word ptr [si+HS_DELAY_CTR], 0FFFFh
-273F:5EE1 74 0E jz loc_1206 ; Jump if zero
-273F:5EE3 E8 E480 call character_update_movement
-273F:5EE6 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:5EE9 E8 F066 call pathfind_reset
-273F:5EEC 83 6C 42 01 sub word ptr [si+HS_DELAY_CTR], 1
-273F:5EF0 C3 retn
-273F:5EF1 loc_1206: ; xref 273F:5EE1
-273F:5EF1 E8 E493 call character_pathfind_clear
-273F:5EF4 C6 44 44 00 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_NONE
-273F:5EF8 F6 44 FF FF test byte ptr [si-1],0FFh
-273F:5EFC 74 17 jz loc_ret_1207 ; Jump if zero
-273F:5EFE C6 44 FF 00 mov byte ptr [si+HS_DEST2_SET], 0
-273F:5F02 8B 44 FB mov ax,[si+HS_DEST2_X]
-273F:5F05 89 44 54 mov [si+HS_DEST_X], ax
-273F:5F08 8B 44 FD mov ax,[si+HS_DEST2_Y]
-273F:5F0B 89 44 56 mov [si+HS_DEST_Y], ax
-273F:5F0E C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:5F11 C6 45 27 00 mov byte ptr [di+ANIM_WALK_FLAG], 0
-
-273F:5F15 loc_ret_1207: ; xref 273F:5EFC
-273F:5F15 C3 retn
-
-273F:5F16 loc_1208: ; xref 273F:5ED0, 5ED4
-273F:5F16 B0 02 mov al, CHARMODE_IDLE
-273F:5F18 8A 27 mov ah, [bx]
-273F:5F1A F6 C4 FF test ah, 0FFh
-273F:5F1D 75 08 jnz loc_1209 ; Jump if not zero
-273F:5F1F C7 44 52 0000 mov [si+HS_DEST_HOTSPOT], 0
-273F:5F24 E9 E43C jmp character_update_movement_2
-
-273F:5F27 loc_1209:
-273F:5F27 C7 06 F010 0000 mov timer_ticks, 0
-273F:5F2D 80 FC 05 cmp ah, CHAR_ACTION_CONTINUE_WALK
-273F:5F30 74 13 je loc_1211 ; Jump if equal
-273F:5F32 80 FC 03 cmp ah, CHAR_ACTION_EXEC_SCRIPT
-273F:5F35 74 11 je loc_1212 ; Jump if equal
-273F:5F37 80 FC 01 cmp ah, CHAR_ACTION_START_WALK
-273F:5F3A 74 17 je loc_1213 ; Jump if equal
-273F:5F3C 80 FC 04 cmp ah, CHAR_ACTION_PROCESSING_PATH
-273F:5F3F 74 1E je loc_1214 ; Jump if equal
-273F:5F41 E8 E27A call action_dispatch
-
-273F:5F44 loc_ret_1210: ; xref 273F:5F4D
-273F:5F44 C3 retn
-273F:5F45 loc_1211: ; xref 273F:5F30
-273F:5F45 E9 00A3 jmp loc_1219 ; (5FEB)
-273F:5F48 loc_1212: ; xref 273F:5F35
-273F:5F48 E8 B05E call hotspot_script_execute
-273F:5F4B 0B C0 or ax,ax ; Zero ?
-273F:5F4D 75 F5 jnz loc_ret_1210 ; Jump if not zero
-273F:5F4F C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:5F52 C3 retn
-
-; Code below is responsible for starting the player walking
-
-273F:5F53 loc_1213: ; xref 273F:5F3A
-273F:5F53 B8 03E8 mov ax, PLAYER_HOTSPOT_ID
-273F:5F56 E8 EFF9 call pathfind_reset
-273F:5F59 C6 07 04 mov byte ptr [bx], CHAR_ACTION_PROCESSING_PATH
-273F:5F5C E8 E428 call character_pathfind_clear
-
-; Jump point here calculates one sequence of the path finding required to get
-; the player to a given destination
-
-273F:5F5F loc_1214: ; xref 273F:5F3F
-273F:5F5F C6 44 44 00 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_NONE
-273F:5F63 E8 E5FA call character_paused_list_scan
-273F:5F66 8B 4C 54 mov cx, [si+HS_DEST_X]
-273F:5F69 8B 54 56 mov dx, [si+HS_DEST_Y]
-273F:5F6C 53 push bx
-273F:5F6D 56 push si
-273F:5F6E 57 push di
-273F:5F6F 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:5F72 8B D9 mov bx,cx
-273F:5F74 8B CA mov cx,dx
-273F:5F76 8A 54 4C mov dl, [si+HS_BLOCKED_FLAG]
-273F:5F79 E8 EA7A call character_pathfind
-273F:5F7C 8B D3 mov dx,bx
-273F:5F7E 5F pop di
-273F:5F7F 5E pop si
-273F:5F80 5B pop bx
-273F:5F81 0B C0 or ax,ax ; Zero ?
-273F:5F83 75 01 jnz loc_1215 ; Jump if not zero
-273F:5F85 C3 retn
-
-; The code below gets jumped to when the final segment of pathfinding is
-; complete.
-
-273F:5F86 loc_1215:
-273F:5F86 3D 0001 cmp ax, PF_OK
-273F:5F89 74 42 je loc_1218 ; Immediate translate
-273F:5F8B F6 45 27 01 test byte ptr [di+ANIM_WALK_FLAG], 1
-273F:5F8F 75 05 jnz loc_1216 ; Jump if not zero
-273F:5F91 3D 0002 cmp ax, PF_DEST_OCCUPIED
-273F:5F94 74 37 je loc_1218 ; Jump to translate
-273F:5F96 loc_1216: ; xref 273F:5F8F
-273F:5F96 F6 44 4C FF test byte ptr [si+HS_BLOCKED_FLAG], 0FFh
-273F:5F9A 74 31 jz loc_1218 ; Jump if zero
-273F:5F9C 80 7C 4C 02 cmp byte ptr [si+HS_BLOCKED_FLAG], BS_FINAL
-273F:5FA0 74 17 je loc_1217 ; Jump if equal
-273F:5FA2 C6 44 FF 01 mov byte ptr [si+HS_DEST2_SET], 1
-273F:5FA6 8B 44 54 mov ax, [si+HS_DEST_X]
-273F:5FA9 89 44 FB mov [si+HS_DEST2_X], ax
-273F:5FAC 8B 44 56 mov ax, [si+HS_DEST_Y]
-273F:5FAF 89 44 FD mov [si+HS_DEST2_Y], ax
-273F:5FB2 80 44 4C 01 add byte ptr [si+HS_BLOCKED_FLAG], 1
-273F:5FB6 E9 F6AD jmp character_set_random_dest
-273F:5FB9 loc_1217: ; xref 273F:5FA0
-273F:5FB9 E8 E485 call character_paused_list_reset
-273F:5FBC C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
-273F:5FC0 C6 07 00 mov byte ptr [bx], 0
-273F:5FC3 C6 44 44 06 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_6
-273F:5FC7 C7 44 42 0007 mov word ptr [si+HS_DELAY_CTR], 7
-273F:5FCC C3 retn
-
-273F:5FCD loc_1218: ; dx => movement data
-273F:5FCD C6 44 4C 00 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_NONE
-273F:5FD1 8B C3 mov ax, bx
-273F:5FD3 8B DA mov bx, dx
-273F:5FD5 8B 0F mov cx, [bx]
-273F:5FD7 8B D8 mov bx, ax
-273F:5FD9 0B C9 or cx, cx ; Zero ?
-273F:5FDB 74 56 jz loc_1223 ; Jump if zero
-273F:5FDD C6 07 05 mov byte ptr [bx], CHAR_ACTION_CONTINUE_WALK
-273F:5FE0 E8 E22A call character_translate_movements
-273F:5FE3 83 65 02 F8 and [di+ANIM_Y], 0FFF8h
-273F:5FE7 83 64 0F F8 and [si+HS_Y], 0FFF8h
-
-; The buffer pointed to by HS[HS_MOVEMENT_SRC_OFFSET] now contains a set of
-; direction numbers and steps necessary to get the player to the destination
-; they've clicked on
-
-; Code jumps to this point to handle the continual walking
-
-273F:5FEB loc_1219:
-273F:5FEB 8B 44 52 mov ax, [si+HS_DEST_HOTSPOT]
-273F:5FEE 0B C0 or ax,ax ; Walking to a room exit hotspot:
-273F:5FF0 74 17 jz loc_1221 ; No, straight walking
-273F:5FF2 3D FFFF cmp ax, 0FFFFh
-273F:5FF5 74 12 je loc_1221
-273F:5FF7 56 push si
-273F:5FF8 53 push bx
-273F:5FF9 E8 11F2 call room_exit_hs_get_pointer
-273F:5FFC 8A 44 0C mov al, [si+REHS_EXIT_BLOCKED]
-273F:5FFF 5B pop bx
-273F:6000 5E pop si
-273F:6001 0A C0 or al, al ; Is exit now blocked?
-273F:6003 74 04 jz loc_1221 ; Keep walking if not
-273F:6005 C6 07 00 mov byte ptr [bx], 0 ; Stop the player walking
-
-273F:6008 loc_ret_1220: ; xref 273F:600E
-273F:6008 C3 retn
-273F:6009 loc_1221: ; xref 273F:5FF0, 5FF5, 6003
-273F:6009 E8 B1A9 call character_paused_list_check
-273F:600C 0B C0 or ax,ax ; Zero ?
-273F:600E 75 F8 jnz loc_ret_1220 ; Jump if not zero
-273F:6010 E8 AE9D call character_update_frame
-273F:6013 0A C0 or al, al ; Zero ?
-273F:6015 74 1F jz loc_1224 ; Jump if zero
-273F:6017 80 3E 9834 04 cmp cursor_state, CURSORSTATE_BUMPED
-273F:601C 75 05 jne loc_1222 ; Jump if not equal
-273F:601E C6 06 9834 00 mov cursor_state, CURSORSTATE_NONE
-273F:6023 loc_1222: ; xref 273F:601C
-273F:6023 F6 44 FF FF test byte ptr [si-HS_DEST2_SET], 0FFh
-273F:6027 74 0A jz loc_1223 ; Jump if zero
-273F:6029 C6 44 44 06 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_6
-273F:602D C7 44 42 000F mov word ptr [si+HS_DELAY_CTR], 15
-273F:6032 C3 retn
-273F:6033 loc_1223: ; xref 273F:5FDB, 6027
-273F:6033 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:6036 loc_1224: ; xref 273F:6015
-273F:6036 E9 E24F jmp character_check_room_change
-
- player_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4313
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- character_change_room_check_bumped proc near
-273F:6039 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:603C E8 E46A call check_for_impinging_characters
-273F:603F 75 30 jnz loc_1225 ; No character bumped
-273F:6041 8B DE mov bx, si
-273F:6043 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:6046 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:6049 C6 44 FF 01 mov byte ptr [si+HS_DEST2_SET], 1
-273F:604D 8B 44 54 mov ax, [si+HS_DEST_X]
-273F:6050 89 44 FB mov [si+HS_DEST2_X], ax
-273F:6053 8B 44 56 mov ax, [si+HS_DEST_Y]
-273F:6056 89 44 FD mov [si+HS_DEST2_Y], ax
-273F:6059 C6 06 9834 04 mov cursor_state, CURSORSTATE_BUMPED
-273F:605E C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:6062 80 44 4C 01 add byte ptr [si+HS_BLOCKED_FLAG], 1
-273F:6066 C7 44 52 0000 mov word ptr [si+HS_DEST_HOTSPOT], 0
-273F:606B E8 F5F8 call character_set_random_dest
-273F:606E 33 C0 xor ax, ax ; Zero register
-273F:6070 C3 retn
-273F:6071 loc_1225: ; xref 273F:603F
-273F:6071 0D 0001 or ax, 1
-
-273F:6074 loc_ret_1226: ; xref 273F:60D3
-273F:6074 C3 retn
- character_change_room_check_bumped endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:006E
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- player_change_room proc near
-273F:6075 úBE 6CEF mov si, offset player_hotspot_rec
-273F:6078 8B 7C 0B mov di, [si+HS_ANIM_OFFSET] ; Get player anim rec
-273F:607B C6 45 1D 2A mov byte ptr [di+ANIM_SKIP], 2Ah
-273F:607F 8B DE mov bx, si
-273F:6081 03 5F 61 add bx, [bx+HS_ACTION_OFFSET]
-273F:6084 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:6087 C6 07 00 mov byte ptr [bx], CHAR_ACTION_NONE
-273F:608A A1 9832 mov ax, room_number
-273F:608D 89 45 0E mov [di+ANIM_ROOM_NUM], ax ; Set player's room #
-273F:6090 89 44 06 mov [si+HS_ROOM_NUM], ax
-273F:6093 A1 982E mov ax, new_room_x ; Set x position
-273F:6096 24 F8 and al, 0F8h
-273F:6098 0C 05 or al, 5
-273F:609A 89 05 mov [di+ANIM_X], ax
-273F:609C 89 44 0D mov [si+HS_X], ax
-273F:609F A1 9830 mov ax, new_room_y ; Set y position
-273F:60A2 25 FFF8 and ax, 0FFF8h
-273F:60A5 89 45 02 mov [di+ANIM_Y], ax
-273F:60A8 89 44 0F mov [si+HS_Y], ax
-273F:60AB C7 06 982C 0000 mov new_room_number_2, 0
-273F:60B1 8B 5D 0E mov bx, [di+ANIM_ROOM_NUM]
-273F:60B4 56 push si
-273F:60B5 E8 1B53 call hotspot_enable
-273F:60B8 5E pop si
-273F:60B9 8B 4C 50 mov cx, [si+HS_DIRECTION]
-273F:60BC C7 44 50 0000 mov word ptr [si+HS_DIRECTION], 0
-273F:60C1 F6 C1 80 test cl, DIR_UP
-273F:60C4 75 12 jnz loc_1227 ; Jump if not zero
-273F:60C6 F6 C1 40 test cl, DIR_DOWN
-273F:60C9 75 13 jnz loc_1229 ; Jump if not zero
-273F:60CB F6 C1 20 test cl, DIR_LEFT
-273F:60CE 75 0B jnz loc_1228 ; Jump if not zero
-273F:60D0 F6 C1 10 test cl, DIR_RIGHT
-273F:60D3 74 9F jz loc_ret_1226 ; Jump if zero
-273F:60D5 E9 E434 jmp char_face_right
-273F:60D8 loc_1227: ; xref 273F:60C4
-273F:60D8 E9 E3FE jmp char_face_up
-273F:60DB loc_1228: ; xref 273F:60CE
-273F:60DB E9 E41D jmp char_face_left
-273F:60DE loc_1229: ; xref 273F:60C9
-273F:60DE E9 E409 jmp char_face_down
- player_change_room endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:00A6
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- check_player_bumped proc near
-
-273F:60E1 úBF B14E mov di, offset animation_table
-273F:60E4 BE 6CEF mov si, offset player_hotspot_rec
-273F:60E7 E8 B021 call character_find_impinging_chars
-273F:60EA F7 06 10BE FFFF test num_impinging_chars, 0FFFFh
-273F:60F0 74 16 jz loc_ret_1231 ; Jump if zero
-273F:60F2 FF 36 6D06 push player_tick_handler
-273F:60F6 C7 06 6D06 41BD mov player_tick_handler, offset null_tick_proc
-273F:60FC E8 E311 call character_paused_list_countdown
-273F:60FF E8 E094 call animation_tick
-273F:6102 8F 06 6D06 pop player_tick_handler
-273F:6106 EB D9 jmp check_player_bumped
-
-273F:6108 loc_ret_1231: ; xref 273F:60F0
-273F:6108 C3 retn
- check_player_bumped endp
-
-273F:6109 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8132
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- start_talk_noone proc near
-273F:610A B0 01 mov al, 1
-273F:610C 8B D1 mov dx, cx
-273F:610E B9 03E7 mov cx, NOONE_HOTSPOT_ID
-273F:6111 EB 38 jmp talk_converse
- start_talk_noone endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6113 B8 0001 mov ax,1
-273F:6116 EB 33 jmp talk_converse
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx=talking char Id, cx=talk to char Id, dx=string Id
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_converse proc near
-273F:6118 32 C0 xor al, al
-273F:611A EB 2F jmp talk_converse
- seq_converse endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:611C talk_setup:
-273F:611C EB 0C jmp talk_setup_2
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:611E 32 C0 xor al,al ; Zero register
-273F:6120 8B D3 mov dx,bx
-273F:6122 BB 03E8 mov bx, PLAYER_HOTSPOT_ID
-273F:6125 B9 03E7 mov cx,3E7h
-273F:6128 EB 21 jmp short talk_converse
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:5DF9
-
-273F:612A talk_setup_2:
-273F:612A 51 push cx
-273F:612B E8 ABBA call get_room_resource_pointer
-273F:612E 59 pop cx
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:5DDC, 8C43, 8C8F, 8D33
-
- talk_setup_3:
-273F:612F ú89 54 3C mov [si+HS_RESPONSE_ID], dx
-273F:6132 89 4C 39 mov [si+HS_TALK_CHAR_ID], cx
-273F:6135 C7 44 37 0028 mov word ptr [si+HS_TALK_COUNTDOWN], TALK_COUNTDOWN_MAX
-273F:613A 56 push si
-273F:613B 8B D9 mov bx, cx
-273F:613D E8 ABA8 call get_room_resource_pointer ; Get char talking to
-273F:6140 5B pop bx
-273F:6141 87 DE xchg bx, si ; bx=hotspot talking to
-273F:6143 8B 47 37 mov ax, [bx+HS_TALK_COUNTDOWN]
-273F:6146 01 44 37 add [si+HS_TALK_COUNTDOWN], ax
-273F:6149 EB 16 jmp short loc_1236
-
-; bx=talking char Id, cx=talking to char Id, dx=string Id, ax=???
-273F:614B talk_converse:
-273F:614B 50 push ax
-273F:614C 51 push cx
-273F:614D E8 AB98 call get_room_resource_pointer
-273F:6150 59 pop cx
-273F:6151 58 pop ax
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:582D, 638C
-
-273F:6152 talk_converse_2:
-273F:6152 ú89 54 3C mov [si+HS_RESPONSE_ID], dx
-273F:6155 89 4C 39 mov [si+HS_TALK_CHAR_ID],cx
-273F:6158 C7 44 37 0028 mov [si+HS_TALK_COUNTDOWN], TALK_COUNTDOWN_MAX
-273F:615D A8 FF test al,0FFh
-273F:615F 74 16 jz loc_ret_1237 ; Jump if zero
-273F:6161 loc_1236: ; xref 273F:6149
-273F:6161 8B 44 37 mov ax, [si+HS_TALK_COUNTDOWN]
-273F:6164 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:6167 C6 44 44 05 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_CONVERSING
-273F:616B A1 BA19 mov ax, use_hotspot_id
-273F:616E 89 44 3E mov [si+HS_V3E], ax
-273F:6171 A1 BA1B mov ax, active_hotspot_id
-273F:6174 89 44 40 mov [si+HS_V40], ax
-
-273F:6177 loc_ret_1237:
-273F:6177 C3 retn
- seq_converse endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4F8A, 5E4C, 81B3, 81F3, 820E, 8241, 82A0
- ; 85CE, 8663, 87EC, 882A, 8D3B, 8D59
- ; si = hotspot record, bx = table offset
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_countdown_handler proc near
-273F:6178 úF7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN], 0FFFFh
-273F:617D 74 F8 jz loc_ret_1237 ; Jump if zero
-273F:617F 83 7C 37 28 cmp word ptr [si+HS_TALK_COUNTDOWN], TALK_COUNTDOWN_MAX
-273F:6183 74 22 je loc_1241 ; Jump if equal
-273F:6185 F6 06 CE20 80 test game_flags, 80h
-273F:618A 75 16 jnz loc_1240 ; Jump if not zero
-273F:618C F6 06 CE20 0C test game_flags, 0Ch
-273F:6191 74 0A jz loc_1239 ; Jump if zero
-273F:6193 83 44 42 01 add word ptr [si+HS_DELAY_CTR], 1
-273F:6197 80 2E CE20 04 sub game_flags, 4
-273F:619C C3 retn
-273F:619D loc_1239: ; xref 273F:6191
-273F:619D 80 0E CE20 04 or game_flags, 4
-273F:61A2 loc_1240: ; xref 273F:618A
-273F:61A2 83 6C 37 01 sub word ptr [si+HS_TALK_COUNTDOWN], 1
-273F:61A6 C3 retn
-273F:61A7 loc_1241: ; xref 273F:6183
-273F:61A7 83 6C 37 01 sub word ptr [si+HS_TALK_COUNTDOWN], 1
-273F:61AB 53 push bx
-273F:61AC E8 0020 call talk_add_voice_animation
-273F:61AF E8 0298 call sub_153 ; (644A)
-273F:61B2 81 7C 39 03E7 cmp word ptr [si+HS_TALK_CHAR_ID], NOONE_HOTSPOT_ID
-273F:61B7 74 14 je loc_1242 ; Jump if equal
-273F:61B9 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:61BC 8B 5C 39 mov bx, [si+HS_TALK_CHAR_ID]
-273F:61BF 89 1E BA1B mov active_hotspot_id, bx
-273F:61C3 50 push ax
-273F:61C4 53 push bx
-273F:61C5 E8 E532 call character_face_hotspot_2
-273F:61C8 58 pop ax
-273F:61C9 5B pop bx
-273F:61CA E8 E52D call character_face_hotspot_2
-273F:61CD loc_1242: ; xref 273F:61B7
-273F:61CD 5B pop bx
-273F:61CE C3 retn
- talk_countdown_handler endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:61AC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_add_voice_animation proc near
-273F:61CF 8B 45 1B mov ax,[di+ANIM_HOTSPOT_ID]
-273F:61D2 57 push di
-273F:61D3 úBF B14E mov di, offset animation_table
-273F:61D6 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:61D9 locloop_1243:
-273F:61D9 F6 45 0C FF test byte ptr [di+ANIM_LAYER], 0FFh ; Empty slot?
-273F:61DD 74 12 jz loc_1245 ; Jump if slot found
-273F:61DF 83 7D 1B FF cmp word ptr [di+ANIM_HOTSPOT_ID], 0FFFFh
-273F:61E3 75 05 jne loc_1244 ; Jump if not equal
-273F:61E5 3B 45 1E cmp ax,[di+1Eh]
-273F:61E8 74 07 je loc_1245 ; Jump if equal
-273F:61EA loc_1244: ; xref 273F:61E3
-273F:61EA 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:61ED E2 EA loop locloop_1243 ; Loop if cx > 0
-
-273F:61EF 5F pop di
-273F:61F0 C3 retn
-
-273F:61F1 loc_1245: ; xref 273F:61DD, 61E8
-273F:61F1 5B pop bx
-273F:61F2 87 DF xchg bx,di
-
-; di = passed character animation entry, bx = slot to add voice entry into
-
-273F:61F4 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:61F7 89 47 0E mov [bx+ANIM_ROOM_NUM], ax
-273F:61FA C7 47 1B FFFF mov word ptr [bx+ANIM_HOTSPOT_ID], 0FFFFh
-273F:61FF 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:6202 89 47 1E mov [bx+1Eh], ax
-273F:6205 8B 44 3C mov ax, [si+3Ch]
-273F:6208 89 47 20 mov [bx+20h],ax
-273F:620B C6 47 0D 01 mov byte ptr [bx+ANIM_FLAGS], 1
-273F:620F 8B 05 mov ax, [di] ; X position
-273F:6211 05 000C add ax, 12
-273F:6214 89 07 mov [bx], ax
-273F:6216 8B 45 02 mov ax, [di+ANIM_Y]
-273F:6219 2D 0012 sub ax, 18
-273F:621C 89 47 02 mov [bx+ANIM_Y], ax
-273F:621F C7 47 04 0020 mov word ptr [bx+ANIM_WIDTH], 32
-273F:6224 C7 47 06 0012 mov word ptr [bx+ANIM_HEIGHT], 18
-273F:6229 C6 47 0C 01 mov byte ptr [bx+ANIM_LAYER], 1
-273F:622D C6 47 10 01 mov byte ptr [bx+ANIM_CAN_UNLOAD], 1
-273F:6231 C7 47 11 625E mov word ptr [bx+ANIM_TICK_PROC], offset voice_tick_proc
-273F:6236 C7 47 13 0018 mov word ptr [bx+ANIM_WIDTH_COPY], 24
-273F:623B 8B 45 15 mov ax, [di+ANIM_HEIGHT_COPY]
-273F:623E 05 000E add ax, 14
-273F:6241 89 47 15 mov [bx+ANIM_HEIGHT_COPY], ax
-273F:6244 C7 47 17 0001 mov word ptr [bx+17h], 1
-273F:6249 C7 47 08 0000 mov word ptr [bx+8], 0
-273F:624E A1 5813 mov ax, voice_pixel_segment
-273F:6251 89 47 0A mov [bx+ANIM_SEGMENT], ax
-273F:6254 C6 47 28 00 mov byte ptr [bx+ANIM_START_COLOUR], 0
-273F:6258 C7 47 24 0028 mov word ptr [bx+24h], 28h
-273F:625D C3 retn
- talk_add_voice_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- voice_tick_proc proc near
-273F:625E 83 6D 24 01 sub word ptr [di+ANIM_VOICE_CTR], 1 ; Decrement countdown ctr
-273F:6262 74 3A jz loc_1247 ; Jump if zero
-273F:6264 8B 5D 1E mov bx, [di+ANIM_VOICE_CHAR_ID]
-273F:6267 E8 AA7E call get_room_resource_pointer
-273F:626A 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
-273F:626D 3B 44 06 cmp ax, [si+HS_ROOM_NUM] ; Still in same room as char?
-273F:6270 75 2C jne loc_1247 ; If not then unload
-273F:6272 F7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
-273F:6277 74 25 jz loc_1247 ; Jump if zero
-273F:6279 E8 E532 call room_check_x_extents
-273F:627C 74 06 jz loc_1246 ; Jump if zero
-273F:627E C7 45 02 0008 mov word ptr [di+ANIM_Y], -120
-273F:6283 C3 retn
-273F:6284 loc_1246: ; xref 273F:627C
-273F:6284 8A 44 35 mov al, [si+HS_TALK_X]
-273F:6287 98 cbw
-273F:6288 03 44 0D add ax, [si+HS_X]
-273F:628B 05 000C add ax, 12
-273F:628E 89 05 mov [di], ax
-
-273F:6290 8A 44 36 mov al,[si+HS_TALK_Y]
-273F:6293 98 cbw
-273F:6294 03 44 0F add ax,[si+HS_Y]
-273F:6297 2D 0012 sub ax, 18
-273F:629A 89 45 02 mov [di+ANIM_Y], ax
-273F:629D C3 retn
-273F:629E loc_1247: ; xref 273F:6262, 6270, 6277
-273F:629E E9 AFD6 jmp animation_unload_2
- voice_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0113
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- handle_talking proc near
-273F:62A1 83 3E 9838 01 cmp data_1087,1 ; (31E4:9838=0)
-273F:62A6 72 3C jb loc_ret_1249 ; Jump if below
-273F:62A8 74 3B jz loc_1250 ; Jump if zero
-273F:62AA 83 3E 9838 02 cmp data_1087,2 ; (31E4:9838=0)
-273F:62AF 74 75 je loc_1251 ; Jump if equal
-273F:62B1 83 06 9838 01 add data_1087,1 ; (31E4:9838=0)
-273F:62B6 A1 9847 mov ax,data_1093 ; (31E4:9847=0)
-273F:62B9 39 06 9838 cmp data_1087,ax ; (31E4:9838=0)
-273F:62BD 72 25 jb loc_ret_1249 ; Jump if below
-273F:62BF C7 06 9838 0000 mov data_1087,0 ; (31E4:9838=0)
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:64BC, 8DDF
-
-273F:62C5 sub_147:
-273F:62C5 loc_1248: ; xref 273F:149F, 65DB
-273F:62C5 úA1 11C2 mov ax, talk_dialog_left
-273F:62C8 8B 1E 11C0 mov bx, talk_dialog_top
-273F:62CC 8B 2E 11C4 mov bp, talk_dialog_width
-273F:62D0 8B 16 11C6 mov dx, talk_dialog_height
-273F:62D4 B1 81 mov cl, 81h
-273F:62D6 E8 A8B6 call sub_22 ; (0B8F)
-273F:62D9 C6 06 9837 00 mov talk_dialog_active, 0
-273F:62DE C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
-
-273F:62E4 loc_ret_1249: ; xref 273F:62A6, 62BD
-273F:62E4 C3 retn
-
-
-273F:62E5 loc_1250: ; xref 273F:62A8
-273F:62E5 C7 06 9847 0014 mov data_439,14h ; (273F:9847=0F7F5h)
-273F:62EB C6 06 9837 01 mov talk_dialog_active, 1
-273F:62F0 83 06 9838 01 add data_431,1 ; (273F:9838=5C8Bh)
-273F:62F5 BF CCE0 mov di, offset talk_character_buffer
-273F:62F8 8B 1E 983B mov bx, talk_character_id
-273F:62FC E8 AA20 call get_room_resource_pointer3
-273F:62FF 8B 44 02 mov ax, [si+HSH_NAME] ; Get character name
-273F:6302 80 E4 1F and ah, 1Fh
-273F:6305 E8 1A32 call decode_string
-273F:6308 A1 983D mov ax, data_434 ; (273F:983D=3B75h)
-273F:630B E8 005A call decode_character_and_hotspot_names
-273F:630E BF CCF4 mov di, offset talk_text_buffer
-273F:6311 A1 983D mov ax, data_434
-273F:6314 E8 1A23 call decode_string
-273F:6317 BF CCF4 mov di, offset talk_text_buffer
-273F:631A úBE CCE0 mov si, offset talk_character_buffer
-273F:631D E8 B72A call talk_dialog_init
-273F:6320 C6 06 4B40 01 mov data_791, 1
-273F:6325 C3 retn
-273F:6326 loc_1251: ; xref 273F:62AF
-273F:6326 83 06 9847 03 add data_439,3 ; (273F:9847=0F7F5h)
-273F:632B F6 06 CE20 80 test game_flags, 80h
-273F:6330 75 12 jnz loc_1253 ; Jump if not zero
-273F:6332 F6 06 CE20 03 test game_flags, 3
-273F:6337 74 06 jz loc_1252 ; Jump if zero
-273F:6339 80 2E CE20 01 sub game_flags, 1
-273F:633E C3 retn
-273F:633F loc_1252: ; xref 273F:6337
-273F:633F 80 0E CE20 01 or game_flags, 1
-273F:6344 loc_1253: ; xref 273F:6330
-273F:6344 C6 06 4B40 01 mov data_791, 1
-273F:6349 úBB B9F9 mov bx, talk_speech_ptr
-273F:634C E8 B849 call sub_51 ; (1B98)
-273F:634F 0B C0 or ax,ax ; Zero ?
-273F:6351 74 14 jz loc_ret_1254 ; Jump if zero
-273F:6353 83 06 9838 01 add data_431, 1
-273F:6358 C6 06 4B40 00 mov data_791, 0
-273F:635D 80 26 CE20 F0 and game_flags, 0F0h
-273F:6362 80 0E CE20 05 or game_flags, 5
-
-273F:6367 loc_ret_1254: ; xref 273F:6351
-273F:6367 C3 retn
- handle_talking endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:630B, 6428
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- decode_character_and_hotspot_names proc near
-273F:6368 E8 1B28 call decode_character_and_hotspot_names_init
-273F:636B 8A D8 mov bl,al
-273F:636D 56 push si
-273F:636E 53 push bx
-273F:636F BF 4B43 mov di, offset hotspot_name
-273F:6372 A1 9843 mov ax, current_hotspot_id
-273F:6375 E8 1B2E call decode_hotspot_name
-273F:6378 5B pop bx
-273F:6379 5E pop si
-273F:637A 56 push si
-273F:637B BF 4B93 mov di, offset character_name
-273F:637E A1 9845 mov ax, current_character_id
-273F:6381 E8 1B22 call decode_hotspot_name
-273F:6384 5E pop si
-273F:6385 C3 retn
- decode_character_and_hotspot_names endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- ;* No entry point to code
-273F:6386 B9 03E7 mov cx,3E7h
-273F:6389 B8 0001 mov ax,1
-273F:638C E8 FDC3 call sub_143 ; (6152)
-273F:638F C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:52A9
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- display_message_dialog proc near
-273F:6390 89 16 4B41 mov saved_dest_character, dx
-273F:6394 53 push bx
-273F:6395 8B D9 mov bx, cx
-273F:6397 E8 A94E call get_room_resource_pointer
-273F:639A 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:639D 5B pop bx
-273F:639E B2 01 mov dl,1
-273F:63A0 EB 19 jmp display_message_dialog_4
- ; si = HS [from cx], bx = param1, dl = 1
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:4613, 5BC1, 5CCD
-
- display_message_dialog_2:
-273F:63A2 8B 16 BA1B mov dx, active_hotspot_id
-273F:63A6 89 16 4B41 mov saved_dest_character, dx
-273F:63AA 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
-273F:63AD B2 01 mov dl,1
-273F:63AF EB 0A jmp display_message_dialog_4
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:465A, 466E, 467E, 576B, 5D0F
- ; ax = Id stored in a sequence offset: 801ah for "look through" window
- ; si = player hotspot rec, di = player animation slot
-
- display_message_dialog_3:
-273F:63B1 ú80 E4 7F and ah, 7Fh
-273F:63B4 8B D8 mov bx, ax
-273F:63B6 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
-273F:63B9 33 D2 xor dx,dx
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:8D20
-
- display_message_dialog_4:
-273F:63BB 8B C1 mov ax,cx
-273F:63BD E8 A92A call get_room_resource_pointer2 ; Get hs resource
-273F:63C0 8B 7C 0B mov di,[si+HS_ANIM_OFFSET] ; Get char's hotspot Id
-273F:63C3 B8 47D5 mov ax, messages_seg
-273F:63C6 8E C0 mov es, ax
-273F:63C8 8B C3 mov ax, bx
-273F:63CA 87 CA xchg cx, dx
-273F:63CC BB 0000 mov bx, 0
-; ax = the passed offset with high bit cleared: eg. 801A for window look throug => 1Ah
-; si=hotspot rec, di=player anim slot, dx=character hotspot Id
-273F:63CF loc_1258: ; Find entry for char Id
-273F:63CF ú26: 39 17 cmp es:[bx],dx
-273F:63D2 74 05 je loc_1259
-273F:63D4 83 C3 04 add bx,4
-273F:63D7 EB F6 jmp short loc_1258
-273F:63D9 loc_1259:
-273F:63D9 26: 8B 5F 02 mov bx,es:[bx+2] ; bx<=5Ch
-273F:63DD 80 E4 7F and ah,7Fh
-273F:63E0 52 push dx
-273F:63E1 BA 08C4 mov dx,8C4h
-273F:63E4 loc_1260: ; xref 273F:63F3
-273F:63E4 ú26: 83 3F FF cmp word ptr es:[bx],0FFFFh ; Check [5ch]
-273F:63E8 74 0E je loc_1262 ; End of list?
-273F:63EA 26: 3B 47 02 cmp ax,es:[bx+2] ; Found 1Ah?
-273F:63EE 74 05 je loc_1261 ; Jump if equal
-273F:63F0 83 C3 04 add bx,4
-273F:63F3 EB EF jmp short loc_1260 ; Loop through table
-273F:63F5 loc_1261:
-273F:63F5 26: 8B 17 mov dx, es:[bx] ; dx<=811fh
-273F:63F8 loc_1262:
-273F:63F8 8B C2 mov ax,dx ; ax=811fh
-273F:63FA 5A pop dx ; dx=3e8h
-273F:63FB 3D 0076 cmp ax, 76h
-273F:63FE 74 08 je loc_1263 ; Jump if equal
-273F:6400 3D 0120 cmp ax,120h
-273F:6403 75 06 jne loc_1264 ; Jump if not equal
-273F:6405 E9 0157 jmp loc_1279 ; (655F)
-273F:6408 loc_1263: ; xref 273F:63FE
-273F:6408 E9 0144 jmp loc_1278 ; (654F)
-273F:640B loc_1264: ; xref 273F:6403
-273F:640B 0B C0 or ax,ax ; Zero ?
-273F:640D 74 3A jz loc_ret_1267 ; Jump if zero
-273F:640F 79 22 jns loc_1265 ; Jump if not sign
-
-273F:6411 8B D8 mov bx, ax
-273F:6413 80 E7 7F and bh, 7Fh ; bx=811fh
-273F:6416 A1 BA19 mov ax, use_hotspot_id ; ax=41Bh
-273F:6419 A3 9843 mov current_hotspot_id, ax
-273F:641C A1 BA1B mov ax, active_hotspot_id ; ax=41bh
-273F:641F A3 9845 mov current_character_id, ax
-273F:6422 56 push si
-273F:6423 57 push di
-273F:6424 55 push bp
-273F:6425 53 push bx
-273F:6426 8B C3 mov ax,bx
-; ax=11fh, dx=player id, si=player hotspot, di=player anim slot
-273F:6428 E8 FF3D call decode_character_and_hotspot_names
-273F:642B 5B pop bx
-273F:642C E8 248D call display_dialog
-273F:642F 5D pop bp
-273F:6430 5F pop di
-273F:6431 5E pop si
-273F:6432 C3 retn
-
-; Further handling code for if the ax is not signed. In this case the message
-; is shown as a talk dialog
-
-273F:6433 loc_1265: ; xref 273F:640F
-273F:6433 8B D0 mov dx, ax
-273F:6435 F6 C1 FF test cl, 0FFh
-273F:6438 74 07 jz loc_1266 ; Jump if zero
-273F:643A 8B 0E 4B41 mov cx, saved_dest_character
-273F:643E E9 FCEE jmp talk_setup_3
-273F:6441 loc_1266: ; xref 273F:6438
-273F:6441 B9 03E7 mov cx, 3E7h
-273F:6444 B0 01 mov al, 1
-273F:6446 E9 FD09 jmp talk_converse_2
-
-273F:6449 loc_ret_1267: ; xref 273F:640D, 6451
-273F:6449 C3 retn
- display_message_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:61AF
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sub_153 proc near
-273F:644A 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Don't display dialog if
-273F:644D 3B 06 9832 cmp ax, room_number ; player not in the same
-273F:6451 75 F6 jne loc_ret_1267 ; room as character
-273F:6453 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:6456 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:6459 75 19 jne loc_1268 ; Jump if not equal
-273F:645B C7 06 9841 0000 mov data_1091, 0
-273F:6461 A3 983F mov data_1090, ax
-273F:6464 81 7C 39 03E7 cmp word ptr [si+HS_TALK_CHAR_ID], NOONE_HOTSPOT_ID
-273F:6469 74 44 je loc_1273 ; Jump if equal
-273F:646B 8B 5C 39 mov bx, [si+NOONE_HOTSPOT_ID]
-273F:646E 89 1E 9841 mov data_1091, bx
-273F:6472 EB 3B jmp short loc_1273 ; (64AF)
-273F:6474 loc_1268: ; xref 273F:6459
-273F:6474 39 06 983F cmp data_1090, ax
-273F:6478 74 08 je loc_1269 ; Jump if equal
-273F:647A 39 06 9841 cmp data_1091, ax
-273F:647E 74 02 je loc_1269 ; Jump if equal
-273F:6480 EB 0F jmp short loc_1270 ; (6491)
-273F:6482 loc_1269: ; xref 273F:6478, 647E
-273F:6482 8B 5C 39 mov bx,[si+HS_TALK_CHAR_ID]
-273F:6485 3B 1E 983F cmp bx, data_1090
-273F:6489 74 24 je loc_1273 ; Jump if equal
-273F:648B 3B 1E 9841 cmp bx, data_1091
-273F:648F 74 1E je loc_1273 ; Jump if equal
-273F:6491 loc_1270: ; xref 273F:6480
-273F:6491 F6 06 9849 FF test pathfind_data, 0FFh
-273F:6496 75 16 jnz loc_ret_1272 ; Jump if not zero
-273F:6498 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:649E 74 07 jz loc_1271 ; Jump if zero
-273F:64A0 F6 06 983A FF test byte ptr data_432,0FFh ; (273F:983A=0F7h)
-273F:64A5 75 07 jnz loc_ret_1272 ; Jump if not zero
-273F:64A7 loc_1271: ; xref 273F:649E
-273F:64A7 C6 06 983A 00 mov byte ptr data_432,0 ; (273F:983A=0F7h)
-273F:64AC EB 06 jmp short loc_1274 ; (64B4)
-
-273F:64AE loc_ret_1272: ; xref 273F:6496, 64A5
-273F:64AE C3 retn
-273F:64AF loc_1273: ; xref 273F:6469, 6472, 6489, 648F
-273F:64AF C6 06 983A 01 mov byte ptr data_432,1 ; (273F:983A=0F7h)
-273F:64B4 loc_1274: ; xref 273F:64AC
-273F:64B4 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:64BA 74 03 jz loc_1275 ; Jump if zero
-273F:64BC E8 FE06 call sub_147 ; (62C5)
-273F:64BF loc_1275: ; xref 273F:64BA
-273F:64BF C7 06 9838 0001 mov data_431,1 ; (273F:9838=5C8Bh)
-273F:64C5 8B 44 3C mov ax, [si+HS_RESPONSE_ID]
-273F:64C8 A3 983D mov data_434,ax ; (273F:983D=3B75h)
-273F:64CB 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:64CE A3 983B mov talk_character_id, ax
-273F:64D1 8B 44 3E mov ax, [si+HS_V3E]
-273F:64D4 A3 9843 mov current_hotspot_id, ax
-273F:64D7 8B 44 40 mov ax, [si+HS_V40]
-273F:64DA A3 9845 mov current_character_id, ax
-273F:64DD C3 retn
- ;* No entry point to code
-273F:64DE 89 1E 983F mov data_1090, bx
-273F:64E2 89 0E 9841 mov data_1091, cx
-273F:64E6 C3 retn
- sub_153 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:654F, 655F
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- add_puzzled_animation proc near
-273F:64E7 8B DA mov bx,dx
-273F:64E9 53 push bx
-273F:64EA E8 A7FB call get_room_resource_pointer
-273F:64ED úBB B14E mov bx, offset animation_table
-273F:64F0 5A pop dx
-273F:64F1 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:64F4 locloop_1276:
-273F:64F4 F6 47 0C FF test byte ptr [bx+ANIM_LAYER], 0FFh
-273F:64F8 74 0D jz loc_1277 ; Jump if anim has no layer
-273F:64FA 39 57 1E cmp [bx+ANIM_VOICE_CHAR_ID], dx
-273F:64FD 74 08 je loc_1277 ; Jump if equal
-273F:64FF 83 C3 29 add bx, ANIMATION_SLOT_SIZE
-273F:6502 E2 F0 loop locloop_1276 ; Loop if cx > 0
-
-273F:6504 83 EB 29 sub bx, ANIMATION_SLOT_SIZE
-273F:6507 loc_1277:
-273F:6507 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:650A 89 47 0E mov [bx+ANIM_ROOM_NUM], ax
-273F:650D C7 47 1B FFFE mov word ptr [bx+ANIM_HOTSPOT_ID], 0FFFEh
-273F:6512 C7 47 20 0028 mov word ptr [bx+ANIM_CTR], 40
-273F:6517 89 57 1E mov [bx+ANIM_VOICE_CHAR_ID], dx
-273F:651A C6 47 0D 01 mov byte ptr [bx+ANIM_FLAGS], 1
-273F:651E C7 47 04 0020 mov word ptr [bx+ANIM_WIDTH], 20h
-273F:6523 C7 47 06 0012 mov word ptr [bx+ANIM_HEIGHT], 12h
-273F:6528 C6 47 0C 01 mov byte ptr [bx+ANIM_LAYER], 1
-273F:652C C6 47 10 01 mov byte ptr [bx+ANIM_CAN_UNLOAD], 1
-273F:6530 C7 47 11 6571 mov word ptr [bx+ANIM_TICK_PROC], offset tick_proc_6571
-273F:6535 C7 47 13 0013 mov word ptr [bx+ANIM_WIDTH_COPY], 19
-273F:653A C7 47 15 0012 mov word ptr [bx+ANIM_HEIGHT_COPY], 18
-273F:653F 8B 44 1B mov ax, [si+HS_HEIGHT_COPY]
-273F:6542 01 47 15 add [bx+ANIM_HEIGHT_COPY], ax
-273F:6545 C7 47 17 0001 mov word ptr [bx+ANIM_Y_CORRECTION], 1
-273F:654A C6 47 28 00 mov byte ptr [bx+ANIM_START_COLOUR], 0
-273F:654E C3 retn
- add_puzzled_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUPPORT CODE
- ;
- ; This is support code used by display_message_dialog
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:654F loc_1278: ; xref 273F:6408
-273F:654F E8 FF95 call add_puzzled_animation
-273F:6552 A1 5813 mov ax, voice_pixel_segment
-273F:6555 89 47 0A mov [bx+ANIM_SEGMENT], ax
-273F:6558 A1 5817 mov ax, voice_frame_offset
-273F:655B 89 47 08 mov [bx+ANIM_FRAME_OFFSET], ax
-273F:655E C3 retn
-273F:655F loc_1279: ; xref 273F:6405
-273F:655F E8 FF85 call add_puzzled_animation
-273F:6562 A1 5813 mov ax, voice_pixel_segment
-273F:6565 89 47 0A mov [bx+ANIM_SEGMENT], ax
-273F:6568 A1 5817 mov ax, voice_frame_offset
-273F:656B D1 E0 shl ax, 1
-273F:656D 89 47 08 mov [bx+ANIM_FRAME_OFFSET], ax
-273F:6570 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- tick_proc_6571 proc near
-273F:6571 8B 45 1E mov ax, [di+ANIM_VOICE_CHAR_ID]
-273F:6574 E8 A773 call get_room_resource_pointer2
-273F:6577 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:657A 3B 45 0E cmp ax, [di+ANIM_ROOM_NUM]
-273F:657D 75 0B jne loc_1280 ; Jump if not equal
-273F:657F 83 6D 20 01 sub word ptr [di+ANIM_CTR], 1
-273F:6583 74 05 jz loc_1280 ; Jump if zero
-273F:6585 E8 E226 call room_check_x_extents
-273F:6588 74 03 jz loc_1281 ; Jump if zero
-273F:658A loc_1280: ; xref 273F:657D, 6583
-273F:658A E9 ACEA jmp animation_unload_2
-273F:658D loc_1281: ; xref 273F:6588
-273F:658D 8A 44 35 mov al, [si+HS_TALK_X]
-273F:6590 98 cbw ; Convrt byte to word
-273F:6591 03 44 0D add ax, [si+HS_X]
-273F:6594 05 000C add ax, 12
-273F:6597 89 05 mov [di+ANIM_X], ax
-
-273F:6599 8A 44 36 mov al, [si+HS_TALK_Y]
-273F:659C 98 cbw
-273F:659D 03 44 0F add ax, [si+HS_Y]
-273F:65A0 2D 0014 sub ax, 20
-273F:65A3 89 45 02 mov [di+ANIM_Y], ax
-273F:65A6 C3 retn
- tick_proc_6571 endp
- ;* No entry point to code
-273F:65A7 A1 983B mov ax, talk_character_id
-273F:65AA E8 A73B call get_room_resource_pointer
-273F:65AD C7 44 37 0000 mov word ptr [si+HS_TALK_COUNTDOWN],0
-273F:65B2 81 3E 983B 03E8 cmp talk_character_id, PLAYER_HOTSPOT_ID
-273F:65B8 75 16 jne loc_1282 ; Jump if not equal
-273F:65BA A1 9841 mov ax, data_1091
-273F:65BD 0B C0 or ax,ax ; Zero ?
-273F:65BF 74 0F jz loc_1282 ; Jump if zero
-273F:65C1 E8 A724 call get_room_resource_pointer
-273F:65C4 F7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
-273F:65C9 74 05 jz loc_1282 ; Jump if zero
-273F:65CB C7 44 37 0028 mov word ptr [si+HS_TALK_COUNTDOWN],28h
-273F:65D0 loc_1282: ; xref 273F:65B8, 65BF, 65C9
-273F:65D0 C6 06 9837 00 mov talk_dialog_active, 0
-273F:65D5 C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
-273F:65DB E9 FCE7 jmp loc_1248 ; (62C5)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; TABLE LIST
- ;
- ; The following table provides a list of offsets for handler methods
- ; for each of the possible actions in actions_list
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:65DE 0000 actions_proc_list dw 0
-273F:65E0 6698 dw offset action_do ; 01 - GET
-273F:65E2 0000 dw 0
-273F:65E4 6698 dw offset action_do ; 03 - PUSH
-273F:65E6 6698 dw offset action_do ; 04 - PULL
-273F:65E8 6698 dw offset action_do ; 05 - OPERATE
-273F:65EA 6698 dw offset action_do ; 06 - OPEN
-273F:65EC 6698 dw offset action_do ; 07 - CLOSE
-273F:65EE 6698 dw offset action_do ; 08 - LOCK
-273F:65F0 6698 dw offset action_do ; 09 - UNLOCK
-273F:65F2 66B3 dw offset action_use ; 10 - USE
-273F:65F4 66B3 dw offset action_use ; 11 - GIVE
-273F:65F6 6698 dw offset action_do ; 12 - TALK TO
-273F:65F8 6738 dw offset action_tell ; 13 - TELL
-273F:65FA 6698 dw offset action_do ; 14 - BUY
-273F:65FC 6735 dw offset action_look ; 15 - LOOK
-273F:65FE 6698 dw offset action_do ; 16 - LOOK AT
-273F:6600 6698 dw offset action_do ; 17 - LOOK THROUGH
-273F:6602 66E0 dw offset action_ask ; 18 - ASK
-273F:6604 669E dw offset action_consume ; 19 - EAT (unused)
-273F:6606 669E dw offset action_consume ; 20 - DRINK
-273F:6608 669B dw offset action_status ; 21 - STATUS
-273F:660A 6698 dw offset action_do ; 22 - GO TO
-273F:660C 6698 dw offset action_do ; 23 - RETURN
-273F:660E 6698 dw offset action_do ; 24 - BRIBE
-273F:6610 669E dw offset action_consume ; 25 - EXAMINE
-273F:6612 6698 dw offset action_do ; 26 - unused
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1431
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_show_rightclick_menu proc near
-
-273F:6614 E8 A1D7 call backup_variables
-273F:6617 loc_1283: ; xref 273F:670A
-273F:6617 úC7 06 3382 FFFF mov data_3382, 0FFFFh
-273F:661D C7 06 3380 0000 mov data_3380, 0
-273F:6623 C7 06 335E 0001 mov data_75e, 1
-273F:6629 B8 0007 mov ax, 7
-273F:662C F7 26 336A mul word ptr ds:data_79e ; (0874:336A=7500h) dx:ax = data * ax
-273F:6630 03 06 336E add ax,ds:data_81e ; (0874:336E=8090h)
-273F:6634 A3 335A mov ds:data_74e,ax ; (0874:335A=0C70Fh)
-273F:6637 C7 06 3350 0000 mov ds:saved_zero, 0
-273F:663D A1 3356 mov ax, ds:saved_room_number
-273F:6640 A3 3379 mov saved_room_number2, ax
-273F:6643 A1 3358 mov ax, data_3358
-273F:6646 0B C0 or ax,ax ; Hotspot highlighted?
-273F:6648 74 19 jz loc_1284 ; No, so set up for look/status menu
-
-273F:664A 1E push ds
-273F:664B 8E DD mov ds,bp
-273F:664D E8 A69A call get_room_resource_pointer2
-273F:6650 8B 04 mov ax,[si]
-273F:6652 8B 54 02 mov dx,[si+2]
-273F:6655 1F pop ds
-273F:6656 81 E2 10FF and dx,10FFh
-273F:665A 75 0D jnz loc_1285 ; Jump if not zero
-273F:665C 0B C0 or ax,ax ; Zero ?
-273F:665E 75 09 jnz loc_1285 ; Jump if not zero
-273F:6660 E9 00D2 jmp action_handle
-
-; Execution reaches this point if no hotspot was highlighted. ie. for the look/status menu
-
-273F:6663 loc_1284:
-273F:6663 B8 4000 mov ax,4000h ; Default actions: Drink, Examine,
-273F:6666 BA 0118 mov dx,118h ; Look, Status
-
-273F:6669 loc_1285:
-273F:6669 F6 06 3360 FF test byte ptr ds:data_76e,0FFh
-273F:666E 75 07 jnz loc_1286
-273F:6670 25 F9FD and ax,0F9FDh ; Removes Drink, Examine actions..
-273F:6673 81 E2 FEF3 and dx,0FEF3h ; maybe others as well
-273F:6677 loc_1286:
-273F:6677 F7 06 337E FFFF test word ptr ds:data_88e,0FFFFh ; (0874:337E=0)
-273F:667D 75 04 jnz loc_1287
-273F:667F 81 E2 FF7F and dx,0FF7Fh ; Remove Bribe
-273F:6683 loc_1287:
-273F:6683 E8 02D4 call popmenu_populate_list
-273F:6686 E8 0308 call menu_make_selections
-273F:6689 0B C0 or ax,ax ; Any selection made
-273F:668B 78 51 js loc_1290 ; No, so jump out
-
-273F:668D D1 E0 shl ax,1 ; Get jump destination
-273F:668F 8B D8 mov bx,ax ; for particular atcion
-273F:6691 2E: 8B 87 65DE mov ax, cs:actions_proc_list[bx]
-273F:6696 FF E0 jmp ax ; Jump to handler
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Action handler for use actions
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-
-273F:6698 E8 028A action_do: call sub_159
-273F:669B E9 0097 action_status: jmp action_handle
-
-
-273F:669E E8 A6B3 action_consume: call sub_32 ; (0D54)
-273F:66A1 F7 06 31E4 FFFF test popmenu_entry_count, 0FFFFh
-273F:66A7 74 57 jz loc_1291 ; Jump if zero
-273F:66A9 E8 02E5 call menu_make_selections
-273F:66AC 0B C0 or ax,ax ; Zero ?
-273F:66AE 78 53 js loc_1292 ; Jump if sign=1
-273F:66B0 E9 0082 jmp action_handle
-
-
-273F:66B3 E8 A69E action_use: call sub_32 ; (0D54)
-273F:66B6 F7 06 31E4 FFFF test popmenu_entry_count, 0FFFFh
-273F:66BC 74 42 jz loc_1291 ; Jump if zero
-273F:66BE E8 02D0 call menu_make_selections ; Select inventory item
-273F:66C1 0B C0 or ax,ax ; Zero ?
-273F:66C3 78 3E js loc_1292 ; Jump if sign=1
-273F:66C5 8B 36 3380 mov si, data_3380 ; Get the hotspot
-273F:66C9 83 BC 337C 0B cmp word ptr ds:data_86e+1[si],0Bh ; (0874:337C=4758h)
-273F:66CE 75 05 jne loc_1288 ; Jump if not equal
-273F:66D0 BB 33E4 mov bx,33E4h
-273F:66D3 EB 03 jmp short loc_1289 ; (66D8)
-273F:66D5 loc_1288: ; xref 273F:66CE
-273F:66D5 BB 33E0 mov bx,33E0h
-273F:66D8 loc_1289: ; xref 273F:66D3
-273F:66D8 E8 0575 call sub_166 ; (6C50)
-273F:66DB E8 0247 call sub_159 ; (6925)
-273F:66DE loc_1290: ; xref 273F:668B
-273F:66DE EB 55 jmp action_handle
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- action_ask proc near
-273F:66E0 E8 0242 call sub_159 ; (6925)
-273F:66E3 BB 33F1 mov bx, 33F1h
-273F:66E6 E8 0567 call sub_166 ; (6C50)
-273F:66E9 B8 0001 mov ax, ACTION_GET
-273F:66EC E8 A6C0 call prepare_ask_item_list
-273F:66EF F7 06 31E4 FFFF test popmenu_entry_count, 0FFFFh
-273F:66F5 74 09 jz loc_1291 ; Jump if zero
-273F:66F7 E8 0297 call menu_make_selections
-273F:66FA 0B C0 or ax, ax ; Zero ?
-273F:66FC 78 05 js loc_1292 ; Jump if sign=1
-273F:66FE EB 35 jmp action_handle
-273F:6700 loc_1291:
-273F:6700 E8 000A call sub_156
-273F:6703 loc_1292:
-273F:6703 1E push ds
-273F:6704 8E DD mov ds, bp
-273F:6706 E8 08FC call menubar_clear_image
-273F:6709 1F pop ds
-273F:670A E9 FF0A jmp loc_1283 ; (6617)
- action_ask endp
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:6700, 6792
-
-273F:670D sub_156:
-273F:670D BB 33E7 mov bx,33E7h
-273F:6710 E8 053D call sub_166 ; (6C50)
-273F:6713 1E push ds
-273F:6714 07 pop es
-273F:6715 úBF 3174 mov di,3174h ; (273F:3174=7)
-273F:6718 B8 33E2 mov ax,33E2h
-273F:671B B9 0012 mov cx,12h
-273F:671E F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:6720 C7 06 334C 0000 mov popmenu_num_entries, 0
-273F:6726 E8 02B8 call menu_make_selections_select
-273F:6729 1E push ds
-273F:672A 8E DD mov ds,bp
-273F:672C loc_1293: ; xref 273F:6731
-273F:672C F6 06 11D5 FF test byte ptr ds:data_29e,0FFh ; (0000:11D5=8Bh)
-273F:6731 75 F9 jnz loc_1293 ; Jump if not zero
-273F:6733 1F pop ds
-273F:6734 C3 retn
-
-
-273F:6735 úE9 A153 action_handle: jmp action_handle_2
-
- room_show_rightclick_menu endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- action_tell proc near
-
-273F:6738 E8 01EA call sub_159 ; (6925)
-273F:673B BB 33E4 mov bx,33E4h
-273F:673E E8 050F call sub_166 ; (6C50)
-273F:6741 loc_1295: ; xref 273F:676E, 67EA
-273F:6741 ú83 3E 3380 08 cmp data_3380, 8
-273F:6746 75 06 jne loc_1296 ; Jump if not equal
-273F:6748 A1 3356 mov ax, saved_room_number
-273F:674B A3 3379 mov saved_room_number2, ax
-273F:674E loc_1296:
-273F:674E BA 006A mov dx,6Ah ; Actions set to select from
-273F:6751 B8 07FD mov ax,7FDh
-273F:6754 E8 0203 call popmenu_populate_list
-273F:6757 E8 0237 call menu_make_selections ; Choose action from list
-273F:675A 0B C0 or ax,ax ; Zero ?
-273F:675C 79 12 jns loc_1298 ; Jump if not sign
-273F:675E 83 3E 3380 08 cmp data_3380, 8
-273F:6763 74 9E je loc_1292 ; Jump if equal
-273F:6765 loc_1297: ; xref 273F:6795, 679C, 683E
-273F:6765 úE8 00F7 call sub_157 ; (685F)
-273F:6768 C7 06 3380 0008 mov data_3380, 8
-273F:676E EB D1 jmp short loc_1295 ; (6741)
-273F:6770 loc_1298: ; xref 273F:675C
-273F:6770 3D 0017 cmp ax, ACTION_RETURN
-273F:6773 74 4B je loc_1304 ; Jump if equal
-273F:6775 3D 000A cmp ax, ACTION_USE
-273F:6778 74 0A je loc_1299 ; Jump if equal
-273F:677A 3D 0014 cmp ax, ACTION_DRINK
-273F:677D 74 05 je loc_1299 ; Jump if equal
-273F:677F 3D 000B cmp ax, ACTION_GIVE
-273F:6782 75 03 jne loc_1300 ; Jump if not equal
-273F:6784 loc_1299: ; xref 273F:6778, 677D
-273F:6784 B8 0001 mov ax, ACTION_GET
-273F:6787 loc_1300: ; xref 273F:6782
-273F:6787 E8 A625 call prepare_ask_item_list
-273F:678A F7 06 31E4 FFFF test data_31e4, 0FFFFh
-273F:6790 75 05 jnz loc_1302 ; Jump if not zero
-273F:6792 loc_1301: ; xref 273F:683B
-273F:6792 úE8 FF78 call sub_156 ; (670D)
-273F:6795 EB CE jmp short loc_1297 ; (6765)
-273F:6797 loc_1302: ; xref 273F:6790
-273F:6797 E8 01F7 call menu_make_selections
-273F:679A 0B C0 or ax,ax ; Zero ?
-273F:679C 78 C7 js loc_1297 ; Jump if sign=1
-273F:679E 8B 1E 3380 mov bx, data_3380
-273F:67A2 8B 9F 337C mov bx,word ptr data_267+1[bx] ; (273F:337C=4Eh)
-273F:67A6 83 FB 16 cmp bx,16h
-273F:67A9 75 03 jne loc_1303 ; Jump if not equal
-273F:67AB A3 3379 mov saved_room_number2, ax
-273F:67AE loc_1303: ; xref 273F:67A9
-273F:67AE 83 FB 12 cmp bx,12h
-273F:67B1 74 4E je loc_1308 ; Jump if equal
-273F:67B3 83 FB 0B cmp bx,0Bh
-273F:67B6 74 66 je loc_1309 ; Jump if equal
-273F:67B8 83 FB 0A cmp bx,0Ah
-273F:67BB 75 03 jne loc_1304 ; Jump if not equal
-273F:67BD E9 0081 jmp loc_1312 ; (6841)
-273F:67C0 loc_1304: ; xref 273F:6773, 67BB, 681C, 6839
- ; 685C
-273F:67C0 ú83 3E 3380 4A cmp data_3380, 4Ah
-273F:67C5 73 0B jae loc_1305 ; Jump if above or =
-273F:67C7 BE 2E41 mov si,2E41h
-273F:67CA BB 2E53 mov bx,2E53h
-273F:67CD B9 FFFF mov cx,0FFFFh
-273F:67D0 EB 09 jmp short loc_1306 ; (67DB)
-273F:67D2 loc_1305: ; xref 273F:67C5
-273F:67D2 BE 2E4B mov si,2E4Bh
-273F:67D5 BB 2E55 mov bx,2E55h
-273F:67D8 B9 0001 mov cx,1
-273F:67DB loc_1306: ; xref 273F:67D0
-273F:67DB E8 054D call sub_168 ; (6D2B)
-273F:67DE E8 01B0 call menu_make_selections
-273F:67E1 0B C0 or ax,ax ; Zero ?
-273F:67E3 78 59 js loc_1311 ; Jump if sign=1
-273F:67E5 3D 7D00 cmp ax,7D00h
-273F:67E8 75 03 jne loc_1307 ; Jump if not equal
-273F:67EA E9 FF54 jmp loc_1295 ; (6741)
-273F:67ED loc_1307: ; xref 273F:67E8
-273F:67ED A1 338A mov ax,word ptr ds:[338Ah] ; (273F:338A=8E9h)
-273F:67F0 A3 335E mov data_335E, ax
-273F:67F3 33 FF xor di,di ; Zero register
-273F:67F5 E8 00AD call sub_158 ; (68A5)
-273F:67F8 BB 33F5 mov bx,33F5h
-273F:67FB E8 0452 call sub_166 ; (6C50)
-273F:67FE E9 FF34 jmp action_handle
-273F:6801 loc_1308: ; xref 273F:67B1
-273F:6801 BB 33F1 mov bx,33F1h
-273F:6804 E8 0449 call sub_166 ; (6C50)
-273F:6807 B8 0001 mov ax, ACTION_GET
-273F:680A E8 A5A2 call prepare_ask_item_list
-273F:680D F7 06 31E4 FFFF test data_31e4, 0FFFFh
-273F:6813 74 26 jz loc_1310 ; Jump if zero
-273F:6815 E8 0179 call menu_make_selections
-273F:6818 0B C0 or ax,ax ; Zero ?
-273F:681A 78 22 js loc_1311 ; Jump if sign=1
-273F:681C EB A2 jmp short loc_1304 ; (67C0)
-273F:681E loc_1309: ; xref 273F:67B6
-273F:681E BB 33E4 mov bx,33E4h
-273F:6821 E8 042C call sub_166 ; (6C50)
-273F:6824 B8 000B mov ax, ACTION_GIVE
-273F:6827 E8 A585 call prepare_ask_item_list
-273F:682A F7 06 31E4 FFFF test data_31e4, 0FFFFh
-273F:6830 74 09 jz loc_1310 ; Jump if zero
-273F:6832 E8 015C call menu_make_selections
-273F:6835 0B C0 or ax,ax ; Zero ?
-273F:6837 78 05 js loc_1311 ; Jump if sign=1
-273F:6839 EB 85 jmp short loc_1304 ; (67C0)
-273F:683B loc_1310: ; xref 273F:6813, 6830, 6853
-273F:683B E9 FF54 jmp loc_1301 ; (6792)
-273F:683E loc_1311: ; xref 273F:67E3, 681A, 6837, 685A
-273F:683E E9 FF24 jmp loc_1297 ; (6765)
-273F:6841 loc_1312: ; xref 273F:67BD
-273F:6841 BB 33E0 mov bx,33E0h
-273F:6844 E8 0409 call sub_166 ; (6C50)
-273F:6847 B8 000A mov ax, ACTION_USE
-273F:684A E8 A562 call prepare_ask_item_list
-273F:684D F7 06 31E4 FFFF test data_31e4, 0FFFFh
-273F:6853 74 E6 jz loc_1310 ; Jump if zero
-273F:6855 E8 0139 call menu_make_selections
-273F:6858 0B C0 or ax,ax ; Zero ?
-273F:685A 78 E2 js loc_1311 ; Jump if sign=1
-273F:685C E9 FF61 jmp loc_1304 ; (67C0)
-
- action_tell endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6765
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:685F sub_157 proc near
-273F:685F 83 2E 3380 04 sub data_3380, 4
-273F:6864 8B 1E 3380 mov bx, data_3380
-273F:6868 8B 87 3382 mov ax, data_3382[bx]
-273F:686C C7 87 3382 FFFF mov data_3382[bx],0FFFFh
-273F:6872 B9 0140 mov cx,140h
-273F:6875 50 push ax
-273F:6876 33 D2 xor dx,dx ; Zero register
-273F:6878 F7 F1 div cx ; ax,dx rem=dx:ax/reg
-273F:687A 52 push dx
-273F:687B 50 push ax
-273F:687C A1 335E mov ax, data_335E
-273F:687F 33 D2 xor dx,dx ; Zero register
-273F:6881 F7 F1 div cx ; ax,dx rem=dx:ax/reg
-273F:6883 5A pop dx
-273F:6884 3B C2 cmp ax,dx
-273F:6886 74 0B je loc_1313 ; Jump if equal
-273F:6888 1E push ds
-273F:6889 52 push dx
-273F:688A 8E DD mov ds,bp
-273F:688C E8 078D call talk_clear_line
-273F:688F 58 pop ax
-273F:6890 1F pop ds
-273F:6891 EB 04 jmp short loc_1314 ; (6897)
-273F:6893 loc_1313: ; xref 273F:6886
-273F:6893 0B C0 or ax,ax ; Zero ?
-273F:6895 74 03 jz loc_1315 ; Jump if zero
-273F:6897 loc_1314: ; xref 273F:6891
-273F:6897 E8 0474 call sub_167 ; (6D0E)
-273F:689A loc_1315: ; xref 273F:6895
-273F:689A F7 26 336A mul word ptr ds:[336Ah] ; (273F:336A=40C7h) dx:ax = data * ax
-273F:689E 8B F8 mov di,ax
-273F:68A0 58 pop ax
-273F:68A1 8F 06 335E pop data_335E
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:67F5
-
-273F:68A5 sub_158:
-273F:68A5 8B 1E 3376 mov bx,data_265 ; (273F:3376=0F632h)
-273F:68A9 8E C3 mov es,bx
-273F:68AB 81 3E 3368 362D cmp menu_items_proc2, offset vga_menu_items
-273F:68B1 75 1D jne loc_1317 ; Jump if not equal
-273F:68B3 03 F8 add di,ax
-273F:68B5 BB 0140 mov bx,140h
-273F:68B8 2B D8 sub bx,ax
-273F:68BA BA 0008 mov dx,8
-273F:68BD 32 C0 xor al,al ; Zero register
-273F:68BF loc_1316: ; xref 273F:68CC
-273F:68BF 57 push di
-273F:68C0 8B CB mov cx,bx
-273F:68C2 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:68C4 5F pop di
-273F:68C5 ú81 C7 0140 add di,data_1458e ; (F632:0140=0)
-273F:68C9 83 EA 01 sub dx,1
-273F:68CC 75 F1 jnz loc_1316 ; Jump if not zero
-273F:68CE EB 4C jmp short loc_1320 ; (691C)
-273F:68D0 loc_1317: ; xref 273F:68B1
-273F:68D0 8A C8 mov cl,al
-273F:68D2 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:68D4 24 FC and al,0FCh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 252
-
-273F:68D6 80 E1 07 and cl,7
-273F:68D9 03 F8 add di,ax
-273F:68DB BA FF00 mov dx,0FF00h
-273F:68DE D3 FA sar dx,cl ; Shift w/sign fill
-273F:68E0 BB 00A0 mov bx,0A0h
-273F:68E3 2B D8 sub bx,ax
-273F:68E5 B6 08 mov dh,8
-273F:68E7 57 push di
-273F:68E8 loc_1318: ; xref 273F:68FE
-273F:68E8 26: 20 15 and es:[di],dl
-273F:68EB 26: 20 55 01 and es:[di+1],dl
-273F:68EF 26: 20 55 02 and es:[di+2],dl
-273F:68F3 26: 20 55 03 and es:[di+3],dl
-273F:68F7 ú81 C7 00A0 add di,data_1457e ; (F632:00A0=0)
-273F:68FB 80 EE 01 sub dh,1
-273F:68FE 75 E8 jnz loc_1318 ; Jump if not zero
-273F:6900 5F pop di
-273F:6901 83 C7 04 add di,4
-273F:6904 83 EB 04 sub bx,4
-273F:6907 74 13 jz loc_1320 ; Jump if zero
-273F:6909 B2 08 mov dl,8
-273F:690B 32 C0 xor al,al ; Zero register
-273F:690D loc_1319: ; xref 273F:691A
-273F:690D 57 push di
-273F:690E 8B CB mov cx,bx
-273F:6910 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:6912 5F pop di
-273F:6913 81 C7 00A0 add di,0A0h
-273F:6917 80 EA 01 sub dl,1
-273F:691A 75 F1 jnz loc_1319 ; Jump if not zero
-273F:691C loc_1320: ; xref 273F:68CE, 6907
-273F:691C 8E C5 mov es,bp
-273F:691E 26: C6 06 4BF0 02 mov byte ptr es:data_46e,2 ; (0000:4BF0=28h)
-273F:6924 C3 retn
- sub_157 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6698, 66DB, 66E0, 6738
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6925 sub_159 proc near
-273F:6925 8B 1E 3358 mov bx, data_3358 ; Get the hotspot Id
-273F:6929 8B 36 3380 mov si, data_3380 ; Get offset
-273F:692D 89 9C 3382 mov data_3382[si], bx ; Store hotspot Id
-273F:6931 89 9C 3384 mov word ptr ds:[3384h][si], bx
-273F:6935 C7 84 3386 FFFF mov word ptr ds:[3386h][si], 0FFFFh
-273F:693B 83 06 3380 04 add data_3380, 4
-273F:6940 1E push ds
-273F:6941 8E DD mov ds,bp
-273F:6943 E8 A3D9 call get_room_resource_pointer3 ; Get header pointer
-273F:6946 8B 44 02 mov ax, [si+HSH_NAME]
-273F:6949 80 E4 1F and ah, 1Fh
-273F:694C 1F pop ds
-273F:694D BF 30D4 mov di, offset hotspot_display_buffer
-273F:6950 E8 13E7 call decode_string ; Decode hotspot name
-273F:6953 BB 30D4 mov bx, offset hotspot_display_buffer
-273F:6956 E8 02F7 call sub_166 ; Displays name
-273F:6959 C3 retn
- sub_159 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6683, 6754
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:695A popmenu_populate_list proc near
-
-273F:695A C7 06 31E4 0000 mov popmenu_entry_count, 0
-273F:6960 úBF 31E6 mov di, offset popmenu_entry_contents
-273F:6963 úBE 2D5F mov si, offset actions_list
-273F:6966 1E push ds
-273F:6967 07 pop es
-273F:6968 8E DD mov ds,bp
-273F:696A 8B E8 mov bp,ax
-273F:696C B9 0019 mov cx, NUM_ACTIONS ; 19h
-
-273F:696F locloop_1321:
-273F:696F D1 DA rcr dx,1 ; Rotate thru carry
-273F:6971 D1 DD rcr bp,1 ; Rotate thru carry
-273F:6973 73 0F jnc loc_1323 ; If bit wasn't set, don't add
-
-273F:6975 A5 movsw ; Copy over action Id
-273F:6976 loc_1322:
-273F:6976 AC lodsb ; Copy over action name
-273F:6977 AA stosb
-273F:6978 0A C0 or al,al
-273F:697A 75 FA jnz loc_1322
-273F:697C 26: 83 06 31E4 01 add es:popmenu_entry_count, 1 ; Increment # actions
-273F:6982 EB 06 jmp short loc_1325
-
-273F:6984 loc_1323:
-273F:6984 AD lodsw ; Skip over action Id
-273F:6985 loc_1324:
-273F:6985 AC lodsb ; Scan over action name
-273F:6986 0A C0 or al,al
-273F:6988 75 FB jnz loc_1324
-273F:698A loc_1325:
-273F:698A E2 E3 loop locloop_1321 ; Loop through remaining actions
-
-273F:698C 8C DD mov bp,ds
-273F:698E 06 push es
-273F:698F 1F pop ds
-273F:6990 C3 retn
-
- popmenu_populate_list endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6686, 66A9, 66BE, 66F7, 6757, 6797, 67DE
- ; 6815, 6832, 6855
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menu_make_selections proc near
-
-273F:6991 8B 36 3380 mov si, data_3380
-273F:6995 F6 84 3383 80 test byte ptr ds:[3383h][si],80h ; (273F:3383=74h)
-273F:699A 74 36 jz loc_1327 ; Jump if zero
-273F:699C C6 06 337D 00 mov data_269,0 ; (273F:337D=0)
-273F:69A1 E8 01E6 call sub_165 ; (6B8A)
-273F:69A4 E8 003A call menu_make_selections_select
-273F:69A7 0B C0 or ax,ax ; Zero ?
-273F:69A9 78 26 js loc_ret_1326 ; Jump if sign=1
-273F:69AB 3D 7CFF cmp ax,7CFFh
-273F:69AE 74 21 je loc_ret_1326 ; Jump if equal
-273F:69B0 FF 36 335E push data_335E
-273F:69B4 E8 0299 call sub_166 ; (6C50)
-273F:69B7 5B pop bx
-273F:69B8 8B 36 3380 mov si, data_3380
-273F:69BC 89 9C 3382 mov data_3382[si],bx
-273F:69C0 89 84 3384 mov word ptr ds:[3384h][si],ax ; (273F:3384=810Ch)
-273F:69C4 83 C6 04 add si,4
-273F:69C7 C7 84 3382 FFFF mov data_3382[si], 0FFFFh
-273F:69CD 89 36 3380 mov data_3380, si
-
-273F:69D1 loc_ret_1326: ; xref 273F:69A9, 69AE
-273F:69D1 C3 retn
-273F:69D2 loc_1327: ; xref 273F:699A
-273F:69D2 83 06 3380 04 add data_3380, 4
-273F:69D7 8B 84 3384 mov ax,word ptr ds:[3384h][si] ; (273F:3384=810Ch)
-273F:69DB C6 06 337D 01 mov data_269,1 ; (273F:337D=0)
-273F:69E0 C3 retn
-
- menu_make_selections endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6726, 69A4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menu_make_selections_select proc near
-
-273F:69E1 A1 3362 mov ax, popmenu_current_index
-273F:69E4 3B 06 334C cmp ax, popmenu_num_entries
-273F:69E8 72 06 jb loc_1328 ; Jump if below
-273F:69EA C7 06 3362 0000 mov popmenu_current_index, 0
-273F:69F0 loc_1328: ; xref 273F:69E8
-273F:69F0 A1 334C mov ax, popmenu_num_entries
-273F:69F3 D0 E8 shr al,1 ; Shift w/zeros fill
-273F:69F5 04 01 add al,1
-273F:69F7 3C 06 cmp al,6
-273F:69F9 72 02 jb loc_1329 ; Jump if below
-273F:69FB B0 05 mov al,5
-273F:69FD loc_1329: ; xref 273F:69F9
-273F:69FD A3 335C mov popmenu_num_visible_items, ax
-273F:6A00 1E push ds
-273F:6A01 55 push bp
-273F:6A02 50 push ax
-273F:6A03 FF 36 334E push word ptr ds:[334Eh] ; (273F:334E=83E4h)
-273F:6A07 8E DD mov ds,bp
-273F:6A09 FF 16 0752 call word ptr ds:data_16e ; (0000:0752=0)
-273F:6A0D E8 AAFE call room_add_animations
-273F:6A10 5B pop bx
-273F:6A11 5A pop dx
-273F:6A12 FF 16 0778 call word ptr ds:data_21e ; (0000:0778=5253h)
-273F:6A16 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:6A1B 75 28 jne loc_1330 ; Jump if not equal
-
-273F:6A1D 5D pop bp
-273F:6A1E 1F pop ds
-273F:6A1F E8 00E1 call menu_create_popmenu
-273F:6A22 1E push ds
-273F:6A23 55 push bp
-273F:6A24 8E DD mov ds,bp
-273F:6A26 FF 16 0744 call [show_screen_proc]
-273F:6A2A 5D pop bp
-273F:6A2B 1F pop ds
-273F:6A2C 8A 1E 334E mov bl,byte ptr ds:[334Eh] ; (273F:334E=0E4h)
-273F:6A30 8A 16 335C mov dl,byte ptr [popmenu_num_visible_items]
-273F:6A34 1E push ds
-273F:6A35 55 push bp
-273F:6A36 8E DD mov ds,bp
-273F:6A38 FF 16 0778 call word ptr ds:data_21e ; (0000:0778=5253h)
-273F:6A3C 5D pop bp
-273F:6A3D 1F pop ds
-273F:6A3E E8 00C2 call menu_create_popmenu
-273F:6A41 1E push ds
-273F:6A42 55 push bp
-273F:6A43 8E DD mov ds,bp
-273F:6A45 loc_1330: ; xref 273F:6A1B
-273F:6A45 FF 16 0744 call [show_screen_proc]
-273F:6A49 5D pop bp
-273F:6A4A 1F pop ds
-273F:6A4B B8 000B mov ax,0Bh
-273F:6A4E CD 33 int 33h ; Mouse driver ax=func 000Bh
- ; read motion counters, cx & dx
-273F:6A50 C7 06 3366 0000 mov mouse_y_change, 0
-273F:6A56 8E C5 mov es,bp
-273F:6A58 26: C6 06 11DA 00 mov mouse_buttons2, 0
-273F:6A5E EB 07 jmp short loc_1332 ; (6A67)
-273F:6A60 loc_1331: ; xref 273F:6AA3, 6ACC, 6AD9
-273F:6A60 úE8 00A0 call menu_create_popmenu
-273F:6A63 FF 16 3368 call [menu_items_proc2] ; Add the menu items
-273F:6A67 loc_1332:
-273F:6A67 F7 06 334C FFFF test popmenu_num_entries, 0FFFFh ; Any entries at all?
-273F:6A6D 74 6C jz sub162_abort ; No, so abort
-273F:6A6F 8E C5 mov es,bp
-273F:6A71 26: F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:6A77 75 6C jnz loc_1339 ; Jump if not zero
-273F:6A79 E8 2AA4 call check_keypress ; Any key pressed?
-273F:6A7C 74 1C jz loc_1333 ; No, so skip kbd code
-273F:6A7E 8A D8 mov bl,al
-273F:6A80 B8 FFFF mov ax,0FFFFh ; Constant for moving up
-273F:6A83 80 FB C8 cmp bl,0C8h ; Up arrow pressed?
-273F:6A86 74 46 je sub162_moveup ; Yes, so handle it
-273F:6A88 B8 0001 mov ax,1 ; Constant for moving down
-273F:6A8B 80 FB D0 cmp bl,0D0h ; Down arrow pressed?
-273F:6A8E 74 29 je sub162_movedown ; Yes, so handle it
-273F:6A90 80 FB 0D cmp bl,0Dh ; Enter key pressed?
-273F:6A93 74 5A je sub162_select ; Yes, so handle it
-273F:6A95 80 FB 20 cmp bl,20h ; ' '
-273F:6A98 74 41 je sub162_abort
-273F:6A9A loc_1333:
-273F:6A9A 33 D2 xor dx,dx ; Zero register
-273F:6A9C B8 000B mov ax,0Bh
-273F:6A9F CD 33 int 33h ; Mouse driver ax=func 000Bh
- ; read motion counters, cx & dx
-273F:6AA1 0B D2 or dx,dx ; Zero ?
-273F:6AA3 74 BB jz loc_1331 ; Jump if zero
-273F:6AA5 03 16 3366 add dx, mouse_y_change
-273F:6AA9 8B C2 mov ax,dx
-273F:6AAB 99 cwd ; Word to double word
-273F:6AAC úBB 000A mov bx,0Ah ; (273F:000A=23h)
-273F:6AAF F7 FB idiv bx ; ax,dx rem=dx:ax/reg
-273F:6AB1 89 16 3366 mov mouse_y_change, dx
-273F:6AB5 0B C0 or ax,ax ; Zero ?
-273F:6AB7 78 15 js sub162_moveup
-273F:6AB9 sub162_movedown:
-273F:6AB9 03 06 3362 add ax, popmenu_current_index
-273F:6ABD 3B 06 334C cmp ax, popmenu_num_entries
-273F:6AC1 72 06 jb loc_1335 ; Jump if below
-273F:6AC3 A1 334C mov ax, popmenu_num_entries
-273F:6AC6 2D 0001 sub ax,1
-273F:6AC9 loc_1335: ; xref 273F:6AC1
-273F:6AC9 A3 3362 mov popmenu_current_index, ax
-273F:6ACC EB 92 jmp short loc_1331 ; (6A60)
-273F:6ACE sub162_moveup:
-273F:6ACE 03 06 3362 add ax, popmenu_current_index
-273F:6AD2 72 02 jc loc_1337
-273F:6AD4 33 C0 xor ax,ax ; Already at first item
-273F:6AD6 loc_1337:
-273F:6AD6 A3 3362 mov popmenu_current_index, ax
-273F:6AD9 EB 85 jmp short loc_1331 ; (6A60)
-273F:6ADB sub162_abort:
-273F:6ADB A1 3364 mov ax, popmenu_prior_index ; Reset index to prior one
-273F:6ADE A3 3362 mov popmenu_current_index, ax
-273F:6AE1 B8 FFFF mov ax,0FFFFh
-273F:6AE4 C3 retn
-273F:6AE5 loc_1339: ; xref 273F:6A77
-273F:6AE5 8E C5 mov es,bp
-273F:6AE7 26: F6 06 11DA 02 test byte ptr es:data_32e,2 ; (0000:11DA=0D3h)
-273F:6AED 75 EC jnz sub162_abort
-273F:6AEF sub162_select:
-273F:6AEF A1 3362 mov ax, popmenu_current_index ; Backup selected index
-273F:6AF2 A3 3364 mov popmenu_prior_index, ax
-273F:6AF5 C7 06 3362 0000 mov popmenu_current_index, 0
-273F:6AFB 8B 1E 3372 mov bx,word ptr ds:[3372h] ; (273F:3372=0C31Fh)
-273F:6AFF 8B 47 FD mov ax,[bx-3]
-273F:6B02 C3 retn
-
- menu_make_selections_select endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6A1F, 6A3E, 6A60
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6B03 menu_create_popmenu proc near
-273F:6B03 A1 3376 mov ax,data_265 ; (273F:3376=0F632h)
-273F:6B06 8E C0 mov es,ax
-273F:6B08 55 push bp
-273F:6B09 8B 36 3362 mov si, popmenu_current_index
-273F:6B0D D1 E6 shl si,1 ; Shift w/zeros fill
-273F:6B0F D1 E6 shl si,1 ; Shift w/zeros fill
-273F:6B11 ú81 C6 3174 add si,3174h ; (273F:3174=7)
-273F:6B15 8B 3E 335A mov di,word ptr ds:[335Ah] ; (273F:335A=0ACA4h)
-273F:6B19 8B 2E 337B mov bp,data_267 ; (273F:337B=4EB9h)
-273F:6B1D B8 0005 mov ax,5
-273F:6B20 2B 06 335C sub ax, popmenu_num_visible_items
-273F:6B24 74 0E jz loc_1341 ; Jump if zero
-273F:6B26 8B D8 mov bx,ax
-273F:6B28 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:6B2A D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:6B2C 03 F3 add si,bx
-273F:6B2E F7 26 336A mul word ptr ds:[336Ah] ; (273F:336A=40C7h) dx:ax = data * ax
-273F:6B32 03 F8 add di,ax
-273F:6B34 loc_1341: ; xref 273F:6B24
-273F:6B34 8B 0E 335C mov cx, popmenu_num_visible_items
-273F:6B38 D0 E1 shl cl,1 ; Shift w/zeros fill
-273F:6B3A 80 E9 01 sub cl,1
-
-273F:6B3D locloop_1342: ; xref 273F:6B4D
-273F:6B3D 56 push si
-273F:6B3E 57 push di
-273F:6B3F 8B 34 mov si,[si]
-273F:6B41 E8 000D call sub_164 ; (6B51)
-273F:6B44 5F pop di
-273F:6B45 5E pop si
-273F:6B46 03 3E 336A add di,word ptr ds:[336Ah] ; (273F:336A=40C7h)
-273F:6B4A 83 C6 04 add si,4
-273F:6B4D E2 EE loop locloop_1342 ; Loop if cx > 0
-
-273F:6B4F 5D pop bp
-273F:6B50 C3 retn
- menu_create_popmenu endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6B41
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6B51 sub_164 proc near
-273F:6B51 51 push cx
-273F:6B52 AC lodsb ; String [si] to al
-273F:6B53 8B 16 33DE mov dx,word ptr ds:[33DEh] ; (273F:33DE=0F300h)
-273F:6B57 3B 0E 335C cmp cx, popmenu_num_visible_items
-273F:6B5B 75 08 jne loc_1343 ; Jump if not equal
-273F:6B5D 8B 16 33DC mov dx,word ptr ds:[33DCh] ; (273F:33DC=7BB9h)
-273F:6B61 89 36 3372 mov word ptr ds:[3372h],si ; (273F:3372=0C31Fh)
-273F:6B65 loc_1343: ; xref 273F:6B5B
-273F:6B65 8A 0E 334E mov cl,byte ptr ds:[334Eh] ; (273F:334E=0E4h)
-273F:6B69 32 ED xor ch,ch ; Zero register
-
-273F:6B6B locloop_1344: ; xref 273F:6B78
-273F:6B6B AC lodsb ; String [si] to al
-273F:6B6C 0A C0 or al,al ; Zero ?
-273F:6B6E 74 0C jz locloop_1345 ; Jump if zero
-273F:6B70 FF 16 336C call word ptr ds:[336Ch] ; (273F:336C=8301h)
-273F:6B74 03 3E 336E add di,word ptr ds:[336Eh] ; (273F:336E=1EDh)
-273F:6B78 E2 F1 loop locloop_1344 ; Loop if cx > 0
-
-273F:6B7A EB 0C jmp short loc_1346 ; (6B88)
-
-273F:6B7C locloop_1345: ; xref 273F:6B6E, 6B86
-273F:6B7C B0 20 mov al,20h ; ' '
-273F:6B7E FF 16 336C call word ptr ds:[336Ch] ; (273F:336C=8301h)
-273F:6B82 03 3E 336E add di,word ptr ds:[336Eh] ; (273F:336E=1EDh)
-273F:6B86 E2 F4 loop locloop_1345 ; Loop if cx > 0
-
-273F:6B88 loc_1346: ; xref 273F:6B7A
-273F:6B88 59 pop cx
-273F:6B89 C3 retn
- sub_164 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:69A1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6B8A sub_165 proc near
-273F:6B8A 55 push bp
-273F:6B8B 1E push ds
-273F:6B8C 07 pop es
-273F:6B8D úBE 31E4 mov si, popmenu_entry_count
-273F:6B90 AD lodsw ; String [si] to ax
-273F:6B91 8B C8 mov cx,ax
-273F:6B93 89 0E 334C mov popmenu_num_entries, cx
-273F:6B97 0B C9 or cx,cx ; Zero ?
-273F:6B99 75 02 jnz loc_1347 ; Jump if not zero
-273F:6B9B 5D pop bp
-273F:6B9C C3 retn
-273F:6B9D loc_1347: ; xref 273F:6B99
-273F:6B9D C7 06 334E 0004 mov word ptr ds:[334Eh],4 ; (273F:334E=83E4h)
-273F:6BA3 úBF 30D4 mov di,30D4h ; (273F:30D4=11h)
-
-273F:6BA6 locloop_1348: ; xref 273F:6C14
-273F:6BA6 83 C6 02 add si,2
-273F:6BA9 89 75 04 mov [di+4],si
-273F:6BAC C7 45 06 0000 mov word ptr [di+6],0
-273F:6BB1 51 push cx
-273F:6BB2 B9 0004 mov cx,4
-273F:6BB5 8B EF mov bp,di
-
-273F:6BB7 locloop_1349: ; xref 273F:6BBD
-273F:6BB7 AC lodsb ; String [si] to al
-273F:6BB8 AA stosb ; Store al to es:[di]
-273F:6BB9 0A C0 or al,al ; Zero ?
-273F:6BBB 74 05 jz loc_1351 ; Jump if zero
-273F:6BBD E2 F8 loop locloop_1349 ; Loop if cx > 0
-
-273F:6BBF EB 03 jmp short loc_1352 ; (6BC4)
-
-273F:6BC1 locloop_1350: ; xref 273F:6BC2
-273F:6BC1 AA stosb ; Store al to es:[di]
-273F:6BC2 loc_1351: ; xref 273F:6BBB
-273F:6BC2 E2 FD loop locloop_1350 ; Loop if cx > 0
-
-273F:6BC4 loc_1352: ; xref 273F:6BBF
-273F:6BC4 59 pop cx
-273F:6BC5 8B 45 FC mov ax,[di-4]
-273F:6BC8 8B 55 FE mov dx,[di-2]
-273F:6BCB úBB 30D4 mov bx,30D4h ; (273F:30D4=11h)
-273F:6BCE loc_1353: ; xref 273F:6BF8
-273F:6BCE ú3B DD cmp bx,bp
-273F:6BD0 74 28 je loc_1357 ; Jump if equal
-273F:6BD2 3A 07 cmp al,[bx]
-273F:6BD4 72 1B jb loc_1355 ; Jump if below
-273F:6BD6 75 13 jnz loc_1354 ; Jump if not zero
-273F:6BD8 3A 67 01 cmp ah,[bx+1]
-273F:6BDB 72 14 jb loc_1355 ; Jump if below
-273F:6BDD 75 0C jnz loc_1354 ; Jump if not zero
-273F:6BDF 3A 57 02 cmp dl,[bx+2]
-273F:6BE2 72 0D jb loc_1355 ; Jump if below
-273F:6BE4 75 05 jnz loc_1354 ; Jump if not zero
-273F:6BE6 3A 77 03 cmp dh,[bx+3]
-273F:6BE9 72 06 jb loc_1355 ; Jump if below
-273F:6BEB loc_1354: ; xref 273F:6BD6, 6BDD, 6BE4
-273F:6BEB 83 45 02 04 add word ptr [di+2],4
-273F:6BEF EB 04 jmp short loc_1356 ; (6BF5)
-273F:6BF1 loc_1355: ; xref 273F:6BD4, 6BDB, 6BE2, 6BE9
-273F:6BF1 83 47 06 04 add word ptr [bx+6],4
-273F:6BF5 loc_1356: ; xref 273F:6BEF
-273F:6BF5 83 C3 08 add bx,8
-273F:6BF8 EB D4 jmp short loc_1353 ; (6BCE)
-273F:6BFA loc_1357: ; xref 273F:6BD0
-273F:6BFA B4 01 mov ah,1
-273F:6BFC 83 EE 01 sub si,1
-273F:6BFF loc_1358: ; xref 273F:6C05
-273F:6BFF 80 C4 01 add ah,1
-273F:6C02 AC lodsb ; String [si] to al
-273F:6C03 0A C0 or al,al ; Zero ?
-273F:6C05 75 F8 jnz loc_1358 ; Jump if not zero
-273F:6C07 3A 26 334E cmp ah,byte ptr ds:[334Eh] ; (273F:334E=0E4h)
-273F:6C0B 72 04 jb loc_1359 ; Jump if below
-273F:6C0D 88 26 334E mov byte ptr ds:[334Eh],ah ; (273F:334E=0E4h)
-273F:6C11 loc_1359: ; xref 273F:6C0B
-273F:6C11 83 C7 04 add di,4
-273F:6C14 E2 90 loop locloop_1348 ; Loop if cx > 0
-
-273F:6C16 8B 0E 334C mov cx, popmenu_num_entries
-273F:6C1A 51 push cx
-273F:6C1B 81 EF 30D4 sub di,30D4h
-273F:6C1F D1 EF shr di,1 ; Shift w/zeros fill
-273F:6C21 ú81 C7 3184 add di,3184h ; (273F:3184=33h)
-273F:6C25 B8 33E2 mov ax,33E2h
-273F:6C28 B9 0008 mov cx,8
-273F:6C2B F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:6C2D úBE 30D8 mov si,30D8h ; (273F:30D8=0FFh)
-273F:6C30 úBF 3174 mov di,3174h ; (273F:3174=7)
-273F:6C33 B8 33E2 mov ax,33E2h
-273F:6C36 B9 0008 mov cx,8
-273F:6C39 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:6C3B 59 pop cx
-273F:6C3C 33 D2 xor dx,dx ; Zero register
-
-273F:6C3E locloop_1360: ; xref 273F:6C4C
-273F:6C3E AD lodsw ; String [si] to ax
-273F:6C3F 8B 1C mov bx,[si]
-273F:6C41 89 01 mov [bx+di],ax
-273F:6C43 89 51 02 mov [bx+di+2],dx
-273F:6C46 83 C6 06 add si,6
-273F:6C49 83 C2 01 add dx,1
-273F:6C4C E2 F0 loop locloop_1360 ; Loop if cx > 0
-
-273F:6C4E 5D pop bp
-
-273F:6C4F loc_ret_1361: ; xref 273F:6C55
-273F:6C4F C3 retn
- sub_165 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:66D8, 66E6, 6710, 673E, 67FB, 6804, 6821
- ; 6844, 6956, 69B4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6C50 sub_166 proc near
-273F:6C50 F6 06 337D FF test data_269,0FFh ; (273F:337D=0)
-273F:6C55 75 F8 jnz loc_ret_1361 ; Jump if not zero
-273F:6C57 8E C5 mov es,bp
-273F:6C59 26: C6 06 4BF0 02 mov byte ptr es:data_46e,2 ; (0000:4BF0=28h)
-273F:6C5F 50 push ax
-273F:6C60 53 push bx
-273F:6C61 8B F3 mov si,bx
-273F:6C63 A1 3370 mov ax,word ptr ds:[3370h] ; (273F:3370=0E375h)
-273F:6C66 8E C0 mov es,ax
-273F:6C68 33 D2 xor dx,dx ; Zero register
-273F:6C6A B1 03 mov cl,3
-273F:6C6C loc_1362: ; xref 273F:6C7A
-273F:6C6C úAC lodsb ; String [si] to al
-273F:6C6D 2C 20 sub al,20h ; ' '
-273F:6C6F 72 0B jc loc_1363 ; Jump if carry Set
-273F:6C71 32 E4 xor ah,ah ; Zero register
-273F:6C73 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:6C75 8B D8 mov bx,ax
-273F:6C77 26: 02 17 add dl,es:[bx]
-273F:6C7A EB F0 jmp short loc_1362 ; (6C6C)
-273F:6C7C loc_1363: ; xref 273F:6C6F
-273F:6C7C 26: 02 16 0000 add dl,es:data_1454e ; (E375:0000=0)
-273F:6C81 A1 335E mov ax, data_335E
-273F:6C84 3D 0001 cmp ax,1
-273F:6C87 75 09 jne loc_1364 ; Jump if not equal
-273F:6C89 1E push ds
-273F:6C8A 50 push ax
-273F:6C8B 8E DD mov ds,bp
-273F:6C8D E8 0375 call menubar_clear_image
-273F:6C90 58 pop ax
-273F:6C91 1F pop ds
-273F:6C92 loc_1364: ; xref 273F:6C87
-273F:6C92 BB 0140 mov bx,140h
-273F:6C95 8A CA mov cl,dl
-273F:6C97 32 ED xor ch,ch ; Zero register
-273F:6C99 33 D2 xor dx,dx ; Zero register
-273F:6C9B F7 F3 div bx ; ax,dx rem=dx:ax/reg
-273F:6C9D 8B F2 mov si,dx
-273F:6C9F 03 F1 add si,cx
-273F:6CA1 3B F3 cmp si,bx
-273F:6CA3 72 17 jb loc_1365 ; Jump if below
-273F:6CA5 05 0001 add ax,1
-273F:6CA8 50 push ax
-273F:6CA9 50 push ax
-273F:6CAA 53 push bx
-273F:6CAB 51 push cx
-273F:6CAC 1E push ds
-273F:6CAD 8E DD mov ds,bp
-273F:6CAF E8 036A call talk_clear_line
-273F:6CB2 1F pop ds
-273F:6CB3 59 pop cx
-273F:6CB4 5B pop bx
-273F:6CB5 58 pop ax
-273F:6CB6 F7 E3 mul bx ; dx:ax = reg * ax
-273F:6CB8 A3 335E mov data_335E, ax
-273F:6CBB 58 pop ax
-273F:6CBC loc_1365: ; xref 273F:6CA3
-273F:6CBC 01 0E 335E add data_335E, cx
-273F:6CC0 0B C0 or ax,ax ; Zero ?
-273F:6CC2 74 03 jz loc_1366 ; Jump if zero
-273F:6CC4 E8 0047 call sub_167 ; (6D0E)
-273F:6CC7 loc_1366: ; xref 273F:6CC2
-273F:6CC7 8B CA mov cx,dx
-273F:6CC9 F7 26 336A mul word ptr ds:[336Ah] ; (273F:336A=40C7h) dx:ax = data * ax
-273F:6CCD 8B F8 mov di,ax
-273F:6CCF 8B 1E 3376 mov bx,data_265 ; (273F:3376=0F632h)
-273F:6CD3 8E C3 mov es,bx
-273F:6CD5 B7 06 mov bh,6
-273F:6CD7 5E pop si
-273F:6CD8 81 3E 3368 362D cmp menu_items_proc2, offset vga_menu_items
-273F:6CDE 75 04 jne loc_1367 ; Jump if not equal
-273F:6CE0 03 F9 add di,cx
-273F:6CE2 EB 0C jmp short loc_1368 ; (6CF0)
-273F:6CE4 loc_1367: ; xref 273F:6CDE
-273F:6CE4 8B C1 mov ax,cx
-273F:6CE6 80 E1 07 and cl,7
-273F:6CE9 25 01F8 and ax,1F8h
-273F:6CEC D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:6CEE 03 F8 add di,ax
-273F:6CF0 loc_1368: ; xref 273F:6CE2, 6D0A
-273F:6CF0 úAC lodsb ; String [si] to al
-273F:6CF1 2C 20 sub al,20h ; ' '
-273F:6CF3 72 17 jc loc_1369 ; Jump if carry Set
-273F:6CF5 1E push ds
-273F:6CF6 55 push bp
-273F:6CF7 8B 2E 3374 mov bp,data_264 ; (273F:3374=0FF32h)
-273F:6CFB 1F pop ds
-273F:6CFC 8B 1E 076E mov bx, data_571
-273F:6D00 8A 7F 04 mov bh,[bx+4]
-273F:6D03 FF 16 075A call [display2_character_proc]
-273F:6D07 8C DD mov bp,ds
-273F:6D09 1F pop ds
-273F:6D0A EB E4 jmp short loc_1368 ; (6CF0)
-273F:6D0C loc_1369: ; xref 273F:6CF3
-273F:6D0C 58 pop ax
-273F:6D0D C3 retn
- sub_166 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6897, 6CC4
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6D0E sub_167 proc near
-273F:6D0E 50 push ax
-273F:6D0F 51 push cx
-273F:6D10 52 push dx
-273F:6D11 1E push ds
-273F:6D12 55 push bp
-273F:6D13 8E DD mov ds,bp
-273F:6D15 33 C0 xor ax,ax ; Zero register
-273F:6D17 33 DB xor bx,bx ; Zero register
-273F:6D19 BD 0027 mov bp,27h
-273F:6D1C BA 0001 mov dx,1
-273F:6D1F B9 0001 mov cx,1
-273F:6D22 E8 9E5E call sub_21 ; (0B83)
-273F:6D25 5D pop bp
-273F:6D26 1F pop ds
-273F:6D27 5A pop dx
-273F:6D28 59 pop cx
-273F:6D29 58 pop ax
-273F:6D2A C3 retn
- sub_167 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:67DB
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6D2B sub_168 proc near
-273F:6D2B 1E push ds
-273F:6D2C 1E push ds
-273F:6D2D 07 pop es
-273F:6D2E 8E DD mov ds,bp
-273F:6D30 úBF 31E4 mov di, offset data_31e4
-273F:6D33 0B C9 or cx,cx ; Zero ?
-273F:6D35 79 05 jns loc_1370 ; Jump if not sign
-273F:6D37 8A 4C FF mov cl,[si-1]
-273F:6D3A 32 ED xor ch,ch ; Zero register
-273F:6D3C loc_1370: ; xref 273F:6D35
-273F:6D3C 8B C1 mov ax,cx
-273F:6D3E AB stosw ; Store ax to es:[di]
-
-273F:6D3F locloop_1371: ; xref 273F:6D4B
-273F:6D3F 8B 07 mov ax,[bx]
-273F:6D41 83 C3 02 add bx,2
-273F:6D44 AB stosw ; Store ax to es:[di]
-273F:6D45 loc_1372: ; xref 273F:6D49
-273F:6D45 AC lodsb ; String [si] to al
-273F:6D46 AA stosb ; Store al to es:[di]
-273F:6D47 0A C0 or al,al ; Zero ?
-273F:6D49 75 FA jnz loc_1372 ; Jump if not zero
-273F:6D4B E2 F2 loop locloop_1371 ; Loop if cx > 0
-
-273F:6D4D 1F pop ds
-273F:6D4E C3 retn
- sub_168 endp
-
-273F:6D4F 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- menubar_handle_menu proc near
-
-273F:6D50 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:6D55 C6 06 38B0 01 mov data_781, 1
-273F:6D5A E8 B218 call show_arrow_cursor
-273F:6D5D E8 0287 call sub_173 ; (6FE7)
-273F:6D60 C7 06 4BF1 0000 mov menuitem_table_location, 0
-273F:6D66 loc_1374: ; xref 273F:6E6A, 6EA4
-273F:6D66 úE8 27B7 call check_keypress ; (9520)
-273F:6D69 74 71 jz loc_1380 ; Jump if zero
-273F:6D6B 3C C8 cmp al,0C8h
-273F:6D6D 75 1A jne loc_1375 ; Jump if not equal
-273F:6D6F 83 2E 11D3 08 sub mouse_y, 8
-273F:6D74 83 2E 11D8 08 sub mouse_y2, 8
-273F:6D79 73 5D jnc loc_1379 ; Jump if carry=0
-273F:6D7B C7 06 11D8 0004 mov mouse_y2, 4
-273F:6D81 C7 06 11D3 0004 mov mouse_y, 4
-273F:6D87 EB 4F jmp short loc_1379 ; (6DD8)
-273F:6D89 loc_1375: ; xref 273F:6D6D
-273F:6D89 3C D0 cmp al,0D0h
-273F:6D8B 75 13 jne loc_1376 ; Jump if not equal
-273F:6D8D 83 3E 11D8 64 cmp mouse_y2, 64h
-273F:6D92 73 44 jae loc_1379 ; Jump if above or =
-273F:6D94 83 06 11D8 08 add mouse_y2, 8
-273F:6D99 83 06 11D3 08 add mouse_y, 8
-273F:6D9E EB 38 jmp short loc_1379 ; (6DD8)
-273F:6DA0 loc_1376: ; xref 273F:6D8B
-273F:6DA0 3C CB cmp al,0CBh
-273F:6DA2 75 13 jne loc_1377 ; Jump if not equal
-273F:6DA4 83 3E 11D6 15 cmp mouse_x2, 15h
-273F:6DA9 72 2D jb loc_1379 ; Jump if below
-273F:6DAB 83 2E 11D6 14 sub mouse_x2, 14h
-273F:6DB0 83 2E 11D1 14 sub mouse_x, 14h
-273F:6DB5 EB 21 jmp short loc_1379 ; (6DD8)
-273F:6DB7 loc_1377: ; xref 273F:6DA2
-273F:6DB7 3C CD cmp al,0CDh
-273F:6DB9 75 14 jne loc_1378 ; Jump if not equal
-273F:6DBB 81 3E 11D6 0135 cmp mouse_x2, 135h
-273F:6DC1 73 15 jae loc_1379 ; Jump if above or =
-273F:6DC3 83 06 11D6 14 add mouse_x2, 14h
-273F:6DC8 83 06 11D1 14 add mouse_x, 14h
-273F:6DCD EB 09 jmp short loc_1379 ; (6DD8)
-273F:6DCF loc_1378: ; xref 273F:6DB9
-273F:6DCF 3C 0D cmp al,0Dh
-273F:6DD1 75 09 jne loc_1380 ; Jump if not equal
-273F:6DD3 C6 06 11D5 00 mov mouse_buttons, 0
-273F:6DD8 loc_1379: ; xref 273F:6D79, 6D87, 6D92, 6D9E
- ; 6DA9, 6DB5, 6DC1, 6DCD
-273F:6DD8 FF 16 075E call [show_cursor_proc]
-273F:6DDC loc_1380: ; xref 273F:6D69, 6DD1
-273F:6DDC A1 11D8 mov ax, mouse_y2
-273F:6DDF A3 4BF6 mov word ptr ds:[4BF6h],ax ; (273F:4BF6=0C683h)
-273F:6DE2 A1 11D6 mov ax, mouse_x2
-273F:6DE5 A3 4BF8 mov data_unk1, ax
-273F:6DE8 A0 11D5 mov al, mouse_buttons
-273F:6DEB A2 4BFA mov mouse_buttons_temp, al
-273F:6DEE F6 06 4BF0 FF test byte ptr ds:[4BF0h],0FFh ; (273F:4BF0=3)
-273F:6DF3 75 07 jnz loc_1381 ; Jump if not zero
-273F:6DF5 F6 06 4BF5 FF test byte ptr ds:[4BF5h],0FFh ; (273F:4BF5=0F5h)
-273F:6DFA 74 09 jz loc_1382 ; Jump if zero
-273F:6DFC loc_1381: ; xref 273F:6DF3
-273F:6DFC FF 16 0744 call word ptr [show_screen_proc]
-273F:6E00 C6 06 4BF5 00 mov byte ptr ds:[4BF5h],0 ; (273F:4BF5=0F5h)
-273F:6E05 loc_1382:
-273F:6E05 A1 4CE4 mov ax, data_segment2 ; Stores off-screen copy of menubar
-273F:6E08 8E C0 mov es,ax
-273F:6E0A F6 06 4BFA FF test mouse_buttons_temp, 0FFh ; Mouse button released?
-273F:6E0F 74 5C jz loc_1390 ; Yes
-273F:6E11 83 3E 4BF6 08 cmp word ptr ds:[4BF6h],8
-273F:6E16 72 08 jb loc_1383 ; Jump if below
-273F:6E18 F7 06 4BF1 FFFF test menuitem_table_location, 0FFFFh
-273F:6E1E 75 69 jnz loc_1392 ; Jump if not zero
-273F:6E20 loc_1383: ; xref 273F:6E16
-273F:6E20 úBE 4C0B mov si, offset menuitem_table_info
-273F:6E23 A1 4BF8 mov ax, data_unk1
-273F:6E26 B9 0004 mov cx, MENUITEM_NUM_MENUS ; 4 tables
-
-273F:6E29 locloop_1384: ; xref 273F:6E3C
-273F:6E29 F7 44 0A FFFF test word ptr [si+0Ah],0FFFFh
-273F:6E2E 74 09 jz loc_1385 ; Jump if zero
-273F:6E30 3B 04 cmp ax,[si]
-273F:6E32 72 0A jb loc_1386 ; Jump if below
-273F:6E34 3B 44 02 cmp ax,[si+2]
-273F:6E37 72 07 jb loc_1387 ; Jump if below
-
-273F:6E39 loc_1385: ; table diff is 0Eh
-273F:6E39 83 C6 0E add si, offset menuitem_table_file - offset menuitem_table_info
-273F:6E3C E2 EB loop locloop_1384 ; Loop if cx > 0
-
-273F:6E3E loc_1386: ; xref 273F:6E32
-273F:6E3E 33 F6 xor si,si ; Zero register
-273F:6E40 loc_1387: ; xref 273F:6E37
-273F:6E40 3B 36 4BF1 cmp si, menuitem_table_location
-273F:6E44 74 24 je loc_1389 ; Jump if equal
-273F:6E46 56 push si
-273F:6E47 FF 16 0752 call [show_compressed_screen_proc]
-273F:6E4B E8 A6C0 call room_add_animations
-273F:6E4E 5E pop si
-273F:6E4F 0B F6 or si,si ; Zero ?
-273F:6E51 74 06 jz loc_1388 ; Jump if zero
-273F:6E53 E8 013C call toggle_menu_highlight
-273F:6E56 E8 00B1 call menubar_create_menu
-273F:6E59 loc_1388: ; xref 273F:6E51
-273F:6E59 C7 06 4BF3 0000 mov word ptr ds:[4BF3h],0 ; (273F:4BF3=3E6h)
-273F:6E5F 87 36 4BF1 xchg menuitem_table_location, si
-273F:6E63 0B F6 or si,si ; Menu currently visible?
-273F:6E65 74 03 jz loc_1389 ; No, so skip removing it
-273F:6E67 E8 0128 call toggle_menu_highlight
-273F:6E6A loc_1389: ; xref 273F:6E44, 6E65
-273F:6E6A E9 FEF9 jmp loc_1374 ; (6D66)
-273F:6E6D loc_1390: ; xref 273F:6E0F
-273F:6E6D E8 004C call sub_169 ; (6EBC)
-
-; At this point a menu item has been selected. I suspect that:
-; ax=item index in menu (1 to 3), BP=> 2=Info, 4=File, 3=>Help
-; If no item selected, then bp = 0 & ax = 0
-
-273F:6E70 0B C0 or ax,ax ; Zero ?
-273F:6E72 75 33 jnz loc_1395 ; Jump if not zero
-273F:6E74 loc_1391: ; xref 273F:6EBA
-273F:6E74 úC6 06 38B0 00 mov data_781, 0
-273F:6E79 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:6E7E E8 B0F4 call show_arrow_cursor
-273F:6E81 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:6E86 E9 017C jmp menubar_clear_image
-273F:6E89 loc_1392: ; xref 273F:6E1E
-273F:6E89 E8 0030 call sub_169 ; (6EBC)
-273F:6E8C 0B C0 or ax,ax ; Zero ?
-273F:6E8E 74 09 jz loc_1393 ; Jump if zero
-273F:6E90 3B 06 4BF3 cmp ax,word ptr ds:[4BF3h] ; (273F:4BF3=3E6h)
-273F:6E94 74 0E je loc_1394 ; Jump if equal
-273F:6E96 E8 010A call sub_172 ; (6FA3)
-273F:6E99 loc_1393: ; xref 273F:6E8E
-273F:6E99 87 06 4BF3 xchg word ptr ds:[4BF3h],ax ; (273F:4BF3=3E6h)
-273F:6E9D 0B C0 or ax,ax ; Zero ?
-273F:6E9F 74 03 jz loc_1394 ; Jump if zero
-273F:6EA1 E8 00FF call sub_172 ; (6FA3)
-273F:6EA4 loc_1394: ; xref 273F:6E94, 6E9F
-273F:6EA4 E9 FEBF jmp loc_1374 ; (6D66)
-273F:6EA7 loc_1395: ; xref 273F:6E72
-273F:6EA7 8B 36 4BF1 mov si, menuitem_table_location
-273F:6EAB 8B 74 0C mov si,[si+0Ch]
-273F:6EAE 48 dec ax
-273F:6EAF B3 04 mov bl,4
-273F:6EB1 F6 E3 mul bl ; ax = reg * al
-273F:6EB3 03 F0 add si,ax
-273F:6EB5 8B 44 02 mov ax,[si+2]
-273F:6EB8 FF D0 call ax ; Handle the selected item
-273F:6EBA EB B8 jmp short loc_1391
-
- menubar_handle_menu endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6E6D, 6E89
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6EBC sub_169 proc near
-273F:6EBC 8B 36 4BF1 mov si, menuitem_table_location
-273F:6EC0 B1 03 mov cl,3
-273F:6EC2 8B 44 04 mov ax,[si+4]
-273F:6EC5 40 inc ax
-273F:6EC6 8B 5C 08 mov bx,[si+8]
-273F:6EC9 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:6ECB D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:6ECD 39 06 4BF8 cmp data_unk1, ax
-273F:6ED1 72 34 jb loc_1397 ; Jump if below
-273F:6ED3 03 D8 add bx,ax
-273F:6ED5 39 1E 4BF8 cmp data_unk1, bx
-273F:6ED9 73 2C jae loc_1397 ; Jump if above or =
-273F:6EDB 8B 44 06 mov ax,[si+6]
-273F:6EDE 8B 5C 0A mov bx,[si+0Ah]
-273F:6EE1 43 inc bx
-273F:6EE2 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:6EE4 D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:6EE6 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:6EEB 74 03 je loc_1396 ; Jump if equal
-273F:6EED 05 0003 add ax,3
-273F:6EF0 loc_1396: ; xref 273F:6EEB
-273F:6EF0 3B 06 4BF6 cmp ax,word ptr ds:[4BF6h] ; (273F:4BF6=0C683h)
-273F:6EF4 73 11 jae loc_1397 ; Jump if above or =
-273F:6EF6 03 D8 add bx,ax
-273F:6EF8 39 1E 4BF6 cmp word ptr ds:[4BF6h],bx ; (273F:4BF6=0C683h)
-273F:6EFC 73 09 jae loc_1397 ; Jump if above or =
-273F:6EFE 2B 06 4BF6 sub ax,word ptr ds:[4BF6h] ; (273F:4BF6=0C683h)
-273F:6F02 F7 D8 neg ax
-273F:6F04 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:6F06 C3 retn
-273F:6F07 loc_1397: ; xref 273F:6ED1, 6ED9, 6EF4, 6EFC
-273F:6F07 33 C0 xor ax,ax ; Zero register
-273F:6F09 C3 retn
- sub_169 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6E56
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-; SI = pointer to data block containing the details of the menu
-
-273F:6F0A menubar_create_menu proc near
-273F:6F0A 56 push si
-273F:6F0B 56 push si
-273F:6F0C 8B 44 04 mov ax,[si+4]
-273F:6F0F 8B 5C 06 mov bx,[si+6]
-273F:6F12 8B 4C 08 mov cx,[si+8]
-273F:6F15 8B 54 0A mov dx,[si+0Ah] ; Number of menu entries
-273F:6F18 BD 0001 mov bp,1
-273F:6F1B FF 16 077A call [draw_dialog_proc]
-273F:6F1F 5E pop si
-273F:6F20 8B 4C 0A mov cx,[si+0Ah] ; Number of menu entries
-273F:6F23 8B 44 06 mov ax,[si+6]
-273F:6F26 FE C0 inc al
-273F:6F28 F7 26 074C mul menubar_block_size ; Get # lines to save
-273F:6F2C 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:6F31 74 0C je loc_1398 ; Jump if equal
-273F:6F33 03 06 0748 add ax, screen_width
-273F:6F37 03 06 0748 add ax, screen_width
-273F:6F3B 03 06 0748 add ax, screen_width
-273F:6F3F loc_1398: ; xref 273F:6F31
-273F:6F3F 8B F8 mov di,ax
-273F:6F41 8B 44 04 mov ax,[si+4]
-273F:6F44 FE C0 inc al
-273F:6F46 F7 26 074A mul char_width ; (273F:074A=43A0h) dx:ax = data * ax
-273F:6F4A 03 F8 add di,ax
-273F:6F4C 8B 2E 4CF2 mov bp, font_segment
-273F:6F50 8B 1E 076E mov bx, data_571
-273F:6F54 8B 17 mov dx,[bx]
-273F:6F56 8B 5C 08 mov bx,[si+8] ; Max chars in menu
-273F:6F59 8B 4C 0A mov cx,[si+0Ah]
-273F:6F5C 8B 74 0C mov si,[si+0Ch] ; Offset of list of menuitem text
- ; strings and handler offsets
-273F:6F5F locloop_1399:
-273F:6F5F 57 push di
-273F:6F60 51 push cx
-273F:6F61 56 push si
-273F:6F62 8B 34 mov si,[si]
-273F:6F64 8B CB mov cx,bx
-
-273F:6F66 locloop_1400: ; Loop to add menu item text
-273F:6F66 AC lodsb ; Load next character
-273F:6F67 0A C0 or al,al ; Is it the end of the string?
-273F:6F69 74 0C jz locloop_1401 ; Jump if yes
-273F:6F6B FF 16 076A call [display_character_proc]; Load character
-273F:6F6F 03 3E 074A add di, char_width ; Move the store position
-273F:6F73 E2 F1 loop locloop_1400 ; Loop if cx > 0
-
-273F:6F75 EB 0D jmp short loc_1402 ; (6F84)
-
-273F:6F77 locloop_1401: ; xref 273F:6F69, 6F82
-273F:6F77 B8 0020 mov ax,20h
-273F:6F7A FF 16 076A call [display_character_proc]
-273F:6F7E 03 3E 074A add di, char_width
-273F:6F82 E2 F3 loop locloop_1401 ; Loop if cx > 0
-
-273F:6F84 loc_1402: ; xref 273F:6F75
-273F:6F84 5E pop si
-273F:6F85 59 pop cx
-273F:6F86 5F pop di
-273F:6F87 03 3E 074C add di, menubar_block_size
-273F:6F8B 83 C6 04 add si,4
-273F:6F8E E2 CF loop locloop_1399 ; Loop if cx > 0
-
-273F:6F90 5E pop si
-273F:6F91 C3 retn
- menubar_create_menu endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6E53, 6E67
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6F92 toggle_menu_highlight proc near
-273F:6F92 8B 5C 02 mov bx,[si+2]
-273F:6F95 8B 3C mov di,[si]
-273F:6F97 2B DF sub bx,di
-273F:6F99 FF 16 0772 call [toggle_menu_highlight_proc]
-273F:6F9D C6 06 4BF0 02 mov byte ptr ds:[4BF0h],2 ; (273F:4BF0=3)
-273F:6FA2 C3 retn
- toggle_menu_highlight endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6E96, 6EA1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6FA3 sub_172 proc near
-273F:6FA3 50 push ax
-273F:6FA4 03 44 06 add ax,[si+6]
-273F:6FA7 50 push ax
-273F:6FA8 BB 0A00 mov bx,0A00h
-273F:6FAB F7 E3 mul bx ; dx:ax = reg * ax
-273F:6FAD 8B F8 mov di,ax
-273F:6FAF 8B 44 04 mov ax,[si+4]
-273F:6FB2 40 inc ax
-273F:6FB3 50 push ax
-273F:6FB4 B3 08 mov bl,8
-273F:6FB6 F6 E3 mul bl ; ax = reg * al
-273F:6FB8 03 F8 add di,ax
-273F:6FBA 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:6FBF 74 04 je loc_1403 ; Jump if equal
-273F:6FC1 81 C7 03C0 add di,3C0h
-273F:6FC5 loc_1403: ; xref 273F:6FBF
-273F:6FC5 8B 5C 08 mov bx,[si+8]
-273F:6FC8 53 push bx
-273F:6FC9 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:6FCB D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:6FCD D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:6FCF FF 16 0770 call word ptr ds:[770h] ; (273F:0770=6411h)
-273F:6FD3 5D pop bp
-273F:6FD4 58 pop ax
-273F:6FD5 5B pop bx
-273F:6FD6 4B dec bx
-273F:6FD7 BA 0002 mov dx,2
-273F:6FDA B9 0001 mov cx,1
-273F:6FDD E8 9BA3 call sub_21 ; (0B83)
-273F:6FE0 58 pop ax
-273F:6FE1 C6 06 4BF5 01 mov byte ptr ds:[4BF5h],1 ; (273F:4BF5=0F5h)
-273F:6FE6 C3 retn
- sub_172 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6D5D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:6FE7 sub_173 proc near
-273F:6FE7 A1 4CE4 mov ax, data_segment2
-273F:6FEA 8E C0 mov es,ax
-273F:6FEC 8B 0E 074C mov cx, menubar_block_size
-273F:6FF0 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:6FF2 A1 4CF6 mov ax,word ptr ds:[4CF6h] ; (273F:4CF6=8BFFh)
-273F:6FF5 1E push ds
-273F:6FF6 8E D8 mov ds,ax
-273F:6FF8 33 F6 xor si,si ; Zero register
-273F:6FFA 33 FF xor di,di ; Zero register
-273F:6FFC F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:6FFE 1F pop ds
-273F:6FFF C6 06 4BF0 02 mov byte ptr ds:[4BF0h],2 ; (273F:4BF0=3)
-273F:7004 C3 retn
- sub_173 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0087, 1365, 1D10, 3C98, 6706, 6C8D, 70A5
- ; 7BB7, 8FB2, A828
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menubar_clear_image proc near
-273F:7005 A1 4CE4 mov ax, data_segment2
-273F:7008 8E C0 mov es,ax
-273F:700A 8B 0E 074C mov cx, menubar_block_size
-273F:700E D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:7010 33 C0 xor ax,ax ; Zero register
-273F:7012 33 FF xor di,di ; Zero register
-273F:7014 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:7016 C6 06 4BF0 02 mov byte ptr data_794,2 ; (31E4:4BF0=0)
-273F:701B C3 retn
- menubar_clear_image endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:688C, 6CAF, 8DED
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_clear_line proc near
-273F:701C 0B C0 or ax,ax ; Zero ?
-273F:701E 74 E5 jz menubar_clear_image
-273F:7020 F7 26 074C mul menubar_block_size
-273F:7024 8B F8 mov di,ax
-273F:7026 A1 4CE4 mov ax, data_segment2
-273F:7029 8E C0 mov es, ax
-273F:702B 8B 0E 074C mov cx, menubar_block_size
-273F:702F D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:7031 33 C0 xor ax,ax ; Zero register
-273F:7033 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:7035 C3 retn
- talk_clear_line endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menuitem_quit proc near
-
-273F:7036 E8 000B call confirm_dialog
-273F:7039 74 01 jz loc_1405 ; Jump if zero
-273F:703B C3 retn
-273F:703C loc_1405: ; xref 273F:7039
-273F:703C B8 0000 mov ax,0
-273F:703F B6 01 mov dh,1
-273F:7041 E8 CF60 call display_message ; (3FA4)
-
- menuitem_quit endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7036, 70EA
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7044 confirm_dialog proc near
-
-273F:7044 BE 5040 mov si,5040h
-273F:7047 C7 44 08 0179 mov word ptr [si+8],179h
-273F:704C C6 06 38B0 01 mov data_781, 1
-273F:7051 E8 18B9 call sub_216 ; (890D)
-273F:7054 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:7059 75 03 jne loc_1406 ; Jump if not equal
-273F:705B E8 18AF call sub_216 ; (890D)
-273F:705E loc_1406: ; xref 273F:7059
-273F:705E E8 AF2A call mouse_wait ; (1F8B)
-273F:7061 loc_1407: ; xref 273F:707F
-273F:7061 úE8 AF32 call pause_for_input ; (1F96)
-273F:7064 50 push ax
-273F:7065 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:706A FF 16 075E call [show_cursor_proc]
-273F:706E 58 pop ax
-273F:706F 3C 6E cmp al,6Eh ; 'n'
-273F:7071 74 0E je loc_1408 ; Jump if equal
-273F:7073 3C 4E cmp al,4Eh ; 'N'
-273F:7075 74 0A je loc_1408 ; Jump if equal
-273F:7077 3C 79 cmp al,79h ; 'y'
-273F:7079 74 08 je loc_ret_1409 ; Jump if equal
-273F:707B 3C 59 cmp al,59h ; 'Y'
-273F:707D 74 04 je loc_ret_1409 ; Jump if equal
-273F:707F EB E0 jmp short loc_1407 ; (7061)
-273F:7081 loc_1408: ; xref 273F:7071, 7075
-273F:7081 0C 01 or al,1
-
-273F:7083 loc_ret_1409: ; xref 273F:7079, 707D
-273F:7083 C3 retn
-
- confirm_dialog endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- menuitem_credits proc near
-
-273F:7084 80 0E 11D0 01 or menubar_state, 1 ; Hide the cursor
-273F:7089 FF 16 075E call [show_cursor_proc]
-273F:708D FF 36 9832 push room_number
-273F:7091 C7 06 9832 0032 mov room_number, 32h
-273F:7097 E8 98B4 call clear_layer_rects
-273F:709A E8 98D2 call room_load_layers
-273F:709D FF 16 0752 call [show_compressed_screen_proc]
-273F:70A1 FF 16 0764 call [empty_palette_proc]
-273F:70A5 E8 FF5D call menubar_clear_image
-273F:70A8 FF 16 0744 call [show_screen_proc]
-273F:70AC FF 16 0762 call [set_lower_palette_proc]
-
-273F:70B0 E8 AEE3 call pause_for_input ; (1F96)
-273F:70B3 E8 AEA9 call show_disk_cursor
-273F:70B6 8F 06 9832 pop room_number
-273F:70BA E8 9891 call clear_layer_rects
-273F:70BD E8 98AF call room_load_layers
-273F:70C0 FF 16 074E call word ptr ds:[74Eh] ; (273F:074E=8010h)
-273F:70C4 E8 9920 call sub_16 ; (09E7)
-273F:70C7 E8 9A34 call sub_19 ; (0AFE)
-273F:70CA E8 C9E1 call replace_vga_palette ; (3AAE)
-273F:70CD FF 16 0752 call [show_compressed_screen_proc]
-273F:70D1 E8 A43A call room_add_animations
-273F:70D4 FF 16 0764 call [empty_palette_proc]
-273F:70D8 FF 16 0744 call [show_screen_proc]
-273F:70DC FF 16 0762 call [set_lower_palette_proc]
-273F:70E0 80 26 11D0 FE and menubar_state, 0FEh
-273F:70E5 FF 16 075E call [show_cursor_proc]
-273F:70E9 C3 retn
-
- menuitem_credits endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- menuitem_restart proc near
-
-273F:70EA E8 FF57 call confirm_dialog
-273F:70ED 75 05 jnz loc_ret_1410 ; Jump if not zero
-273F:70EF 80 0E 073D 10 or status_flags2, FLAG_RESTART ; 10h
-
-273F:70F4 loc_ret_1410: ; xref 273F:70ED
-273F:70F4 C3 retn
-
- menuitem_restart endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8FEC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:70F5 menuitem_textspeed proc near
-
-273F:70F5 BE 4C7F mov si, offset slowtext_slow_substr
-273F:70F8 80 36 CE20 80 xor game_flags, 80h
-273F:70FD 79 03 jns loc_1411 ; Jump if not sign
-273F:70FF úBE 4C83 mov si, offset slowtext_fast_substr
-273F:7102 loc_1411:
-273F:7102 úBF 4C74 mov di, offset menuitem_textspeed_str
-273F:7105 B9 0002 mov cx, 2 ; Four characters to replace
-273F:7108 1E push ds
-273F:7109 07 pop es
-273F:710A F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:710C C3 retn
-
- menuitem_textspeed endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- menuitem_sound proc near
-
-273F:710D E8 30E3 call sub_257
-273F:7110 BE 4C91 mov si, offset sound_on_substr
-273F:7113 F6 06 5660 02 test music_status, 2
-273F:7118 75 03 jnz loc_1412
-273F:711A úBE 4C95 mov si, offset sound_off_substr
-273F:711D loc_1412:
-273F:711D 80 36 5660 02 xor music_status, 2
-273F:7122 úBF 4C8D mov di, offset menuitem_sound_str+6 ; Start of 'off' or 'on'
-273F:7125 B9 0002 mov cx,2 ; Move four bytes
-273F:7128 1E push ds
-273F:7129 07 pop es
-273F:712A F3/ A5 rep movsw
-273F:712C C3 retn
-
- menuitem_sound endp
-
-273F:712D 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4380, 721C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_flag_covered_cells proc near
-273F:712E ú53 push bx
-273F:712F E8 D262 call pathfind_get_cell
-273F:7132 74 0D jz loc_1416 ; Exit if animation offscreen
-
-273F:7134 locloop_1414:
-273F:7134 09 07 or [bx], ax ; Flag cell as covered
-
-273F:7136 D0 E8 shr al, 1 ; Rotate bit mask
-273F:7138 73 05 jnc loc_1415 ; Jump if not passed bit 0
-273F:713A 83 C3 01 add bx, 1 ; Move to next byte in data
-273F:713D B0 80 mov al, 80h ; Reset bit mask
-273F:713F loc_1415:
-273F:713F E2 F3 loop locloop_1414 ; Loop for remaining cells
-
-273F:7141 loc_1416:
-273F:7141 5B pop bx
-273F:7142 C3 retn
- pathfind_flag_covered_cells endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7245
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- pathfind_clear_covered_cells proc near
-273F:7143 53 push bx
-273F:7144 E8 D24D call pathfind_get_cell
-273F:7147 74 12 jz loc_1420 ; Jump if zero
-273F:7149 32 E4 xor ah,ah ; Zero register
-273F:714B F7 D0 not ax
-
-273F:714D locloop_1418: ; xref 273F:7159
-273F:714D 20 07 and [bx],al
-273F:714F D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:7151 72 06 jc loc_1419 ; Jump if carry Set
-273F:7153 83 C3 01 add bx,1
-273F:7156 B8 FF7F mov ax,0FF7Fh
-273F:7159 loc_1419: ; xref 273F:7151
-273F:7159 E2 F2 loop locloop_1418 ; Loop if cx > 0
-
-273F:715B loc_1420: ; xref 273F:7147
-273F:715B 5B pop bx
-273F:715C C3 retn
- pathfind_clear_covered_cells endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_set_action_ctr proc near
-273F:715D E8 9B88 call get_room_resource_pointer
-273F:7160 88 4C 2A mov [si+HS_ACTION_CTR], cl
-273F:7163 C3 retn
- seq_set_action_ctr endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7164 E8 9B81 call get_room_resource_pointer
-
-273F:7167 E8 0008 call animation_load_2
-273F:716A C6 45 10 00 mov byte ptr [di+ANIM_CAN_UNLOAD], 0
-273F:716E C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:88B7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:716F animation_load proc near
-273F:716F E8 9B76 call get_room_resource_pointer
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:7167, 7F7E
-
-273F:7172 animation_load_2:
-273F:7172 úE8 9F5E call animation_find_slot
-
-; di = free animation list slot. si = pointer to resource, bx = resource Id
-
-273F:7175 89 7C 0B mov [si+HS_ANIM_OFFSET], di ; Store slot anim is placed in
-273F:7178 89 5D 1B mov [di+ANIM_HOTSPOT_ID], bx ; Save Id of anim resource
-273F:717B 89 75 19 mov [di+ANIM_HOTSPOT_OFFSET], si ; Save ptr of anim resource
-273F:717E 8B 44 0F mov ax, [si+HS_Y] ; Copy over Y start
-273F:7181 89 45 02 mov [di+ANIM_Y], ax
-273F:7184 8B 44 0D mov ax, [si+HS_X] ; Copy over X start
-273F:7187 89 05 mov [di+ANIM_X], ax
-273F:7189 8B 44 11 mov ax, [si+HS_WIDTH] ; Copy over width
-273F:718C 89 45 04 mov [di+ANIM_WIDTH], ax
-273F:718F 8B 44 13 mov ax, [si+HS_HEIGHT] ; Copy over height
-273F:7192 89 45 06 mov [di+ANIM_HEIGHT], ax
-273F:7195 8A 44 15 mov al, [si+HS_LAYER] ; Copy layer
-273F:7198 88 45 0C mov [di+ANIM_LAYER], al
-273F:719B 8A 44 16 mov al, [si+HS_FLAGS2]
-273F:719E 88 45 0D mov [di+ANIM_FLAGS], al
-273F:71A1 C6 45 10 01 mov byte ptr [di+ANIM_CAN_UNLOAD], 1
-273F:71A5 8B 44 17 mov ax, [si+HS_TICK_PROC] ; Copy tick handler proc
-273F:71A8 89 45 11 mov [di+ANIM_TICK_PROC], ax
-273F:71AB 8B 44 19 mov ax, [si+HS_WIDTH_COPY]
-273F:71AE 89 45 13 mov [di+ANIM_WIDTH_COPY], ax
-273F:71B1 8B 44 1B mov ax, [si+HS_HEIGHT_COPY]
-273F:71B4 89 45 15 mov [di+ANIM_HEIGHT_COPY], ax
-273F:71B7 8B 44 1D mov ax, [si+HS_Y_CORRECTION] ; Y correction
-273F:71BA 89 45 17 mov [di+ANIM_Y_CORRECTION], ax
-273F:71BD C7 45 1E 0000 mov word ptr [di+ANIM_VOICE_CHAR_ID], 0
-273F:71C2 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Copy room number
-273F:71C5 89 45 0E mov [di+ANIM_ROOM_NUM], ax
-273F:71C8 8A 44 23 mov al, [si+HS_START_COLOUR] ; Copy colour offset
-273F:71CB 88 45 28 mov [di+ANIM_START_COLOUR], al
-
-273F:71CE 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET] ; Get animation record
-273F:71D1 8B 47 03 mov ax, [bx+PIXEL_DATA_SEGMENT] ; Get pixel data segment
-273F:71D4 89 45 0A mov [di+ANIM_SEGMENT], ax ; Set it in animation
-273F:71D7 33 C9 xor cx, cx
-273F:71D9 F6 47 02 04 test byte ptr [bx+PIXEL_FLAGS], PIXELFLAG_HAS_TABLE
-273F:71DD 74 07 jz loc_1422 ; Jump if zero
-273F:71DF 8E C0 mov es, ax
-273F:71E1 26: 8B 0E 0000 mov cx, es:[0]
-273F:71E6 loc_1422:
-273F:71E6 89 4D 08 mov [di+ANIM_FRAME_OFFSET], cx ; Set frame
-273F:71E9 C6 45 27 01 mov byte ptr [di+ANIM_WALK_FLAG], 1
-273F:71ED C3 retn
- animation_load endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1326, 1D93, 5207, 538B, 5705, 5746, 57DC
- ; 5FF9, 720B, 8025, 826F, 86C6, 86D1, 86E8
- ; 86F2, 8708, 8727, 8894, 9E82
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_exit_hs_get_pointer proc near
-273F:71EE úBE CE30 mov si, offset room_exit_joins_table
-273F:71F1 loc_1423: ; xref 273F:71FD
-273F:71F1 ú3B 04 cmp ax, [si]
-273F:71F3 74 0A je loc_1424 ; Jump if equal
-273F:71F5 3B 44 06 cmp ax, [si+REHS_HOTSPOT2_ID]
-273F:71F8 74 09 je loc_1425 ; Jump if equal
-273F:71FA 83 C6 11 add si, REHS_RECORD_SIZE
-273F:71FD EB F2 jmp short loc_1423 ; (71F1)
-273F:71FF loc_1424: ; xref 273F:71F3
-273F:71FF BB 0002 mov bx, REHS_HOTSPOT1_CURRENT_FRAME
-273F:7202 C3 retn
-273F:7203 loc_1425: ; xref 273F:71F8
-273F:7203 BB 0008 mov bx, REHS_HOTSPOT2_CURRENT_FRAME
-273F:7206 C3 retn
- room_exit_hs_get_pointer endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; This tick handler proc is used by a lot of the resources in the 3rd
- ; hotspot table (hotspots starting at 2711h)
- ; di = animation slot entry, si = hotspot resource
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-
- room_exits_tick_proc proc near
-
-273F:7207 8B 45 1B mov ax,[di+ANIM_HOTSPOT_ID] ; Get hotspot Id
-273F:720A 56 push si ; Save hotspot ptr
-273F:720B E8 FFE0 call room_exit_hs_get_pointer
-273F:720E F6 44 0C FF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh
-273F:7212 74 2A jz loc_1427 ; Jump if exit blocked
-
-; Eexecution reaches this point if the room exit is blocked
-273F:7214 8A 00 mov al, [bx+si] ; Get frame number
-273F:7216 3A 40 01 cmp al, [bx+si+1] ; Check against dest frame
-273F:7219 74 12 je loc_1426 ; If equal, go set frame
-273F:721B 50 push ax
-273F:721C E8 FF0F call pathfind_flag_covered_cells
-273F:721F 58 pop ax
-273F:7220 04 01 add al, 1 ; Move to next frame
-273F:7222 3A 40 01 cmp al, [bx+si+1] ; Reached end frame yet?
-273F:7225 75 06 jne loc_1426 ; No, so go set frame
-273F:7227 B9 0001 mov cx, 1
-273F:722A E8 00DA call room_exit_play_sound
-
-; The code below sets the frame number and offset of the given hotspot to the # in AL
-273F:722D loc_1426:
-273F:722D ú88 00 mov [bx+si],al ; Store frame number
-273F:722F 5E pop si
-273F:7230 8B 5C 21 mov bx,[si+HS_PIXEL_OFFSET]
-273F:7233 32 E4 xor ah,ah ; Calculate frame offset
-273F:7235 F7 67 07 mul word ptr [bx+PIXEL_FRAME_SIZE]
-273F:7238 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax ; Save frame start
-273F:723B C3 retn
-
-273F:723C 5E pop si
-273F:723D C3 retn
-
-; Execution reaches this pointer if the room exit is currently active
-273F:723E loc_1427:
-273F:723E 8A 00 mov al, [bx+si] ; Get frame number
-273F:7240 0A C0 or al, al ; Zero ?
-273F:7242 74 E9 jz loc_1426 ; If zero, go set and exit
-
-273F:7244 50 push ax
-273F:7245 E8 FEFB call pathfind_clear_covered_cells
-273F:7248 58 pop ax
-273F:7249 3A 40 01 cmp al, [bx+si+1] ; Current frame at end frame?
-273F:724C 75 19 jne loc_1428 ; No, so go move back 1 frame
-
-273F:724E 33 C9 xor cx, cx ; Zero register
-273F:7250 E8 00B4 call room_exit_play_sound
-273F:7253 80 3E BAB9 01 cmp byte ptr script_val_88, 1
-273F:7258 75 0D jne loc_1428 ; Jump if not equal
-273F:725A 53 push bx
-273F:725B 50 push ax
-273F:725C B8 0C00 mov ax, 0C00h
-273F:725F 32 DB xor bl, bl ; Zero register
-273F:7261 FF 1E 5662 call dword ptr [play_music_proc]
-273F:7265 58 pop ax
-273F:7266 5B pop bx
-273F:7267 loc_1428:
-273F:7267 2C 01 sub al, 1 ; Move to prior frame
-273F:7269 EB C2 jmp short loc_1426 ; Go set frame
-
- room_exits_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:57ED, 57F7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- door_close_check proc near
-273F:726B 55 push bp
-273F:726C 56 push si
-273F:726D 8B 5F 0B mov bx, [bx+HS_ANIM_OFFSET]
-273F:7270 8B 57 0E mov dx, [bx+ANIM_ROOM_NUM] ; Get room number
-273F:7273 úBE B14E mov si, offset animation_table
-273F:7276 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:7279 8B 07 mov ax, [bx+ANIM_X]
-273F:727B A3 10E6 mov char_rect_left, ax
-273F:727E 03 47 13 add ax, [bx+ANIM_WIDTH_COPY]
-273F:7281 A3 10E8 mov char_rect_right, ax
-273F:7284 8B 47 02 mov ax, [bx+ANIM_Y]
-273F:7287 03 47 15 add ax, [bx+ANIM_HEIGHT_COPY]
-273F:728A 50 push ax
-273F:728B 2B 47 17 sub ax, [bx+ANIM_Y_CORRECTION]
-273F:728E 2B 47 22 sub ax, [bx+ANIM_CHAR_RECT_Y]
-273F:7291 A3 10EA mov char_rect_top, ax
-273F:7294 58 pop ax
-273F:7295 03 47 22 add ax, [bx+ANIM_CHAR_RECT_Y]
-273F:7298 A3 10EC mov char_rect_bottom, ax
-
-273F:729B locloop_1429: ; xref 273F:72FC
-273F:729B 3B FE cmp di, si ; Reached anim pointed to by DI?
-273F:729D 74 5A je loc_1431 ; Skip if yes
-273F:729F 3B F3 cmp si, bx ; Reached anim pointed to by BX?
-273F:72A1 74 56 je loc_1431 ; Skip if yes
-
-273F:72A3 F6 44 0C FF test [si+ANIM_LAYER], 0FFh ; Animation has a layer?
-273F:72A7 74 50 jz loc_1431 ; Skip if not
-273F:72A9 3B 54 0E cmp dx, [si+ANIM_ROOM_NUM] ; In same room?
-273F:72AC 75 4B jne loc_1431 ; Skip if not
-273F:72AE 8B 44 1B mov ax, [si+ANIM_HOTSPOT_ID]
-273F:72B1 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:72B4 72 43 jb loc_1431 ; Skip low end animations
-273F:72B6 3D 0408 cmp ax, FIRST_OBJECT_HOTSPOT_ID
-273F:72B9 72 05 jb loc_1430 ; Jump if below
-273F:72BB 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
-273F:72BE 72 39 jb loc_1431 ; Jump if below
-273F:72C0 loc_1430:
-273F:72C0 3D FFFE cmp ax,0FFFEh
-273F:72C3 73 34 jae loc_1431 ; Skip if Id is 0fffeh or 0ffffh
-273F:72C5 8B 04 mov ax, [si+ANIM_X] ; Get anim x pos
-273F:72C7 3B 06 10E8 cmp ax, char_rect_right ; More than set X pos?
-273F:72CB 73 2C jae loc_1431 ; If yes, skip entry
-273F:72CD 03 44 13 add ax,[si+ANIM_WIDTH_COPY] ; anim width
-273F:72D0 3B 06 10E6 cmp ax, char_rect_left ; Compare against loaded right
-273F:72D4 72 23 jb loc_1431 ; Skip if less or equal
-273F:72D6 74 21 jz loc_1431
-
-; This point is only reached if an animation is in the current room if it's
-; X start is less than or equal to that specified at routine start, and it's right
-; is greater than the X end position. That is to say, the given horizontal slice
-
-273F:72D8 8B 44 02 mov ax, [si+ANIM_Y] ; Get Y position
-273F:72DB 03 44 15 add ax, [si+ANIM_HEIGHT_COPY]; Add copy of anim height
-273F:72DE 8B E8 mov bp,ax
-273F:72E0 03 44 22 add ax, [si+ANIM_CHAR_RECT_Y]
-273F:72E3 3B 06 10EA cmp ax, char_rect_top
-273F:72E7 72 10 jb loc_1431 ; Not meeting Y start
-273F:72E9 8B C5 mov ax, bp
-273F:72EB 2B 44 17 sub ax, [si+ANIM_Y_CORRECTION]
-273F:72EE 2B 44 22 sub ax, [si+ANIM_CHAR_RECT_Y]
-273F:72F1 3B 06 10EC cmp ax, char_rect_bottom
-273F:72F5 74 0B je loc_1432 ; Jump if equal
-273F:72F7 72 09 jc loc_1432 ; Jump if carry Set
-
-273F:72F9 loc_1431:
-273F:72F9 83 C6 29 add si, ANIMATION_SLOT_SIZE
-273F:72FC E2 9D loop locloop_1429 ; Loop if cx > 0
-
-273F:72FE 0C 01 or al,1 ; Result = 1 (no blockings)
-273F:7300 EB 02 jmp short loc_1433
-273F:7302 loc_1432:
-273F:7302 33 C0 xor ax,ax ; Result = 0 (a blocking)
-273F:7304 loc_1433:
-273F:7304 5E pop si
-273F:7305 5D pop bp
-273F:7306 C3 retn
- door_close_check endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:722A, 7250
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- room_exit_play_sound proc near
-273F:7307 50 push ax
-273F:7308 56 push si
-273F:7309 53 push bx
-273F:730A 57 push di
-273F:730B 8B 16 9832 mov dx, room_number
-273F:730F 8B 7C 0D mov di, [si+REHS_HOTSPOT1_OFFSET]
-273F:7312 83 FB 02 cmp bx, 2
-273F:7315 74 03 je loc_1434
-273F:7317 8B 7C 0F mov di, [si+REHS_HOTSPOT2_OFFSET]
-273F:731A loc_1434: ; xref 273F:7315
-273F:731A 3B 55 06 cmp dx, [di+HS_ROOM_NUM]
-273F:731D 75 10 jne loc_1435 ; Jump if not equal
-273F:731F 03 D9 add bx, cx
-273F:7321 8A 58 02 mov bl, [bx+si+2]
-273F:7324 32 FF xor bh, bh
-273F:7326 0B DB or bx, bx ; Zero ?
-273F:7328 74 05 jz loc_1435 ; Jump if zero
-273F:732A E8 2CD0 call play_sound
-273F:732D 8B CE mov cx, si
-273F:732F loc_1435: ; xref 273F:731D, 7328
-273F:732F 5F pop di
-273F:7330 5B pop bx
-273F:7331 5E pop si
-273F:7332 58 pop ax
-273F:7333 C3 retn
- room_exit_play_sound endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7876
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7334 animation_decode_inner proc near
-273F:7334 83 C6 06 add si,6
-273F:7337 1E push ds
-273F:7338 8E DA mov ds,dx
-273F:733A B5 10 mov ch,10h
-273F:733C B1 04 mov cl,4
-273F:733E 33 FF xor di,di ; Zero register
-273F:7340 loc_1436: ; xref 273F:7365
-273F:7340 AC lodsb ; String [si] to al
-273F:7341 26: 88 45 10 mov es:[di+10h],al
-273F:7345 26: 80 65 10 0F and byte ptr es:[di+10h],0Fh
-273F:734A D2 E8 shr al,cl ; Shift w/zeros fill
-273F:734C 26: 88 05 mov es:[di],al
-273F:734F AC lodsb ; String [si] to al
-273F:7350 26: 88 45 30 mov es:[di+30h],al
-273F:7354 26: 80 65 30 0F and byte ptr es:[di+30h],0Fh
-273F:7359 D2 E8 shr al,cl ; Shift w/zeros fill
-273F:735B 26: 88 45 20 mov es:[di+20h],al
-273F:735F 83 C7 01 add di,1
-273F:7362 80 ED 01 sub ch,1
-273F:7365 75 D9 jnz loc_1436 ; Jump if not zero
-
-273F:7367 úBF 0040 mov di, 40h
-273F:736A AC lodsb ; String [si] to al
-273F:736B 8A E0 mov ah,al
-273F:736D AC lodsb ; String [si] to al
-273F:736E 32 ED xor ch,ch ; Zero register
-273F:7370 B1 04 mov cl,4
-273F:7372 26: 88 25 mov es:[di],ah
-273F:7375 26: 80 25 F0 and byte ptr es:[di],0F0h
-273F:7379 8A DC mov bl,ah
-273F:737B D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:737D D2 EB shr bl,cl ; Shift w/zeros fill
-273F:737F 32 FF xor bh,bh ; Zero register
-273F:7381 B2 01 mov dl,1
-
-273F:7383 loc_1437: ; xref 273F:73A1, 73A9, 74DD
-273F:7383 úD1 D0 rcl ax,1 ; Rotate thru carry
-273F:7385 E2 03 loop locloop_1438 ; Loop if cx > 0
-
-273F:7387 AC lodsb ; String [si] to al
-273F:7388 B1 08 mov cl,8
-
-273F:738A locloop_1438: ; xref 273F:7385
-273F:738A 72 1F jc loc_1441 ; Jump if carry Set
-273F:738C 26: 8A 1F mov bl,es:[bx]
-273F:738F loc_1439: ; xref 273F:73C1, 73C7, 73D6, 7417
-273F:738F ú80 F2 01 xor dl,1
-273F:7392 74 0F jz loc_1440 ; Jump if zero
-273F:7394 8A F3 mov dh,bl
-273F:7396 D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:7398 D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:739A D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:739C D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:739E 26: 88 35 mov es:[di],dh
-273F:73A1 EB E0 jmp short loc_1437 ; (7383)
-273F:73A3 loc_1440: ; xref 273F:7392
-273F:73A3 26: 08 1D or es:[di],bl
-273F:73A6 83 C7 01 add di,1
-273F:73A9 EB D8 jmp short loc_1437 ; (7383)
-273F:73AB loc_1441: ; xref 273F:738A
-273F:73AB D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73AD E2 03 loop locloop_1442 ; Loop if cx > 0
-
-273F:73AF AC lodsb ; String [si] to al
-273F:73B0 B1 08 mov cl,8
-
-273F:73B2 locloop_1442: ; xref 273F:73AD
-273F:73B2 72 15 jc loc_1445 ; Jump if carry Set
-273F:73B4 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73B6 E2 03 loop locloop_1443 ; Loop if cx > 0
-
-273F:73B8 AC lodsb ; String [si] to al
-273F:73B9 B1 08 mov cl,8
-
-273F:73BB locloop_1443: ; xref 273F:73B6
-273F:73BB 72 06 jc loc_1444 ; Jump if carry Set
-273F:73BD 26: 8A 5F 10 mov bl,es:[bx+10h]
-273F:73C1 EB CC jmp short loc_1439 ; (738F)
-273F:73C3 loc_1444: ; xref 273F:73BB
-273F:73C3 26: 8A 5F 20 mov bl,es:[bx+20h]
-273F:73C7 EB C6 jmp short loc_1439 ; (738F)
-273F:73C9 loc_1445: ; xref 273F:73B2
-273F:73C9 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73CB E2 03 loop locloop_1446 ; Loop if cx > 0
-
-273F:73CD AC lodsb ; String [si] to al
-273F:73CE B1 08 mov cl,8
-
-273F:73D0 locloop_1446: ; xref 273F:73CB
-273F:73D0 72 06 jc loc_1447 ; Jump if carry Set
-273F:73D2 26: 8A 5F 30 mov bl,es:[bx+30h]
-273F:73D6 EB B7 jmp short loc_1439 ; (738F)
-273F:73D8 loc_1447: ; xref 273F:73D0
-273F:73D8 8A F4 mov dh,ah
-273F:73DA D0 EE shr dh,1 ; Shift w/zeros fill
-273F:73DC D0 EE shr dh,1 ; Shift w/zeros fill
-273F:73DE D0 EE shr dh,1 ; Shift w/zeros fill
-273F:73E0 D0 EE shr dh,1 ; Shift w/zeros fill
-
-273F:73E2 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73E4 E2 03 loop locloop_1448 ; Loop if cx > 0
-
-273F:73E6 AC lodsb ; String [si] to al
-273F:73E7 B1 08 mov cl,8
-
-273F:73E9 locloop_1448: ; xref 273F:73E4
-273F:73E9 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73EB E2 03 loop locloop_1449 ; Loop if cx > 0
-
-273F:73ED AC lodsb ; String [si] to al
-273F:73EE B1 08 mov cl,8
-
-273F:73F0 locloop_1449: ; xref 273F:73EB
-273F:73F0 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73F2 E2 03 loop locloop_1450 ; Loop if cx > 0
-
-273F:73F4 AC lodsb ; String [si] to al
-273F:73F5 B1 08 mov cl,8
-
-273F:73F7 locloop_1450: ; xref 273F:73F2
-273F:73F7 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:73F9 E2 03 loop locloop_1451 ; Loop if cx > 0
-
-273F:73FB AC lodsb ; String [si] to al
-273F:73FC B1 08 mov cl,8
-
-273F:73FE locloop_1451: ; xref 273F:73F9
-273F:73FE 26: 3A 37 cmp dh,es:[bx]
-273F:7401 74 17 je loc_1452 ; Jump if equal
-273F:7403 26: 3A 77 10 cmp dh,es:[bx+10h]
-273F:7407 74 29 je loc_1454 ; Jump if equal
-273F:7409 26: 3A 77 20 cmp dh,es:[bx+20h]
-273F:740D 74 2D je loc_1455 ; Jump if equal
-273F:740F 26: 3A 77 30 cmp dh,es:[bx+30h]
-273F:7413 74 5E je loc_1462 ; Jump if equal
-273F:7415 8A DE mov bl,dh
-273F:7417 E9 FF75 jmp loc_1439 ; (738F)
-273F:741A loc_1452: ; xref 273F:7401
-273F:741A 51 push cx
-273F:741B 52 push dx
-273F:741C E8 00C7 call sub_186 ; (74E6)
-273F:741F 8A D6 mov dl,dh
-273F:7421 E8 00C2 call sub_186 ; (74E6)
-273F:7424 8A EA mov ch,dl
-273F:7426 8A CE mov cl,dh
-273F:7428 5A pop dx
-273F:7429 0B C9 or cx,cx ; Zero ?
-273F:742B 74 02 jz loc_1453 ; Jump if zero
-273F:742D EB 74 jmp short loc_1468 ; (74A3)
-273F:742F loc_1453:
-273F:742F E9 00AE jmp loc_1471 ; Exit
-273F:7432 loc_1454: ; xref 273F:7407
-273F:7432 51 push cx
-273F:7433 E8 00B0 call sub_186 ; (74E6)
-273F:7436 8A CE mov cl,dh
-273F:7438 32 ED xor ch,ch ; Zero register
-273F:743A EB 67 jmp short loc_1468 ; (74A3)
-273F:743C loc_1455: ; xref 273F:740D
-273F:743C 8A F4 mov dh,ah
-273F:743E D0 EE shr dh,1 ; Shift w/zeros fill
-273F:7440 D0 EE shr dh,1 ; Shift w/zeros fill
-273F:7442 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7444 E2 03 loop locloop_1456 ; Loop if cx > 0
-
-273F:7446 AC lodsb ; String [si] to al
-273F:7447 B1 08 mov cl,8
-
-273F:7449 locloop_1456: ; xref 273F:7444
-273F:7449 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:744B E2 03 loop locloop_1457 ; Loop if cx > 0
-
-273F:744D AC lodsb ; String [si] to al
-273F:744E B1 08 mov cl,8
-
-273F:7450 locloop_1457: ; xref 273F:744B
-273F:7450 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7452 E2 03 loop locloop_1458 ; Loop if cx > 0
-
-273F:7454 AC lodsb ; String [si] to al
-273F:7455 B1 08 mov cl,8
-
-273F:7457 locloop_1458: ; xref 273F:7452
-273F:7457 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7459 E2 03 loop locloop_1459 ; Loop if cx > 0
-
-273F:745B AC lodsb ; String [si] to al
-273F:745C B1 08 mov cl,8
-
-273F:745E locloop_1459: ; xref 273F:7459
-273F:745E D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7460 E2 03 loop locloop_1460 ; Loop if cx > 0
-
-273F:7462 AC lodsb ; String [si] to al
-273F:7463 B1 08 mov cl,8
-
-273F:7465 locloop_1460: ; xref 273F:7460
-273F:7465 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7467 E2 03 loop locloop_1461 ; Loop if cx > 0
-
-273F:7469 AC lodsb ; String [si] to al
-273F:746A B1 08 mov cl,8
-
-273F:746C locloop_1461: ; xref 273F:7467
-273F:746C 51 push cx
-273F:746D 8A CE mov cl,dh
-273F:746F 32 ED xor ch,ch ; Zero register
-273F:7471 EB 30 jmp short loc_1468 ; (74A3)
-273F:7473 loc_1462: ; xref 273F:7413
-273F:7473 8A F4 mov dh,ah
-273F:7475 D0 EE shr dh,1 ; Shift w/zeros fill
-273F:7477 D0 EE shr dh,1 ; Shift w/zeros fill
-273F:7479 D0 EE shr dh,1 ; Shift w/zeros fill
-273F:747B D1 D0 rcl ax,1 ; Rotate thru carry
-273F:747D E2 03 loop locloop_1463 ; Loop if cx > 0
-
-273F:747F AC lodsb ; String [si] to al
-273F:7480 B1 08 mov cl,8
-
-273F:7482 locloop_1463: ; xref 273F:747D
-273F:7482 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7484 E2 03 loop locloop_1464 ; Loop if cx > 0
-
-273F:7486 AC lodsb ; String [si] to al
-273F:7487 B1 08 mov cl,8
-
-273F:7489 locloop_1464: ; xref 273F:7484
-273F:7489 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:748B E2 03 loop locloop_1465 ; Loop if cx > 0
-
-273F:748D AC lodsb ; String [si] to al
-273F:748E B1 08 mov cl,8
-
-273F:7490 locloop_1465: ; xref 273F:748B
-273F:7490 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7492 E2 03 loop locloop_1466 ; Loop if cx > 0
-
-273F:7494 AC lodsb ; String [si] to al
-273F:7495 B1 08 mov cl,8
-
-273F:7497 locloop_1466: ; xref 273F:7492
-273F:7497 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7499 E2 03 loop locloop_1467 ; Loop if cx > 0
-
-273F:749B AC lodsb ; String [si] to al
-273F:749C B1 08 mov cl,8
-
-273F:749E locloop_1467: ; xref 273F:7499
-273F:749E 51 push cx
-273F:749F 8A CE mov cl,dh
-273F:74A1 32 ED xor ch,ch ; Zero register
-273F:74A3 loc_1468: ; xref 273F:742D, 743A, 7471
-273F:74A3 F6 C2 01 test dl,1
-273F:74A6 74 0C jz loc_1469 ; Jump if zero
-273F:74A8 26: 08 1D or es:[di],bl
-273F:74AB 83 C7 01 add di,1
-273F:74AE 83 E9 01 sub cx,1
-273F:74B1 80 E2 FE and dl,0FEh
-273F:74B4 loc_1469: ; xref 273F:74A6
-273F:74B4 8A F3 mov dh,bl
-273F:74B6 D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:74B8 D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:74BA D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:74BC D0 E6 shl dh,1 ; Shift w/zeros fill
-273F:74BE 0A DE or bl,dh
-273F:74C0 51 push cx
-273F:74C1 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:74C3 86 C3 xchg al,bl
-273F:74C5 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:74C7 86 C3 xchg al,bl
-273F:74C9 59 pop cx
-273F:74CA 83 E1 01 and cx,1
-273F:74CD 74 0A jz loc_1470 ; Jump if zero
-273F:74CF 26: 88 1D mov es:[di],bl
-273F:74D2 26: 80 25 F0 and byte ptr es:[di],0F0h
-273F:74D6 80 CA 01 or dl,1
-273F:74D9 loc_1470: ; xref 273F:74CD
-273F:74D9 59 pop cx
-273F:74DA 80 E3 0F and bl,0Fh
-273F:74DD E9 FEA3 jmp loc_1437 ; (7383)
-273F:74E0 loc_1471:
-273F:74E0 58 pop ax
-273F:74E1 1F pop ds
-273F:74E2 FF 26 0776 jmp [data_575] ; For VGA, no implementation
- animation_decode_inner endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:741C, 7421, 7433
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:74E6 sub_186 proc near
-273F:74E6 8A F4 mov dh,ah
-273F:74E8 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:74EA E2 03 loop locloop_1472 ; Loop if cx > 0
-
-273F:74EC AC lodsb ; String [si] to al
-273F:74ED B1 08 mov cl,8
-
-273F:74EF locloop_1472: ; xref 273F:74EA
-273F:74EF D1 D0 rcl ax,1 ; Rotate thru carry
-273F:74F1 E2 03 loop locloop_1473 ; Loop if cx > 0
-
-273F:74F3 AC lodsb ; String [si] to al
-273F:74F4 B1 08 mov cl,8
-
-273F:74F6 locloop_1473: ; xref 273F:74F1
-273F:74F6 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:74F8 E2 03 loop locloop_1474 ; Loop if cx > 0
-
-273F:74FA AC lodsb ; String [si] to al
-273F:74FB B1 08 mov cl,8
-
-273F:74FD locloop_1474: ; xref 273F:74F8
-273F:74FD D1 D0 rcl ax,1 ; Rotate thru carry
-273F:74FF E2 03 loop locloop_1475 ; Loop if cx > 0
-
-273F:7501 AC lodsb ; String [si] to al
-273F:7502 B1 08 mov cl,8
-
-273F:7504 locloop_1475: ; xref 273F:74FF
-273F:7504 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7506 E2 03 loop locloop_1476 ; Loop if cx > 0
-
-273F:7508 AC lodsb ; String [si] to al
-273F:7509 B1 08 mov cl,8
-
-273F:750B locloop_1476: ; xref 273F:7506
-273F:750B D1 D0 rcl ax,1 ; Rotate thru carry
-273F:750D E2 03 loop locloop_1477 ; Loop if cx > 0
-
-273F:750F AC lodsb ; String [si] to al
-273F:7510 B1 08 mov cl,8
-
-273F:7512 locloop_1477: ; xref 273F:750D
-273F:7512 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:7514 E2 03 loop locloop_1478 ; Loop if cx > 0
-
-273F:7516 AC lodsb ; String [si] to al
-273F:7517 B1 08 mov cl,8
-
-273F:7519 locloop_1478: ; xref 273F:7514
-273F:7519 D1 D0 rcl ax,1 ; Rotate thru carry
-273F:751B E2 03 loop locloop_1479 ; Loop if cx > 0
-
-273F:751D AC lodsb ; String [si] to al
-273F:751E B1 08 mov cl,8
-
-273F:7520 locloop_1479: ; xref 273F:751B
-273F:7520 C3 retn
- sub_186 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:25C8, 25CD, 25DF
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7521 sub_187 proc near
-273F:7521 8A C6 mov al,dh
-273F:7523 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:7525 E2 07 loop locloop_1480 ; Loop if cx > 0
-
-273F:7527 86 D0 xchg dl,al
-273F:7529 AC lodsb ; String [si] to al
-273F:752A 86 D0 xchg dl,al
-273F:752C B1 08 mov cl,8
-
-273F:752E locloop_1480: ; xref 273F:7525
-273F:752E D1 D2 rcl dx,1 ; Rotate thru carry
-273F:7530 E2 07 loop locloop_1481 ; Loop if cx > 0
-
-273F:7532 86 D0 xchg dl,al
-273F:7534 AC lodsb ; String [si] to al
-273F:7535 86 D0 xchg dl,al
-273F:7537 B1 08 mov cl,8
-
-273F:7539 locloop_1481: ; xref 273F:7530
-273F:7539 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:753B E2 07 loop locloop_1482 ; Loop if cx > 0
-
-273F:753D 86 D0 xchg dl,al
-273F:753F AC lodsb ; String [si] to al
-273F:7540 86 D0 xchg dl,al
-273F:7542 B1 08 mov cl,8
-
-273F:7544 locloop_1482: ; xref 273F:753B
-273F:7544 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:7546 E2 07 loop locloop_1483 ; Loop if cx > 0
-
-273F:7548 86 D0 xchg dl,al
-273F:754A AC lodsb ; String [si] to al
-273F:754B 86 D0 xchg dl,al
-273F:754D B1 08 mov cl,8
-
-273F:754F locloop_1483: ; xref 273F:7546
-273F:754F D1 D2 rcl dx,1 ; Rotate thru carry
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 285
-
-273F:7551 E2 07 loop locloop_1484 ; Loop if cx > 0
-
-273F:7553 86 D0 xchg dl,al
-273F:7555 AC lodsb ; String [si] to al
-273F:7556 86 D0 xchg dl,al
-273F:7558 B1 08 mov cl,8
-
-273F:755A locloop_1484: ; xref 273F:7551
-273F:755A D1 D2 rcl dx,1 ; Rotate thru carry
-273F:755C E2 07 loop locloop_1485 ; Loop if cx > 0
-
-273F:755E 86 D0 xchg dl,al
-273F:7560 AC lodsb ; String [si] to al
-273F:7561 86 D0 xchg dl,al
-273F:7563 B1 08 mov cl,8
-
-273F:7565 locloop_1485: ; xref 273F:755C
-273F:7565 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:7567 E2 07 loop locloop_1486 ; Loop if cx > 0
-
-273F:7569 86 D0 xchg dl,al
-273F:756B AC lodsb ; String [si] to al
-273F:756C 86 D0 xchg dl,al
-273F:756E B1 08 mov cl,8
-
-273F:7570 locloop_1486: ; xref 273F:7567
-273F:7570 D1 D2 rcl dx,1 ; Rotate thru carry
-273F:7572 E2 07 loop locloop_1487 ; Loop if cx > 0
-
-273F:7574 86 D0 xchg dl,al
-273F:7576 AC lodsb ; String [si] to al
-273F:7577 86 D0 xchg dl,al
-273F:7579 B1 08 mov cl,8
-
-273F:757B locloop_1487: ; xref 273F:7572
-273F:757B C3 retn
- sub_187 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:075E
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:757C show_startup proc near
-273F:757C E8 8D3E call validate_header
-273F:757F B4 48 mov ah,48h
-273F:7581 BB FFFF mov bx,0FFFFh
-273F:7584 CD 21 int 21h ; DOS Services ah=function 48h
- ; allocate memory, bx=bytes/16
-273F:7586 81 FB 61A8 cmp bx,61A8h
-273F:758A 73 08 jae loc_1488 ; There is enough memory
-273F:758C B8 0008 mov ax,8
-273F:758F B6 01 mov dh,1
-273F:7591 E8 CA10 call display_message ; (3FA4)
-273F:7594 loc_1488: ; xref 273F:758A
- assume ds:data_seg
-273F:7594 89 1E 4CFC mov largest_free_block,bx ; (31E4:4CFC=0)
-273F:7598 89 1E 4D02 mov buffer_segment_end, bx ; (31E4:4D02=0)
-273F:759C B4 48 mov ah,48h
-273F:759E CD 21 int 21h ; DOS Services ah=function 48h
- ; allocate memory, bx=bytes/16
-273F:75A0 A3 4D00 mov buffer_segment, ax ; (31E4:4D00=0)
-273F:75A3 01 06 4D02 add buffer_segment_end, ax ; (31E4:4D02=0)
-273F:75A7 FF 16 0764 call [empty_palette_proc]
-273F:75AB B8 0019 mov ax,19h ; Get first palette
-273F:75AE E8 C516 call read_palette
-273F:75B1 B8 0018 mov ax,18h ; Revolution title image
-273F:75B4 E8 059C call read_entry_into_buffer
-273F:75B7 E8 05CF call decode_and_fade_in_display
-273F:75BA 33 C0 xor ax,ax
-273F:75BC E8 D42A call sleep
-
-273F:75BF B8 001A mov ax,1Ah ; Virgin games image load
-273F:75C2 E8 058E call read_entry_into_buffer
-273F:75C5 B8 0096 mov ax,96h
-273F:75C8 E8 D41E call sleep
-
-273F:75CB FF 16 0766 call word ptr [fade_out_proc]
-273F:75CF B8 001B mov ax,1Bh
-273F:75D2 E8 C4F2 call read_palette
-273F:75D5 E8 05B1 call decode_and_fade_in_display
-273F:75D8 33 C0 xor ax,ax
-273F:75DA E8 D40C call sleep
-
-273F:75DD B8 001E mov ax,1Eh ; Virtual Theatre title
-273F:75E0 E8 0570 call read_entry_into_buffer
-273F:75E3 B8 0096 mov ax,96h
-273F:75E6 E8 D400 call sleep
-273F:75E9 FF 16 0766 call word ptr [fade_out_proc]
-273F:75ED B8 001F mov ax,1Fh
-273F:75F0 E8 C4D4 call read_palette ; (3AC7)
-273F:75F3 E8 0593 call decode_and_fade_in_display
-273F:75F6 33 C0 xor ax,ax ; Zero register
-273F:75F8 E8 D3EE call sleep ; (49E9)
-
-273F:75FB B8 001C mov ax,1Ch ; Lure of the Temptress title
-273F:75FE E8 0552 call read_entry_into_buffer
-273F:7601 B8 0096 mov ax,96h
-273F:7604 E8 D3E2 call sleep
-273F:7607 FF 16 0766 call word ptr [fade_out_proc]
-273F:760B B8 001D mov ax,1Dh
-273F:760E E8 C4B6 call read_palette
-273F:7611 E8 0575 call decode_and_fade_in_display
-273F:7614 33 C0 xor ax,ax
-273F:7616 E8 D3D0 call sleep
-
-273F:7619 F6 06 5660 08 test music_status,8
-273F:761E 75 27 jnz loc_1489
-273F:7620 B8 000A mov ax,0Ah
-273F:7623 8B 0E 4D00 mov cx, buffer_segment ; (31E4:4D00=0)
-273F:7627 33 D2 xor dx,dx ; Zero register
-273F:7629 89 0E 5664 mov word ptr play_music_proc+2,cx
-273F:762D C7 06 5662 0000 mov play_music_proc, 0
-273F:7633 8B 1E 4D00 mov bx, buffer_segment ; (31E4:4D00=0)
-273F:7637 89 1E 4CE4 mov data_segment2, bx
-273F:763B 80 26 11D0 EF and menubar_state, 0EFh ; (31E4:11D0=3)
-273F:7640 E8 8CD1 call read_entry ; (0314)
-273F:7643 01 16 4D00 add buffer_segment,dx ; (31E4:4D00=0)
-273F:7647 loc_1489: ; xref 273F:761E
-273F:7647 B8 0096 mov ax,96h
-273F:764A E8 D39C call sleep ; (49E9)
-273F:764D F6 06 11D0 40 test menubar_state, 40h ; Skip the intro?
-273F:7652 75 03 jnz loc_1490 ; Jump if not zero
-273F:7654 E8 2C65 call show_introduction ; Run the intro
-273F:7657 loc_1490: ; xref 273F:7652
-273F:7657 E8 290A call sub_246 ; (9F64)
-
-273F:765A B8 0010 mov ax, 10h ; Load strings resource
-273F:765D E8 0514 call read_into_buffer
-273F:7660 A3 4CE8 mov strings_segment, ax
-273F:7663 B8 0009 mov ax,9 ; Load names resource
-273F:7666 E8 050B call read_into_buffer
-273F:7669 A3 4CEE mov names_segment, ax
-273F:766C B8 0003 mov ax,3 ; Load alternate font
-273F:766F E8 0502 call read_into_buffer
-273F:7672 A3 4CF0 mov font2_segment, ax
-273F:7675 80 0E 073C 02 or status_flags, STATUS_UNKNOWN
-
-273F:767A B8 0001 mov ax, 1 ; Load cursors resource
-273F:767D E8 04F4 call read_into_buffer
-273F:7680 A3 4CF4 mov cursors_segment, ax
-273F:7683 A1 4D00 mov ax, buffer_segment
-273F:7686 A3 4CFE mov data_814, ax
-273F:7689 E9 0408 jmp load_resources
- show_startup endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:007A
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animations_preload proc near
-273F:768C E8 8B6C call read_and_validate_header
-273F:768F úBE B883 mov si, offset animation_block_list
-273F:7692 loc_1492:
-273F:7692 ú8B 1C mov bx, [si]
-273F:7694 0B DB or bx, bx ; End of list?
-273F:7696 74 09 jz loc_1493 ; Jump if yes
-273F:7698 83 C6 02 add si, 2
-273F:769B 80 67 02 F7 and byte ptr [bx+2], 0F7h
-273F:769F EB F1 jmp short loc_1492
-
-273F:76A1 loc_1493:
-273F:76A1 úBE B883 mov si, offset animation_block_list
-273F:76A4 loc_1494:
-273F:76A4 ú8B 1C mov bx, [si]
-273F:76A6 0B DB or bx, bx ; End of list?
-273F:76A8 74 13 jz loc_1495 ; Jump if yes
-273F:76AA 83 C6 02 add si,2
-273F:76AD F6 47 02 20 test byte ptr [bx+ANIM_FLAGS], 20h ; ' '
-273F:76B1 F6 47 02 02 test byte ptr [bx+ANIM_FLAGS], 2
-273F:76B5 74 ED jz loc_1494 ; Jump if zero
-273F:76B7 80 4F 02 08 or byte ptr [bx+ANIM_FLAGS], 8
-273F:76BB EB E7 jmp short loc_1494
-
-273F:76BD loc_1495: ; xref 273F:76A8
-273F:76BD E8 0324 call sub_194
-273F:76C0 8B 1E 9832 mov bx, room_number
-273F:76C4 E8 9621 call get_room_resource_pointer
-273F:76C7 8B 74 06 mov si, [si+6]
-273F:76CA 0B F6 or si, si ; Any table set?
-273F:76CC 74 20 jz loc_1498 ; Skip if not
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:8FD0
- ; si = Offset of table for animation resources for a room
-
- animations_preload_2:
-273F:76CE ú8B 1C mov bx, [si]
-273F:76D0 0B DB or bx, bx ; End of list reached?
-273F:76D2 74 1A jz loc_1498 ; Jump if yes
-273F:76D4 F7 47 03 FFFF test word ptr [bx+3], 0FFFFh
-273F:76D9 75 0E jnz loc_1497 ; Jump if not zero
-273F:76DB 89 1D mov [di], bx ; Store in output list
-273F:76DD 83 C7 02 add di, 2 ; Move to next position
-273F:76E0 56 push si
-273F:76E1 57 push di
-273F:76E2 E8 00FD call animation_decode ; Decode animation
-273F:76E5 5F pop di
-273F:76E6 5E pop si
-273F:76E7 72 0A jc loc_1499 ; Jump if carry Set
-273F:76E9 loc_1497: ; xref 273F:76D9
-273F:76E9 83 C6 02 add si,2
-273F:76EC EB E0 jmp animations_preload_2
-273F:76EE loc_1498: ; xref 273F:76CC, 76D2
-273F:76EE C7 05 0000 mov word ptr [di],0
-273F:76F2 C3 retn
-273F:76F3 loc_1499: ; xref 273F:76E7
-273F:76F3 C7 05 0000 mov word ptr [di],0
-273F:76F7 E8 00A8 call sub_192 ; (77A2)
-273F:76FA 73 90 jnc animations_preload
-273F:76FC C3 retn
- animations_preload endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:152C, 15D2, 1617
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animation_resolve_segment proc near
-
-273F:76FD loc_1500: ; xref 273F:7790
-273F:76FD ú83 7F 1B FE cmp word ptr [bx+1Bh],0FFFEh
-273F:7701 72 05 jb loc_1501 ; Jump if below
-273F:7703 BF 5810 mov di, offset voice_anim_block
-273F:7706 EB 06 jmp short loc_1502 ; (770E)
-273F:7708 loc_1501:
-273F:7708 8B 77 19 mov si, [bx+ANIM_HOTSPOT_OFFSET]
-273F:770B 8B 7C 21 mov di, [si+HS_PIXEL_OFFSET]
-
-; Loop to see if animation_block_list contains any existing matching entry
-; (scanning until a 0 entry is found). If it's found, the segment value at
-; word [di+3] is returned
-
-273F:770E loc_1502:
-273F:770E 53 push bx
-273F:770F úBB B883 mov bx, offset animation_block_list
-273F:7712 loc_1503:
-273F:7712 ú3B 3F cmp di,[bx]
-273F:7714 75 03 jne loc_1504 ; Jump if not equal
-273F:7716 E9 0081 jmp loc_1510 ; (779A)
-273F:7719 loc_1504: ; xref 273F:7714
-273F:7719 F7 07 FFFF test word ptr [bx],0FFFFh
-273F:771D 74 05 jz loc_1505 ; Jump if zero
-273F:771F 83 C3 02 add bx,2
-273F:7722 EB EE jmp short loc_1503
-
-; At this point, the end of the list at animation_block_list has been reached
-
-273F:7724 loc_1505: ; xref 273F:771D
-273F:7724 F6 06 073D 01 test status_flags2, 1
-273F:7729 74 03 jz loc_1506 ; Jump if zero
-273F:772B 5B pop bx
-273F:772C EB 5C jmp short loc_1507 ; (778A)
-
-; The following code seems to be responsible for preparing the data. Perhaps
-; uncompressing it the first time from some source?
-
-273F:772E loc_1506: ; xref 273F:7729
-273F:772E 53 push bx
-273F:772F 57 push di
-273F:7730 8B DF mov bx,di
-273F:7732 E8 00AD call animation_decode
-273F:7735 5F pop di
-273F:7736 5E pop si
-273F:7737 73 5A jnc loc_1509 ; Jump if carry=0
-273F:7739 E8 0066 call sub_192 ; (77A2)
-273F:773C 73 51 jnc loc_1508 ; Jump if carry=0
-273F:773E 5B pop bx
-273F:773F 81 7F 1B 03E9 cmp word ptr [bx+ANIM_HOTSPOT_ID], RATPOUCH_HOTSPOT_ID
-273F:7744 72 44 jb loc_1507 ; Jump if below
-273F:7746 81 7F 1B 0408 cmp word ptr [bx+ANIM_HOTSPOT_ID], FIRST_OBJECT_HOTSPOT_ID
-273F:774B 73 3D jae loc_1507 ; Jump if above or =
-273F:774D 83 7F 0E 2A cmp word ptr [bx+ANIM_ROOM_NUM], 2Ah
-273F:7751 73 37 jae loc_1507 ; Jump if above or =
-273F:7753 8B 77 19 mov si, [bx+ANIM_HOTSPOT_OFFSET]
-273F:7756 8B FB mov di, bx
-273F:7758 E8 CC2C call character_pathfind_clear
-273F:775B C7 44 06 0018 mov word ptr [si+HS_ROOM_NUM], 24
-273F:7760 C7 47 0E 0018 mov word ptr [bx+ANIM_ROOM_NUM], 24
-273F:7765 C7 44 0D 00C0 mov word ptr [si+HS_X], 80h + 64
-273F:776A C7 07 00C0 mov word ptr [bx+ANIM_X], 80h + 64
-273F:776E C7 44 0F 00F4 mov word ptr [si+HS_Y], 80h + 74h
-273F:7773 C7 47 02 00F4 mov word ptr [bx+ANIM_Y], 80h + 74h
-273F:7778 C6 06 4F8A 01 mov data_817, 1
-273F:777D 53 push bx
-273F:777E 8B DE mov bx,si
-273F:7780 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:7783 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:7786 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:7789 5B pop bx
-273F:778A loc_1507:
-273F:778A 33 C0 xor ax,ax ; Couldn't resolve
-273F:778C F9 stc ; Flag error occurred
-273F:778D EB 0F jmp short loc_1511
-273F:778F loc_1508: ; xref 273F:773C
-273F:778F 5B pop bx
-273F:7790 E9 FF6A jmp loc_1500 ; (76FD)
-273F:7793 loc_1509: ; xref 273F:7737
-273F:7793 89 3C mov [si], di
-273F:7795 C7 44 02 0000 mov word ptr [si+2],0
-273F:779A loc_1510: ; xref 273F:7716
-273F:779A 5B pop bx
-273F:779B 8B 45 03 mov ax, [di+3]
-273F:779E loc_1511:
-273F:779E 89 47 0A mov [bx+ANIM_SEGMENT], ax ; Save segment
-273F:77A1 C3 retn
-
- animation_resolve_segment endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:76F7, 7739
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:77A2 sub_192 proc near
-273F:77A2 úBE B883 mov si, offset animation_block_list
-273F:77A5 loc_1512: ; xref 273F:77B2, 77B8
-273F:77A5 ú8B 1C mov bx,[si]
-273F:77A7 0B DB or bx,bx ; Zero ?
-273F:77A9 74 0F jz loc_1513 ; Jump if zero
-273F:77AB 83 C6 02 add si,2
-273F:77AE F6 47 02 21 test byte ptr [bx+PIXEL_FLAGS], 21h ; '!'
-273F:77B2 75 F1 jnz loc_1512 ; Jump if not zero
-273F:77B4 80 4F 02 08 or byte ptr [bx+PIXEL_FLAGS], 8
-273F:77B8 EB EB jmp short loc_1512 ; (77A5)
-273F:77BA loc_1513: ; xref 273F:77A9
-273F:77BA úBF B14E mov di, offset animation_table
-273F:77BD 8B 16 9832 mov dx, room_number
-273F:77C1 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:77C4 locloop_1514: ; xref 273F:77DC
-273F:77C4 F6 45 0C FF test byte ptr [di+ANIM_LAYER], 0FFh
-273F:77C8 74 0F jz loc_1515 ; Jump if zero
-273F:77CA 3B 55 0E cmp dx, [di+ANIM_ROOM_NUM]
-273F:77CD 75 0A jne loc_1515 ; Jump if not equal
-273F:77CF 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET]
-273F:77D2 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:77D5 80 67 02 F7 and byte ptr [bx+PIXEL_FLAGS], 0F7h
-273F:77D9 loc_1515:
-273F:77D9 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:77DC E2 E6 loop locloop_1514 ; Loop if cx > 0
-
-273F:77DE E8 0203 call sub_194 ; (79E4)
-273F:77E1 C3 retn
- sub_192 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:3D28, 76E2, 7732
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animation_decode proc near
-273F:77E2 80 3E 0786 02 cmp byte ptr ds:[drive_number],2 ; (273F:0786=0E8h)
-273F:77E7 73 05 jae loc_1516 ; Jump if above or =
-273F:77E9 53 push bx
-273F:77EA E8 A772 call show_disk_cursor
-273F:77ED 5B pop bx
-273F:77EE loc_1516: ; xref 273F:77E7
-273F:77EE 8B 07 mov ax,[bx]
-273F:77F0 53 push bx
-273F:77F1 E8 8BF2 call get_entry_size
-273F:77F4 5B pop bx
-273F:77F5 8B 0E 4D02 mov cx, buffer_segment_end
-273F:77F9 2B CA sub cx,dx
-273F:77FB 83 E9 08 sub cx,8
-273F:77FE 3B 0E 4D00 cmp cx, buffer_segment
-273F:7802 73 02 jae loc_1517 ; Jump if above or =
-273F:7804 F9 stc ; Set carry flag
-273F:7805 C3 retn
-273F:7806 loc_1517: ; xref 273F:7802
-273F:7806 89 0E 4D04 mov anim_src_segment2, cx
-273F:780A 89 0E 4D06 mov anim_src_segment, cx
-273F:780E 8B 07 mov ax,[bx] ; Get anim resource id
-273F:7810 33 D2 xor dx,dx ; Read into cx:dx
-273F:7812 53 push bx
-273F:7813 E8 8AFE call read_entry
-273F:7816 01 16 4D06 add anim_src_segment, dx ; Save end of animation
-273F:781A 1E push ds
-273F:781B A1 4D06 mov ax, anim_src_segment
-273F:781E 8E C0 mov es,ax
-273F:7820 A1 4D04 mov ax, anim_src_segment2
-273F:7823 8E D8 mov ds,ax
-273F:7825 8B 0E 0000 mov cx,ds:[0] ; Get in # table entries
-273F:7829 26: 89 0E 0000 mov es:[0], cx ; Store # entries
-273F:782E B5 05 mov ch,5
-273F:7830 86 E9 xchg ch,cl
-273F:7832 BE 0002 mov si, 2 ; Point to table start
-273F:7835 8B FE mov di,si ; Point to dest table data
-273F:7837 33 D2 xor dx,dx
-273F:7839 loc_1518:
-273F:7839 AD lodsw ; String [si] to ax
-273F:783A AB stosw ; Store ax to es:[di]
-273F:783B 05 001F add ax,1Fh
-273F:783E D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:7840 03 D0 add dx,ax
-273F:7842 80 ED 01 sub ch,1
-273F:7845 75 F2 jnz loc_1518 ; Jump if not zero
-
-; At this point the entire header has been copied from ds:0 to es:0, and
-; dx = summation : foreach header value -> (value + 0x1f) / 32
-
-273F:7847 1F pop ds
-273F:7848 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:784D 75 0B jne loc_1519 ; Jump if not equal
-273F:784F 8B C2 mov ax,dx
-273F:7851 05 0003 add ax,3
-273F:7854 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:7856 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:7858 03 D0 add dx,ax
-273F:785A loc_1519: ; xref 273F:784D
-273F:785A 81 C2 0081 add dx,81h ; Add extra needed amount
-273F:785E 8B 0E 4D00 mov cx, buffer_segment
-273F:7862 03 CA add cx,dx
-273F:7864 3B 0E 4D02 cmp cx, buffer_segment_end ; Enough room?
-273F:7868 72 03 jb loc_1520 ; Yes, so carry on
-273F:786A 5E pop si ; There won't be space left
-273F:786B F9 stc ; Flag error
-273F:786C C3 retn
-273F:786D loc_1520:
-273F:786D A1 4D00 mov ax, buffer_segment
-273F:7870 8E C0 mov es,ax
-273F:7872 8B 16 4D04 mov dx, anim_src_segment2
-273F:7876 E8 FABB call animation_decode_inner
-273F:7879 5E pop si ; Retrieve anim rec ptr
-273F:787A 89 7C 05 mov [si+PIXEL_DATA_SIZE], di ; Store size of decoded rsc?
-273F:787D 83 6C 05 40 sub word ptr [si+PIXEL_DATA_SIZE], 40h ; ???
-273F:7881 33 FF xor di, di
-273F:7883 F6 44 02 04 test byte ptr [si+PIXEL_FLAGS], PIXELFLAG_HAS_TABLE
-273F:7887 74 34 jz loc_1523 ; Skip if not
-273F:7889 56 push si
-273F:788A 1E push ds
-273F:788B 8A 16 0742 mov dl, video_style
-273F:788F A1 4D06 mov ax, anim_src_segment
-273F:7892 8E D8 mov ds, ax
-273F:7894 úBE 0002 mov si, 2 ; Offset of 1st header entry
-273F:7897 8B 0E 0000 mov cx, ds:[0] ; Get number of entries
-273F:789B 8B E9 mov bp, cx
-273F:789D D1 E5 shl bp, 1
-
-273F:789F locloop_1521:
-273F:789F 26: 89 2D mov es:[di],bp
-273F:78A2 83 C7 02 add di,2
-273F:78A5 8B 04 mov ax,[si]
-273F:78A7 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:78A9 83 C6 02 add si,2
-273F:78AC 03 E8 add bp,ax
-273F:78AE 80 FA 01 cmp dl, VIDEO_STYLE_VGA
-273F:78B1 74 06 je loc_1522 ; Jump if equal
-273F:78B3 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:78B5 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:78B7 03 E8 add bp,ax
-273F:78B9 loc_1522: ; xref 273F:78B1
-273F:78B9 E2 E4 loop locloop_1521 ; Loop if cx > 0
-273F:78BB 1F pop ds
-273F:78BC 5E pop si
-
-273F:78BD loc_1523: ; xref 273F:7887
-273F:78BD 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:78C2 74 58 je loc_1525 ; Jump if equal
-
-273F:78C4 8B 4C 05 mov cx, [si+PIXEL_DATA_SIZE]; Get size of file
-273F:78C7 D1 E9 shr cx, 1 ; Divide by 2 for # words
-273F:78C9 56 push si
-273F:78CA úBE 0040 mov si, 40h
-273F:78CD A1 4D00 mov ax, buffer_segment
-273F:78D0 8E C0 mov es, ax
-273F:78D2 1E push ds
-273F:78D3 8E D8 mov ds, ax
-
-; Copy the decoded data from offset 40h back to offset 0h. This will discard
-; the 40h byte header that was used during the decoding process
-
-273F:78D5 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:78D7 1F pop ds
-273F:78D8 5E pop si
-273F:78D9 8B C7 mov ax,di
-273F:78DB 89 44 05 mov [si+PIXEL_DATA_SIZE], ax ; Store new size
-273F:78DE 8B D0 mov dx, ax
-273F:78E0 83 EA 01 sub dx, 1
-273F:78E3 D1 EA shr dx, 1
-273F:78E5 D1 EA shr dx, 1
-273F:78E7 D1 EA shr dx, 1
-273F:78E9 D1 EA shr dx, 1
-273F:78EB 83 C2 01 add dx, 1 ; # paragraphs + 1
-273F:78EE 51 push cx
-273F:78EF 8B CA mov cx, dx
-273F:78F1 03 0E 4D00 add cx, buffer_segment
-273F:78F5 3B 0E 4D02 cmp cx, buffer_segment_end ; Fit within memory?
-273F:78F9 59 pop cx
-273F:78FA 72 02 jc loc_1524 ; Jump if yes
-273F:78FC F9 stc ; Set carry to flag error
-273F:78FD C3 retn
-
-273F:78FE loc_1524:
-273F:78FE 8B 2E 4D00 mov bp, buffer_segment
-273F:7902 01 16 4D00 add buffer_segment, dx
-273F:7906 A1 4D06 mov ax, anim_src_segment ; Get ptr to copy of
-273F:7909 8E C0 mov es,ax ; anim table header
-273F:790B 26: A1 0002 mov ax, es:[2] ; Get 1st entry size
-273F:790F D1 E8 shr ax, 1 ; Get number of words
-273F:7911 89 44 07 mov [si+PIXEL_FRAME_SIZE], ax ; Store frame size
-273F:7914 89 6C 03 mov [si+PIXEL_DATA_SEGMENT], bp
-273F:7917 E8 01F4 call animation_decode_2
-273F:791A F8 clc ; Clear carry flag
-273F:791B C3 retn
-
-; Start of post processing code for when in EGA mode
-273F:791C loc_1525:
-273F:791C 8B 4C 05 mov cx, [si+5]
-273F:791F 8B C1 mov ax, cx
-273F:7921 D1 E8 shr ax, 1
-273F:7923 D1 E8 shr ax, 1
-273F:7925 01 44 05 add [si+PIXEL_DATA_SIZE], ax
-273F:7928 03 C1 add ax, cx
-273F:792A 05 000F add ax, 0Fh
-273F:792D D1 E8 shr ax, 1
-273F:792F D1 E8 shr ax, 1
-273F:7931 D1 E8 shr ax, 1
-273F:7933 D1 E8 shr ax, 1
-273F:7935 01 06 4D00 add buffer_segment, ax
-273F:7939 D1 E9 shr cx, 1
-273F:793B 06 push es
-273F:793C A1 4D06 mov ax, anim_src_segment
-273F:793F 8E C0 mov es, ax
-273F:7941 26: A1 0002 mov ax, es:[2]
-273F:7945 D1 E8 shr ax, 1
-273F:7947 D1 E8 shr ax, 1
-273F:7949 26: 03 06 0002 add ax, es:[2]
-273F:794E D1 E8 shr ax, 1
-273F:7950 89 44 07 mov [si+PIXEL_FRAME_SIZE], ax
-273F:7953 07 pop es
-273F:7954 1E push ds
-273F:7955 8C C0 mov ax,es
-273F:7957 89 44 03 mov [si+PIXEL_DATA_SEGMENT], ax
-273F:795A 8E D8 mov ds, ax
-273F:795C úBE 0040 mov si, 40h
-273F:795F 57 push di
-273F:7960 F3/ A5 rep movsw
-273F:7962 8B D7 mov dx, di
-273F:7964 5F pop di
-273F:7965 1F pop ds
-273F:7966 1E push ds
-273F:7967 A1 4D06 mov ax, anim_src_segment
-273F:796A 8E D8 mov ds, ax
-273F:796C 8B 0E 0000 mov cx, ds:[0]
-273F:7970 úBE 0002 mov si, 2
-273F:7973 83 EF 01 sub di, 1
-
-273F:7976 locloop_1526:
-273F:7976 AD lodsw
-273F:7977 D1 E8 shr ax, 1
-273F:7979 50 push ax
-273F:797A 03 F8 add di, ax
-273F:797C 57 push di
-273F:797D D1 E8 shr ax, 1
-273F:797F D1 E8 shr ax, 1
-273F:7981 03 F8 add di, ax
-273F:7983 57 push di
-273F:7984 E2 F0 loop locloop_1526 ; Loop if cx > 0
-
-273F:7986 8B F2 mov si,dx
-273F:7988 83 EE 01 sub si,1
-273F:798B 8B 16 0000 mov dx, ds:[0]
-273F:798F 06 push es
-273F:7990 1F pop ds
-273F:7991 FD std ; Set direction flag
-273F:7992 loc_1527: ; xref 273F:79B4
-273F:7992 5B pop bx
-273F:7993 5F pop di
-273F:7994 59 pop cx
-273F:7995 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:7997 D1 E9 shr cx,1 ; Shift w/zeros fill
-
-273F:7999 locloop_1528: ; xref 273F:79AF
-273F:7999 AC lodsb ; String [si] to al
-273F:799A 8A E0 mov ah,al
-273F:799C AA stosb ; Store al to es:[di]
-273F:799D AC lodsb ; String [si] to al
-273F:799E 0A E0 or ah,al
-273F:79A0 AA stosb ; Store al to es:[di]
-273F:79A1 AC lodsb ; String [si] to al
-273F:79A2 0A E0 or ah,al
-273F:79A4 AA stosb ; Store al to es:[di]
-273F:79A5 AC lodsb ; String [si] to al
-273F:79A6 0A E0 or ah,al
-273F:79A8 AA stosb ; Store al to es:[di]
-273F:79A9 26: 88 27 mov es:[bx],ah
-273F:79AC 83 EB 01 sub bx,1
-273F:79AF E2 E8 loop locloop_1528 ; Loop if cx > 0
-
-273F:79B1 83 EA 01 sub dx,1
-273F:79B4 75 DC jnz loc_1527 ; Jump if not zero
-273F:79B6 1F pop ds
-273F:79B7 FC cld ; Clear direction
-273F:79B8 F8 clc ; Clear carry flag
-273F:79B9 C3 retn
- animation_decode endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_deactivate_hotspot_set proc near
-273F:79BA D1 E3 shl bx,1
-273F:79BC 8B B7 13CA mov si, [hotspot_dealloc_table][bx]
-273F:79C0 loc_1529:
-273F:79C0 úAD lodsw ; String [si] to ax
-273F:79C1 0B C0 or ax,ax ; Zero ?
-273F:79C3 74 1D jz loc_ret_1530 ; Jump if zero
-273F:79C5 56 push si
-273F:79C6 8B D8 mov bx,ax
-273F:79C8 E8 931D call get_room_resource_pointer
-273F:79CB 5B pop bx
-273F:79CC 87 DE xchg bx, si
-273F:79CE 8B 7F 0B mov di, [bx+HS_ANIM_OFFSET]
-273F:79D1 0B FF or di, di ; Zero ?
-273F:79D3 74 EB jz loc_1529 ; Jump if zero
-
-273F:79D5 33 C0 xor ax,ax ; Zero register
-273F:79D7 88 45 0C mov [di+ANIM_LAYER], al
-273F:79DA 89 45 1B mov [di+ANIM_HOTSPOT_ID], ax
-273F:79DD 89 47 0B mov [bx+HS_ANIM_OFFSET], ax
-273F:79E0 EB DE jmp short loc_1529 ; (79C0)
-273F:79E2 loc_ret_1530: ; xref 273F:79C3
-273F:79E2 C3 retn
- seq_deactivate_hotspot_set endp
-
-273F:79E3 00 data_401 db 0 ; xref 273F:79E4, 7A4F, 7A8A
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:76BD, 77DE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:79E4 sub_194 proc near
-273F:79E4 2E: C6 06 79E3 00 mov cs:data_401,0 ; (273F:79E3=0)
-273F:79EA úBE B883 mov si, offset animation_block_list
-273F:79ED 8B FE mov di,si
-273F:79EF 8B 2E 4CFA mov bp,data_812 ; (31E4:4CFA=0)
-273F:79F3 loc_1531: ; xref 273F:7A10, 7A33, 7A48, 7A55
-273F:79F3 úAD lodsw ; String [si] to ax
-273F:79F4 0B C0 or ax,ax ; Zero ?
-273F:79F6 74 5F jz loc_1534 ; Jump if zero
-273F:79F8 8B D8 mov bx,ax
-273F:79FA F6 47 02 08 test byte ptr [bx+2],8
-273F:79FE 75 4A jnz loc_1532 ; Jump if not zero
-273F:7A00 F7 47 03 FFFF test word ptr [bx+3],0FFFFh
-273F:7A05 74 48 jz loc_1533 ; Jump if zero
-273F:7A07 89 1D mov [di],bx
-273F:7A09 83 C7 02 add di,2
-273F:7A0C F6 47 02 20 test byte ptr [bx+2],20h ; ' '
-273F:7A10 75 E1 jnz loc_1531 ; Jump if not zero
-273F:7A12 8B 47 03 mov ax,[bx+3]
-273F:7A15 8E C5 mov es,bp
-273F:7A17 89 6F 03 mov [bx+3],bp
-273F:7A1A 8B 4F 05 mov cx,[bx+5]
-273F:7A1D 8B D1 mov dx,cx
-273F:7A1F 83 EA 01 sub dx,1
-273F:7A22 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:7A24 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:7A26 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:7A28 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:7A2A 83 C2 01 add dx,1
-273F:7A2D 03 EA add bp,dx
-273F:7A2F 8C C2 mov dx,es
-273F:7A31 3B C2 cmp ax,dx
-273F:7A33 74 BE je loc_1531 ; Jump if equal
-273F:7A35 1E push ds
-273F:7A36 56 push si
-273F:7A37 57 push di
-273F:7A38 33 F6 xor si,si ; Zero register
-273F:7A3A 33 FF xor di,di ; Zero register
-273F:7A3C 8E D8 mov ds,ax
-273F:7A3E 83 C1 01 add cx,1
-273F:7A41 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:7A43 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:7A45 5F pop di
-273F:7A46 5E pop si
-273F:7A47 1F pop ds
-273F:7A48 EB A9 jmp short loc_1531 ; (79F3)
-273F:7A4A loc_1532: ; xref 273F:79FE
-273F:7A4A C7 47 03 0000 mov word ptr [bx+3],0
-273F:7A4F loc_1533: ; xref 273F:7A05
-273F:7A4F 2E: C6 06 79E3 01 mov cs:data_401,1 ; (273F:79E3=0)
-273F:7A55 EB 9C jmp short loc_1531 ; (79F3)
-273F:7A57 loc_1534: ; xref 273F:79F6
-273F:7A57 C7 05 0000 mov word ptr [di],0
-273F:7A5B 89 2E 4D00 mov buffer_segment, bp ; (31E4:4D00=0)
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:7B0A, 8FD3
-
-273F:7A5F sub_195:
-273F:7A5F 57 push di
-273F:7A60 úBE B14E mov si, offset animation_table
-273F:7A63 B9 002D mov cx, NUM_ANIMATION_SLOTS
-
-273F:7A66 locloop_1535: ; xref 273F:7A86
-273F:7A66 F6 44 0C FF test byte ptr [si+0Ch],0FFh
-273F:7A6A 74 17 jz loc_1538 ; Jump if zero
-273F:7A6C 83 7C 1B FE cmp word ptr [si+1Bh],0FFFEh
-273F:7A70 72 05 jb loc_1536 ; Jump if below
-273F:7A72 úBF 5810 mov di, offset voice_anim_block
-273F:7A75 EB 06 jmp short loc_1537 ; (7A7D)
-273F:7A77 loc_1536: ; xref 273F:7A70
-273F:7A77 8B 7C 19 mov di,[si+19h]
-273F:7A7A 8B 7D 21 mov di,[di+21h]
-273F:7A7D loc_1537: ; xref 273F:7A75
-273F:7A7D 8B 45 03 mov ax,[di+3]
-273F:7A80 89 44 0A mov [si+0Ah],ax
-273F:7A83 loc_1538: ; xref 273F:7A6A
-273F:7A83 83 C6 29 add si,29h
-273F:7A86 E2 DE loop locloop_1535 ; Loop if cx > 0
-
-273F:7A88 5F pop di
-273F:7A89 F8 clc ; Clear carry flag
- assume ds:seg_code
-273F:7A8A 2E: F6 06 79E3 FF test cs:data_401,0FFh ; (273F:79E3=0)
-273F:7A90 75 01 jnz loc_ret_1539 ; Jump if not zero
-273F:7A92 F9 stc ; Set carry flag
-
-273F:7A93 loc_ret_1539: ; xref 273F:7A90
-273F:7A93 C3 retn
- sub_194 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A651, A6AE, A700
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7A94 load_resources proc near
-
-273F:7A94 A1 4CFE mov ax, data_814
-273F:7A97 A3 4D00 mov buffer_segment, ax
-273F:7A9A A3 4CE0 mov current_room_segment, ax
-273F:7A9D A3 4CE2 mov data_segment, ax
-273F:7AA0 05 2146 add ax,2146h
-273F:7AA3 A3 4CE4 mov data_segment2, ax
-273F:7AA6 05 0FA0 add ax, 0FA0h
-273F:7AA9 A3 4CE6 mov talk_dialog_buffer, ax
-273F:7AAC 05 0340 add ax,340h
-273F:7AAF A3 4D00 mov buffer_segment, ax
-273F:7AB2 B8 0004 mov ax,4 ; Read font data
-273F:7AB5 E8 00BC call read_into_buffer
-273F:7AB8 A3 4CF2 mov font_segment, ax
-273F:7ABB B8 0005 mov ax,5 ; Read menubar
-273F:7ABE 8B 0E 4CE2 mov cx,data_segment
-273F:7AC2 BA 0080 mov dx,80h
-273F:7AC5 E8 884C call read_entry
-273F:7AC8 A1 4D00 mov ax,buffer_segment
-273F:7ACB 8E C0 mov es,ax
-273F:7ACD 8B 16 4CE2 mov dx,data_segment
-273F:7AD1 FF 16 077C call [decode_entry_proc]
-273F:7AD5 A1 4D00 mov ax,buffer_segment ; (31E4:4D00=0)
-273F:7AD8 A3 4CF6 mov data_810,ax ; (31E4:4CF6=0)
-273F:7ADB 8B 16 074C mov dx, menubar_block_size
-273F:7ADF B1 04 mov cl,4
-273F:7AE1 D3 EA shr dx,cl ; Shift w/zeros fill
-273F:7AE3 01 16 4D00 add buffer_segment, dx ; (31E4:4D00=0)
-273F:7AE7 A1 4D00 mov ax,buffer_segment ; (31E4:4D00=0)
-273F:7AEA A3 4CF8 mov data_811,ax ; (31E4:4CF8=0)
-273F:7AED E8 00D1 call load_string_resources
-273F:7AF0 A1 4D00 mov ax,buffer_segment ; (31E4:4D00=0)
-273F:7AF3 8B 16 4D02 mov dx,buffer_segment_end ; (31E4:4D02=0)
-273F:7AF7 2B D0 sub dx,ax
-273F:7AF9 81 FA 186A cmp dx,186Ah
-273F:7AFD 73 08 jae loc_1541 ; Jump if above or =
-273F:7AFF B8 0008 mov ax,8
-273F:7B02 B6 01 mov dh,1
-273F:7B04 E8 C49D call display_message ; (3FA4)
-273F:7B07 loc_1541: ; xref 273F:7AFD
-273F:7B07 E8 9998 call sub_45 ; (14A2)
-273F:7B0A E8 FF52 call sub_195 ; (7A5F)
-273F:7B0D C3 retn
- load_resources endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7917
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- animation_decode_2 proc near
-273F:7B0E F6 44 02 10 test byte ptr [si+PIXEL_FLAGS], 10h
-273F:7B12 74 3E jz loc_ret_1542 ; Jump if zero
-273F:7B14 B8 2146 mov ax, 2146h
-273F:7B17 03 06 4CE0 add ax, current_room_segment
-273F:7B1B 2B 06 4CE2 sub ax, data_segment
-273F:7B1F 8B 5C 05 mov bx, [si+PIXEL_DATA_SIZE]
-273F:7B22 83 C3 0F add bx, 0Fh
-273F:7B25 B1 04 mov cl, 4
-273F:7B27 D3 EB shr bx, cl ; Shift w/zeros fill
-273F:7B29 3B D8 cmp bx, ax
-273F:7B2B 73 25 jae loc_ret_1542 ; Jump if above or =
-273F:7B2D 80 4C 02 20 or byte ptr [si+PIXEL_FLAGS], 20h
-273F:7B31 1E push ds
-273F:7B32 A1 4CE2 mov ax, data_segment
-273F:7B35 01 1E 4CE2 add data_segment, bx
-273F:7B39 8E C0 mov es, ax
-273F:7B3B 8B 4C 05 mov cx, [si+PIXEL_DATA_SIZE]
-273F:7B3E D1 E9 shr cx, 1 ; Shift w/zeros fill
-273F:7B40 87 44 03 xchg [si+PIXEL_DATA_SEGMENT], ax
-273F:7B43 A3 4D00 mov buffer_segment, ax
-273F:7B46 8E D8 mov ds, ax
-273F:7B48 56 push si
-273F:7B49 33 F6 xor si, si
-273F:7B4B 33 FF xor di, di
-273F:7B4D F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:7B4F 5E pop si
-273F:7B50 1F pop ds
-273F:7B51 C3 retn
-
-273F:7B52 loc_ret_1542:
-273F:7B52 C3 retn
- animation_decode_2 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:75B4, 75C2, 75E0, 75FE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- read_entry_into_buffer proc near
-
-273F:7B53 8B 0E 4D00 mov cx, buffer_segment
-273F:7B57 89 0E 4CE4 mov data_segment2, cx
-273F:7B5B BA 0080 mov dx, 80h
-273F:7B5E 80 26 11D0 EF and menubar_state, 0EFh
-273F:7B63 E8 87AE call read_entry
-273F:7B66 C3 retn
-
- read_entry_into_buffer endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A2BF, A2E9
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7B67 read_into_buffer_2 proc near
-273F:7B67 8B 0E 4D00 mov cx,buffer_segment ; (31E4:4D00=0)
-273F:7B6B 89 0E 4CE4 mov data_segment2, cx
-273F:7B6F 80 26 11D0 EF and menubar_state, 0EFh ; (31E4:11D0=3)
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:765D, 7666, 766F, 767D, 7AB5, 7BCB, 7BDB
-
-273F:7B74 read_into_buffer:
-273F:7B74 8B 0E 4D00 mov cx,buffer_segment ; (31E4:4D00=0)
-273F:7B78 33 D2 xor dx,dx ; Zero register
-273F:7B7A 80 26 11D0 EF and menubar_state, 0EFh ; (31E4:11D0=3)
-273F:7B7F 51 push cx
-273F:7B80 E8 8791 call read_entry ; (0314)
-273F:7B83 01 16 4D00 add buffer_segment, dx ; (31E4:4D00=0)
-273F:7B87 58 pop ax
-273F:7B88 C3 retn
- read_into_buffer_2 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:75B7, 75D5, 75F3, 7611
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7B89 decode_and_fade_in_display proc near
-
-273F:7B89 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:7B8E 74 10 je loc_1543 ; Jump if equal
-273F:7B90 B8 A000 mov ax, VGA_SEGMENT
-273F:7B93 8E C0 mov es,ax
-273F:7B95 8B 16 4D00 mov dx, buffer_segment ; decode loaded file entry
-273F:7B99 E8 BDEE call decode_file_entry ; (398A)
-273F:7B9C FF 26 0760 jmp word ptr [fade_in_proc]
-273F:7BA0 loc_1543: ; xref 273F:7B8E
-273F:7BA0 8B 16 4D00 mov dx, buffer_segment ; (31E4:4D00=0)
-273F:7BA4 8B C2 mov ax,dx
-273F:7BA6 05 0FA0 add ax,0FA0h
-273F:7BA9 A3 4CE4 mov data_segment2, ax
-273F:7BAC 05 0050 add ax,50h
-273F:7BAF 8E C0 mov es,ax
-273F:7BB1 E8 A8B6 call ega_decode_entry
-273F:7BB4 E8 8DAA call clear_hotspot_rects
-273F:7BB7 E8 F44B call menubar_clear_image
-273F:7BBA E8 A49F call ega_show_menu
-273F:7BBD FF 26 0760 jmp word ptr [fade_in_proc]
-
- decode_and_fade_in_display endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7AED, 8FAF, 93AC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7BC1 load_string_resources proc near
- assume ds:seg_code
-273F:7BC1 83 3E 9832 2A cmp room_number, 2Ah
-273F:7BC6 73 09 jae loc_1544 ; Jump if above or =
-273F:7BC8 B8 0011 mov ax,11h
-273F:7BCB E8 FFA6 call read_into_buffer ; (7B74)
-273F:7BCE A3 4CEA mov strings_segment_2, ax
-273F:7BD1 loc_1544: ; xref 273F:7BC6
-273F:7BD1 83 3E 9832 2A cmp room_number, 2Ah
-273F:7BD6 72 09 jb loc_1545 ; Jump if below
-273F:7BD8 B8 0012 mov ax,12h
-273F:7BDB E8 FF96 call read_into_buffer ; (7B74)
-273F:7BDE A3 4CEC mov strings_segment_3, ax
-273F:7BE1 loc_1545: ; xref 273F:7BD6
-273F:7BE1 A1 4D00 mov ax, buffer_segment
-273F:7BE4 A3 4CFA mov word ptr ds:[4CFAh],ax ; (273F:4CFA=0C183h)
-273F:7BE7 C3 retn
- load_string_resources endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7FF7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_character_in_room proc near
-
-0C07:7BE8 C7 06 BA1F 0000 mov general_val, 0
-0C07:7BEE 81 FB 03E8 cmp bx, PLAYER_HOTSPOT_ID
-0C07:7BF2 72 E jb loc_ret_1546
-0C07:7BF4 E8 F1 90 call get_room_resource_pointer
-0C07:7BF7 3B 4C 06 cmp cx, [si+HS_ROOM_NUM]
-0C07:7BFA 75 06 jnz loc_ret_1546
-0C07:7BFC C7061FBA0100 mov general_val, 1
-0C07:7C02 C3 loc_ret_1546: ret
- seq_character_in_room endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7FF7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7C03 hotspot_disable proc near
-273F:7C03 E8 90E2 call get_room_resource_pointer
-273F:7C06 80 64 03 7F and byte ptr [si+HS_FLAGS1], 7Fh
-273F:7C0A C3 retn
- hotspot_disable endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:60B5
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7C0B hotspot_enable proc near
-273F:7C0B E8 90DA call get_room_resource_pointer
-273F:7C0E 80 4C 03 80 or byte ptr [si+HS_FLAGS1], 80h
-273F:7C12 C3 retn
- hotspot_enable endp
-
-273F:7C13 00
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- follower_tick_proc proc near
-0C07:7C14 8B DE mov bx, si
-0C07:7C16 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-0C07:7C19 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-0C07:7C1C F7 06 BA5F FFFF test script_val_37, 0FFFFh
-0C07:7C22 75 38 jnz loc_1548_2
-0C07:7C24 8B DE mov bx, si
-0C07:7C26 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-0C07:7C29 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-0C07:7C2C F7 44 61 FFFF test word ptr [si+HS_ACTION_OFFSET], 0FFFFh
-0C07:7C31 75 29 jnz loc_1548_2
-0C07:7C33 8B 47 03 mov ax, [bx+CURRENT_ACTION_ROOM_NUM]
-0C07:7C36 3B 44 06 cmp ax, [si+HS_ROOM_NUM]
-0C07:7C39 74 21 jz loc_1548_2
-0C07:7C3B A1 6CF5 mov ax, [player_hotspot_rec+HS_ROOM_NUM]
-
-; The code below seems to use a lookup table for setting Ratpouch's destination
-; to be certain different room numbers if the player is in certain rooms
-0C07:7C3E 53 push bx
-0C07:7C3F 81 7D 1B 03EF cmp word ptr [di+ANIM_HOTSPOT_ID], GOEWIN_HOTSPOT_ID
-0C07:7C44 74 12 jz loc_1548
-0C07:7C46 BB 4F6D mov bx, offset follower_room_translate_list - 4
-0C07:7C49 83 C3 02 add bx, 2
-
-273F:7C49 loc_1547: ; xref 273F:7C53
-273F:7C49 83 C3 02 add bx, 2
-273F:7C4C F6 07 FF test byte ptr [bx], 0FFh
-273F:7C4F 74 07 jz loc_1548 ; Jump if zero
-273F:7C51 3A 07 cmp al, [bx] ; Player's room #?
-273F:7C53 75 F4 jne loc_1547 ; Jump if not equal
-273F:7C55 8A 47 01 mov al, [bx+1] ; Get new room #
-273F:7C58 loc_1548:
-273F:7C58 5B pop bx
-273F:7C59 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-
-273F:7C5C 8A 44 44 loc_1548_2: mov al, [si+HS_CHAR_MODE]
-273F:7C5F 3C 02 cmp al, CHARMODE_IDLE
-273F:7C61 75 35 jne loc_1550 ; Jump if not equal
-273F:7C63 F6 06 4F8A FF test data_817, 0FFh
-273F:7C68 74 24 jz loc_1549 ; Jump if zero
-273F:7C6A C6 06 4F8A 00 mov data_817, 0
-273F:7C6F 83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:7C73 83 C3 05 add bx, CURRENT_ACTION_RECORD_SIZE
-273F:7C76 C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
-273F:7C7A C7 47 01 13C2 mov word ptr [bx+CURRENT_ACTION_SUPPORT_TABLE], 13C2h
-273F:7C7F C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:7C82 C7 47 03 0007 mov word ptr [bx+CURRENT_ACTION_ROOM_NUM], 7
-273F:7C87 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:7C8B E9 D2F4 jmp standard_character_tick_proc
-273F:7C8E loc_1549: ; xref 273F:7C68
-273F:7C8E F6 44 FF FF test byte ptr [si-1], 0FFh
-273F:7C92 74 07 jz loc_1551 ; Jump if zero
-273F:7C94 80 6C FF 01 sub byte ptr [si-1], 1
-273F:7C98 loc_1550: ; xref 273F:7C61
-273F:7C98 E9 D2E7 jmp standard_character_tick_proc
-273F:7C9B loc_1551: ; xref 273F:7C92
-273F:7C9B 8B 5C 06 mov bx, [si+HS_ROOM_NUM]
-273F:7C9E 83 EB 01 sub bx, 1
-273F:7CA1 D1 E3 shl bx, 1
-273F:7CA3 ú81 C3 4D10 add bx, 4D10h
-273F:7CA7 8B 1F mov bx, [bx]
-273F:7CA9 8A 0F mov cl, [bx]
-273F:7CAB 0A C9 or cl, cl ; Zero ?
-273F:7CAD 74 25 jz loc_1554 ; Jump if zero
-273F:7CAF E8 C7BA call random
-273F:7CB2 32 ED xor ch, ch
-273F:7CB4 F7 E1 mul cx ; dx:ax = reg * ax
-273F:7CB6 83 C3 01 add bx, 1
-273F:7CB9 0B D2 or dx, dx ; Zero ?
-273F:7CBB 74 0F jz loc_1553 ; Jump if zero
-273F:7CBD loc_1552: ; xref 273F:7CC5, 7CCA
-273F:7CBD 8B 07 mov ax, [bx]
-273F:7CBF 83 C3 02 add bx, 2
-273F:7CC2 3D FFFF cmp ax, 0FFFFh
-273F:7CC5 75 F6 jne loc_1552 ; Jump if not equal
-273F:7CC7 83 EA 01 sub dx, 1
-273F:7CCA 75 F1 jnz loc_1552 ; Jump if not zero
-273F:7CCC loc_1553: ; xref 273F:7CBB
-273F:7CCC 8B 07 mov ax, [bx]
-273F:7CCE 83 C3 02 add bx, 2
-273F:7CD1 3D 0004 cmp ax, 4
-273F:7CD4 loc_1554: ; xref 273F:7CAD
-273F:7CD4 74 61 je loc_1557 ; Jump if equal
-273F:7CD6 3D 0003 cmp ax, 3
-273F:7CD9 75 0E jne loc_1555 ; Jump if not equal
-273F:7CDB 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:7CDE 3B 06 6CF5 cmp ax, [player_hotspot_rec+HS_ROOM_NUM]
-273F:7CE2 75 53 jne loc_1557 ; Jump if not equal
-273F:7CE4 C7 47 FE 0004 mov word ptr [bx-2], 4
-273F:7CE9 loc_1555: ; xref 273F:7CD9
-273F:7CE9 8B CB mov cx,bx
-273F:7CEB 83 3F FE cmp word ptr [bx], 0FFFEh
-273F:7CEE 75 2A jne loc_1556 ; Jump if not equal
-273F:7CF0 8B DE mov bx,si
-273F:7CF2 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:7CF5 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:7CF8 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:7CFB C7 06 0001 69D3 mov word ptr ds:[1],69D3h ; (273F:0001=31E4h)
-273F:7D01 C7 06 69D3 0020 mov word ptr ds:[69D3h],20h ; (273F:69D3=8006h)
-273F:7D07 C7 06 69D5 0000 mov word ptr ds:[69D5h],0 ; (273F:69D5=433h)
-273F:7D0D 83 C1 02 add cx, 2
-273F:7D10 83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:7D14 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:7D17 89 47 08 mov [bx+8], ax
-273F:7D1A loc_1556: ; xref 273F:7CEE
-273F:7D1A 8B DE mov bx, si
-273F:7D1C 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:7D1F 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:7D22 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:7D25 89 4F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], cx
-273F:7D28 C6 44 44 00 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_NONE
-273F:7D2C E8 C73D call random
-273F:7D2F B9 0020 mov cx, 20h
-273F:7D32 F7 E1 mul cx ; dx:ax = reg * ax
-273F:7D34 88 54 FF mov [si-1], dl
-273F:7D37 loc_1557: ; xref 273F:7CD4, 7CE2
-273F:7D37 E9 D248 jmp standard_character_tick_proc
- follower_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0D9B, 0E9B, 1381, 1D1D, 59C1, 5A23, 6305
- ; 6314, 6950, 8953, 8DF8
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- decode_string proc near
-
-273F:7D3A ú1E push ds
-273F:7D3B 25 1FFF and ax,1FFFh
-273F:7D3E E8 0099 call decode_string_init
-273F:7D41 loc_1559: ; xref 273F:7D49
-273F:7D41 úE8 0061 call read_bit
-273F:7D44 74 05 jz loc_1560 ; Jump if zero
-273F:7D46 83 C6 02 add si,2
-273F:7D49 EB F6 jmp short loc_1559 ; (7D41)
-273F:7D4B loc_1560: ; xref 273F:7D44
-273F:7D4B E8 0057 call read_bit
-273F:7D4E loc_1561: ; xref 273F:7D5E, 7D7E, 7DA0
-273F:7D4E úE8 98F7 call decode_character
-273F:7D51 0A C0 or al,al ; End of string sequence?
-273F:7D53 74 4D jz loc_1568 ; If yes, then exit
-273F:7D55 3C A0 cmp al,0A0h
-273F:7D57 73 27 jae loc_1565 ; Jump if above or =
-273F:7D59 3C 25 cmp al,25h ; '%'
-273F:7D5B 74 03 je loc_1562 ; Jump if equal
-273F:7D5D AA stosb ; Store al to es:[di]
-273F:7D5E EB EE jmp short loc_1561 ; (7D4E)
-
-273F:7D60 loc_1562: ; % handler - if it's %1, replace
-273F:7D60 E8 98E5 call decode_character ; it with the highlighted hotspot
-273F:7D63 1E push ds ; name. Otherwise, replace it
-273F:7D64 56 push si ; it with selected action string
-273F:7D65 BE 31E4 mov si,seg data_seg
-273F:7D68 8E DE mov ds,si
-273F:7D6A BE 4B43 mov si, offset hotspot_name
-273F:7D6D 3C 31 cmp al,31h ; '1'
-273F:7D6F 74 03 je loc_1563 ; Jump if equal
-273F:7D71 úBE 4B93 mov si, offset character_name
-273F:7D74 loc_1563:
-273F:7D74 úAC lodsb ; String [si] to al
-273F:7D75 0A C0 or al,al
-273F:7D77 74 03 jz loc_1564 ; Copy bytes until NULL
-273F:7D79 AA stosb
-273F:7D7A EB F8 jmp short loc_1563
-273F:7D7C loc_1564:
-273F:7D7C 5E pop si
-273F:7D7D 1F pop ds
-273F:7D7E EB CE jmp short loc_1561 ; (7D4E)
-
-273F:7D80 loc_1565: ; Handle character name substitution
-273F:7D80 56 push si
-273F:7D81 1E push ds
-273F:7D82 2C A0 sub al,0A0h
-273F:7D84 32 E4 xor ah,ah ; Zero register
-273F:7D86 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:7D88 8B F0 mov si,ax
-273F:7D8A B8 31E4 mov ax,data_seg
-273F:7D8D 8E D8 mov ds,ax
- assume ds:data_seg
-273F:7D8F A1 4CEE mov ax, names_segment
-273F:7D92 8E D8 mov ds,ax
-273F:7D94 8B 34 mov si,[si] ; Get name position from offset list
-273F:7D96 loc_1566:
-273F:7D96 úAC lodsb ; String [si] to al
-273F:7D97 0A C0 or al,al ; Zero ?
-273F:7D99 74 03 jz loc_1567 ; Jump if zero
-273F:7D9B AA stosb ; Store al to es:[di]
-273F:7D9C EB F8 jmp short loc_1566
-273F:7D9E loc_1567:
-273F:7D9E 1F pop ds
-273F:7D9F 5E pop si
-273F:7DA0 EB AC jmp short loc_1561
-273F:7DA2 loc_1568:
-273F:7DA2 AA stosb ; Store final NULL
-273F:7DA3 1F pop ds
-273F:7DA4 C3 retn
-
- decode_string endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1648, 1650, 165B, 1663, 1671, 167C, 168A
- ; 1692, 169A, 16A8, 16B3, 16BE, 16C9, 16D7
- ; 16DF, 16E7, 16F2, 1700, 1708, 1716, 1721
- ; 172F, 1737, 173F, 174D, 1755, 1763, 176E
- ; 177C, 1784, 178C, 179A, 17A2, 17B0, 17BB
- ; 17C9, 17D1, 17D9, 17E4, 17F2, 17FA, 1808
- ; 1813, 181E, 182C, 1834, 183C, 1847, 1855
- ; 185D, 186B, 1876, 1884, 188C, 1894, 189F
- ; 18AD, 18B8, 18C3, 18D1, 18D9, 18E1, 18EF
- ; 18F7, 1905, 1910, 191E, 1926, 192E, 1939
- ; 1947, 1952, 195D, 196B, 1973, 197B, 1989
- ; 1994, 19A2, 19AA, 19B5, 19C0, 19CE, 19D6
- ; 19E1, 19EF, 19F7, 1A05, 1A0D, 1A1B, 1A23
- ; 1A31, 1A39, 7D41, 7D4B, 7E97, 7EA1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7DA5 read_bit proc near
-273F:7DA5 8A 04 mov al,[si]
-273F:7DA7 22 C2 and al,dl
-273F:7DA9 D0 EA shr dl,1 ; Shift w/zeros fill
-273F:7DAB 73 03 jnc loc_1569 ; Jump if carry=0
-273F:7DAD 46 inc si
-273F:7DAE B2 80 mov dl,80h
-273F:7DB0 loc_1569: ; xref 273F:7DAB
-273F:7DB0 0A C0 or al,al ; Zero ?
-273F:7DB2 C3 retn
- read_bit endp
-
- ;* No entry point to code
-273F:7DB3 1E push ds
-273F:7DB4 07 pop es
-273F:7DB5 8B EC mov bp,sp
-273F:7DB7 83 C5 02 add bp,2
-273F:7DBA loc_1570: ; xref 273F:7DC4, 7DD8
-273F:7DBA úAC lodsb ; String [si] to al
-273F:7DBB 0A C0 or al,al ; Zero ?
-273F:7DBD 74 07 jz loc_ret_1571 ; Jump if zero
-273F:7DBF 3C 25 cmp al,25h ; '%'
-273F:7DC1 74 04 je loc_1572 ; Jump if equal
-273F:7DC3 AA stosb ; Store al to es:[di]
-273F:7DC4 EB F4 jmp short loc_1570 ; (7DBA)
-
-273F:7DC6 loc_ret_1571: ; xref 273F:7DBD
-273F:7DC6 C3 retn
-273F:7DC7 loc_1572: ; xref 273F:7DC1
-273F:7DC7 AC lodsb ; String [si] to al
-273F:7DC8 56 push si
-273F:7DC9 8B 76 00 mov si,[bp]
-273F:7DCC 83 C5 02 add bp,2
-273F:7DCF loc_1573: ; xref 273F:7DD5
-273F:7DCF úAC lodsb ; String [si] to al
-273F:7DD0 0A C0 or al,al ; Zero ?
-273F:7DD2 74 03 jz loc_1574 ; Jump if zero
-273F:7DD4 AA stosb ; Store al to es:[di]
-273F:7DD5 EB F8 jmp short loc_1573 ; (7DCF)
-273F:7DD7 loc_1574: ; xref 273F:7DD2
-273F:7DD7 5E pop si
-273F:7DD8 EB E0 jmp short loc_1570 ; (7DBA)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7D3E, 7E94
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7DDA decode_string_init proc near
-273F:7DDA 1E push ds
-273F:7DDB 50 push ax
-273F:7DDC B8 31E4 mov ax,data_seg
-273F:7DDF 8E D8 mov ds,ax
-273F:7DE1 58 pop ax
-273F:7DE2 83 3E 9832 2A cmp room_number, 2Ah
-273F:7DE7 72 0D jb loc_1575 ; Jump if below
-273F:7DE9 3D 07D0 cmp ax,7D0h
-273F:7DEC 72 08 jb loc_1575 ; Jump if below
-273F:7DEE 3D 0FA0 cmp ax,0FA0h
-273F:7DF1 73 03 jae loc_1575 ; Jump if above or =
-273F:7DF3 B8 0076 mov ax,76h
-273F:7DF6 loc_1575: ; xref 273F:7DE7, 7DEC, 7DF1
-273F:7DF6 83 3E 9832 2A cmp room_number, 2Ah
-273F:7DFB 73 08 jae loc_1576 ; Jump if above or =
-273F:7DFD 3D 0FA0 cmp ax,0FA0h
-273F:7E00 72 03 jb loc_1576 ; Jump if below
-273F:7E02 B8 0076 mov ax,76h
-273F:7E05 loc_1576: ; xref 273F:7DFB, 7E00
-273F:7E05 1F pop ds
-273F:7E06 1E push ds
-273F:7E07 07 pop es
-273F:7E08 BB 31E4 mov bx,seg data_seg
-273F:7E0B 8E DB mov ds,bx
-273F:7E0D 8B 1E 4CE8 mov bx, strings_segment
-273F:7E11 3D 07D0 cmp ax,7D0h
-273F:7E14 72 13 jb loc_1577 ; Jump if below
-273F:7E16 8B 1E 4CEA mov bx, strings_segment_2
-273F:7E1A 2D 07D0 sub ax,7D0h
-273F:7E1D 3D 07D0 cmp ax,7D0h
-273F:7E20 72 07 jb loc_1577 ; Jump if below
-273F:7E22 8B 1E 4CEC mov bx, strings_segment_3
-273F:7E26 2D 07D0 sub ax,7D0h
-273F:7E29 loc_1577: ; xref 273F:7E14, 7E20
-273F:7E29 8E DB mov ds,bx
-273F:7E2B 8B D0 mov dx,ax
-273F:7E2D úBE 0004 mov si, 4
-273F:7E30 55 push bp
-273F:7E31 33 DB xor bx,bx ; Zero register
-273F:7E33 33 ED xor bp,bp ; Zero register
-273F:7E35 B1 05 mov cl,5
-273F:7E37 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:7E39 74 0A jz loc_1579 ; Jump if zero
-273F:7E3B 8B C8 mov cx,ax
-
-
-
-273F:7E3D locloop_1578: ; xref 273F:7E43
-273F:7E3D AD lodsw ; String [si] to ax
-273F:7E3E 03 D8 add bx,ax
-273F:7E40 83 D5 00 adc bp,0
-273F:7E43 E2 F8 loop locloop_1578 ; Loop if cx > 0
-
-273F:7E45 loc_1579: ; xref 273F:7E39
-273F:7E45 8B CA mov cx,dx
-273F:7E47 83 E1 1F and cx,1Fh
-273F:7E4A 74 28 jz loc_1582 ; Jump if zero
-273F:7E4C 83 E2 E0 and dx,0FFE0h
-273F:7E4F 03 16 0000 add dx,ds:[0]
-273F:7E53 8B F2 mov si,dx
-
-273F:7E55 locloop_1580: ; xref 273F:7E61, 7E72
-273F:7E55 AC lodsb ; String [si] to al
-273F:7E56 32 E4 xor ah,ah ; Zero register
-273F:7E58 A8 80 test al,80h
-273F:7E5A 75 09 jnz loc_1581 ; Jump if not zero
-273F:7E5C 03 D8 add bx,ax
-273F:7E5E 83 D5 00 adc bp,0
-273F:7E61 E2 F2 loop locloop_1580 ; Loop if cx > 0
-
-273F:7E63 EB 0F jmp short loc_1582 ; (7E74)
-273F:7E65 loc_1581: ; xref 273F:7E5A
-273F:7E65 24 7F and al,7Fh
-273F:7E67 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:7E69 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:7E6B D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:7E6D 03 D8 add bx,ax
-273F:7E6F 83 D5 00 adc bp,0
-273F:7E72 E2 E1 loop locloop_1580 ; Loop if cx > 0
-
-273F:7E74 loc_1582: ; xref 273F:7E4A, 7E63
-273F:7E74 B2 80 mov dl,80h
-273F:7E76 8A CB mov cl,bl
-273F:7E78 80 E1 03 and cl,3
-273F:7E7B 74 04 jz loc_1583 ; Jump if zero
-273F:7E7D D0 E1 shl cl,1 ; Shift w/zeros fill
-273F:7E7F D2 EA shr dl,cl ; Shift w/zeros fill
-273F:7E81 loc_1583: ; xref 273F:7E7B
-273F:7E81 D1 EB shr bx,1 ; Shift w/zeros fill
-273F:7E83 D1 EB shr bx,1 ; Shift w/zeros fill
-273F:7E85 03 1E 0002 add bx,word ptr ds:[2]
-273F:7E89 8B F3 mov si,bx
-273F:7E8B B1 0E mov cl,0Eh
-273F:7E8D D3 E5 shl bp,cl ; Shift w/zeros fill
-273F:7E8F 03 F5 add si,bp
-273F:7E91 5D pop bp
-273F:7E92 C3 retn
- decode_string_init endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6368
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- decode_character_and_hotspot_names_init proc near
-273F:7E93 1E push ds
-273F:7E94 E8 FF43 call decode_string_init
-273F:7E97 loc_1584: ; xref 273F:7E9F
-273F:7E97 úE8 FF0B call read_bit
-273F:7E9A 74 05 jz loc_1585 ; Jump if zero
-273F:7E9C 83 C6 02 add si,2
-273F:7E9F EB F6 jmp short loc_1584 ; (7E97)
-273F:7EA1 loc_1585: ; xref 273F:7E9A
-273F:7EA1 E8 FF01 call read_bit
-273F:7EA4 1F pop ds
-273F:7EA5 C3 retn
- decode_character_and_hotspot_names_init endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:6375, 6381
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- decode_hotspot_name proc near
-273F:7EA6 3D 03E7 cmp ax, 3E7h
-273F:7EA9 74 05 je loc_1586 ; Jump if equal
-273F:7EAB 3D 03E5 cmp ax, 3E5h
-273F:7EAE 75 04 jne loc_1587 ; Jump if not equal
-273F:7EB0 loc_1586: ; xref 273F:7EA9
-273F:7EB0 C6 05 00 mov byte ptr [di], 0
-273F:7EB3 C3 retn
-273F:7EB4 loc_1587: ; xref 273F:7EAE
-273F:7EB4 E8 8E6A call get_room_resource_pointer4
-273F:7EB7 8B 44 02 mov ax, [si+HSH_NAME]
-273F:7EBA F6 C3 FF test bl, 0FFh ; Special handling?
-273F:7EBD 74 28 jz loc_1593 ; If not then go do normal decode
-273F:7EBF F6 C4 C0 test ah, 0C0h ; Test upper two bits
-273F:7EC2 74 0C jz loc_1589 ; Jump if zero
-273F:7EC4 78 05 js loc_1588 ; Jump if sign=1
-273F:7EC6 BE 4F90 mov si, offset a_str ; 'a'
-273F:7EC9 EB 0D jmp short loc_1590
-273F:7ECB loc_1588:
-273F:7ECB BE 4F92 mov si, offset an_str
-273F:7ECE EB 08 jmp short loc_1590
-273F:7ED0 loc_1589:
-273F:7ED0 F6 C4 20 test ah, 20h
-273F:7ED3 74 12 jz loc_1593
-273F:7ED5 úBE 4F95 mov si, offset the_str ; 'the'
-273F:7ED8 loc_1590: ; xref 273F:7EC9, 7ECE
-273F:7ED8 50 push ax
-273F:7ED9 1E push ds
-273F:7EDA 07 pop es
-273F:7EDB loc_1591: ; Loop to copy selected article
-273F:7EDB úAC lodsb ; String [si] to al
-273F:7EDC 0A C0 or al,al ; Zero ?
-273F:7EDE 74 03 jz loc_1592 ; Jump if zero
-273F:7EE0 AA stosb ; Store al to es:[di]
-273F:7EE1 EB F8 jmp short loc_1591 ; (7EDB)
-273F:7EE3 loc_1592: ; xref 273F:7EDE
-273F:7EE3 B0 20 mov al, 20h ; ' '
-273F:7EE5 AA stosb ; Store al to es:[di]
-273F:7EE6 58 pop ax
-273F:7EE7 loc_1593:
-273F:7EE7 80 E4 1F and ah, 1Fh ; Default decoding
-273F:7EEA E9 FE4D jmp decode_string
- decode_hotspot_name endp
-
- db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:7EEE C6 06 70FD 03 mov byte ptr [70FDh], 3
-273F:7EF3 C7 06 70FB 7FFF MOV WORD PTR [70FB],7FFF
-273F:7EF9 C3 RET
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- skorl_tick_proc proc near
-273F:7EFA F7 06 BA2B FFFF test script_v11, 0FFFFh
-273F:7F00 74 22 jz vskorl_2
-273F:7F02 F6 45 1D FF test byte ptr [di+ANIM_SKIP], 0FFh
-273F:7F06 75 1C jnz vskorl_2
-273F:7F08 F6 06 1926 FF test data_669, 0FFh
-273F:7F0D 75 15 jnz vskorl_2
-273F:7F0F BB 6CEF mov bx, offset player_hotspot_rec
-273F:7F12 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Is Skorl in the same
-273F:7F15 3B 47 06 cmp ax, [bx+HS_ROOM_NUM] ; room as the player?
-273F:7F18 75 0A jnz vskorl_2 ; No, so skip
-273F:7F1A E8 84 D6 call characters_impinging_check ; Check if Skorl has 'caught' player
-273F:7F1D 74 05 jz vskorl_2
-273F:7F1F 80 0E 073D 70 or status_flags2, FLAG_RESTART || FLAG_CAUGHT || FLAG_RESTORERESTART
-
-273F:7F24 E9 5B D0 vskorl_2: jmp standard_character_tick_proc
- skorl_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- set_village_skorl_tick_proc proc near
-273F:7F27 C7 06 6DFD 7EFA mov word ptr [village_skorl_hotspot_rec+HS_TICK_PROC], offset skorl_tick_proc
-273F:7F2D 8B 3E 6DF1 mov di, [village_skorl_hotspot_rec+HS_ANIM_OFFSET]
-273F:7F31 C7 45 11 FA 7E mov word ptr [di+ANIM_TICK_PROC], offset skorl_tick_proc
-273F:7F36 C3 ret
- set_village_skorl_tick_proc endp
-
-273F:7F37 E8 3E E2 call talk_countdown_handler
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Tick action proc for standard animations, and is responsible
- ; for them being animated. This seems to include the vertical
- ; movement of the drip animation
- ; di = animation slot entry, si = hotspot resource
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- std_animation_tick_proc proc near
-
-273F:7F3A úF7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:7F3F 75 0E jnz loc_1596 ; Jump if not zero
-273F:7F41 E8 9065 call hotspot_script_execute
-273F:7F44 75 08 jnz loc_ret_1595 ; Jump if not zero
-273F:7F46 E8 9329 call animation_unload
-273F:7F49 81 4C 06 8000 or word ptr [si+6], 8000h
-
-273F:7F4E loc_ret_1595: ; xref 273F:7F44
-273F:7F4E C3 retn
-273F:7F4F loc_1596: ; xref 273F:7F3F, 7F6E, 7FA6
-273F:7F4F 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR], 1
-273F:7F53 C3 retn
-
- std_animation_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7F54 F6 44 2A FF test byte ptr [si+2Ah],0FFh
-273F:7F58 75 0D jnz loc_1598 ; Jump if not zero
-273F:7F5A úBB 6CEF mov bx, offset player_hotspot_rec
-273F:7F5D E8 D641 call characters_impinging_check
-273F:7F60 74 04 jz loc_ret_1597 ; Jump if zero
-273F:7F62 80 44 2A 01 add byte ptr [si+2Ah],1
-
-273F:7F66 loc_ret_1597: ; xref 273F:7F60
-273F:7F66 C3 retn
-273F:7F67 loc_1598: ; xref 273F:7F58
-273F:7F67 EB D1 jmp short std_animation_tick_proc
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- dropping_torch_tick_proc proc near
-273F:7F69 F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:7F6E 75 DF jnz loc_1596 ; Jump if not zero
-273F:7F70 E8 9036 call hotspot_script_execute
-273F:7F73 75 7E jnz loc_ret_1599 ; Jump if not zero
-273F:7F75 E8 92FA call animation_unload
-273F:7F78 BB 041C mov bx, 41Ch
-273F:7F7B BE 7F1F mov si, 7F1Fh
-273F:7F7E E8 F1F1 call animation_load_2
-273F:7F81 BB 0008 mov bx,8
-273F:7F84 A0 1926 mov al, data_669
-273F:7F87 50 push ax
-273F:7F88 C6 06 1926 00 mov data_669, 0
-273F:7F8D E8 206D call play_sound ; (9FFD)
-273F:7F90 58 pop ax
-273F:7F91 A2 1926 mov data_669, al
-
-273F:7F94 BB 0418 mov bx, 418h ; Fire on straw in room #1
-273F:7F97 úBE 7EF0 mov si,offset data_409
-273F:7F9A 80 4C 03 80 or byte ptr [si+3],80h ; Enable it to be highlighted
-273F:7F9E E9 F1D1 jmp animation_load_2 ; Load it for animation
- dropping_torch_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:7FA1 F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:7FA6 75 A7 jnz loc_1596 ; Jump if not zero
-273F:7FA8 E8 8FFE call hotspot_script_execute
-273F:7FAB 75 46 jnz loc_ret_1599 ; Jump if not zero
-273F:7FAD E8 92C2 call animation_unload
-273F:7FB0 C6 44 15 00 mov byte ptr [si+15h],0
-273F:7FB4 C7 06 6CFC 0120 mov word ptr [player_hotspot_rec+HS_X], 80h + (SCREEN_WIDTH / 2)
-273F:7FBA C7 06 6CFE 00E0 mov word ptr [player_hotspot_rec+HS_Y], 80h + (SCREEN_HEIGHT - MENUBAR_Y_SIZE) / 2
-273F:7FC0 8B 1E 6CFA mov bx, word ptr [player_hotspot_rec+HS_ANIM_OFFSET]
-273F:7FC4 C7 07 0120 mov word ptr [bx+ANIM_X], 80h + (SCREEN_WIDTH / 2)
-273F:7FC8 C7 47 02 00E0 mov word ptr [bx+ANIM_Y], 80h + (SCREEN_HEIGHT - MENUBAR_Y_SIZE) / 2
-273F:7FCD C6 47 26 01 mov byte ptr [bx+ANIM_DIRECTION], FACING_DOWN
-273F:7FD1 E8 C6DD call character_reset_direction
-273F:7FD4 C6 44 44 00 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_NONE
-273F:7FD8 C6 44 49 00 mov byte ptr [si+HS_PATHFIND_COVERED], 0
-273F:7FDC C6 06 70FD 00 mov byte ptr ds:[70FDh],0 ; (273F:70FD=79h)
-273F:7FE1 C7 06 70FB 0000 mov word ptr ds:[70FBh],0 ; (273F:70FB=80CEh)
-273F:7FE7 C7 06 70B9 1C00 mov [ratpouch_hotspot_rec], 1C00h ; Set his actions
-273F:7FED C7 06 70BB 0082 mov [ratpouch_hotspot_rec+2],82h
-
-273F:7FF3 loc_ret_1599: ; xref 273F:7F73, 7FAB
-273F:7FF3 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:7FF4 BB 040F mov bx, 40Fh
-273F:7FF7 E8 FC09 call hotspot_disable
-273F:7FFA 8B 7C 0B mov di,[si+0Bh]
-273F:7FFD E8 9272 call animation_unload
-273F:8000 BB 040E mov bx, 40Eh
-273F:8003 úBE 7EC6 mov si, 7EC6h ; (273F:7EC6=0BEh)
-273F:8006 E9 F169 jmp animation_load_2
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- fire_tick_proc proc near
-273F:8009 E8 FF2E call std_animation_tick_proc
-273F:800C E9 F11F jmp pathfind_flag_covered_cells
- fire_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:800F C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:8013 loc_set_frame_offset: ; xref 273F:8269, 83C8, 840E, 84C7
- ; 84D2, 85D1
-273F:8013 ú8A 44 2A mov al, [si+HS_ACTION_CTR]
-273F:8016 32 E4 xor ah, ah ; Zero register
-273F:8018 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
-273F:801B F7 67 07 mul word ptr [bx+PIXEL_FRAME_SIZE]
-273F:801E 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax
-273F:8021 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8022 B8 2714 mov ax, 2714h
-273F:8025 E8 F1C6 call room_exit_hs_get_pointer
-273F:8028 C6 44 0C 00 mov byte ptr [si+0Ch],0 ; Mark door open
-273F:802C úBE 70B9 mov si, offset ratpouch_hotspot_rec
-273F:802F 8B DE mov bx,si
-273F:8031 03 5C 61 add bx, [si+ACTION_OFFSET]
-273F:8034 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:8037 C7 47 03 0007 mov word ptr [bx+CURRENT_ACTION_ROOM_NUM], 7
-273F:803C 33 C0 xor ax,ax ; Zero register
-273F:803E 8B 5F 01 mov bx, [bx+CURRENT_ACTION_SUPPORT_TABLE]
-273F:8041 89 07 mov [bx],ax
-273F:8043 89 04 mov [si],ax
-273F:8045 89 44 02 mov [si+2],ax
-273F:8048 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_cut_sack proc near
-273F:8049 C7 06 840A 010A mov sack_hotspot_rec[HS_Y], 10Ah
-273F:804F 8B 1E 8406 mov bx, sack_hotspot_rec[HS_ANIM_OFFSET]
-273F:8053 0B DB or bx, bx ; Is active animation?
-273F:8055 74 05 jz loc_ret_1601 ; Skip if not
-273F:8057 C7 47 02 010A mov word ptr [bx+ANIM_Y], 10Ah
-273F:805C loc_ret_1601: ; xref 273F:8055
-273F:805C C3 retn
- seq_cut_sack endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:805D C7 06 6BDD 0063 mov word ptr ds:[6BDDh],63h ; (273F:6BDD=0C75h)
-273F:8063 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8064 C7 06 6BDD 0013 mov word ptr ds:[6BDDh],13h ; (273F:6BDD=0C75h)
-273F:806A C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_37 proc near
-273F:806B C7 06 7E7D 0118 mov oil_burner_hotspot_rec[HS_X], 7F3Ah ;Maybe incorrect?
-273F:8071 C7 06 7E87 7F3A mov word ptr ds:[7E87h],7F3Ah ; (273F:7E87=2)
-273F:8077 8B 3E 7E7B mov di, oil_burner_hotspot_rec[HS_ANIM_OFFSET]
-
-273F:807B C7 05 0118 mov word ptr [di],118h ; X start
-273F:807F C7 45 11 7F3A mov word ptr [di+11h],7F3Ah ; Handler proc offset
-273F:8084 C3 retn
- seq_method_37 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8085 C7 06 8EA9 09E0 mov word ptr ds:[8EA9h],9E0h ; (273F:8EA9=0F003h)
-273F:808B 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:8090 75 06 jne loc_ret_1602 ; Jump if not equal
-273F:8092 C7 06 8EA9 0AF0 mov word ptr ds:[8EA9h],0AF0h ; (273F:8EA9=0F003h)
-273F:8098 loc_ret_1602: ; xref 273F:8090
-273F:8098 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_transform_player proc near
-273F:8099 úBE 7E9B mov si, offset resource_425_rec
-273F:809C úBF 6CEF mov di, offset player_hotspot_rec
-273F:809F 8B 45 06 mov ax, [di+HS_ROOM_NUM] ; Get player room number
-273F:80A2 89 44 06 mov [si+HS_ROOM_NUM], ax ; Move into player's room
-273F:80A5 8B 45 0D mov ax, [di+HS_X]
-273F:80A8 2D 000E sub ax, 14
-273F:80AB 89 44 0D mov [si+HS_X], ax ; Set x position
-273F:80AE 8B 45 0F mov ax,[di+HS_Y]
-273F:80B1 2D 000A sub ax, 10
-273F:80B4 89 44 0F mov [si+HS_Y], ax ; Set y position
-273F:80B7 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:80BB C7 44 24 0630 mov word ptr [si+HS_SCRIPT_OFFSET], 630h
-273F:80C0 BB 0425 mov bx, 425h
-273F:80C3 E9 8C00 jmp animation_load_entry
- seq_transform_player endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
-273F:80C6 A1 6CF5 mov ax,word ptr ds:[6CF5h] ; (273F:6CF5=551Eh)
-273F:80C9 89 44 06 mov [si+6],ax
-273F:80CC A1 6CFC mov ax,word ptr ds:[6CFCh] ; (273F:6CFC=1E8Bh)
-273F:80CF 2D 000E sub ax,0Eh
-273F:80D2 89 05 mov [di],ax
-273F:80D4 A1 6CFE mov ax,word ptr ds:[6CFEh] ; (273F:6CFE=76Eh)
-273F:80D7 2D 000A sub ax,0Ah
-273F:80DA 89 45 02 mov [di+2],ax
-273F:80DD 80 44 2A 01 add byte ptr [si+2Ah],1
-273F:80E1 80 7C 2A 06 cmp byte ptr [si+2Ah],6
-273F:80E5 75 30 jne loc_1606 ; Jump if not equal
-273F:80E7 83 3E BA2B 02 cmp script_v11, 2
-273F:80EC 74 08 je loc_1603 ; Jump if equal
-273F:80EE F7 06 BA4D FFFF test word ptr ds:data_488e,0FFFFh ; (273F:BA4D=0)
-273F:80F4 74 0B jz loc_1604 ; Jump if zero
-273F:80F6 loc_1603: ; xref 273F:80EC
-273F:80F6 C7 06 BA4D 0000 mov word ptr ds:data_488e,0 ; (273F:BA4D=0)
-273F:80FC BB 5C80 mov bx,5C80h
-273F:80FF EB 08 jmp short loc_1605 ; (8109)
-273F:8101 loc_1604: ; xref 273F:80F4
-273F:8101 83 06 BA4D 01 add word ptr ds:data_488e,1 ; (273F:BA4D=0)
-273F:8106 úBB 5CAA mov bx,5CAAh ; (273F:5CAA=0BAh)
-273F:8109 loc_1605: ; xref 273F:80FF
-273F:8109 89 1E 6D10 mov word ptr ds:[6D10h],bx ; (273F:6D10=1E52h)
-273F:810D 8B 47 03 mov ax,[bx+3]
-273F:8110 8B 1E 6CFA mov bx,word ptr ds:[6CFAh] ; (273F:6CFA=1F33h)
-273F:8114 89 47 0A mov [bx+0Ah],ax
-273F:8117 loc_1606: ; xref 273F:80E5
-273F:8117 E8 8E8F call hotspot_script_execute
-273F:811A 75 22 jnz loc_ret_1607 ; Jump if not zero
-273F:811C E8 9153 call animation_unload
-273F:811F C7 44 06 01A8 mov word ptr [si+6],1A8h
-273F:8124 F7 06 BA4D FFFF test word ptr ds:data_488e,0FFFFh ; (273F:BA4D=0)
-273F:812A 74 12 jz loc_ret_1607 ; Jump if zero
-273F:812C BB 03E9 mov bx, RATPOUCH_HOTSPOT_ID
-273F:812F B9 0854 mov cx, 854h
-273F:8132 E8 DFD5 call start_talk_noone
-273F:8135 B8 0004 mov ax,4
-273F:8138 úBE 70B9 mov si, offset ratpouch_hotspot_rec
-273F:813B E9 C3F7 jmp loc_867 ; (4535)
-
-273F:813E loc_ret_1607: ; xref 273F:811A, 812A, 814E
-273F:813E C3 retn
- ;* No entry point to code
-273F:813F F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:8144 74 05 jz loc_1608 ; Jump if zero
-273F:8146 83 6C 1F 01 sub word ptr [si+1Fh],1
-273F:814A C3 retn
-273F:814B loc_1608: ; xref 273F:8144
-273F:814B E8 8E5B call hotspot_script_execute
-273F:814E 75 EE jnz loc_ret_1607 ; Jump if not zero
-273F:8150 C7 44 24 0B82 mov word ptr [si+24h],0B82h
-273F:8155 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:815A 75 05 jne loc_1609 ; Jump if not equal
-273F:815C C7 44 24 0B7C mov word ptr [si+24h],0B7Ch
-273F:8161 loc_1609: ; xref 273F:815A
-273F:8161 C7 06 BA4B 0001 mov word ptr ds:data_487e,1 ; (273F:BA4B=0)
-273F:8167 C3 retn
-
-273F:8168 0C00 data_410 dw 0C00h
-273F:816A 0082 data_411 dw 82h
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Sets the action bitset for Goewin
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_55 proc near
-273F:816C C6 06 7D4B 01 mov BYTE PTR [goewin_hotspot_rec+HS_ACTION_CTR], 1
-273F:8171 2E A1 8168 mov ax, cs:data_410
-273F:8175 A3 7D21 mov [goewin_hotspot_rec], ax
-273F:8178 2E A1 816A mov ax, cs:data_411
-273F:817C A3 7D23 mov [goewin_hotspot_rec+2], ax
-273F:817F C3 ret
- seq_method_55 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8180 F6 44 2A FF test bye ptr [SI+HS_ACTION_CTR], 0FFh
-273F:8184 74 B8 jz loc_ret_1607
-273F:8186 E8 20 8E call hotspot_script_execute
-273F:8189 75 B3 jnz loc_ret_1607
-273F:818B C7 44 17 4F82 mov word ptr [si+HS_TICK_PROC], 4F82h
-273F:8190 C7 45 11 4F82 mov word ptr [di+ANIM_TICK_PROC], 4F82h
-273F:8195 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:8199 C3 ret
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_is_skorl_in_cell proc near
-273F:819A C7 06 BA1F 0000 mov general_val, 0
-273F:81A0 83 3E 6D6D 01 cmp skorl_hotspot_rec[HS_ROOM_NUM], 1
-273F:81A5 74 06 je loc_ret_1610
-273F:81A7 C7 06 BA1F 0001 mov general_val, 1
-273F:81AD loc_ret_1610:
-273F:81AD C3 retn
- seq_is_skorl_in_cell endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_3 proc near
-273F:81AE 88 1E 9836 mov header_flag_mask, bl
-273F:81B2 C3 retn
- seq_method_3 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- prisoner_tick_proc proc near
-273F:81B3 E8 DFC2 call talk_countdown_handler
-273F:81B6 F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:81BB 74 05 jz loc_1612 ; Jump if zero
-273F:81BD 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR], 1
-273F:81C1 loc_ret_1611:
-273F:81C1 C3 retn
-273F:81C2 loc_1612:
-273F:81C2 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 0FFh
-273F:81C6 74 11 jz loc_1613 ; Jump if zero
-273F:81C8 E8 8DDE call hotspot_script_execute
-273F:81CB 0B C0 or ax, ax ; Zero ?
-273F:81CD 75 F2 jnz loc_ret_1611 ; Jump if not zero
-273F:81CF C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:81D3 C7 44 24 03E0 mov word ptr [si+HS_SCRIPT_OFFSET], 3E0h
-273F:81D8 C3 retn
-
-273F:81D9 loc_1613: ; xref 273F:81C6
-273F:81D9 F7 06 BA33 FFFF test prisoner_dead, 0FFFFh
-273F:81DF 75 E0 jnz loc_ret_1611 ; Jump if not zero
-273F:81E1 E8 C288 call random
-273F:81E4 3D 0006 cmp ax, 6
-273F:81E7 72 D8 jb loc_ret_1611 ; Jump if below
-273F:81E9 C6 44 2A 01 mov byte ptr [si+HS_ACTION_CTR], 1
-273F:81ED C7 44 24 03F6 mov word ptr [si+HS_SCRIPT_OFFSET], 3F6h
-273F:81F2 C3 retn
- prisoner_tick_proc endp
-
- ;* No entry point to code
-273F:81F3 E8 DF82 call talk_countdown_handler
-273F:81F6 F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:81FB 74 05 jz loc_1614 ; Jump if zero
-273F:81FD 83 6C 1F 01 sub word ptr [si+1Fh],1
-273F:8201 C3 retn
-273F:8202 loc_1614: ; xref 273F:81FB
-273F:8202 E8 8DA4 call hotspot_script_execute
-273F:8205 8A 44 2A mov al,[si+2Ah]
-273F:8208 32 E4 xor ah,ah ; Zero register
-273F:820A 89 44 1F mov [si+1Fh],ax
-273F:820D C3 retn
- ;* No entry point to code
-273F:820E E8 DF67 call talk_countdown_handler
-273F:8211 F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:8216 74 05 jz loc_1616 ; Jump if zero
-273F:8218 83 6C 1F 01 sub word ptr [si+1Fh],1
-
-273F:821C loc_ret_1615: ; xref 273F:8222
-273F:821C C3 retn
-273F:821D loc_1616: ; xref 273F:8216
-273F:821D E8 8D89 call hotspot_script_execute
-273F:8220 0B C0 or ax,ax ; Zero ?
-273F:8222 75 F8 jnz loc_ret_1615 ; Jump if not zero
-273F:8224 E8 C245 call random
-273F:8227 BB 0000 mov bx,0
-273F:822A A9 0004 test ax,4
-273F:822D 74 03 jz loc_1617 ; Jump if zero
-273F:822F BB 0054 mov bx,54h
-273F:8232 loc_1617: ; xref 273F:822D
-273F:8232 89 5C 24 mov [si+24h],bx
-273F:8235 úBB 003F mov bx,3Fh ; (273F:003F=0)
-273F:8238 F7 E3 mul bx ; dx:ax = reg * ax
-273F:823A 83 C2 14 add dx,14h
-273F:823D 89 54 1F mov [si+1Fh],dx
-273F:8240 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- head_animation_tick_proc proc near
-273F:8241 E8 DF34 call talk_countdown_handler
-273F:8244 úBB 6CEF mov bx, offset player_hotspot_rec
-273F:8247 81 7F 0F 00CF cmp word ptr [bx+HS_Y], 80h + 79
-273F:824C 73 03 jae loc_1618 ; Jump if above or =
-273F:824E úBB 70B9 mov bx, offset ratpouch_hotspot_rec
-273F:8251 loc_1618: ; xref 273F:824C
-273F:8251 8B 5F 0D mov bx, [bx+HS_X]
-273F:8254 33 C0 xor ax, ax
-273F:8256 81 FB 00C8 cmp bx, 80h + 72
-273F:825A 72 0A jb loc_1619 ; Jump if below
-273F:825C B0 01 mov al, 1
-273F:825E 81 FB 012C cmp bx, 80h + 172
-273F:8262 72 02 jb loc_1619 ; Jump if below
-273F:8264 B0 02 mov al,2
-273F:8266 loc_1619: ; xref 273F:825A, 8262
-273F:8266 88 44 2A mov [si+2Ah], al
-273F:8269 E9 FDA7 jmp loc_set_frame_offset
- head_animation_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_room_14_door_close proc near
-273F:826C B8 2719 mov ax,2719h
-273F:826F E8 EF7C call room_exit_hs_get_pointer
-273F:8272 C6 44 0C 01 mov byte ptr [si+0Ch],1
-273F:8276 C3 retn
- seq_room_14_door_close proc near
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_decrase_groats proc near
-273F:8277 E8 8A6E call get_room_resource_pointer
-273F:827A 29 0E BC49 sub num_groats, cx
-273F:827E C3 retn
- seq_decrase_groats endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_incrase_groats proc near
-273F:827F E8 8A66 call get_room_resource_pointer
-273F:8282 01 0E BC49 add num_groats, cx
-273F:8286 C3 retn
- seq_incrase_groats endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:82AF, 855B, 85F2
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8287 sub_211 proc near
-273F:8287 úBB 502A mov bx, offset sub_211_list
-273F:828A B9 0003 mov cx, 3
-273F:828D 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-
-273F:8290 locloop_1620: ; xref 273F:8297
-273F:8290 39 07 cmp [bx], ax ; Found entry for room #?
-273F:8292 74 08 je loc_1621 ; Exit if yes
-273F:8294 83 C3 04 add bx, 4
-273F:8297 E2 F7 loop locloop_1620 ; Loop if cx > 0
-
-273F:8299 33 DB xor bx,bx ; Zero return
-273F:829B C3 retn
-273F:829C loc_1621: ; xref 273F:8292
-273F:829C 8B 5F 02 mov bx, [bx+2]
-273F:829F C3 retn
- sub_211 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:82A0 E8 DED5 call talk_countdown_handler
-273F:82A3 F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:82A8 74 05 jz loc_1622 ; Jump if zero
-273F:82AA 83 6C 1F 01 sub word ptr [si+1Fh],1
-273F:82AE C3 retn
-273F:82AF loc_1622: ; xref 273F:82A8
-273F:82AF E8 FFD5 call sub_211 ; (8287)
-273F:82B2 8A 44 28 mov al,[si+28h]
-273F:82B5 0A C0 or al,al ; Zero ?
-273F:82B7 75 60 jnz loc_1626 ; Jump if not zero
-273F:82B9 F7 07 FFFF test word ptr [bx],0FFFFh
-273F:82BD 74 03 jz loc_1623 ; Jump if zero
-273F:82BF E9 0159 jmp loc_1646 ; (841B)
-273F:82C2 loc_1623: ; xref 273F:82BD
-273F:82C2 53 push bx
-273F:82C3 83 C3 02 add bx,2
-273F:82C6 B9 0004 mov cx,4
-
-273F:82C9 locloop_1624: ; xref 273F:82ED
-273F:82C9 F6 47 03 80 test byte ptr [bx+3],80h
-273F:82CD 74 1B jz loc_1625 ; Jump if zero
-273F:82CF 8B CB mov cx,bx
-273F:82D1 C6 47 03 00 mov byte ptr [bx+3],0
-273F:82D5 8B 07 mov ax,[bx]
-273F:82D7 5B pop bx
-273F:82D8 89 0F mov [bx],cx
-273F:82DA 56 push si
-273F:82DB E8 8A0C call get_room_resource_pointer2
-273F:82DE 8B 44 0D mov ax,[si+0Dh]
-273F:82E1 5E pop si
-273F:82E2 89 44 24 mov [si+24h],ax
-273F:82E5 C6 44 28 80 mov byte ptr [si+28h],80h
-273F:82E9 C3 retn
-273F:82EA loc_1625: ; xref 273F:82CD
-273F:82EA 83 C3 04 add bx,4
-273F:82ED E2 DA loop locloop_1624 ; Loop if cx > 0
-
-273F:82EF 5B pop bx
-273F:82F0 33 C0 xor ax,ax ; Zero register
-273F:82F2 89 47 02 mov [bx+2],ax
-273F:82F5 89 47 04 mov [bx+4],ax
-273F:82F8 89 47 06 mov [bx+6],ax
-273F:82FB 89 47 08 mov [bx+8],ax
-273F:82FE 89 47 0A mov [bx+0Ah],ax
-273F:8301 89 47 0C mov [bx+0Ch],ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 316
-
-273F:8304 89 47 0E mov [bx+0Eh],ax
-273F:8307 89 47 10 mov [bx+10h],ax
-273F:830A E8 C15F call random
-273F:830D B9 0003 mov cx,3
-273F:8310 F7 E1 mul cx ; dx:ax = reg * ax
-273F:8312 92 xchg dx,ax
-273F:8313 05 0001 add ax,1
-273F:8316 88 44 28 mov [si+28h],al
-273F:8319 loc_1626: ; xref 273F:82B7
-273F:8319 A8 80 test al,80h
-273F:831B 75 10 jnz loc_1627 ; Jump if not zero
-273F:831D 24 3F and al,3Fh ; '?'
-273F:831F 3C 02 cmp al,2
-273F:8321 72 0D jb loc_1628 ; Jump if below
-273F:8323 74 0D jz loc_1629 ; Jump if zero
-273F:8325 3C 04 cmp al,4
-273F:8327 74 0E je loc_1631 ; Jump if equal
-273F:8329 72 09 jc loc_1630 ; Jump if carry Set
-273F:832B EB 0D jmp short loc_1632 ; (833A)
-273F:832D loc_1627: ; xref 273F:831B
-273F:832D E9 015A jmp loc_1652 ; (848A)
-273F:8330 loc_1628: ; xref 273F:8321
-273F:8330 EB 0B jmp short loc_1633 ; (833D)
-273F:8332 loc_1629: ; xref 273F:8323
-273F:8332 EB 2F jmp short loc_1636 ; (8363)
-273F:8334 loc_1630: ; xref 273F:8329
-273F:8334 E9 00CA jmp loc_1643 ; (8401)
-273F:8337 loc_1631: ; xref 273F:8327
-273F:8337 E9 00D7 jmp loc_1645 ; (8411)
-273F:833A loc_1632: ; xref 273F:832B
-273F:833A E9 00B6 jmp loc_1642 ; (83F3)
-273F:833D loc_1633: ; xref 273F:8330
-273F:833D E8 C12C call random
-273F:8340 81 7D 1B 0436 cmp word ptr [di+1Bh],436h
-273F:8345 74 11 je loc_1635 ; Jump if equal
-273F:8347 BB 0055 mov bx,55h
-273F:834A F7 E3 mul bx ; dx:ax = reg * ax
-273F:834C 81 C2 00F5 add dx,0F5h
-273F:8350 loc_1634: ; xref 273F:8361
-273F:8350 ú89 54 24 mov [si+24h],dx
-273F:8353 C6 44 28 83 mov byte ptr [si+28h],83h
-273F:8357 C3 retn
-273F:8358 loc_1635: ; xref 273F:8345
-273F:8358 BB 0033 mov bx,33h
-273F:835B F7 E3 mul bx ; dx:ax = reg * ax
-273F:835D 81 C2 00DE add dx,0DEh
-273F:8361 EB ED jmp short loc_1634 ; (8350)
-273F:8363 loc_1636: ; xref 273F:8332
-273F:8363 F6 44 28 40 test byte ptr [si+28h],40h ; '@'
-273F:8367 75 4B jnz loc_1640 ; Jump if not zero
-273F:8369 81 7D 1B 0436 cmp word ptr [di+1Bh],436h
-273F:836E 75 3E jne loc_1638 ; Jump if not equal
-273F:8370 83 3E 6CF5 23 cmp word ptr ds:[6CF5h],23h ; (273F:6CF5=551Eh)
-273F:8375 74 37 je loc_1638 ; Jump if equal
-273F:8377 83 3E 6DEC 23 cmp word ptr ds:[6DECh],23h ; (273F:6DEC=4BFAh)
-273F:837C 74 30 je loc_1638 ; Jump if equal
-273F:837E 83 3E 77C8 23 cmp word ptr ds:[77C8h],23h ; (273F:77C8=0F74h)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 317
-
-273F:8383 74 29 je loc_1638 ; Jump if equal
-273F:8385 E8 C0E4 call random
-273F:8388 0B C0 or ax,ax ; Zero ?
-273F:838A 78 05 js loc_1637 ; Jump if sign=1
-273F:838C B8 4FED mov ax,4FEDh
-273F:838F EB 20 jmp short loc_1639 ; (83B1)
-273F:8391 loc_1637: ; xref 273F:838A
-273F:8391 C7 44 21 59ED mov word ptr [si+21h],59EDh
-273F:8396 C7 45 04 0020 mov word ptr [di+4],20h
-273F:839B C6 06 5029 08 mov byte ptr ds:[5029h],8 ; (273F:5029=47h)
-273F:83A0 83 2D 08 sub word ptr [di],8
-273F:83A3 A1 59F0 mov ax,word ptr ds:[59F0h] ; (273F:59F0=0ABBh)
-273F:83A6 89 45 0A mov [di+0Ah],ax
-273F:83A9 B8 5010 mov ax,5010h
-273F:83AC EB 03 jmp short loc_1639 ; (83B1)
-273F:83AE loc_1638: ; xref 273F:836E, 8375, 837C, 8383
-273F:83AE 8B 47 14 mov ax,[bx+14h]
-273F:83B1 loc_1639: ; xref 273F:838F, 83AC
-273F:83B1 89 44 24 mov [si+24h],ax
-273F:83B4 loc_1640: ; xref 273F:8367, 83F7, 83FF
-273F:83B4 ú80 4C 28 40 or byte ptr [si+28h],40h ; '@'
-273F:83B8 8B 5C 24 mov bx,[si+24h]
-273F:83BB 83 44 24 01 add word ptr [si+24h],1
-273F:83BF 8A 07 mov al,[bx]
-273F:83C1 0A C0 or al,al ; Zero ?
-273F:83C3 74 06 jz loc_1641 ; Jump if zero
-273F:83C5 88 44 2A mov [si+2Ah],al
-273F:83C8 E9 FC48 jmp loc_set_frame_offset
-273F:83CB loc_1641: ; xref 273F:83C3
-273F:83CB 81 7D 1B 0436 cmp word ptr [di+1Bh],436h
-273F:83D0 75 2F jne loc_1643 ; Jump if not equal
-273F:83D2 C7 44 21 59E4 mov word ptr [si+21h],59E4h
-273F:83D7 C7 45 04 0010 mov word ptr [di+4],10h
-273F:83DC A1 59E7 mov ax,word ptr ds:[59E7h] ; (273F:59E7=2E00h)
-273F:83DF 89 45 0A mov [di+0Ah],ax
-273F:83E2 F6 06 5029 FF test byte ptr ds:[5029h],0FFh ; (273F:5029=47h)
-273F:83E7 74 18 jz loc_1643 ; Jump if zero
-273F:83E9 83 05 08 add word ptr [di],8
-273F:83EC C6 06 5029 00 mov byte ptr ds:[5029h],0 ; (273F:5029=47h)
-273F:83F1 EB 0E jmp short loc_1643 ; (8401)
-273F:83F3 loc_1642: ; xref 273F:833A
-273F:83F3 F6 44 28 40 test byte ptr [si+28h],40h ; '@'
-273F:83F7 75 BB jnz loc_1640 ; Jump if not zero
-273F:83F9 8B 47 16 mov ax, [bx+HS_FLAGS2]
-273F:83FC 89 44 24 mov [si+24h],ax
-273F:83FF EB B3 jmp short loc_1640 ; (83B4)
-273F:8401 loc_1643: ; xref 273F:8334, 83D0, 83E7, 83F1
-273F:8401 C7 44 1F 000A mov word ptr [si+1Fh],0Ah
-273F:8406 loc_1644: ; xref 273F:8419
-273F:8406 úC6 44 28 00 mov byte ptr [si+28h],0
-273F:840A C6 44 2A 0C mov byte ptr [si+2Ah],0Ch
-273F:840E E9 FC02 jmp loc_set_frame_offset
-273F:8411 loc_1645: ; xref 273F:8337
-273F:8411 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:8417 75 35 jnz loc_ret_1647 ; Jump if not zero
-273F:8419 EB EB jmp short loc_1644 ; (8406)
-273F:841B loc_1646: ; xref 273F:82BF
-273F:841B 8B D3 mov dx,bx
-273F:841D 8B 1F mov bx,[bx]
-273F:841F 8B 07 mov ax,[bx]
-273F:8421 56 push si
-273F:8422 E8 88C5 call get_room_resource_pointer2
-273F:8425 8B 44 0F mov ax,[si+0Fh]
-273F:8428 03 44 1B add ax,[si+1Bh]
-273F:842B 5E pop si
-273F:842C 87 DA xchg bx,dx
-273F:842E 8B 4F 18 mov cx,[bx+18h]
-273F:8431 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:8433 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:8435 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:8437 81 C1 0098 add cx,98h
-273F:843B 3B C1 cmp ax,cx
-273F:843D 72 10 jb loc_1648 ; Jump if below
-273F:843F C7 07 0000 mov word ptr [bx],0
-273F:8443 87 DA xchg bx,dx
-273F:8445 C7 07 0000 mov word ptr [bx],0
-273F:8449 C7 47 02 0000 mov word ptr [bx+2],0
-
-273F:844E loc_ret_1647: ; xref 273F:8417
-273F:844E C3 retn
-273F:844F loc_1648: ; xref 273F:843D
-273F:844F 87 DA xchg bx,dx
-273F:8451 81 3F 03E8 cmp word ptr [bx], PLAYER_HOTSPOT_ID
-273F:8455 74 05 je loc_1649 ; Jump if equal
-273F:8457 C6 47 03 00 mov byte ptr [bx+3],0
-273F:845B C3 retn
-273F:845C loc_1649: ; xref 273F:8455
-273F:845C 80 67 03 7F and byte ptr [bx+3],7Fh
-273F:8460 F6 47 03 07 test byte ptr [bx+3],7
-273F:8464 74 0D jz loc_1651 ; Jump if zero
-273F:8466 8A 47 03 mov al,[bx+3]
-273F:8469 80 67 03 F8 and byte ptr [bx+3],0F8h
-273F:846D 32 E4 xor ah,ah ; Zero register
-273F:846F 89 44 28 mov [si+28h],ax
-
-273F:8472 loc_ret_1650: ; xref 273F:8478
-273F:8472 C3 retn
-273F:8473 loc_1651: ; xref 273F:8464
-273F:8473 F7 44 2F FFFF test word ptr [si+2Fh],0FFFFh
-273F:8478 75 F8 jnz loc_ret_1650 ; Jump if not zero
-273F:847A C7 07 0000 mov word ptr [bx],0
-273F:847E 8B DA mov bx,dx
-273F:8480 C7 07 0000 mov word ptr [bx],0
-273F:8484 C7 44 28 0002 mov word ptr [si+28h],2
-273F:8489 C3 retn
-273F:848A loc_1652: ; xref 273F:832D
-273F:848A 8B 44 0D mov ax,[si+0Dh]
-273F:848D BA FFFE mov dx,0FFFEh
-273F:8490 2B 44 24 sub ax,[si+24h]
-273F:8493 73 14 jnc loc_1654 ; Jump if carry=0
-273F:8495 F7 D8 neg ax
-273F:8497 F7 DA neg dx
-273F:8499 80 44 2A 01 add byte ptr [si+2Ah],1
-273F:849D 80 7C 2A 06 cmp byte ptr [si+2Ah],6
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 319
-
-273F:84A1 72 04 jb loc_1653 ; Jump if below
-273F:84A3 C6 44 2A 00 mov byte ptr [si+2Ah],0
-273F:84A7 loc_1653: ; xref 273F:84A1
-273F:84A7 EB 14 jmp short loc_1656 ; (84BD)
-273F:84A9 loc_1654: ; xref 273F:8493
-273F:84A9 80 44 2A 01 add byte ptr [si+2Ah],1
-273F:84AD 80 7C 2A 0C cmp byte ptr [si+2Ah],0Ch
-273F:84B1 73 06 jae loc_1655 ; Jump if above or =
-273F:84B3 80 7C 2A 06 cmp byte ptr [si+2Ah],6
-273F:84B7 73 04 jae loc_1656 ; Jump if above or =
-273F:84B9 loc_1655: ; xref 273F:84B1
-273F:84B9 C6 44 2A 06 mov byte ptr [si+2Ah],6
-273F:84BD loc_1656: ; xref 273F:84A7, 84B7
-273F:84BD 3D 0002 cmp ax,2
-273F:84C0 72 08 jb loc_1657 ; Jump if below
-273F:84C2 01 54 0D add [si+0Dh],dx
-273F:84C5 01 15 add [di],dx
-273F:84C7 E9 FB49 jmp loc_set_frame_offset
-273F:84CA loc_1657: ; xref 273F:84C0
-273F:84CA C6 44 2A 0C mov byte ptr [si+2Ah],0Ch
-273F:84CE 80 64 28 7F and byte ptr [si+28h],7Fh
-273F:84D2 E9 FB3E jmp loc_set_frame_offset
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8565
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:84D5 sub_212 proc near
-273F:84D5 8B 44 0F mov ax, [si+HS_Y]
-273F:84D8 03 44 1B add ax, [si+HS_HEIGHT_COPY]
-273F:84DB 8B 4F 18 mov cx, [bx+18h]
-273F:84DE D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:84E0 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:84E2 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:84E4 81 C1 0098 add cx,98h
-273F:84E8 3B C1 cmp ax,cx
-273F:84EA 73 06 jae loc_1658 ; Jump if above or =
-273F:84EC 0D 0001 or ax,1
-273F:84EF 33 C9 xor cx,cx ; Zero register
-273F:84F1 C3 retn
-273F:84F2 loc_1658: ; xref 273F:84EA
-273F:84F2 53 push bx
-273F:84F3 8B 44 06 mov ax,[si+6]
-273F:84F6 2D 0001 sub ax,1
-273F:84F9 BA 0078 mov dx,78h
-273F:84FC F7 E2 mul dx ; dx:ax = reg * ax
-273F:84FE 8B 4F 18 mov cx,[bx+18h]
-273F:8501 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:8503 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:8505 03 4F 18 add cx,[bx+18h]
-273F:8508 03 C1 add ax,cx
-273F:850A 05 0004 add ax,4
-273F:850D úBB 984A mov bx, offset data_441
-273F:8510 03 D8 add bx,ax
-273F:8512 B2 01 mov dl,1
-273F:8514 B9 0027 mov cx,27h
-273F:8517 32 F6 xor dh,dh ; Zero register
-
-273F:8519 locloop_1659: ; xref 273F:8553
-273F:8519 84 17 test dl,[bx]
-273F:851B 75 2B jnz loc_1660 ; Jump if not zero
-273F:851D 80 C6 01 add dh,1
-273F:8520 80 FE 04 cmp dh,4
-273F:8523 72 25 jb loc_1661 ; Jump if below
-273F:8525 B8 0008 mov ax,8
-273F:8528 F7 E1 mul cx ; dx:ax = reg * ax
-273F:852A 8B C8 mov cx,ax
-273F:852C 81 C1 0080 add cx,80h
-273F:8530 5B pop bx
-273F:8531 53 push bx
-273F:8532 8B 57 18 mov dx,[bx+18h]
-273F:8535 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:8537 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:8539 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:853B 81 C2 0088 add dx,88h
-273F:853F B0 01 mov al,1
-273F:8541 E8 CFD5 call character_start_walking
-273F:8544 33 C9 xor cx,cx ; Zero register
-273F:8546 5B pop bx
-273F:8547 C3 retn
-273F:8548 loc_1660: ; xref 273F:851B
-273F:8548 32 F6 xor dh,dh ; Zero register
-273F:854A loc_1661: ; xref 273F:8523
-273F:854A D0 E2 shl dl,1 ; Shift w/zeros fill
-273F:854C 73 05 jnc loc_1662 ; Jump if carry=0
-273F:854E 83 EB 01 sub bx,1
-273F:8551 B2 01 mov dl,1
-273F:8553 loc_1662: ; xref 273F:854C
-273F:8553 E2 C4 loop locloop_1659 ; Loop if cx > 0
-
-273F:8555 83 C9 01 or cx,1
-273F:8558 5B pop bx
-273F:8559 C3 retn
- sub_212 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:45B8
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:855A sub_213 proc near
-273F:855A 53 push bx
-273F:855B E8 FD29 call sub_211 ; list[room #] => bx
-273F:855E F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 0FFh
-273F:8562 75 45 jnz loc_1669 ; Jump if not zero
-273F:8564 58 pop ax
-273F:8565 E8 FF6D call sub_212 ; (84D5)
-273F:8568 74 03 jz loc_1664 ; Jump if zero
-273F:856A loc_1663: ; xref 273F:8594
-273F:856A ú33 C0 xor ax,ax ; Zero register
-273F:856C C3 retn
-273F:856D loc_1664: ; xref 273F:8568
-273F:856D 0B C0 or ax, ax ; Zero ?
-273F:856F 74 35 jz loc_1668 ; Jump if zero
-273F:8571 83 C3 02 add bx, 2
-273F:8574 B9 0004 mov cx, 4
-273F:8577 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-
-273F:857A locloop_1665: ; xref 273F:8581
-273F:857A 39 07 cmp [bx], ax
-273F:857C 74 18 je loc_1667 ; Jump if equal
-273F:857E 83 C3 04 add bx,4
-273F:8581 E2 F7 loop locloop_1665 ; Loop if cx > 0
-
-273F:8583 B9 0004 mov cx, 4
-273F:8586 83 EB 10 sub bx, 10h
-
-273F:8589 locloop_1666: ; xref 273F:8592
-273F:8589 F7 07 FFFF test word ptr [bx], 0FFFFh
-273F:858D 74 07 jz loc_1667 ; Jump if zero
-273F:858F 83 C3 04 add bx, 4
-273F:8592 E2 F5 loop locloop_1666 ; Loop if cx > 0
-
-273F:8594 EB D4 jmp short loc_1663 ; (856A)
-273F:8596 loc_1667: ; xref 273F:857C, 858D
-273F:8596 89 07 mov [bx],ax
-273F:8598 C6 47 03 82 mov byte ptr [bx+3],82h
-273F:859C C6 44 2A 01 mov byte ptr [si+2Ah],1
-273F:85A0 E8 BDC3 call character_update_movement
-273F:85A3 E8 BF33 call char_face_up
-273F:85A6 loc_1668: ; xref 273F:856F
-273F:85A6 33 C0 xor ax,ax ; Zero register
-273F:85A8 C3 retn
-273F:85A9 loc_1669: ; xref 273F:8562
-273F:85A9 83 C3 02 add bx, 2
-273F:85AC B9 0004 mov cx, 4
-273F:85AF 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-
-273F:85B2 locloop_1670: ; xref 273F:85B9
-273F:85B2 39 07 cmp [bx], ax
-273F:85B4 74 0D je loc_1672 ; Jump if equal
-273F:85B6 83 C3 04 add bx,4
-273F:85B9 E2 F7 loop locloop_1670 ; Loop if cx > 0
-
-273F:85BB C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:85BF loc_1671: ; xref 273F:85C7
-273F:85BF 5B pop bx
-273F:85C0 33 C0 xor ax,ax ; Zero register
-273F:85C2 C3 retn
-273F:85C3 loc_1672: ; xref 273F:85B4
-273F:85C3 F6 47 03 80 test byte ptr [bx+3], 80h
-273F:85C7 75 F6 jnz loc_1671 ; Jump if not zero
-273F:85C9 5B pop bx
-273F:85CA B8 0001 mov ax, 1
-273F:85CD C3 retn
- sub_213 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:85CE E8 DBA7 call talk_countdown_handler
-273F:85D1 E9 FA3F jmp loc_set_frame_offset
-
- ;* No entry point to code
-273F:85D4 BA 3627 mov dx,3627h
-273F:85D7 8B 44 06 mov ax,[si+6]
-273F:85DA 89 47 03 mov [bx+3],ax
-273F:85DD 89 57 01 mov [bx+1],dx
-273F:85E0 C3 retn
- ;* No entry point to code
-273F:85E1 C7 06 6B98 0063 mov word ptr ds:[6B98h],63h ; (273F:6B98=75C9h)
-273F:85E7 C3 retn
- ;* No entry point to code
-273F:85E8 C7 06 6B98 0011 mov word ptr ds:[6B98h],11h ; (273F:6B98=75C9h)
-273F:85EE C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_56 proc near
-273F:85EF úBE 6CEF mov si, offset player_hotspot_rec
-273F:85F2 E8 FC92 call sub_211 ; (8287)
-273F:85F5 0B DB or bx,bx ; Zero ?
-273F:85F7 74 16 jz loc_ret_1675 ; Jump if zero
-273F:85F9 83 C3 02 add bx,2
-273F:85FC B9 0004 mov cx,4
-273F:85FF locloop_1673: ; xref 273F:8608
-273F:85FF 81 3F 03E8 cmp word ptr [bx], PLAYER_HOTSPOT_ID
-273F:8603 74 06 je loc_1674 ; Jump if equal
-273F:8605 83 C3 04 add bx,4
-273F:8608 E2 F5 loop locloop_1673 ; Loop if cx > 0
-273F:860A C3 retn
-
-273F:860B loc_1674: ; xref 273F:8603
-273F:860B 80 4F 03 05 or byte ptr [bx+3],5
-273F:860F loc_ret_1675: ; xref 273F:85F7
-273F:860F C3 retn
- seq_method_56 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- get_num_groats proc near
-273F:8610 A1 BC49 mov ax, num_groats
-273F:8613 A3 BA1F mov general_val, ax
-273F:8616 loc_ret_1676: ; xref 273F:861C, 8623
-273F:8616 C3 retn
- get_num_groats endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:8617 83 3E BA3B 08 cmp talk_record_index, 8
-273F:861C 72 F8 jb loc_ret_1676 ; Jump if below
-273F:861E 83 3E BA3B 0E cmp talk_record_index, 0Eh
-273F:8623 73 F1 jae loc_ret_1676 ; Jump if above or =
-273F:8625 C7 44 0F 00D5 mov word ptr [si+0Fh],0D5h
-273F:862A E9 EB45 jmp animation_load_2
-273F:862D E9 DB48 jmp talk_countdown_handler
-
- ;* No entry point to code
-273F:8630 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:8633 8B 7C 0B mov di,[si+0Bh]
-273F:8636 E8 BD2D call character_update_movement
-273F:8639 8B DE mov bx,si
-273F:863B 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:863E 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:8641 C6 07 03 mov byte ptr [bx],3
-273F:8644 C7 44 28 05DC mov word ptr [si+28h],5DCh
-273F:8649 C7 44 24 0616 mov word ptr [si+24h],616h
-273F:864E C7 45 11 865A mov word ptr [di+11h],865Ah
-273F:8653 C7 06 BD9B 03EF mov word ptr ds:data_496e,3EFh ; (273F:BD9B=0)
-
-273F:8659 loc_ret_1677: ; xref 273F:8679
-273F:8659 C3 retn
- ;* No entry point to code
-273F:865A C7 44 50 0000 mov word ptr [si+HS_DIRECTION], 0
-273F:865F C6 44 44 07 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_7
-273F:8663 E8 DB12 call talk_countdown_handler
-273F:8666 F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:866B 74 05 jz loc_1678 ; Jump if zero
-273F:866D 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR], 1
-273F:8671 C3 retn
-273F:8672 loc_1678: ; xref 273F:866B
-273F:8672 E8 8934 call hotspot_script_execute
-273F:8675 83 6C 28 01 sub word ptr [si+HS_FRAME_OFFSET], 1
-273F:8679 75 DE jnz loc_ret_1677 ; Jump if not zero
-273F:867B 83 3E BA3B 0C cmp talk_record_index, 0Ch
-273F:8680 74 3B je loc_1679 ; Jump if equal
-273F:8682 83 3E BA3B 0D cmp talk_record_index, 0Dh
-273F:8687 74 34 je loc_1679 ; Jump if equal
-273F:8689 83 3E BA3B 0E cmp talk_record_index, 0Eh
-273F:868E 74 2D je loc_1679 ; Jump if equal
-273F:8690 83 3E 6CF5 22 cmp [player_hotspot_rec+HS_ROOM_NUM], 34
-273F:8695 74 26 je loc_1679 ; Jump if equal
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_60 proc near
-273F:8697 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:869A 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:869D 8B DE mov bx, si
-273F:869F 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:86A2 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:86A5 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:86A8 C6 44 44 00 mov byte ptr [si+HS_CHAR_MODE], 0
-273F:86AC C7 44 50 0000 mov word ptr [si+HS_DIRECTION], 0
-273F:86B1 C7 45 11 4F82 mov word ptr [di+ANIM_TICK_PROC], offset standard_character_tick_proc
-273F:86B6 C7 06 BD9B FFFF mov word ptr ds:data_496e, 0FFFFh ; (273F:BD9B=0)
-273F:86BC C3 retn
- seq_method_60 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:86BD loc_1679: ; xref 273F:8680, 8687, 868E, 8695
-273F:86BD C7 44 28 05DC mov word ptr [si+HS_FRAME_OFFSET], 5DCh
-273F:86C2 C3 retn
- ;* No entry point to code
-273F:86C3 B8 271E mov ax, 271Eh
-273F:86C6 E8 EB25 call room_exit_hs_get_pointer
-273F:86C9 C6 44 0C 00 mov byte ptr [si+REHS_EXIT_BLOCKED], 0
-273F:86CD C3 retn
- ;* No entry point to code
-273F:86CE B8 271E mov ax,271Eh
-273F:86D1 E8 EB1A call room_exit_hs_get_pointer
-273F:86D4 C6 44 0C 01 mov byte ptr [si+REHS_EXIT_BLOCKED], 1
-273F:86D8 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_59 proc near
-273F:86D9 C7 06 8CE7 0800 mov data_8ce7, 800h
-273F:86DF C7 06 8D2C 0800 mov data_8d2C, 800h
-273F:86E5 C3 retn
- seq_method_59 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_door_close proc near
-273F:86E6 8B C3 mov ax,bx
-273F:86E8 E8 EB03 call room_exit_hs_get_pointer
-273F:86EB C6 44 0C 01 mov byte ptr [si+REHS_EXIT_BLOCKED], 1
-273F:86EF C3 retn
- seq_door_close endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_door_open proc near
-273F:86F0 8B C3 mov ax,bx
-273F:86F2 E8 EAF9 call room_exit_hs_get_pointer
-273F:86F5 C6 44 0C 00 mov byte ptr [si+REHS_EXIT_BLOCKED], 0
-273F:86F9 C3 retn
- seq_door_open endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
- ;* No entry point to code
-273F:86FA B8 272A mov ax,272Ah
-273F:86FD EB 03 jmp short loc_1680 ; (8702)
-273F:86FF B8 2C 27 db 0B8h, 2Ch, 27h
-273F:8702 loc_1680: ; xref 273F:86FD, 8740
-273F:8702 úC7 45 08 0000 mov word ptr [di+8],0
-273F:8707 56 push si
-273F:8708 E8 EAE3 call room_exit_hs_get_pointer
-273F:870B 5B pop bx
-273F:870C 87 DE xchg bx,si
-273F:870E F6 47 0C FF test byte ptr [bx+0Ch],0FFh
-273F:8712 75 09 jnz loc_ret_1681 ; Jump if not zero
-273F:8714 8B 5C 21 mov bx,[si+21h]
-273F:8717 8B 47 07 mov ax,[bx+7]
-273F:871A 89 45 08 mov [di+8],ax
-
-273F:871D loc_ret_1681: ; xref 273F:8712
-273F:871D C3 retn
-273F:871E B8 272A mov az, 272Ah
-
-273F:8721 loc_1682: ; xref 273F:8745, 874A
-273F:8721 úC7 45 08 0000 mov word ptr [di+8],0
-273F:8726 56 push si
-273F:8727 E8 EAC4 call room_exit_hs_get_pointer
-273F:872A 5B pop bx
-273F:872B 87 DE xchg bx,si
-273F:872D F6 47 0C FF test byte ptr [bx+0Ch],0FFh
-273F:8731 74 09 jz loc_ret_1683 ; Jump if zero
-273F:8733 8B 5C 21 mov bx,[si+21h]
-273F:8736 8B 47 07 mov ax,[bx+7]
-273F:8739 89 45 08 mov [di+8],ax
-
-273F:873C loc_ret_1683: ; xref 273F:8731
-273F:873C C3 retn
- ;* No entry point to code
-273F:873D B8 272E mov ax,272Eh
-273F:8740 EB C0 jmp short loc_1680 ; (8702)
- ;* No entry point to code
-273F:8742 B8 272C mov ax,272Ch
-273F:8745 EB DA jmp short loc_1682 ; (8721)
- ;* No entry point to code
-273F:8747 B8 272A mov ax,272Ah
-273F:874A EB D5 jmp short loc_1682 ; (8721)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_58 proc near
-273F:874C C7 06 BA1D 0000 mov sequence_result, 0
-273F:8752 81 3E 84CD 03E8 cmp hotspot_2713_hs5e, PLAYER_HOTSPOT_ID
-273F:8758 75 06 jne loc_ret_1684 ; Jump if not equal
-273F:875A C7 06 BA1D 0001 mov sequence_result, 1
-273F:8760 loc_ret_1684:
-273F:8760 C3 retn
- seq_method_58 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_43 proc near
-273F:8761 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:8764 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:8767 C7 45 11 4F82 mov word ptr [di+ANIM_TICK_PROC], 4F82h
-273F:876C C7 44 17 4F82 mov word ptr [si+HS_TICK_PROC], 4F82h
-273F:8771 C7 44 64 7D9D mov word ptr [si+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_SUPPORT_TABLE], 7D9Dh
-273F:8776 C6 44 63 02 mov byte ptr [si+HS_FIRST_ACTION_OFFSET], 2
-273F:877A 81 36 7D21 1000 xor [goewin_hotspot_rec+HS_ACTIONS], 1000h
-273F:8780 EB 22 jmp short loc_1685
- seq_method_43 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8782 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:8785 8B 7C 0B mov di,[si+0Bh]
-273F:8788 C7 45 11 7C24 mov word ptr [di+11h],7C24h
-273F:878D C7 44 17 7C24 mov word ptr [si+17h],7C24h
-273F:8792 C7 44 64 4EBB mov word ptr [si+64h],4EBBh
-273F:8797 C6 44 63 02 mov byte ptr [si+63h],2
-273F:879B C7 44 66 0026 mov word ptr [si+66h],26h
-273F:87A0 81 0C 1000 or word ptr [si],1000h
-273F:87A4 loc_1685: ; xref 273F:8780
-273F:87A4 33 C0 xor ax,ax ; Zero register
-273F:87A6 89 44 61 mov [si+HS_ACTION_OFFSET], ax
-273F:87A9 88 44 2A mov [si+HS_ACTION_CTR], al
-273F:87AC 89 44 42 mov [si+HS_DELAY_CTR], ax
-273F:87AF 88 44 44 mov [si+HS_CHAR_MODE], al
-273F:87B2 C3 retn
-
- ;* No entry point to code
-273F:87B3 E8 87F3 call hotspot_script_execute
-273F:87B6 75 05 jnz loc_ret_1686 ; Jump if not zero
-273F:87B8 80 0E 073D 50 or status_flags2, 50h
-273F:87BD loc_ret_1686: ; xref 273F:87B6, 87C3
-273F:87BD C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; This method is referenced by a jump point for NPC script action #40
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_jump_to_address_proc_1 proc near
-273F:87BE 83 3E BA25 13 cmp old_room_number, 13h
-273F:87C3 75 F8 jne loc_ret_1686 ; Jump if not equal
-273F:87C5 C7 06 BA3B 0018 mov talk_record_index, 18h
-273F:87CB BB 03F1 mov bx,3F1h
-273F:87CE B9 0154 mov cx,154h
-273F:87D1 E8 0006 call seq_set_hotspot_name
-273F:87D4 BB 0AB9 mov bx, 0AB9h
-273F:87D7 E9 00E2 jmp display_dialog
- npc_jump_to_address_proc_1 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:87D1, 89A6
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:87DA seq_set_hotspot_name proc near
-273F:87DA 51 push cx
-273F:87DB E8 8541 call get_room_resource_pointer3
-273F:87DE 58 pop ax
-273F:87DF 89 44 02 mov [si+HSH_NAME], ax
-273F:87E2 C3 retn
- seq_set_hotspot_name endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
- seq_set_desc proc near
-273F:87E3 51 push cx
-273F:87E4 E8 8538 call get_room_resource_pointer3
-273F:87E7 58 pop ax
-273F:87E8 89 44 04 mov [si+HSH_DESC], ax
-273F:87EB C3 retn
- seq_set_desc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-
- ;* No entry point to code
-273F:87EC E8 D989 call talk_countdown_handler
-273F:87EF F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
-273F:87F4 74 05 jz loc_1688 ; Jump if zero
-273F:87F6 83 6C 1F 01 sub word ptr [si+1Fh],1
-
-273F:87FA loc_ret_1687: ; xref 273F:87FE
-273F:87FA C3 retn
-273F:87FB loc_1688: ; xref 273F:87F4
-273F:87FB E8 87AB call hotspot_script_execute
-273F:87FE 75 FA jnz loc_ret_1687 ; Jump if not zero
-273F:8800 E8 8A6F call animation_unload
-273F:8803 C6 44 15 FF mov byte ptr [si+15h],0FFh
-273F:8807 C7 44 37 0000 mov word ptr [si+HS_TALK_COUNTDOWN],0
-273F:880C 80 4C 03 20 or byte ptr [si+3],20h ; ' '
-273F:8810 C7 06 6FEF 002D mov word ptr ds:[6FEFh],2Dh ; (273F:6FEF=0D107h)
-273F:8816 úBB 03F3 mov bx,3F3h ; (273F:03F3=0FBh)
-273F:8819 E9 84AA jmp animation_load_entry
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; This method is referenced by a jump point for NPC script action #40
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- npc_jump_to_address_proc_2 proc near
-273F:881C 81 3E 6CFE 00B4 cmp [player_hotspot_rec+HS_Y], 80h + 52
-273F:8822 73 14 jae loc_ret_1689 ; Jump if above or =
-273F:8824 BD 706C mov bp, 706Ch
-273F:8827 E9 CD57 jmp character_walking_end
- npc_jump_to_address_proc_2 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Contains all the standard handling for characters, such as the Skorl
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- rack_serf_tick_proc proc near
-273F:882A E8 D94B call talk_countdown_handler
-273F:882D F7 44 1F FFFF test word ptr [si+HS_FRAME_CTR], 0FFFFh
-273F:8832 74 05 jz loc_1690
-273F:8834 83 6C 1F 01 sub word ptr [si+HS_FRAME_CTR], 1
-
-273F:8838 loc_ret_1689:
-273F:8838 C3 retn
-273F:8839 loc_1690:
-273F:8839 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 0FFh
-273F:883D 75 01 jnz loc_1691
-273F:883F C3 retn
-273F:8840 loc_1691: ; xref 273F:883D
-273F:8840 80 7C 2A 01 cmp byte ptr [si+HS_ACTION_CTR], 1
-273F:8844 74 0E je loc_1692
-273F:8846 80 7C 2A 02 cmp byte ptr [si+HS_ACTION_CTR], 2
-273F:884A 74 12 je loc_1694
-273F:884C 80 7C 2A 03 cmp byte ptr [si+HS_ACTION_CTR], 3
-273F:8850 74 18 je loc_1695
-273F:8852 EB 23 jmp short loc_1696
-273F:8854 loc_1692:
-273F:8854 C7 44 24 035C mov word ptr [si+HS_MOVEMENT_OFFSET], 35Ch
-273F:8859 80 44 2A 01 add byte ptr [si+HS_ACTION_CTR], 1
-
-273F:885D loc_ret_1693: ; xref 273F:8863, 887C
-273F:885D C3 retn
-273F:885E loc_1694: ; xref 273F:884A
-273F:885E E8 8748 call hotspot_script_execute
-273F:8861 0B C0 or ax,ax ; Zero ?
-273F:8863 75 F8 jnz loc_ret_1693 ; Jump if not zero
-273F:8865 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:8869 C3 retn
-273F:886A loc_1695: ; xref 273F:8850
-273F:886A C7 44 24 0384 mov word ptr [si+HS_SCRIPT_OFFSET], 384h
-273F:886F 80 44 2A 01 add byte ptr [si+HS_ACTION_CTR], 1
-273F:8873 C6 45 0C 02 mov byte ptr [di+ANIM_LAYER], 2
-273F:8877 loc_1696: ; xref 273F:8852
-273F:8877 E8 872F call hotspot_script_execute
-273F:887A 0B C0 or ax,ax ; Zero ?
-273F:887C 75 DF jnz loc_ret_1693 ; Jump if not zero
-273F:887E E8 89F1 call animation_unload
-273F:8881 C6 44 15 FF mov byte ptr [si+HS_LAYER], 0FFh
-273F:8885 C7 06 70BF 0004 mov [ratpouch_hotspot_rec+HS_ROOM_NUM], 4
-273F:888B BB 03E9 mov bx, RATPOUCH_HOTSPOT_ID
-273F:888E E9 8435 jmp animation_load_entry
- rack_serf_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_check_cell_door proc near
-273F:8891 B8 2712 mov ax,2712h ; Cell door hotspot Id
-273F:8894 E8 E957 call room_exit_hs_get_pointer
-273F:8897 F6 44 0C FF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh
-273F:889B 75 0E jnz loc_ret_1697 ; Jump if blocked
- seq_check_cell_door_2:
-273F:889D F7 06 BA29 FFFF test torch_hide, 0FFFFh ; Torch been pulled?
-273F:88A3 74 06 jz loc_ret_1697 ; No, so exit
-273F:88A5 BB 0015 mov bx, 15h
-273F:88A8 E8 1752 call play_sound ; (9FFD)
-
-273F:88AB loc_ret_1697: ; xref 273F:889B, 88A3
-273F:88AB C3 retn
- seq_check_cell_door endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called by the torch hotspot in room #1
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- torch_load_method proc near
-273F:88AC F7 06 BA29 FFFF test torch_hide, 0FFFFh ; Has torch been pulled?
-273F:88B2 75 06 jnz loc_ret_1698 ; Yes, so skip load
-273F:88B4 BB 040F mov bx,40Fh ; Otherwise, load torch
-273F:88B7 E8 E8B5 call animation_load
-
-273F:88BA loc_ret_1698: ; xref 273F:88B2
-273F:88BA C3 retn
- torch_load_method proc near
-
-273F:88BB 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = Room description resource Id
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- display_dialog proc near
-273F:88BC BE 5040 mov si, offset look_info
-273F:88BF 89 5C 08 mov [si+8],bx
-273F:88C2 C6 06 38B0 01 mov data_781, 1
-273F:88C7 E8 0043 call sub_216 ; (890D)
-273F:88CA 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:88CF 75 03 jne loc_1700 ; Jump if not equal
-273F:88D1 E8 0052 call sub_217 ; (8926)
-273F:88D4 loc_1700: ; xref 273F:88CF
-273F:88D4 F6 06 073C 20 test byte ptr ds:[73Ch],20h ; (273F:073C=17h) ' '
-273F:88D9 74 0F jz loc_1701 ; Jump if zero
-273F:88DB E8 B1DD call replace_vga_palette2 ; (3ABB)
-273F:88DE FF 36 073C push word ptr ds:[73Ch] ; (273F:073C=17h)
-273F:88E2 FF 16 0762 call [set_lower_palette_proc]
-273F:88E6 8F 06 073C pop word ptr ds:[73Ch] ; (273F:073C=17h)
-273F:88EA loc_1701: ; xref 273F:88D9
-273F:88EA E8 969E call mouse_wait ; (1F8B)
-273F:88ED E8 96A6 call pause_for_input ; (1F96)
-273F:88F0 E8 9698 call mouse_wait ; (1F8B)
-273F:88F3 C6 06 38B0 00 mov data_781, 0
-273F:88F8 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:88FD FF 16 075E call [show_cursor_proc]
-273F:8901 F6 06 073C 20 test byte ptr ds:[73Ch],20h ; (273F:073C=17h) ' '
-273F:8906 74 04 jz loc_ret_1702 ; Jump if zero
-273F:8908 FF 16 0764 call [empty_palette_proc]
-
-273F:890C loc_ret_1702: ; xref 273F:8906
-273F:890C C3 retn
- display_dialog proc near
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4129, 7051, 705B, 88C7
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:890D sub_216 proc near
-273F:890D F6 06 11D0 20 test menubar_state, 20h ; (273F:11D0=56h) ' '
-273F:8912 74 12 jz loc_1703 ; Jump if zero
-273F:8914 56 push si
-273F:8915 80 0E 11D0 01 or menubar_state, 1 ; (273F:11D0=56h)
-273F:891A FF 16 075E call [show_cursor_proc]
-273F:891E FF 16 0752 call [show_compressed_screen_proc]
-273F:8922 E8 8BE9 call room_add_animations
-273F:8925 5E pop si
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:88D1
-
-273F:8926 sub_217:
-273F:8926 loc_1703: ; xref 273F:8912
-273F:8926 56 push si
-273F:8927 8A 44 01 mov al,[si+1]
-273F:892A 04 01 add al,1
-273F:892C 32 E4 xor ah,ah ; Zero register
-273F:892E F7 26 074C mul menubar_block_size
-273F:8932 8A 0C mov cl,[si]
-273F:8934 80 C1 01 add cl,1
-273F:8937 32 ED xor ch,ch ; Zero register
-273F:8939 91 xchg cx,ax
-273F:893A F7 26 074A mul char_width
-273F:893E 03 C1 add ax,cx
-273F:8940 A3 BA0F mov ds:data_470e,ax ; (273F:BA0F=0)
-273F:8943 A3 BA11 mov ds:data_471e,ax ; (273F:BA11=0)
-273F:8946 8B 44 08 mov ax,[si+8]
-273F:8949 BF AF42 mov di, offset talk_string_buffer
-273F:894C 89 3E BA07 mov talk_string_offset, di
-273F:8950 FF 74 06 push word ptr [si+6]
-273F:8953 E8 F3E4 call decode_string
-273F:8956 5D pop bp
-273F:8957 A1 0748 mov ax, screen_width
-273F:895A A3 BA09 mov ds:data_468e,ax ; (273F:BA09=0)
-273F:895D A1 4CE4 mov ax, data_segment2
-273F:8960 A3 BA0D mov ds:data_469e,ax ; (273F:BA0D=0)
-273F:8963 C6 06 BA13 04 mov byte ptr ds:data_472e,4 ; (273F:BA13=0)
-273F:8968 8B 3E 076E mov di, data_571
-273F:896C 8A 45 05 mov al,[di+5]
-273F:896F A2 BA14 mov ds:data_473e,al ; (273F:BA14=0)
-273F:8972 8B 3E BA07 mov di, talk_string_offset
-273F:8976 BB BA07 mov bx, offset talk_string_offset
-273F:8979 A1 4CF0 mov ax, font2_segment
-273F:897C 8E C0 mov es, ax
-273F:897E B1 03 mov cl, 3
-273F:8980 E8 91AD call word_wrap_string
-273F:8983 5E pop si
-273F:8984 56 push si
-273F:8985 8A D0 mov dl,al
-273F:8987 88 44 03 mov [si+3],al
-273F:898A 8A 04 mov al,[si]
-273F:898C 8A 5C 01 mov bl,[si+1]
-273F:898F 8A 4C 02 mov cl,[si+2]
-273F:8992 33 ED xor bp,bp ; Zero register
-273F:8994 FF 16 077A call [draw_dialog_proc]
-273F:8998 úBB BA07 mov bx, offset talk_string_offset
-273F:899B loc_1704: ; xref 273F:899E
-273F:899B E8 91FA call sub_51 ; (1B98)
-273F:899E 74 FB jz loc_1704 ; Jump if zero
-273F:89A0 FF 16 0744 call word ptr [show_screen_proc]
-273F:89A4 5E pop si
-273F:89A5 C3 retn
- sub_216 endp
-
- ;* No entry point to code
-273F:89A6 E8 FE31 call seq_set_hotspot_name
-273F:89A9 8B 34 mov si,[si]
-273F:89AB 80 4C 03 80 or byte ptr [si+3],80h
-273F:89AF C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; JUMP POINT
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:89B0 loc_1705: ; xref 273F:5BD7
-273F:89B0 E8 006E call talk_init
-273F:89B3 8B 1E BA21 mov bx, script_v6
-273F:89B7 D1 E3 shl bx, 1
-273F:89B9 8B 9F 5050 mov bx, give_talk_list[bx]
-273F:89BD E8 00C8 call talk_init2
-273F:89C0 E9 CBCA jmp character_walking_end_2
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_to_proc proc near
-273F:89C3 8B DD mov bx,bp
-273F:89C5 8B 07 mov ax, [bx]
-273F:89C7 83 C5 02 add bp,2
-273F:89CA A3 BA19 mov use_hotspot_id, ax
-273F:89CD A3 BA1B mov active_hotspot_id, ax
-273F:89D0 56 push si
-273F:89D1 E8 8316 call get_room_resource_pointer2
-273F:89D4 5B pop bx
-273F:89D5 87 DE xchg bx,si
-273F:89D7 81 3E BA19 03EA cmp use_hotspot_id, SKORL_HOTSPOT_ID
-273F:89DD 74 21 je loc_1708 ; Jump if equal
-273F:89DF 83 7C 06 1C cmp word ptr [si+HS_ROOM_NUM], 28
-273F:89E3 75 08 jne loc_1706 ; Jump if not equal
-273F:89E5 81 3E BA19 03EB cmp use_hotspot_id, 3EBh
-273F:89EB 74 13 je loc_1708 ; Jump if equal
-273F:89ED loc_1706: ; xref 273F:89E3
-273F:89ED A1 BA19 mov ax, use_hotspot_id
-273F:89F0 E8 BBB4 call hotspot_action_precheck
-273F:89F3 0B C0 or ax,ax ; Zero ?
-273F:89F5 74 09 jz loc_1708 ; Jump if zero
-273F:89F7 3D 0003 cmp ax,3
-273F:89FA 74 03 je loc_ret_1707 ; Jump if equal
-273F:89FC E9 CB82 jmp character_walking_end
-
-273F:89FF loc_ret_1707: ; xref 273F:89FA
-273F:89FF C3 retn
-273F:8A00 loc_1708: ; xref 273F:89DD, 89EB, 89F5
-273F:8A00 E8 BCEB call character_face_hotspot
-273F:8A03 E8 CBF0 call hotspot_get_action_sequence
-273F:8A06 79 03 jns loc_1709 ; Jump if not sign
-273F:8A08 E9 D9A6 jmp display_message_dialog_3
-273F:8A0B loc_1709: ; xref 273F:8A06
-273F:8A0B 74 08 jz loc_1710 ; Jump if zero
-273F:8A0D E8 B424 call sequence_execute
-273F:8A10 74 03 jz loc_1710 ; Jump if zero
-273F:8A12 E9 CB6C jmp character_walking_end
-273F:8A15 loc_1710: ; xref 273F:8A0B, 8A10
-273F:8A15 E8 0009 call talk_init
-273F:8A18 E8 0026 call talk_get_record
-273F:8A1B E8 006A call talk_init2
-273F:8A1E E9 CB6C jmp character_walking_end_2
- talk_to_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = talking to char hotspot rec
- ; di = player anim slot
- ; Amongst other things, sets the player's tick proc to the
- ; talk tick handler
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_init proc near
-273F:8A21 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:8A24 89 47 2F mov [bx+HS_USE_HOTSPOT_ID], ax
-273F:8A27 C7 47 2B 0000 mov [bx+HS_V2B], 0
-273F:8A2C 89 1E CF06 mov talk_to_hotspot_ptr, bx
-273F:8A30 55 push bp
-273F:8A31 E8 B932 call character_update_movement
-273F:8A34 5D pop bp
-273F:8A35 B8 8ABD mov ax, offset talk_tick_proc
-273F:8A38 89 45 11 mov [di+ANIM_TICK_PROC], ax
-273F:8A3B C6 06 9834 03 mov cursor_state, CURSORSTATE_TALK
-273F:8A40 C3 retn
- talk_init endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = talking to char hotspot rec
- ; Called from: 273F:8A18
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_get_record proc near
-273F:8A41 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8A45 F7 47 33 FFFF test word ptr [bx+HS_V33], 0FFFFh
-273F:8A4A 74 0A jz loc_1711 ; Jump if zero
-273F:8A4C FF 77 33 push word ptr [bx+HS_V33]
-273F:8A4F C7 47 33 0000 mov word ptr [bx+HS_V33], 0
-273F:8A54 5B pop bx
-273F:8A55 C3 retn
-273F:8A56 loc_1711: ; xref 273F:8A4A
-273F:8A56 8B 0E BA1B mov cx, active_hotspot_id
-273F:8A5A úBB 505C mov bx, offset talk_table
-273F:8A5D loc_1712: ; xref 273F:8A64
-273F:8A5D ú3B 0F cmp cx, [bx] ; Hotspot entry found?
-273F:8A5F 74 05 je loc_1713 ; If yes then jump
-273F:8A61 83 C3 04 add bx,4 ; Move to next record
-273F:8A64 EB F7 jmp short loc_1712
-273F:8A66 loc_1713:
-273F:8A66 8B 5F 02 mov bx, [bx+2] ; Get offset of talk data
-273F:8A69 56 push si
-273F:8A6A A1 BA1B mov ax, active_hotspot_id
-273F:8A6D E8 82B1 call get_room_resource_pointer4
-273F:8A70 8B 44 02 mov ax, [si+HSH_NAME]
-273F:8A73 5E pop si
-273F:8A74 3D 017A cmp ax, 17Ah ; "Stranger"?
-273F:8A77 74 0C je loc_1714 ; If yes then jump
-
-273F:8A79 A1 BA3B mov ax, talk_record_index ; Get talk index to use
-273F:8A7C D1 E0 shl ax, 1
-273F:8A7E 03 D8 add bx, ax
-273F:8A80 8B 5F 02 mov bx,[bx+2] ; Return alt offset
-273F:8A83 EB 02 jmp short loc_ret_1715
-273F:8A85 loc_1714:
-273F:8A85 8B 1F mov bx, [bx] ; Return main offset
-273F:8A87 loc_ret_1715:
-273F:8A87 C3 retn
- talk_get_record endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = talk record offset
- ; Called from: 273F:89BD, 8A1B
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_init2 proc near
-273F:8A88 8B 07 mov ax, [bx]
-273F:8A8A A3 CF02 mov talk_response_ptr, ax
-273F:8A8D 83 C3 02 add bx, 2
-273F:8A90 89 1E CF00 mov talk_data_ptr, bx
-273F:8A94 89 1E CF04 mov talk_next_talk_offset, bx
-273F:8A98 C6 06 CF08 FF mov talk_state, TALK_START
-273F:8A9D C6 06 CF0B 00 mov talk_cf0b, 0
-273F:8AA2 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:8AA5 A3 983F mov data_1090, ax
-273F:8AA8 A1 BA1B mov ax, active_hotspot_id
-273F:8AAB A3 9841 mov data_1091, ax
-273F:8AAE C6 06 9849 01 mov pathfind_data, 1
-273F:8AB3 C3 retn
- talk_init2 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8AB4 loc_1716: ; xref 273F:8AC9
-273F:8AB4 E9 0281 jmp loc_1753 ; (8D38)
-273F:8AB7 loc_1717: ; xref 273F:8AC2
-273F:8AB7 E9 00A8 jmp talk_handle_selection
-273F:8ABA loc_1718: ; xref 273F:8AD0
-273F:8ABA E9 0299 jmp loc_1755 ; (8D56)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = eb26h for Skorl
- ; talk_data_ptr = e5aa for prisoner
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_tick_proc proc near
-273F:8ABD 80 3E CF08 02 cmp talk_state, TALK_SELECT ; Talk selection?
-273F:8AC2 74 F3 je loc_1717 ; If yes then jump
-273F:8AC4 80 3E CF08 03 cmp talk_state, TALK_UNKNOWN
-273F:8AC9 74 E9 je loc_1716 ; Jump if equal
-273F:8ACB 80 3E CF08 04 cmp talk_state, 4
-273F:8AD0 74 E8 je loc_1718 ; Jump if equal
-
-; Handler for showing a list of talking options. This only gets run once before
-; the talk state changes to TALK_SELECT
-
-273F:8AD2 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8AD6 C6 06 CF09 00 mov talk_line_num, 0
-273F:8ADB C6 06 CF0A 00 mov talk_selected_line, 0
-273F:8AE0 C6 06 CF08 02 mov talk_state, TALK_SELECT
-273F:8AE5 8B 1E CF00 mov bx, talk_data_ptr
-273F:8AE9 BD CF0C mov bp, offset talk_entry_list
-273F:8AEC loc_1719:
-273F:8AEC F6 47 03 40 test byte ptr [bx+3], 40h
-273F:8AF0 74 06 jz loc_1720
-273F:8AF2 F6 47 03 80 test byte ptr [bx+3], 80h
-273F:8AF6 75 2E jnz loc_1723
-273F:8AF8 loc_1720:
-273F:8AF8 8B 07 mov ax, [bx] ; Get sequence offset
-273F:8AFA 25 3FFF and ax, 3FFFh
-273F:8AFD 74 05 jz loc_1721 ; Jump if zero
-273F:8AFF E8 B332 call sequence_execute
-273F:8B02 74 1C jz loc_1722 ; If zero, skip line
-273F:8B04 loc_1721:
-273F:8B04 87 DD xchg bx, bp
-273F:8B06 89 2F mov [bx], bp ; Add to lookup list
-273F:8B08 83 C3 02 add bx,2 ; Move to next entry
-273F:8B0B 87 DD xchg bx, bp
-273F:8B0D 8B 47 02 mov ax, [bx+TALK_DESC_ID]
-273F:8B10 80 E4 3F and ah, 3Fh
-273F:8B13 80 06 CF09 01 add talk_line_num, 1
-273F:8B18 3D 0424 cmp ax, TALK_MAGIC_ID ; Magic skip number
-273F:8B1B 74 03 je loc_1722 ; Jump if equal
-273F:8B1D E8 02C3 call talk_handle_line
-273F:8B20 loc_1722: ; xref 273F:8B02, 8B1B
-273F:8B20 F6 47 01 80 test byte ptr [bx+1],80h
-273F:8B24 75 08 jnz loc_1724 ; Jump if not zero
-273F:8B26 loc_1723: ; xref 273F:8AF6
-273F:8B26 83 C3 06 add bx, 6
-273F:8B29 83 3F FF cmp word ptr [bx], 0FFFFh
-273F:8B2C 75 BE jne loc_1719
-
-273F:8B2E loc_1724: ; xref 273F:8B24
-273F:8B2E 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8B32 C7 47 42 0000 mov word ptr [bx+HS_DELAY_CTR], 0
-273F:8B37 80 3E CF09 01 cmp talk_line_num, 1 ; Only one option?
-273F:8B3C 75 05 jne loc_1725 ; If not, then jump
-
-273F:8B3E B9 0081 mov cx,81h
-273F:8B41 EB 03 jmp short loc_1726 ; (8B46)
-273F:8B43 loc_1725: ; xref 273F:8B3C
-273F:8B43 B9 0001 mov cx,1
-273F:8B46 loc_1726: ; xref 273F:8B41
-273F:8B46 B8 0000 mov ax,0
-273F:8B49 BB 0000 mov bx,0
-273F:8B4C BD 0026 mov bp,26h
-273F:8B4F BA 0002 mov dx,2
-273F:8B52 E8 802E call sub_21 ; Mark rects needing display
-
-273F:8B55 F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:8B5A 74 05 jz loc_ret_1727 ; Jump if zero
-273F:8B5C C6 06 11DA 00 mov mouse_buttons2, 0
-
-273F:8B61 loc_ret_1727: ; xref 273F:8B5A
-273F:8B61 C3 retn
- talk_tick_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_handle_selection:
-273F:8B62 80 3E CF09 01 cmp talk_line_num, 1 ; Were any lines present
-273F:8B67 75 1B jne loc_1731 ; If yes then jump
-
-; This code fragment is only reached if talking to someone who only has a canned response.
-; ie. no options need be presented. Such as the prisoner saying "I want water"
-
-273F:8B69 F6 06 11DA FF test mouse_buttons2, 0FFh
-273F:8B6E 74 05 jz loc_1729 ; Jump if zero
-273F:8B70 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:8B75 loc_1729: ; xref 273F:8B6E
-273F:8B75 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:8B7B 74 01 jz loc_1730 ; Jump if zero
-273F:8B7D C3 retn
-273F:8B7E loc_1730:
-273F:8B7E BB 0001 mov bx, 1 ; Response #1
-273F:8B81 E9 0092 jmp loc_1741
-
-; This code is reached both for the handling of highlighting the list of possible talk
-; selections, as well as for handling the response when one of those lines is selected
-
-273F:8B84 loc_1731: ; xref 273F:8B67
-273F:8B84 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8B88 A1 11D8 mov ax, mouse_y2
-273F:8B8B D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:8B8D D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:8B8F D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:8B91 74 08 jz loc_1732 ; Jump if zero
-273F:8B93 38 06 CF09 cmp talk_line_num, al
-273F:8B97 73 02 jae loc_1732
-273F:8B99 33 C0 xor ax,ax ; No line selected
-273F:8B9B loc_1732:
-273F:8B9B 3A 06 CF0A cmp al, talk_selected_line ; Still on same line?
-273F:8B9F 74 5C je loc_1737 ; If yse then jump
-273F:8BA1 86 06 CF0A xchg talk_selected_line, al
-273F:8BA5 0A C0 or al, al ; Any current selection?
-273F:8BA7 74 08 jz loc_1733 ; If not then skip
-273F:8BA9 80 0E 11D0 02 or menubar_state, 2
-273F:8BAE E8 0281 call talk_toggle_line_highlight ; Deselect old line
-273F:8BB1 loc_1733:
-273F:8BB1 A0 CF0A mov al, talk_selected_line
-273F:8BB4 0A C0 or al,al ; Any new selected line?
-273F:8BB6 74 08 jz loc_1734 ; If not then jump
-273F:8BB8 80 0E 11D0 02 or menubar_state, 2
-273F:8BBD E8 0272 call talk_toggle_line_highlight ; Highlight new line
-273F:8BC0 loc_1734:
-273F:8BC0 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:8BC5 74 06 je loc_1735 ; Jump if equal
-273F:8BC7 C7 06 11EC 0000 mov data_640, 0
-273F:8BCD loc_1735: ; xref 273F:8BC5
-273F:8BCD FF 16 075E call [show_cursor_proc]
-273F:8BD1 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:8BD6 75 12 jne loc_1736 ; Jump if not equal
-273F:8BD8 33 C0 xor ax,ax ; Zero register
-273F:8BDA 33 DB xor bx,bx ; Zero register
-273F:8BDC BD 0140 mov bp,140h
-273F:8BDF BA 001F mov dx,1Fh
-273F:8BE2 B9 0001 mov cx,1
-273F:8BE5 E8 7FA7 call sub_22 ; (0B8F)
-273F:8BE8 EB 13 jmp short loc_1737 ; (8BFD)
-273F:8BEA loc_1736: ; xref 273F:8BD6
-273F:8BEA A1 11D6 mov ax, mouse_x2
-273F:8BED 8B 1E 11D8 mov bx, mouse_y2
-273F:8BF1 BD 0010 mov bp,10h
-273F:8BF4 BA 0010 mov dx,10h
-273F:8BF7 B9 0001 mov cx,1
-273F:8BFA E8 7F92 call sub_22 ; (0B8F)
-273F:8BFD loc_1737: ; xref 273F:8B9F, 8BE8
-273F:8BFD 32 C0 xor al,al ; Zero register
-273F:8BFF 86 06 11DA xchg mouse_buttons2, al
-273F:8C03 A8 07 test al,7 ; Any buttons pressed?
-273F:8C05 74 07 jz loc_ret_1738 ; Skip if not
-
-; At this point a talk line has been selected
-
-273F:8C07 A8 03 test al,3
-273F:8C09 75 05 jnz loc_1740
-273F:8C0B E9 00F8 jmp loc_1751 ; Handle selection
-273F:8C0E loc_ret_1738: ; xref 273F:8C05
-273F:8C0E C3 retn
-
-273F:8C0F loc_ret_1739: ; xref 273F:8C19
-273F:8C0F C3 retn
-273F:8C10 loc_1740: ; xref 273F:8C09
-273F:8C10 8A 1E CF0A mov bl, talk_selected_line
-273F:8C14 32 FF xor bh,bh ; Zero register
-
-; This code point is reached both for automatic responses from a character,
-; or when a talk item has been selected and needs to be "spoken"
-
-273F:8C16 loc_1741:
-273F:8C16 80 EB 01 sub bl, 1
-273F:8C19 72 F4 jc loc_ret_1739 ; If bl had been 0, invalid exit
-273F:8C1B 80 06 CF0B 01 add talk_cf0b, 1
-273F:8C20 D1 E3 shl bx,1
-273F:8C22 8B 9F CF0C mov bx, talk_entry_list[bx] ; Get selected talk entry
-273F:8C26 8B 57 02 mov dx, [bx+TALK_DESC_ID]
-273F:8C29 80 E6 3F and dh,3Fh ; '?'
-273F:8C2C 80 4F 03 40 or byte ptr [bx+TALK_DESC_ID+1], 40h ; Flag desc
-273F:8C30 81 FA 0424 cmp dx, TALK_MAGIC_ID
-273F:8C34 74 11 je loc_1742 ; Jump if equal
-273F:8C36 53 push bx
-273F:8C37 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8C3B 8B 5F 0B mov bx, [bx+HS_ANIM_OFFSET]
-273F:8C3E 8B 4F 1B mov cx, [bx+ANIM_HOTSPOT_ID]
-273F:8C41 B0 01 mov al, 1
-273F:8C43 E8 D4E9 call talk_setup_3 ; (612F)
-273F:8C46 5B pop bx
-273F:8C47 loc_1742: ; xref 273F:8C34
-273F:8C47 8B 47 04 mov ax, [bx+TALK_POST_SEQUENCE]
-273F:8C4A F6 C4 80 test ah, 80h
-273F:8C4D 74 06 jz loc_1743 ; Jump if zero
-273F:8C4F 80 E4 7F and ah, 7Fh
-273F:8C52 E8 B1DF call sequence_execute
-273F:8C55 loc_1743:
-273F:8C55 8B 1E CF02 mov bx, talk_response_ptr
-273F:8C59 D1 E0 shl ax, 1
-273F:8C5B 03 D8 add bx, ax
-273F:8C5D D1 E0 shl ax, 1
-273F:8C5F 03 D8 add bx, ax
-
-273F:8C61 8B 07 mov ax, [bx] ; Get sequence to run
-273F:8C63 0B C0 or ax, ax
-273F:8C65 74 08 jz loc_1744 ; Jump if zero
-273F:8C67 E8 B1CA call sequence_execute
-273F:8C6A 3D 1092 cmp ax, 1092h
-273F:8C6D 75 E6 jne loc_1743 ; Jump if not equal
-273F:8C6F loc_1744: ; xref 273F:8C65
-273F:8C6F 8B 47 02 mov ax, [bx+2]
-273F:8C72 F6 C4 80 test ah, 80h
-273F:8C75 74 06 jz loc_1745 ; Jump if zero
-273F:8C77 80 E4 7F and ah, 7Fh
-273F:8C7A E8 B1B7 call sequence_execute
-273F:8C7D loc_1745: ; xref 273F:8C75
-273F:8C7D 3D 0424 cmp ax, 424h
-273F:8C80 74 12 je loc_1746 ; Jump if equal
-273F:8C82 53 push bx
-273F:8C83 8B D0 mov dx,ax
-273F:8C85 B9 03E8 mov cx, PLAYER_HOTSPOT_ID
-273F:8C88 56 push si
-273F:8C89 8B 36 CF06 mov si, talk_to_hotspot_ptr
-273F:8C8D B0 01 mov al,1
-273F:8C8F E8 D49D call talk_setup_3 ; (612F)
-273F:8C92 5E pop si
-273F:8C93 5B pop bx
-273F:8C94 loc_1746: ; xref 273F:8C80
-273F:8C94 8B 47 04 mov ax, [bx+4]
-273F:8C97 3D FFFF cmp ax, 0FFFFh
-273F:8C9A 74 28 je loc_1748 ; Jump if equal
-273F:8C9C F6 C4 80 test ah, 80h
-273F:8C9F 74 0B jz loc_1747 ; Jump if zero
-273F:8CA1 80 E4 7F and ah, 7Fh
-273F:8CA4 E8 B18D call sequence_execute
-273F:8CA7 3D FFFF cmp ax, 0FFFFh
-273F:8CAA 74 18 je loc_1748 ; Jump if equal
-273F:8CAC loc_1747: ; xref 273F:8C9F
-273F:8CAC D1 E0 shl ax, 1
-273F:8CAE 8B D8 mov bx, ax
-273F:8CB0 D1 E0 shl ax, 1
-273F:8CB2 03 C3 add ax, bx
-273F:8CB4 03 06 CF04 add ax, talk_next_talk_offset ; Next sequence start offset
-273F:8CB8 A3 CF00 mov talk_data_ptr, ax
-273F:8CBB C6 06 CF08 03 mov talk_state, 3
-273F:8CC0 EB 07 jmp short loc_1749 ; (8CC9)
-
-273F:8CC2 5B pop bx
-273F:8CC3 C3 ret
-273F:8CC4 loc_1748:
-273F:8CC4 C6 06 CF08 04 mov talk_state, 4
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8D06
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8CC9 sub_221 proc near
-273F:8CC9 loc_1749: ; xref 273F:8CC0, 8D04
-273F:8CC9 úB8 0001 mov ax,1
-273F:8CCC BB 0001 mov bx,1
-273F:8CCF BD 0026 mov bp,26h
-273F:8CD2 BA 0001 mov dx,1
-273F:8CD5 B9 0081 mov cx,81h
-273F:8CD8 E9 7EA8 jmp loc_92 ; (0B83)
- sub_221 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8CDB loc_1750: ; xref 273F:8D24, 8D36, 8D6E
-273F:8CDB úC6 06 9849 00 mov pathfind_data, 0
-273F:8CE0 C7 06 B15F 5E44 mov word ptr ds:data_450e, offset player_tick_proc
-273F:8CE6 C6 06 6D33 00 mov [player_hotspot_rec+HS_CHAR_MODE], CHARMODE_NONE
-273F:8CEB C7 06 6D31 0000 mov [player_hotspot_rec+HS_DELAY_CTR], 0
-273F:8CF1 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8CF5 C7 47 2F 0000 mov word ptr [bx+HS_USE_HOTSPOT_ID], 0
-273F:8CFA C7 47 42 0018 mov word ptr [bx+HS_DELAY_CTR], 18h
-273F:8CFF C6 06 9834 00 mov cursor_state, CURSORSTATE_NONE
-273F:8D04 EB C3 jmp short loc_1749 ; (8CC9)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; This point is reached if the third button is pressed. It causes the
- ; talk to abort, and the talked to character to show the question mark briefly
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8D06 loc_1751: ; xref 273F:8C0B
-273F:8D06 E8 FFC0 call sub_221 ; (8CC9)
-273F:8D09 F6 06 CF0B FF test talk_cf0b, 0FFh
-273F:8D0E 75 16 jnz loc_1752 ; Jump if not zero
-273F:8D10 56 push si
-273F:8D11 8B 36 CF06 mov si, talk_to_hotspot_ptr
-273F:8D15 8B 5C 0B mov bx, [si+HS_ANIM_OFFSET]
-273F:8D18 8B 4F 1B mov cx, [bx+1Bh]
-273F:8D1B BB 002B mov bx,2Bh
-273F:8D1E 33 D2 xor dx,dx ; Zero register
-273F:8D20 E8 D698 call display_message_dialog_4
-273F:8D23 5E pop si
-273F:8D24 EB B5 jmp short loc_1750 ; (8CDB)
-273F:8D26 loc_1752: ; xref 273F:8D0E
-273F:8D26 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8D2A 8B 5F 0B mov bx,[bx+HS_ANIM_OFFSET]
-273F:8D2D 8B 4F 1B mov cx,[bx+ANIM_HOTSPOT_ID]
-273F:8D30 BA 088D mov dx, 88Dh
-273F:8D33 E8 D3F9 call talk_setup_3
-273F:8D36 EB A3 jmp short loc_1750 ; (8CDB)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8D38 loc_1753: ; xref 273F:8AB4
-273F:8D38 E8 0036 call sub_222 ; (8D71)
-273F:8D3B E8 D43A call talk_countdown_handler
-273F:8D3E 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8D42 83 7F 37 06 cmp word ptr [bx+HS_TALK_COUNTDOWN],6
-273F:8D46 73 0D jae loc_ret_1754 ; Jump if above or =
-273F:8D48 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:8D4E 75 05 jnz loc_ret_1754 ; Jump if not zero
-273F:8D50 C6 06 CF08 01 mov talk_state, 1
-
-273F:8D55 loc_ret_1754: ; xref 273F:8D46, 8D4E, 8D64, 8D6C
-273F:8D55 C3 retn
-273F:8D56 loc_1755: ; xref 273F:8ABA
-273F:8D56 E8 0018 call sub_222 ; (8D71)
-273F:8D59 E8 D41C call talk_countdown_handler
-273F:8D5C 8B 1E CF06 mov bx, talk_to_hotspot_ptr
-273F:8D60 83 7F 37 06 cmp word ptr [bx+HS_TALK_COUNTDOWN],6
-273F:8D64 73 EF jae loc_ret_1754 ; Jump if above or =
-273F:8D66 F7 06 9838 FFFF test data_431,0FFFFh ; (273F:9838=5C8Bh)
-273F:8D6C 75 E7 jnz loc_ret_1754 ; Jump if not zero
-273F:8D6E E9 FF6A jmp loc_1750 ; (8CDB)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8D38, 8D56
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8D71 sub_222 proc near
-273F:8D71 F6 06 11DA 07 test mouse_buttons2, 7
-273F:8D76 74 6A jz loc_ret_1758 ; Jump if zero
-273F:8D78 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:8D7D C3 retn
- ;* No entry point to code
-273F:8D7E F6 06 9837 FF test talk_dialog_active, 0FFh
-273F:8D83 74 5D jz loc_ret_1758 ; Jump if zero
-273F:8D85 A1 11D6 mov ax, mouse_x2
-273F:8D88 3B 06 11C2 cmp ax, talk_dialog_left
-273F:8D8C 72 54 jb loc_ret_1758 ; Jump if below
-273F:8D8E 2B 06 11C2 sub ax, talk_dialog_left
-273F:8D92 3B 06 11C4 cmp ax, talk_dialog_width
-273F:8D96 73 4A jae loc_ret_1758 ; Jump if above or =
-273F:8D98 A1 11D8 mov ax, mouse_y2
-273F:8D9B 3B 06 11C0 cmp ax, talk_dialog_top
-273F:8D9F 72 41 jb loc_ret_1758 ; Jump if below
-273F:8DA1 2B 06 11C0 sub ax, talk_dialog_top
-273F:8DA5 3B 06 11C6 cmp ax, talk_dialog_height
-273F:8DA9 73 37 jae loc_ret_1758 ; Jump if above or =
-273F:8DAB A1 983B mov ax, talk_character_id
-273F:8DAE 56 push si
-273F:8DAF E8 7F38 call get_room_resource_pointer2
-273F:8DB2 C7 44 37 0000 mov word ptr [si+HS_TALK_COUNTDOWN],0
-273F:8DB7 5E pop si
-273F:8DB8 81 3E 983B 03E8 cmp talk_character_id, PLAYER_HOTSPOT_ID
-273F:8DBE 75 14 jne loc_1757 ; Jump if not equal
-273F:8DC0 A1 9841 mov ax, data_1091
-273F:8DC3 56 push si
-273F:8DC4 E8 7F23 call get_room_resource_pointer2
-273F:8DC7 F7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
-273F:8DCC 74 05 jz loc_1756 ; Jump if zero
-273F:8DCE C7 44 37 0028 mov word ptr [si+HS_TALK_COUNTDOWN], 28h
-273F:8DD3 loc_1756: ; xref 273F:8DCC
-273F:8DD3 5E pop si
-273F:8DD4 loc_1757: ; xref 273F:8DBE
-273F:8DD4 C6 06 9837 00 mov talk_dialog_active, 0
-273F:8DD9 C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
-273F:8DDF E8 D4E3 call sub_147 ; (62C5)
-
-273F:8DE2 loc_ret_1758: ; xref 273F:8D76, 8D83, 8D8C, 8D96
- ; 8D9F, 8DA9
-273F:8DE2 C3 retn
- sub_222 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8B1D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_handle_line proc near
-273F:8DE3 56 push si
-273F:8DE4 57 push di
-273F:8DE5 55 push bp
-273F:8DE6 53 push bx
-273F:8DE7 50 push ax
-273F:8DE8 A0 CF09 mov al, talk_line_num
-273F:8DEB 32 E4 xor ah, ah ; Zero register
-273F:8DED E8 E22C call talk_clear_line
-273F:8DF0 58 pop ax
-273F:8DF1 BF AF42 mov di, offset talk_string_buffer
-273F:8DF4 89 3E BA07 mov talk_string_offset, di
-273F:8DF8 E8 EF3F call decode_string
-273F:8DFB A0 CF09 mov al, talk_line_num
-273F:8DFE 32 E4 xor ah, ah
-273F:8E00 F7 26 074C mul menubar_block_size ; Calculate display offset
-273F:8E04 A3 BA0F mov ds:data_470e, ax
-273F:8E07 A3 BA11 mov ds:data_471e, ax
-273F:8E0A C6 06 BA13 00 mov byte ptr ds:data_472e, 0
-273F:8E0F A1 0748 mov ax, screen_width
-273F:8E12 A3 BA09 mov ds:data_468e,ax
-273F:8E15 A1 4CE4 mov ax, data_segment2
-273F:8E18 A3 BA0D mov ds:data_469e, ax
-273F:8E1B 8B 36 076E mov si, data_571
-273F:8E1F 8A 44 05 mov al, [si+5]
-273F:8E22 A2 BA14 mov ds:data_473e, al
-273F:8E25 úBB BA07 mov bx, offset talk_string_offset
-273F:8E28 loc_1759:
-273F:8E28 E8 8D6D call sub_51 ; (1B98)
-273F:8E2B 74 FB jz loc_1759 ; Jump if zero
-273F:8E2D 5B pop bx
-273F:8E2E 5D pop bp
-273F:8E2F 5F pop di
-273F:8E30 5E pop si
-273F:8E31 C3 retn
- talk_handle_line endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8BAE, 8BBD
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- talk_toggle_line_highlight proc near
-273F:8E32 32 E4 xor ah,ah ; Zero register
-273F:8E34 BB 0A00 mov bx, MENUBAR_BLOCK_SIZE
-273F:8E37 F7 E3 mul bx ; dx:ax = reg * ax
-273F:8E39 8B F8 mov di,ax
-273F:8E3B 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:8E40 75 06 jne loc_1760 ; Jump if not equal
-273F:8E42 BB 0140 mov bx,140h
-273F:8E45 E9 A154 jmp loc_637 ; (2F9C)
-273F:8E48 loc_1760: ; xref 273F:8E40
-273F:8E48 1E push ds
-273F:8E49 B8 A000 mov ax, VGA_SEGMENT
-273F:8E4C 8E C0 mov es,ax
-273F:8E4E A1 4CE4 mov ax, data_segment2
-273F:8E51 8E D8 mov ds,ax
-273F:8E53 B9 0A00 mov cx, MENUBAR_BLOCK_SIZE
-
-273F:8E56 locloop_1761: ; xref 273F:8E68
-273F:8E56 80 3D E2 cmp byte ptr [di],0E2h
-273F:8E59 74 05 je loc_1762 ; Jump if equal
-273F:8E5B 80 3D FF cmp byte ptr [di],0FFh
-273F:8E5E 75 07 jne loc_1763 ; Jump if not equal
-273F:8E60 loc_1762: ; xref 273F:8E59
-273F:8E60 80 35 1D xor byte ptr [di],1Dh
-273F:8E63 26: 80 35 1D xor byte ptr es:[di],1Dh
-273F:8E67 loc_1763: ; xref 273F:8E5E
-273F:8E67 47 inc di
-273F:8E68 E2 EC loop locloop_1761 ; Loop if cx > 0
-
-273F:8E6A 1F pop ds
-273F:8E6B C3 retn
- talk_toggle_line_highlight endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ;* No entry point to code
-273F:8E6C E8 7E79 call get_room_resource_pointer
-273F:8E6F F7 44 33 FFFF test word ptr [si+33h],0FFFFh
-273F:8E74 74 05 jz loc_1764 ; Jump if zero
-273F:8E76 8B 74 33 mov si,[si+33h]
-273F:8E79 EB 26 jmp short loc_1768 ; (8EA1)
-273F:8E7B loc_1764: ; xref 273F:8E74
-273F:8E7B úBE 505C mov si, offset talk_table
-273F:8E7E loc_1765: ; xref 273F:8E85
-273F:8E7E ú3B 1C cmp bx,[si]
-273F:8E80 74 05 je loc_1766 ; Jump if equal
-273F:8E82 83 C6 04 add si,4
-273F:8E85 EB F7 jmp short loc_1765 ; (8E7E)
-273F:8E87 loc_1766: ; xref 273F:8E80
-273F:8E87 8B 7C 02 mov di,[si+2]
-273F:8E8A E8 7E92 call get_room_resource_pointer3
-273F:8E8D 81 7C 02 017A cmp word ptr [si+2],17Ah
-273F:8E92 74 0B je loc_1767 ; Jump if equal
-273F:8E94 8B 1E BA3B mov bx, talk_record_index
-273F:8E98 D1 E3 shl bx,1 ; Shift w/zeros fill
-273F:8E9A 8B 71 02 mov si,[bx+di+2]
-273F:8E9D EB 02 jmp short loc_1768 ; (8EA1)
-273F:8E9F loc_1767: ; xref 273F:8E92
-273F:8E9F 8B 35 mov si,[di]
-273F:8EA1 loc_1768: ; xref 273F:8E79, 8E9D
-273F:8EA1 83 C6 02 add si,2
-273F:8EA4 B8 0008 mov ax,8
-273F:8EA7 F7 E1 mul cx ; dx:ax = reg * ax
-273F:8EA9 03 F0 add si,ax
-273F:8EAB 81 4C 02 C000 or word ptr [si+2],0C000h
-273F:8EB0 C3 retn
-
-273F:8EB1 00 db 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- menuitem_save proc near
-
-273F:8EB2 B0 56 mov al, 56h
-273F:8EB4 E8 52 01 call saverestore_proc
-273F:8EB7 2D 00001 sub ax, 1
-273F:8EBA 73 03 jnb mi_save_1
-273F:8EBC E9 80 00 jmp loc_1774
-
-273F:8EBF 50 mi_save_1 push ax
-273F:8EC0 E8 9C 90 call show_disk_cursor
-273F:8EC3 58 pop ax
-273F:8EC4 3B 06 08 03 cmp ax, data_540
-273F:8EC8 72 0C jb mi_save_2
-273F:8ECA 83 3E 0308 0F cmp data_540, 0Fh
-273F:8ECF 73 05 jnb mi_save_2
-273F:8ED1 83 06 0308 01 add data_540, 1
-
-273F:8ED6 loc_1769:
-273F:8ED6 BB F010 mov bx, WRITE_BUFFER_SIZE
-273F:8ED9 81 EB 5D90 sub bx, offset write_buffer
-273F:8EDD F7 E3 mul bx ; dx:ax = reg * ax
-273F:8EDF 05 0200 add ax,200h
-273F:8EE2 83 D2 00 adc dx,0
-273F:8EE5 50 push ax
-273F:8EE6 52 push dx
-273F:8EE7 8B CA mov cx,dx
-273F:8EE9 8B D0 mov dx,ax
-273F:8EEB B8 4200 mov ax,4200h
-273F:8EEE 8B 1E 554D mov bx, data_832
-273F:8EF2 CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:8EF4 59 pop cx
-273F:8EF5 5B pop bx
-273F:8EF6 73 09 jnc loc_1771 ; Jump if carry=0
-273F:8EF8 loc_1770: ; xref 273F:8F03, 8F07, 8F31, 8F3D
-273F:8EF8 BB 00A2 mov bx,0A2h
-273F:8EFB E8 F9BE call display_dialog
-273F:8EFE 33 C0 xor ax,ax ; Zero register
-273F:8F00 C3 retn
-273F:8F01 loc_1771: ; xref 273F:8EF6
-273F:8F01 3B D1 cmp dx,cx
-273F:8F03 75 F3 jne loc_1770 ; Jump if not equal
-273F:8F05 3B C3 cmp ax,bx
-273F:8F07 75 EF jne loc_1770 ; Jump if not equal
-273F:8F09 B4 40 mov ah,40h ; '@'
-273F:8F0B 8B 1E 554D mov bx, data_832
-273F:8F0F B9 F010 mov cx, WRITE_BUFFER_SIZE
-273F:8F12 úBA 5D90 mov dx, offset write_buffer ; (273F:5D90=47h)
-273F:8F15 2B CA sub cx,dx
-273F:8F17 CD 21 int 21h ; DOS Services ah=function 40h
- ; write file bx=file handle
- ; cx=bytes from ds:dx buffer
-273F:8F19 73 09 jnc loc_1773 ; Jump if carry=0
-273F:8F1B loc_1772: ; xref 273F:8F26
-273F:8F1B BB 00A2 mov bx,0A2h
-273F:8F1E E8 F99B call display_dialog
-273F:8F21 33 C0 xor ax,ax ; Zero register
-273F:8F23 C3 retn
-273F:8F24 loc_1773: ; xref 273F:8F19
-273F:8F24 3B C1 cmp ax,cx
-273F:8F26 75 F3 jne loc_1772 ; Jump if not equal
-273F:8F28 B8 4200 mov ax,4200h
-273F:8F2B 33 C9 xor cx,cx ; Zero register
-273F:8F2D 33 D2 xor dx,dx ; Zero register
-273F:8F2F CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:8F31 72 C5 jc loc_1770 ; Jump if carry Set
-273F:8F33 B4 40 mov ah,40h
-273F:8F35 B9 0200 mov cx,200h
-273F:8F38 úBA 0119 mov dx, offset file_buffer ; (273F:0119=0FFh)
-273F:8F3B CD 21 int 21h ; DOS Services ah=function 40h
- ; write file bx=file handle
- ; cx=bytes from ds:dx buffer
-273F:8F3D 72 B9 jc loc_1770 ; Jump if carry Set
-273F:8F3F loc_1774: ; xref 273F:8F57
-273F:8F3F 8B 1E 554D mov bx, data_832
-273F:8F43 B4 3E mov ah,3Eh
-273F:8F45 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:8F47 0C 01 or al,1
-273F:8F49 C3 retn
-
- menuitem_save endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9381
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:8F4A menuitem_restore proc near
-273F:8F4A B0 AC mov al,0ACh
-273F:8F4C E8 00BA call saverestore_proc
- assume ds:data_seg
-273F:8F4F 83 06 0308 01 add data_540,1 ; (31E4:0308=0)
-273F:8F54 2D 0001 sub ax,1
-273F:8F57 72 E6 jc loc_1774 ; Jump if carry Set
-273F:8F59 50 push ax
-273F:8F5A E8 9002 call show_disk_cursor
-273F:8F5D E8 0458 call sub_230 ; (93B8)
-273F:8F60 E8 1290 call sub_257 ; (A1F3)
-273F:8F63 58 pop ax
-273F:8F64 BB F010 mov bx, WRITE_BUFFER_SIZE
-273F:8F67 81 EB 5D90 sub bx, offset write_buffer
-273F:8F6B F7 E3 mul bx ; dx:ax = reg * ax
-273F:8F6D 05 0200 add ax,200h
-273F:8F70 83 D2 00 adc dx,0
-273F:8F73 50 push ax
-273F:8F74 52 push dx
-273F:8F75 8B CA mov cx,dx
-273F:8F77 8B D0 mov dx,ax
-273F:8F79 B8 4200 mov ax,4200h
-273F:8F7C 8B 1E 554D mov bx, data_832
-273F:8F80 CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:8F82 59 pop cx
-273F:8F83 5B pop bx
-273F:8F84 B4 3F mov ah,3Fh ; '?'
-273F:8F86 8B 1E 554D mov bx, data_832
-273F:8F8A B9 F010 mov cx, WRITE_BUFFER_SIZE
-273F:8F8D úBA 5D90 mov dx, offset write_buffer ; (31E4:5D90=0)
-273F:8F90 2B CA sub cx,dx
-273F:8F92 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:8F94 B8 4200 mov ax,4200h
-273F:8F97 33 C9 xor cx,cx ; Zero register
-273F:8F99 33 D2 xor dx,dx ; Zero register
-273F:8F9B CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:8F9D B4 40 mov ah,40h ; '@'
-273F:8F9F B9 0200 mov cx,200h
-273F:8FA2 úBA 0119 mov dx,offset file_buffer ; (31E4:0119=0)
-273F:8FA5 CD 21 int 21h ; DOS Services ah=function 40h
- ; write file bx=file handle
- ; cx=bytes from ds:dx buffer
-273F:8FA7 B4 3E mov ah,3Eh
-273F:8FA9 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:8FAB FF 16 0766 call word ptr [fade_out_proc]
-273F:8FAF E8 EC0F call load_string_resources
-273F:8FB2 E8 E050 call menubar_clear_image
-273F:8FB5 E8 7996 call clear_layer_rects
-273F:8FB8 E8 79B4 call room_load_layers
-273F:8FBB FF 16 074E call word ptr ds:[74Eh] ; (273F:074E=8010h)
-273F:8FBF E8 7A25 call sub_16 ; (09E7)
-273F:8FC2 E8 7B39 call sub_19 ; (0AFE)
-273F:8FC5 E8 7999 call clear_hotspot_rects
-273F:8FC8 E8 84D7 call sub_45 ; (14A2)
-273F:8FCB úBE B883 mov si, offset animation_block_list
-273F:8FCE 8B FE mov di,si
-273F:8FD0 E8 E6FB call animations_preload_2
-273F:8FD3 E8 EA89 call sub_195 ; (7A5F)
- assume ds:seg_code
-273F:8FD6 C6 06 9837 00 mov talk_dialog_active, 0
-273F:8FDB C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
-273F:8FE1 E8 123D call sub_259 ; (A221)
-273F:8FE4 E8 BF8D call seq_pathfind_reset
-273F:8FE7 80 36 CE20 80 xor game_flags, 80h
-273F:8FEC E8 E106 call sub_177 ; (70F5)
-273F:8FEF FF 16 0752 call [show_compressed_screen_proc]
-273F:8FF3 E8 8518 call room_add_animations
-273F:8FF6 FF 16 0744 call word ptr [show_screen_proc]
-273F:8FFA E8 AAB1 call replace_vga_palette ; (3AAE)
-273F:8FFD FF 16 0760 call word ptr ds:[760h] ; (273F:0760=0C76Eh)
-273F:9001 C6 06 1456 FF mov data_213,0FFh ; (273F:1456=42h)
-273F:9006 33 C0 xor ax,ax ; Zero register
-273F:9008 C3 retn
- menuitem_restore endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8F4C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9009 saverestore_proc proc near
-273F:9009 A2 5553 mov data_344,al ; (273F:5553=0DFh)
-273F:900C 80 3E 0786 02 cmp drive_number, 2 ; Running on hard drive?
-273F:9011 73 1C jae loc_1776 ; If yes, skip prompt msg
-273F:9013 F6 06 00B5 80 test byte ptr ds:[0B5h],80h
-273F:9018 75 0D jnz loc_1775
-273F:901A 8B 1E 00B4 mov bx,word ptr ds:[file_handle]
-273F:901E B4 3E mov ah,3Eh
-273F:9020 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:9022 C6 06 00B5 80 mov byte ptr ds:[0B5h],80h
-273F:9027 loc_1775:
-273F:9027 B8 000B mov ax,0Bh ; Prompt to insert data disk
-273F:902A B6 00 mov dh,0
-273F:902C E8 AF75 call display_message
-273F:902F loc_1776:
-273F:902F B8 3D02 mov ax,3D02h
-273F:9032 BA 5540 mov dx, offset savegame_filename
-273F:9035 CD 21 int 21h ; DOS Services ah=function 3Dh
- ; open file, al=mode,name@ds:dx
-273F:9037 72 18 jc loc_1777 ; Jump if error occurred
-
-273F:9039 A3 554D mov data_832, ax
-273F:903C 8B D8 mov bx,ax
-273F:903E B4 3F mov ah,3Fh
-273F:9040 B9 0200 mov cx,200h
-273F:9043 úBA 0119 mov dx, offset file_buffer ; (273F:0119=0FFh)
-273F:9046 CD 21 int 21h ; DOS Services ah=function 3Fh
- ; read file, bx=file handle
- ; cx=bytes to ds:dx buffer
-273F:9048 3D 0200 cmp ax,200h ; Read 512 bytes?
-273F:904B 74 27 je loc_1779 ; Jump if equal
-273F:904D B4 3E mov ah,3Eh
-273F:904F CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-
- 273F:9051 loc_1777: ; xref 273F:9037
-273F:9051 B4 3C mov ah,3Ch ; '<'
-273F:9053 33 C9 xor cx,cx ; Zero register
-273F:9055 BA 5540 mov dx, offset savegame_filename
-273F:9058 CD 21 int 21h ; DOS Services ah=function 3Ch
- ; create/truncate file @ ds:dx
-273F:905A 73 09 jnc loc_1778 ; Jump if carry=0
-273F:905C BB 00A2 mov bx,0A2h
-273F:905F E8 F85A call display_dialog
-273F:9062 33 C0 xor ax,ax ; Zero register
-273F:9064 C3 retn
-273F:9065 loc_1778: ; xref 273F:905A
-273F:9065 A3 554D mov data_832, ax
-273F:9068 1E push ds
-273F:9069 07 pop es
-273F:906A úBF 0119 mov di, offset file_buffer ; (273F:0119=0FFh)
-273F:906D B9 0100 mov cx,100h
-273F:9070 33 C0 xor ax,ax ; Zero register
-273F:9072 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:9074 loc_1779: ; xref 273F:904B
-273F:9074 80 3E 5553 AC cmp data_344,0ACh ; (273F:5553=0DFh)
-273F:9079 75 0A jne loc_1780 ; Jump if not equal
-273F:907B 83 2E 0308 01 sub word ptr ds:[308h],1 ; (273F:0308=21CDh)
-273F:9080 73 03 jnc loc_1780 ; Jump if carry=0
-273F:9082 33 C0 xor ax,ax ; Zero register
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 344
-
-273F:9084 C3 retn
-273F:9085 loc_1780: ; xref 273F:9079, 9080
-273F:9085 B0 02 mov al,2
-273F:9087 B3 04 mov bl,4
-273F:9089 B1 20 mov cl,20h ; ' '
-273F:908B 8B 16 0308 mov dx,word ptr ds:[308h] ; (273F:0308=21CDh)
-273F:908F 83 C2 02 add dx,2
-273F:9092 83 FA 11 cmp dx,11h
-273F:9095 73 03 jae loc_1781 ; Jump if above or =
-273F:9097 80 C2 01 add dl,1
-273F:909A loc_1781: ; xref 273F:9095
-273F:909A BD 0001 mov bp,1
-273F:909D FF 16 077A call [draw_dialog_proc]
-273F:90A1 A1 4CE4 mov ax, data_segment2
-273F:90A4 8E C0 mov es,ax
-273F:90A6 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:90AB 74 1E je loc_1783 ; Jump if equal
-273F:90AD úBF 3E92 mov di,data_1466e ; (FF12:3E92=80h)
-273F:90B0 úBE 558D mov si,558Dh ; (273F:558D=33h)
-273F:90B3 BA 0005 mov dx,5
-273F:90B6 loc_1782: ; xref 273F:90C7
-273F:90B6 57 push di
-273F:90B7 AC lodsb ; String [si] to al
-273F:90B8 8A E0 mov ah,al
-273F:90BA B9 0085 mov cx,85h
-273F:90BD F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:90BF 5F pop di
-273F:90C0 81 C7 0140 add di,140h
-273F:90C4 83 EA 01 sub dx,1
-273F:90C7 75 ED jnz loc_1782 ; Jump if not zero
-273F:90C9 EB 03 jmp short loc_1784 ; (90CE)
-273F:90CB loc_1783: ; xref 273F:90AB
-273F:90CB E8 9F57 call sub_69 ; (3025)
-273F:90CE loc_1784: ; xref 273F:90C9
-273F:90CE BE 5576 mov si,5576h
-273F:90D1 B9 000C mov cx,0Ch
-273F:90D4 80 3E 5553 56 cmp data_344,56h ; (273F:5553=0DFh) 'V'
-273F:90D9 75 06 jne loc_1785 ; Jump if not equal
-273F:90DB úBE 5583 mov si,5583h ; (273F:5583=1Bh)
-273F:90DE B9 0009 mov cx,9
-273F:90E1 loc_1785: ; xref 273F:90D9
-273F:90E1 B8 0020 mov ax,20h
-273F:90E4 2B C1 sub ax,cx
-273F:90E6 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:90E8 05 0003 add ax,3
-273F:90EB 8B 3E 076E mov di, data_571
-273F:90EF 8B 15 mov dx,[di]
-273F:90F1 BB 0005 mov bx,5
-273F:90F4 E8 01EC call sub_227 ; (92E3)
-273F:90F7 8B 0E 0308 mov cx,word ptr ds:[308h] ; (273F:0308=21CDh)
-273F:90FB 83 F9 0F cmp cx,0Fh
-273F:90FE 73 03 jae loc_1786 ; Jump if above or =
-273F:9100 83 C1 01 add cx,1
-273F:9103 loc_1786: ; xref 273F:90FE
-273F:9103 úBE 0119 mov si, offset file_buffer ; (273F:0119=0FFh)
-273F:9106 B8 0003 mov ax,3
-273F:9109 BB 0007 mov bx,7
-
-273F:910C locloop_1787: ; xref 273F:9126
-273F:910C 50 push ax
-273F:910D 53 push bx
-273F:910E 51 push cx
-273F:910F 56 push si
-273F:9110 B9 0020 mov cx,20h
-273F:9113 8B 3E 076E mov di,word ptr ds:[76Eh] ; (273F:076E=0D806h)
-273F:9117 8B 15 mov dx,[di]
-273F:9119 E8 01C7 call sub_227 ; (92E3)
-273F:911C 5E pop si
-273F:911D 59 pop cx
-273F:911E 5B pop bx
-273F:911F 58 pop ax
-273F:9120 83 C3 01 add bx,1
-273F:9123 83 C6 21 add si,21h
-273F:9126 E2 E4 loop locloop_1787 ; Loop if cx > 0
-
-273F:9128 FF 16 0744 call word ptr [show_screen_proc]
-273F:912C E8 8E5C call mouse_wait ; (1F8B)
-273F:912F loc_1788: ; xref 273F:9188, 91E5, 92B3
-273F:912F úE8 0296 call room_check_keypresses
-273F:9132 F6 06 11DA 01 test mouse_buttons2, 1
-273F:9137 74 08 jz loc_1789 ; Jump if zero
-273F:9139 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:913E E9 00A7 jmp loc_1797 ; (91E8)
-273F:9141 loc_1789: ; xref 273F:9137
-273F:9141 F6 06 11DA 02 test mouse_buttons2, 2
-273F:9146 74 06 jz loc_1790 ; Jump if zero
-273F:9148 33 C0 xor ax,ax ; Zero register
-273F:914A A2 11DA mov mouse_buttons2, al
-273F:914D C3 retn
-273F:914E loc_1790: ; xref 273F:9146
-273F:914E A1 11D6 mov ax, mouse_x2
-273F:9151 8B 1E 11D8 mov bx, mouse_y2
-273F:9155 B1 03 mov cl,3
-273F:9157 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:9159 D3 EB shr bx,cl ; Shift w/zeros fill
-273F:915B 3D 0002 cmp ax,2
-273F:915E 72 22 jb loc_1792 ; Jump if below
-273F:9160 3D 0022 cmp ax,22h
-273F:9163 73 1D jae loc_1792 ; Jump if above or =
-273F:9165 83 FB 07 cmp bx,7
-273F:9168 72 18 jb loc_1792 ; Jump if below
-273F:916A 8B 0E 0308 mov cx,word ptr ds:[308h] ; (273F:0308=21CDh)
-273F:916E 83 F9 0F cmp cx,0Fh
-273F:9171 72 03 jb loc_1791 ; Jump if below
-273F:9173 83 E9 01 sub cx,1
-273F:9176 loc_1791: ; xref 273F:9171
-273F:9176 83 C1 08 add cx,8
-273F:9179 3B D9 cmp bx,cx
-273F:917B 73 05 jae loc_1792 ; Jump if above or =
-273F:917D 83 EB 06 sub bx,6
-273F:9180 EB 02 jmp short loc_1793 ; (9184)
-273F:9182 loc_1792: ; xref 273F:915E, 9163, 9168, 917B
-273F:9182 33 DB xor bx,bx ; Zero register
-273F:9184 loc_1793: ; xref 273F:9180
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 346
-
-273F:9184 3B 1E 5551 cmp bx,data_343 ; (273F:5551=0E807h)
-273F:9188 74 A5 je loc_1788 ; Jump if equal
-273F:918A 87 1E 5551 xchg data_343,bx ; (273F:5551=0E807h)
-273F:918E 0B DB or bx,bx ; Zero ?
-273F:9190 74 21 jz loc_1794 ; Jump if zero
-273F:9192 8B C3 mov ax,bx
-273F:9194 2D 0001 sub ax,1
-273F:9197 B9 0021 mov cx,21h
-273F:919A F7 E1 mul cx ; dx:ax = reg * ax
-273F:919C 05 0119 add ax, offset file_buffer
-273F:919F 8B F0 mov si,ax
-273F:91A1 8B 3E 076E mov di,word ptr ds:[76Eh] ; (273F:076E=0D806h)
-273F:91A5 8B 15 mov dx,[di]
-273F:91A7 B8 0003 mov ax,3
-273F:91AA 83 C3 06 add bx,6
-273F:91AD B9 0020 mov cx,20h
-273F:91B0 E8 0130 call sub_227 ; (92E3)
-273F:91B3 loc_1794: ; xref 273F:9190
-273F:91B3 F7 06 5551 FFFF test data_343,0FFFFh ; (273F:5551=0E807h)
-273F:91B9 74 26 jz loc_1795 ; Jump if zero
-273F:91BB 8B 1E 5551 mov bx,data_343 ; (273F:5551=0E807h)
-273F:91BF 8B C3 mov ax,bx
-273F:91C1 2D 0001 sub ax,1
-273F:91C4 B9 0021 mov cx,21h
-273F:91C7 F7 E1 mul cx ; dx:ax = reg * ax
-273F:91C9 05 0119 add ax, offset file_buffer
-273F:91CC 8B F0 mov si,ax
-273F:91CE 8B 3E 076E mov di,word ptr ds:[76Eh] ; (273F:076E=0D806h)
-273F:91D2 8B 55 02 mov dx,[di+2]
-273F:91D5 B8 0003 mov ax,3
-273F:91D8 83 C3 06 add bx,6
-273F:91DB B9 0020 mov cx,20h
-273F:91DE E8 0102 call sub_227 ; (92E3)
-273F:91E1 loc_1795: ; xref 273F:91B9
-273F:91E1 FF 16 0744 call word ptr [show_screen_proc]
-273F:91E5 loc_1796: ; xref 273F:91EE
-273F:91E5 E9 FF47 jmp loc_1788 ; (912F)
-273F:91E8 loc_1797: ; xref 273F:913E
-273F:91E8 F7 06 5551 FFFF test data_343,0FFFFh ; (273F:5551=0E807h)
-273F:91EE 74 F5 jz loc_1796 ; Jump if zero
-273F:91F0 80 0E 11D0 01 or menubar_state, 1 ; (273F:11D0=56h)
-273F:91F5 FF 16 075E call [show_cursor_proc]
-273F:91F9 B8 0021 mov ax,21h
-273F:91FC F7 26 5551 mul data_343 ; (273F:5551=0E807h) dx:ax = data * ax
-273F:9200 2D 0021 sub ax,21h
-273F:9203 05 0119 add ax, offset file_buffer
-273F:9206 8B F0 mov si,ax
-273F:9208 8B F8 mov di,ax
-273F:920A loc_1798: ; xref 273F:9212
-273F:920A úF6 05 FF test byte ptr [di],0FFh
-273F:920D 74 05 jz loc_1799 ; Jump if zero
-273F:920F 83 C7 01 add di,1
-273F:9212 EB F6 jmp short loc_1798 ; (920A)
-273F:9214 loc_1799: ; xref 273F:920D, 928A, 9297
-273F:9214 úC6 05 5F mov byte ptr [di],5Fh ; '_'
-273F:9217 C6 45 01 00 mov byte ptr [di+1],0
-273F:921B 57 push di
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 347
-
-273F:921C 56 push si
-273F:921D 8B 3E 076E mov di,word ptr ds:[76Eh] ; (273F:076E=0D806h)
-273F:9221 8B 15 mov dx,[di]
-273F:9223 B8 0003 mov ax,3
-273F:9226 8B 1E 5551 mov bx,data_343 ; (273F:5551=0E807h)
-273F:922A 83 C3 06 add bx,6
-273F:922D B9 0020 mov cx,20h
-273F:9230 E8 00B0 call sub_227 ; (92E3)
-273F:9233 FF 16 0744 call word ptr [show_screen_proc]
-273F:9237 5E pop si
-273F:9238 5F pop di
-273F:9239 loc_1800: ; xref 273F:924A, 9283, 9292, 92DF
-273F:9239 úF6 06 11DA 01 test mouse_buttons2, 1
-273F:923E 75 7A jnz loc_1808 ; Jump if not zero
-273F:9240 F6 06 11DA 02 test mouse_buttons2, 2
-273F:9245 75 57 jnz loc_1806 ; Jump if not zero
-273F:9247 E8 02D6 call check_keypress ; (9520)
-273F:924A 74 ED jz loc_1800 ; Jump if zero
-273F:924C 80 3E 5553 AC cmp data_344,0ACh ; (273F:5553=0DFh)
-273F:9251 74 47 je loc_1805 ; Jump if equal
-273F:9253 3C 30 cmp al,30h ; '0'
-273F:9255 72 14 jb loc_1801 ; Jump if below
-273F:9257 3C 3A cmp al,3Ah ; ':'
-273F:9259 72 21 jb loc_1803 ; Jump if below
-273F:925B 3C 41 cmp al,41h ; 'A'
-273F:925D 72 0C jb loc_1801 ; Jump if below
-273F:925F 3C 5B cmp al,5Bh ; '['
-273F:9261 72 19 jb loc_1803 ; Jump if below
-273F:9263 3C 61 cmp al,61h ; 'a'
-273F:9265 72 04 jb loc_1801 ; Jump if below
-273F:9267 3C 7B cmp al,7Bh ; '{'
-273F:9269 72 11 jb loc_1803 ; Jump if below
-273F:926B loc_1801: ; xref 273F:9255, 925D, 9265
-273F:926B úBB 5554 mov bx,offset data_345 ; (273F:5554=0E8h)
-273F:926E loc_1802: ; xref 273F:927A
-273F:926E úF6 07 FF test byte ptr [bx],0FFh
-273F:9271 74 19 jz loc_1804 ; Jump if zero
-273F:9273 3A 07 cmp al,[bx]
-273F:9275 74 05 je loc_1803 ; Jump if equal
-273F:9277 83 C3 01 add bx,1
-273F:927A EB F2 jmp short loc_1802 ; (926E)
-273F:927C loc_1803: ; xref 273F:9259, 9261, 9269, 9275
-273F:927C 8B DF mov bx,di
-273F:927E 2B DE sub bx,si
-273F:9280 83 FB 1F cmp bx,1Fh
-273F:9283 73 B4 jae loc_1800 ; Jump if above or =
-273F:9285 88 05 mov [di],al
-273F:9287 83 C7 01 add di,1
-273F:928A EB 88 jmp short loc_1799 ; (9214)
-273F:928C loc_1804: ; xref 273F:9271
-273F:928C 3C 08 cmp al,8
-273F:928E 75 0A jne loc_1805 ; Jump if not equal
-273F:9290 3B F7 cmp si,di
-273F:9292 74 A5 je loc_1800 ; Jump if equal
-273F:9294 83 EF 01 sub di,1
-273F:9297 E9 FF7A jmp loc_1799 ; (9214)
-273F:929A loc_1805: ; xref 273F:9251, 928E
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 348
-
-273F:929A 3C 1B cmp al,1Bh
-273F:929C 75 18 jne loc_1807 ; Jump if not equal
-273F:929E loc_1806: ; xref 273F:9245
-273F:929E C6 05 00 mov byte ptr [di],0
-273F:92A1 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:92A6 FF 16 075E call [show_cursor_proc]
-273F:92AA FF 16 0744 call word ptr [show_screen_proc]
-273F:92AE C6 06 11DA 00 mov mouse_buttons2, 0
-273F:92B3 E9 FE79 jmp loc_1788 ; (912F)
-273F:92B6 loc_1807: ; xref 273F:929C
-273F:92B6 3C 0D cmp al,0Dh
-273F:92B8 75 25 jne loc_1809 ; Jump if not equal
-273F:92BA loc_1808: ; xref 273F:923E
-273F:92BA C6 06 11DA 00 mov mouse_buttons2, 0
-273F:92BF 3B FE cmp di,si
-273F:92C1 74 1C je loc_1809 ; Jump if equal
-273F:92C3 C6 05 00 mov byte ptr [di],0
-273F:92C6 80 26 11D0 FE and menubar_state, 0FEh ; (273F:11D0=56h)
-273F:92CB FF 16 075E call [show_cursor_proc]
-273F:92CF FF 16 0744 call word ptr [show_screen_proc]
-273F:92D3 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:92D8 33 C0 xor ax,ax ; Zero register
-273F:92DA 87 06 5551 xchg data_343,ax ; (273F:5551=0E807h)
-273F:92DE C3 retn
-273F:92DF loc_1809: ; xref 273F:92B8, 92C1
-273F:92DF E9 FF57 jmp loc_1800 ; (9239)
-273F:92E2 C3 db 0C3h
-
- saverestore_proc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:90F4, 9119, 91B0, 91DE, 9230
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:92E3 sub_227 proc near
-273F:92E3 50 push ax
-273F:92E4 53 push bx
-273F:92E5 52 push dx
-273F:92E6 F7 26 074A mul char_width
-273F:92EA 8B F8 mov di,ax
-273F:92EC A1 074C mov ax, menubar_block_size
-273F:92EF F7 E3 mul bx ; dx:ax = reg * ax
-273F:92F1 03 F8 add di,ax
-273F:92F3 5A pop dx
-273F:92F4 A1 4CE4 mov ax, data_segment2
-273F:92F7 8E C0 mov es,ax
-273F:92F9 8B 2E 4CF2 mov bp, font_segment
-273F:92FD loc_1810: ; xref 273F:930D
-273F:92FD úAC lodsb ; String [si] to al
-273F:92FE 0A C0 or al,al ; Zero ?
-273F:9300 74 0D jz loc_1811 ; Jump if zero
-273F:9302 FF 16 076A call [display_character_proc]
-273F:9306 03 3E 074A add di, char_width
-273F:930A 80 C5 01 add ch,1
-273F:930D EB EE jmp short loc_1810 ; (92FD)
-273F:930F loc_1811: ; xref 273F:9300, 9320
-273F:930F ú3A E9 cmp ch,cl
-273F:9311 73 0F jae loc_1812 ; Jump if above or =
-273F:9313 B0 20 mov al,20h ; ' '
-273F:9315 FF 16 076A call [display_character_proc]
-273F:9319 03 3E 074A add di, char_width
-273F:931D 80 C5 01 add ch,1
-273F:9320 EB ED jmp short loc_1811 ; (930F)
-273F:9322 loc_1812: ; xref 273F:9311
-273F:9322 5B pop bx
-273F:9323 58 pop ax
-273F:9324 83 EB 01 sub bx,1
-273F:9327 8A CD mov cl,ch
-273F:9329 32 ED xor ch,ch ; Zero register
-273F:932B 8B E9 mov bp,cx
-273F:932D B9 0081 mov cx,81h
-273F:9330 BA 0001 mov dx,1
-273F:9333 E9 784D jmp loc_92 ; (0B83)
- sub_227 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:015D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9336 sub_228 proc near
-273F:9336 E8 0EBA call sub_257 ; (A1F3)
-273F:9339 B8 01BC mov ax,1BCh
-273F:933C B3 00 mov bl,0
- assume ds:data_seg
-273F:933E FF 1E 5662 call dword ptr [play_music_proc]
-273F:9342 E8 8C30 call show_arrow_cursor
-273F:9345 80 3E 0786 02 cmp default_drive, 2 ; Is it drive A or B (0 or 1)?
-273F:934A 72 20 jb loc_1813 ; Yes, so running on floppy
-273F:934C B8 3D00 mov ax,3D00h
-273F:934F úBA 5540 mov dx, offset savegame_filename
-273F:9352 CD 21 int 21h ; DOS Services ah=function 3Dh
- ; open file, al=mode,name@ds:dx
-273F:9354 72 35 jc loc_1815 ; Jump if carry Set
-273F:9356 8B D8 mov bx,ax
-273F:9358 B8 4202 mov ax,4202h
-273F:935B 33 C9 xor cx,cx ; Zero register
-273F:935D 33 D2 xor dx,dx ; Zero register
-273F:935F CD 21 int 21h ; DOS Services ah=function 42h
- ; move file ptr, bx=file handle
- ; al=method, cx,dx=offset
-273F:9361 72 24 jc loc_1814 ; Jump if carry Set
-273F:9363 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:9366 72 1F jb loc_1814 ; Jump if below
-273F:9368 B4 3E mov ah,3Eh
-273F:936A CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:936C loc_1813: ; xref 273F:934A
-273F:936C FF 16 0766 call word ptr [fade_out_proc]
-273F:9370 C7 06 9832 FFFF mov room_number, 0FFFFh
-273F:9376 A1 4CE0 mov ax, current_room_segment
-273F:9379 A3 4CE2 mov data_segment, ax
-273F:937C E8 A9A0 call restart_restore_dialog ; Show restore/restart dialog
-273F:937F 75 0A jnz loc_1815 ; Jump if not zero
-273F:9381 E8 FBC6 call menuitem_restore
-273F:9384 75 05 jnz loc_1815 ; Jump if not zero
-273F:9386 C3 retn
-273F:9387 loc_1814: ; xref 273F:9361, 9366
-273F:9387 B4 3E mov ah,3Eh
-273F:9389 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:0169
-
-273F:938B sub_229:
-273F:938B loc_1815: ; xref 273F:9354, 937F, 9384
-273F:938B E8 8BD1 call show_disk_cursor
-273F:938E FF 16 0766 call word ptr [fade_out_proc]
-273F:9392 E8 0E5E call sub_257 ; (A1F3)
-273F:9395 B8 FFFF mov ax,0FFFFh
-273F:9398 C7 06 9832 FFFF mov room_number, 0FFFFh
-273F:939E E8 0017 call sub_230 ; (93B8)
-273F:93A1 B8 400E mov ax,400Eh
-273F:93A4 8C D9 mov cx,ds
-273F:93A6 BA 5D90 mov dx,5D90h
-273F:93A9 E8 6F68 call read_entry ; (0314)
-273F:93AC E8 E812 call load_string_resources
-273F:93AF C6 06 1456 FF mov current_room_num, 0FFh
-273F:93B4 0D 0001 or ax,1
-273F:93B7 C3 retn
- sub_228 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8F5D, 939E
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:93B8 sub_230 proc near
- assume ds:seg_code
-273F:93B8 A1 9832 mov ax, room_number
-273F:93BB A3 554F mov data_342,ax ; (273F:554F=8BDDh)
-273F:93BE E8 80E1 call sub_45 ; (14A2)
-273F:93C1 A1 4CF8 mov ax, data_811
-273F:93C4 A3 4D00 mov buffer_segment, ax
-273F:93C7 C3 retn
- sub_230 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0104, 14E6, 3D65, 912F
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:93C8 room_check_keypresses proc near
-273F:93C8 loc_1816: ; xref 273F:94D8
-273F:93C8 úE8 0155 call check_keypress ; (9520)
-273F:93CB 74 3B jz loc_ret_1820 ; Jump if zero
-273F:93CD E8 01B8 call sub_233 ; (9588)
-273F:93D0 74 36 jz loc_ret_1820 ; Jump if zero
-273F:93D2 3C 41 cmp al,41h ; 'A'
-273F:93D4 72 06 jb loc_1817 ; Jump if below
-273F:93D6 3C 5B cmp al,5Bh ; 'Z'+1
-273F:93D8 73 02 jae loc_1817 ; Jump if above or =
-273F:93DA 04 20 add al,20h ; Convert uppercase to lowercase
-273F:93DC loc_1817:
-273F:93DC 3C 70 cmp al,70h ; 'p' - Pause
-273F:93DE 75 29 jne loc_1821 ; Jump if not equal
-273F:93E0 A0 5660 mov al, music_status
-273F:93E3 50 push ax
-273F:93E4 80 26 5660 FB and music_status, 0FBh
-273F:93E9 E8 8B9F call mouse_wait ; (1F8B)
-273F:93EC loc_1818: ; xref 273F:93FF
-273F:93EC E8 8823 call room_check_cursors
-273F:93EF E8 80C6 call set_vga_palette ; (14B8)
-273F:93F2 F6 06 11D5 FF test mouse_buttons, 0FFh ; (31E4:11D5=0)
-273F:93F7 75 08 jnz loc_1819 ; Jump if not zero
-273F:93F9 B4 06 mov ah,6
-273F:93FB B2 FF mov dl,0FFh
-273F:93FD CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:93FF 74 EB jz loc_1818 ; Jump if zero
-273F:9401 loc_1819: ; xref 273F:93F7
-273F:9401 E8 8B87 call mouse_wait ; (1F8B)
-273F:9404 58 pop ax
-273F:9405 A2 5660 mov music_status, al
-
-273F:9408 loc_ret_1820: ; xref 273F:93CB, 93D0
-273F:9408 C3 retn
-
-273F:9409 loc_1821: ; xref 273F:93DE
-273F:9409 3C 71 cmp al,71h ; 'q' - Quit
-273F:940B 75 0A jne loc_1822 ; Jump if not equal
-273F:940D EB 08 jmp short loc_1822 ; (9417)
- ;* No entry point to code
-273F:940F B8 0000 mov ax,0
-273F:9412 B6 01 mov dh,1
-273F:9414 E8 AB8D call display_message ; (3FA4)
-273F:9417 loc_1822:
-273F:9417 3C C8 cmp al, 0C8h ; Up arrow?
-273F:9419 75 07 jne loc_1823 ; Jump if not equal
-273F:941B 33 C9 xor cx, cx
-273F:941D BA FFFE mov dx, 0FFFEh
-273F:9420 EB 7C jmp short loc_1834
-273F:9422 loc_1823:
-273F:9422 3C D0 cmp al,0D0h ; Down arrow?
-273F:9424 75 07 jne loc_1824 ; Jump if not equal
-273F:9426 33 C9 xor cx,cx
-273F:9428 BA 0002 mov dx,2
-273F:942B EB 71 jmp short loc_1834
-273F:942D loc_1824:
-273F:942D 3C CB cmp al,0CBh ; Left arrow?
-273F:942F 75 07 jne loc_1825 ; Jump if not equal
-273F:9431 B9 FFFC mov cx,0FFFCh
-273F:9434 33 D2 xor dx,dx
-273F:9436 EB 66 jmp short loc_1834
-273F:9438 loc_1825:
-273F:9438 3C CD cmp al,0CDh ; Right arrow?
-273F:943A 75 07 jne loc_1826 ; Jump if not equal
-273F:943C B9 0004 mov cx,4
-273F:943F 33 D2 xor dx,dx
-273F:9441 EB 5B jmp short loc_1834
-273F:9443 loc_1826:
-273F:9443 3C C9 cmp al,0C9h
-273F:9445 75 09 jne loc_1827 ; Jump if not equal
-273F:9447 8B 0E 11D1 mov cx, mouse_x
-273F:944B BA 000A mov dx,0Ah
-273F:944E EB 74 jmp short loc_1837 ; (94C4)
-273F:9450 loc_1827: ; xref 273F:9445
-273F:9450 3C D1 cmp al,0D1h
-273F:9452 75 09 jne loc_1828 ; Jump if not equal
-273F:9454 8B 0E 11D1 mov cx, mouse_x
-273F:9458 BA 00BE mov dx,0BEh
-273F:945B EB 67 jmp short loc_1837 ; (94C4)
-273F:945D loc_1828: ; xref 273F:9452
-273F:945D 3C C7 cmp al,0C7h
-273F:945F 75 09 jne loc_1829 ; Jump if not equal
-273F:9461 B9 0008 mov cx,8
-273F:9464 8B 16 11D3 mov dx, mouse_y
-273F:9468 EB 5A jmp short loc_1837 ; (94C4)
-273F:946A loc_1829: ; xref 273F:945F
-273F:946A 3C CF cmp al,0CFh
-273F:946C 75 09 jne loc_1830 ; Jump if not equal
-273F:946E B9 0138 mov cx,138h
-273F:9471 8B 16 11D3 mov dx, mouse_y
-273F:9475 EB 4D jmp short loc_1837 ; (94C4)
-273F:9477 loc_1830: ; xref 273F:946C
-273F:9477 3C 20 cmp al,20h ; ' '
-273F:9479 75 0D jne loc_1832 ; Jump if not equal
-273F:947B loc_1831: ; xref 273F:948A
-273F:947B 8B 0E 11D1 mov cx, mouse_x
-273F:947F 8B 16 11D3 mov dx, mouse_y
-273F:9483 BB 0001 mov bx,1
-273F:9486 EB 3E jmp short loc_1838 ; (94C6)
-273F:9488 loc_1832: ; xref 273F:9479
-273F:9488 3C 1B cmp al,1Bh
-273F:948A 74 EF je loc_1831 ; Jump if equal
-273F:948C 3C 0D cmp al,0Dh
-273F:948E 75 0D jne loc_ret_1833 ; Jump if not equal
-273F:9490 8B 0E 11D1 mov cx, mouse_x
-273F:9494 8B 16 11D3 mov dx, mouse_y
-273F:9498 BB 0002 mov bx,2
-273F:949B EB 29 jmp short loc_1838 ; (94C6)
-
-273F:949D loc_ret_1833: ; xref 273F:948E
-273F:949D C3 retn
-273F:949E loc_1834: ; xref 273F:9420, 942B, 9436, 9441
-273F:949E F7 06 55A1 0003 test data_836,3 ; (31E4:55A1=0)
-273F:94A4 74 0E jz loc_1835 ; Jump if zero
-273F:94A6 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:94A8 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:94AA D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:94AC D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:94AE D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:94B0 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:94B2 D1 E2 shl dx,1 ; Shift w/zeros fill
-273F:94B4 loc_1835: ; xref 273F:94A4
-273F:94B4 03 0E 11D1 add cx, mouse_x
-273F:94B8 79 02 jns loc_1836 ; Jump if not sign
-273F:94BA 33 C9 xor cx,cx ; Zero register
-273F:94BC loc_1836: ; xref 273F:94B8
-273F:94BC 03 16 11D3 add dx, mouse_y
-273F:94C0 79 02 jns loc_1837 ; Jump if not sign
-273F:94C2 33 D2 xor dx,dx ; Zero register
-273F:94C4 loc_1837: ; xref 273F:944E, 945B, 9468, 9475
- ; 94C0
-273F:94C4 33 DB xor bx,bx ; Zero register
-273F:94C6 loc_1838: ; xref 273F:9486, 949B
-273F:94C6 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:94C8 0E E8 8A1C callf mouse_handler ; (1EE8)
-273F:94CC 83 3E 11D3 08 cmp mouse_y, 8
-273F:94D1 72 05 jb loc_1840 ; Jump if below
-273F:94D3 C6 06 11D5 00 mov mouse_buttons, 0
-273F:94D8 loc_1840: ; xref 273F:94D1
-273F:94D8 E9 FEED jmp loc_1816 ; (93C8)
- room_check_keypresses endp
-
-
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
- ;
- ; External Entry Point
- ;
- ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-273F:94DB keyboard_handler proc far ; xref 273F:0703
-273F:94DB 9C pushf ; Push flags
- assume ds:seg_code
-273F:94DC 2E: FF 1E 04AE call dword ptr cs:[old_kbd_int_proc]
-273F:94E1 50 push ax
-273F:94E2 53 push bx
-273F:94E3 51 push cx
-273F:94E4 52 push dx
-273F:94E5 56 push si
-273F:94E6 57 push di
-273F:94E7 55 push bp
-273F:94E8 1E push ds
-273F:94E9 06 push es
-273F:94EA 9C pushf ; Push flags
-273F:94EB B8 31E4 mov ax,data_seg
-273F:94EE 8E D8 mov ds,ax
-273F:94F0 33 C0 xor ax,ax ; Zero register
-273F:94F2 8E C0 mov es,ax
-273F:94F4 26: A1 0417 mov ax,es:keybd_flags_1_ ; (0000:0417=0)
- assume ds:data_seg
-273F:94F8 A3 55A1 mov data_836,ax ; (31E4:55A1=0)
-273F:94FB C6 06 55A0 01 mov byte ptr data_835,1 ; (31E4:55A0=0)
-273F:9500 C7 06 F010 0000 mov timer_ticks, 0 ; (31E4:F010=0)
-273F:9506 80 3E 1854 04 cmp cp_num_digits, 4
-273F:950B 72 08 jb loc_1841 ; Jump if below
-273F:950D C6 06 1854 01 mov cp_num_digits, 1
-273F:9512 E8 01A8 call sub_236 ; (96BD)
-273F:9515 loc_1841: ; xref 273F:950B
-273F:9515 9D popf ; Pop flags
-273F:9516 07 pop es
-273F:9517 1F pop ds
-273F:9518 5D pop bp
-273F:9519 5F pop di
-273F:951A 5E pop si
-273F:951B 5A pop dx
-273F:951C 59 pop cx
-273F:951D 5B pop bx
-273F:951E 58 pop ax
-273F:951F CF iret ; Interrupt return
- keyboard_handler endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1FA1, 3B84, 3B92, 3BAF, 6A79, 6D66, 9247
- ; 93C8, 9D7B, AA0D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9520 check_keypress proc near
-273F:9520 B4 06 mov ah,6
-273F:9522 B2 FF mov dl,0FFh
-273F:9524 CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:9526 74 0D jz loc_ret_1842 ; Jump if zero
-273F:9528 0A C0 or al,al ; Zero ?
-273F:952A 75 09 jnz loc_ret_1842 ; Jump if not zero
-273F:952C B4 06 mov ah,6
-273F:952E B2 FF mov dl,0FFh
-273F:9530 CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:9532 0C 80 or al,80h
-273F:9534 C3 retn
-
-273F:9535 loc_ret_1842: ; xref 273F:9526, 952A
-273F:9535 C3 retn
- check_keypress endp
-
-273F:9536 48 data_419 db 48h ; xref 273F:95B5
-273F:9537 95 E2 95 4F 95 F4 db 95h,0E2h, 95h, 4Fh, 95h,0F4h
-273F:953D 95 63 95 13 96 71 db 95h, 63h, 95h, 13h, 96h, 71h
-273F:9543 95 2C 96 00 00 db 95h, 2Ch, 96h, 00h, 00h
-273F:9548 3C 43 44 48 4E 3C db '<CDHN<', 0
-273F:954E 00
-273F:954F 47 40 4F 4E 42 4A db 'G@ONBJ=<>FOJOC@RJH=', 0
-273F:9555 3D 3C 3E 46 4F 4A
-273F:955B 4F 43 40 52 4A 48
-273F:9561 3D 00
-273F:9563 46 44 47 47 4F 43 db 'FDGGOC@AP>F@M', 0
-273F:9569 40 41 50 3E 46 40
-273F:956F 4D 00
-273F:9571 40 3C 4E 40 42 4A db '@<N@BJ?G@OOCDNRJMF'
-273F:9577 3F 47 40 4F 4F 43
-273F:957D 44 4E 52 4A 4D 46
-273F:9583 00 db 0
-273F:9584 0000 data_421 dw 0 ; xref 273F:958A, 959F, 95AE, 95D2
-273F:9586 0000 data_422 dw 0 ; xref 273F:95A8, 95DB
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:93CD, 9D80
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9588 sub_233 proc near
-273F:9588 2C 25 sub al,25h ; '%'
-273F:958A 2E: 8B 1E 9584 mov bx,cs:data_421 ; (273F:9584=0)
-273F:958F 0B DB or bx,bx ; Zero ?
-273F:9591 74 1B jz loc_1844 ; Jump if zero
-273F:9593 2E: 3A 07 cmp al,cs:[bx]
-273F:9596 75 16 jne loc_1844 ; Jump if not equal
-273F:9598 2E: F6 47 01 FF test byte ptr cs:[bx+1],0FFh
-273F:959D 74 09 jz loc_1843 ; Jump if zero
-273F:959F 2E: 83 06 9584 01 add cs:data_421,1 ; (273F:9584=0)
-273F:95A5 33 C0 xor ax,ax ; Zero register
-273F:95A7 C3 retn
-273F:95A8 loc_1843: ; xref 273F:959D
-273F:95A8 2E: A1 9586 mov ax,cs:data_422 ; (273F:9586=0)
-273F:95AC FF E0 jmp ax ;*Register jump
-273F:95AE loc_1844: ; xref 273F:9591, 9596
-273F:95AE 2E: C7 06 9584 0000 mov cs:data_421,0 ; (273F:9584=0)
-273F:95B5 úBE 9536 mov si,offset data_419 ; (273F:9536=48h)
-273F:95B8 loc_1845: ; xref 273F:95C7
-273F:95B8 ú2E: 8B 1C mov bx,cs:[si]
-273F:95BB 0B DB or bx,bx ; Zero ?
-273F:95BD 74 0A jz loc_1846 ; Jump if zero
-273F:95BF 2E: 3A 07 cmp al,cs:[bx]
-273F:95C2 74 0B je loc_1847 ; Jump if equal
-273F:95C4 83 C6 04 add si,4
-273F:95C7 EB EF jmp short loc_1845 ; (95B8)
-273F:95C9 loc_1846: ; xref 273F:95BD
-273F:95C9 04 25 add al,25h ; '%'
-273F:95CB 80 CC 01 or ah,1
-273F:95CE C3 retn
-273F:95CF loc_1847: ; xref 273F:95C2
-273F:95CF 83 C3 01 add bx,1
-273F:95D2 2E: 89 1E 9584 mov cs:data_421,bx ; (273F:9584=0)
-273F:95D7 2E: 8B 44 02 mov ax,cs:[si+2]
-273F:95DB 2E: A3 9586 mov cs:data_422,ax ; (273F:9586=0)
-273F:95DF 33 C0 xor ax,ax ; Zero register
-273F:95E1 C3 retn
- sub_233 endp
-
- ;* No entry point to code
-273F:95E2 8B 1E 6CE8 mov bx,word ptr ds:[6CE8h] ; (273F:6CE8=2507h)
-273F:95E6 C7 47 F5 0004 mov word ptr [bx-0Bh],4
-273F:95EB 8B 47 D9 mov ax,[bx-27h]
-273F:95EE 89 47 D7 mov [bx-29h],ax
-273F:95F1 33 C0 xor ax,ax ; Zero register
-273F:95F3 C3 retn
- ;* No entry point to code
-273F:95F4 B8 0083 mov ax,83h
-273F:95F7 E8 A83A call sequence_execute
-273F:95FA E8 003C call set_ratpouch_to_room_29
-273F:95FD E8 0072 call switch_goewin_character
-273F:9600 C7 06 BA17 03E8 mov character_hotspot, PLAYER_HOTSPOT_ID
-273F:9606 BA 0026 mov dx, 26h
-273F:9609 B9 0118 mov cx, 118h
-273F:960C BB 0118 mov bx, 118h
-273F:960F E8 ACD7 call character_change_room
-273F:9612 C3 retn
- ;* No entry point to code
-273F:9613 C7 06 BA99 0001 mov word ptr ds:data_489e,1 ; (273F:BA99=0)
-273F:9619 C7 06 BA17 03E8 mov character_hotspot, PLAYER_HOTSPOT_ID
-273F:961F BA 0006 mov dx, 6
-273F:9622 B9 0104 mov cx, 104h
-273F:9625 BB 00C8 mov bx, 0C8h
-273F:9628 E8 ACBE call character_change_room
-273F:962B C3 retn
- ;* No entry point to code
-273F:962C B8 0083 mov ax,83h
-273F:962F E8 A802 call sequence_execute
-273F:9632 B8 2911 mov ax,2911h
-273F:9635 E8 A7FC call sequence_execute
-273F:9638 C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:95FA
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- set_ratpouch_to_room_29 proc near
-273F:9639 C7 06 70BF 001D mov [ratpouch_hotspot_rec+HS_ROOM_NUM], 29
-273F:963F C7 06 711F 001D mov [ratpouch_hotspot_rec+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_ROOM_NUM], 29
-273F:9645 C7 06 70C6 0106 mov [ratpouch_hotspot_rec+HS_X], 106h
-273F:964B C7 06 70C8 00E1 mov [ratpouch_hotspot_rec+HS_Y], 0E1h
-273F:9651 8B 1E 70C4 mov bx, [ratpouch_hotspot_rec+HS_ANIM_OFFSET]
-273F:9655 0B DB or bx, bx
-273F:9657 75 0A jnz loc_1848
-273F:9659 BB 03E9 mov bx, RATPOUCH_HOTSPOT_ID
-273F:965C E8 7667 call animation_load_entry
-273F:965F 8B 1E 70C4 mov bx, [ratpouch_hotspot_rec+HS_ANIM_OFFSET]
-273F:9663 loc_1848:
-273F:9663 C7 07 0106 mov word ptr [bx+ANIM_X], 106h
-273F:9667 C7 47 02 00E1 mov word ptr [bx+ANIM_Y], 0E1h
-273F:966C C7 47 0E 001D mov word ptr [bx+ANIM_ROOM_NUM], 29
-273F:9671 C3 retn
- set_ratpouch_to_room_29 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:95FD
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- switch_goewin_character proc near
-273F:9672 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:9675 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:9678 0B FF or di, di
-273F:967A 74 03 jz loc_1849 ; Skip if not an active anim
-273F:967C E8 7BF3 call animation_unload ; Unload animation
-273F:967F loc_1849:
-273F:967F C7 44 17 4F82 mov word ptr [si+HS_TICK_PROC], 4F82h
-273F:9684 C7 44 21 5D28 mov word ptr [si+HS_PIXEL_OFFSET], 5D28h
-273F:9689 81 0C 0800 or word ptr [si+HS_ACTIONS], 800h
-273F:968D BB 03EF mov bx, 3EFh
-273F:9690 E8 7633 call animation_load_entry
-273F:9693 úBE 7D21 mov si, offset goewin_hotspot_rec
-273F:9696 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:9699 C7 44 06 0026 mov word ptr [si+HS_ROOM_NUM], 38
-273F:969E C7 45 0E 0026 mov word ptr [di+ANIM_ROOM_NUM], 38
-273F:96A3 C7 44 17 7C24 mov word ptr [si+HS_TICK_PROC], 7C24h
-273F:96A8 C7 45 11 7C24 mov word ptr [di+ANIM_TICK_PROC], 7C24h
-273F:96AD C7 44 66 0026 mov word ptr [si+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_ROOM_NUM], 38
-273F:96B2 C7 44 64 4EBB mov word ptr [si+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_SUPPORT_TABLE], 4EBBh
-273F:96B7 C7 44 61 0000 mov word ptr [si+HS_ACTION_OFFSET],0
-273F:96BC C3 retn
- switch_goewin_character endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9512
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:96BD sub_236 proc near
-273F:96BD 8B EC mov bp,sp
-273F:96BF 8C C8 mov ax,cs
-273F:96C1 loc_1850: ; xref 273F:96DE
-273F:96C1 81 7E 00 3BFF cmp word ptr [bp],3BFFh
-273F:96C6 72 13 jb loc_1851 ; Jump if below
-273F:96C8 81 7E 00 3C13 cmp word ptr [bp],3C13h
-273F:96CD 73 0C jae loc_1851 ; Jump if above or =
-273F:96CF 39 46 02 cmp [bp+2],ax
-273F:96D2 75 07 jne loc_1851 ; Jump if not equal
-273F:96D4 81 7E 06 3F8A cmp word ptr [bp+6],3F8Ah
-273F:96D9 74 0C je loc_1852 ; Jump if equal
-273F:96DB loc_1851: ; xref 273F:96C6, 96CD, 96D2
-273F:96DB 83 C5 02 add bp,2
-273F:96DE 73 E1 jnc loc_1850 ; Jump if carry=0
-273F:96E0 C7 06 1856 96FA mov cp_proc, offset sub_237
-273F:96E6 C3 retn
-273F:96E7 loc_1852: ; xref 273F:96D9
-273F:96E7 55 push bp
-273F:96E8 E8 000F call sub_237 ; (96FA)
-273F:96EB 5D pop bp
-273F:96EC 72 06 jc loc_1853 ; Jump if carry Set
-273F:96EE C7 46 00 3C53 mov word ptr [bp],3C53h
-273F:96F3 C3 retn
-273F:96F4 loc_1853: ; xref 273F:96EC
-273F:96F4 C7 46 00 3C13 mov word ptr [bp],3C13h
-273F:96F9 C3 retn
- sub_236 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:96E8
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:96FA sub_237 proc near
-273F:96FA A1 B156 mov ax,ds:data_449e ; (273F:B156=0)
-273F:96FD 33 D2 xor dx,dx ; Zero register
-273F:96FF F7 36 1837 div word ptr ds:[1837h] ; (273F:1837=374h) ax,dxrem=dx:ax/data
-273F:9703 8B F8 mov di,ax
-273F:9705 A1 B1D1 mov ax,ds:data_453e ; (273F:B1D1=0)
-273F:9708 33 D2 xor dx,dx ; Zero register
-273F:970A F7 36 1849 div word ptr ds:[1849h] ; (273F:1849=7465h) ax,dxrem=dx:ax/dat
-273F:970E B9 000A mov cx,0Ah
-273F:9711 F7 E1 mul cx ; dx:ax = reg * ax
-273F:9713 8B E8 mov bp,ax
-273F:9715 A1 B1FA mov ax,ds:data_454e ; (273F:B1FA=0)
-273F:9718 33 D2 xor dx,dx ; Zero register
-273F:971A F7 36 1849 div word ptr ds:[1849h] ; (273F:1849=7465h) ax,dxrem=dx:ax/dat
-273F:971E 03 C5 add ax,bp
-273F:9720 3A 85 55A3 cmp al,byte ptr ds:[55A3h][di] ; (273F:55A3=0Dh)
-273F:9724 75 34 jne loc_1854 ; Jump if not equal
-273F:9726 A1 B17F mov ax,ds:data_452e ; (273F:B17F=29h)
-273F:9729 33 D2 xor dx,dx ; Zero register
-273F:972B F7 36 1837 div word ptr ds:[1837h] ; (273F:1837=374h) ax,dxrem=dx:ax/data
-273F:972F 8B F8 mov di,ax
-273F:9731 A1 B223 mov ax,ds:data_455e ; (273F:B223=0)
-273F:9734 33 D2 xor dx,dx ; Zero register
-273F:9736 F7 36 1849 div word ptr ds:[1849h] ; (273F:1849=7465h) ax,dxrem=dx:ax/dat
-273F:973A B9 000A mov cx,0Ah
-273F:973D F7 E1 mul cx ; dx:ax = reg * ax
-273F:973F 8B E8 mov bp,ax
-273F:9741 A1 B24C mov ax,ds:data_456e ; (273F:B24C=0)
-273F:9744 33 D2 xor dx,dx ; Zero register
-273F:9746 F7 36 1849 div word ptr ds:[1849h] ; (273F:1849=7465h) ax,dxrem=dx:ax/dat
-273F:974A 03 C5 add ax,bp
-273F:974C 3A 85 55A3 cmp al,byte ptr ds:[55A3h][di] ; (273F:55A3=0Dh)
-273F:9750 75 08 jne loc_1854 ; Jump if not equal
-273F:9752 C7 06 86DF 001C mov word ptr ds:[86DFh],1Ch ; (273F:86DF=6C7h)
-273F:9758 F8 clc ; Clear carry flag
-273F:9759 C3 retn
-273F:975A loc_1854: ; xref 273F:9724, 9750
-273F:975A F9 stc ; Set carry flag
-273F:975B C3 retn
- sub_237 endp
-
-273F:975C loc_1855: ; xref 273F:00F2, 9780
-273F:975C úE8 060B call sub_244 ; (9D6A)
-273F:975F E8 058B call sub_243 ; (9CED)
-273F:9762 E8 AA31 call animation_tick
-273F:9765 FF 16 0752 call [show_compressed_screen_proc]
-273F:9769 E8 7DA2 call room_add_animations
-273F:976C E8 B0EB call sequence_delay_check
-273F:976F FF 16 0744 call word ptr [show_screen_proc]
-273F:9773 83 3E 6CE4 2A cmp word ptr ds:[6CE4h],2Ah ; (273F:6CE4=0C18Bh)
-273F:9778 74 08 je loc_1856 ; Jump if equal
-273F:977A B8 0004 mov ax,4
-273F:977D E8 B269 call sleep ; (49E9)
-273F:9780 EB DA jmp short loc_1855 ; (975C)
-273F:9782 loc_1856: ; xref 273F:9778
-273F:9782 E9 6970 jmp loc_13 ; (00F5)
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_method_17 proc near
-273F:9785 E8 002D call sub_238 ; (97B5)
-273F:9788 C7 44 F9 975A mov word ptr [si-7],975Ah
-273F:978D C7 44 D3 0445 mov word ptr [si-2Dh],445h
-273F:9792 C7 44 0D 019A mov word ptr [si+0Dh],19Ah
-273F:9797 C7 44 DB 019A mov word ptr [si-25h],19Ah
-273F:979C C7 05 019A mov word ptr [di],19Ah
-273F:97A0 C7 44 0F 0108 mov word ptr [si+0Fh],108h
-273F:97A5 C7 44 DD 0108 mov word ptr [si-23h],108h
-273F:97AA C7 45 02 0108 mov word ptr [di+2],108h
-273F:97AF C6 06 B176 60 mov slot0_col_offset, 60h ; Player's colour offset
-273F:97B4 C3 retn
- seq_method_17 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9785
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:97B5 sub_238 proc near
-273F:97B5 B8 0040 mov ax,40h
-273F:97B8 8E C0 mov es,ax
-273F:97BA 26: 80 0E 0017 20 or byte ptr es:keybd_flags_1,20h ; (0040:0017=0) ' '
-273F:97C0 úBE 6CEF mov si, offset player_hotspot_rec
-273F:97C3 8B 7C 0B mov di,[si+0Bh]
-273F:97C6 C6 45 1D 00 mov byte ptr [di+1Dh],0
-273F:97CA C6 45 28 10 mov byte ptr [di+28h],10h
-273F:97CE C7 45 11 98B6 mov word ptr [di+11h],98B6h
-273F:97D3 C7 44 F5 0000 mov word ptr [si-0Bh],0
-273F:97D8 C7 44 21 55F6 mov word ptr [si+21h],55F6h
-273F:97DD C7 44 11 0030 mov word ptr [si+11h],30h
-273F:97E2 C7 45 04 0030 mov word ptr [di+4],30h
-273F:97E7 C7 44 13 0035 mov word ptr [si+13h],35h
-273F:97EC C7 45 06 0035 mov word ptr [di+6],35h
-273F:97F1 C7 44 0D 0186 mov word ptr [si+0Dh],186h
-273F:97F6 C7 44 DB 0186 mov word ptr [si-25h],186h
-273F:97FB C7 05 0186 mov word ptr [di],186h
-273F:97FF C7 44 0F 00DE mov word ptr [si+0Fh],0DEh
-273F:9804 C7 44 DD 00DE mov word ptr [si-23h],0DEh
-273F:9809 C7 45 02 00DE mov word ptr [di+2],0DEh
-273F:980E C7 44 F7 0DC8 mov word ptr [si-9],0DC8h
-273F:9813 C7 44 F9 96AD mov word ptr [si-7],96ADh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 360
-
-273F:9818 C3 retn
- sub_238 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:98BE, 9A46, 9A98
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9819 sub_239 proc near
-273F:9819 8B 44 DB mov ax,[si-25h]
-273F:981C 8B 4F DB mov cx,[bx-25h]
-273F:981F 3B C1 cmp ax,cx
-273F:9821 73 01 jae loc_1857 ; Jump if above or =
-273F:9823 91 xchg cx,ax
-273F:9824 loc_1857: ; xref 273F:9821
-273F:9824 2B C1 sub ax,cx
-273F:9826 25 FFF8 and ax,0FFF8h
-273F:9829 89 44 EF mov [si-11h],ax
-273F:982C C3 retn
- sub_239 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- sub_unknown1 proc near
-273F:982D B8 2273 mov ax, 2273h
-273F:9830 8E C0 mov es, ax
-273F:9832 8B 5C F9 mov bx, [si-7]
-273F:9835 E8 E1 FF call sub_239
-273F:9838 8B 5C F7 mov bx, [si-9]
-273F:983B 0B DB or bx, bx
-273F:983D 75 3B jnz loc_1858_2
-273F:983F 83 7C EF 20 cmp word ptr [si-11], 20h
-273F:9843 75 3F jnz loc_1859_2
-273F:9845 8B 44 F5 mov ax, [si-0Bh]
-273F:9848 F7 64 E5 mul word ptr [SI-1Bh]
-273F:984B 03 44 EB add ax, [si-15h]
-273F:984E 8B D8 mov bx, ax
-273F:9850 A1 DC 6C mov ax, [6CDCh]
-273F:9853 loc_1858: ; xref 273F:9860
-273F:9853 83 C3 04 add bx,4
-273F:9856 26: F7 07 FFFF test word ptr es:[bx],0FFFFh
-273F:985B 74 1F jz loc_1859 ; Jump if zero
-273F:985D 26: 3B 07 cmp ax,es:[bx]
-273F:9860 75 F1 jne loc_1858 ; Jump if not equal
-273F:9862 26: 8B 47 02 mov ax,es:[bx+2]
-273F:9866 8B 5C E7 mov bx,[si-19h]
-273F:9869 50 push ax
-273F:986A E8 001F call sub_240 ; (988C)
-273F:986D 5A pop dx
-273F:986E 0B C0 or ax,ax ; Zero ?
-273F:9870 74 0A jz loc_1859 ; Jump if zero
-273F:9872 3C FF cmp al,0FFh
-273F:9874 75 2F jne loc_1860 ; Jump if not equal
-273F:9876 8B C2 mov ax,dx
-273F:9878 EB 2B jmp short loc_1860 ; (98A5)
-273F:987A loc_1858_2:
-273F:987A EB 66 jmp short loc_1863 ; (98E2)
-273F:987C loc_1859: ; xref 273F:985B, 9870
-273F:987C 8B 5C E3 mov bx,[si-1Dh]
-273F:987F E8 000A call sub_240 ; (988C)
-273F:9882 EB 21 jmp short loc_1860 ; (98A5)
-273F:9884 loc_1859_2: ;* No entry point to code
-273F:9884 8B 5C E9 mov bx,[si-17h]
-273F:9887 E8 0002 call sub_240 ; (988C)
-273F:988A EB 19 jmp short loc_1860 ; (98A5)
- sub_unknown1 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:986A, 987F, 9887
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:988C sub_240 proc near
-273F:988C E8 ABDD call random
-273F:988F BA 0020 mov dx,20h
-273F:9892 F7 E2 mul dx ; dx:ax = reg * ax
-273F:9894 8B 44 F5 mov ax,[si-0Bh]
-273F:9897 B1 05 mov cl,5
-273F:9899 D3 E0 shl ax,cl ; Shift w/zeros fill
-273F:989B 03 D8 add bx,ax
-273F:989D 03 DA add bx,dx
-273F:989F 26: 8A 07 mov al,es:[bx]
-273F:98A2 32 E4 xor ah,ah ; Zero register
-273F:98A4 C3 retn
- sub_240 endp
-
-273F:98A5 loc_1860: ; xref 273F:9874, 9878, 9882, 988A
-273F:98A5 89 44 ED mov [si-13h],ax
-273F:98A8 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:98AA 05 08B8 add ax,8B8h
-273F:98AD 8B D8 mov bx,ax
-273F:98AF 26: 8B 07 mov ax,es:[bx]
-273F:98B2 89 44 F7 mov [si-9],ax
-
-273F:98B5 loc_ret_1861: ; xref 273F:98D7
-273F:98B5 C3 retn
- ;* No entry point to code
-273F:98B6 B8 435F mov ax,seg_d
-273F:98B9 8E C0 mov es,ax
-273F:98BB 8B 5C F9 mov bx,[si-7]
-273F:98BE E8 FF58 call sub_239 ; (9819)
-273F:98C1 8B 5C F7 mov bx,[si-9]
-273F:98C4 0B DB or bx,bx ; Zero ?
-273F:98C6 75 1A jnz loc_1863 ; Jump if not zero
-273F:98C8 loc_1862: ; xref 273F:9A81
-273F:98C8 ú8B 44 F3 mov ax,[si-0Dh]
-273F:98CB D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:98CD 05 0DAA add ax, offset num_horiz_rects
-273F:98D0 8B D8 mov bx,ax
-273F:98D2 26: 8B 1F mov bx,es:[bx]
-273F:98D5 0B DB or bx,bx ; Zero ?
-273F:98D7 74 DC jz loc_ret_1861 ; Jump if zero
-273F:98D9 8B 44 F3 mov ax,[si-0Dh]
-273F:98DC 89 44 ED mov [si-13h],ax
-273F:98DF 89 5C F7 mov [si-9],bx
-273F:98E2 loc_1863: ; xref 273F:987A, 98C6, 9958, 9B06
- ; 9B21, 9B48, 9B5A, 9B62
- ; 9B6E, 9B99, 9BFF, 9C03
- ; 9C49, 9C53, 9C62, 9C76
- ; 9CDE
-273F:98E2 ú26: 8B 07 mov ax,es:[bx]
-273F:98E5 83 C3 02 add bx,2
-273F:98E8 F6 C4 80 test ah,80h
-273F:98EB 74 6D jz loc_1864 ; Jump if zero
-273F:98ED 3D FFFA cmp ax,0FFFAh
-273F:98F0 74 6A je loc_1865 ; Jump if equal
-273F:98F2 3D FFF9 cmp ax,0FFF9h
-273F:98F5 74 68 je loc_1866 ; Jump if equal
-273F:98F7 3D FFEB cmp ax,0FFEBh
-273F:98FA 74 66 je loc_1867 ; Jump if equal
-273F:98FC 3D FFFB cmp ax,0FFFBh
-273F:98FF 74 64 je loc_1868 ; Jump if equal
-273F:9901 3D FFF8 cmp ax,0FFF8h
-273F:9904 74 62 je loc_1869 ; Jump if equal
-273F:9906 3D FFFF cmp ax,0FFFFh
-273F:9909 74 60 je loc_1870 ; Jump if equal
-273F:990B 3D FFFE cmp ax,0FFFEh
-273F:990E 74 5E je loc_1871 ; Jump if equal
-273F:9910 3D FFF7 cmp ax,0FFF7h
-273F:9913 74 5C je loc_1872 ; Jump if equal
-273F:9915 3D FFF6 cmp ax,0FFF6h
-273F:9918 74 5A je loc_1873 ; Jump if equal
-273F:991A 3D FFF4 cmp ax,0FFF4h
-273F:991D 74 58 je loc_1874 ; Jump if equal
-273F:991F 3D FFF2 cmp ax,0FFF2h
-273F:9922 74 56 je loc_1875 ; Jump if equal
-273F:9924 3D FFF1 cmp ax,0FFF1h
-273F:9927 74 54 je loc_1876 ; Jump if equal
-273F:9929 3D FFF0 cmp ax,0FFF0h
-273F:992C 74 52 je loc_1877 ; Jump if equal
-273F:992E 3D FFEF cmp ax,0FFEFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 363
-
-273F:9931 74 50 je loc_1878 ; Jump if equal
-273F:9933 3D FFEE cmp ax,0FFEEh
-273F:9936 74 4E je loc_1879 ; Jump if equal
-273F:9938 3D FFED cmp ax,0FFEDh
-273F:993B 74 4C je loc_1880 ; Jump if equal
-273F:993D 3D FFEC cmp ax,0FFECh
-273F:9940 74 4A je loc_1881 ; Jump if equal
-273F:9942 3D FFEA cmp ax,0FFEAh
-273F:9945 74 00 jz $+2 ; delay for I/O
-273F:9947 53 push bx
-273F:9948 56 push si
-273F:9949 57 push di
-273F:994A 06 push es
-273F:994B 26: 8B 1F mov bx,es:[bx]
-273F:994E E8 06AC call play_sound ; (9FFD)
-273F:9951 07 pop es
-273F:9952 5F pop di
-273F:9953 5E pop si
-273F:9954 5B pop bx
-273F:9955 83 C3 02 add bx,2
-273F:9958 EB 88 jmp short loc_1863 ; (98E2)
-273F:995A loc_1864: ; xref 273F:98EB
-273F:995A EB 33 jmp short loc_1882 ; (998F)
-273F:995C loc_1865: ; xref 273F:98F0
-273F:995C E9 00C3 jmp loc_1889 ; (9A22)
-273F:995F loc_1866: ; xref 273F:98F5
-273F:995F E9 0164 jmp loc_1897 ; (9AC6)
-273F:9962 loc_1867: ; xref 273F:98FA
-273F:9962 E9 011F jmp loc_1894 ; (9A84)
-273F:9965 loc_1868: ; xref 273F:98FF
-273F:9965 E9 00A6 jmp loc_1887 ; (9A0E)
-273F:9968 loc_1869: ; xref 273F:9904
-273F:9968 E9 0198 jmp loc_1900 ; (9B03)
-273F:996B loc_1870: ; xref 273F:9909
-273F:996B E9 019B jmp loc_1901 ; (9B09)
-273F:996E loc_1871: ; xref 273F:990E
-273F:996E E9 01B3 jmp loc_1904 ; (9B24)
-273F:9971 loc_1872: ; xref 273F:9913
-273F:9971 E9 01C5 jmp loc_1905 ; (9B39)
-273F:9974 loc_1873: ; xref 273F:9918
-273F:9974 E9 01D4 jmp loc_1906 ; (9B4B)
-273F:9977 loc_1874: ; xref 273F:991D
-273F:9977 E9 01E3 jmp loc_1907 ; (9B5D)
-273F:997A loc_1875: ; xref 273F:9922
-273F:997A E9 01E8 jmp loc_1908 ; (9B65)
-273F:997D loc_1876: ; xref 273F:9927
-273F:997D E9 01F1 jmp loc_1909 ; (9B71)
-273F:9980 loc_1877: ; xref 273F:992C
-273F:9980 E9 0219 jmp loc_1911 ; (9B9C)
-273F:9983 loc_1878: ; xref 273F:9931
-273F:9983 E9 02D0 jmp loc_1916 ; (9C56)
-273F:9986 loc_1879: ; xref 273F:9936
-273F:9986 E9 02DC jmp loc_1917 ; (9C65)
-273F:9989 loc_1880: ; xref 273F:993B
-273F:9989 E9 0355 jmp loc_1920 ; (9CE1)
-273F:998C loc_1881: ; xref 273F:9940
-273F:998C E9 02EA jmp loc_1918 ; (9C79)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 364
-
-273F:998F loc_1882: ; xref 273F:995A
-273F:998F E8 0059 call sub_241 ; (99EB)
-273F:9992 26: 8B 07 mov ax,es:[bx]
-273F:9995 03 44 0D add ax,[si+0Dh]
-273F:9998 3D 00A0 cmp ax,0A0h
-273F:999B 73 05 jae loc_1883 ; Jump if above or =
-273F:999D B8 00A0 mov ax,0A0h
-273F:99A0 EB 08 jmp short loc_1884 ; (99AA)
-273F:99A2 loc_1883: ; xref 273F:999B
-273F:99A2 3D 0170 cmp ax,170h
-273F:99A5 72 03 jb loc_1884 ; Jump if below
-273F:99A7 B8 0170 mov ax,170h
-273F:99AA loc_1884: ; xref 273F:99A0, 99A5
-273F:99AA 89 44 0D mov [si+0Dh],ax
-273F:99AD 89 05 mov [di],ax
-273F:99AF 26: 8B 47 02 mov ax,es:[bx+2]
-273F:99B3 01 44 0F add [si+0Fh],ax
-273F:99B6 01 45 02 add [di+2],ax
-273F:99B9 8B 44 D3 mov ax,[si-2Dh]
-273F:99BC 0B C0 or ax,ax ; Zero ?
-273F:99BE 74 24 jz loc_1885 ; Jump if zero
-273F:99C0 57 push di
-273F:99C1 56 push si
-273F:99C2 E8 7325 call get_room_resource_pointer2
-273F:99C5 8B 7C 0B mov di,[si+0Bh]
-273F:99C8 26: 8B 47 04 mov ax,es:[bx+4]
-273F:99CC E8 001C call sub_241 ; (99EB)
-273F:99CF 5E pop si
-273F:99D0 26: 8B 47 06 mov ax,es:[bx+6]
-273F:99D4 03 44 0D add ax,[si+0Dh]
-273F:99D7 89 05 mov [di],ax
-273F:99D9 26: 8B 47 08 mov ax,es:[bx+8]
-273F:99DD 03 44 0F add ax,[si+0Fh]
-273F:99E0 89 45 02 mov [di+2],ax
-273F:99E3 5F pop di
-273F:99E4 loc_1885: ; xref 273F:99BE
-273F:99E4 83 C3 0A add bx,0Ah
-273F:99E7 89 5C F7 mov [si-9],bx
-273F:99EA C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:998F, 99CC
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:99EB sub_241 proc near
-273F:99EB loc_1886: ; xref 273F:9A7E, 9AB4, 9AC0, 9B00
-273F:99EB ú53 push bx
-273F:99EC 8B 5C 21 mov bx,[si+21h]
-273F:99EF F7 67 07 mul word ptr [bx+7] ; dx:ax = data * ax
-273F:99F2 89 45 08 mov [di+8],ax
-273F:99F5 5B pop bx
-273F:99F6 C3 retn
- sub_241 endp
-
-
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 365
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9A5C, 9A84, 9AD9
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:99F7 sub_242 proc near
-273F:99F7 56 push si
-273F:99F8 57 push di
-273F:99F9 8B 44 D3 mov ax,[si-2Dh]
-273F:99FC E8 72EB call get_room_resource_pointer2
-273F:99FF 8B 7C 0B mov di,[si+0Bh]
-273F:9A02 C7 05 0060 mov word ptr [di],60h
-273F:9A06 C7 45 02 0068 mov word ptr [di+2],68h
-273F:9A0B 5F pop di
-273F:9A0C 5E pop si
-273F:9A0D C3 retn
- sub_242 endp
-
-273F:9A0E loc_1887: ; xref 273F:9965, 9A33, 9A5A, 9AC3
-273F:9A0E ú33 C0 xor ax,ax ; Zero register
-273F:9A10 89 44 ED mov [si-13h],ax
-273F:9A13 89 44 F7 mov [si-9],ax
-273F:9A16 ú81 FE 6CEF cmp si, offset player_hotspot_rec
-273F:9A1A 75 05 jne loc_ret_1888 ; Jump if not equal
-273F:9A1C C6 06 11D5 00 mov mouse_buttons, 0
-
-273F:9A21 loc_ret_1888: ; xref 273F:9A1A
-273F:9A21 C3 retn
-273F:9A22 loc_1889: ; xref 273F:995C
-273F:9A22 83 7C F3 05 cmp word ptr [si-0Dh],5
-273F:9A26 74 06 je loc_1890 ; Jump if equal
-273F:9A28 83 7C F3 0A cmp word ptr [si-0Dh],0Ah
-273F:9A2C 75 53 jne loc_1893 ; Jump if not equal
-273F:9A2E loc_1890: ; xref 273F:9A26
-273F:9A2E 81 7C 0D 00A0 cmp word ptr [si+0Dh],0A0h
-273F:9A33 72 D9 jb loc_1887 ; Jump if below
-273F:9A35 83 6C 0D 04 sub word ptr [si+0Dh],4
-273F:9A39 83 2D 04 sub word ptr [di],4
-273F:9A3C 8B 44 0D mov ax,[si+0Dh]
-273F:9A3F 89 44 DB mov [si-25h],ax
-273F:9A42 53 push bx
-273F:9A43 8B 5C F9 mov bx,[si-7]
-273F:9A46 E8 FDD0 call sub_239 ; (9819)
-273F:9A49 5B pop bx
-273F:9A4A 3D 0020 cmp ax,20h
-273F:9A4D 73 0D jae loc_1891 ; Jump if above or =
-273F:9A4F 83 44 0D 04 add word ptr [si+0Dh],4
-273F:9A53 83 44 DB 04 add word ptr [si-25h],4
-273F:9A57 83 05 04 add word ptr [di],4
-273F:9A5A EB B2 jmp short loc_1887 ; (9A0E)
-273F:9A5C loc_1891: ; xref 273F:9A4D
-273F:9A5C E8 FF98 call sub_242 ; (99F7)
-273F:9A5F 8B 44 0D mov ax,[si+0Dh]
-273F:9A62 89 44 DB mov [si-25h],ax
-273F:9A65 8B 44 0F mov ax,[si+0Fh]
-273F:9A68 89 44 DD mov [si-23h],ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 366
-
-273F:9A6B 8B 44 F1 mov ax,[si-0Fh]
-273F:9A6E 05 0001 add ax,1
-273F:9A71 3D 0008 cmp ax,8
-273F:9A74 75 02 jne loc_1892 ; Jump if not equal
-273F:9A76 33 C0 xor ax,ax ; Zero register
-273F:9A78 loc_1892: ; xref 273F:9A74
-273F:9A78 89 44 F1 mov [si-0Fh],ax
-273F:9A7B 89 5C F7 mov [si-9],bx
-273F:9A7E E9 FF6A jmp loc_1886 ; (99EB)
-273F:9A81 loc_1893: ; xref 273F:9A2C, 9AD0
-273F:9A81 E9 FE44 jmp loc_1862 ; (98C8)
-273F:9A84 loc_1894: ; xref 273F:9962
-273F:9A84 E8 FF70 call sub_242 ; (99F7)
-273F:9A87 83 44 0D 04 add word ptr [si+0Dh],4
-273F:9A8B 83 05 04 add word ptr [di],4
-273F:9A8E 8B 44 0D mov ax,[si+0Dh]
-273F:9A91 89 44 DB mov [si-25h],ax
-273F:9A94 53 push bx
-273F:9A95 8B 5C F9 mov bx,[si-7]
-273F:9A98 E8 FD7E call sub_239 ; (9819)
-273F:9A9B 5B pop bx
-273F:9A9C 3D 0020 cmp ax,20h
-273F:9A9F 73 16 jae loc_1895 ; Jump if above or =
-273F:9AA1 83 6C 0D 04 sub word ptr [si+0Dh],4
-273F:9AA5 83 2D 04 sub word ptr [di],4
-273F:9AA8 83 6C DB 04 sub word ptr [si-25h],4
-273F:9AAC C7 44 F7 0000 mov word ptr [si-9],0
-273F:9AB1 B8 0008 mov ax,8
-273F:9AB4 E9 FF34 jmp loc_1886 ; (99EB)
-273F:9AB7 loc_1895: ; xref 273F:9A9F
-273F:9AB7 26: 8B 07 mov ax,es:[bx]
-273F:9ABA 83 C3 02 add bx,2
-273F:9ABD 89 5C F7 mov [si-9],bx
-273F:9AC0 E9 FF28 jmp loc_1886 ; (99EB) Register jump
-273F:9AC3 loc_1896: ; xref 273F:9AD7
-273F:9AC3 E9 FF48 jmp loc_1887 ; (9A0E)
-273F:9AC6 loc_1897: ; xref 273F:995F
-273F:9AC6 83 7C F3 09 cmp word ptr [si-0Dh],9
-273F:9ACA 74 06 je loc_1898 ; Jump if equal
-273F:9ACC 83 7C F3 0E cmp word ptr [si-0Dh],0Eh
-273F:9AD0 75 AF jne loc_1893 ; Jump if not equal
-273F:9AD2 loc_1898: ; xref 273F:9ACA
-273F:9AD2 81 7C 0D 0170 cmp word ptr [si+0Dh],170h
-273F:9AD7 73 EA jae loc_1896 ; Jump if above or =
-273F:9AD9 E8 FF1B call sub_242 ; (99F7)
-273F:9ADC 83 44 0D 04 add word ptr [si+0Dh],4
-273F:9AE0 83 05 04 add word ptr [di],4
-273F:9AE3 8B 44 0D mov ax,[si+0Dh]
-273F:9AE6 89 44 DB mov [si-25h],ax
-273F:9AE9 8B 44 0F mov ax,[si+0Fh]
-273F:9AEC 89 44 DD mov [si-23h],ax
-273F:9AEF 8B 44 F1 mov ax,[si-0Fh]
-273F:9AF2 2D 0001 sub ax,1
-273F:9AF5 73 03 jnc loc_1899 ; Jump if carry=0
-273F:9AF7 B8 0007 mov ax,7
-273F:9AFA loc_1899: ; xref 273F:9AF5
-273F:9AFA 89 44 F1 mov [si-0Fh],ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 367
-
-273F:9AFD 89 5C F7 mov [si-9],bx
-273F:9B00 E9 FEE8 jmp loc_1886 ; (99EB)
-273F:9B03 loc_1900: ; xref 273F:9968
-273F:9B03 26: 8B 1F mov bx,es:[bx]
-273F:9B06 E9 FDD9 jmp loc_1863 ; (98E2)
-273F:9B09 loc_1901: ; xref 273F:996B
-273F:9B09 26: 8B 07 mov ax,es:[bx]
-273F:9B0C 83 C3 02 add bx,2
-273F:9B0F 89 44 21 mov [si+21h],ax
-273F:9B12 loc_1902: ; xref 273F:9B37
-273F:9B12 ú53 push bx
-273F:9B13 8B D8 mov bx,ax
-273F:9B15 8B 47 03 mov ax,[bx+3]
-273F:9B18 5B pop bx
-273F:9B19 89 45 0A mov [di+0Ah],ax
-273F:9B1C C7 45 08 0000 mov word ptr [di+8],0
-273F:9B21 loc_1903: ; xref 273F:9B42, 9B54, 9B85
-273F:9B21 E9 FDBE jmp loc_1863 ; (98E2)
-273F:9B24 loc_1904: ; xref 273F:996E
-273F:9B24 26: 8B 07 mov ax,es:[bx]
-273F:9B27 83 C3 02 add bx,2
-273F:9B2A D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:9B2C 03 44 D1 add ax,[si-2Fh]
-273F:9B2F 93 xchg bx,ax
-273F:9B30 26: 8B 1F mov bx,es:[bx]
-273F:9B33 89 5C 21 mov [si+21h],bx
-273F:9B36 93 xchg bx,ax
-273F:9B37 EB D9 jmp short loc_1902 ; (9B12)
-273F:9B39 loc_1905: ; xref 273F:9971
-273F:9B39 26: 8B 07 mov ax,es:[bx]
-273F:9B3C 83 C3 04 add bx,4
-273F:9B3F 3B 44 F3 cmp ax,[si-0Dh]
-273F:9B42 75 DD jne loc_1903 ; Jump if not equal
-273F:9B44 26: 8B 5F FE mov bx,es:[bx-2]
-273F:9B48 E9 FD97 jmp loc_1863 ; (98E2)
-273F:9B4B loc_1906: ; xref 273F:9974
-273F:9B4B 26: 8B 07 mov ax,es:[bx]
-273F:9B4E 83 C3 04 add bx,4
-273F:9B51 3B 44 F3 cmp ax,[si-0Dh]
-273F:9B54 74 CB je loc_1903 ; Jump if equal
-273F:9B56 26: 8B 5F FE mov bx,es:[bx-2]
-273F:9B5A E9 FD85 jmp loc_1863 ; (98E2)
-273F:9B5D loc_1907: ; xref 273F:9977
-273F:9B5D C7 44 ED 0000 mov word ptr [si-13h],0
-273F:9B62 E9 FD7D jmp loc_1863 ; (98E2)
-273F:9B65 loc_1908: ; xref 273F:997A
-273F:9B65 26: 8B 07 mov ax,es:[bx]
-273F:9B68 83 C3 02 add bx,2
-273F:9B6B 89 44 DF mov [si-21h],ax
-273F:9B6E E9 FD71 jmp loc_1863 ; (98E2)
-273F:9B71 loc_1909: ; xref 273F:997D
-273F:9B71 53 push bx
-273F:9B72 8B 5C F9 mov bx,[si-7]
-273F:9B75 8B 57 DF mov dx,[bx-21h]
-273F:9B78 5B pop bx
-273F:9B79 26: 8B 07 mov ax,es:[bx]
-273F:9B7C 26: 8B 4F 02 mov cx,es:[bx+2]
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 368
-
-273F:9B80 83 C3 04 add bx,4
-273F:9B83 3B C2 cmp ax,dx
-273F:9B85 75 9A jne loc_1903 ; Jump if not equal
-273F:9B87 53 push bx
-273F:9B88 56 push si
-273F:9B89 57 push di
-273F:9B8A 51 push cx
-273F:9B8B 06 push es
-273F:9B8C BB 002A mov bx,2Ah
-273F:9B8F E8 046B call play_sound ; (9FFD)
-273F:9B92 07 pop es
-273F:9B93 59 pop cx
-273F:9B94 5F pop di
-273F:9B95 5E pop si
-273F:9B96 5B pop bx
-273F:9B97 8B D9 mov bx,cx
-273F:9B99 loc_1910: ; xref 273F:9BA6
-273F:9B99 E9 FD46 jmp loc_1863 ; (98E2)
-273F:9B9C loc_1911: ; xref 273F:9980
-273F:9B9C 26: 8B 07 mov ax,es:[bx]
-273F:9B9F 83 C3 02 add bx,2
-273F:9BA2 83 7C EF 20 cmp word ptr [si-11h],20h
-273F:9BA6 75 F1 jne loc_1910 ; Jump if not equal
-273F:9BA8 81 7D 1B 03E8 cmp word ptr [di+1Bh], PLAYER_HOTSPOT_ID
-273F:9BAD 74 57 je loc_1913 ; Jump if equal
-273F:9BAF 53 push bx
-273F:9BB0 50 push ax
-273F:9BB1 53 push bx
-273F:9BB2 51 push cx
-273F:9BB3 52 push dx
-273F:9BB4 56 push si
-273F:9BB5 57 push di
-273F:9BB6 55 push bp
-273F:9BB7 1E push ds
-273F:9BB8 06 push es
-273F:9BB9 9C pushf ; Push flags
-273F:9BBA BB 0025 mov bx,25h
-273F:9BBD E8 043D call play_sound ; (9FFD)
-273F:9BC0 9D popf ; Pop flags
-273F:9BC1 07 pop es
-273F:9BC2 1F pop ds
-273F:9BC3 5D pop bp
-273F:9BC4 5F pop di
-273F:9BC5 5E pop si
-273F:9BC6 5A pop dx
-273F:9BC7 59 pop cx
-273F:9BC8 5B pop bx
-273F:9BC9 58 pop ax
-273F:9BCA 8B 5C F9 mov bx,[si-7]
-273F:9BCD 89 47 F7 mov [bx-9],ax
-273F:9BD0 83 47 F5 01 add word ptr [bx-0Bh],1
-273F:9BD4 83 7F F5 0A cmp word ptr [bx-0Bh],0Ah
-273F:9BD8 75 28 jne loc_1912 ; Jump if not equal
-273F:9BDA C7 44 F5 000A mov word ptr [si-0Bh],0Ah
-273F:9BDF C7 47 F7 0F46 mov word ptr [bx-9],0F46h
-273F:9BE4 50 push ax
-273F:9BE5 53 push bx
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 369
-
-273F:9BE6 51 push cx
-273F:9BE7 52 push dx
-273F:9BE8 56 push si
-273F:9BE9 57 push di
-273F:9BEA 55 push bp
-273F:9BEB 1E push ds
-273F:9BEC 06 push es
-273F:9BED 9C pushf ; Push flags
-273F:9BEE BB 0024 mov bx,24h
-273F:9BF1 E8 0409 call play_sound ; (9FFD)
-273F:9BF4 9D popf ; Pop flags
-273F:9BF5 07 pop es
-273F:9BF6 1F pop ds
-273F:9BF7 5D pop bp
-273F:9BF8 5F pop di
-273F:9BF9 5E pop si
-273F:9BFA 5A pop dx
-273F:9BFB 59 pop cx
-273F:9BFC 5B pop bx
-273F:9BFD 58 pop ax
-273F:9BFE 5B pop bx
-273F:9BFF E9 FCE0 jmp loc_1863 ; (98E2)
-273F:9C02 loc_1912: ; xref 273F:9BD8
-273F:9C02 5B pop bx
-273F:9C03 E9 FCDC jmp loc_1863 ; (98E2)
-273F:9C06 loc_1913: ; xref 273F:9BAD
-273F:9C06 53 push bx
-273F:9C07 50 push ax
-273F:9C08 53 push bx
-273F:9C09 51 push cx
-273F:9C0A 52 push dx
-273F:9C0B 56 push si
-273F:9C0C 57 push di
-273F:9C0D 55 push bp
-273F:9C0E 1E push ds
-273F:9C0F 06 push es
-273F:9C10 9C pushf ; Push flags
-273F:9C11 BB 0034 mov bx,34h
-273F:9C14 E8 03E6 call play_sound ; (9FFD)
-273F:9C17 9D popf ; Pop flags
-273F:9C18 07 pop es
-273F:9C19 1F pop ds
-273F:9C1A 5D pop bp
-273F:9C1B 5F pop di
-273F:9C1C 5E pop si
-273F:9C1D 5A pop dx
-273F:9C1E 59 pop cx
-273F:9C1F 5B pop bx
-273F:9C20 58 pop ax
-273F:9C21 8B 5C F9 mov bx,[si-7]
-273F:9C24 83 7F F5 05 cmp word ptr [bx-0Bh],5
-273F:9C28 74 1E je loc_1914 ; Jump if equal
-273F:9C2A 89 47 F7 mov [bx-9],ax
-273F:9C2D 83 47 D7 01 add word ptr [bx-29h],1
-273F:9C31 8B 47 D7 mov ax,[bx-29h]
-273F:9C34 39 47 D9 cmp [bx-27h],ax
-273F:9C37 73 0F jae loc_1914 ; Jump if above or =
-273F:9C39 C7 47 D7 0000 mov word ptr [bx-29h],0
-273F:9C3E 83 47 F5 01 add word ptr [bx-0Bh],1
-273F:9C42 83 7F F5 05 cmp word ptr [bx-0Bh],5
-273F:9C46 74 04 je loc_1915 ; Jump if equal
-273F:9C48 loc_1914: ; xref 273F:9C28, 9C37
-273F:9C48 5B pop bx
-273F:9C49 E9 FC96 jmp loc_1863 ; (98E2)
-273F:9C4C loc_1915: ; xref 273F:9C46
-273F:9C4C 8B 47 D5 mov ax,[bx-2Bh]
-273F:9C4F 89 47 F7 mov [bx-9],ax
-273F:9C52 5B pop bx
-273F:9C53 E9 FC8C jmp loc_1863 ; (98E2)
-273F:9C56 loc_1916: ; xref 273F:9983
-273F:9C56 8B 44 0D mov ax,[si+0Dh]
-273F:9C59 89 44 DB mov [si-25h],ax
-273F:9C5C 8B 44 0F mov ax,[si+0Fh]
-273F:9C5F 89 44 DD mov [si-23h],ax
-273F:9C62 E9 FC7D jmp loc_1863 ; (98E2)
-273F:9C65 loc_1917: ; xref 273F:9986
-273F:9C65 8B 44 DB mov ax,[si-25h]
-273F:9C68 89 44 0D mov [si+0Dh],ax
-273F:9C6B 89 05 mov [di],ax
-273F:9C6D 8B 44 DD mov ax,[si-23h]
-273F:9C70 89 44 0F mov [si+0Fh],ax
-273F:9C73 89 45 02 mov [di+2],ax
-273F:9C76 E9 FC69 jmp loc_1863 ; (98E2)
-273F:9C79 loc_1918: ; xref 273F:998C
-273F:9C79 56 push si
-273F:9C7A 57 push di
-273F:9C7B 53 push bx
-273F:9C7C úBE 6CEF mov si, offset player_hotspot_rec
-273F:9C7F 8B 7C 0B mov di,[si+0Bh]
-273F:9C82 C7 45 11 5E44 mov word ptr [di+11h], offset player_tick_proc
-273F:9C87 C7 44 F5 002A mov word ptr [si-0Bh],2Ah
-273F:9C8C C6 45 28 80 mov byte ptr [di+28h],80h
-273F:9C90 C7 44 21 5C80 mov word ptr [si+21h],5C80h
-273F:9C95 úBB 5C80 mov bx,5C80h ; (273F:5C80=2Ah)
-273F:9C98 8B 47 03 mov ax,[bx+3]
-273F:9C9B 89 45 0A mov [di+0Ah],ax
-273F:9C9E C7 44 11 0020 mov word ptr [si+11h],20h
-273F:9CA3 C7 45 04 0020 mov word ptr [di+4],20h
-273F:9CA8 C7 44 13 0030 mov word ptr [si+13h],30h
-273F:9CAD C7 45 06 0030 mov word ptr [di+6],30h
-273F:9CB2 83 44 0F 05 add word ptr [si+0Fh],5
-273F:9CB6 83 45 02 05 add word ptr [di+2],5
-273F:9CBA E8 A83E call char_face_left
-273F:9CBD 83 7C 06 06 cmp word ptr [si+6],6
-273F:9CC1 75 0E jne loc_1919 ; Jump if not equal
-273F:9CC3 06 push es
-273F:9CC4 BB 0C9F mov bx,0C9Fh
-273F:9CC7 E8 EBF2 call display_dialog
-273F:9CCA 07 pop es
-273F:9CCB BB 2738 mov bx,2738h
-273F:9CCE E8 01F8 call seq_add_item_to_inventory
-273F:9CD1 loc_1919: ; xref 273F:9CC1
-273F:9CD1 5B pop bx
-273F:9CD2 5F pop di
-273F:9CD3 5E pop si
-273F:9CD4 C6 06 11D5 00 mov mouse_buttons, 0
-273F:9CD9 C6 06 11DA 00 mov mouse_buttons2, 0
-273F:9CDE E9 FC01 jmp loc_1863 ; (98E2)
-273F:9CE1 loc_1920: ; xref 273F:9989
-273F:9CE1 C7 06 6CE4 002A mov word ptr ds:[6CE4h],2Ah ; (273F:6CE4=0C18Bh)
-273F:9CE7 80 0E 073D 50 or status_flags2, 50h
-273F:9CEC C3 retn
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:975F, 9DA5
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9CED sub_243 proc near
-273F:9CED A1 6CCA mov ax,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9CF0 05 FF84 add ax,0FF84h
-273F:9CF3 3B 06 11D6 cmp ax, mouse_x2
-273F:9CF7 73 51 jae loc_1925 ; Jump if above or =
-273F:9CF9 05 002C add ax,2Ch
-273F:9CFC 3B 06 11D6 cmp ax, mouse_x2
-273F:9D00 72 3D jb loc_1924 ; Jump if below
-273F:9D02 A1 6CFE mov ax,word ptr ds:[6CFEh] ; (273F:6CFE=76Eh)
-273F:9D05 05 FF80 add ax,0FF80h
-273F:9D08 3B 06 11D8 cmp ax, mouse_y2
-273F:9D0C 73 46 jae loc_1926 ; Jump if above or =
-273F:9D0E 05 0018 add ax,18h
-273F:9D11 3B 06 11D8 cmp ax, mouse_y2
-273F:9D15 73 48 jae loc_1927 ; Jump if above or =
-273F:9D17 C7 06 11E1 0019 mov word ptr ds:[11E1h],19h ; (273F:11E1=3FBh)
-273F:9D1D B8 0003 mov ax,3
-273F:9D20 loc_1921: ; xref 273F:9D48, 9D52, 9D5D, 9D68
-273F:9D20 ú80 3E 11D5 03 cmp mouse_buttons, 3
-273F:9D25 73 14 jae loc_1923 ; Jump if above or =
-273F:9D27 F6 06 11D5 01 test mouse_buttons, 1
-273F:9D2C 74 03 jz loc_1922 ; Jump if zero
-273F:9D2E 05 000A add ax,0Ah
-273F:9D31 loc_1922: ; xref 273F:9D2C
-273F:9D31 F6 06 11D5 02 test mouse_buttons, 2
-273F:9D36 74 03 jz loc_1923 ; Jump if zero
-273F:9D38 05 0005 add ax,5
-273F:9D3B loc_1923: ; xref 273F:9D25, 9D36
-273F:9D3B A3 6CE2 mov word ptr ds:[6CE2h],ax ; (273F:6CE2=0CEBh)
-273F:9D3E C3 retn
-273F:9D3F loc_1924: ; xref 273F:9D00
-273F:9D3F C7 06 11E1 000E mov word ptr ds:[11E1h],0Eh ; (273F:11E1=3FBh)
-273F:9D45 B8 0004 mov ax,4
-273F:9D48 EB D6 jmp short loc_1921 ; (9D20)
-273F:9D4A loc_1925: ; xref 273F:9CF7
-273F:9D4A C7 06 11E1 000D mov word ptr ds:[11E1h],0Dh ; (273F:11E1=3FBh)
-273F:9D50 33 C0 xor ax,ax ; Zero register
-273F:9D52 EB CC jmp short loc_1921 ; (9D20)
-273F:9D54 loc_1926: ; xref 273F:9D0C
-273F:9D54 C7 06 11E1 0017 mov word ptr ds:[11E1h],17h ; (273F:11E1=3FBh)
-273F:9D5A B8 0001 mov ax,1
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 372
-
-273F:9D5D EB C1 jmp short loc_1921 ; (9D20)
-273F:9D5F loc_1927: ; xref 273F:9D15
-273F:9D5F C7 06 11E1 0018 mov word ptr ds:[11E1h],18h ; (273F:11E1=3FBh)
-273F:9D65 B8 0002 mov ax,2
-273F:9D68 EB B6 jmp short loc_1921 ; (9D20)
- sub_243 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:975C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9D6A sub_244 proc near
-273F:9D6A F6 06 55A0 FF test byte ptr ds:[55A0h],0FFh ; (273F:55A0=0C3h)
-273F:9D6F 74 3B jz loc_ret_1930 ; Jump if zero
-273F:9D71 C6 06 11D5 00 mov mouse_buttons, 0
-273F:9D76 C6 06 55A0 00 mov byte ptr ds:[55A0h],0 ; (273F:55A0=0C3h)
-273F:9D7B loc_1928: ; xref 273F:9DD0, 9DE9, 9E02, 9E1D
- ; 9E37, 9E51, 9E67, 9E7D
-273F:9D7B úE8 F7A2 call check_keypress ; (9520)
-273F:9D7E 74 25 jz loc_1929 ; Jump if zero
-273F:9D80 E8 F805 call sub_233 ; (9588)
-273F:9D83 74 20 jz loc_1929 ; Jump if zero
-273F:9D85 3C 37 cmp al,37h ; '7'
-273F:9D87 74 2F je loc_1935 ; Jump if equal
-273F:9D89 3C 34 cmp al,34h ; '4'
-273F:9D8B 74 45 je loc_1936 ; Jump if equal
-273F:9D8D 3C 31 cmp al,31h ; '1'
-273F:9D8F 74 5A je loc_1937 ; Jump if equal
-273F:9D91 3C 39 cmp al,39h ; '9'
-273F:9D93 74 70 je loc_1938 ; Jump if equal
-273F:9D95 3C 36 cmp al,36h ; '6'
-273F:9D97 74 1D je loc_1934 ; Jump if equal
-273F:9D99 3C 33 cmp al,33h ; '3'
-273F:9D9B 74 10 je loc_1931 ; Jump if equal
-273F:9D9D 3C CB cmp al,0CBh
-273F:9D9F 74 0F je loc_1932 ; Jump if equal
-273F:9DA1 3C CD cmp al,0CDh
-273F:9DA3 74 0E je loc_1933 ; Jump if equal
-273F:9DA5 loc_1929: ; xref 273F:9D7E, 9D83
-273F:9DA5 E8 FF45 call sub_243 ; (9CED)
-273F:9DA8 FF 16 075E call [show_cursor_proc]
-
-273F:9DAC loc_ret_1930: ; xref 273F:9D6F
-273F:9DAC C3 retn
-273F:9DAD loc_1931: ; xref 273F:9D9B
-273F:9DAD E9 008A jmp loc_1940 ; (9E3A)
-273F:9DB0 loc_1932: ; xref 273F:9D9F
-273F:9DB0 E9 00A1 jmp loc_1941 ; (9E54)
-273F:9DB3 loc_1933: ; xref 273F:9DA3
-273F:9DB3 E9 00B4 jmp loc_1942 ; (9E6A)
-273F:9DB6 loc_1934: ; xref 273F:9D97
-273F:9DB6 EB 68 jmp short loc_1939 ; (9E20)
-273F:9DB8 loc_1935: ; xref 273F:9D87
-273F:9DB8 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 373
-
-273F:9DBC 83 E9 64 sub cx,64h
-273F:9DBF 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9DC3 81 EA 0088 sub dx,88h
-273F:9DC7 BB 0001 mov bx,1
-273F:9DCA D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9DCC 0E E8 8118 callf mouse_handler ; (1EE8)
-273F:9DD0 EB A9 jmp short loc_1928 ; (9D7B)
-273F:9DD2 loc_1936: ; xref 273F:9D8B
-273F:9DD2 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9DD6 83 E9 64 sub cx,64h
-273F:9DD9 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9DDD 83 EA 70 sub dx,70h
-273F:9DE0 BB 0001 mov bx,1
-273F:9DE3 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9DE5 0E E8 80FF callf mouse_handler ; (1EE8)
-273F:9DE9 EB 90 jmp short loc_1928 ; (9D7B)
-273F:9DEB loc_1937: ; xref 273F:9D8F
-273F:9DEB 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9DEF 83 E9 64 sub cx,64h
-273F:9DF2 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9DF6 83 EA 58 sub dx,58h
-273F:9DF9 BB 0001 mov bx,1
-273F:9DFC D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9DFE 0E E8 80E6 callf mouse_handler ; (1EE8)
-273F:9E02 E9 FF76 jmp loc_1928 ; (9D7B)
-273F:9E05 loc_1938: ; xref 273F:9D93
-273F:9E05 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9E09 83 E9 64 sub cx,64h
-273F:9E0C 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9E10 81 EA 0088 sub dx,88h
-273F:9E14 BB 0002 mov bx,2
-273F:9E17 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9E19 0E E8 80CB callf mouse_handler ; (1EE8)
-273F:9E1D E9 FF5B jmp loc_1928 ; (9D7B)
-273F:9E20 loc_1939: ; xref 273F:9DB6
-273F:9E20 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9E24 83 E9 64 sub cx,64h
-273F:9E27 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9E2B 83 EA 70 sub dx,70h
-273F:9E2E BB 0002 mov bx,2
-273F:9E31 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9E33 0E E8 80B1 callf mouse_handler ; (1EE8)
-273F:9E37 E9 FF41 jmp loc_1928 ; (9D7B)
-273F:9E3A loc_1940: ; xref 273F:9DAD
-273F:9E3A 8B 0E 6CCA mov cx,word ptr ds:[6CCAh] ; (273F:6CCA=6A26h)
-273F:9E3E 83 E9 64 sub cx,64h
-273F:9E41 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9E45 83 EA 58 sub dx,58h
-273F:9E48 BB 0002 mov bx,2
-273F:9E4B D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9E4D 0E E8 8097 callf mouse_handler ; (1EE8)
-273F:9E51 E9 FF27 jmp loc_1928 ; (9D7B)
-273F:9E54 loc_1941: ; xref 273F:9DB0
-273F:9E54 B9 0014 mov cx,14h
-273F:9E57 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9E5B 83 EA 70 sub dx,70h
-273F:9E5E BB 0001 mov bx,1
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 374
-
-273F:9E61 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9E63 0E E8 8081 callf mouse_handler ; (1EE8)
-273F:9E67 E9 FF11 jmp loc_1928 ; (9D7B)
-273F:9E6A loc_1942: ; xref 273F:9DB3
-273F:9E6A B9 012C mov cx,12Ch
-273F:9E6D 8B 16 6CCC mov dx,word ptr ds:[6CCCh] ; (273F:6CCC=8B33h)
-273F:9E71 83 EA 70 sub dx,70h
-273F:9E74 BB 0001 mov bx,1
-273F:9E77 D1 E1 shl cx,1 ; Shift w/zeros fill
-273F:9E79 0E E8 806B callf mouse_handler ; (1EE8)
-273F:9E7D E9 FEFB jmp loc_1928 ; (9D7B)
- sub_244 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_get_door_blocked proc near
-273F:9E80 8B C3 mov ax,bx
-273F:9E82 E8 D369 call room_exit_hs_get_pointer
-273F:9E85 8A 44 0C mov al, [si+0Ch] ; Get blocked status
-273F:9E88 32 E4 xor ah, ah
-273F:9E8A A3 BA1F mov general_val, ax ; Store it in sequence field list
-273F:9E8D C3 retn
- seq_get_door_blocked endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; bx = Hotspot Id
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_deactivate_hotspot proc near
-273F:9E8E E8 6E57 call get_room_resource_pointer
-273F:9E91 81 FB 7530 cmp bx, START_NONVISUAL_HOTSPOT_ID ; Non-visual hotspot?
-273F:9E95 73 0A jae loc_1943 ; Skip unloading
-273F:9E97 8B 7C 0B mov di,[si+HS_ANIM_OFFSET]
-273F:9E9A 0B FF or di,di ; Is hotspot active?
-273F:9E9C 74 03 jz loc_1943 ; Jump if not
-273F:9E9E E8 73D1 call animation_unload ; Unload hotspot
-273F:9EA1 loc_1943:
-273F:9EA1 C7 44 06 FFFF mov word ptr [si+HS_ROOM_NUM], 0FFFFh
-273F:9EA6 80 4C 03 20 or byte ptr [si+HS_FLAGS1], 20h
-273F:9EAA 81 FB 7530 cmp bx, START_NONVISUAL_HOTSPOT_ID
-273F:9EAE 73 04 jae loc_ret_1944 ; Jump if above or =
-273F:9EB0 C6 44 15 FF mov byte ptr [si+HS_LAYER], 0FFh
-
-273F:9EB4 loc_ret_1944: ; xref 273F:9EAE
-273F:9EB4 C3 retn
- seq_deactivate_hotspot endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9CCE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_disable_hotspot proc near
-273F:9EB5 E8 6E30 call get_room_resource_pointer
-273F:9EB8 80 4C 03 20 or byte ptr [si+3],20h ; ' '
-273F:9EBC C3 retn
- seq_disable_hotspot endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9CCE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_enable_hotspot proc near
-273F:9EBD E8 6E28 call get_room_resource_pointer
-273F:9EC0 80 4C 03 80 or byte ptr [si+3],80h
-273F:9EC4 80 64 03 DF and byte ptr [si+3],0DFh
-273F:9EC8 C3 retn
- seq_enable_hotspot endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9CCE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_add_item_to_inventory proc near
-273F:9EC9 E8 6E1C call get_room_resource_pointer
-273F:9ECC C7 44 06 03E8 mov word ptr [si+HS_ROOM_NUM], PLAYER_HOTSPOT_ID
-273F:9ED1 80 4C 03 80 or byte ptr [si+HS_FLAGS1], 80h
-273F:9ED5 83 06 9835 01 add num_inventory_items, 1
-273F:9EDA 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
-273F:9EDD C3 retn
- seq_add_item_to_inventory endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_check_dropped_desc proc near
-273F:9EDE C7 06 BA1D 0000 mov sequence_result, 0
-273F:9EE4 E8 6E01 call get_room_resource_pointer
-273F:9EE7 3B 4C 06 cmp cx, [si+HSH_DESC_ID_2]
-273F:9EEA 75 06 jne loc_ret_1945 ; Jump if not equal
-273F:9EEC C7 06 BA1D 0001 mov sequence_result, 1
-273F:9EF2 loc_ret_1945: ; xref 273F:9EEA
-273F:9EF2 C3 retn
- seq_check_dropped_desc endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_set_support_offset proc near
-273F:9EF3 E8 6DF2 call get_room_resource_pointer ; Get src from param #1
-273F:9EF6 8B C1 mov ax, cx ; Get param #2
-273F:9EF8 úBB 1380 mov bx, offset support_data_offset_list
-273F:9EFB D1 E0 shl ax, 1 ; Convert to word index
-273F:9EFD 03 D8 add bx, ax
-273F:9EFF 8B 07 mov ax, [bx] ; Get support record offset
-273F:9F01 8B DE mov bx, si
-273F:9F03 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:9F06 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:9F09 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax ; Set support record
-273F:9F0C C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
-273F:9F0F 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:9F12 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:9F15 C3 retn
- seq_set_support_offset endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_method_53 proc near
-273F:9F16 E8 6DCF call get_room_resource_pointer
-273F:9F19 8B DE mov bx, si
-273F:9F1B 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
-273F:9F1E 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:9F21 A1 6CF5 mov ax, [player_hotspot_rec+HS_ROOM_NUM]
-273F:9F24 3B 44 06 cmp ax, [si+HS_ROOM_NUM] ; Hotspot in player's room?
-273F:9F27 74 12 je loc_ret_1948 ; Jump if equal
-273F:9F29 úBE 4F6F mov si, 4F6Fh
-273F:9F2C loc_1946:
-273F:9F2C 3A 04 cmp al, [si]
-273F:9F2E 74 0C je loc_1949 ; Jump if equal
-273F:9F30 83 C6 02 add si, 2
-273F:9F33 F6 04 FF test byte ptr [si], 0FFh
-273F:9F36 75 F4 jnz loc_1946 ; Jump if not zero
-273F:9F38 loc_1947:
-273F:9F38 ú89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-
-273F:9F3B loc_ret_1948:
-273F:9F3B C3 retn
-273F:9F3C loc_1949:
-273F:9F3C 8A 44 01 mov al, [si+1]
-273F:9F3F EB F7 jmp short loc_1947 ; (9F38)
- seq_method_53 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_decrease_inventory_items proc near
-273F:9F41 83 2E 9835 01 sub num_inventory_items, 1
-273F:9F46 C3 retn
- seq_decrease_inventory_items endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_random_to_general proc near
-273F:9F47 51 push cx
-273F:9F48 2B D9 sub bx, cx
-273F:9F4A 53 push bx
-273F:9F4B E8 A51E call random
-273F:9F4E 5B pop bx
-273F:9F4F F7 E3 mul bx ; dx:ax = reg * ax
-273F:9F51 5B pop bx
-273F:9F52 03 D3 add dx,bx
-273F:9F54 89 16 BA1F mov general_val, dx
-273F:9F58 C3 retn
- seq_random_to_general endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_add_actions proc near
-273F:9F59 E8 6D8C call get_room_resource_pointer
-273F:9F5C 09 0C or [si],cx
-273F:9F5E C3 retn
- seq_add_actions endp
-
-273F:9F5F 00 db 0
-273F:9F60 0000 0000 data_442 dd 00000h ; xref 273F:A298, A318
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7657
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9F64 sub_246 proc near
-273F:9F64 B8 000B mov ax,0Bh
- assume ds:data_seg
-273F:9F67 8B 0E 4D00 mov cx,buffer_segment ; (31E4:4D00=0)
-273F:9F6B 51 push cx
-273F:9F6C 33 D2 xor dx,dx ; Zero register
-273F:9F6E E8 63A3 call read_entry ; (0314)
-273F:9F71 5A pop dx
-273F:9F72 33 C9 xor cx,cx ; Zero register
-273F:9F74 B8 0004 mov ax,4
-273F:9F77 80 0E 5668 80 or note_flag, MUSIC_NOTE ; Show music note on screen
-273F:9F7C FF 1E 5662 call dword ptr [play_music_proc]
-273F:9F80 72 26 jc loc_1950 ; Jump if carry Set
-273F:9F82 B8 000C mov ax,0Ch
-273F:9F85 8B 0E 4D00 mov cx,buffer_segment ; (31E4:4D00=0)
-273F:9F89 51 push cx
-273F:9F8A 33 D2 xor dx,dx ; Zero register
-273F:9F8C E8 6385 call read_entry ; (0314)
-273F:9F8F 01 16 4D00 add buffer_segment, dx ; (31E4:4D00=0)
-273F:9F93 5A pop dx
-273F:9F94 33 C9 xor cx,cx ; Zero register
-273F:9F96 B8 0004 mov ax,4
-273F:9F99 FF 1E 5662 call dword ptr [play_music_proc]
-273F:9F9D 80 26 5668 7F and note_flag, MUSIC_NOTE_OFF
-273F:9FA2 80 0E 5660 24 or music_status, 24h
-273F:9FA7 C3 retn
-273F:9FA8 loc_1950: ; xref 273F:9F80
-273F:9FA8 B8 000D mov ax,0Dh
-273F:9FAB 8B 0E 4D00 mov cx,buffer_segment ; (31E4:4D00=0)
-273F:9FAF 33 D2 xor dx,dx ; Zero register
-273F:9FB1 E8 6360 call read_entry ; (0314)
-273F:9FB4 52 push dx
-273F:9FB5 8B 16 4D00 mov dx,buffer_segment ; (31E4:4D00=0)
-273F:9FB9 33 C9 xor cx,cx ; Zero register
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 377
-
-273F:9FBB B8 0001 mov ax,1
-273F:9FBE FF 1E 5662 call dword ptr [play_music_proc]
-273F:9FC2 5A pop dx
-273F:9FC3 73 0B jnc loc_1951
-273F:9FC5 80 26 5668 7F and note_flag, MUSIC_NOTE_OFF
-273F:9FCA 80 0E 5660 14 or music_status, 14h
-273F:9FCF C3 retn
-273F:9FD0 loc_1951: ; xref 273F:9FC3
-273F:9FD0 01 16 4D00 add buffer_segment, dx ; (31E4:4D00=0)
-273F:9FD4 80 26 5668 7F and note_flag, MUSIC_NOTE_OFF
-273F:9FD9 80 0E 5660 05 or music_status, 5
-273F:9FDE C3 retn
- sub_246 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:104D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:9FDF sub_247 proc near
-273F:9FDF 53 push bx
-273F:9FE0 E8 00FB call sub_250 ; (A0DE)
-273F:9FE3 5B pop bx
-273F:9FE4 83 FB 06 cmp bx,6
-273F:9FE7 74 14 je loc_1953 ; Jump if equal
-273F:9FE9 53 push bx
-273F:9FEA B8 0005 mov ax,5
-273F:9FED F7 E3 mul bx ; dx:ax = reg * ax
-273F:9FEF 05 5671 add ax,5671h
-273F:9FF2 8B F0 mov si,ax
-273F:9FF4 8A 1C mov bl,[si]
-273F:9FF6 E8 0136 call sub_251 ; (A12F)
-273F:9FF9 5B pop bx
-273F:9FFA 74 06 jz loc_1954 ; Jump if zero
-
-273F:9FFC loc_ret_1952: ; xref 273F:A011, A02F
-273F:9FFC C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:49E0, 732A, 7F8D, 88A8, 994E, 9B8F, 9BBD
- ; 9BF1, 9C14, A187, A69C
-
-273F:9FFD play_sound:
-273F:9FFD loc_1953: ; xref 273F:9FE7
-273F:9FFD 53 push bx
-273F:9FFE E8 00DD call sub_250 ; (A0DE)
-273F:A001 5B pop bx
-273F:A002 loc_1954: ; xref 273F:9FFA
-273F:A002 B8 0005 mov ax,5
-273F:A005 F7 E3 mul bx ; dx:ax = reg * ax
-273F:A007 05 5671 add ax,5671h
-273F:A00A 8B F0 mov si,ax
-273F:A00C F6 06 1926 FF test data_669, 0FFh
-273F:A011 75 E9 jnz loc_ret_1952 ; Jump if not zero
-273F:A013 8A 4C 02 mov cl,[si+2]
-273F:A016 F6 06 5660 11 test music_status, 11h
-273F:A01B 74 0F jz loc_1955 ; Jump if zero
-273F:A01D D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A01F D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A021 F6 06 5660 10 test music_status, 10h
-273F:A026 74 04 jz loc_1955 ; Jump if zero
-273F:A028 D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A02A D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A02C loc_1955: ; xref 273F:A01B, A026
-273F:A02C 80 E1 03 and cl,3
-273F:A02F 74 CB jz loc_ret_1952 ; Jump if zero
-273F:A031 úBF 5669 mov di,offset data_843 ; (31E4:5669=0)
-273F:A034 33 DB xor bx,bx ; Zero register
-273F:A036 loc_1956: ; xref 273F:A054
-273F:A036 F6 05 FF test byte ptr [di],0FFh
-273F:A039 75 09 jnz loc_1957 ; Jump if not zero
-273F:A03B 80 C7 01 add bh,1
-273F:A03E 3A F9 cmp bh,cl
-273F:A040 73 15 jae loc_1959 ; Jump if above or =
-273F:A042 EB 09 jmp short loc_1958 ; (A04D)
-273F:A044 loc_1957: ; xref 273F:A039
-273F:A044 8B DF mov bx,di
-273F:A046 81 EB 5669 sub bx,5669h
-273F:A04A 80 C3 01 add bl,1
-273F:A04D loc_1958: ; xref 273F:A042
-273F:A04D 83 C7 01 add di,1
-273F:A050 81 FF 5671 cmp di,5671h
-273F:A054 72 E0 jb loc_1956 ; Jump if below
-273F:A056 C3 retn
-273F:A057 loc_1959: ; xref 273F:A040
-273F:A057 32 FF xor bh,bh ; Zero register
-273F:A059 BF 5669 mov di,5669h
-273F:A05C 03 FB add di,bx
-
-273F:A05E locloop_1960: ; xref 273F:A064
-273F:A05E C6 05 01 mov byte ptr [di],1
-273F:A061 83 C7 01 add di,1
-273F:A064 E2 F8 loop locloop_1960 ; Loop if cx > 0
-
-273F:A066 úBF B9C7 mov di, offset data_1121
-273F:A069 B9 000A mov cx,0Ah
-
-273F:A06C locloop_1961: ; xref 273F:A0B7
-273F:A06C F6 45 02 FF test byte ptr [di+2],0FFh
-273F:A070 75 42 jnz loc_1963 ; Jump if not zero
-273F:A072 8A 04 mov al,[si]
-273F:A074 88 05 mov [di],al
-273F:A076 88 5D 01 mov [di+1],bl
-273F:A079 8A 4C 02 mov cl,[si+2]
-273F:A07C F6 06 5660 11 test music_status, 11h
-273F:A081 74 0F jz loc_1962 ; Jump if zero
-273F:A083 D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A085 D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A087 F6 06 5660 10 test music_status, 10h
-273F:A08C 74 04 jz loc_1962 ; Jump if zero
-273F:A08E D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A090 D0 E9 shr cl,1 ; Shift w/zeros fill
-273F:A092 loc_1962: ; xref 273F:A081, A08C
-273F:A092 80 E1 03 and cl,3
-273F:A095 88 4D 02 mov [di+2],cl
-273F:A098 8A 4C 03 mov cl,[si+3]
-273F:A09B 88 4D 03 mov [di+3],cl
-273F:A09E 8A 4C 04 mov cl,[si+4]
-273F:A0A1 88 4D 04 mov [di+4],cl
-273F:A0A4 B4 01 mov ah,1
-273F:A0A6 32 FF xor bh,bh ; Zero register
-273F:A0A8 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A0AC 8A 4C 04 mov cl,[si+4]
-273F:A0AF 8A 1C mov bl,[si]
-273F:A0B1 E9 00DD jmp loc_1977 ; (A191)
-273F:A0B4 loc_1963: ; xref 273F:A070
-273F:A0B4 83 C7 05 add di,5
-273F:A0B7 E2 B3 loop locloop_1961 ; Loop if cx > 0
-
-273F:A0B9 C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:0071
-
-273F:A0BA sub_249:
-273F:A0BA E8 0098 call sub_253 ; (A155)
-273F:A0BD úBE B9C7 mov si, offset data_1121
-273F:A0C0 B9 000A mov cx,0Ah
-
-273F:A0C3 locloop_1964: ; xref 273F:A0DC
-273F:A0C3 F6 44 02 FF test byte ptr [si+2],0FFh
-273F:A0C7 74 10 jz loc_1965 ; Jump if zero
-273F:A0C9 F6 44 03 01 test byte ptr [si+3],1
-273F:A0CD 74 0A jz loc_1965 ; Jump if zero
-273F:A0CF B4 04 mov ah,4
-273F:A0D1 8A 04 mov al,[si]
-273F:A0D3 24 7F and al,7Fh
-273F:A0D5 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A0D9 loc_1965: ; xref 273F:A0C7, A0CD
-273F:A0D9 83 C6 05 add si,5
-273F:A0DC E2 E5 loop locloop_1964 ; Loop if cx > 0
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9FE0, 9FFE, A11A
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- sub_250 proc near
-273F:A0DE úBE B9C7 mov si, offset data_1121
-273F:A0E1 B9 000A mov cx, 0Ah
-
-273F:A0E4 locloop_1966: ; xref 273F:A117
-273F:A0E4 F6 44 02 FF test byte ptr [si+2],0FFh
-273F:A0E8 74 2A jz loc_1968 ; Jump if zero
-273F:A0EA B4 05 mov ah,5
-273F:A0EC 8A 04 mov al,[si]
-273F:A0EE 24 7F and al,7Fh
-273F:A0F0 F9 stc ; Set carry flag
- assume ds:seg_code
-273F:A0F1 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A0F5 73 1D jnc loc_1968 ; Jump if carry=0
-273F:A0F7 51 push cx
-273F:A0F8 8A 4C 02 mov cl,[si+2]
-273F:A0FB 8A 44 01 mov al,[si+1]
-273F:A0FE 32 E4 xor ah,ah ; Zero register
-273F:A100 05 5669 add ax,5669h
-273F:A103 8B F8 mov di,ax
-273F:A105 32 ED xor ch,ch ; Zero register
-
-273F:A107 locloop_1967: ; xref 273F:A10D
-273F:A107 C6 05 00 mov byte ptr [di],0
-273F:A10A 83 C7 01 add di,1
-273F:A10D E2 F8 loop locloop_1967 ; Loop if cx > 0
-
-273F:A10F C6 44 02 00 mov byte ptr [si+2],0
-273F:A113 59 pop cx
-273F:A114 loc_1968: ; xref 273F:A0E8, A0F5
-273F:A114 83 C6 05 add si,5
-273F:A117 E2 CB loop locloop_1966 ; Loop if cx > 0
-
-273F:A119 C3 retn
- sub_250 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
- seq_method_66 proc near
-273F:A11A E8 FFC1 call sub_250 ; (A0DE)
-273F:A11D C7 06 BA1F 0000 mov general_val, 0
-273F:A123 E8 0009 call sub_251 ; (A12F)
-273F:A126 74 06 jz loc_ret_1969 ; Jump if zero
-273F:A128 C7 06 BA1F 0001 mov general_val, 1
-
-273F:A12E loc_ret_1969: ; xref 273F:A126
-273F:A12E C3 retn
- seq_method_66 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:9FF6, A123, A192
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-273F:A12F sub_251:
-273F:A12F úBE B9C7 mov si, offset data_1121
-273F:A132 B9 000A mov cx,0Ah
-
-273F:A135 locloop_1970: ; xref 273F:A142
-273F:A135 F6 44 02 FF test byte ptr [si+2],0FFh
-273F:A139 74 04 jz loc_1971 ; Jump if zero
-273F:A13B 38 1C cmp [si],bl
-273F:A13D 74 08 je loc_1972 ; Jump if equal
-273F:A13F loc_1971: ; xref 273F:A139
-273F:A13F 83 C6 05 add si,5
-273F:A142 E2 F1 loop locloop_1970 ; Loop if cx > 0
-
-273F:A144 33 F6 xor si,si ; Zero register
-273F:A146 C3 retn
-273F:A147 loc_1972: ; xref 273F:A13D
-273F:A147 0B F6 or si,si ; Zero ?
-273F:A149 C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:A180, A18D
-
-273F:A14A sub_252:
-273F:A14A B4 04 mov ah,4
-273F:A14C 8A C3 mov al,bl
-273F:A14E 24 7F and al,7Fh
-273F:A150 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A154 C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:A0BA
-
-273F:A155 sub_253:
-273F:A155 A1 9832 mov ax, room_number
-273F:A158 E8 6B8F call get_room_resource_pointer2
-273F:A15B 8A 44 17 mov al, [si+17h]
-273F:A15E 3A 06 BAB9 cmp al, script_val_88
-273F:A162 74 1F je loc_ret_1975 ; Jump if equal
-273F:A164 A2 BAB9 mov script_val_88, al
-273F:A167 3C 01 cmp al,1
-273F:A169 72 12 jb loc_1974 ; Jump if below
-273F:A16B 74 17 jz loc_1976 ; Jump if zero
-273F:A16D 3C 03 cmp al,3
-273F:A16F 72 04 jb loc_1973 ; Jump if below
-273F:A171 74 0A jz loc_1974 ; Jump if zero
-273F:A173 EB 08 jmp short loc_1974 ; (A17D)
-273F:A175 loc_1973: ; xref 273F:A16F
-273F:A175 33 DB xor bx, bx ; Zero register
-273F:A177 B9 000F mov cx, 0Fh
-273F:A17A E8 0014 call sub_254 ; (A191)
-273F:A17D loc_1974: ; xref 273F:A169, A171, A173
-273F:A17D BB 0001 mov bx,1
-273F:A180 E8 FFC7 call sub_252 ; (A14A)
-
-273F:A183 loc_ret_1975: ; xref 273F:A162
-273F:A183 C3 retn
-273F:A184 loc_1976: ; xref 273F:A16B
-273F:A184 BB 0002 mov bx,2
-273F:A187 E8 FE73 call play_sound ; (9FFD)
-273F:A18A BB 0021 mov bx,21h
-273F:A18D E8 FFBA call sub_252 ; (A14A)
-273F:A190 C3 retn
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:A17A
-
-273F:A191 sub_254:
-273F:A191 loc_1977: ; xref 273F:A0B1
-273F:A191 51 push cx
-273F:A192 E8 FF9A call sub_251 ; (A12F)
-273F:A195 59 pop cx
-273F:A196 74 21 jz loc_ret_1979 ; Jump if zero
-273F:A198 F6 06 5660 01 test music_status, 1
-273F:A19D 75 1A jnz loc_ret_1979 ; Jump if not zero
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ;
- ; Called from: 273F:A259
-
-273F:A19F sub_255:
-273F:A19F 8A D9 mov bl,cl
-273F:A1A1 8A 4C 02 mov cl,[si+2]
-273F:A1A4 8A 44 01 mov al,[si+1]
-273F:A1A7 32 ED xor ch,ch ; Zero register
-
-273F:A1A9 locloop_1978: ; xref 273F:A1B7
-273F:A1A9 B4 06 mov ah,6
-273F:A1AB 50 push ax
-273F:A1AC 53 push bx
-273F:A1AD 51 push cx
- assume ds:seg_code
-273F:A1AE FF 1E 5662 call dword ptr [play_music_proc]
-273F:A1B2 59 pop cx
-273F:A1B3 5B pop bx
-273F:A1B4 58 pop ax
-273F:A1B5 04 01 add al,1
-273F:A1B7 E2 F0 loop locloop_1978 ; Loop if cx > 0
-
-
-273F:A1B9 loc_ret_1979: ; xref 273F:A196, A19D
-273F:A1B9 C3 retn
- sub_247 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A3CE, A5A3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A1BA sub_256 proc near
- assume ds:data_seg
-273F:A1BA F6 06 5660 11 test music_status, 11h
-273F:A1BF 75 1F jnz loc_1982 ; Jump if not zero
-273F:A1C1 33 C0 xor ax,ax ; Zero register
-273F:A1C3 E8 A823 call sleep ; (49E9)
-273F:A1C6 B1 40 mov cl,40h ; '@'
-273F:A1C8 loc_1980: ; xref 273F:A1DE
-273F:A1C8 B8 0608 mov ax,608h
-273F:A1CB 8A D9 mov bl,cl
-273F:A1CD loc_1981: ; xref 273F:A1D5
-273F:A1CD 50 push ax
-273F:A1CE FF 1E 5662 call dword ptr [play_music_proc]
-273F:A1D2 58 pop ax
-273F:A1D3 2C 01 sub al,1
-273F:A1D5 73 F6 jnc loc_1981 ; Jump if carry=0
-273F:A1D7 8B C2 mov ax,dx
-273F:A1D9 E8 A80D call sleep ; (49E9)
-273F:A1DC D0 E9 shr cl,1 ; Shift w/zeros fill
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 383
-
-273F:A1DE 75 E8 jnz loc_1980 ; Jump if not zero
-273F:A1E0 loc_1982: ; xref 273F:A1BF
-273F:A1E0 E8 0010 call sub_257 ; (A1F3)
-273F:A1E3 B8 0608 mov ax,608h
-273F:A1E6 B3 80 mov bl,80h
-273F:A1E8 loc_1983: ; xref 273F:A1F0
-273F:A1E8 50 push ax
-273F:A1E9 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A1ED 58 pop ax
-273F:A1EE 2C 01 sub al,1
-273F:A1F0 73 F6 jnc loc_1983 ; Jump if carry=0
-273F:A1F2 C3 retn
- sub_256 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:4067, 710D, 8F60, 9336, 9392, A1E0, A436
- ; A47D, A58F, A5AC, A654, A6D6, A8E6, A977
- ; A98D
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A1F3 sub_257 proc near
-273F:A1F3 06 push es
-273F:A1F4 57 push di
-273F:A1F5 51 push cx
-273F:A1F6 B4 03 mov ah,3
-273F:A1F8 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A1FC úBF 5669 mov di,offset data_843 ; (31E4:5669=0)
-273F:A1FF 1E push ds
-273F:A200 07 pop es
-273F:A201 B9 0008 mov cx,8
-273F:A204 32 C0 xor al,al ; Zero register
-273F:A206 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
-273F:A208 59 pop cx
-273F:A209 5F pop di
-273F:A20A 07 pop es
-273F:A20B C3 retn
- sub_257 endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:1061
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- play_music proc near
-273F:A20C B8 0005 mov ax,5
-273F:A20F F7 E3 mul bx ; dx:ax = reg * ax
-273F:A211 05 5671 add ax,5671h
-273F:A214 8B F0 mov si,ax
-273F:A216 8A 04 mov al,[si]
-273F:A218 24 7F and al,7Fh
-273F:A21A B4 04 mov ah,4
-273F:A21C FF 1E 5662 call dword ptr [play_music_proc]
-273F:A220 C3 retn
- play_music endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8FE1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A221 sub_259 proc near
-273F:A221 úBE B9C7 mov si, offset data_1121
-273F:A224 B9 000A mov cx,0Ah
-
-273F:A227 locloop_1984: ; xref 273F:A260
-273F:A227 F6 44 02 FF test byte ptr [si+2],0FFh
-273F:A22B 74 30 jz loc_1986 ; Jump if zero
-273F:A22D F6 44 03 02 test byte ptr [si+3],2
-273F:A231 74 2A jz loc_1986 ; Jump if zero
-273F:A233 51 push cx
-273F:A234 8A 44 01 mov al,[si+1]
-273F:A237 32 E4 xor ah,ah ; Zero register
-273F:A239 05 5669 add ax,5669h
-273F:A23C 8B F8 mov di,ax
-273F:A23E 8A 4C 02 mov cl,[si+2]
-273F:A241 32 ED xor ch,ch ; Zero register
-
-273F:A243 locloop_1985: ; xref 273F:A249
-273F:A243 C6 05 01 mov byte ptr [di],1
-273F:A246 83 C7 01 add di,1
-273F:A249 E2 F8 loop locloop_1985 ; Loop if cx > 0
-
-273F:A24B B4 01 mov ah,1
-273F:A24D 8A 04 mov al,[si]
-273F:A24F 8A 5C 01 mov bl,[si+1]
-273F:A252 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A256 8A 4C 04 mov cl,[si+4]
-273F:A259 E8 FF43 call sub_255 ; (A19F)
-273F:A25C 59 pop cx
-273F:A25D loc_1986: ; xref 273F:A22B, A231
-273F:A25D 83 C6 05 add si,5
-273F:A260 E2 C5 loop locloop_1984 ; Loop if cx > 0
-
-273F:A262 C3 retn
- sub_259 endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:8FE1
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- music_proc_unknown proc far
-
-273F:A263 1E push ds
-273F:A264 51 push cx
-273F:A265 2E: 8B 0E 9F62 mov cx,word ptr cs:data_442+2 ; (273F:9F62=0)
-273F:A26A 8E D9 mov ds,cx
-273F:A26C 04 01 add al,1
-273F:A26E 80 FC 01 cmp ah,1
-273F:A271 72 45 jb loc_1992 ; Jump if below
-273F:A273 74 2A jz loc_1989 ; Jump if zero
-273F:A275 80 FC 03 cmp ah,3
-273F:A278 72 1E jb loc_1988 ; Jump if below
-273F:A27A 74 0F jz loc_1987 ; Jump if zero
-273F:A27C 80 FC 05 cmp ah,5
-273F:A27F 72 0A jb loc_1987 ; Jump if below
-273F:A281 75 35 jnz loc_1992 ; Jump if not zero
-273F:A283 3A 06 0009 cmp al,byte ptr ds:data_4e+1 ; (0000:0009=0)
-273F:A287 74 21 je loc_1990 ; Jump if equal
-273F:A289 EB 2D jmp short loc_1992 ; (A2B8)
-273F:A28B loc_1987: ; xref 273F:A27A, A27F
-273F:A28B C6 06 000B FF mov byte ptr ds:data_6e+1,0FFh ; (0000:000B=0C8h)
-273F:A290 C7 06 0008 00FF mov word ptr ds:data_4e,0FFh ; (0000:0008=30h)
-273F:A296 EB 12 jmp short loc_1990 ; (A2AA)
-273F:A298 loc_1988: ; xref 273F:A278
-273F:A298 2E: FF 1E 9F60 call cs:data_442 ; (273F:9F60=0)
-273F:A29D EB 0B jmp short loc_1990 ; (A2AA)
-273F:A29F loc_1989: ; xref 273F:A273
-273F:A29F 80 E4 7F and ah,7Fh
-273F:A2A2 80 FF 01 cmp bh,1
-273F:A2A5 74 07 je loc_1991 ; Jump if equal
-273F:A2A7 A2 000A mov ds:data_6e,al ; (0000:000A=0)
-273F:A2AA loc_1990: ; xref 273F:A287, A296, A29D, A2B6
-273F:A2AA ú59 pop cx
-273F:A2AB 1F pop ds
-273F:A2AC F8 clc ; Clear carry flag
-273F:A2AD CB retf ; Return far
-273F:A2AE loc_1991: ; xref 273F:A2A5
-273F:A2AE A2 0008 mov byte ptr ds:[8],al ; (273F:0008=0B8h)
-273F:A2B1 C6 06 0009 00 mov byte ptr ds:[9],0 ; (273F:0009=0FCh)
-273F:A2B6 EB F2 jmp short loc_1990 ; (A2AA)
-273F:A2B8 loc_1992: ; xref 273F:A271, A281, A289
-273F:A2B8 59 pop cx
-273F:A2B9 1F pop ds
-273F:A2BA F9 stc ; Set carry flag
-273F:A2BB CB retf ; Return far
-
- music_proc_unknown endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:7654
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A2BC show_introduction proc near
-273F:A2BC B8 0030 mov ax,30h ; Load MIDI entry #48
-273F:A2BF E8 D8A5 call read_into_buffer_2
- assume ds:data_seg
-273F:A2C2 A3 5782 mov misc_segment, ax ; (31E4:5782=0)
-273F:A2C5 8B D0 mov dx,ax
-273F:A2C7 B8 0004 mov ax,4
-273F:A2CA 33 C9 xor cx,cx ; Zero register
-273F:A2CC 80 0E 5668 80 or note_flag, MUSIC_NOTE ; Show music note on screen
-273F:A2D1 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A2D5 72 07 jc loc_1993 ; Jump if carry Set
-273F:A2D7 80 0E 5660 24 or music_status, 24h
-273F:A2DC EB 57 jmp short loc_1995 ; (A335)
-273F:A2DE loc_1993:
-273F:A2DE B8 0031 mov ax,31h ; Load MIDI entry #49
-273F:A2E1 8B 0E 5782 mov cx,misc_segment ; (31E4:5782=0)
-273F:A2E5 89 0E 4D00 mov buffer_segment, cx ; (31E4:4D00=0)
-273F:A2E9 E8 D87B call read_into_buffer_2 ; (7B67)
-273F:A2EC 8B D0 mov dx,ax
-273F:A2EE B8 0001 mov ax,1
-273F:A2F1 33 C9 xor cx,cx ; Zero register
-273F:A2F3 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A2F7 73 37 jnc loc_1994 ; Jump if carry=0
-
-273F:A2F9 8B 0E 5664 mov cx,word ptr play_music_proc+2
-273F:A2FD 33 D2 xor dx,dx ; Zero register
-273F:A2FF B8 000F mov ax,0Fh
-273F:A302 E8 600F call read_entry ; (0314)
-273F:A305 03 16 5664 add dx,word ptr play_music_proc+2
-273F:A309 89 16 4D00 mov buffer_segment, dx ; (31E4:4D00=0)
-273F:A30D 89 16 5782 mov misc_segment, dx
-273F:A311 A1 5664 mov ax,word ptr play_music_proc+2 ; (31E4:5664=273Fh)
-273F:A314 2E: A3 9F62 mov word ptr cs:data_442+2,ax ; (273F:9F62=0)
-273F:A318 2E: C7 06 9F60 0000 mov word ptr cs:data_442,0 ; (273F:9F60=0)
-273F:A31F C7 06 5662 A263 mov play_music_proc, offset music_proc_unknown
-273F:A325 8C 0E 5664 mov word ptr play_music_proc+2,cs
-
-273F:A329 80 0E 5660 14 or music_status, 14h
-273F:A32E EB 05 jmp short loc_1995 ; (A335)
-273F:A330 loc_1994:
-273F:A330 80 0E 5660 05 or music_status, 5
-273F:A335 loc_1995: ; xref 273F:A2DC, A32E
-273F:A335 80 26 5668 7F and note_flag, MUSIC_NOTE_OFF
-273F:A33A 8B 0E 5782 mov cx,misc_segment ; (31E4:5782=0)
-273F:A33E 87 0E 4D00 xchg buffer_segment, cx ; (31E4:4D00=0)
-273F:A342 89 0E 5782 mov misc_segment, cx
-273F:A346 89 0E 5780 mov palette_segment, cx
-
-273F:A34A B8 0032 mov ax,32h ; Load set of sub-palettes
-273F:A34D 33 D2 xor dx,dx
-273F:A34F E8 5FC2 call read_entry
-273F:A352 01 16 5782 add misc_segment, dx
-
-; Here it uses a new method of displaying the picture. After having loaded
-; Entry Id 32h into the buffer segment, the "Kingdom was at peace" screen will be
-; decoded into memory and then copied onto the screen by the [copy_screen_proc]
-
-273F:A356 B8 0040 mov ax,40h ; "The kingdom was at peace"
-273F:A359 E8 0457 call load_pic_with_animation
-273F:A35C FF 16 0766 call word ptr [fade_out_proc]
-
-273F:A360 B8 0100 mov ax,100h
-273F:A363 BB 0100 mov bx,100h
-273F:A366 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A36A 33 C0 xor ax,ax ; Zero register
-273F:A36C E8 0519 call pause_with_kbd_mouse_break
-273F:A36F FF 16 077E call word ptr [copy_screen_proc]
-273F:A373 33 C0 xor ax,ax ; Install sub-palette #0
-273F:A375 E8 04C1 call install_palette
-273F:A378 E8 04F3 call screen_fade_in
-273F:A37B C6 06 55A0 00 mov byte ptr data_835,0 ; (31E4:55A0=0)
-273F:A380 B8 035A mov ax,35Ah
-273F:A383 E8 0502 call pause_with_kbd_mouse_break
-273F:A386 73 02 jnc loc_1996 ; Jump if full timeout occurred
-273F:A388 74 76 jz loc_2005 ; Jump if Escape pressed
-273F:A38A loc_1996: ; xref 273F:A386
-
-; Loop for animation of showing peasants working in the field screen
-
-273F:A38A B9 004C mov cx,4Ch ; Number of animation frames
-
-273F:A38D locloop_1997: ; xref 273F:A3A2
-273F:A38D B8 0007 mov ax,7
-273F:A390 E8 04F5 call pause_with_kbd_mouse_break
-273F:A393 73 05 jnc loc_1998 ; Jump if full timeout occurred
-273F:A395 75 0F jnz loc_1999 ; Jump if Escape not pressed
-273F:A397 E9 0202 jmp loc_2019
-273F:A39A loc_1998: ; xref 273F:A393
-273F:A39A 57 push di
-273F:A39B 51 push cx
-273F:A39C FF 16 0780 call word ptr [pic_decode_proc]
-273F:A3A0 59 pop cx
-273F:A3A1 5F pop di
-273F:A3A2 E2 E9 loop locloop_1997 ; Loop if cx > 0
-
-273F:A3A4 EB 15 jmp short loc_2001 ; (A3BB)
-273F:A3A6 loc_1999: ; xref 273F:A395
-273F:A3A6 E8 04B6 call fade_out
-
-273F:A3A9 locloop_2000: ; xref 273F:A3AF
-273F:A3A9 51 push cx
-273F:A3AA FF 16 0780 call word ptr [pic_decode_proc]
-273F:A3AE 59 pop cx
-273F:A3AF E2 F8 loop locloop_2000 ; Loop if cx > 0
-
-273F:A3B1 B8 0001 mov ax,1
-273F:A3B4 E8 0482 call install_palette
-273F:A3B7 FF 16 0760 call word ptr [fade_in_proc]
-273F:A3BB loc_2001: ; xref 273F:A3A4
-273F:A3BB B8 0042 mov ax,42h ; Cliff overhang image
-273F:A3BE E8 03F2 call load_pic_with_animation
-273F:A3C1 B8 0001 mov ax,1
-273F:A3C4 E8 0472 call install_palette
-273F:A3C7 FF 16 0762 call [set_lower_palette_proc]
-273F:A3CB BA 0014 mov dx,14h
-273F:A3CE E8 FDE9 call sub_256 ; (A1BA)
-273F:A3D1 B8 0064 mov ax,64h
-273F:A3D4 E8 04B1 call pause_with_kbd_mouse_break
-273F:A3D7 73 02 jnc loc_2002 ; Jump if carry=0
-273F:A3D9 74 25 jz loc_2005 ; Jump if zero
-273F:A3DB loc_2002: ; xref 273F:A3D7
-273F:A3DB B8 0101 mov ax,101h
-273F:A3DE BB 0100 mov bx,100h
-273F:A3E1 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A3E5 B8 00C8 mov ax,0C8h
-273F:A3E8 E8 049D call pause_with_kbd_mouse_break
-273F:A3EB 73 02 jnc loc_2003 ; Jump if carry=0
-273F:A3ED 74 11 jz loc_2005 ; Jump if zero
-273F:A3EF loc_2003: ; xref 273F:A3EB
-273F:A3EF FF 16 077E call word ptr [copy_screen_proc]
-273F:A3F3 B9 0064 mov cx,64h
-
-273F:A3F6 locloop_2004: ; xref 273F:A409
-273F:A3F6 B8 0007 mov ax,7
-273F:A3F9 E8 048C call pause_with_kbd_mouse_break
-273F:A3FC 73 05 jnc loc_2006 ; Jump if carry=0
-273F:A3FE 75 0D jnz loc_2007 ; Jump if not zero
-273F:A400 loc_2005: ; xref 273F:A388, A3D9, A3ED, A434
-273F:A400 E9 0199 jmp loc_2019 ; (A59C)
-273F:A403 loc_2006: ; xref 273F:A3FC
-273F:A403 51 push cx
-273F:A404 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A408 59 pop cx
-273F:A409 E2 EB loop locloop_2004 ; Loop if cx > 0
-
-273F:A40B EB 0F jmp short loc_2009 ; (A41C)
-273F:A40D loc_2007: ; xref 273F:A3FE
-273F:A40D E8 044F call fade_out
-
-273F:A410 locloop_2008: ; xref 273F:A416
-273F:A410 51 push cx
-273F:A411 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A415 59 pop cx
-273F:A416 E2 F8 loop locloop_2008 ; Loop if cx > 0
-
-273F:A418 FF 16 0760 call word ptr [fade_in_proc]
-273F:A41C loc_2009: ; xref 273F:A40B
-273F:A41C B8 0044 mov ax,44h
-273F:A41F E8 0391 call load_pic_with_animation
-273F:A422 B8 0002 mov ax,2
-273F:A425 E8 0411 call install_palette
-273F:A428 FF 16 0762 call [set_lower_palette_proc]
-273F:A42C B8 05FA mov ax,5FAh
-273F:A42F E8 0456 call pause_with_kbd_mouse_break
-273F:A432 73 02 jnc loc_2010 ; Jump if carry=0
-273F:A434 74 CA jz loc_2005 ; Jump if zero
-273F:A436 loc_2010: ; xref 273F:A432
-273F:A436 E8 FDBA call sub_257 ; (A1F3)
-273F:A439 B8 0102 mov ax,102h
-273F:A43C BB 0100 mov bx,100h
-273F:A43F FF 1E 5662 call dword ptr [play_music_proc]
-273F:A443 FF 16 077E call word ptr [copy_screen_proc]
-273F:A447 B9 00F3 mov cx,0F3h
-
-273F:A44A locloop_2011: ; xref 273F:A45D
-273F:A44A B8 0004 mov ax,4
-273F:A44D E8 0438 call pause_with_kbd_mouse_break
-273F:A450 73 05 jnc loc_2012 ; Jump if carry=0
-273F:A452 75 0B jnz loc_2013 ; Jump if not zero
-273F:A454 E9 0145 jmp loc_2019 ; (A59C)
-273F:A457 loc_2012: ; xref 273F:A450
-273F:A457 51 push cx
-273F:A458 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A45C 59 pop cx
-273F:A45D E2 EB loop locloop_2011 ; Loop if cx > 0
-
-273F:A45F loc_2013: ; xref 273F:A452
-273F:A45F B8 0024 mov ax,24h
-273F:A462 E8 034E call load_pic_with_animation
-273F:A465 FF 16 077E call word ptr [copy_screen_proc]
-273F:A469 33 C0 xor ax,ax ; Zero register
-273F:A46B E8 041A call pause_with_kbd_mouse_break
-273F:A46E B8 0003 mov ax,3
-273F:A471 E8 03C5 call install_palette
-273F:A474 E8 0404 call set_lower_palette
-273F:A477 B8 0328 mov ax,328h
-273F:A47A E8 040B call pause_with_kbd_mouse_break
-273F:A47D E8 FD73 call sub_257 ; (A1F3)
-273F:A480 B8 0103 mov ax,103h
-273F:A483 BB 0100 mov bx,100h
-273F:A486 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A48A B8 0046 mov ax,46h
-273F:A48D E8 0323 call load_pic_with_animation
-273F:A490 B8 031E mov ax,31Eh
-273F:A493 E8 03F2 call pause_with_kbd_mouse_break
-273F:A496 FF 16 077E call word ptr [copy_screen_proc]
-273F:A49A B9 007C mov cx,7Ch
-
-273F:A49D locloop_2014: ; xref 273F:A4B0
-273F:A49D B8 0007 mov ax,7
-273F:A4A0 E8 03E5 call pause_with_kbd_mouse_break
-273F:A4A3 73 05 jnc loc_2015 ; Jump if carry=0
-273F:A4A5 75 0B jnz loc_2016 ; Jump if not zero
-273F:A4A7 E9 00F2 jmp loc_2019 ; (A59C)
-273F:A4AA loc_2015: ; xref 273F:A4A3
-273F:A4AA 51 push cx
-273F:A4AB FF 16 0780 call word ptr [pic_decode_proc]
-273F:A4AF 59 pop cx
-273F:A4B0 E2 EB loop locloop_2014 ; Loop if cx > 0
-
-273F:A4B2 loc_2016: ; xref 273F:A4A5
-273F:A4B2 B8 0048 mov ax,48h
-273F:A4B5 E8 02FB call load_pic_with_animation
-273F:A4B8 E8 03A4 call fade_out
-273F:A4BB B8 0004 mov ax,4
-273F:A4BE E8 0378 call install_palette
-273F:A4C1 FF 16 077E call word ptr [copy_screen_proc]
-273F:A4C5 B8 0063 mov ax,63h
-273F:A4C8 E8 03BD call pause_with_kbd_mouse_break
-273F:A4CB E8 03AD call set_lower_palette
-273F:A4CE B8 0054 mov ax,54h
-273F:A4D1 E8 03B4 call pause_with_kbd_mouse_break
-273F:A4D4 E8 0388 call fade_out
-273F:A4D7 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A4DB B8 005D mov ax,5Dh
-273F:A4DE E8 03A7 call pause_with_kbd_mouse_break
-273F:A4E1 E8 0397 call set_lower_palette
-273F:A4E4 B8 0052 mov ax,52h
-273F:A4E7 E8 039E call pause_with_kbd_mouse_break
-273F:A4EA E8 0372 call fade_out
-273F:A4ED FF 16 0780 call word ptr [pic_decode_proc]
-273F:A4F1 B8 003F mov ax,3Fh
-273F:A4F4 E8 0391 call pause_with_kbd_mouse_break
-273F:A4F7 E8 0381 call set_lower_palette
-273F:A4FA B8 0057 mov ax,57h
-273F:A4FD E8 0388 call pause_with_kbd_mouse_break
-273F:A500 E8 035C call fade_out
-273F:A503 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A507 B8 0059 mov ax,59h
-273F:A50A E8 037B call pause_with_kbd_mouse_break
-273F:A50D E8 036B call set_lower_palette
-273F:A510 B8 005A mov ax,5Ah
-273F:A513 E8 0372 call pause_with_kbd_mouse_break
-273F:A516 E8 0346 call fade_out
-273F:A519 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A51D B8 0035 mov ax,35h
-273F:A520 E8 0365 call pause_with_kbd_mouse_break
-273F:A523 E8 0355 call set_lower_palette
-273F:A526 B8 0058 mov ax,58h
-273F:A529 E8 035C call pause_with_kbd_mouse_break
-273F:A52C E8 0330 call fade_out
-273F:A52F FF 16 0780 call word ptr [pic_decode_proc]
-273F:A533 B8 005B mov ax,5Bh
-273F:A536 E8 034F call pause_with_kbd_mouse_break
-273F:A539 E8 033F call set_lower_palette
-273F:A53C B8 0059 mov ax,59h
-273F:A53F E8 0346 call pause_with_kbd_mouse_break
-273F:A542 FF 16 0766 call word ptr [fade_out_proc]
-
-273F:A546 B8 0021 mov ax,21h
-273F:A549 E8 957B call read_palette ; (3AC7)
-273F:A54C B8 0022 mov ax,22h
-273F:A54F E8 0261 call load_pic_with_animation
-273F:A552 FF 16 077E call word ptr [copy_screen_proc]
-273F:A556 B8 A000 mov ax, VGA_SEGMENT
-273F:A559 8E C0 mov es,ax
-273F:A55B úBF F000 mov di,data_1448e ; (A000:F000=0)
-273F:A55E B9 0500 mov cx,500h
-273F:A561 33 C0 xor ax,ax ; Zero register
-273F:A563 F3/ AB rep stosw ; Rep when cx >0 Store ax to es:[di]
-273F:A565 FF 16 0760 call word ptr [fade_in_proc]
-273F:A569 33 C0 xor ax,ax ; Zero register
-273F:A56B E8 031A call pause_with_kbd_mouse_break
-273F:A56E B8 0384 mov ax,384h
-273F:A571 E8 0314 call pause_with_kbd_mouse_break
-273F:A574 72 19 jc loc_2018 ; Jump if carry Set
-273F:A576 F6 06 5660 10 test music_status, 10h
-273F:A57B 75 12 jnz loc_2018 ; Jump if not zero
-273F:A57D loc_2017: ; xref 273F:A58D
-273F:A57D B8 0005 mov ax,5
-273F:A580 E8 0305 call pause_with_kbd_mouse_break
-273F:A583 72 0A jc loc_2018 ; Jump if carry Set
-273F:A585 F9 stc ; Set carry flag
-273F:A586 B8 0503 mov ax,503h
-273F:A589 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A58D 73 EE jnc loc_2017 ; Jump if carry=0
-273F:A58F loc_2018: ; xref 273F:A574, A57B, A583
-273F:A58F E8 FC61 call sub_257 ; (A1F3)
-273F:A592 80 26 5660 FB and music_status, 0FBh
-273F:A597 FF 16 0766 call word ptr [fade_out_proc]
-273F:A59B C3 retn
-273F:A59C loc_2019: ; xref 273F:A397, A400, A454, A4A7
-273F:A59C FF 16 0766 call word ptr [fade_out_proc]
-273F:A5A0 BA 0014 mov dx,14h
-273F:A5A3 E8 FC14 call sub_256 ; (A1BA)
-273F:A5A6 80 26 5660 FB and music_status, 0FBh
-273F:A5AB C3 retn
- show_introduction endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0033
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- display_chute_animation proc near
-273F:A5AC E8 FC44 call sub_257 ; (A1F3)
-273F:A5AF A1 4CFE mov ax, data_814
-273F:A5B2 A3 5782 mov misc_segment, ax
-273F:A5B5 E8 79A7 call show_disk_cursor
-273F:A5B8 B8 404C mov ax,404Ch
-273F:A5BB E8 9509 call read_palette ; (3AC7)
-273F:A5BE B8 404D mov ax,404Dh
-273F:A5C1 E8 01EF call load_pic_with_animation
-273F:A5C4 80 0E 11D0 01 or menubar_state, 1 ; (31E4:11D0=3)
-273F:A5C9 FF 16 075E call word ptr [show_cursor_proc]
-273F:A5CD FF 16 077E call word ptr [copy_screen_proc]
-273F:A5D1 E8 029A call sub_267 ; (A86E)
-273F:A5D4 53 push bx
-273F:A5D5 B8 0140 mov ax,140h
-273F:A5D8 33 DB xor bx,bx ; Zero register
-273F:A5DA FF 1E 5662 call dword ptr [play_music_proc]
-273F:A5DE 5B pop bx
-273F:A5DF B9 0018 mov cx,18h
-
-273F:A5E2 locloop_2020: ; xref 273F:A5EE
-273F:A5E2 51 push cx
-273F:A5E3 B8 0006 mov ax,6
-273F:A5E6 E8 A400 call sleep
-273F:A5E9 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A5ED 59 pop cx
-273F:A5EE E2 F2 loop locloop_2020 ; Loop if cx > 0
-
-273F:A5F0 B8 404F mov ax,404Fh
-273F:A5F3 E8 01BD call load_pic_with_animation
-273F:A5F6 FF 16 0764 call [empty_palette_proc]
-273F:A5FA B9 0004 mov cx,4
-
-273F:A5FD locloop_2021: ; xref 273F:A620
-273F:A5FD 51 push cx
-273F:A5FE FF 16 077E call word ptr [copy_screen_proc]
-273F:A602 59 pop cx
-273F:A603 83 F9 04 cmp cx,4
-273F:A606 75 05 jne loc_2022 ; Jump if not equal
-273F:A608 51 push cx
-273F:A609 E8 0262 call sub_267 ; (A86E)
-273F:A60C 59 pop cx
-273F:A60D loc_2022: ; xref 273F:A606
-273F:A60D 51 push cx
-273F:A60E B9 000B mov cx,0Bh
-
-273F:A611 locloop_2023: ; xref 273F:A61D
-273F:A611 51 push cx
-273F:A612 B8 0005 mov ax,5
-273F:A615 E8 A3D1 call sleep ; (49E9)
-273F:A618 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A61C 59 pop cx
-273F:A61D E2 F2 loop locloop_2023 ; Loop if cx > 0
-
-273F:A61F 59 pop cx
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 392
-
-273F:A620 E2 DB loop locloop_2021 ; Loop if cx > 0
-
-273F:A622 FF 16 0764 call [empty_palette_proc]
-273F:A626 B8 4051 mov ax,4051h
-273F:A629 E8 0187 call load_pic_with_animation
-273F:A62C FF 16 077E call word ptr [copy_screen_proc]
-273F:A630 E8 0248 call set_lower_palette
-273F:A633 B9 0006 mov cx,6
-
-273F:A636 locloop_2024: ; xref 273F:A642
-273F:A636 51 push cx
-273F:A637 B8 0006 mov ax,6
-273F:A63A E8 A3AC call sleep ; (49E9)
-273F:A63D FF 16 0780 call word ptr [pic_decode_proc]
-273F:A641 59 pop cx
-273F:A642 E2 F2 loop locloop_2024 ; Loop if cx > 0
-
-273F:A644 FF 16 0766 call word ptr [fade_out_proc]
-273F:A648 80 26 11D0 FE and menubar_state, 0FEh ; (31E4:11D0=3)
-273F:A64D FF 16 075E call word ptr [show_cursor_proc]
-273F:A651 E8 D440 call load_resources
-273F:A654 E8 FB9C call sub_257 ; (A1F3)
-273F:A657 C6 06 BAB9 01 mov byte ptr script_val_88, 1
-273F:A65C C3 retn
- display_chute_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0153
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A65D skorl_knockout proc near
-273F:A65D FF 16 0766 call word ptr [fade_out_proc]
-273F:A661 E8 78FB call show_disk_cursor
-273F:A664 A1 4CFE mov ax, data_814
-273F:A667 A3 5782 mov misc_segment, ax
-273F:A66A B8 4060 mov ax,4060h
-273F:A66D E8 9457 call read_palette ; (3AC7)
-273F:A670 B8 4061 mov ax,4061h
-273F:A673 E8 013D call load_pic_with_animation
-273F:A676 80 0E 11D0 01 or menubar_state, 1 ; (31E4:11D0=3)
-273F:A67B FF 16 075E call word ptr [show_cursor_proc]
-273F:A67F FF 16 077E call word ptr [copy_screen_proc]
-273F:A683 E8 01E8 call sub_267 ; (A86E)
-273F:A686 B9 0018 mov cx,18h
-
-273F:A689 locloop_2025: ; xref 273F:A6A8
-273F:A689 51 push cx
-273F:A68A B8 0004 mov ax,4
-273F:A68D E8 A359 call sleep ; (49E9)
-273F:A690 83 F9 0C cmp cx,0Ch
-273F:A693 75 0E jne loc_2026 ; Jump if not equal
-273F:A695 55 push bp
-273F:A696 56 push si
-273F:A697 52 push dx
-273F:A698 53 push bx
-273F:A699 BB 0033 mov bx,33h
-273F:A69C E8 F95E call play_sound ; (9FFD)
-273F:A69F 5B pop bx
-273F:A6A0 5A pop dx
-273F:A6A1 5E pop si
-273F:A6A2 5D pop bp
-273F:A6A3 loc_2026: ; xref 273F:A693
-273F:A6A3 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A6A7 59 pop cx
-273F:A6A8 E2 DF loop locloop_2025 ; Loop if cx > 0
-
-273F:A6AA FF 16 0766 call word ptr [fade_out_proc]
-273F:A6AE E8 D3E3 call load_resources
-273F:A6B1 80 26 11D0 FE and menubar_state, 0FEh ; (31E4:11D0=3)
-273F:A6B6 FF 16 075E call word ptr [show_cursor_proc]
-273F:A6BA C3 retn
- skorl_knockout endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:0038
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- display_barrel_animation proc near
-273F:A6BB A1 4CFE mov ax, data_814
-273F:A6BE A3 5782 mov misc_segment, ax
-273F:A6C1 B8 E9F0 mov ax,0E9F0h
-273F:A6C4 E8 9400 call read_palette ; (3AC7)
-273F:A6C7 B8 E9F1 mov ax,0E9F1h
-273F:A6CA E8 00E6 call load_pic_with_animation
-273F:A6CD 80 0E 11D0 01 or menubar_state, 1 ; (31E4:11D0=3)
-273F:A6D2 FF 16 075E call word ptr [show_cursor_proc]
-273F:A6D6 E8 FB1A call sub_257 ; (A1F3)
-273F:A6D9 B8 013B mov ax,13Bh
-273F:A6DC 33 DB xor bx,bx ; Zero register
-273F:A6DE FF 1E 5662 call dword ptr [play_music_proc]
-273F:A6E2 FF 16 077E call word ptr [copy_screen_proc]
-273F:A6E6 E8 0185 call sub_267 ; (A86E)
-273F:A6E9 B9 00B0 mov cx,0B0h
-
-273F:A6EC locloop_2027: ; xref 273F:A6F8
-273F:A6EC 51 push cx
-273F:A6ED B8 0007 mov ax,7
-273F:A6F0 E8 A2F6 call sleep ; (49E9)
-273F:A6F3 FF 16 0780 call word ptr [pic_decode_proc]
-273F:A6F7 59 pop cx
-273F:A6F8 E2 F2 loop locloop_2027 ; Loop if cx > 0
-
-273F:A6FA C7 06 9832 002A mov room_number, ROOMNUM_WINE_CELLAR
-273F:A700 E8 D391 call load_resources
-273F:A703 FF 16 0766 call word ptr [fade_out_proc]
-273F:A707 80 26 11D0 FE and menubar_state, 0FEh
-273F:A70C FF 16 075E call word ptr [show_cursor_proc]
-273F:A710 C3 retn
- display_barrel_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [pic_decode_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_pic_decode proc near
-
-273F:A711 1E push ds
-273F:A712 B8 A000 mov ax, VGA_SEGMENT
-273F:A715 8E C0 mov es,ax
-273F:A717 33 FF xor di,di ; Zero register
-273F:A719 8E DA mov ds,dx
-273F:A71B loc_2028:
-273F:A71B 8A 0F mov cl,[bx] ; Get repeating length
-273F:A71D 32 ED xor ch,ch
-273F:A71F 83 C3 01 add bx,1
-273F:A722 0A C9 or cl,cl ; Was the repeat length 0?
-273F:A724 75 05 jnz loc_2029
-273F:A726 8B 0F mov cx,[bx] ; Yes, so get length from next 2 bytes
-273F:A728 83 C3 02 add bx,2
-273F:A72B loc_2029:
-273F:A72B 8E DD mov ds,bp
-273F:A72D F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:A72F 8E DA mov ds,dx
-273F:A731 8A 07 mov al,[bx] ; Get screen inc amount
-273F:A733 32 E4 xor ah,ah
-273F:A735 83 C3 01 add bx,1
-273F:A738 0A C0 or al,al ; Zero ?
-273F:A73A 75 05 jnz loc_2030
-273F:A73C 8B 07 mov ax,[bx] ; Yes, so get inc from next 2 bytes
-273F:A73E 83 C3 02 add bx,2
-273F:A741 loc_2030:
-273F:A741 03 F8 add di,ax
-273F:A743 81 FF FA00 cmp di, 320*200 ; 0FA00h = full screen
-273F:A747 72 D2 jb loc_2028 ; Jump if below
-273F:A749 1F pop ds
-273F:A74A B1 04 mov cl,4
-
-273F:A74C 8B C6 mov ax,si
-273F:A74E D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:A750 03 E8 add bp,ax
-273F:A752 83 E6 0F and si,0Fh
-
-273F:A755 8B C3 mov ax,bx
-273F:A757 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:A759 03 D0 add dx,ax
-273F:A75B 83 E3 0F and bx,0Fh
-273F:A75E C3 retn
-
- vga_pic_decode endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [pic_decode_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- ega_pic_decode endp
-
-273F:A75F 1E push ds
-273F:A760 1E push ds
-273F:A761 07 pop es
-273F:A762 8E DD mov ds,bp
-273F:A764 AC lodsb ; String [si] to al
-273F:A765 8A C8 mov cl,al
-273F:A767 loc_2031: ; xref 273F:A77D
-273F:A767 ú80 E9 01 sub cl,1
-273F:A76A 72 13 jc loc_2032 ; Jump if carry Set
-273F:A76C AC lodsb ; String [si] to al
-273F:A76D 32 E4 xor ah,ah ; Zero register
-273F:A76F 8B D8 mov bx,ax
-273F:A771 26: C6 87 0790 01 mov byte ptr es:[hotspot_rects_list][bx],1 ; (273F:0790=1Fh)
-273F:A777 26: C6 87 0890 01 mov byte ptr es:[hotspot_rects_list+100h][bx],1 ; (273F:0890=0BEh)
-273F:A77D EB E8 jmp short loc_2031 ; (A767)
-273F:A77F loc_2032: ; xref 273F:A76A
-273F:A77F 26: A1 4CE4 mov ax, es:data_segment2
-273F:A783 8E C0 mov es,ax
-273F:A785 BF 0500 mov di, MENUBAR_BLOCK_SIZE/2
-273F:A788 loc_2033: ; xref 273F:A797, A79D
-273F:A788 úAC lodsb ; String [si] to al
-273F:A789 32 E4 xor ah,ah ; Zero register
-273F:A78B 03 F8 add di,ax
-273F:A78D ú81 FF 7D00 cmp di,data_1467e ; (FF12:7D00=0C2h)
-273F:A791 73 0C jae loc_2034 ; Jump if above or =
-273F:A793 AC lodsb ; String [si] to al
-273F:A794 25 00FF and ax,0FFh
-273F:A797 74 EF jz loc_2033 ; Jump if zero
-273F:A799 8B C8 mov cx,ax
-273F:A79B F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-273F:A79D EB E9 jmp short loc_2033 ; (A788)
-273F:A79F loc_2034: ; xref 273F:A791
-273F:A79F 1F pop ds
-273F:A7A0 B1 04 mov cl,4
-273F:A7A2 8B C6 mov ax,si
-273F:A7A4 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:A7A6 03 E8 add bp,ax
-273F:A7A8 83 E6 0F and si,0Fh
-273F:A7AB 55 push bp
-273F:A7AC 56 push si
-273F:A7AD E8 78AC call ega_show_menu
-273F:A7B0 5E pop si
-273F:A7B1 5D pop bp
-273F:A7B2 C3 retn
-
- ega_pic_decode endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A359, A3BE, A41F, A462, A48D, A4B5, A54F
- ; A5C1, A5F3, A629, A673, A6CA, A91A, A9E3
- ; A9F3
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A7B3 load_pic_with_animation proc near
-273F:A7B3 50 push ax
-273F:A7B4 E8 5C2F call get_entry_size
-273F:A7B7 8B 0E 4D02 mov cx,buffer_segment_end ; (31E4:4D02=0)
-273F:A7BB 2B CA sub cx,dx
-273F:A7BD 33 D2 xor dx,dx ; Zero register
-273F:A7BF 51 push cx
-273F:A7C0 E8 5B51 call read_entry ; (0314)
-273F:A7C3 5A pop dx
-273F:A7C4 83 EA 08 sub dx,8
-273F:A7C7 A1 5782 mov ax,misc_segment ; (31E4:5782=0)
-273F:A7CA 8E C0 mov es,ax
-273F:A7CC E8 91BB call decode_file_entry ; (398A)
-273F:A7CF 89 16 5784 mov decoded_data_end_segment, dx
-273F:A7D3 58 pop ax
-273F:A7D4 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:A7D9 74 0A je loc_ret_2035 ; Jump if equal
-273F:A7DB 8B CA mov cx,dx
-273F:A7DD 33 D2 xor dx,dx ; Zero register
-273F:A7DF 05 0001 add ax,1
-273F:A7E2 E8 5B2F call read_entry ; (0314)
-
-273F:A7E5 loc_ret_2035: ; xref 273F:A7D9
-273F:A7E5 C3 retn
- load_pic_with_animation endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called indircetly via calls to word ptr [copy_screen_proc]
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- vga_copy_screen proc near
-
-273F:A7E6 B8 A000 mov ax, VGA_SEGMENT
-273F:A7E9 8E C0 mov es,ax
-273F:A7EB 1E push ds
-273F:A7EC A1 5782 mov ax,misc_segment ; (31E4:5782=0)
-273F:A7EF 8E D8 mov ds,ax
-273F:A7F1 33 F6 xor si,si ; Zero register
-273F:A7F3 33 FF xor di,di ; Zero register
-273F:A7F5 B9 7D00 mov cx, 320*200/2 ; 7D00h
-273F:A7F8 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:A7FA 1F pop ds
-273F:A7FB 8B 2E 5782 mov bp,misc_segment ; (31E4:5782=0)
-273F:A7FF 81 C5 0FA0 add bp, 320*200/16 ; 0FA0h (segment incr amount)
-273F:A803 8B 16 5784 mov dx, decoded_data_end_segment
-273F:A807 33 F6 xor si,si ; Zero register for BP:SI return
-273F:A809 33 DB xor bx,bx ; Zero register for DX:BX return
-273F:A80B C3 retn
-
- vga_copy_screen endp
-
- ega_copy_screen proc near
-
- assume ds:seg_code
-273F:A80C A1 5784 mov ax,data_354 ; (273F:5784=0A302h)
-273F:A80F A3 4CE4 mov data_segment2, ax
-273F:A812 8E C0 mov es,ax
-273F:A814 1E push ds
-273F:A815 A1 5782 mov ax,data_353 ; (273F:5782=0C583h)
-273F:A818 8E D8 mov ds,ax
-273F:A81A 33 F6 xor si,si ; Zero register
-273F:A81C úBF 0500 mov di,data_1450e ; (A302:0500=0)
-273F:A81F B9 3C00 mov cx,3C00h
-273F:A822 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-273F:A824 1F pop ds
-273F:A825 E8 6139 call clear_hotspot_rects
-273F:A828 E8 C7DA call menubar_clear_image
-273F:A82B E8 782E call ega_show_menu
-273F:A82E 8B 2E 5782 mov bp,data_353 ; (273F:5782=0C583h)
-273F:A832 81 C5 0780 add bp,780h
-273F:A836 33 F6 xor si,si ; Zero register
-273F:A838 C3 retn
-
- ega_copy_screen endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A375, A3B4, A3C4, A425, A471, A4BE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A839 install_palette proc near
- assume ds:data_seg
-273F:A839 80 3E 0742 02 cmp video_style, VIDEO_STYLE_EGA
-273F:A83E 74 1E je loc_ret_2036 ; Jump if equal
-273F:A840 56 push si
-273F:A841 57 push di
-273F:A842 52 push dx
-273F:A843 1E push ds
-
-273F:A844 úBE 00C0 mov si, 0C0h ; 64 palette entries * 3 bytes
-273F:A847 F7 E6 mul si ; dx:ax = reg * ax
-273F:A849 8B F0 mov si,ax
-273F:A84B úBF 1457 mov di,offset unprocessed_vga_palette
-273F:A84E 1E push ds
-273F:A84F 07 pop es
-273F:A850 A1 5780 mov ax, palette_segment
-273F:A853 8E D8 mov ds,ax
-273F:A855 B9 0060 mov cx, 0C0h/2 ; Copy palette data over
-273F:A858 F3/ A5 rep movsw ; Rep when cx >0 Mov [si] to es:[di]
-
-273F:A85A 1F pop ds
-273F:A85B 5A pop dx
-273F:A85C 5F pop di
-273F:A85D 5E pop si
-
-273F:A85E loc_ret_2036: ; xref 273F:A83E
-273F:A85E C3 retn
- install_palette endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A3A6, A40D, A4B8, A4D4, A4EA, A500, A516
- ; A52C
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A85F fade_out proc near
-273F:A85F 55 push bp
-273F:A860 56 push si
-273F:A861 52 push dx
-273F:A862 53 push bx
-273F:A863 51 push cx
-273F:A864 FF 16 0766 call word ptr [fade_out_proc]
-273F:A868 59 pop cx
-273F:A869 5B pop bx
-273F:A86A 5A pop dx
-273F:A86B 5E pop si
-273F:A86C 5D pop bp
-273F:A86D C3 retn
- fade_out endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A378, A5D1, A609, A683, A6E6, A932
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A86E screen_fade_in proc near
-273F:A86E 55 push bp
-273F:A86F 56 push si
-273F:A870 52 push dx
-273F:A871 53 push bx
-273F:A872 FF 16 0760 call word ptr [fade_in_proc]
-273F:A876 5B pop bx
-273F:A877 5A pop dx
-273F:A878 5E pop si
-273F:A879 5D pop bp
-273F:A87A C3 retn
- screen_fade_in endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A474, A4CB, A4E1, A4F7, A50D, A523, A539
- ; A630
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A87B set_lower_palette proc near
-273F:A87B 55 push bp
-273F:A87C 56 push si
-273F:A87D 52 push dx
-273F:A87E 53 push bx
-273F:A87F FF 16 0762 call [set_lower_palette_proc]
-273F:A883 5B pop bx
-273F:A884 5A pop dx
-273F:A885 5E pop si
-273F:A886 5D pop bp
-273F:A887 C3 retn
- set_lower_palette endp
-
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Called from: 273F:A36C, A383, A390, A3D4, A3E8, A3F9, A42F
- ; A44D, A46B, A47A, A493, A4A0, A4C8, A4D1
- ; A4DE, A4E7, A4F4, A4FD, A50A, A513, A520
- ; A529, A536, A53F, A56B, A571, A580, A9E9
- ; A9F9
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-273F:A888 pause_with_kbd_mouse_break proc near
-273F:A888 loc_2037: ; xref 273F:A89A, A8B8
-273F:A888 úF6 06 55A0 FF test byte ptr data_835,0FFh ; (31E4:55A0=0)
-273F:A88D 75 15 jnz loc_2038 ; Jump if not zero
-273F:A88F F6 06 11D5 03 test byte ptr mouse_buttons, 3
-273F:A894 75 42 jnz loc_2043 ; Jump if not zero
-273F:A896 39 06 38B1 cmp time_ctr, ax ; (31E4:38B1=0)
-273F:A89A 72 EC jb loc_2037 ; Jump if below
-273F:A89C C7 06 38B1 0000 mov time_ctr, 0 ; (31E4:38B1=0)
-273F:A8A2 F8 clc ; Clear carry flag
-273F:A8A3 C3 retn
-273F:A8A4 loc_2038: ; xref 273F:A88D
-273F:A8A4 C6 06 55A0 00 mov byte ptr data_835,0 ; (31E4:55A0=0)
-273F:A8A9 52 push dx
-273F:A8AA 50 push ax
-273F:A8AB A1 38B1 mov ax, time_ctr ; (31E4:38B1=0)
-273F:A8AE B4 06 mov ah,6
-273F:A8B0 B2 FF mov dl,0FFh
-273F:A8B2 CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:A8B4 75 04 jnz loc_2040 ; Jump if not zero
-273F:A8B6 loc_2039: ; xref 273F:A8CA
-273F:A8B6 58 pop ax
-273F:A8B7 5A pop dx
-273F:A8B8 EB CE jmp short loc_2037 ; (A888)
-273F:A8BA loc_2040: ; xref 273F:A8B4
-273F:A8BA 50 push ax
-273F:A8BB loc_2041: ; xref 273F:A8C1
-273F:A8BB B4 06 mov ah,6
-273F:A8BD B2 FF mov dl,0FFh
-273F:A8BF CD 21 int 21h ; DOS Services ah=function 06h
- ; special char i/o, dl=subfunc
-273F:A8C1 75 F8 jnz loc_2041 ; Jump if not zero
-273F:A8C3 58 pop ax
-273F:A8C4 3C 20 cmp al,20h ; ' '
-273F:A8C6 74 04 je loc_2042 ; Jump if equal
-273F:A8C8 3C 1B cmp al,1Bh
-273F:A8CA 75 EA jne loc_2039 ; Jump if not equal
-273F:A8CC loc_2042: ; xref 273F:A8C6
-273F:A8CC C7 06 38B1 0000 mov time_ctr, 0 ; (31E4:38B1=0)
-273F:A8D2 3C 1B cmp al,1Bh
-273F:A8D4 F9 stc ; Set carry flag
-273F:A8D5 58 pop ax
-273F:A8D6 5A pop dx
-273F:A8D7 C3 retn
-273F:A8D8 loc_2043: ; xref 273F:A894
-273F:A8D8 F6 06 11D5 01 test mouse_buttons, 1
-273F:A8DD F9 stc ; Set carry flag
-273F:A8DE C3 retn
- pause_with_kbd_mouse_break endp
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;
- ; Starts ending sequence
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
- seq_endgame_sequence proc near
-273F:A8DF FF 16 0766 call word ptr ds:[fade_out_proc]
-273F:A8E3 E8 7679 call show_disk_cursor
-273F:A8E6 E8 F90A call sub_257 ; (A1F3)
-273F:A8E9 A1 4CFE mov ax, data_814
-273F:A8EC A3 5782 mov data_353, ax
-273F:A8EF F6 06 5660 20 test music_status, 20h
-273F:A8F4 74 1B jz loc_2044 ; Jump if zero
-273F:A8F6 B8 FF10 mov ax,0FF10h
-273F:A8F9 8B 0E 5782 mov cx,data_353 ; (273F:5782=0C583h)
-273F:A8FD 51 push cx
-273F:A8FE 33 D2 xor dx,dx ; Zero register
-273F:A900 E8 5A11 call read_entry ; (0314)
-273F:A903 01 16 5782 add data_353,dx ; (273F:5782=0C583h)
-273F:A907 B8 0004 mov ax,4
-273F:A90A 5A pop dx
-273F:A90B 33 C9 xor cx,cx ; Zero register
-273F:A90D FF 1E 5662 call dword ptr [play_music_proc]
-273F:A911 loc_2044: ; xref 273F:A8F4
-273F:A911 B8 FF00 mov ax,0FF00h
-273F:A914 E8 91B0 call read_palette ; (3AC7)
-273F:A917 B8 FF01 mov ax,0FF01h
-273F:A91A E8 FE96 call load_pic_with_animation
-273F:A91D 03 16 5784 add dx,data_354 ; (273F:5784=0A302h)
-273F:A921 89 16 5780 mov data_352,dx ; (273F:5780=78Bh)
-273F:A925 80 0E 11D0 01 or menubar_state, 1
-273F:A92A FF 16 075E call [show_cursor_proc]
-273F:A92E FF 16 077E call word ptr ds:[77Eh] ; (273F:077E=0C00Bh)
-273F:A932 E8 FF39 call sub_267 ; (A86E)
-273F:A935 úBF 5786 mov di,offset data_355 ; (273F:5786=19h)
-273F:A938 loc_2045: ; xref 273F:A971
-273F:A938 8B 0D mov cx,[di]
-273F:A93A 57 push di
-
-273F:A93B locloop_2046: ; xref 273F:A947
-273F:A93B 51 push cx
-273F:A93C B8 0009 mov ax, 9
-273F:A93F E8 A0A7 call sleep ; (49E9)
-273F:A942 FF 16 0780 call word ptr ds:[780h] ; (273F:0780=4574h)
-273F:A946 59 pop cx
-273F:A947 E2 F2 loop locloop_2046 ; Loop if cx > 0
-
-273F:A949 5F pop di
-273F:A94A 55 push bp
-273F:A94B 56 push si
-273F:A94C 52 push dx
-273F:A94D 53 push bx
-273F:A94E 8B 45 02 mov ax,[di+2]
-273F:A951 F6 06 5660 20 test music_status, 20h
-273F:A956 74 03 jz loc_2047 ; Jump if zero
-273F:A958 8B 45 04 mov ax,[di+4]
-273F:A95B loc_2047: ; xref 273F:A956
-273F:A95B 0B C0 or ax,ax ; Zero ?
-273F:A95D 74 07 jz loc_2048 ; Jump if zero
-273F:A95F 8A 5D 06 mov bl, [di+6]
-273F:A962 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A966 loc_2048: ; xref 273F:A95D
-273F:A966 5B pop bx
-273F:A967 5A pop dx
-273F:A968 5E pop si
-273F:A969 5D pop bp
-273F:A96A 83 C7 07 add di,7
-273F:A96D F7 05 FFFF test word ptr [di],0FFFFh
-273F:A971 75 C5 jnz loc_2045 ; Jump if not zero
-273F:A973 55 push bp
-273F:A974 56 push si
-273F:A975 52 push dx
-273F:A976 53 push bx
-273F:A977 E8 F879 call sub_257 ; (A1F3)
-273F:A97A B8 0100 mov ax,100h
-273F:A97D 33 DB xor bx,bx ; Zero register
-273F:A97F FF 1E 5662 call dword ptr [play_music_proc]
-273F:A983 loc_2049: ; xref 273F:A98B
-273F:A983 B8 0500 mov ax,500h
-273F:A986 F9 stc ; Set carry flag
-273F:A987 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A98B 73 F6 jnc loc_2049 ; Jump if carry=0
-273F:A98D E8 F863 call sub_257 ; (A1F3)
-273F:A990 F6 06 5660 20 test music_status, 20h
-273F:A995 74 0B jz loc_2050 ; Jump if zero
-273F:A997 B8 0106 mov ax,106h
-273F:A99A 33 DB xor bx,bx ; Zero register
-273F:A99C FF 1E 5662 call dword ptr [play_music_proc]
-273F:A9A0 EB 3A jmp short loc_2052 ; (A9DC)
-273F:A9A2 loc_2050: ; xref 273F:A995
-273F:A9A2 F6 06 5660 01 test music_status, 1
-273F:A9A7 74 2A jz loc_2051 ; Jump if zero
-273F:A9A9 B8 FF11 mov ax,0FF11h
-273F:A9AC 8B 0E 4CFE mov cx, data_814
-273F:A9B0 33 D2 xor dx,dx ; Zero register
-273F:A9B2 51 push cx
-273F:A9B3 E8 595E call read_entry ; (0314)
-273F:A9B6 03 16 4CFE add dx, data_814
-273F:A9BA 89 16 5782 mov data_353,dx ; (273F:5782=0C583h)
-273F:A9BE 5A pop dx
-273F:A9BF 33 C9 xor cx,cx ; Zero register
-273F:A9C1 B8 0001 mov ax,1
-273F:A9C4 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A9C8 B8 0100 mov ax,100h
-273F:A9CB 33 DB xor bx,bx ; Zero register
-273F:A9CD FF 1E 5662 call dword ptr [play_music_proc]
-273F:A9D1 EB 09 jmp short loc_2052 ; (A9DC)
-273F:A9D3 loc_2051: ; xref 273F:A9A7
-273F:A9D3 B8 0106 mov ax,106h
-273F:A9D6 B7 01 mov bh,1
-273F:A9D8 FF 1E 5662 call dword ptr [play_music_proc]
-273F:A9DC loc_2052: ; xref 273F:A9A0, A9D1
-273F:A9DC 5B pop bx
-273F:A9DD 5A pop dx
-273F:A9DE 5E pop si
-273F:A9DF 5D pop bp
-273F:A9E0 B8 FF03 mov ax,0FF03h
-273F:A9E3 E8 FDCD call load_pic_with_animation
-273F:A9E6 B8 0096 mov ax,96h
-273F:A9E9 E8 FE9C call pause_with_kbd_mouse_break
-273F:A9EC FF 16 077E call word ptr ds:[77Eh] ; (273F:077E=0C00Bh)
-273F:A9F0 B8 FF05 mov ax,0FF05h
-273F:A9F3 E8 FDBD call load_pic_with_animation
-273F:A9F6 B8 05DC mov ax,5DCh
-273F:A9F9 E8 FE8C call pause_with_kbd_mouse_break
-273F:A9FC FF 16 077E call word ptr ds:[77Eh] ; (273F:077E=0C00Bh)
-273F:AA00 B8 05DC mov ax,5DCh
-273F:AA03 E8 9FE3 call sleep ; (49E9)
-273F:AA06 loc_2053: ; xref 273F:AA10
-273F:AA06 F6 06 11D5 FF test mouse_buttons, 0FFh
-273F:AA0B 75 05 jnz loc_2054 ; Jump if not zero
-273F:AA0D E8 EB10 call check_keypress ; (9520)
-273F:AA10 74 F4 jz loc_2053 ; Jump if zero
-273F:AA12 loc_2054: ; xref 273F:AA0B
-273F:AA12 FF 16 0766 call word ptr ds:[fade_out_proc]
-273F:AA16 B8 0000 mov ax,0
-273F:AA19 B6 01 mov dh,1
-273F:AA1B E8 9586 call display_message ; (3FA4)
-273F:AA1E E8 5DAC call sub_10 ; (07CD)
-273F:AA21 C7 06 86DF 001C mov word ptr ds:[86DFh],1Ch ; (273F:86DF=6C7h)
-273F:AA27 B4 3C mov ah,3Ch ; '<'
-273F:AA29 33 C9 xor cx,cx ; Zero register
-273F:AA2B úBA 5D80 mov dx,5D80h ; (273F:5D80=0E8h)
-273F:AA2E CD 21 int 21h ; DOS Services ah=function 3Ch
- ; create/truncate file @ ds:dx
-273F:AA30 72 16 jc loc_ret_2055 ; Jump if carry Set
-273F:AA32 8B D8 mov bx,ax
-273F:AA34 B4 40 mov ah,40h ; '@'
-273F:AA36 B9 F010 mov cx, WRITE_BUFFER_SIZE
-273F:AA39 úBA 5D90 mov dx, offset write_buffer ; (273F:5D90=47h)
-273F:AA3C 2B CA sub cx,dx
-273F:AA3E CD 21 int 21h ; DOS Services ah=function 40h
- ; write file bx=file handle
- ; cx=bytes from ds:dx buffer
-273F:AA40 72 06 jc loc_ret_2055 ; Jump if carry Set
-273F:AA42 B4 3E mov ah,3Eh
-273F:AA44 CD 21 int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
-273F:AA46 73 00 jnc loc_ret_2055 ; Jump if carry=0
-
-273F:AA48 loc_ret_2055: ; xref 273F:AA30, AA40, AA46
-273F:AA48 C3 retn
- seq_endgame_sequence endp
-
-273F:AA49 0007[00] db 7 dup (0)
-
- seg_code ends
-
-
-
- ;------------------------------------------------------------ data_seg ----
-
- data_seg segment byte public
- assume cs:data_seg , ds:data_seg , ss:stack_seg_k
-
-31E4:0000 43 6F 70 79 72 69 copyright db 'Copyright Revolution Software 1990-1992'
-31E4:0006 67 68 74 20 52 65
-31E4:000C 76 6F 6C 75 74 69
-31E4:0012 6F 6E 20 53 6F 66
-31E4:0018 74 77 61 72 65 20
-31E4:001E 31 39
-31E4:0020 39 30 2D 31 39 39
-31E4:0026 32
-31E4:0027 20 20 20 53 79 73 data_519 db ' System design and code: David'
-31E4:002D 74 65 6D 20 64 65
-31E4:0033 73 69 67 6E 20 61
-31E4:0039 6E 64 20 63 6F 64
-31E4:003F 65 3A 20 44 61 76
-31E4:0045 69 64
-31E4:0047 20 53 79 6B 65 73 db ' Sykes and Tony Warriner. Some o'
-31E4:004D 20 61 6E 64 20 54
-31E4:0053 6F 6E 79 20 57 61
-31E4:0059 72 72 69 6E 65 72
-31E4:005F 2E 20 53 6F 6D 65
-31E4:0065 20 6F
-31E4:0067 74 68 65 72 20 70 db 'ther people did the rest. This'
-31E4:006D 65 6F 70 6C 65 20
-31E4:0073 64 69 64 20 74 68
-31E4:0079 65 20 72 65 73 74
-31E4:007F 2E 20 20 20 54 68
-31E4:0085 69 73
-31E4:0087 20 76 65 72 73 69 db ' version assembled 15:16:59 on 0'
-31E4:008D 6F 6E 20 61 73 73
-31E4:0093 65 6D 62 6C 65 64
-31E4:0099 20 31 35 3A 31 36
-31E4:009F 3A 35 39 20 6F 6E
-31E4:00A5 20 30
-31E4:00A7 31 2F 31 30 2F 39 db '1/10/92'
-31E4:00AD 32
-31E4:00AE 00 00 db 0, 0
-31E4:00B0 00 data_525 db 0 ; xref 273F:03D0
-31E4:00B1 01 data_526 db 1 ; xref 273F:0C46
-31E4:00B2 0000 data_527 dw 0 ; Data table (indexed access)
-31E4:00B4 FF db 0FFh
-31E4:00B5 FF data_528 db 0FFh
-
-31E4:00B6 0000 file_offset_table dw 0
-31E4:00B8 00C8 dw offset disk1vga
-31E4:00BA 00D2 dw offset disk2vga
-31E4:00BC 00DC dw offset disk3vga
-31E4:00BE 00E6 dw offset disk4vga
-31E4:00C0 00F0 dw offset disk1ega
-31E4:00C2 00FA dw offset disk2ega
-31E4:00C4 0104 dw offset disk3ega
-31E4:00C6 010E dw offset disk4ega
-
-31E4:00C8 44 49 53 4B 31 2E disk1vga db 'DISK1.VGA', 0
-31E4:00CE 56 47 41 00
-31E4:00D2 44 49 53 4B 32 2E disk2vga db 'DISK2.VGA', 0
-31E4:00D8 56 47 41 00
-31E4:00DC 44 49 53 4B 33 2E disk3vga db 'DISK3.VGA', 0
-31E4:00E2 56 47 41 00
-31E4:00E6 44 49 53 4B 34 2E disk4vga db 'DISK4.VGA', 0
-31E4:00EC 56 47 41 00
-31E4:00F0 44 49 53 4B 31 2E disk1ega db 'DISK1.EGA', 0
-31E4:00F6 45 47 41 00
-31E4:00FA 44 49 53 4B 32 2E disk2ega db 'DISK2.EGA', 0
-31E4:0100 45 47 41 00
-31E4:0104 44 49 53 4B 33 2E disk3ega db 'DISK3.EGA', 0
-31E4:010A 45 47 41 00
-31E4:010E 44 49 53 4B 34 2E disk4ega db 'DISK4.EGA', 0
-
-31E4:0118 00 retry_count db 0 ; xref 273F:039F, 273F:03A5
- ; 273F:03AA, 273F:03B1
-
-31E4:0119 file_buffer dw 0, 0, 0
- file_filenum dw 0
-31E4:0121 file_entries db 5f8h dup (0) ; space for the file entries table
-
-;***** - Old data block definitions
-31E4:0119 0000 data_535 dw 0 ; xref 273F:0351, 273F:8FA2
-31E4:011B 0000 data_536 dw 0
-31E4:011D 0000 data_537 dw 0
-31E4:011F 0000 data_538 dw 0
-31E4:0121 0120[00] db 288 dup (0)
-31E4:0241 0000 data_539 dw 0 ; Data table (indexed access)
- ; xref 31E4:7E86
-31E4:0243 00C5[00] db 197 dup (0)
-31E4:0308 0000 data_540 dw 0 ; Data table (indexed access)
- ; xref 273F:8F4F
-31E4:030A 00DC[00] db 220 dup (0)
-31E4:03E6 0000 data_541 dw 0 ; Data table (indexed access)
- ; xref 31E4:BCCD
-31E4:03E8 0338[00] db 824 dup (0)
-;***** ----------------------------
-
-
-31E4:0719 0007[00] db 7 dup (0)
-31E4:0720 6F 6E 00 00 74 6F db 6Fh, 6Eh, 00h, 00h, 74h, 6Fh
-31E4:0726 00 db 00h
-31E4:0727 28 6E 6F 74 68 69 db '(nothing)'
-31E4:072D 6E 67 29
-31E4:0730 00 66 6F 72 00 2E db 00h, 66h, 6Fh, 72h, 00h, 2Eh
-31E4:0736 20 2E 20 2E 00 db 20h, 2Eh, 20h, 2Eh, 00h
-31E4:073B 00 data_542 db 0 ; xref 273F:0745, 273F:4016
- ; 273F:4088
-31E4:073C 00 status_flags db 0
-31E4:073D 00 status_flags2 db 0
-31E4:073E 01 old_ctrl_break_flag db 1 ; xref 273F:0725, 273F:402C
-31E4:073F 01 data_546 db 1 ; xref 273F:073E, 273F:4037
-31E4:0740 0000 data_547 dw 0 ; xref 273F:07DE
-31E4:0742 00 video_style db 0 ; 1=VGA, 2=EGA
-31E4:0743 00 video_mode db 0 ; xref 273F:04FF, 273F:05C0
-31E4:0744 0000 show_screen_proc dw 0 ; xref 273F:0509, 273F:05CA
-31E4:0746 0000 screen_size dw 0 ; xref 273F:0515, 273F:05D6
-31E4:0748 0000 screen_width dw 0 ; xref 273F:051B, 273F:05DC
-31E4:074A 0000 char_width dw 0 ; xref 273F:050F, 273F:05D0
-31E4:074C 0000 menubar_block_size dw 0 ; xref 273F:0521, 273F:05E2
- ; 273F:700A, 273F:7ADB
-31E4:074E 0000 data_555 dw 0 ; xref 273F:0527, 273F:05E8
-31E4:0750 0000 segment_screen_proc dw 0 ; xref 273F:052D, 273F:05EE
-31E4:0752 0000 show_compressed_screen_proc dw 0
-31E4:0754 0000 add_animation_proc dw 0
-
-31E4:0756 0000 draw_talk_dialog_proc dw 0
-31E4:0758 0000 talk_dialog_proc dw 0
-31E4:075A 0000 display2_character_proc dw 0
-31E4:075C 0000 add_rect_proc dw 0
-
-31E4:075E 0000 show_cursor_proc dw 0
-31E4:0760 0000 fade_in_proc dw 0
-31E4:0762 0000 set_lower_palette_proc dw 0
-31E4:0764 0000 empty_palette_proc dw 0
-31E4:0766 0000 fade_out_proc dw 0
-31E4:0768 0000 data_568 dw 0
-31E4:076A 0000 display_character_proc dw 0
-31E4:076C 0000 menu_items_proc dw 0
-31E4:076E 0000 data_571 dw 0
-31E4:0770 0000 data_572 dw 0 ; xref 273F:0587, 273F:064E
-31E4:0772 0000 toggle_menu_highlight_proc dw 0
-31E4:0774 0000 data_574 dw 0 ; xref 273F:0593, 273F:065A
-31E4:0776 0000 data_575 dw 0 ; xref 273F:0599, 273F:0660
-31E4:0778 0000 data_576 dw 0 ; xref 273F:059F, 273F:0666
-31E4:077A 0000 draw_dialog_proc dw 0
-31E4:077C 0000 decode_entry_proc dw 0
-31E4:077E 0000 copy_screen_proc dw 0
-31E4:0780 0000 pic_decode_proc dw 0
-
-31E4:0782 0000 saved_mouse_x dw 0
-31E4:0784 0000 saved_mouse_y dw 0
-31E4:0786 00 default_drive db 0 ; xref 273F:0712, 273F:9345
-31E4:0787 0009[00] db 9 dup (0)
-
-31E4:0790 00 hotspot_rects_list db 0 ; xref 273F:0963, 273F:0B61
-31E4:0791 0044[00] db 68 dup (0)
-31E4:07D5 00 data_584 db 0 ; Data table (indexed access)
-31E4:07D6 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:07DC 0064[00] display_mask db 100 dup (0)
-31E4:0890 0100[00] hotspot_rects_list_2 db 256 dup (0)
-31E4:0990 0000 data_587 dw 0 ; xref 273F:2087
-
-31E4:0992 0100[00] rects_layer_0 db 256 dup (0)
-31E4:0A92 0100[00] rects_layer_1 db 256 dup (0)
-31E4:0B92 0100[00] rects_layer_2 db 256 dup (0)
-31E4:0C92 0100[00] rects_layer_3 db 256 dup (0)
-
-31E4:0ADE 00 data_593 db 0 ; xref 273F:09E7
-31E4:0ADF 0026[00] db 38 dup (0)
-31E4:0B05 00 data_594 db 0
-31E4:0B06 0015[00] db 21 dup (0)
-31E4:0B1B 00 data_595 db 0 ; Data table (indexed access)
-31E4:0B1C 00 db 0
-31E4:0B1D 00 data_596 db 0 ; Data table (indexed access)
-31E4:0B1E 00 00 00 db 0, 0, 0
-31E4:0B21 00 data_597 db 0 ; Data table (indexed access)
-31E4:0B22 0016[00] db 22 dup (0)
-31E4:0B38 00 db 0 ; xref 273F:0AFE
-31E4:0B39 00A5[00] db 165 dup (0)
-31E4:0BDE 00 data_599 db 0 ; xref 273F:09ED
-31E4:0BDF 0048[00] db 72 dup (0)
-31E4:0C27 00 data_600 db 0
-31E4:0C28 00B6[00] db 182 dup (0)
-31E4:0CDE 00 data_601 db 0 ; xref 273F:09F3
-31E4:0CDF 00B3[00] db 179 dup (0)
-
-31E4:0D92 0010[00] room_layers dw 8 dup (0) ; Resource Ids for layers in room display
-
-31E4:0DA2 0000 rectangle_size dw 0
-31E4:0DA4 00 num_occupied_rects db 0
-31E4:0DA5 00 current_layer db 0
-31E4:0DA6 0000 rect_x_start dw 0
-31E4:0DA8 0000 rect_y_end dw 0
-31E4:0DAA 0000 num_horiz_rects dw 0
-31E4:0DAC 0000 num_vert_rects dw 0
-
-31E4:0DAE 00 00 db 0, 0
-31E4:0DB0 A000 screen_start_seg dw 0A000h ; I think these two are used for page
-31E4:0DB2 A200 screen_start_seg2 dw 0A200h ; swapping for writing to a back buffer
-
-31E4:0DB4 00 talk_dialog_close_flag db 0
-
-31E4:0DB5 processed_vga_palette db 300h dup (0) ; Holds processed VGA palette
-
-31E4:10B5 4C 6F 6F 6B 20 61 look_at_str db 'Look at ', 0 ; xref 273F:136B
-31E4:10BB 74 20 00
-31E4:10BE 0000 num_impinging_chars dw 0
-31E4:10C0 0026[00] impinging_char_list db 38 dup (0)
-
-31E4:10E6 0000 char_rect_left dw 0
-31E4:10E8 0000 char_rect_right dw 0
-31E4:10EA 0000 char_rect_top dw 0
-31E4:10EC 0000 char_rect_bottom dw 0
-31E4:10EE 0000 pl_check_result dw 0
-31E4:10F0 00 animation_table2 db 0 ; xref 273F:1556, 273F:1598
- ; 273F:15C3
-31E4:10F1 00BF[00] db 198 dup (0)
-31E4:11B0 0000 data_11b0 db 0
-31E4:11B1 000F[00] db 15 dup (0)
-31E4:11C0 0021 talk_dialog_top dw 21h
-31E4:11C2 0027 talk_dialog_left dw 27h
-31E4:11C4 0000 talk_dialog_width dw 0
-31E4:11C6 0000 talk_dialog_height dw 0
-31E4:11C8 0008[00] db 8 dup (0)
-
-31E4:11D0 03 menubar_state db 3
-31E4:11D1 0000 mouse_x dw 0
-31E4:11D3 0000 mouse_y dw 0
-31E4:11D5 00 mouse_buttons db 0
-31E4:11D6 0000 mouse_x2 dw 0
-31E4:11D8 0000 mouse_y2 dw 0
-31E4:11DA 00 mouse_buttons2 db 0
-31E4:11DB 0000 char_dest_x dw 0
-31E4:11DD 0000 char_dest_y dw 0
-31E4:11DF 0000 cursor_centroid dw 0
-31E4:11E1 0000 cursor_index dw 0
-31E4:11E3 00 cursor_index_new db 0
-31E4:11E4 0000 hotspot_name_id2 dw 0
-31E4:11E6 0000 hotspot_name_id dw 0
-31E4:11E8 0000 data_638 dw 0 ; xref 273F:2118, 273F:2AD2
- ; 273F:2B31
-31E4:11EA 00 data_639 db 0 ; xref 273F:2B21
-31E4:11EB 00 db 0
-31E4:11EC 0000 data_640 dw 0 ; xref 273F:2123, 273F:2AF7
-31E4:11EE 00 data_641 db 0 ; xref 273F:2B61
-31E4:11EF 00BF[00] db 191 dup (0)
-31E4:12AE 00 data_642 db 0 ; xref 273F:211B, 273F:2149
-31E4:12AF 0074[00] db 116 dup (0)
-31E4:1323 0016[00] db 22 dup (0)
-31E4:1339 001F[00] db 31 dup (0)
-31E4:1358 0028[00] db 40 dup (0)
-
-31E4:1380 13C2 support_data_offset_list dw 13C2h
-31E4:1382 BB95 dw 0BB95h
-31E4:1384 3617 dw 3617h
-31E4:1386 365B dw 365Bh
-31E4:1388 7135 dw 7135h
-31E4:138A 7AF5 dw 7AF5h
-31E4:138C 7ACB dw 7ACBh
-31E4:138E 7DF9 dw 7DF9h
-31E4:1390 7DA8 dw 7DA8h
-31E4:1392 785C dw 785Ch
-31E4:1394 7248 dw 7248h
-31E4:1396 726E dw 726Eh
-31E4:1398 728A dw 728Ah
-31E4:139A 709E dw 709Eh
-31E4:139C 3661 dw 3661h
-31E4:139E 6F4F dw 6F4Fh
-31E4:13A0 6F77 dw 6F77h
-31E4:13A2 6F9F dw 6F9Fh
-31E4:13A4 0000 dw 0
-
-31E4:13A6 00 00 22 db 00h, 00h, 22h
-31E4:13A9 79 4A 79 72 79 00 db 79h, 4Ah, 79h, 72h, 79h, 00h
-31E4:13AF 00 00 00 2B 6F A6 db 00h, 00h, 00h, 2Bh, 6Fh,0A6h
-31E4:13B5 77 00 77 36 77 60 db 77h, 00h, 77h, 36h, 77h, 60h
-31E4:13BB 77 98 79 BD 7A 5D db 77h, 98h, 79h,0BDh, 7Ah, 5Dh
-31E4:13C1 7A 20 00 1F 00 00 db 7Ah, 20h, 00h, 1Fh, 00h, 00h
-31E4:13C7 00 FA 7E db 00h,0FAh, 7Eh
-
-
-31E4:13CA 13D2 hotspot_dealloc_table: dw offset dealloc_hotspot_list_1
-31E4:13CC 13E2 dw offset dealloc_hotspot_list_2
-31E4:13CE 13F4 dw offset dealloc_hotspot_list_3
-31E4:13D0 13F2 dw offset dealloc_hotspot_list_4
-
-31E4:13D2 13F2 dealloc_hotspot_list_1: dw 13F2h
-31E4:13D4 0418 2711 2712 040D dw 0418h, 2711h, 2712h, 040Dh
-31E4:13DA 03EA 0411 0000 dw 03EAh, 0411h, 0
-
-31E4:13E2 2729 dealloc_hotspot_list_2: dw 2729h
-31E4:13E4 272A 272B 272C 272D dw 272Ah, 272Bh, 272Ch, 272Eh
-31E4:13EC 272E 272F 0000 dw 272Eh, 272Fh, 0
-
-31E4:13F2 03EF dealloc_hotspot_list_4: dw 03EFh
-31E4:13F4 03E9 dealloc_hotspot_list_3: dw 03E9h
-31E4:13F6 03EB 03EC 03ED 03EE dw 03EBh, 03ECh, 03EDh, 03EEh
-31E4:13FE 03F0 03F1 0420 0429 dw 03F0h, 03F1h, 0420h, 0429h
-31E4:1406 0436 2715 2716 2717 dw 0436h, 2715h, 2716h, 2717h
-31E4:140E 2718 2719 271A 271E dw 2718h, 2719h, 271Ah, 271Eh
-31E4:1416 271F 2720 2721 2722 dw 271Fh, 2720h, 2721h, 2722h
-31E4:141E 2725 2726 0000 dw 2725h, 2726h, 0
-
-31E4:1424 000C[00] db 12 dup (0)
-
-31E4:1430 10 58 BF 5C A0 58 db 10h, 58h,0BFh, 5Ch,0A0h, 58h
-31E4:1436 C4 58 CD db 0C4h, 58h,0CDh
-31E4:1439 58 34 58 db 58h, 34h, 58h
-
-31E4:143C 0008[00] db 8 dup (0)
-
-31E4:1444 79 00 59 00 04 06 ega_unknown_rec db 79h, 00h, 59h, 00h, 04h, 06h
-31E4:144A 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:1450 DC E2 DC FF E3 E2 vga_unknown_rec db 0DCh,0E2h,0DCh,0FFh,0E3h,0E2h
-
-31E4:1456 FF current_room_num db 0FFh
-31E4:1457 00 unprocessed_vga_palette db 0
-31E4:1458 00 00 00 00 00 34 db 00h, 00h, 00h, 00h, 00h, 34h
-31E4:145E 34 2C 18 10 2C 24 db 34h, 2Ch, 18h, 10h, 2Ch, 24h
-31E4:1464 24 18 18 18 18 10 db 24h, 18h, 18h, 18h, 18h, 10h
-31E4:146A 10 10 08 08 08 3C db 10h, 10h, 08h, 08h, 08h, 3Ch
-31E4:1470 2C 18 34 08 00 34 db 2Ch, 18h, 34h, 08h, 00h, 34h
-31E4:1476 24 18 2C 18 10 24 db 24h, 18h, 2Ch, 18h, 10h, 24h
-31E4:147C 10 08 18 08 00 10 db 10h, 08h, 18h, 08h, 00h, 10h
-31E4:1482 00 00 3C 30 20 26 db 00h, 00h, 3Ch, 30h, 20h, 26h
-31E4:1484 24 22 24 21 20 20 db 24h, 22h, 24h, 21h, 20h, 20h
-31E4:148E 1E 1C 1E 1B 1A 1A db 1Eh, 1Ch, 1Eh, 1Bh, 1Ah, 1Ah
-31E4:1494 17 16 16 14 12 14 db 17h, 16h, 16h, 14h, 12h, 14h
-31E4:149A 12 10 12 10 0E 10 db 12h, 10h, 12h, 10h, 0Eh, 10h
-31E4:14A0 0E 0C 0E 0C 0A 0C db 0Eh, 0Ch, 0Eh, 0Ch, 0Ah, 0Ch
-31E4:14A6 0A 09 0A 08 07 db 0Ah, 09h, 0Ah, 08h, 07h
-31E4:14AB 000C[00] db 12 dup (0)
-31E4:14B7 3F 2D 1B 39 28 19 db 3Fh, 2Dh, 1Bh, 39h, 28h, 19h
-31E4:14BD 34 22 17 30 1E 13 db 34h, 22h, 17h, 30h, 1Eh, 13h
-31E4:14C3 2C 1A 0F 28 17 0B db 2Ch, 1Ah, 0Fh, 28h, 17h, 0Bh
-31E4:14C9 25 15 08 22 12 05 db 25h, 15h, 08h, 22h, 12h, 05h
-31E4:14CF 1F 10 03 1B 0E 01 db 1Fh, 10h, 03h, 1Bh, 0Eh, 01h
-31E4:14D5 18 0C 00 16 0B 00 db 18h, 0Ch, 00h, 16h, 0Bh, 00h
-31E4:14DB 13 09 00 11 08 00 db 13h, 09h, 00h, 11h, 08h, 00h
-31E4:14E1 0F 07 00 0C 06 db 0Fh, 07h, 00h, 0Ch, 06h
-31E4:14E6 00F4[00] db 244 dup (0)
-31E4:15DA 00 unprocessed_vga_palette2 db 0 ; xref 273F:3AB3
-31E4:15DB 00 00 2E 2C 28 0E db 00h, 00h, 2Eh, 2Ch, 28h, 0Eh
-31E4:15E1 0E 14 24 23 20 1B db 0Eh, 14h, 24h, 23h, 20h, 1Bh
-31E4:15E7 1A 17 12 11 0F 0A db 1Ah, 17h, 12h, 11h, 0Fh, 0Ah
-31E4:15ED 0A 10 10 12 1A 37 db 0Ah, 10h, 10h, 12h, 1Ah, 37h
-31E4:15F3 24 1B 30 20 18 28 db 24h, 1Bh, 30h, 20h, 18h, 28h
-31E4:15F9 18 10 20 10 08 18 db 18h, 10h, 20h, 10h, 08h, 18h
-31E4:15FF 08 db 8
-31E4:1600 00 db 0
-31E4:1601 10 00 00 13 14 1E db 10h, 00h, 00h, 13h, 14h, 1Eh
-31E4:1607 00 00 00 3F 2A 20 db 00h, 00h, 00h, 3Fh, 2Ah, 20h
-31E4:160D 1C 18 0C 24 20 20 db 1Ch, 18h, 0Ch, 24h, 20h, 20h
-31E4:1613 1C 18 18 14 10 10 db 1Ch, 18h, 18h, 14h, 10h, 10h
-31E4:1619 0C 08 08 0A 09 04 db 0Ch, 08h, 08h, 0Ah, 09h, 04h
-31E4:161F 10 12 08 30 20 18 db 10h, 12h, 08h, 30h, 20h, 18h
-31E4:1625 28 18 10 20 10 08 db 28h, 18h, 10h, 20h, 10h, 08h
-31E4:162B 18 08 00 10 00 00 db 18h, 08h, 00h, 10h, 00h, 00h
-31E4:1631 10 0E 05 00 00 00 db 10h, 0Eh, 05h, 00h, 00h, 00h
-31E4:1637 2F 2B 2B 34 26 1A db 2Fh, 2Bh, 2Bh, 34h, 26h, 1Ah
-31E4:163D 26 21 21 1C 18 18 db 26h, 21h, 21h, 1Ch, 18h, 18h
-31E4:1643 14 10 10 0C 08 08 db 14h, 10h, 10h, 0Ch, 08h, 08h
-31E4:1649 08 0C 00 28 08 00 db 08h, 0Ch, 00h, 28h, 08h, 00h
-31E4:164F 30 20 18 28 18 10 db 30h, 20h, 18h, 28h, 18h, 10h
-31E4:1655 20 10 08 18 08 00 db 20h, 10h, 08h, 18h, 08h, 00h
-31E4:165B 10 00 00 14 18 db 10h, 00h, 00h, 14h, 18h
-31E4:1660 008B[00] db 139 dup (0)
-31E4:16EB unprocessed_vga_palette3 db 0Eh, 0Bh, 08h, 10h, 08h, 00h
-31E4:16F1 14 0C 04 18 10 08 db 14h, 0Ch, 04h, 18h, 10h, 08h
-31E4:16F7 1C 14 0C 20 18 10 db 1Ch, 14h, 0Ch, 20h, 18h, 10h
-31E4:16FD 1F 1F 1F db 1Fh, 1Fh, 1Fh
-31E4:1700 3F 3F 3F db 3Fh, 3Fh, 3Fh
-31E4:1703 0024[00] db 36 dup (0)
-
-31E4:1727 upper_vga_palette db 0Dh, 09h, 04h ; colours for pallete
- db 12h, 0Dh, 06h ; entries #F0h - FFh
- db 17h, 10h, 09h
- db 1Ch, 15h, 0Dh
- db 21h, 19h, 10h
- db 26h, 1Eh, 15h
- db 2Ch, 23h, 1Ah
- db 3Fh, 30h, 00h
- db 22h, 22h, 2Bh
- db 16h, 17h, 25h
- db 0Dh, 0Dh, 20h
- db 05h, 06h, 1Bh
- db 00h, 00h, 16h
- db 1Fh, 1Fh, 1Fh
- db 00h, 00h, 00h
- db 3Fh, 3Fh, 3Fh
-
-31E4:1757 00 replacement_vga_palette db 0 ; Replacement section of VGA palette
-31E4:1758 00 00 2E 2C 28 0E db 00h, 00h, 2Eh, 2Ch, 28h, 0Eh
-31E4:175E 0E 14 24 23 20 1B db 0Eh, 14h, 24h, 23h, 20h, 1Bh
-31E4:1764 1A 17 12 11 0F 0A db 1Ah, 17h, 12h, 11h, 0Fh, 0Ah
-31E4:176A 0A 10 10 12 1A 37 db 0Ah, 10h, 10h, 12h, 1Ah, 37h
-31E4:1770 24 1B 30 20 18 28 db 24h, 1Bh, 30h, 20h, 18h, 28h
-31E4:1776 18 10 20 10 08 18 db 18h, 10h, 20h, 10h, 08h, 18h
-31E4:177C 08 00 10 00 00 13 db 08h, 00h, 10h, 00h, 00h, 13h
-31E4:1782 14 1E 00 00 00 3F db 14h, 1Eh, 00h, 00h, 00h, 3Fh
-31E4:1788 2A 20 1C 18 0C 24 db 2Ah, 20h, 1Ch, 18h, 0Ch, 24h
-31E4:178E 20 20 1C 18 18 14 db 20h, 20h, 1Ch, 18h, 18h, 14h
-31E4:1794 10 10 0C 08 08 0A db 10h, 10h, 0Ch, 08h, 08h, 0Ah
-31E4:179A 09 04 10 12 08 30 db 09h, 04h, 10h, 12h, 08h, 30h
-31E4:17A0 20 18 28 18 10 20 db 20h, 18h, 28h, 18h, 10h, 20h
-31E4:17A6 10 08 18 08 00 10 db 10h, 08h, 18h, 08h, 00h, 10h
-31E4:17AC 00 00 10 0E 05 00 db 00h, 00h, 10h, 0Eh, 05h, 00h
-31E4:17B2 00 00 2F 2B 2B 34 db 00h, 00h, 2Fh, 2Bh, 2Bh, 34h
-31E4:17B8 26 1A 26 21 21 1C db 26h, 1Ah, 26h, 21h, 21h, 1Ch
-31E4:17BE 18 18 14 10 10 0C db 18h, 18h, 14h, 10h, 10h, 0Ch
-31E4:17C4 08 08 08 0C 00 28 db 08h, 08h, 08h, 0Ch, 00h, 28h
-31E4:17CA 08 00 30 20 18 28 db 08h, 00h, 30h, 20h, 18h, 28h
-31E4:17D0 18 10 20 10 08 18 db 18h, 10h, 20h, 10h, 08h, 18h
-31E4:17D6 08 00 10 00 00 14 db 08h, 00h, 10h, 00h, 00h, 14h
-31E4:17DC 18 00 00 00 00 32 db 18h, 00h, 00h, 00h, 00h, 32h
-31E4:17E2 20 1F 2A 1A 18 22 db 20h, 1Fh, 2Ah, 1Ah, 18h, 22h
-31E4:17E8 14 12 1A 0F 0D 12 db 14h, 12h, 1Ah, 0Fh, 0Dh, 12h
-31E4:17EE 0A 08 2F 04 00 26 db 0Ah, 08h, 2Fh, 04h, 00h, 26h
-31E4:17F4 00 1D 1C 00 16 12 db 00h, 1Dh, 1Ch, 00h, 16h, 12h
-31E4:17FA 00 0E 37 2A 00 2C db 00h, 0Eh, 37h, 2Ah, 00h, 2Ch
-31E4:1800 21 00 22 19 00 18 db 21h, 00h, 22h, 19h, 00h, 18h
-31E4:1806 11 00 0E 0A 00 db 11h, 00h, 0Eh, 0Ah, 00h
-31E4:180B 0E replacement_vga_ palette2 db 0Eh
-31E4:180C 0B 08 10 08 00 14 db 0Bh, 08h, 10h, 08h, 00h, 14h
-31E4:1812 0C 04 18 10 08 1C db 0Ch, 04h, 18h, 10h, 08h, 1Ch
-31E4:1818 14 0C 20 18 10 1F db 14h, 0Ch, 20h, 18h, 10h, 1Fh
-31E4:181E 1F 1F db 1Fh, 1Fh
-31E4:1820 3F 3F 3F db 3Fh, 3Fh, 3Fh
-
-31E4:1823 000D[00] db 13 dup (0)
-
-31E4:1830 413A animation_rec_1 dw 413Ah ; Disk resource Id
-31E4:1832 12 00 00 00 db 12h, 00h, 00h, 00h
-31E4:1836 00 00 00 db 00h, 00h, 00h
-31E4:1839 413C animation_rec_2 dw 413Ch
-31E4:183B 12 00 00 00 db 12h, 00h, 00h, 00h
-31E4:183F 00 00 00 db 00h, 00h, 00h
-31E4:1842 413B animation_rec_3 dw 413Bh
-31E4:1844 12 00 00 00 db 12h, 00h, 00h, 00h
-31E4:1848 00 00 00 db 00h, 00h, 00h
-
-31E4:184B 7901 animation_rec_4 dw 7901h
-31E4:184D 12 db 12h
-31E4:184E 0000 dw 0
-
-31E4:1850 00 00 00 00 anim_src_table db 0, 0, 0, 0
-31E4:1854 00 cp_num_digits db 0
-31E4:1855 00 cp_num_tries db 0
-31E4:1856 3D0F cp_proc dw offset cp_proc_1
-
-; Remaining entries of anim_src_table
-
-31E4:1858 E8 00 E0 00 20 00 30 00
-31E4:185E 30 00 33 01 E0 00 20 00
-31E4:1866 30 00 B9 00 A8 00 D0 00
-31E4:186E 28 00 0A 01 28 01 10 00
-31E4:1876 08 00 11 01 28 01 10 00
-31E4:187E 08 00 24 01 28 01 10 00
-31E4:1886 08 00 2B 01 28 01 10 00
-31E4:188E 08 00 F6 00 18 01 30 00
-31E4:1896 0E 00 28 01 18 01 30 00
-
-31e4:189E 0E 00 dw 0E00h
-
-; The table below contains the offset for the code fragments to handle each of
-; the possible opcodes in the simple instruction interpreter used by the game
-
-31E4:18A0 3F9F sequence_table dw offset sequence_restore_sp ; 00/01h opcode
-31E4:18A2 3E72 dw offset sequence_add ; 02/03h opcode
-31E4:18A4 3E7C dw offset sequence_subtract ; 04/05h opcode
-31E4:18A6 3E86 dw offset sequence_multiply ; 06/07h opcode
-31E4:18A8 3E92 dw offset sequence_divide ; 08/09h opcode
-31E4:18AA 3EA0 dw offset sequence_not_equals ; 05h opcode
-31E4:18AC 3EBA dw offset sequence_equals ; 06h opcode
-31E4:18AE 3EC3 dw offset sequence_greater ; 0E/0Fh opcode
-31E4:18B0 3ECC dw offset sequence_smaller ; 10/11h opcode
-31E4:18B2 3ED5 dw offset sequence_smaller2 ; 12/13h opcode
-31E4:18B4 3EDE dw offset sequence_greater2 ; 14/15h opcode
-31E4:18B6 3EE7 dw offset sequence_and ; 16/17h opcode
-31E4:18B8 3EF2 dw offset sequence_or ; 18/19h opcode
-31E4:18BA 3EFD dw offset sequence_logical_and ; 1A/1Bh opcode
-31E4:18BC 3F0C dw offset sequence_logical_or ; 1C/1Dh opcode
-31E4:18BE 3F1B dw offset sequence_get_field ; 1E/1Fh opcode
-31E4:18C0 3F2D dw offset sequence_set_field ; 20/21h opcode
-31E4:18C2 3F46 dw offset sequence_push_value ; 22/23h opcode
-31E4:18C4 3F4E dw offset sequence_subroutine ; 24/25h opcode
-31E4:18C6 3F58 dw offset sequence_call_method ; 26/27h opcode
-31E4:18C8 3F9E dw offset sequence_end ; 28/29h opcode
-31E4:18CA 3F90 dw offset sequence_cond_jump ; 2A/2Bh opcode
-31E4:18CC 3F99 dw offset sequence_jump ; 2C/2Dh opcode
-31E4:18CE 3F9F dw offset sequence_restore_sp ; 2E/2Fh opcode
-31E4:18D0 3F9F dw offset sequence_restore_sp ; 30/31h opcode
-31E4:18D2 3F3F dw offset sequence_random ; 32/33h opcode
-
-31E4:18D4 003C[00] db 60 dup (0)
-31E4:1910 0000 current_sp dw 0
-
-31E4:1912 000E[00] db 14 dup (0)
-
-31E4:1920 0000 room_exit_hotspot_id dw 0
-31E4:1922 0000 dest_room_num dw 0
-31E4:1924 0000 hotspot_id dw 0
-31E4:1926 00 data_669 db 0 ; xref 273F:47F3, 273F:4829
- ; 273F:A00C
-31E4:1927 0000 active_animation_offset dw 0
-
-31E4:1929 96 00 24 81 exit_coord_list db 96h, 00h, 24h, 81h
-31E4:192D 02 00 00 db 02h, 00h, 00h
-31E4:1930 0051[00] db 81 dup (0)
-
-31E4:1981 E3 00 DA 80 01 00 db 0E3h, 00h,0DAh, 80h, 01h, 00h
-31E4:1987 44 01 DA 00 03 00 db 44h, 01h,0DAh, 00h, 03h, 00h
-31E4:198D BA 01 FC 00 05 00 db 0BAh, 01h,0FCh, 00h, 05h, 00h
-31E4:1993 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:1999 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:199F 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:19A5 00 00 06 06 db 0, 0, 6, 6
-31E4:19A9 0018[0C] db 24 dup (0Ch)
-31E4:19C1 00 00 00 00 00 0C db 00h, 00h, 00h, 00h, 00h, 0Ch
-31E4:19C7 0012[00] db 18 dup (0)
-31E4:19D9 80 00 1B 01 02 00 db 80h, 00h, 1Bh, 01h, 02h, 00h
-31E4:19DF B8 01 1B 01 04 db 0B8h, 01h, 1Bh, 01h, 04h
-31E4:19E4 001C[00] db 28 dup (0)
-31E4:1A00 06 db 6
-31E4:1A01 0030[00] db 48 dup (0)
-31E4:1A31 52 01 3C 01 03 db 52h, 01h, 3Ch, 01h, 03h
-31E4:1A36 0053[00] db 83 dup (0)
-31E4:1A89 3A 01 DD 00 06 00 db 3Ah, 01h,0DDh, 00h, 06h, 00h
-31E4:1A8F AA 01 0B 81 28 00 db 0AAh, 01h, 0Bh, 81h, 28h, 00h
-31E4:1A95 00 db 00h
-31E4:1A96 003C[00] db 60 dup (0)
-31E4:1AD2 06 06 06 06 db 6, 6, 6, 6
-31E4:1AD6 000B[00] db 11 dup (0)
-31E4:1AE1 AA 01 0B 01 05 00 db 0AAh, 01h, 0Bh, 01h, 05h, 00h
-31E4:1AE7 83 00 0B 01 db 83h, 00h, 0Bh, 01h
-31E4:1AEB 29 db 29h
-31E4:1AEC 0041[00] db 65 dup (0)
-31E4:1B2D 06 db 6
-31E4:1B2E 000B[00] db 11 dup (0)
-31E4:1B39 9A 00 0A 01 08 db 9Ah, 00h, 0Ah, 01h, 08h
-31E4:1B3E 0053[00] db 83 dup (0)
-31E4:1B91 17 01 4B 01 07 00 db 17h, 01h, 4Bh, 01h, 07h, 00h
-31E4:1B97 F2 00 FC 00 db 0F2h, 00h,0FCh, 00h
-31E4:1B9B 09 db 9
-31E4:1B9C 0021[00] db 33 dup (0)
-31E4:1BBD 0018[06] db 24 dup (6)
-31E4:1BD5 00 06 06 06 db 0, 6, 6, 6
-31E4:1BD9 0010[00] db 16 dup (0)
-31E4:1BE9 52 01 44 01 08 00 db 52h, 01h, 44h, 01h, 08h, 00h
-31E4:1BEF 81 00 19 01 0A 00 db 81h, 00h, 19h, 01h, 0Ah, 00h
-31E4:1BF5 0021[00] db 33 dup (0)
-31E4:1C16 0017[06] db 23 dup (6)
-31E4:1C2D 00 06 06 06 db 0, 6, 6, 6
-31E4:1C31 0010[00] db 16 dup (0)
-31E4:1C41 BF 01 09 01 09 00 db 0BFh, 01h, 09h, 01h, 09h, 00h
-31E4:1C47 B8 00 4B 01 0B 00 db 0B8h, 00h, 4Bh, 01h, 0Bh, 00h
-31E4:1C4D 7E 00 2B 01 0D 00 db 7Eh, 00h, 2Bh, 01h, 0Dh, 00h
-31E4:1C53 02 01 03 81 22 00 db 02h, 01h, 03h, 81h, 22h, 00h
-31E4:1C59 00 db 00h
-31E4:1C5A 0015[00] db 21 dup (0)
-31E4:1C6F 06 06 db 6, 6
-31E4:1C71 0C db 0Ch
-31E4:1C72 0C 0C 0C 0C 0C 0C data_691 db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch ; xref 31E4:726C
-31E4:1C78 0C
-31E4:1C79 0C 0C 0C 0C db 0Ch, 0Ch, 0Ch, 0Ch
-31E4:1C7D 0C data_692 db 0Ch ; Data table (indexed access)
-31E4:1C7E 0C 0C 0C 0C 0C 0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
-31E4:1C84 06 00 12 db 06h, 00h, 12h
-31E4:1C87 0C 0C db 0Ch, 0Ch
-31E4:1C89 0010[00] db 16 dup (0)
-31E4:1C99 F2 00 FC 00 0A 00 db 0F2h, 00h,0FCh, 00h, 0Ah, 00h
-31E4:1C9F 0C 01 4B 01 1B 00 db 0Ch, 01h, 4Bh, 01h, 1Bh, 00h
-31E4:1CA5 0023[00] db 35 dup (0)
-31E4:1CC8 06 db 6
-31E4:1CC9 000D[00] db 13 dup (0)
-31E4:1CD6 06 00 00 00 00 00 db 6, 0, 0, 0, 0, 0
-31E4:1CDC 06 00 00 db 6, 0, 0
-31E4:1CDF 0012[00] db 18 dup (0)
-31E4:1CF1 05 01 C4 00 14 00 db 05h, 01h,0C4h, 00h, 14h, 00h
-31E4:1CF7 6B 01 2C 01 1B 00 db 6Bh, 01h, 2Ch, 01h, 1Bh, 00h
-31E4:1CFD A5 00 D4 80 20 00 db 0A5h, 00h,0D4h, 80h, 20h, 00h
-31E4:1D03 0018[00] db 24 dup (0)
-31E4:1D1B 06 06 06 06 06 db 6, 6, 6, 6, 6
-31E4:1D20 000F[00] db 15 dup (0)
-31E4:1D2F 06 00 00 00 00 0C db 06h, 00h, 00h, 00h, 00h, 0Ch
-31E4:1D35 00 06 00 00 db 00h, 06h, 00h, 00h
-31E4:1D39 0010[00] db 16 dup (0)
-31E4:1D49 BF 01 26 01 0A 00 db 0BFh, 01h, 26h, 01h, 0Ah, 00h
-31E4:1D4F 80 00 35 01 0E 00 db 80h, 00h, 35h, 01h, 0Eh, 00h
-31E4:1D55 BC 00 43 01 14 00 db 0BCh, 00h, 43h, 01h, 14h, 00h
-31E4:1D5B 001D[00] db 29 dup (0)
-31E4:1D78 0C 00 06 06 06 0C db 0Ch, 00h, 06h, 06h, 06h, 0Ch
-31E4:1D7E 0C 06 db 0Ch, 06h
-31E4:1D80 0007[0C] db 7 dup (0Ch)
-31E4:1D87 00 0C 0C 06 06 0C db 00h, 0Ch, 0Ch, 06h, 06h, 0Ch
-31E4:1D8D 00 00 06 0C 00 db 00h, 00h, 06h, 0Ch, 00h
-31E4:1D92 000F[00] db 15 dup (0)
-31E4:1DA1 BF 01 10 01 0D 00 db 0BFh, 01h, 10h, 01h, 0Dh, 00h
-31E4:1DA7 80 00 14 01 0F 00 db 80h, 00h, 14h, 01h, 0Fh, 00h
-31E4:1DAD D2 00 46 01 13 00 db 0D2h, 00h, 46h, 01h, 13h, 00h
-31E4:1DB3 F1 00 E8 80 1F 00 db 0F1h, 00h,0E8h, 80h, 1Fh, 00h
-31E4:1DB9 001A[00] db 26 dup (0)
-31E4:1DD3 06 06 0C 0C 0C 00 db 06h, 06h, 0Ch, 0Ch, 0Ch, 00h
-31E4:1DD9 0C 0C 0C 0C 0C 0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
-31E4:1DDF 00 0C 0C 0C 12 00 db 00h, 0Ch, 0Ch, 0Ch, 12h, 00h
-31E4:1DE5 00 00 0C 00 db 00h, 00h, 0Ch, 00h
-31E4:1DE9 0010[00] db 16 dup (0)
-31E4:1DF9 BF 01 24 01 0E 00 db 0BFh, 01h, 24h, 01h, 0Eh, 00h
-31E4:1DFF FA 00 46 01 11 00 db 0FAh, 00h, 46h, 01h, 11h, 00h
-31E4:1E05 F4 00 F4 80 26 00 db 0F4h, 00h,0F4h, 80h, 26h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 415
-
-31E4:1E0B 00 00 db 00h, 00h
-31E4:1E0D 001F[00] db 31 dup (0)
-31E4:1E2C 06 06 06 00 00 06 db 6, 6, 6, 0, 0, 6
-31E4:1E32 06 06 06 00 00 00 db 6, 6, 6, 0, 0, 0
-31E4:1E38 06 06 00 db 6, 6, 0
-31E4:1E3B 0007[00] db 7 dup (0)
-31E4:1E42 0C 00 db 0Ch, 00h
-31E4:1E44 000D[00] db 13 dup (0)
-31E4:1E51 12 01 B4 00 0F 00 db 12h, 01h,0B4h, 00h, 0Fh, 00h
-31E4:1E57 0C 01 46 01 11 00 db 0Ch, 01h, 46h, 01h, 11h, 00h
-31E4:1E5D 0023[00] db 35 dup (0)
-31E4:1E80 06 00 00 00 00 06 db 6, 0, 0, 0, 0, 6
-31E4:1E86 06 06 db 6, 6
-31E4:1E88 0007[06] db 7 dup (6)
-31E4:1E8F 00 06 06 06 00 06 db 0, 6, 6, 6, 0, 6
-31E4:1E95 00 00 06 06 db 0, 0, 6, 6
-31E4:1E99 0010[00] db 16 dup (0)
-31E4:1EA9 E1 00 EA 00 0F 00 db 0E1h, 00h,0EAh, 00h, 0Fh, 00h
-31E4:1EAF B1 00 46 01 12 00 db 0B1h, 00h, 46h, 01h, 12h, 00h
-31E4:1EB5 BF 01 30 01 13 00 db 0BFh, 01h, 30h, 01h, 13h, 00h
-31E4:1EBB 80 00 32 01 15 00 db 80h, 00h, 32h, 01h, 15h, 00h
-31E4:1EC1 4B 01 05 81 1D db 4Bh, 01h, 05h, 81h, 1Dh
-31E4:1EC6 000D[00] db 13 dup (0)
-31E4:1ED3 0008[0C] db 8 dup (0Ch)
-31E4:1EDB 00 00 00 06 0C 0C db 00h, 00h, 00h, 06h, 0Ch, 0Ch
-31E4:1EE1 12 12 06 06 0C 0C db 12h, 12h, 06h, 06h, 0Ch, 0Ch
-31E4:1EE7 0C 06 18 0C 0C 0C db 0Ch, 06h, 18h, 0Ch, 0Ch, 0Ch
-31E4:1EED 00 db 00h
-31E4:1EEE 0C 0C 0C db 0Ch, 0Ch, 0Ch
-31E4:1EF1 0010[00] db 16 dup (0)
-31E4:1F01 48 01 DD 00 11 00 db 48h, 01h,0DDh, 00h, 11h, 00h
-31E4:1F07 80 00 20 01 17 00 db 80h, 00h, 20h, 01h, 17h, 00h
-31E4:1F0D BE 01 37 01 18 00 db 0BEh, 01h, 37h, 01h, 18h, 00h
-31E4:1F13 02 01 EB 00 1C db 02h, 01h,0EBh, 00h, 1Ch
-31E4:1F18 0022[00] db 34 dup (0)
-31E4:1F3A 06 06 0C 0C 00 00 db 06h, 06h, 0Ch, 0Ch, 00h, 00h
-31E4:1F40 12 00 db 12h, 00h
-31E4:1F42 0017[00] db 23 dup (0)
-31E4:1F59 0F 01 EE 00 0E 00 db 0Fh, 01h,0EEh, 00h, 0Eh, 00h
-31E4:1F5F 80 00 1F 01 11 00 db 80h, 00h, 1Fh, 01h, 11h, 00h
-31E4:1F65 BE 01 24 01 14 00 db 0BEh, 01h, 24h, 01h, 14h, 00h
-31E4:1F6B D7 00 42 01 19 00 db 0D7h, 00h, 42h, 01h, 19h, 00h
-31E4:1F71 72 01 EB 80 1E 00 db 72h, 01h,0EBh, 80h, 1Eh, 00h
-31E4:1F77 9C 00 ED 00 db 9Ch, 00h,0EDh, 00h
-31E4:1F7B 23 db 23h
-31E4:1F7C 000C[00] db 12 dup (0)
-31E4:1F88 0C 0C 00 00 06 06 db 0Ch, 0Ch, 00h, 00h, 06h, 06h
-31E4:1F8E 06 00 0C 06 06 06 db 06h, 00h, 0Ch, 06h, 06h, 06h
-31E4:1F94 12 12 0C 0C 06 06 db 12h, 12h, 0Ch, 0Ch, 06h, 06h
-31E4:1F9A 18 00 0C 00 00 1E db 18h, 00h, 0Ch, 00h, 00h, 1Eh
-31E4:1FA0 0C 00 db 0Ch, 00h
-31E4:1FA2 000F[00] db 15 dup (0)
-31E4:1FB1 D3 00 C0 00 0D 00 db 0D3h, 00h,0C0h, 00h, 0Dh, 00h
-31E4:1FB7 80 00 18 01 13 00 db 80h, 00h, 18h, 01h, 13h, 00h
-31E4:1FBD 66 01 41 01 0C 00 db 66h, 01h, 41h, 01h, 0Ch, 00h
-31E4:1FC3 42 01 E2 80 24 00 db 42h, 01h,0E2h, 80h, 24h, 00h
-31E4:1FC9 0017[00] db 23 dup (0)
-31E4:1FE0 0C 00 00 06 06 06 db 0Ch, 00h, 00h, 06h, 06h, 06h
-31E4:1FE6 0008[06] db 8 dup (6)
-31E4:1FEE 0C 0C 06 06 06 00 db 0Ch, 0Ch, 06h, 06h, 06h, 00h
-31E4:1FF4 0C 00 00 06 12 00 db 0Ch, 00h, 00h, 06h, 12h, 00h
-31E4:1FFA 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:2000 00 data_721 db 0 ; Data table (indexed access)
-31E4:2001 0008[00] db 8 dup (0)
-31E4:2009 A2 01 07 01 11 00 db 0A2h, 01h, 07h, 01h, 11h, 00h
-31E4:200F 8F 00 03 01 16 00 db 8Fh, 00h, 03h, 01h, 16h, 00h
-31E4:2015 00 db 00h
-31E4:2016 002C[00] db 44 dup (0)
-31E4:2042 06 06 db 6, 6
-31E4:2044 001D[00] db 29 dup (0)
-31E4:2061 F2 00 FC 00 15 00 db 0F2h, 00h,0FCh, 00h, 15h, 00h
-31E4:2067 14 01 4B 01 17 db 14h, 01h, 4Bh, 01h, 17h
-31E4:206C 002A[00] db 42 dup (0)
-31E4:2096 06 00 00 00 00 06 db 6, 0, 0, 0, 0, 6
-31E4:209C 06 06 00 00 06 db 6, 6, 0, 0, 6
-31E4:20A1 0018[00] db 24 dup (0)
-31E4:20B9 A2 01 07 01 12 00 db 0A2h, 01h, 07h, 01h, 12h, 00h
-31E4:20BF 8F 00 03 01 16 00 db 8Fh, 00h, 03h, 01h, 16h, 00h
-31E4:20C5 00 db 00h
-31E4:20C6 002B[00] db 43 dup (0)
-31E4:20F1 06 06 db 6, 6
-31E4:20F3 001E[00] db 30 dup (0)
-31E4:2111 A2 01 07 01 19 00 db 0A2h, 01h, 07h, 01h, 19h, 00h
-31E4:2117 8F 00 03 01 12 db 8Fh, 00h, 03h, 01h, 12h
-31E4:211C 0027[00] db 39 dup (0)
-31E4:2143 06 06 06 06 00 00 db 6, 6, 6, 6, 0, 0
-31E4:2149 06 06 06 00 00 00 db 6, 6, 6, 0, 0, 0
-31E4:214F 00 06 06 00 db 0, 6, 6, 0
-31E4:2153 0016[00] db 22 dup (0)
-31E4:2169 F2 00 FC 00 13 00 db 0F2h, 00h,0FCh, 00h, 13h, 00h
-31E4:216F 14 01 4B 01 18 00 db 14h, 01h, 4Bh, 01h, 18h, 00h
-31E4:2175 0029[00] db 41 dup (0)
-31E4:219E 06 00 00 00 06 06 db 6, 0, 0, 0, 6, 6
-31E4:21A4 06 00 00 00 06 00 db 6, 0, 0, 0, 6, 0
-31E4:21AA 00 db 0
-31E4:21AB 0016[00] db 22 dup (0)
-31E4:21C1 12 01 B4 00 14 00 db 12h, 01h,0B4h, 00h, 14h, 00h
-31E4:21C7 14 01 46 01 db 14h, 01h, 46h, 01h
-31E4:21CB 0C db 0Ch
-31E4:21CC 0023[00] db 35 dup (0)
-31E4:21EF 06 06 db 6, 6
-31E4:21F1 000E[00] db 14 dup (0)
-31E4:21FF 06 00 00 00 00 06 db 6, 0, 0, 0, 0, 6
-31E4:2205 00 00 db 0, 0
-31E4:2207 0012[00] db 18 dup (0)
-31E4:2219 A2 01 07 01 0B 00 db 0A2h, 01h, 07h, 01h, 0Bh, 00h
-31E4:221F 8F 00 03 01 0C 00 db 8Fh, 00h, 03h, 01h, 0Ch, 00h
-31E4:2225 0023[00] db 35 dup (0)
-31E4:2248 06 00 00 00 06 06 db 6, 0, 0, 0, 6, 6
-31E4:224E 06 db 6
-31E4:224F 0008[06] db 8 dup (6)
-31E4:2257 00 06 06 06 00 06 db 0, 6, 6, 6, 0, 6
-31E4:225D 00 00 06 06 db 0, 0, 6, 6
-31E4:2261 0010[00] db 16 dup (0)
-31E4:2271 02 01 EE 00 12 db 02h, 01h,0EEh, 00h, 12h
-31E4:2276 0053[00] db 83 dup (0)
-31E4:22C9 9B 00 4A 81 11 00 db 9Bh, 00h, 4Ah, 81h, 11h, 00h
-31E4:22CF 0052[00] db 82 dup (0)
-31E4:2321 C3 00 3B 81 13 00 db 0C3h, 00h, 3Bh, 81h, 13h, 00h
-31E4:2327 00 db 00h
-31E4:2328 0051[00] db 81 dup (0)
-31E4:2379 65 01 43 81 0E db 65h, 01h, 43h, 81h, 0Eh
-31E4:237E 0053[00] db 83 dup (0)
-31E4:23D1 AC 00 43 81 0C 00 db 0ACh, 00h, 43h, 81h, 0Ch, 00h
-31E4:23D7 0042[00] db 66 dup (0)
-31E4:2419 00 data_743 db 0
-31E4:241A 000F[00] db 15 dup (0)
-31E4:2429 AC 00 43 01 0C 00 db 0ACh, 00h, 43h, 01h, 0Ch, 00h
-31E4:242F 0052[00] db 82 dup (0)
-31E4:2481 C3 00 34 81 0A 00 db 0C3h, 00h, 34h, 81h, 0Ah, 00h
-31E4:2487 00 db 00h
-31E4:2488 0051[00] db 81 dup (0)
-31E4:24D9 4B 01 43 01 13 00 db 4Bh, 01h, 43h, 01h, 13h, 00h
-31E4:24DF 0052[00] db 82 dup (0)
-31E4:2531 80 00 04 81 14 00 db 80h, 00h, 04h, 81h, 14h, 00h
-31E4:2537 00 db 00h
-31E4:2538 0051[00] db 81 dup (0)
-31E4:2589 AC 00 43 01 0C 00 db 0ACh, 00h, 43h, 01h, 0Ch, 00h
-31E4:258F 0052[00] db 82 dup (0)
-31E4:25E1 42 01 45 81 0F 00 db 42h, 01h, 45h, 81h, 0Fh, 00h
-31E4:25E7 83 00 0B db 83h, 00h, 0Bh
-31E4:25EA 41 27 db 41h, 27h
-31E4:25EC 003F[00] db 63 dup (0)
-31E4:262B 06 06 db 6, 6
-31E4:262D 000C[00] db 12 dup (0)
-31E4:2639 AA 01 0B 81 26 00 db 0AAh, 01h, 0Bh, 81h, 26h, 00h
-31E4:263F 83 00 0B 41 28 00 db 83h, 00h, 0Bh, 41h, 28h, 00h
-31E4:2645 003F[00] db 63 dup (0)
-31E4:2684 06 db 6
-31E4:2685 000C[00] db 12 dup (0)
-31E4:2691 AA 01 0B 81 27 00 db 0AAh, 01h, 0Bh, 81h, 27h, 00h
-31E4:2697 83 00 0B 41 29 00 db 83h, 00h, 0Bh, 41h, 29h, 00h
-31E4:269D 0040[00] db 64 dup (0)
-31E4:26DD 06 db 6
-31E4:26DE 000B[00] db 11 dup (0)
-31E4:26E9 AA 01 0B 01 28 db 0AAh, 01h, 0Bh, 01h, 28h
-31E4:26EE 0029[00] db 41 dup (0)
-31E4:2717 0000 data_756 dw 0 ; Data table (indexed access)
- ; xref 31E4:BD21
-31E4:2719 0028[00] db 40 dup (0)
-31E4:2741 BB 01 2B 01 2B db 0BBh, 01h, 2Bh, 01h, 2Bh
-31E4:2746 0053[00] db 83 dup (0)
-31E4:2799 7A 00 12 01 2A 00 db 7Ah, 00h, 12h, 01h, 2Ah, 00h
-31E4:279F BA 01 11 01 db 0BAh, 01h, 11h, 01h
-31E4:27A3 2C db 2Ch
-31E4:27A4 0044[00] db 68 dup (0)
-31E4:27E8 06 06 06 06 06 00 db 06h, 06h, 06h, 06h, 06h, 00h
-31E4:27EE 00 00 00 0C 01 48 db 00h, 00h, 00h, 0Ch, 01h, 48h
-31E4:27F4 01 2B 00 D1 00 F4 db 01h, 2Bh, 00h,0D1h, 00h,0F4h
-31E4:27FA 00 32 00 6C 01 DD db 00h, 32h, 00h, 6Ch, 01h,0DDh
-31E4:2800 00 data_759 db 0 ; xref 31E4:1895
-31E4:2801 2D 00 00 db 2Dh, 00h, 00h
-31E4:2804 003D[00] db 61 dup (0)
-31E4:2841 0C 0C 00 0C 00 06 db 0Ch, 0Ch, 00h, 0Ch, 00h, 06h
-31E4:2847 06 00 94 00 C1 00 db 06h, 00h, 94h, 00h,0C1h, 00h
-31E4:284D 34 00 BF 01 C2 00 db 34h, 00h,0BFh, 01h,0C2h, 00h
-31E4:2853 33 00 7F 00 30 01 db 33h, 00h, 7Fh, 00h, 30h, 01h
-31E4:2859 2C 00 BF 01 23 01 db 2Ch, 00h,0BFh, 01h, 23h, 01h
-31E4:285F 2E 00 00 db 2Eh, 00h, 00h
-31E4:2862 0034[00] db 52 dup (0)
-31E4:2896 0C 0C 0C 00 12 06 db 0Ch, 0Ch, 0Ch, 00h, 12h, 06h
-31E4:289C 12 00 00 06 00 7F db 12h, 00h, 00h, 06h, 00h, 7Fh
-31E4:28A2 00 C1 00 32 00 06 db 00h,0C1h, 00h, 32h, 00h, 06h
-31E4:28A8 01 A8 00 2F 00 7F db 01h,0A8h, 00h, 2Fh, 00h, 7Fh
-31E4:28AE 00 2F 01 2D 00 B1 db 00h, 2Fh, 01h, 2Dh, 00h,0B1h
-31E4:28B4 01 34 01 db 01h, 34h, 01h
-31E4:28B7 30 db 30h
-31E4:28B8 0036[00] db 54 dup (0)
-31E4:28EE 0C 0C 0C 0C 00 06 db 0Ch, 0Ch, 0Ch, 0Ch, 00h, 06h
-31E4:28F4 12 12 00 00 00 BB db 12h, 12h, 00h, 00h, 00h,0BBh
-31E4:28FA 01 3A 01 2E 00 00 db 01h, 3Ah, 01h, 2Eh, 00h, 00h
-31E4:2900 0051[00] db 81 dup (0)
-31E4:2951 8A 00 0A 01 2E db 8Ah, 00h, 0Ah, 01h, 2Eh
-31E4:2956 0053[00] db 83 dup (0)
-31E4:29A9 BB 01 3A 01 2E 00 db 0BBh, 01h, 3Ah, 01h, 2Eh, 00h
-31E4:29AF 7F 00 33 01 01 db 7Fh, 00h, 33h, 01h, 01h
-31E4:29B4 0019[00] db 25 dup (0)
-31E4:29CD 06 db 6
-31E4:29CE 0033[00] db 51 dup (0)
-
-; The hotspot table contains a set of hotspot entries, each one being an Id
-; following by four word parameters specifying the bounds of the hotspot;
-; each coordinate being the position + 80h. The table is ended by an Id
-; entry of 0
-
-31E4:2A01 2716 hotspot_table dw 2716h ;Id
- dw 99h, b8h, 112h, 147h ;xs,xe,ys,ye
-.... table contents removed....
-
-31E4:2D5C 0000 dw 0 ; End of list specifier
-31E4:2D5E 00 db 0
-
-31E4:2D5F actions_list dw 1
- db 1, 'Get', 0
-31E4:2D66 dw 0
- db 1, 'Drop', 0
-31E4:2D6E dw 3
- db 1, 'Push', 0
-31E4:2D76 dw 4
- db 1, 'Pull', 0
-31E4:2D7E dw 5
- db 1, 'Operate', 0
-31E4:2D89 dw 6
- db 1, 'Open', 0
-31E4:2D91 dw 7
- db 1, 'Close', 0
-31E4:2D9A dw 8
- db 1, 'Lock', 0
-31E4:2DA2 dw 9
- db 1, 'Unlock', 0
-31E4:2DAC dw 10
- db 1, 'Use', 0
-31E4:2DB3 dw 11
- db 1, 'Give', 0
-31E4:2DBB dw 12
- db 1, 'Talk to', 0
-31E4:2DC6 dw 13
- db 1, 'Tell', 0
-31E4:2DCE dw 14
- db 1, 'Buy', 0
-31E4:2DD5 dw 15
- db 1, 'Look', 0
-31E4:2DDD dw 16
- db 1, 'Look at', 0
-31E4:2DE8 dw 17
- db 1, 'Look through', 0
-31E4:2DF8 dw 18
- db 1, 'Ask', 0
-31E4:2DFF dw 0
- db 1, 'Eat', 0
-31E4:2E06 dw 20
- db 1, 'Drink', 0
-31E4:2E0F dw 21
- db 1, 'Status', 0
-31E4:2E19 dw 22
- db 1, 'Go to', 0
-31E4:2E22 dw 23
- db 1, 'Return', 0
-31E4:2E2C dw 24
- db 1, 'Bribe', 0
-31E4:2E35 dw 25
- db 1, 'Examine', 0
-
-31E4:2E40 db 02h
-31E4:2E41 db 1, 'and then', 0
-31E4:2E4B db 1, 'finish', 0
-
-31E4:2E53 00 7D FF 7C db 00h, 7Dh,0FFh, 7Ch
-
-; This table contains a set of references of the room exit hotspots in
-; the various rooms - it used by the NPC movement code
-31E4:2E57 02 80 2712 room_exit_hotspots db 02h, 80h, 2712h
-31E4:2E5B 01 80 2711 db 01h, 80h, 2711h
-31E4:2E5F 11 80 2715 db 11h, 80h, 2715h
-31E4:2E63 1D 80 2716 db 1Dh, 80h, 2716h
-31E4:2E67 13 80 2717 db 13h, 80h, 2717h
-31E4:2E6B 1E 80 2718 db 1Eh, 80h, 2718h
-31E4:2E6F 0E 80 2719 db 0Eh, 80h, 2719h
-31E4:2E73 1F 80 271A db 1Fh, 80h, 271Ah
-31E4:2E77 0F 80 271E db 0Fh, 80h, 271Eh
-31E4:2E7B 0C 80 271F db 0Ch, 80h, 271Fh
-31E4:2E7F 20 80 2720 db 20h, 80h, 2720h
-31E4:2E83 14 80 2721 db 14h, 80h, 2721h
-31E4:2E87 24 80 2722 db 24h, 80h, 2722h
-31E4:2E8B 0A 80 2725 db 0Ah, 80h, 2725h
-31E4:2E8F 22 80 2726 db 22h, 80h, 2726h
-31E4:2E93 26 80 2729 db 26h, 80h, 2729h
-31E4:2E97 26 40 272A db 26h, 40h, 272Ah
-31E4:2E9B 27 80 272B db 27h, 80h, 272Bh
-31E4:2E9F 27 40 272C db 27h, 40h, 272Ch
-31E4:2EA3 28 80 272D db 28h, 80h, 272Dh
-31E4:2EA7 28 40 272C db 28h, 40h, 272Ch
-31E4:2EAB 29 80 272D db 29h, 80h, 272Dh
-31E4:2EAF 00 00 dw 0
-
-; This table contains a set of rectangles indicating the main walkable areas
-; of each room, and is used by the NPC code to choose random destinations for
-; characters after bumping into each other
-
-31E4:2EB1 02 room_bounds_table db 02h
-31E4:2EB2 01 51 01 1D 01 38 db 01h, 51h, 01h, 1Dh, 01h, 38h
-31E4:2EB8 01 B2 00 6A 01 F9 db 01h,0B2h, 00h, 6Ah, 01h,0F9h
-31E4:2EBE 00 12 01 C1 00 63 db 00h, 12h, 01h,0C1h, 00h, 63h
-31E4:2EC4 01 12 01 2E 01 FF db 01h, 12h, 01h, 2Eh, 01h,0FFh
-31E4:2ECA 00 7D 01 11 01 2E db 00h, 7Dh, 01h, 11h, 01h, 2Eh
-31E4:2ED0 01 E2 00 53 01 02 db 01h,0E2h, 00h, 53h, 01h, 02h
-31E4:2ED6 01 1B 01 D0 00 5F db 01h, 1Bh, 01h,0D0h, 00h, 5Fh
-31E4:2EDC 01 1A 01 3F 01 D6 db 01h, 1Ah, 01h, 3Fh, 01h,0D6h
-31E4:2EE2 00 69 01 F6 00 27 db 00h, 69h, 01h,0F6h, 00h, 27h
-31E4:2EE8 01 B7 00 82 01 19 db 01h,0B7h, 00h, 82h, 01h, 19h
-31E4:2EEE 01 41 01 A4 00 9F db 01h, 41h, 01h,0A4h, 00h, 9Fh
-31E4:2EF4 01 1F 01 41 01 C6 db 01h, 1Fh, 01h, 41h, 01h,0C6h
-31E4:2EFA 00 9F 01 FF 00 38 db 00h, 9Fh, 01h,0FFh, 00h, 38h
-31E4:2F00 01 86 00 9F 01 07 db 01h, 86h, 00h, 9Fh, 01h, 07h
-31E4:2F06 01 38 01 9C 00 9F db 01h, 38h, 01h, 9Ch, 00h, 9Fh
-31E4:2F0C 01 0D 01 38 01 9C db 01h, 0Dh, 01h, 38h, 01h, 9Ch
-31E4:2F12 00 9F 01 F7 db 00h, 9Fh, 01h,0F7h
-31E4:2F16 00 db 0
-31E4:2F17 38 01 CF 00 70 01 db 38h, 01h,0CFh, 00h, 70h, 01h
-31E4:2F1D EF 00 28 01 9C 00 db 0EFh, 00h, 28h, 01h, 9Ch, 00h
-31E4:2F23 9F 01 0E 01 38 01 db 9Fh, 01h, 0Eh, 01h, 38h, 01h
-31E4:2F29 A9 00 90 01 EE 00 db 0A9h, 00h, 90h, 01h,0EEh, 00h
-31E4:2F2F 1D 01 DF 00 68 01 db 1Dh, 01h,0DFh, 00h, 68h, 01h
-31E4:2F35 0F 01 38 01 C7 00 db 0Fh, 01h, 38h, 01h,0C7h, 00h
-31E4:2F3B 78 01 01 01 38 01 db 78h, 01h, 01h, 01h, 38h, 01h
-31E4:2F41 AF 00 87 01 08 01 db 0AFh, 00h, 87h, 01h, 08h, 01h
-31E4:2F47 37 01 C4 00 60 01 db 37h, 01h,0C4h, 00h, 60h, 01h
-31E4:2F4D EF 00 20 01 A0 00 db 0EFh, 00h, 20h, 01h,0A0h, 00h
-31E4:2F53 3D 01 E9 00 3D 01 db 3Dh, 01h,0E9h, 00h, 3Dh, 01h
-31E4:2F59 DA 00 7C 01 FC 00 db 0DAh, 00h, 7Ch, 01h,0FCh, 00h
-31E4:2F5F 1A 01 db 1Ah, 01h
-
-; Room exits table
-
-31E4:2F61 0000 room_exits_table dw 0
-31E4:2F63 353D dw offset room1_exits
-31E4:2F65 354D ... offset list
-31E4:2F67 3579
-31E4:2F69 3597
-31E4:2F6B 2FE3
-31E4:2F6D 2FC5
-31E4:2F6F 35A7
-31E4:2F71 3501
-31E4:2F73 34E3
-31E4:2F75 34A9
-31E4:2F77 351F
-31E4:2F79 347D
-31E4:2F7B 3451
-31E4:2F7D 3417
-31E4:2F7F 33EB
-31E4:2F81 33CD
-31E4:2F83 3385
-31E4:2F85 334B
-31E4:2F87 32F5
-31E4:2F89 32BB
-31E4:2F8B 329D
-31E4:2F8D 327F
-31E4:2F8F 3261
-31E4:2F91 3243
-31E4:2F93 3225
-31E4:2F95 3207
-31E4:2F97 31E9
-31E4:2F99 31D9
-31E4:2F9B 31C9
-31E4:2F9D 31A9
-31E4:2F9F 31B9
-31E4:2FA1 3199
-31E4:2FA3 0000
-31E4:2FA5 313D
-31E4:2FA7 30FF
-31E4:2FA9 314D
-31E4:2FAB 0000
-31E4:2FAD 315D
-31E4:2FAF 317B
-31E4:2FB1 311F
-31E4:2FB3 310F
-31E4:2FB5 30EF
-31E4:2FB7 30D1
-31E4:2FB9 30A5
-31E4:2FBB 306B
-31E4:2FBD 3031
-31E4:2FBF 3021
-31E4:2FC1 3001
-31E4:2FC3 3011
-
-31E4:2FC5 91 01 BF 01 db 11h, 30h, 91h, 01h,0BFh, 01h
-31E4:2FC9 CE 00 0E 01 0E 00 db 0CEh, 00h, 0Eh, 01h, 0Eh, 00h
-31E4:2FCF 00 00 05 00 7F 00 db 00h, 00h, 05h, 00h, 7Fh, 00h
-31E4:2FD5 AC 00 D0 00 0E 01 db 0ACh, 00h,0D0h, 00h, 0Eh, 01h
-31E4:2FDB 0D 00 00 00 29 00 db 0Dh, 00h, 00h, 00h, 29h, 00h
-31E4:2FE1 00 00 36 01 56 01 db 00h, 00h, 36h, 01h, 56h, 01h
-31E4:2FE7 C6 00 FA 00 0B 00 db 0C6h, 00h,0FAh, 00h, 0Bh, 00h
-31E4:2FED 00 00 06 00 91 01 db 00h, 00h, 06h, 00h, 91h, 01h
-31E4:2FF3 BF 01 CE 00 0E 01 db 0BFh, 01h,0CEh, 00h, 0Eh, 01h
-31E4:2FF9 0E 00 2F 27 28 00 db 0Eh, 00h, 2Fh, 27h, 28h, 00h
-31E4:2FFF 00 00 77 00 C3 00 db 00h, 00h, 77h, 00h,0C3h, 00h
-31E4:3005 CF 00 15 01 0D 00 db 0CFh, 00h, 15h, 01h, 0Dh, 00h
-31E4:300B 00 00 2E 00 00 00 db 00h, 00h, 2Eh, 00h, 00h, 00h
-31E4:3011 7F 00 9B 00 EC 00 db 7Fh, 00h, 9Bh, 00h,0ECh, 00h
-31E4:3017 3E 01 0D 00 00 00 db 3Eh, 01h, 0Dh, 00h, 00h, 00h
-31E4:301D 01 00 00 00 AA 01 db 01h, 00h, 00h, 00h,0AAh, 01h
-31E4:3023 C2 01 D7 00 3E 01 db 0C2h, 01h,0D7h, 00h, 3Eh, 01h
-31E4:3029 0E 00 00 00 2E 00 db 0Eh, 00h, 00h, 00h, 2Eh, 00h
-31E4:302F 00 00 7F 00 94 00 db 00h, 00h, 7Fh, 00h, 94h, 00h
-31E4:3035 87 00 C8 00 0D 00 db 87h, 00h,0C8h, 00h, 0Dh, 00h
-31E4:303B 00 00 32 00 00 01 db 00h, 00h, 32h, 00h, 00h, 01h
-31E4:3041 22 01 7F 00 C1 00 db 22h, 01h, 7Fh, 00h,0C1h, 00h
-31E4:3047 0B 00 00 00 2F 00 db 0Bh, 00h, 00h, 00h, 2Fh, 00h
-
-31E4:304D 7F 00 94 00 F5 00 db 7Fh, 00h, 94h, 00h,0F5h, 00h
-31E4:3053 47 01 0D 00 00 00 db 47h, 01h, 0Dh, 00h, 00h, 00h
-31E4:3059 2D 00 7F 01 96 01 db 2Dh, 00h, 7Fh, 01h, 96h, 01h
-31E4:305F F4 00 3D 01 0E 00 db 0F4h, 00h, 3Dh, 01h, 0Eh, 00h
-31E4:3065 00 00 30 00 00 00 db 00h, 00h, 30h, 00h, 00h, 00h
-31E4:306B 7D 00 C7 00 87 00 db 7Dh, 00h,0C7h, 00h, 87h, 00h
-31E4:3071 CD 00 0D 00 00 00 db 0CDh, 00h, 0Dh, 00h, 00h, 00h
-31E4:3077 34 00 AB 01 BF 01 db 34h, 00h,0ABh, 01h,0BFh, 01h
-31E4:307D 87 00 CD 00 0E 00 db 87h, 00h,0CDh, 00h, 0Eh, 00h
-31E4:3083 00 00 33 00 7D 00 db 00h, 00h, 33h, 00h, 7Dh, 00h
-31E4:3089 A7 00 E7 00 3D 01 db 0A7h, 00h,0E7h, 00h, 3Dh, 01h
-31E4:308F 0D 00 00 00 2C 00 db 0Dh, 00h, 00h, 00h, 2Ch, 00h
-31E4:3095 AB 01 F4 01 F5 00 db 0ABh, 01h,0F4h, 01h,0F5h, 00h
-31E4:309B 47 01 0E 00 00 00 db 47h, 01h, 0Eh, 00h, 00h, 00h
-31E4:30A1 2E 00 00 00 04 01 db 2Eh, 00h, 00h, 00h, 04h, 01h
-31E4:30A7 44 01 39 01 47 01 db 44h, 01h, 39h, 01h, 47h, 01h
-31E4:30AD 0C 00 00 00 2B 00 db 0Ch, 00h, 00h, 00h, 2Bh, 00h
-31E4:30B3 CF 00 F3 00 BD 00 db 0CFh, 00h,0F3h, 00h,0BDh, 00h
-31E4:30B9 00 01 0B 00 00 00 db 00h, 01h, 0Bh, 00h, 00h, 00h
-31E4:30BF 32 00 67 01 8A 01 db 32h, 00h, 67h, 01h, 8Ah, 01h
-31E4:30C5 BE 00 01 01 0B 00 db 0BEh, 00h, 01h, 01h, 0Bh, 00h
-31E4:30CB 00 00 2D 00 00 00 db 00h, 00h, 2Dh, 00h, 00h, 00h
-31E4:30D1 7F 00 9A db 7Fh, 00h, 9Ah
-
-31E4:30D4 00 C6 00 hotspot_display_buffer db 00h,0C6h, 00h
-31E4:30D7 19 01 0D 00 00 00 db 19h, 01h, 0Dh, 00h, 00h, 00h
-31E4:30DD 2A 00 A7 01 BF 01 db 2Ah, 00h,0A7h, 01h,0BFh, 01h
-31E4:30E3 CF 00 21 01 0E 00 db 0CFh, 00h, 21h, 01h, 0Eh, 00h
-31E4:30E9 00 00 2C 00 00 00 db 00h, 00h, 2Ch, 00h, 00h, 00h
-31E4:30EF A3 01 BF 01 C8 00 db 0A3h, 01h,0BFh, 01h,0C8h, 00h
-31E4:30F5 29 01 0E 00 00 00 db 29h, 01h, 0Eh, 00h, 00h, 00h
-31E4:30FB 2B 00 00 00 db 2Bh, 00h, 00h, 00h
-31E4:30FF 3F db 3Fh
-31E4:3100 01 data_771 db 1
-31E4:3101 74 01 32 01 4A 01 db 74h, 01h, 32h, 01h, 4Ah, 01h
-31E4:3107 0C 00 00 00 13 00 db 0Ch, 00h, 00h, 00h, 13h, 00h
-31E4:310D 00 00 91 01 BF 01 db 00h, 00h, 91h, 01h,0BFh, 01h
-31E4:3113 CE 00 0E 01 0E 00 db 0CEh, 00h, 0Eh, 01h, 0Eh, 00h
-31E4:3119 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:311F 91 01 BF 01 CE 00 db 91h, 01h,0BFh, 01h,0CEh, 00h
-31E4:3125 0E 01 0E 00 2D 27 db 0Eh, 01h, 0Eh, 00h, 2Dh, 27h
-31E4:312B 27 00 7F 00 AC 00 db 27h, 00h, 7Fh, 00h,0ACh, 00h
-31E4:3131 D0 00 0E 01 0D 00 db 0D0h, 00h, 0Eh, 01h, 0Dh, 00h
-31E4:3137 2E 27 29 00 00 00 db 2Eh, 27h, 29h, 00h, 00h, 00h
-31E4:313D C1 00 E0 00 1D 01 db 0C1h, 00h,0E0h, 00h, 1Dh, 01h
-31E4:3143 36 01 0C 00 26 27 db 36h, 01h, 0Ch, 00h, 26h, 27h
-31E4:3149 0A 00 00 00 7F 00 db 0Ah, 00h, 00h, 00h, 7Fh, 00h
-31E4:314F 94 00 C6 00 14 01 db 94h, 00h,0C6h, 00h, 14h, 01h
-31E4:3155 0D 00 22 27 14 00 db 0Dh, 00h, 22h, 27h, 14h, 00h
-31E4:315B 00 00 2E 01 62 01 db 00h, 00h, 2Eh, 01h, 62h, 01h
-31E4:3161 34 01 90 01 0C 00 db 34h, 01h, 90h, 01h, 0Ch, 00h
-31E4:3167 29 27 0F 00 7F 00 db 29h, 27h, 0Fh, 00h, 7Fh, 00h
-31E4:316D AC 00 D0 00 0E 01 db 0ACh, 00h,0D0h, 00h, 0Eh, 01h
-31E4:3173 0D 00 2A 27 27 00 db 0Dh, 00h, 2Ah, 27h, 27h, 00h
-31E4:3179 00 00 91 01 BF 01 db 00h, 00h, 91h, 01h,0BFh, 01h
-31E4:317F CE 00 0E 01 0E 00 db 0CEh, 00h, 0Eh, 01h, 0Eh, 00h
-31E4:3185 2B 27 26 00 7F 00 db 2Bh, 27h, 26h, 00h, 7Fh, 00h
-31E4:318B AC 00 D0 00 0E 01 db 0ACh, 00h,0D0h, 00h, 0Eh, 01h
-31E4:3191 0D 00 2C 27 28 00 db 0Dh, 00h, 2Ch, 27h, 28h, 00h
-
-31E4:3197 00 00 A3 00 CB 00 db 00h, 00h,0A3h, 00h,0CBh, 00h
-31E4:319D 36 01 4A 01 0C 00 db 36h, 01h, 4Ah, 01h, 0Ch, 00h
-31E4:31A3 20 27 0C 00 00 00 db 20h, 27h, 0Ch, 00h, 00h, 00h
-31E4:31A9 B9 00 E0 00 24 01 db 0B9h, 00h,0E0h, 00h, 24h, 01h
-31E4:31AF 4A 01 0C 00 18 27 db 4Ah, 01h, 0Ch, 00h, 18h, 27h
-31E4:31B5 13 00 00 00 63 01 db 13h, 00h, 00h, 00h, 63h, 01h
-31E4:31BB 83 01 39 01 90 01 db 83h, 01h, 39h, 01h, 90h, 01h
-31E4:31C1 0C 00 1A 27 0E 00 db 0Ch, 00h, 1Ah, 27h, 0Eh, 00h
-31E4:31C7 00 00 98 00 B9 00 db 00h, 00h, 98h, 00h,0B9h, 00h
-31E4:31CD 2E 01 48 01 0C 00 db 2Eh, 01h, 48h, 01h, 0Ch, 00h
-31E4:31D3 16 27 11 00 00 00 db 16h, 27h, 11h, 00h, 00h, 00h
-31E4:31D9 00 01 20 01 D5 00 db 00h, 01h, 20h, 01h,0D5h, 00h
-31E4:31DF 0F 01 0B 00 00 db 0Fh, 01h, 0Bh, 00h, 00h
-
-; Popmenu entry list : The contents of the popup menu get constructed in this
-; data block - first word is the number of entries, followed by the list of
-; items in it; each one being a word giving the Item Id, followed by the text
-
-31E4:31E4 1200 popmenu_entry_count dw 1200h ; Number of entries
-31E4:31E6 popmenu_entry_contents
- ... data
-
-31E4:31E9 7F 00 db 7Fh, 00h
-31E4:31EB BC 00 BB 00 29 01 db 0BCh, 00h,0BBh, 00h, 29h, 01h
-31E4:31F1 0D 00 00 00 0C 00 db 0Dh, 00h, 00h, 00h, 0Ch, 00h
-31E4:31F7 7E 01 BF 01 BB 00 db 7Eh, 01h,0BFh, 01h,0BBh, 00h
-31E4:31FD 29 01 0E 00 00 00 db 29h, 01h, 0Eh, 00h, 00h, 00h
-31E4:3203 0B 00 00 00 D8 00 db 0Bh, 00h, 00h, 00h,0D8h, 00h
-31E4:3209 61 01 2D 01 90 01 db 61h, 01h, 2Dh, 01h, 90h, 01h
-31E4:320F 0C 00 00 00 0C 00 db 0Ch, 00h, 00h, 00h, 0Ch, 00h
-31E4:3215 08 01 33 01 90 00 db 08h, 01h, 33h, 01h, 90h, 00h
-31E4:321B C8 00 0B 00 00 00 db 0C8h, 00h, 0Bh, 00h, 00h, 00h
-31E4:3221 14 00 00 00 CB 00 db 14h, 00h, 00h, 00h,0CBh, 00h
-31E4:3227 61 01 36 01 90 01 db 61h, 01h, 36h, 01h, 90h, 01h
-31E4:322D 0C 00 00 00 18 00 db 0Ch, 00h, 00h, 00h, 18h, 00h
-31E4:3233 EB 00 12 01 D6 00 db 0EBh, 00h, 12h, 01h,0D6h, 00h
-31E4:3239 07 01 0B 00 00 00 db 07h, 01h, 0Bh, 00h, 00h, 00h
-31E4:323F 13 00 00 00 7F 00 db 13h, 00h, 00h, 00h, 7Fh, 00h
-31E4:3245 BC 00 BB 00 29 01 db 0BCh, 00h,0BBh, 00h, 29h, 01h
-31E4:324B 0D 00 00 00 12 00 db 0Dh, 00h, 00h, 00h, 12h, 00h
-31E4:3251 7E 01 BF 01 BB 00 db 7Eh, 01h,0BFh, 01h,0BBh, 00h
-31E4:3257 29 01 0E 00 00 00 db 29h, 01h, 0Eh, 00h, 00h, 00h
-31E4:325D 19 00 00 00 7F 00 db 19h, 00h, 00h, 00h, 7Fh, 00h
-31E4:3263 BC 00 BB 00 29 01 db 0BCh, 00h,0BBh, 00h, 29h, 01h
-31E4:3269 0D 00 00 00 16 00 db 0Dh, 00h, 00h, 00h, 16h, 00h
-31E4:326F 7E 01 BF 01 BB 00 db 7Eh, 01h,0BFh, 01h,0BBh, 00h
-31E4:3275 29 01 0E 00 00 00 db 29h, 01h, 0Eh, 00h, 00h, 00h
-31E4:327B 12 00 00 00 D8 00 db 12h, 00h, 00h, 00h,0D8h, 00h
-31E4:3281 61 01 3D 01 90 01 db 61h, 01h, 3Dh, 01h, 90h, 01h
-31E4:3287 0C 00 00 00 17 00 db 0Ch, 00h, 00h, 00h, 17h, 00h
-31E4:328D F2 00 12 01 DA 00 db 0F2h, 00h, 12h, 01h,0DAh, 00h
-31E4:3293 0D 01 0B 00 00 00 db 0Dh, 01h, 0Bh, 00h, 00h, 00h
-31E4:3299 15 00 00 00 7F 00 db 15h, 00h, 00h, 00h, 7Fh, 00h
-31E4:329F BC 00 BB 00 29 01 db 0BCh, 00h,0BBh, 00h, 29h, 01h
-31E4:32A5 0D 00 00 00 16 00 db 0Dh, 00h, 00h, 00h, 16h, 00h
-31E4:32AB 7E 01 BF 01 BB 00 db 7Eh, 01h,0BFh, 01h,0BBh, 00h
-31E4:32B1 29 01 0E 00 00 00 db 29h, 01h, 0Eh, 00h, 00h, 00h
-31E4:32B7 11 00 00 00 7F 00 db 11h, 00h, 00h, 00h, 7Fh, 00h
-31E4:32BD 87 00 D5 00 54 01 db 87h, 00h,0D5h, 00h, 54h, 01h
-31E4:32C3 0D 00 00 00 13 00 db 0Dh, 00h, 00h, 00h, 13h, 00h
-31E4:32C9 C8 00 EF 00 AC 00 db 0C8h, 00h,0EFh, 00h,0ACh, 00h
-31E4:32CF D4 00 0B 00 00 00 db 0D4h, 00h, 0Bh, 00h, 00h, 00h
-31E4:32D5 0D 00 5B 01 89 01 db 0Dh, 00h, 5Bh, 01h, 89h, 01h
-31E4:32DB 39 01 54 01 0C 00 db 39h, 01h, 54h, 01h, 0Ch, 00h
-31E4:32E1 00 00 1A 00 44 01 db 00h, 00h, 1Ah, 00h, 44h, 01h
-31E4:32E7 61 01 BB 00 F4 00 db 61h, 01h,0BBh, 00h,0F4h, 00h
-
-31E4:32ED 0B 00 21 27 24 00 db 0Bh, 00h, 21h, 27h, 24h, 00h
-31E4:32F3 00 00 7F 00 87 00 db 00h, 00h, 7Fh, 00h, 87h, 00h
-31E4:32F9 07 01 2F 01 0D 00 db 07h, 01h, 2Fh, 01h, 0Dh, 00h
-31E4:32FF 00 00 11 00 FB 00 db 00h, 00h, 11h, 00h,0FBh, 00h
-31E4:3305 36 01 C0 00 F5 00 db 36h, 01h,0C0h, 00h,0F5h, 00h
-31E4:330B 0B 00 00 00 0E 00 db 0Bh, 00h, 00h, 00h, 0Eh, 00h
-31E4:3311 B0 01 BF 01 0C 01 db 0B0h, 01h,0BFh, 01h, 0Ch, 01h
-31E4:3317 4A 01 0E 00 00 00 db 4Ah, 01h, 0Eh, 00h, 00h, 00h
-31E4:331D 14 00 B9 00 FE 00 db 14h, 00h,0B9h, 00h,0FEh, 00h
-31E4:3323 39 01 47 01 0C 00 db 39h, 01h, 47h, 01h, 0Ch, 00h
-31E4:3329 00 00 19 00 6F 01 db 00h, 00h, 19h, 00h, 6Fh, 01h
-31E4:332F 88 01 D0 00 07 01 db 88h, 01h,0D0h, 00h, 07h, 01h
-31E4:3335 0B 00 17 27 1E 00 db 0Bh, 00h, 17h, 27h, 1Eh, 00h
-31E4:333B 98 00 B6 00 B8 00 db 98h, 00h,0B6h, 00h,0B8h, 00h
-31E4:3341 03 01 0B 00 00 00 db 03h, 01h, 0Bh, 00h, 00h, 00h
-31E4:3347 23 00 00 00 7F db 23h, 00h, 00h, 00h, 7Fh
-31E4:334C 8700 popmenu_num_entries dw 8700h
-31E4:334D 00 02 01 47 01 db 00h, 02h, 01h, 47h, 01h
-31E4:3353 0D 00 00 00 17 db 0Dh, 00h, 00h, 00h, 17h
-31E4:3358 3B00 data_3358 dw 3B00h
-31E4:335A 01 7E 01 B5 db 01h, 7Eh, 01h,0B5h
-31E4:335E EB00 data_335E dw 0EB00h
-31E4:335F 00 0B db 00h, 0Bh
-31E4:3362 0000 popmenu_current_index dw 0
-31E4:3364 0100 popmenu_prior_index dw 100h
-31E4:3366 0000 mouse_y_change dw 0
-31E4:3368 0000 menu_items_proc2 dw 0
-
-31E4:336B 0F 01 47 01 0E 00 db 0Fh, 01h, 47h, 01h, 0Eh, 00h
-31E4:3371 00 00 18 00 0C 01 db 00h, 00h, 18h, 00h, 0Ch, 01h
-31E4:3377 2F 01 db 2Fh, 01h
-
-31E4:3379 00CB dw 00CBh
-31E4:337B 00F9 dw 00F9h
-31E4:337D 0D 00 00 db 0Dh, 00h, 00h
-31E4:3380 1C00 data_3380 dw 1C00h
-31E4:3382 00 00 data_3382 dw 0
-31E4:3384 D400 data_3384 dw 0D400h
-31E4:3386 0B00 data_3386 dw 0B00h
-31E4:3388 01 db 01h
-31E4:3389 BB 00 0A 01 0B 00 db 0BBh, 00h, 0Ah, 01h, 0Bh, 00h
-31E4:338F 00 00 10 00 9B 00 db 00h, 00h, 10h, 00h, 9Bh, 00h
-31E4:3395 DF 00 21 01 47 01 db 0DFh, 00h, 21h, 01h, 47h, 01h
-31E4:339B 0C 00 00 00 12 00 db 0Ch, 00h, 00h, 00h, 12h, 00h
-31E4:33A1 B0 01 C2 01 DB 00 db 0B0h, 01h,0C2h, 01h,0DBh, 00h
-31E4:33A7 47 01 0E 00 00 00 db 47h, 01h, 0Eh, 00h, 00h, 00h
-31E4:33AD 13 00 7F 00 87 00 db 13h, 00h, 7Fh, 00h, 87h, 00h
-31E4:33B3 0B 01 47 01 0D 00 db 0Bh, 01h, 47h, 01h, 0Dh, 00h
-31E4:33B9 00 00 15 00 4A 01 db 00h, 00h, 15h, 00h, 4Ah, 01h
-31E4:33BF 63 01 E5 00 18 01 db 63h, 01h,0E5h, 00h, 18h, 01h
-31E4:33C5 0B 00 15 27 1D 00 db 0Bh, 00h, 15h, 27h, 1Dh, 00h
-31E4:33CB 00 00 D8 00 61 01 db 00h, 00h,0D8h, 00h, 61h, 01h
-31E4:33D1 2D 01 90 01 0C 00 db 2Dh, 01h, 90h, 01h, 0Ch, 00h
-31E4:33D7 00 00 11 00 08 01 db 00h, 00h, 11h, 00h, 08h, 01h
-31E4:33DD 33 01 90 00 C8 00 db 33h, 01h, 90h, 00h,0C8h, 00h
-31E4:33E3 0B 00 00 00 0F 00 db 0Bh, 00h, 00h, 00h, 0Fh, 00h
-31E4:33E9 00 00 7F 00 73 01 db 00h, 00h, 7Fh, 00h, 73h, 01h
-31E4:33EF 3B 01 47 01 0C 00 db 3Bh, 01h, 47h, 01h, 0Ch, 00h
-31E4:33F5 00 00 10 00 B0 01 db 00h, 00h, 10h, 00h,0B0h, 01h
-31E4:33FB C2 01 FD 00 46 01 db 0C2h, 01h,0FDh, 00h, 46h, 01h
-31E4:3401 0E 00 00 00 0E 00 db 0Eh, 00h, 00h, 00h, 0Eh, 00h
-31E4:3407 EA 00 29 01 B4 00 db 0EAh, 00h, 29h, 01h,0B4h, 00h
-31E4:340D 04 01 0B 00 1E 27 db 04h, 01h, 0Bh, 00h, 1Eh, 27h
-31E4:3413 26 00 00 00 7F 00 db 26h, 00h, 00h, 00h, 7Fh, 00h
-31E4:3419 87 00 F8 00 2A 01 db 87h, 00h,0F8h, 00h, 2Ah, 01h
-31E4:341F 0D 00 00 00 0F 00 db 0Dh, 00h, 00h, 00h, 0Fh, 00h
-31E4:3425 7F 00 15 01 39 01 db 7Fh, 00h, 15h, 01h, 39h, 01h
-31E4:342B 5E 01 0C 00 00 00 db 5Eh, 01h, 0Ch, 00h, 00h, 00h
-31E4:3431 13 00 B0 01 C2 01 db 13h, 00h,0B0h, 01h,0C2h, 01h
-31E4:3437 F3 00 2B 01 0E 00 db 0F3h, 00h, 2Bh, 01h, 0Eh, 00h
-31E4:343D 00 00 0D 00 F4 00 db 00h, 00h, 0Dh, 00h,0F4h, 00h
-
-31E4:3443 0F 01 CB 00 FA 00 db 0Fh, 01h,0CBh, 00h,0FAh, 00h
-31E4:3449 0B 00 19 27 1F 00 db 0Bh, 00h, 19h, 27h, 1Fh, 00h
-31E4:344F 00 00 7F 00 8E 00 db 00h, 00h, 7Fh, 00h, 8Eh, 00h
-31E4:3455 E6 00 4A 01 0D 00 db 0E6h, 00h, 4Ah, 01h, 0Dh, 00h
-31E4:345B 00 00 0E 00 B1 01 db 00h, 00h, 0Eh, 00h,0B1h, 01h
-31E4:3461 C2 01 DF 00 5E 01 db 0C2h, 01h,0DFh, 00h, 5Eh, 01h
-31E4:3467 0E 00 00 00 0A 00 db 0Eh, 00h, 00h, 00h, 0Ah, 00h
-31E4:346D 9B 00 FE 00 3E 01 db 9Bh, 00h,0FEh, 00h, 3Eh, 01h
-31E4:3473 47 01 0C 00 00 00 db 47h, 01h, 0Ch, 00h, 00h, 00h
-31E4:3479 14 00 00 00 01 01 db 14h, 00h, 00h, 00h, 01h, 01h
-31E4:347F 24 01 85 00 D0 00 db 24h, 01h, 85h, 00h,0D0h, 00h
-31E4:3485 0B 00 00 00 1A 00 db 0Bh, 00h, 00h, 00h, 1Ah, 00h
-31E4:348B 4D 01 BF 01 13 01 db 4Dh, 01h,0BFh, 01h, 13h, 01h
-31E4:3491 47 01 0E 00 00 00 db 47h, 01h, 0Eh, 00h, 00h, 00h
-31E4:3497 1B 00 A2 00 C2 00 db 1Bh, 00h,0A2h, 00h,0C2h, 00h
-31E4:349D AC 00 DE 00 0B 00 db 0ACh, 00h,0DEh, 00h, 0Bh, 00h
-31E4:34A3 1F 27 20 00 00 00 db 1Fh, 27h, 20h, 00h, 00h, 00h
-31E4:34A9 9A 01 C2 01 CC 00 db 9Ah, 01h,0C2h, 01h,0CCh, 00h
-31E4:34AF 14 01 0E 00 00 00 db 14h, 01h, 0Eh, 00h, 00h, 00h
-31E4:34B5 09 00 7F 00 87 00 db 09h, 00h, 7Fh, 00h, 87h, 00h
-31E4:34BB F6 00 47 01 0D 00 db 0F6h, 00h, 47h, 01h, 0Dh, 00h
-31E4:34C1 00 00 0D 00 AF 00 db 00h, 00h, 0Dh, 00h,0AFh, 00h
-31E4:34C7 D4 00 39 01 4A 01 db 0D4h, 00h, 39h, 01h, 4Ah, 01h
-31E4:34CD 0C 00 00 00 0B 00 db 0Ch, 00h, 00h, 00h, 0Bh, 00h
-31E4:34D3 05 01 1E 01 DB 00 db 05h, 01h, 1Eh, 01h,0DBh, 00h
-31E4:34D9 0E 01 0B 00 25 27 db 0Eh, 01h, 0Bh, 00h, 25h, 27h
-31E4:34DF 22 00 00 00 7F 00 db 22h, 00h, 00h, 00h, 7Fh, 00h
-31E4:34E5 B2 00 E6 00 29 01 db 0B2h, 00h,0E6h, 00h, 29h, 01h
-31E4:34EB 0D 00 00 00 0A 00 db 0Dh, 00h, 00h, 00h, 0Ah, 00h
-31E4:34F1 E1 00 92 01 39 01 db 0E1h, 00h, 92h, 01h, 39h, 01h
-31E4:34F7 47 01 0C 00 00 00 db 47h, 01h, 0Ch, 00h, 00h, 00h
-31E4:34FD 08 00 00 00 D8 00 db 08h, 00h, 00h, 00h,0D8h, 00h
-31E4:3503 61 01 31 01 90 01 db 61h, 01h, 31h, 01h, 90h, 01h
-31E4:3509 0C 00 00 00 07 00 db 0Ch, 00h, 00h, 00h, 07h, 00h
-31E4:350F EC 00 12 01 D5 00 db 0ECh, 00h, 12h, 01h,0D5h, 00h
-31E4:3515 09 01 0B 00 00 00 db 09h, 01h, 0Bh, 00h, 00h, 00h
-31E4:351B 09 00 00 00 D8 00 db 09h, 00h, 00h, 00h,0D8h, 00h
-31E4:3521 61 01 38 01 90 01 db 61h, 01h, 38h, 01h, 90h, 01h
-31E4:3527 0C 00 00 00 0C 00 db 0Ch, 00h, 00h, 00h, 0Ch, 00h
-31E4:352D EC 00 12 01 D6 00 db 0ECh, 00h, 12h, 01h,0D6h, 00h
-31E4:3533 0D 01 0B 00 00 00 db 0Dh, 01h, 0Bh, 00h, 00h, 00h
-31E4:3539 0A 00 00 00
-
-31E4:353D room1_exits dw 7Fh
-31E4:353F E0 00 E8 00 29 01 db 0E0h, 00h,0E8h, 00h, 29h, 01h
-31E4:3545 0D db 0Dh
-31E4:3546 00 data_772 db 0 ; Data table (indexed access)
-31E4:3547 11 27 02 00 00 00 db 11h, 27h, 02h, 00h, 00h, 00h
-31E4:354D DE 00 FB 00 C8 00 db 0DEh, 00h,0FBh, 00h,0C8h, 00h
-31E4:3553 FA 00 0B 00 12 27 db 0FAh, 00h, 0Bh, 00h, 12h, 27h
-31E4:3559 01 00 3E 01 5B 01 db 01h, 00h, 3Eh, 01h, 5Bh, 01h
-31E4:355F C8 00 FA 00 0B 00 db 0C8h, 00h,0FAh, 00h, 0Bh, 00h
-31E4:3565 00 00 03 00 94 01 db 00h, 00h, 03h, 00h, 94h, 01h
-31E4:356B C2 01 D1 00 01 01 db 0C2h, 01h,0D1h, 00h, 01h, 01h
-31E4:3571 0E 00 14 27 05 00 db 0Eh, 00h, 14h, 27h, 05h, 00h
-31E4:3577 00 00 7F 00 A4 00 db 00h, 00h, 7Fh, 00h,0A4h, 00h
-31E4:357D E5 00 20 01 0D 00 db 0E5h, 00h, 20h, 01h, 0Dh, 00h
-31E4:3583 00 00 02 00 84 01 db 00h, 00h, 02h, 00h, 84h, 01h
-31E4:3589 BE 01 E5 00 26 01 db 0BEh, 01h,0E5h, 00h, 26h, 01h
-31E4:358F 0E 00 00 00 04 00 db 0Eh, 00h, 00h, 00h, 04h, 00h
-31E4:3595 00 00 46 01 6B 01 db 00h, 00h, 46h, 01h, 6Bh, 01h
-31E4:359B 31 01 47 01 0C 00 db 31h, 01h, 47h, 01h, 0Ch, 00h
-31E4:35A1 00 00 03 00 00 00 db 00h, 00h, 03h, 00h, 00h, 00h
-31E4:35A7 7F 00 D2 00 DA 00 db 7Fh, 00h,0D2h, 00h,0DAh, 00h
-
-31E4:35AD 1B 01 0D 00 00 00 db 1Bh, 01h, 0Dh, 00h, 00h, 00h
-31E4:35B3 08 00 00 00 1C 00 db 08h, 00h, 00h, 00h, 1Ch, 00h
-31E4:35B9 02 00 F7 35 1E 00 db 02h, 00h,0F7h, 35h, 1Eh, 00h
-31E4:35BF 58 1D 1E 00 16 2C db 58h, 1Dh, 1Eh, 00h, 16h, 2Ch
-31E4:35C5 1F 00 23 00 1D 2C db 1Fh, 00h, 23h, 00h, 1Dh, 2Ch
-31E4:35CB C5 35 1C 00 01 00 db 0C5h, 35h, 1Ch, 00h, 01h, 00h
-31E4:35D1 F7 35 21 00 E7 03 db 0F7h, 35h, 21h, 00h,0E7h, 03h
-31E4:35D7 1E 00 0B 1D 1F 00 db 1Eh, 00h, 0Bh, 1Dh, 1Fh, 00h
-31E4:35DD 1E 00 0B 1D 1C 00 db 1Eh, 00h, 0Bh, 1Dh, 1Ch, 00h
-31E4:35E3 02 00 00 00 07 00 db 02h, 00h, 00h, 00h, 07h, 00h
-31E4:35E9 12 27 1F 00 1E 00 db 12h, 27h, 1Fh, 00h, 1Eh, 00h
-31E4:35EF 3A 2C 20 00 1E 00 db 3Ah, 2Ch, 20h, 00h, 1Eh, 00h
-31E4:35F5 58 1D 1C 00 04 00 db 58h, 1Dh, 1Ch, 00h, 04h, 00h
-31E4:35FB 00 00 05 00 10 04 db 00h, 00h, 05h, 00h, 10h, 04h
-31E4:3601 1E 00 58 1D 1C 00 db 1Eh, 00h, 58h, 1Dh, 1Ch, 00h
-31E4:3607 03 00 00 00 1E 00 db 03h, 00h, 00h, 00h, 1Eh, 00h
-31E4:360D 58 1D 1E 00 58 1D db 58h, 1Dh, 1Eh, 00h, 58h, 1Dh
-31E4:3613 22 00 B7 35 21 00 db 22h, 00h,0B7h, 35h, 21h, 00h
-31E4:3619 18 04 1E 00 E9 12 db 18h, 04h, 1Eh, 00h,0E9h, 12h
-31E4:361F 21 00 11 27 21 00 db 21h, 00h, 11h, 27h, 21h, 00h
-31E4:3625 E8 03 20 00 20 00 db 0E8h, 03h, 20h, 00h, 20h, 00h
-31E4:362B 20 00 20 00 27 00 db 20h, 00h, 20h, 00h, 27h, 00h
-31E4:3631 CB 00 00 00 20 00 db 0CBh, 00h, 00h, 00h, 20h, 00h
-31E4:3637 20 00 20 00 20 00 db 20h, 00h, 20h, 00h, 20h, 00h
-31E4:363D 27 00 CC 00 00 00 db 27h, 00h,0CCh, 00h, 00h, 00h
-31E4:3643 20 00 20 00 20 00 db 20h, 00h, 20h, 00h, 20h, 00h
-31E4:3649 21 00 11 27 1E 00 db 21h, 00h, 11h, 27h, 1Eh, 00h
-31E4:364F 31 1D 27 00 8C 00 db 31h, 1Dh, 27h, 00h, 8Ch, 00h
-31E4:3655 00 00 22 00 27 36 db 00h, 00h, 22h, 00h, 27h, 36h
-31E4:365B 1C 00 02 00 27 36 db 1Ch, 00h, 02h, 00h, 27h, 36h
-31E4:3661 1E 00 42 1E 21 00 db 1Eh, 00h, 42h, 1Eh, 21h, 00h
-31E4:3667 E8 03 22 00 61 36 db 0E8h, 03h, 22h, 00h, 61h, 36h
-31E4:366D 00 00 00 db 00h, 00h, 00h
-
-31E4:3670 0000 errormsg_list dw 0 ;Table used by display_message() to print errors
-31E4:3672 368A dw offset errormsg1
-31E4:3674 369E dw offset errormsg2
-31E4:3676 36C2 dw offset errormsg3
-31E4:3678 36E0 dw offset errormsg4
-31E4:367A 36FB dw offset errormsg5
-31E4:367C 3713 dw offset errormsg6
-31E4:367E 372B dw offset errormsg7
-31E4:3680 3763 dw offset errormsg8
-31E4:3682 3788 dw offset errormsg9
-31E4:3684 379F dw offset errormsga
-31E4:3686 3743 dw offset errormsgb
-31E4:3688 37C0 dw offset errormsgc
-
-31E4:368A errormsg1 db 6, '8Disk read error.$', 0
-31E4:369E errormsg2 db 'Game needs colour EGA/VGA monitor.$', 0
-31E4:36C2 errormsg3 db 'Game needs DOS 2.0 or later.$', 0
-31E4:36E0 errormsg4 db 11h, '8Please insert game disk$', 0
-31E4:36FB errormsg5 db 1Ch, '8Please insert disk A$', 0
-31E4:3713 errormsg6 db 27h, '8Please insert disk B$', 0
-31E4:372B errormsg7 db 32h, '8Please insert disk C$', 0
-31E4:3743 errormsgb db 3Dh, '8Please insert Lure data disk$', 0
-31E4:3763 errormsg8 db 'Not enough memory to play the game.$', 0
-31E4:3788 errormsg9 db 'Data file is corrupt.$', 0
-31E4:379F errormsga db 'Sorry - copy protection failed.$', 0
-31E4:37C0 errormsgc db 'Unknown error.$'
-
-31E4:37D0 data_777 db 'Press a mouse button when ready.$', 0
-31E4:37F2 data_778 db 'and press any key.$', 0
-
-31E4:3806 09 09 15 05 0A db 09h, 09h, 15h, 05h, 0Ah
-31E4:380B 0A B0 00 7A 00 00 db 0Ah,0B0h, 00h, 7Ah, 00h, 00h
-31E4:3811 09 09 15 05 0A 0A db 09h, 09h, 15h, 05h, 0Ah, 0Ah
-31E4:3817 B0 00 78 00 00 09 db 0B0h, 00h, 78h, 00h, 00h, 09h
-31E4:381D 09 15 05 0A 0A B0 db 09h, 15h, 05h, 0Ah, 0Ah,0B0h
-31E4:3823 00 64 01 00 09 09 db 00h, 64h, 01h, 00h, 09h, 09h
-31E4:3829 15 05 0A 0A B0 00 db 15h, 05h, 0Ah, 0Ah,0B0h, 00h
-31E4:382F 65 01 00 09 09 15 db 65h, 01h, 00h, 09h, 09h, 15h
-31E4:3835 05 0A 0A B0 00 66 db 05h, 0Ah, 0Ah,0B0h, 00h, 66h
-31E4:383B 01 00 09 06 15 05 db 01h, 00h, 09h, 06h, 15h, 05h
-31E4:3841 0A 0A B0 00 56 01 db 0Ah, 0Ah,0B0h, 00h, 56h, 01h
-31E4:3847 00 db 00h
-31E4:3848 0A 0D 24 data_779 db 0Ah, 0Dh, '$' ; xref 273F:4055, 273F:4094
- ; 273F:40AB
-31E4:384B 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h
-
-31E4:3850 41D9 actions2_proc_list dw 41D9h
- dw offset get_proc ; 1 = GET
- dw 0
- dw offset operate_proc
- dw offset operate_proc
- dw offset operate_proc ; 5
- dw offset open_proc
- dw offset close_proc
-31E4:3860 dw offset lock_unlock_proc
- dw offset lock_unlock_proc
- dw offset use_proc ; 10 = USE
- dw offset give_proc
- dw offset talk_to_proc
- dw offset tell_proc
- dw 0
- dw offset look_proc ; 15 = LOOK
-31E4:3870 dw offset look_at_proc
- dw offset look_through_proc
- dw offset ask_proc
- dw 0
- dw offset drink_proc ; 20 = DRINK
- dw offset status_proc
- dw offset go_to_proc
- dw offset return_proc
-31E4:3880 dw offset bribe_proc
- dw offset examine_proc ; 25
- dw 0
- dw 0
- dw offset npc_set_blocked_offset_proc
- dw offset npc_unknown_1
- dw offset npc_execute_script_proc ; 30
- dw offset npc_reset_paused_list
- dw offset npc_set_random_dest
- dw offset npc_walking_check
- dw offset npc_set_support_offset
- dw offset npc_set_support_offset_conditional ; 35
- dw offset npc_dispatch_action
- dw offset npc_unknown_3
- dw offset npc_pause
- dw offset npc_start_talking
- dw offset npc_jump_to_address ; 40
-
-31E4:38A2 0001 random_v1 dw 1
-31E4:38A4 0000 random_v2 dw 0
-
-31E4:38A6 0B[00] db 11 dup (0)
-31E4:38B0 01 data_781 db 1
-31E4:38B1 0000 time_ctr dw 0 ; xref 273F:4974, 273F:A896
- ; 273F:A89C, 273F:A8AB
- ; 273F:A8CC
-31E4:38B3 32 data_783 db 32h ; xref 273F:4956, 273F:4967
-
-31E4:38B4 008D[00] db 140 dup (0)
-31E4:3940 0000 pathfind_buffer_end dw 0
-31E4:3942 0000 pathfind_sp dw 0
-31E4:3944 0000 pathfind_countdown_ctr dw 0
-31E4:3946 0000 pathfind_in_progress db 0
-31E4:3947 003C[00] db 60 dup (0)
-31E4:3983 000A[00] player_pathfind_data dw 5 dup (0)
-
-........
-31E4:3E92 00 data_785 db 0 ; xref 31E4:18A6
-31E4:3E93 01CD[00] db 461 dup (0)
-31E4:4060 ú077D[00] db 1917 dup (0)
-31E4:4227 000A[00] chars_pathfind_data dw 5 dup (0)
-
-........
-31E4:47DD 0000 0000 data_786 dd 00000h ; Data table (indexed access)
-31E4:47E1 02EF[00] db 751 dup (0)
-
-; List of hotspots that don't to be walked to before being looked at
- lookat_hotspot_list
-31E4:4AD0 0411 0412 041F 0420 dw 0411h, 0412h, 041Fh, 0420h
-31E4:4AD8 0421 0422 0426 0427 dw 0421h, 0422h, 0426h, 0427h
-31E4:4AE0 0428 0429 0436 0437 dw 0428h, 0429h, 0436h, 0437h
-31E4:4AE8 0000 dw 0
-
-31E4:4AEA 0421 0879 bribe_hotspot_list dw 421h, 879h
-31E4:4AEE 03E9 08C7 dw 3E9h, 8C7h
-31E4:4AF2 0429 08D1 dw 429h, 8D1h
-31E4:4AF6 0422 08D4 dw 422h, 8D4h
-31E4:4AFA 0420 08D6 dw 420h, 8D6h
-31E4:4AFE 042B 0956 dw 42Bh, 956h
-31E4:4B02 03F2 0BE6 dw 3F2h,0BE6h
-31E4:4B06 0000 dw 0
-
-31E4:4B08 59 6F 75 20 61 72 carrying_str db 'You are carrying '
-31E4:4B0E 65 20 63 61 72 72
-31E4:4B14 79 69 6E 67 20
-31E4:4B19 6E 6F 74 68 69 6E items_str dw 'nothing.', 0
-31E4:4B1F 67 2E 00
-31E4:4B22 59 6F 75 20 68 61 money_str db 'You have '
-31E4:4B28 76 65 20
-31E4:4B2B 78 s_num_groats db 'x'
-31E4:4B2C 20 67 72 6F 61 74 db ' groat'
-31E4:4B32 73 00 s_groats_plural db 's', 0
-
-31E4:4B34 000C[00] db 13 dup (0)
-31E4:4B40 00 data_791 db 0
-31E4:4B41 00 00 saved_dest_character dw 0
-
-31E4:4B43 0050[00] hotspot_name db 80 dup (0)
- character_name db ?
-31E4:4B93 005D[00] action_name db 93 dup (0)
-
-31E4:4BF0 00 data_794 db 0 ; xref 273F:207A, 273F:7016
-31E4:4BF1 0000 menuitem_table_location dw 0
-
-31E4:4BF1 0007[00] db 7 dup (0)
-31E4:4BF8 0000 data_unk1 dw 0
-31E4:4BFA 00 mouse_buttons_temp db 0
-31E4:4BFB 4C5A menuitem_list_info db offset menuitem_credits_str
-31E4:4BFD 7084 dw offset menuitem_credits
-
-31E4:4BFF 67 4C menuitem_list_file db offset menuitem_restart_str
-31E4:4C01 70EA dw offset menuitem_restart
-31E4:4C03 43 4C db offset menuitem_save_str
-31E4:4C05 8EB2 dw offset menuitem_save
-31E4:4C07 4D 4C db offset menuitem_restore_str
-31E4:4C09 8F4A dw offset menuitem_restore
-
-31E4:4C0B 0028 menuitem_table_info dw 28h ; X start
-31E4:4C0D 0057 dw 57h ; X end
-31E4:4C0F 0003 dw 3
-31E4:4C11 0001 dw 1
-31E4:4C13 0007 dw 7 ; Max characters width
-31E4:4C15 0001 dw 1 ; Num items
-31E4:4C17 4BFB dw offset menuitem_list_info
-
-31E4:4C19 menuitem_table_file dw 7Fh
-31E4:4C1B B3 00 dw 0B3h
-31E4:4C1D 0D 00 dw 0Dh
-31E4:4C1F 01 00 dw 01h
-31E4:4C21 0C 00 dw 0Ch
-31E4:4C23 03 00 dw 03h
-31E4:4C25 4BFF dw offset menuitem_list_file
-
-31E4:4C27 menuitem_table_info2 dw 0A0h
-31E4:4C29 dw 0A6h
-31E4:4C2B 06 00 dw 6
-31E4:4C2D 01 00 dw 1
-31E4:4C2F 05 00 dw 5
-31E4:4C31 00 00 dw 0
-31E4:4C33 FB 4B db offset menuitem_list_info
-
-31E4:4C35 E0 00 menuitem_table_help dw 0E0h
-31E4:4C37 19 01 dw 119h
-31E4:4C39 1B 00 dw 1Bh
-31E4:4C3B 01 00 dw 1
-31E4:4C3D 0A 00 dw 0Ah
-31E4:4C3F 03 00 dw 03h
-31E4:4C41 4C99 dw offset menuitem_list_help
-
-31E4:4C43 menuitem_save_str db 'Save game', 0
-31E4:4C4D menuitem_restore_str db 'Restore game', 0
-31E4:4C5A menuitem_credits_str db 'Credits', 0
-31E4:4C62 menuitem_quit_str db 'Quit', 0
-31E4:4C67 menuitem_restart_str db 'Restart game', 0
-31E4:4C74 menuitem_textspeed_str db 'Slow text', 8Bh, 0
-31E4:4C7F slowtext_slow_substr db 'Slow'
-31E4:4C83 slowtext_fast_substr db 'Fast'
-31E4:4C87 menuitem_sound_str db 'Sound on ', 0
-31E4:4C91 sound_on_substr db 'on ', 0
-31E4:4C95 sound_off_substr db 'off', 0
-
-31E4:4C99 4C62 menu_list_help dw offset menuitem_quit_str
-31E4:4C9B 7036 dw offset menuitem_quit
-31E4:4C9D 4C74 dw offset menuitem_textspeed_str
-31E4:4C9F 70F5 dw offset menuitem_textspeed
-31E4:4CA1 4C87 dw offset menuitem_sound_str
-31E4:4CA3 710D dw offset menuitem_sound
-
-31E4:4CA5 00 db 0
-31E4:4CA6 000A[00] db 10 dup (0)
-
-31E4:4CB0 exit_hotspots_list dw 2711h ; Cell door room #1
- dw 2712h ; Cell door room #2
- dw 2714h
- dw 2715h
- dw 2716h
- dw 2717h
- dw 2718h
- dw 2719h
- dw 271Ah
- dw 271Eh
- dw 271Fh
- dw 2720h
- dw 2721h
- dw 2722h
- dw 2725h
- dw 2726h
- dw 2729h
- dw 272Ah
- dw 272Bh
- dw 272Ch
- dw 272Dh
- dw 272Eh
- dw 272Fh
- dw 0
-
-31E4:4CE0 0000 current_room_segment dw 0
-31E4:4CE2 0000 data_segment dw 0
-31E4:4CE4 0000 data_segment2 dw 0
-31E4:4CE6 0000 talk_dialog_buffer dw 0
-31E4:4CE8 0000 strings_segment dw 0
-31E4:4CEA 0000 strings_segment_2 dw 0 ; xref 273F:7E16
-31E4:4CEC 0000 strings_segment_3 dw 0 ; xref 273F:7E22
-31E4:4CEE 0000 names_segment dw 0
-31E4:4CF0 0000 font2_segment dw 0
-31E4:4CF2 0000 font_segment dw 0
-31E4:4CF4 0000 cursors_segment dw 0
-31E4:4CF6 0000 data_810 dw 0 ; xref 273F:7AD8
-31E4:4CF8 0000 data_811 dw 0 ; xref 273F:7AEA
-31E4:4CFA 0000 data_812 dw 0 ; xref 273F:79EF
-31E4:4CFC 0000 largest_free_block dw 0
-31E4:4CFE 0000 data_814 dw 0
-31E4:4D00 0000 buffer_segment dw 0
-31E4:4D02 0000 buffer_segment_end dw 0
-
-31E4:4D04 0000 anim_src_segment2 dw 0
-31E4:4D06 0000 anim_src_segment dw 0
-31E4:4D08 0008[00] db 8 dup (0)
-31E4:4D10 42 4E 1B 4E 63 4E db 42h, 4Eh, 1Bh, 4Eh, 63h, 4Eh
-31E4:4D16 AC 4E 00 00 00 00 db 0ACh, 4Eh, 00h, 00h, 00h, 00h
-31E4:4D1C AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D22 C9 4E AC 4E AC 4E db 0C9h, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D28 AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D2E AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D34 AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D3A AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D40 AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D46 AC 4E 62 4D AC 4E db 0ACh, 4Eh, 62h, 4Dh,0ACh, 4Eh
-31E4:4D4C AC 4E F0 4E AC 4E db 0ACh, 4Eh,0F0h, 4Eh,0ACh, 4Eh
-31E4:4D52 AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D58 AC 4E AC 4E AC 4E db 0ACh, 4Eh,0ACh, 4Eh,0ACh, 4Eh
-31E4:4D5E AC 4E AC 4E 08 01 db 0ACh, 4Eh,0ACh, 4Eh, 08h, 01h
-31E4:4D64 00 1E 00 42 1E 20 db 00h, 1Eh, 00h, 42h, 1Eh, 20h
-31E4:4D6A 00 00 00 FF FF 01 db 00h, 00h, 00h,0FFh,0FFh, 01h
-31E4:4D70 00 20 00 1F 00 00 db 00h, 20h, 00h, 1Fh, 00h, 00h
-31E4:4D76 00 FF FF 01 00 20 db 00h,0FFh,0FFh, 01h, 00h, 20h
-31E4:4D7C 00 1F 00 00 00 FF db 00h, 1Fh, 00h, 00h, 00h,0FFh
-31E4:4D82 FF 03 00 24 00 20 db 0FFh, 03h, 00h, 24h, 00h, 20h
-31E4:4D88 04 A5 4D 25 00 20 db 04h,0A5h, 4Dh, 25h, 00h, 20h
-31E4:4D8E 04 02 08 00 00 04 db 04h, 02h, 08h, 00h, 00h, 04h
-31E4:4D94 08 00 00 25 00 20 db 08h, 00h, 00h, 25h, 00h, 20h
-31E4:4D9A 04 03 08 00 00 00 db 04h, 03h, 08h, 00h, 00h, 00h
-31E4:4DA0 00 00 00 20 00 00 db 00h, 00h, 00h, 20h, 00h, 00h
-31E4:4DA6 00 FF FF 01 00 20 db 00h,0FFh,0FFh, 01h, 00h, 20h
-31E4:4DAC 00 1F 00 00 00 FF db 00h, 1Fh, 00h, 00h, 00h,0FFh
-31E4:4DB2 FF 01 00 20 00 1F db 0FFh, 01h, 00h, 20h, 00h, 1Fh
-31E4:4DB8 00 00 00 FF FF 03 db 00h, 00h, 00h,0FFh,0FFh, 03h
-31E4:4DBE 00 24 00 20 04 A5 db 00h, 24h, 00h, 20h, 04h,0A5h
-31E4:4DC4 4D 25 00 20 04 02 db 4Dh, 25h, 00h, 20h, 04h, 02h
-31E4:4DCA 08 00 00 04 08 00 db 08h, 00h, 00h, 04h, 08h, 00h
-31E4:4DD0 00 25 00 20 04 94 db 00h, 25h, 00h, 20h, 04h, 94h
-31E4:4DD6 0B 00 00 95 0B 00 db 0Bh, 00h, 00h, 95h, 0Bh, 00h
-31E4:4DDC 00 25 00 20 04 96 db 00h, 25h, 00h, 20h, 04h, 96h
-31E4:4DE2 0B 0F 00 00 00 00 db 0Bh, 0Fh, 00h, 00h, 00h, 00h
-31E4:4DE8 00 20 00 00 00 FF db 00h, 20h, 00h, 00h, 00h,0FFh
-31E4:4DEE FF 03 00 25 00 2B db 0FFh, 03h, 00h, 25h, 00h, 2Bh
-31E4:4DF4 04 DB 0A 00 00 DC db 04h,0DBh, 0Ah, 00h, 00h,0DCh
-31E4:4DFA 0A 00 00 25 00 2B db 0Ah, 00h, 00h, 25h, 00h, 2Bh
-31E4:4E00 04 DD 0A 00 00 DE db 04h,0DDh, 0Ah, 00h, 00h,0DEh
-31E4:4E06 0A 0A 00 25 00 2B db 0Ah, 0Ah, 00h, 25h, 00h, 2Bh
-31E4:4E0C 04 DF 0A 0F 00 E0 db 04h,0DFh, 0Ah, 0Fh, 00h,0E0h
-31E4:4E12 0A 00 00 1F 00 00 db 0Ah, 00h, 00h, 1Fh, 00h, 00h
-31E4:4E18 00 FF FF 02 01 00 db 00h,0FFh,0FFh, 02h, 01h, 00h
-31E4:4E1E 1E 00 42 1E 20 00 db 1Eh, 00h, 42h, 1Eh, 20h, 00h
-31E4:4E24 00 00 FF FF 01 00 db 00h, 00h,0FFh,0FFh, 01h, 00h
-31E4:4E2A 20 00 00 00 FF FF db 20h, 00h, 00h, 00h,0FFh,0FFh
-31E4:4E30 01 00 FE FF 1C 00 db 01h, 00h,0FEh,0FFh, 1Ch, 00h
-31E4:4E36 03 00 00 00 20 00 db 03h, 00h, 00h, 00h, 20h, 00h
-31E4:4E3C 1F 00 00 00 FF FF db 1Fh, 00h, 00h, 00h,0FFh,0FFh
-31E4:4E42 03 01 00 20 00 00 db 03h, 01h, 00h, 20h, 00h, 00h
-31E4:4E48 00 FF FF 01 00 11 db 00h,0FFh,0FFh, 01h, 00h, 11h
-31E4:4E4E 00 0C 04 1F 00 00 db 00h, 0Ch, 04h, 1Fh, 00h, 00h
-31E4:4E54 00 FF FF 01 00 1E db 00h,0FFh,0FFh, 01h, 00h, 1Eh
-31E4:4E5A 00 42 1E 20 00 00 db 00h, 42h, 1Eh, 20h, 00h, 00h
-31E4:4E60 00 FF FF 05 01 00 db 00h,0FFh,0FFh, 05h, 01h, 00h
-31E4:4E66 1E 00 42 1E 20 00 db 1Eh, 00h, 42h, 1Eh, 20h, 00h
-31E4:4E6C 00 00 FF FF 01 00 db 00h, 00h,0FFh,0FFh, 01h, 00h
-31E4:4E72 20 00 00 00 FF FF db 20h, 00h, 00h, 00h,0FFh,0FFh
-31E4:4E78 03 00 06 00 32 75 db 03h, 00h, 06h, 00h, 32h, 75h
-31E4:4E7E 00 00 FF FF 03 00 db 00h, 00h,0FFh,0FFh, 03h, 00h
-31E4:4E84 1D 00 54 E8 00 00 db 1Dh, 00h, 54h,0E8h, 00h, 00h
-31E4:4E8A FF FF 03 00 1F 00 db 0FFh,0FFh, 03h, 00h, 1Fh, 00h
-31E4:4E90 11 00 30 75 1F 00 db 11h, 00h, 30h, 75h, 1Fh, 00h
-31E4:4E96 00 00 FF FF 01 00 db 00h, 00h,0FFh,0FFh, 01h, 00h
-31E4:4E9C FE FF 1C 00 02 00 db 0FEh,0FFh, 1Ch, 00h, 02h, 00h
-31E4:4EA2 00 00 20 00 1F 00 db 00h, 00h, 20h, 00h, 1Fh, 00h
-31E4:4EA8 00 00 FF FF 03 01 db 00h, 00h,0FFh,0FFh, 03h, 01h
-31E4:4EAE 00 1E 00 42 1E 20 db 00h, 1Eh, 00h, 42h, 1Eh, 20h
-31E4:4EB4 00 00 00 FF FF 01 db 00h, 00h, 00h,0FFh,0FFh, 01h
-31E4:4EBA 00 1F 00 00 00 FF db 00h, 1Fh, 00h, 00h, 00h,0FFh
-31E4:4EC0 FF 01 00 20 00 00 db 0FFh, 01h, 00h, 20h, 00h, 00h
-31E4:4EC6 00 FF FF 04 01 00 db 00h,0FFh,0FFh, 04h, 01h, 00h
-31E4:4ECC 1E 00 42 1E 20 00 db 1Eh, 00h, 42h, 1Eh, 20h, 00h
-31E4:4ED2 00 00 FF FF 03 00 db 00h, 00h,0FFh,0FFh, 03h, 00h
-31E4:4ED8 1D 00 62 E8 00 00 db 1Dh, 00h, 62h,0E8h, 00h, 00h
-31E4:4EDE FF FF 01 00 1F 00 db 0FFh,0FFh, 01h, 00h, 1Fh, 00h
-31E4:4EE4 00 00 FF FF 01 00 db 00h, 00h,0FFh,0FFh, 01h, 00h
-31E4:4EEA 20 00 00 00 FF FF db 20h, 00h, 00h, 00h,0FFh,0FFh
-31E4:4EF0 07 01 00 23 00 6C db 07h, 01h, 00h, 23h, 00h, 6Ch
-31E4:4EF6 1E FF 4E 1E 00 42 db 1Eh,0FFh, 4Eh, 1Eh, 00h, 42h
-31E4:4EFC 1E 20 00 00 00 FF db 1Eh, 20h, 00h, 00h, 00h,0FFh
-31E4:4F02 FF 03 00 25 00 29 db 0FFh, 03h, 00h, 25h, 00h, 29h
-31E4:4F08 04 9B 0B 00 00 9C db 04h, 9Bh, 0Bh, 00h, 00h, 9Ch
-31E4:4F0E 0B 00 00 25 00 29 db 0Bh, 00h, 00h, 25h, 00h, 29h
-31E4:4F14 04 9D 0B 00 00 00 db 04h, 9Dh, 0Bh, 00h, 00h, 00h
-31E4:4F1A 00 00 00 20 00 00 db 00h, 00h, 00h, 20h, 00h, 00h
-31E4:4F20 00 FF FF 03 00 25 db 00h,0FFh,0FFh, 03h, 00h, 25h
-31E4:4F26 00 29 04 9E 0B 00 db 00h, 29h, 04h, 9Eh, 0Bh, 00h
-31E4:4F2C 00 9F 0B 00 00 25 db 00h, 9Fh, 0Bh, 00h, 00h, 25h
-31E4:4F32 00 29 04 A0 0B 00 db 00h, 29h, 04h,0A0h, 0Bh, 00h
-31E4:4F38 00 A2 0B 00 00 25 db 00h,0A2h, 0Bh, 00h, 00h, 25h
-31E4:4F3E 00 29 04 A1 0B 00 db 00h, 29h, 04h,0A1h, 0Bh, 00h
-31E4:4F44 00 00 00 00 00 20 db 00h, 00h, 00h, 00h, 00h, 20h
-31E4:4F4A 00 00 00 FF FF 01 db 00h, 00h, 00h,0FFh,0FFh, 01h
-31E4:4F50 00 1F 00 00 00 FF db 00h, 1Fh, 00h, 00h, 00h,0FFh
-31E4:4F56 FF 01 00 20 00 00 db 0FFh, 01h, 00h, 20h, 00h, 00h
-31E4:4F5C 00 FF FF 01 00 1F db 00h,0FFh,0FFh, 01h, 00h, 1Fh
-31E4:4F62 00 00 00 FF FF 01 db 00h, 00h, 00h,0FFh,0FFh, 01h
-31E4:4F68 00 20 00 00 00 FF db 00h, 20h, 00h, 00h, 00h,0FFh
-31E4:4F6E FF 1F 0E db 0FFh, 1Fh, 0Eh
-
-31E4:4F71 follower_room_translate_list db 1Eh, 13h, 07h, 08h, 1Ch, 12h
-31E4:4F77 db 26h, 0Fh, 27h, 0Fh, 28h, 0Fh
-31E4:4F7D db 29h, 0Fh, 22h, 0Ah, 23h, 13h
-31E4:4F83 db 24h, 14h, 31h, 2Ch, 2Fh, 2Ch
-31E4:4F89 db 00h
-
-31E4:4F8A 00 data_817 db 0
-31E4:4F8B 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h
-
-31E4:4F90 a_str db 'a', 0
-31E4:4F92 an_str db 'an', 0
-31E4:4F95 the_str db 'the', 0
-
-31E4:4F99 0007[00] db 7 dup (0)
-31E4:4FA0 15 16 17 18 19 1A db 15h, 16h, 17h, 18h, 19h, 1Ah
-31E4:4FA6 19 18 17 16 17 18 db 19h, 18h, 17h, 16h, 17h, 18h
-31E4:4FAC 19 1A 19 18 17 16 db 19h, 1Ah, 19h, 18h, 17h, 16h
-31E4:4FB2 15 00 0D 0E 0F 10 db 15h, 00h, 0Dh, 0Eh, 0Fh, 10h
-31E4:4FB8 11 12 11 12 11 10 db 11h, 12h, 11h, 12h, 11h, 10h
-31E4:4FBE 0F 13 14 00 0C 0D db 0Fh, 13h, 14h, 00h, 0Ch, 0Dh
-31E4:4FC4 0E 0F 10 0F 10 0F db 0Eh, 0Fh, 10h, 0Fh, 10h, 0Fh
-31E4:4FCA 10 0F 0E 0D 0C 00 db 10h, 0Fh, 0Eh, 0Dh, 0Ch, 00h
-31E4:4FD0 01 02 03 04 05 04 db 01h, 02h, 03h, 04h, 05h, 04h
-31E4:4FD6 05 04 03 02 06 07 db 05h, 04h, 03h, 02h, 06h, 07h
-31E4:4FDC 00 0D 0E 0F 10 11 db 00h, 0Dh, 0Eh, 0Fh, 10h, 11h
-31E4:4FE2 12 13 14 15 16 17 db 12h, 13h, 14h, 15h, 16h, 17h
-31E4:4FE8 18 19 1A 1B 00 1C db 18h, 19h, 1Ah, 1Bh, 00h, 1Ch
-31E4:4FEE 1D 1E 1F db 1Dh, 1Eh, 1Fh
-31E4:4FF1 20 21 22 23 24 db ' !"#$'
-31E4:4FF6 25 26 27 28 29 2A db '%&', 27h, '()*+,-./0(', 27h, '&%'
-31E4:4FFC 2B 2C 2D 2E 2F 30
-31E4:5002 28 27 26 25
-31E4:5006 24 db '$'
-31E4:5007 23 22 21 20 db '#"! '
-31E4:500B 1F 1E 1D 1C 00 01 db 1Fh, 1Eh, 1Dh, 1Ch, 00h, 01h
-31E4:5011 02 03 04 05 06 07 db 02h, 03h, 04h, 05h, 06h, 07h
-31E4:5017 08 09 0A 0B 0C 0D db 08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh
-31E4:501D 0E 0F 10 11 12 13 db 0Eh, 0Fh, 10h, 11h, 12h, 13h
-31E4:5023 14 15 16 17 18 00 db 14h, 15h, 16h, 17h, 18h, 00h
-31E4:5029 00 db 0
-
-31E4:502A 001D BB47 sub_211_list dw 1Dh, 0BB47h
-31E4:502E 0020 BB61 dw 20h, 0BB61h
-31E4:5032 0023 BB7B dw 23h, 0BB7Bh
-
-31E4:5036 000A[00] db 10 dup (0)
-
-31E4:5040 09 08 15 05 0A 0A look_info db 09h, 08h, 15h, 05h, 0Ah, 0Ah
-31E4:5046 B0 00 db 0B0h, 00h,
-31E4:5048 D2 00 db 0D2h, 00h
-31E4:504A 0006[00] db 6 dup (0)
-
-31E4:5050 CF5E give_talk_list dw 0CF5Eh ; Data table (indexed access)
-31E4:5052 CF14 dw 0CF14h
-31E4:5054 CF90 dw 0CF90h
-31E4:5056 CFAA dw 0CFAAh
-31E4:5058 CFD0 dw 0CFD0h
-31E4:505A CFF6 dw 0CFF6h
-
-; The following table consists of the set of hotspot Ids and offsets for character talk records.
-; Following this is the individual talk records for the characters
-
-31E4:505C 03EA 5202 talk_table db 03EAh, offset skorl_record
-31E4:5060 0411 5206 db 0411h, 5206h
-31E4:5064 03E9 5426 db 03E9h, 5426h
-31E4:5068 0412 5478 db 0412h, 5478h
-31E4:506C 03EB 547C db 03EBh, 547Ch
-31E4:5070 03EC 54B2 db 03ECh, 54B2h
-31E4:5074 03ED 52E2 db 03EDh, 52E2h
-31E4:5078 041F 52AC db 041Fh, 52ACh
-31E4:507C 0421 53F0 db 0421h, 53F0h
-31E4:5080 0422 53BA db 0422h, 53BAh
-31E4:5084 0426 545C db 0426h, 545Ch
-31E4:5088 0428 545C db 0428h, 545Ch
-31E4:508C 0427 5384 db 0427h, 5384h
-31E4:5090 03EF 5318 db 03EFh, 5318h
-31E4:5094 0420 534E db 0420h, 534Eh
-31E4:5098 0429 520A db 0429h, 520Ah
-31E4:509C 03EE 5196 db 03EEh, 5196h
-31E4:50A0 03F0 51CC db 03F0h, 51CCh
-31E4:50A4 042B 5276 db 042Bh, 5276h
-31E4:50A8 042C 5240 db 042Ch, 5240h
-31E4:50AC 042D 5240 db 042Dh, 5240h
-31E4:50B0 0434 5504 db 0434h, 5504h
-31E4:50B4 0436 512A db 0436h, 512Ah
-31E4:50B8 03F1 5160 db 03F1h, 5160h
-31E4:50BC 03F2 511C db 03F2h, 511Ch
-31E4:50C0 0437 5102 db 0437h, 5102h
-31E4:50C4 0438 510E db 0438h, 510Eh
-31E4:50C8 0442 50CC db 0442h, offset talk_442h_record
-
-31E4:50CC 10 D0 00 00 1E D0 talk_442h_record db 10h,0D0h, 00h, 00h, 1Eh,0D0h
-
-31E4:5202 0000 skorl_record dw 0
-31E4:5204 EB24 dw offset skorl_talk_0
-31E4:5206 0000 E022
-
-;***** TALK RECORD DATA deleted *****
-
-31E4:5504 002C[00] db 44 dup (0) ; Start of final talk list
-31E4:5530 EE EB 7A EC dw 0EBEEh, 0EC7Ah
-31E4:5534 000C[00] db 12 dup (0)
-
-
-31E4:5540 73 61 76 65 67 61 savegame_filename db 'savegame.dta', 0 ; xref 273F:934F
-31E4:5546 6D 65 2E 64 74 61
-31E4:554C 00
-31E4:554D FFFF data_832 dw 0FFFFh ; xref 273F:8F7C, 273F:8F86
-31E4:554F 00 00 00 00 00 20 db 00h, 00h, 00h, 00h, 00h, 20h
-31E4:5555 21 40 23 24 db '!@#$'
-31E4:5559 25 5E 26 2A 28 29 db '%^&*()_+|-=\{}[]:;', 27h, '<>?,.'
-31E4:555F 5F 2B 7C 2D 3D 5C
-31E4:5565 7B 7D 5B 5D 3A 3B
-31E4:556B 27 3C 3E 3F 2C 2E
-31E4:5571 2F 60 7E 22 00 db '/`~"', 0
-31E4:5576 52 65 73 74 6F 72 db 'Restore game', 0
-31E4:557C 65 20 67 61 6D 65
-31E4:5582 00
-31E4:5583 53 61 76 65 20 67 db 'Save game', 0
-31E4:5589 61 6D 65 00
-31E4:558D E0 E1 E1 E0 DE 01 db 0E0h,0E1h,0E1h,0E0h,0DEh, 01h
-31E4:5593 79 12 db 79h, 12h
-31E4:5595 000B[00] db 11 dup (0)
-31E4:55A0 00 data_835 db 0 ; xref 273F:94FB, 273F:A37B
- ; 273F:A888, 273F:A8A4
-31E4:55A1 0000 data_836 dw 0 ; xref 273F:949E, 273F:94F8
-31E4:55A3 04 0A 10 16 05 0B db 04h, 0Ah, 10h, 16h, 05h, 0Bh
-31E4:55A9 11 17 06 0C 12 07 db 11h, 17h, 06h, 0Ch, 12h, 07h
-31E4:55AF 0D 13 08 0E 14 09 db 0Dh, 13h, 08h, 0Eh, 14h, 09h
-31E4:55B5 0F 15 00 00 db 0Fh, 15h, 00h, 00h
-31E4:55B9 0007[00] db 7 dup (0)
-31E4:55C0 10 63 12 00 00 00 db 10h, 63h, 12h, 00h, 00h, 00h
-31E4:55C6 00 00 00 11 63 12 db 00h, 00h, 00h, 11h, 63h, 12h
-31E4:55CC 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:55D2 12 63 12 00 00 00 db 12h, 63h, 12h, 00h, 00h, 00h
-31E4:55D8 00 00 00 13 63 12 db 00h, 00h, 00h, 13h, 63h, 12h
-31E4:55DE 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:55E4 14 63 12 00 00 00 db 14h, 63h, 12h, 00h, 00h, 00h
-31E4:55EA 00 00 00 15 63 12 db 00h, 00h, 00h, 15h, 63h, 12h
-31E4:55F0 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:55F6 16 63 12 00 00 00 db 16h, 63h, 12h, 00h, 00h, 00h
-31E4:55FC 00 00 00 17 63 12 db 00h, 00h, 00h, 17h, 63h, 12h
-31E4:5602 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5608 18 63 12 00 00 00 db 18h, 63h, 12h, 00h, 00h, 00h
-31E4:560E 00 00 00 19 63 12 db 00h, 00h, 00h, 19h, 63h, 12h
-31E4:5614 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:561A 20 63 12 00 00 00 db 20h, 63h, 12h, 00h, 00h, 00h
-31E4:5620 00 00 00 21 63 12 db 00h, 00h, 00h, 21h, 63h, 12h
-31E4:5626 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-31E4:562B sub_272 proc near
-31E4:562B 00 22 add [bp+si],ah
-31E4:562D 63 12 00 00 00 00 db 63h, 12h, 00h, 00h, 00h, 00h
-31E4:5633 00 00 23 63 12 00 db 00h, 00h, 23h, 63h, 12h, 00h
-31E4:5639 00 00 00 00 00 24 db 00h, 00h, 00h, 00h, 00h, 24h
-31E4:563F 63 12 00 00 00 00 db 63h, 12h, 00h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 444
-
-31E4:5645 00 00 25 63 12 00 db 00h, 00h, 25h, 63h, 12h, 00h
-31E4:564B 00 00 00 00 00 26 db 00h, 00h, 00h, 00h, 00h, 26h
-31E4:5651 63 12 db 63h, 12h
-31E4:5653 000D[00] db 13 dup (0)
-31E4:5660 00 music_status db 0 ; xref 273F:092D, 273F:493B
- ; 273F:4942, 273F:7619
- ; 273F:93E0, 273F:93E4
- ; 273F:9405, 273F:9FA2
- ; 273F:9FCA, 273F:9FD9
- ; 273F:A016, 273F:A021
- ; 273F:A07C, 273F:A087
- ; 273F:A198, 273F:A1BA
- ; 273F:A2D7, 273F:A329
- ; 273F:A330, 273F:A576
- ; 273F:A592, 273F:A5A6
-31E4:5661 00 db 0
-31E4:5662 0000 0000 play_music_proc dw 0, 0 ; xref 273F:04BC, 273F:494B
- ; 273F:762D, 273F:933E
- ; 273F:9F7C, 273F:9F99
- ; 273F:9FBE, 273F:A0A8
- ; 273F:A0D5, 273F:A150
- ; 273F:A1CE, 273F:A1E9
- ; 273F:A1F8, 273F:A2D1
- ; 273F:A2F3, 273F:A31F
- ; 273F:A366, 273F:A3E1
- ; 273F:A43F, 273F:A486
- ; 273F:A589, 273F:A5DA
- ; 273F:A6DE
-31E4:5666 00 00 db 0, 0
-31E4:5668 00 note_flag db 0 ; xref 273F:48E2, 273F:48E9
- ; 273F:48F0, 273F:48F5
- ; 273F:4908, 273F:4936
- ; 273F:9F77, 273F:9F9D
- ; 273F:9FC5, 273F:9FD4
- ; 273F:A2CC, 273F:A335
-31E4:5669 00 data_843 db 0 ; xref 273F:A031, 273F:A1FC
-31E4:566A 0007[00] db 7 dup (0)
-31E4:5671 8A 1E 1A 03 80 00 db 8Ah, 1Eh, 1Ah, 03h, 80h, 00h
-31E4:5677 40 15 00 80 81 40 db 40h, 15h, 00h, 80h, 81h, 40h
-31E4:567D 02 02 C8 06 40 15 db 02h, 02h,0C8h, 06h, 40h, 15h
-31E4:5683 00 80 12 64 15 00 db 00h, 80h, 12h, 64h, 15h, 00h
-31E4:5689 80 13 40 15 00 80 db 80h, 13h, 40h, 15h, 00h, 80h
-31E4:568F 11 0A 15 00 40 18 db 11h, 0Ah, 15h, 00h, 40h, 18h
-31E4:5695 1E 15 00 80 97 1E db 1Eh, 15h, 00h, 80h, 97h, 1Eh
-31E4:569B 19 03 C8 07 7E 15 db 19h, 03h,0C8h, 07h, 7Eh, 15h
-31E4:56A1 01 80 08 7E 15 01 db 01h, 80h, 08h, 7Eh, 15h, 01h
-31E4:56A7 80 00 40 15 00 0F db 80h, 00h, 40h, 15h, 00h, 0Fh
-31E4:56AD 8A 40 1A 03 18 16 db 8Ah, 40h, 1Ah, 03h, 18h, 16h
-31E4:56B3 00 15 01 80 15 7F db 00h, 15h, 01h, 80h, 15h, 7Fh
-31E4:56B9 06 01 80 8F 0A 11 db 06h, 01h, 80h, 8Fh, 0Ah, 11h
-31E4:56BF 03 1C 41 64 15 01 db 03h, 1Ch, 41h, 64h, 15h, 01h
-31E4:56C5 80 10 64 16 01 02 db 80h, 10h, 64h, 16h, 01h, 02h
-31E4:56CB 97 8C 19 03 08 99 db 97h, 8Ch, 19h, 03h, 08h, 99h
-31E4:56D1 6A 11 02 6A 2B 80 db 6Ah, 11h, 02h, 6Ah, 2Bh, 80h
-31E4:56D7 15 01 80 97 80 19 db 15h, 01h, 80h, 97h, 80h, 19h
-31E4:56DD 03 04 2A 80 15 01 db 03h, 04h, 2Ah, 80h, 15h, 01h
-31E4:56E3 C8 38 80 15 01 80 db 0C8h, 38h, 80h, 15h, 01h, 80h
-31E4:56E9 3A 80 05 00 80 36 db 3Ah, 80h, 05h, 00h, 80h, 36h
-31E4:56EF 80 15 00 80 35 80 db 80h, 15h, 00h, 80h, 35h, 80h
-31E4:56F5 15 00 80 18 1E 15 db 15h, 00h, 80h, 18h, 1Eh, 15h
-31E4:56FB 00 19 18 1E 15 00 db 00h, 19h, 18h, 1Eh, 15h, 00h
-31E4:5701 07 02 1E 15 00 80 db 07h, 02h, 1Eh, 15h, 00h, 80h
-31E4:5707 04 1E 05 00 80 05 db 04h, 1Eh, 05h, 00h, 80h, 05h
-31E4:570D 1E 05 00 80 09 1E db 1Eh, 05h, 00h, 80h, 09h, 1Eh
-31E4:5713 15 00 80 0C 80 19 db 15h, 00h, 80h, 0Ch, 80h, 19h
-31E4:5719 02 80 83 80 19 00 db 02h, 80h, 83h, 80h, 19h, 00h
-31E4:571F 80 1A 80 15 00 80 db 80h, 1Ah, 80h, 15h, 00h, 80h
-31E4:5725 22 80 15 00 80 1B db 22h, 80h, 15h, 00h, 80h, 1Bh
-31E4:572B 80 1D 00 80 9E 80 db 80h, 1Dh, 00h, 80h, 9Eh, 80h
-31E4:5731 19 01 80 9F 80 15 db 19h, 01h, 80h, 9Fh, 80h, 15h
-31E4:5737 01 80 21 80 05 01 db 01h, 80h, 21h, 80h, 05h, 01h
-31E4:573D 80 2D 80 15 01 80 db 80h, 2Dh, 80h, 15h, 01h, 80h
-31E4:5743 30 80 15 01 80 B4 db 30h, 80h, 15h, 01h, 80h,0B4h
-31E4:5749 80 15 01 80 23 80 db 80h, 15h, 01h, 80h, 23h, 80h
-31E4:574F 11 01 80 24 80 11 db 11h, 01h, 80h, 24h, 80h, 11h
-31E4:5755 01 80 25 80 11 01 db 01h, 80h, 25h, 80h, 11h, 01h
-31E4:575B 80 26 80 11 01 80 db 80h, 26h, 80h, 11h, 01h, 80h
-31E4:5761 27 80 11 01 80 28 db 27h, 80h, 11h, 01h, 80h, 28h
-31E4:5767 80 11 01 C8 42 64 db 80h, 11h, 01h,0C8h, 42h, 64h
-31E4:576D 15 01 80 29 80 15 db 15h, 01h, 80h, 29h, 80h, 15h
-31E4:5773 01 80 3F 80 15 01 db 01h, 80h, 3Fh, 80h, 15h, 01h
-31E4:5779 80 FF 00 db 80h,0FFh, 00h
-31E4:577C 00 00 00 00 db 0, 0, 0, 0
-31E4:5780 0000 palette_segment dw 0 ; xref 273F:A346, 273F:A850
-31E4:5782 0000 misc_segment dw 0 ; xref 273F:A2C2, 273F:A2E1
- ; 273F:A30D, 273F:A33A
- ; 273F:A342, 273F:A352
- ; 273F:A5B2, 273F:A667
- ; 273F:A6BE, 273F:A7C7
- ; 273F:A7EC, 273F:A7FB
-31E4:5784 0000 decoded_data_end_segment dw 0 ; xref 273F:A7CF, 273F:A803
-
-31E4:5786 09 00 45 01 02 01 db 09h, 00h, 45h, 01h, 02h, 01h
-31E4:578C 00 1B 00 48 01 05 db 00h, 1Bh, 00h, 48h, 01h, 05h
-31E4:5792 01 00 18 00 46 01 db 01h, 00h, 18h, 00h, 46h, 01h
-31E4:5798 03 01 02 18 00 37 db 03h, 01h, 02h, 18h, 00h, 37h
-31E4:579E 01 01 01 00 03 00 db 01h, 01h, 01h, 00h, 03h, 00h
-31E4:57A4 37 01 01 01 01 03 db 37h, 01h, 01h, 01h, 01h, 03h
-31E4:57AA 00 37 01 01 01 02 db 00h, 37h, 01h, 01h, 01h, 02h
-31E4:57B0 03 00 37 01 01 01 db 03h, 00h, 37h, 01h, 01h, 01h
-31E4:57B6 03 03 00 37 01 01 db 03h, 03h, 00h, 37h, 01h, 01h
-31E4:57BC 01 04 04 00 37 01 db 01h, 04h, 04h, 00h, 37h, 01h
-31E4:57C2 01 01 05 07 00 47 db 01h, 01h, 05h, 07h, 00h, 47h
-31E4:57C8 01 04 01 06 1F 00 db 01h, 04h, 01h, 06h, 1Fh, 00h
-31E4:57CE 00 00 06 01 00 db 00h, 00h, 06h, 01h, 00h
-31E4:57D3 000D[00] db 13 dup (0)
-
- hotspot_script_master_list
-31E4:57E0 F0 02 80 00 AE 0B db 0F0h, 02h, 80h, 00h,0AEh, 0Bh
-31E4:57E6 84 0C B2 0C 08 0D db 84h, 0Ch,0B2h, 0Ch, 08h, 0Dh
-31E4:57EC 00 04 1E 26 C2 26 db 00h, 04h, 1Eh, 26h,0C2h, 26h
-31E4:57F2 08 27 78 26 DA 09 db 08h, 27h, 78h, 26h,0DAh, 09h
-31E4:57F8 E0 09 4C 04 52 0F db 0E0h, 09h, 4Ch, 04h, 52h, 0Fh
-31E4:57FE F0 0A 00 00 00 00 db 0F0h, 0Ah, 00h, 00h, 00h, 00h
-31E4:5804 00 00 82 02 22 03 db 00h, 00h, 82h, 02h, 22h, 03h
-31E4:580A 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-
-; This animation pixel block is referenced by the pixel block for rooms
-
-31E4:5810 08 40 01 voice_anim_block db 08h, 40h, 01h
-
-31E4:5813 0000 voice_pixel_segment dw 0
-31E4:5815 0000 dw 0
-31E4:5817 0000 voice_frame_offset dw 0
-
-31E4:5819 10 43 12 db 10h, 43h, 12h
-31E4:581C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5822 12 43 12 00 00 00 db 12h, 43h, 12h, 00h, 00h, 00h
-31E4:5828 00 00 00 13 43 12 db 00h, 00h, 00h, 13h, 43h, 12h
-31E4:582E 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5834 17 41 12 00 00 00 db 17h, 41h, 12h, 00h, 00h, 00h
-31E4:583A 00 00 00 11 db 00h, 00h, 00h, 11h
-31E4:583E 41 db 41h
-31E4:583F 0007[00] db 7 dup (0)
-31E4:5846 10 42 12 00 00 00 db 10h, 42h, 12h, 00h, 00h, 00h
-31E4:584C 00 00 00 12 41 12 db 00h, 00h, 00h, 12h, 41h, 12h
-31E4:5852 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5858 11 42 12 00 00 00 db 11h, 42h, 12h, 00h, 00h, 00h
-31E4:585E 00 00 00 10 91 12 db 00h, 00h, 00h, 10h, 91h, 12h
-31E4:5864 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:586A 10 9D 12 00 00 00 db 10h, 9Dh, 12h, 00h, 00h, 00h
-31E4:5870 00 00 00 11 9D 12 db 00h, 00h, 00h, 11h, 9Dh, 12h
-31E4:5876 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:587C 11 A0 12 00 00 00 db 11h,0A0h, 12h, 00h, 00h, 00h
-31E4:5882 00 00 00 10 8C 12 db 00h, 00h, 00h, 10h, 8Ch, 12h
-31E4:5888 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:588E 10 A0 12 00 00 00 db 10h,0A0h, 12h, 00h, 00h, 00h
-31E4:5894 00 00 00 db 00h, 00h, 00h,
-31E4:5897 4114 anim_entry_1: dw 4114h ; Disk res for anim contents?
-31E4:5899 12 db 12h
-31E4:589A 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58A0 11 44 04 00 00 00 db 11h, 44h, 04h, 00h, 00h, 00h
-31E4:58A6 00 00 00 12 42 12 db 00h, 00h, 00h, 12h, 42h, 12h
-31E4:58AC 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58B2 11 87 12 00 00 00 db 11h, 87h, 12h, 00h, 00h, 00h
-31E4:58B8 00 00 00 10 87 12 db 00h, 00h, 00h, 10h, 87h, 12h
-31E4:58BE 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58C4 13 41 12 00 00 00 db 13h, 41h, 12h, 00h, 00h, 00h
-31E4:58CA 00 00 00 15 41 12 db 00h, 00h, 00h, 15h, 41h, 12h
-31E4:58D0 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58D6 12 44 12 00 00 00 db 12h, 44h, 12h, 00h, 00h, 00h
-31E4:58DC 00 00 00 16 41 12 db 00h, 00h, 00h, 16h, 41h, 12h
-31E4:58E2 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58E8 10 9C 12 00 00 00 db 10h, 9Ch, 12h, 00h, 00h, 00h
-31E4:58EE 00 00 00 10 93 12 db 00h, 00h, 00h, 10h, 93h, 12h
-31E4:58F4 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:58FA 10 9E 12 00 00 00 db 10h, 9Eh, 12h, 00h, 00h, 00h
-31E4:5900 00 00 00 10 8E 12 db 00h, 00h, 00h, 10h, 8Eh, 12h
-31E4:5906 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:590C 10 9F 12 00 00 00 db 10h, 9Fh, 12h, 00h, 00h, 00h
-31E4:5912 00 00 00 11 9C 12 db 00h, 00h, 00h, 11h, 9Ch, 12h
-31E4:5918 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:591E 11 9F 12 00 00 00 db 11h, 9Fh, 12h, 00h, 00h, 00h
-31E4:5924 00 00 00 13 9E 12 db 00h, 00h, 00h, 13h, 9Eh, 12h
-31E4:592A 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5930 16 9E 12 00 00 00 db 16h, 9Eh, 12h, 00h, 00h, 00h
-31E4:5936 00 00 00 12 9C 12 db 00h, 00h, 00h, 12h, 9Ch, 12h
-31E4:593C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5942 11 94 12 00 00 00 db 11h, 94h, 12h, 00h, 00h, 00h
-31E4:5948 00 00 00 12 A0 12 db 00h, 00h, 00h, 12h,0A0h, 12h
-31E4:594E 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5954 11 8C 12 00 00 00 db 11h, 8Ch, 12h, 00h, 00h, 00h
-31E4:595A 00 00 00 10 A4 12 db 00h, 00h, 00h, 10h,0A4h, 12h
-31E4:5960 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5966 10 94 12 00 00 00 db 10h, 94h, 12h, 00h, 00h, 00h
-31E4:596C 00 00 00 12 9F 12 db 00h, 00h, 00h, 12h, 9Fh, 12h
-31E4:5972 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5978 13 9F 12 00 00 00 db 13h, 9Fh, 12h, 00h, 00h, 00h
-31E4:597E 00 00 00 12 9E 12 db 00h, 00h, 00h, 12h, 9Eh, 12h
-31E4:5984 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:598A 10 8F 12 00 00 00 db 10h, 8Fh, 12h, 00h, 00h, 00h
-31E4:5990 00 00 00 12 9D 12 db 00h, 00h, 00h, 12h, 9Dh, 12h
-31E4:5996 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:599C 20 8A 12 00 00 00 db 20h, 8Ah, 12h, 00h, 00h, 00h
-31E4:59A2 00 00 00 10 A2 12 db 00h, 00h, 00h, 10h,0A2h, 12h
-31E4:59A8 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:59AE 12 66 12 00 00 00 db 12h, 66h, 12h, 00h, 00h, 00h
-31E4:59B4 00 00 00 10 66 12 db 00h, 00h, 00h, 10h, 66h, 12h
-31E4:59BA 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:59C0 11 66 12 00 00 00 db 11h, 66h, 12h, 00h, 00h, 00h
-31E4:59C6 00 00 00 13 66 12 db 00h, 00h, 00h, 13h, 66h, 12h
-31E4:59CC 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:59D2 10 69 12 00 00 00 db 10h, 69h, 12h, 00h, 00h, 00h
-31E4:59D8 00 00 00 04 ED 12 db 00h, 00h, 00h, 04h,0EDh, 12h
-31E4:59DE 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:59E4 10 A3 12 00 00 00 db 10h,0A3h, 12h, 00h, 00h, 00h
-31E4:59EA 00 00 00 11 A3 12 db 00h, 00h, 00h, 11h,0A3h, 12h
-31E4:59F0 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-31E4:59F5 sub_273:
-31E4:59F5 00 11 add [bx+di],dl
-31E4:59F7 69 12 00 00 00 00 db 69h, 12h, 00h, 00h, 00h, 00h
-31E4:59FD 00 00 12 69 12 00 db 00h, 00h, 12h, 69h, 12h, 00h
-31E4:5A03 00 00 00 00 00 13 db 00h, 00h, 00h, 00h, 00h, 13h
-31E4:5A09 69 12 00 00 00 00 db 69h, 12h, 00h, 00h, 00h, 00h
-31E4:5A0F 00 00 14 69 12 00 db 00h, 00h, 14h, 69h, 12h, 00h
-31E4:5A15 00 00 00 00 00 16 db 00h, 00h, 00h, 00h, 00h, 16h
-31E4:5A1B EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A21 00 00 10 EA 12 00 db 00h, 00h, 10h,0EAh, 12h, 00h
-31E4:5A27 00 00 00 00 00 15 db 00h, 00h, 00h, 00h, 00h, 15h
-31E4:5A2D EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A33 00 00 14 EF 12 00 db 00h, 00h, 14h,0EFh, 12h, 00h
-31E4:5A39 00 00 00 00 00 13 db 00h, 00h, 00h, 00h, 00h, 13h
-31E4:5A3F EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A45 00 00 11 EA 12 00 db 00h, 00h, 11h,0EAh, 12h, 00h
-31E4:5A4B 00 00 00 00 00 10 db 00h, 00h, 00h, 00h, 00h, 10h
-31E4:5A51 EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A57 00 00 11 EF 12 00 db 00h, 00h, 11h,0EFh, 12h, 00h
-31E4:5A5D 00 00 00 00 00 12 db 00h, 00h, 00h, 00h, 00h, 12h
-31E4:5A63 EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A69 00 00 17 63 12 00 db 00h, 00h, 17h, 63h, 12h, 00h
-31E4:5A6F 00 00 00 00 00 27 db 00h, 00h, 00h, 00h, 00h, 27h
-31E4:5A75 63 12 00 00 00 00 db 63h, 12h, 00h, 00h, 00h, 00h
-31E4:5A7B 00 00 28 63 12 00 db 00h, 00h, 28h, 63h, 12h, 00h
-31E4:5A81 00 00 00 00 00 17 db 00h, 00h, 00h, 00h, 00h, 17h
-31E4:5A87 EF 12 00 00 00 00 db 0EFh, 12h, 00h, 00h, 00h, 00h
-31E4:5A8D 00 00 12 8E 12 00 db 00h, 00h, 12h, 8Eh, 12h, 00h
-31E4:5A93 00 00 00 00 00 11 db 00h, 00h, 00h, 00h, 00h, 11h
-31E4:5A99 8E 12 00 00 00 00 db 8Eh, 12h, 00h, 00h, 00h, 00h
-31E4:5A9F 00 00 14 9D 12 00 db 00h, 00h, 14h, 9Dh, 12h, 00h
-31E4:5AA5 00 00 00 00 00 11 db 00h, 00h, 00h, 00h, 00h, 11h
-31E4:5AAB A2 12 00 00 00 00 db 0A2h, 12h, 00h, 00h, 00h, 00h
-31E4:5AB1 00 00 13 9D 12 00 db 00h, 00h, 13h, 9Dh, 12h, 00h
-31E4:5AB7 00 00 00 00 00 06 db 00h, 00h, 00h, 00h, 00h, 06h
-31E4:5ABD EB 12 00 00 00 00 db 0EBh, 12h, 00h, 00h, 00h, 00h
-31E4:5AC3 00 00 05 EB 12 00 db 00h, 00h, 05h,0EBh, 12h, 00h
-31E4:5AC9 00 00 00 00 00 02 db 00h, 00h, 00h, 00h, 00h, 02h
-31E4:5ACF EB 12 00 00 00 00 db 0EBh, 12h, 00h, 00h, 00h, 00h
-31E4:5AD5 00 00 03 EB 12 00 db 00h, 00h, 03h,0EBh, 12h, 00h
-31E4:5ADB 00 00 00 00 00 04 db 00h, 00h, 00h, 00h, 00h, 04h
-31E4:5AE1 EB 12 00 00 00 00 db 0EBh, 12h, 00h, 00h, 00h, 00h
-31E4:5AE7 00 00 12 EA 12 00 db 00h, 00h, 12h,0EAh, 12h, 00h
-31E4:5AED 00 00 00 00 00 13 db 00h, 00h, 00h, 00h, 00h, 13h
-31E4:5AF3 EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5AF9 00 00 14 EA 12 00 db 00h, 00h, 14h,0EAh, 12h, 00h
-31E4:5AFF 00 00 00 00 00 15 db 00h, 00h, 00h, 00h, 00h, 15h
-31E4:5B05 EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B0B 00 00 16 EA 12 00 db 00h, 00h, 16h,0EAh, 12h, 00h
-31E4:5B11 00 00 00 00 00 17 db 00h, 00h, 00h, 00h, 00h, 17h
-31E4:5B17 EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B1D 00 00 18 EA 12 00 db 00h, 00h, 18h,0EAh, 12h, 00h
-31E4:5B23 00 00 00 00 00 19 db 00h, 00h, 00h, 00h, 00h, 19h
-31E4:5B29 EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B2F 00 00 20 EA 12 00 db 00h, 00h, 20h,0EAh, 12h, 00h
-31E4:5B35 00 00 00 00 00 21 db 00h, 00h, 00h, 00h, 00h, 21h
-31E4:5B3B EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B41 00 00 22 EA 12 00 db 00h, 00h, 22h,0EAh, 12h, 00h
-31E4:5B47 00 00 00 00 00 23 db 00h, 00h, 00h, 00h, 00h, 23h
-31E4:5B4D EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B53 00 00 24 EA 12 00 db 00h, 00h, 24h,0EAh, 12h, 00h
-31E4:5B59 00 00 00 00 00 25 db 00h, 00h, 00h, 00h, 00h, 25h
-31E4:5B5F EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B65 00 00 26 EA 12 00 db 00h, 00h, 26h,0EAh, 12h, 00h
-31E4:5B6B 00 00 00 00 00 27 db 00h, 00h, 00h, 00h, 00h, 27h
-31E4:5B71 EA 12 00 00 00 00 db 0EAh, 12h, 00h, 00h, 00h, 00h
-31E4:5B77 00 00 13 9C 12 00 db 00h, 00h, 13h, 9Ch, 12h, 00h
-31E4:5B7D 00 00 00 00 00 14 db 00h, 00h, 00h, 00h, 00h, 14h
-31E4:5B83 9C 12 00 00 00 00 db 9Ch, 12h, 00h, 00h, 00h, 00h
-31E4:5B89 00 00 0A 8D 12 00 db 00h, 00h, 0Ah, 8Dh, 12h, 00h
-31E4:5B8F 00 00 00 00 00 0B db 00h, 00h, 00h, 00h, 00h, 0Bh
-31E4:5B95 8D 12 00 00 00 00 db 8Dh, 12h, 00h, 00h, 00h, 00h
-31E4:5B9B 00 00 0C 8D 12 00 db 00h, 00h, 0Ch, 8Dh, 12h, 00h
-31E4:5BA1 00 00 00 00 00 0D db 00h, 00h, 00h, 00h, 00h, 0Dh
-31E4:5BA7 8D 12 00 00 00 00 db 8Dh, 12h, 00h, 00h, 00h, 00h
-31E4:5BAD 00 00 15 69 12 00 db 00h, 00h, 15h, 69h, 12h, 00h
-31E4:5BB3 00 00 00 00 00 0F db 00h, 00h, 00h, 00h, 00h, 0Fh
-31E4:5BB9 00 FC FF 00 00 0E db 00h,0FCh,0FFh, 00h, 00h, 0Eh
-31E4:5BBF 00 FC FF 00 00 0D db 00h,0FCh,0FFh, 00h, 00h, 0Dh
-31E4:5BC5 00 FC FF 00 00 0C db 00h,0FCh,0FFh, 00h, 00h, 0Ch
-31E4:5BCB 00 FC FF 00 00 0B db 00h,0FCh,0FFh, 00h, 00h, 0Bh
-31E4:5BD1 00 FC FF 00 00 0A db 00h,0FCh,0FFh, 00h, 00h, 0Ah
-31E4:5BD7 00 FC FF 00 00 09 db 00h,0FCh,0FFh, 00h, 00h, 09h
-31E4:5BDD 00 FC FF 00 00 08 db 00h,0FCh,0FFh, 00h, 00h, 08h
-31E4:5BE3 00 FC FF 00 00 FF db 00h,0FCh,0FFh, 00h, 00h,0FFh
-31E4:5BE9 FF 00 00 04 00 00 db 0FFh, 00h, 00h, 04h, 00h, 00h
-31E4:5BEF 00 01 00 04 00 00 db 00h, 01h, 00h, 04h, 00h, 00h
-31E4:5BF5 00 02 00 04 00 00 db 00h, 02h, 00h, 04h, 00h, 00h
-31E4:5BFB 00 03 00 04 00 00 db 00h, 03h, 00h, 04h, 00h, 00h
-31E4:5C01 00 04 00 04 00 00 db 00h, 04h, 00h, 04h, 00h, 00h
-31E4:5C07 00 05 00 04 00 00 db 00h, 05h, 00h, 04h, 00h, 00h
-31E4:5C0D 00 06 00 04 00 00 db 00h, 06h, 00h, 04h, 00h, 00h
-31E4:5C13 00 07 00 04 00 00 db 00h, 07h, 00h, 04h, 00h, 00h
-31E4:5C19 00 FF FF 18 00 00 db 00h,0FFh,0FFh, 18h, 00h, 00h
-31E4:5C1F 00 FE FF 19 00 00 db 00h,0FEh,0FFh, 19h, 00h, 00h
-31E4:5C25 00 FE FF 1A 00 00 db 00h,0FEh,0FFh, 1Ah, 00h, 00h
-31E4:5C2B 00 FE FF 1B 00 00 db 00h,0FEh,0FFh, 1Bh, 00h, 00h
-31E4:5C31 00 FE FF 1C 00 00 db 00h,0FEh,0FFh, 1Ch, 00h, 00h
-31E4:5C37 00 FE FF 1D 00 00 db 00h,0FEh,0FFh, 1Dh, 00h, 00h
-31E4:5C3D 00 FE FF 1E 00 00 db 00h,0FEh,0FFh, 1Eh, 00h, 00h
-31E4:5C43 00 FE FF 1F 00 00 db 00h,0FEh,0FFh, 1Fh, 00h, 00h
-31E4:5C49 00 FE FF FF FF 10 db 00h,0FEh,0FFh,0FFh,0FFh, 10h
-31E4:5C4F 00 00 00 02 00 11 db 00h, 00h, 00h, 02h, 00h, 11h
-31E4:5C55 00 00 00 02 00 12 db 00h, 00h, 00h, 02h, 00h, 12h
-31E4:5C5B 00 00 00 02 00 13 db 00h, 00h, 00h, 02h, 00h, 13h
-31E4:5C61 00 00 00 02 00 14 db 00h, 00h, 00h, 02h, 00h, 14h
-31E4:5C67 00 00 00 02 00 15 db 00h, 00h, 00h, 02h, 00h, 15h
-31E4:5C6D 00 00 00 02 00 16 db 00h, 00h, 00h, 02h, 00h, 16h
-31E4:5C73 00 00 00 02 00 17 db 00h, 00h, 00h, 02h, 00h, 17h
-31E4:5C79 00 00 00 02 00 FF db 00h, 00h, 00h, 02h, 00h,0FFh
-31E4:5C7F FF db 0FFh
-31E4:5C80 20 41 db 20h, 41h
-31E4:5C82 0007[00] db 7 dup (0)
-31E4:5C89 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5C8F EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5C95 21 41 00 00 00 00 db 21h, 41h, 00h, 00h, 00h, 00h
-31E4:5C9B 00 00 00 1C 5C 4E db 00h, 00h, 00h, 1Ch, 5Ch, 4Eh
-31E4:5CA1 5C B8 5B EA 5B 23 db 5Ch,0B8h, 5Bh,0EAh, 5Bh, 23h
-31E4:5CA7 22 21 20 17 9E db 22h, 21h, 20h, 17h, 9Eh
-31E4:5CAC 0007[00] db 7 dup (0)
-31E4:5CB3 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5CB9 EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5CBF 11 43 00 00 00 00 db 11h, 43h, 00h, 00h, 00h, 00h
-31E4:5CC5 00 00 00 1C 5C 4E db 00h, 00h, 00h, 1Ch, 5Ch, 4Eh
-31E4:5CCB 5C B8 5B EA 5B 23 db 5Ch,0B8h, 5Bh,0EAh, 5Bh, 23h
-31E4:5CD1 22 21 20 10 44 00 db 22h, 21h, 20h, 10h, 44h, 00h
-31E4:5CD7 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5CDD 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5CE3 EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5CE9 12 8A 00 00 00 00 db 12h, 8Ah, 00h, 00h, 00h, 00h
-31E4:5CEF 00 00 00 1C 5C 4E db 00h, 00h, 00h, 1Ch, 5Ch, 4Eh
-31E4:5CF5 5C B8 5B EA 5B 23 db 5Ch,0B8h, 5Bh,0EAh, 5Bh, 23h
-31E4:5CFB 22 21 20 13 8A 00 db 22h, 21h, 20h, 13h, 8Ah, 00h
-31E4:5D01 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5D07 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5D0D EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5D13 10 8A 00 00 00 00 db 10h, 8Ah, 00h, 00h, 00h, 00h
-31E4:5D19 00 00 00 1C 5C 4E db 00h, 00h, 00h, 1Ch, 5Ch, 4Eh
-31E4:5D1F 5C B8 5B EA 5B 23 db 5Ch,0B8h, 5Bh,0EAh, 5Bh, 23h
-31E4:5D25 22 21 20 14 9F db 22h, 21h, 20h, 14h, 9Fh
-31E4:5D2A 0007[00] db 7 dup (0)
-31E4:5D31 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5D37 EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5D3D 14 A4 db 14h,0A4h
-31E4:5D3F 0007[00] db 7 dup (0)
-31E4:5D46 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5D4C EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5D52 11 A4 00 00 00 00 db 11h,0A4h, 00h, 00h, 00h, 00h
-31E4:5D58 00 00 00 1C 5C 4E db 00h, 00h, 00h, 1Ch, 5Ch, 4Eh
-31E4:5D5E 5C B8 5B EA 5B 23 db 5Ch,0B8h, 5Bh,0EAh, 5Bh, 23h
-31E4:5D64 22 21 20 18 EF db 22h, 21h, 20h, 18h,0EFh
-31E4:5D69 0007[00] db 7 dup (0)
-31E4:5D70 1C 5C 4E 5C B8 5B db 1Ch, 5Ch, 4Eh, 5Ch,0B8h, 5Bh
-31E4:5D76 EA 5B 23 22 21 20 db 0EAh, 5Bh, 23h, 22h, 21h, 20h
-31E4:5D7C 00 00 00 00 52 00 db 00h, 00h, 00h, 00h, 52h, 00h
-31E4:5D82 000E[00] db 14 dup (0)
-
-
-31E4:5D90 00 write_buffer db 0 ; xref 273F:8F8D
-31E4:5D91 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:5D97 00 db 0
-
-31E4:5D98 EF hotspot_table_2 db 0EFh
-31E4:5D99 6C 47 00 00 00 00 db 6Ch, 47h, 00h, 00h, 00h, 00h
-31E4:5D9F 00 00 B9 70 F1 00 db 00h, 00h,0B9h, 70h,0F1h, 00h
-31E4:5DA5 33 01 00 00 03 67 db 33h, 01h, 00h, 00h, 03h, 67h
-31E4:5DAB 6D 49 00 E2 00 00 db 6Dh, 49h, 00h,0E2h, 00h, 00h
-31E4:5DB1 00 01 CE 72 7A 01 db 00h, 01h,0CEh, 72h, 7Ah, 01h
-31E4:5DB7 D0 08 00 00 02 C2 db 0D0h, 08h, 00h, 00h, 02h,0C2h
-31E4:5DBD 77 7A 01 D8 08 00 db 77h, 7Ah, 01h,0D8h, 08h, 00h
-31E4:5DC3 00 02 E1 79 7A 01 db 00h, 02h,0E1h, 79h, 7Ah, 01h
-31E4:5DC9 DC 08 00 00 02 1F db 0DCh, 08h, 00h, 00h, 02h, 1Fh
-31E4:5DCF 7B 7A 01 12 0B 00 db 7Bh, 7Ah, 01h, 12h, 0Bh, 00h
-31E4:5DD5 00 02 21 7D 55 08 db 00h, 02h, 21h, 7Dh, 55h, 08h
-31E4:5DDB 56 08 00 00 06 18 db 56h, 08h, 00h, 00h, 06h, 18h
-31E4:5DE1 7C 7A 01 26 0B 00 db 7Ch, 7Ah, 01h, 26h, 0Bh, 00h
-31E4:5DE7 00 02 E6 6D 49 00 db 00h, 02h,0E6h, 6Dh, 49h, 00h
-31E4:5DED FE 0B 00 00 02 50 db 0FEh, 0Bh, 00h, 00h, 02h, 50h
-31E4:5DF3 71 7A 01 A4 0F 00 db 71h, 7Ah, 01h,0A4h, 0Fh, 00h
-31E4:5DF9 00 08 E9 6F 49 00 db 00h, 08h,0E9h, 6Fh, 49h, 00h
-31E4:5DFF DF 0F 00 00 00 FF db 0DFh, 0Fh, 00h, 00h, 00h,0FFh
-31E4:5E05 FF 00 00 00 00 00 db 0FFh, 00h, 00h, 00h, 00h, 00h
-31E4:5E0B 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:5E11 00 00 00 00 00 FF db 00h, 00h, 00h, 00h, 00h,0FFh
-31E4:5E17 FF 00 00 00 00 00 db 0FFh, 00h, 00h, 00h, 00h, 00h
-31E4:5E1D 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:5E23 00 00 00 00 00 FF db 00h, 00h, 00h, 00h, 00h,0FFh
-31E4:5E29 FF 00 00 00 00 00 db 0FFh, 00h, 00h, 00h, 00h, 00h
-31E4:5E2F 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:5E35 00 00 00 00 00 FF db 00h, 00h, 00h, 00h, 00h,0FFh
-31E4:5E3B FF 00 00 00 00 00 db 0FFh, 00h, 00h, 00h, 00h, 00h
-31E4:5E41 00 00 FF db 00h, 00h,0FFh
-
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-
-31E4:5E44 sub_274:
-31E4:5E44 FF 00 inc word ptr [bx+si]
-31E4:5E46 00 00 00 00 00 db 0, 0, 0, 0, 0
-31E4:5E4B loc_2130:
-31E4:5E4B 00 FF add bh,bh
-31E4:5E4D FF 00 inc word ptr [bx+si]
-31E4:5E4F 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5E55 FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5E5B 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:5E61 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5E67 FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5E6D 00 00 db 00h, 00h
-31E4:5E6F loc_2131:
-31E4:5E6F 00 FF add bh,bh
-31E4:5E71 FF 00 inc word ptr [bx+si]
-31E4:5E73 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5E79 FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5E7F 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:5E85 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5E8B FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5E91 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:5E97 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5E9D FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5EA3 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:5EA9 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5EAF FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:5EB5 00 00 00 db 00h, 00h, 00h
-31E4:5EB8 07 hotspot_table_5 db 7 ; xref 273F:1CA1, 273F:1CEE
-31E4:5EB9 7E 8B 40 AC 00 00 db 7Eh, 8Bh, 40h,0ACh, 00h, 00h
-31E4:5EBF 00 01 B0 81 8B 40 db 00h, 01h,0B0h, 81h, 8Bh, 40h
-31E4:5EC5 AC 00 00 00 01 DB db 0ACh, 00h, 00h, 00h, 01h,0DBh
-31E4:5ECB 81 8B 40 AC 00 00 db 81h, 8Bh, 40h,0ACh, 00h, 00h
-31E4:5ED1 00 01 db 00h, 01h
-31E4:5ED3 0009[00] db 9 dup (0)
-31E4:5EDC EA 6A CD 40 5C 01 db 0EAh, 6Ah,0CDh, 40h, 5Ch, 01h
-31E4:5EE2 00 00 01 FB 83 EE db 00h, 00h, 01h,0FBh, 83h,0EEh
-31E4:5EE8 40 EF 00 00 00 01 db 40h,0EFh, 00h, 00h, 00h, 01h
-31E4:5EEE C6 7E 00 00 00 00 db 0C6h, 7Eh, 00h, 00h, 00h, 00h
-31E4:5EF4 00 00 00 D2 7F 8B db 00h, 00h, 00h,0D2h, 7Fh, 8Bh
-31E4:5EFA 40 AC 00 00 00 01 db 40h,0ACh, 00h, 00h, 00h, 01h
-31E4:5F00 05 80 8F 20 E1 00 db 05h, 80h, 8Fh, 20h,0E1h, 00h
-31E4:5F06 00 00 01 37 80 48 db 00h, 00h, 01h, 37h, 80h, 48h
-31E4:5F0C 00 E0 00 00 00 01 db 00h,0E0h, 00h, 00h, 00h, 01h
-31E4:5F12 81 80 92 20 DA 00 db 81h, 80h, 92h, 20h,0DAh, 00h
-31E4:5F18 00 00 01 00 db 00h, 00h, 01h, 00h
-31E4:5F1C 001A[00] db 26 dup (0)
-31E4:5F36 A7 7F 00 00 00 00 db 0A7h, 7Fh, 00h, 00h, 00h, 00h
-31E4:5F3C 00 00 00 7C 7F 35 db 00h, 00h, 00h, 7Ch, 7Fh, 35h
-31E4:5F42 21 36 01 00 00 02 db 21h, 36h, 01h, 00h, 00h, 02h
-31E4:5F48 F0 7E D3 40 23 01 db 0F0h, 7Eh,0D3h, 40h, 23h, 01h
-31E4:5F4E 00 00 01 06 82 D3 db 00h, 00h, 01h, 06h, 82h,0D3h
-31E4:5F54 40 D4 00 00 00 01 db 40h,0D4h, 00h, 00h, 00h, 01h
-31E4:5F5A 31 82 00 00 00 00 db 31h, 82h, 00h, 00h, 00h, 00h
-31E4:5F60 00 00 00 5C 82 D5 db 00h, 00h, 00h, 5Ch, 82h,0D5h
-31E4:5F66 00 D9 00 00 00 01 db 00h,0D9h, 00h, 00h, 00h, 01h
-31E4:5F6C 1F 7F 00 00 00 00 db 1Fh, 7Fh, 00h, 00h, 00h, 00h
-31E4:5F72 00 00 00 49 7F db 00h, 00h, 00h, 49h, 7Fh
-31E4:5F77 0007[00] db 7 dup (0)
-31E4:5F7E 3A 7E 8B 40 AC 00 db 3Ah, 7Eh, 8Bh, 40h,0ACh, 00h
-31E4:5F84 00 00 01 55 88 7A db 00h, 00h, 01h, 55h, 88h, 7Ah
-31E4:5F8A 01 A6 08 00 00 02 db 01h,0A6h, 08h, 00h, 00h, 02h
-31E4:5F90 D1 80 7A 01 8E 08 db 0D1h, 80h, 7Ah, 01h, 8Eh, 08h
-31E4:5F96 00 00 02 05 8C 7A db 00h, 00h, 02h, 05h, 8Ch, 7Ah
-31E4:5F9C 01 CD 08 00 00 02 db 01h,0CDh, 08h, 00h, 00h, 02h
-31E4:5FA2 71 8D 7A 01 66 08 db 71h, 8Dh, 7Ah, 01h, 66h, 08h
-31E4:5FA8 00 00 02 85 8E 00 db 00h, 00h, 02h, 85h, 8Eh, 00h
-31E4:5FAE 00 00 00 00 00 02 db 00h, 00h, 00h, 00h, 00h, 02h
-31E4:5FB4 70 7E 4E 48 4F 08 db 70h, 7Eh, 4Eh, 48h, 4Fh, 08h
-31E4:5FBA 00 00 02 9B 7E 00 db 00h, 00h, 02h, 9Bh, 7Eh, 00h
-31E4:5FC0 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:5FC6 B6 8D 49 00 7A 0C db 0B6h, 8Dh, 49h, 00h, 7Ah, 0Ch
-31E4:5FCC 00 00 02 40 8E 49 db 00h, 00h, 02h, 40h, 8Eh, 49h
-31E4:5FD2 00 8A 08 00 00 02 db 00h, 8Ah, 08h, 00h, 00h, 02h
-31E4:5FD8 loc_2132:
-31E4:5FD8 FB sti ; Enable interrupts
-31E4:5FD9 8D 49 00 lea cx,[bx+di+0] ; Load effective addr
-31E4:5FDC 7B 0C jnp loc_2133 ; Jump if not parity
-31E4:5FDE 00 00 add [bx+si],al
-31E4:5FE0 02 1E 7A81 add bl,ds:data_54e ; (0000:7A81=0D1h)
-31E4:5FE4 01 A5 0008 add ds:data_4e[di],sp ; (0000:0008=30h)
-31E4:5FE8 00 02 add [bp+si],al
-31E4:5FEA loc_2133: ; xref 31E4:5FDC
-31E4:5FEA 8C 82 090B mov [bp+si+90Bh],es
-31E4:5FEE 0C 09 or al,9
-31E4:5FF0 00 00 add [bx+si],al
-31E4:5FF2 02 55 8C add dl,[di-74h]
-31E4:5FF5 7A 01 jp loc_2134 ; Jump if parity=1
-31E4:5FF7 54 push sp
-31E4:5FF8 loc_2134: ; xref 31E4:5FF5
-31E4:5FF8 09 00 or [bx+si],ax
-31E4:5FFA 00 02 add [bp+si],al
-31E4:5FFC E7 8C out 8Ch,ax ; port 8Ch ??I/O Non-standard
-31E4:5FFE 96 xchg si,ax
-31E4:5FFF 09 A6 000A or [bp+0Ah],sp
-31E4:6003 00 02 add [bp+si],al
-31E4:6005 2C 8D sub al,8Dh
-31E4:6007 96 xchg si,ax
-31E4:6008 09 A6 000A or [bp+0Ah],sp
-31E4:600C 00 02 add [bp+si],al
-31E4:600E C2 D482 retn 0D482h
- sub_272 endp
-
-31E4:6011 29 06 0C 00 00 04 db 29h, 06h, 0Ch, 00h, 00h, 04h
-31E4:6017 F8 82 D3 29 06 0C db 0F8h, 82h,0D3h, 29h, 06h, 0Ch
-31E4:601D 00 00 04 2E 83 D4 db 00h, 00h, 04h, 2Eh, 83h,0D4h
-31E4:6023 29 06 0C 00 00 04 db 29h, 06h, 0Ch, 00h, 00h, 04h
-31E4:6029 64 83 D3 29 06 0C db 64h, 83h,0D3h, 29h, 06h, 0Ch
-31E4:602F 00 00 04 9A 83 D4 db 00h, 00h, 04h, 9Ah, 83h,0D4h
-31E4:6035 29 06 0C 00 00 04 db 29h, 06h, 0Ch, 00h, 00h, 04h
-31E4:603B D0 83 D3 29 06 0C db 0D0h, 83h,0D3h, 29h, 06h, 0Ch
-31E4:6041 00 00 04 B5 8E 0D db 00h, 00h, 04h,0B5h, 8Eh, 0Dh
-31E4:6047 0A 93 0B 00 00 04 db 0Ah, 93h, 0Bh, 00h, 00h, 04h
-31E4:604D 02 98 00 00 00 00 db 02h, 98h, 00h, 00h, 00h, 00h
-31E4:6053 00 00 00 6B 81 7A db 00h, 00h, 00h, 6Bh, 81h, 7Ah
-31E4:6059 01 83 0A 00 00 02 db 01h, 83h, 0Ah, 00h, 00h, 02h
-31E4:605F 25 8F 49 00 DF 0F db 25h, 8Fh, 49h, 00h,0DFh, 0Fh
-31E4:6065 00 00 08 6A 8F 49 db 00h, 00h, 08h, 6Ah, 8Fh, 49h
-31E4:606B 00 DF 0F 00 00 08 db 00h,0DFh, 0Fh, 00h, 00h, 08h
-31E4:6071 AF 8F 00 00 00 00 db 0AFh, 8Fh, 00h, 00h, 00h, 00h
-31E4:6077 00 00 08 CB 95 E8 db 00h, 00h, 08h,0CBh, 95h,0E8h
-31E4:607D 0F E9 0F 00 00 08 db 0Fh,0E9h, 0Fh, 00h, 00h, 08h
-31E4:6083 F5 95 00 00 00 00 db 0F5h, 95h, 00h, 00h, 00h, 00h
-31E4:6089 00 00 08 1F 96 00 db 00h, 00h, 08h, 1Fh, 96h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 453
-
-31E4:608F 00 00 00 00 00 08 db 00h, 00h, 00h, 00h, 00h, 08h
-31E4:6095 54 96 EA 0F EB 0F db 54h, 96h,0EAh, 0Fh,0EBh, 0Fh
-31E4:609B 00 00 08 D8 97 00 db 00h, 00h, 08h,0D8h, 97h, 00h
-31E4:60A1 00 00 00 00 00 08 db 00h, 00h, 00h, 00h, 00h, 08h
-31E4:60A7 AD 96 db 0ADh, 96h
-31E4:60A9 0007[00] db 7 dup (0)
-31E4:60B0 D7 96 db 0D7h, 96h
-31E4:60B2 0007[00] db 7 dup (0)
-31E4:60B9 01 97 00 00 00 00 db 01h, 97h, 00h, 00h, 00h, 00h
-31E4:60BF 00 00 00 A2 8C 7A db 00h, 00h, 00h,0A2h, 8Ch, 7Ah
-31E4:60C5 01 0A 0C 00 00 02 db 01h, 0Ah, 0Ch, 00h, 00h, 02h
-31E4:60CB DA 8F 00 00 00 00 db 0DAh, 8Fh, 00h, 00h, 00h, 00h
-31E4:60D1 00 00 02 5A 97 db 00h, 00h, 02h, 5Ah, 97h
-31E4:60D6 0007[00] db 7 dup (0)
-31E4:60DD 84 97 00 00 00 00 db 84h, 97h, 00h, 00h, 00h, 00h
-31E4:60E3 00 00 00 AE 97 00 db 00h, 00h, 00h,0AEh, 97h, 00h
-31E4:60E9 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:60EF 05 90 00 00 00 00 db 05h, 90h, 00h, 00h, 00h, 00h
-31E4:60F5 00 00 08 30 90 00 db 00h, 00h, 08h, 30h, 90h, 00h
-31E4:60FB 00 00 00 00 00 08 db 00h, 00h, 00h, 00h, 00h, 08h
-31E4:6101 5B 90 00 00 00 00 db 5Bh, 90h, 00h, 00h, 00h, 00h
-31E4:6107 00 00 08 86 90 00 db 00h, 00h, 08h, 86h, 90h, 00h
-31E4:610D 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:6113 B1 90 00 00 00 00 db 0B1h, 90h, 00h, 00h, 00h, 00h
-31E4:6119 00 00 00 DC 90 db 00h, 00h, 00h,0DCh, 90h
-31E4:611E 0007[00] db 7 dup (0)
-31E4:6125 07 91 db 07h, 91h
-31E4:6127 0007[00] db 7 dup (0)
-31E4:612E 32 91 00 00 00 00 db 32h, 91h, 00h, 00h, 00h, 00h
-31E4:6134 00 00 00 5D 91 db 00h, 00h, 00h, 5Dh, 91h
-31E4:6139 0007[00] db 7 dup (0)
-31E4:6140 88 91 00 00 00 00 db 88h, 91h, 00h, 00h, 00h, 00h
-31E4:6146 00 00 00 B3 91 00 db 00h, 00h, 00h,0B3h, 91h, 00h
-31E4:614C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:6152 DE 91 db 0DEh, 91h
-31E4:6154 0007[00] db 7 dup (0)
-31E4:615B 09 92 00 00 00 00 db 09h, 92h, 00h, 00h, 00h, 00h
-31E4:6161 00 00 00 34 92 db 00h, 00h, 00h, 34h, 92h
-31E4:6166 0007[00] db 7 dup (0)
-31E4:616D 5F 92 db 5Fh, 92h
-31E4:616F 0007[00] db 7 dup (0)
-31E4:6176 8A 92 00 00 00 00 db 8Ah, 92h, 00h, 00h, 00h, 00h
-31E4:617C 00 00 00 61 93 db 00h, 00h, 00h, 61h, 93h
-31E4:6181 0007[00] db 7 dup (0)
-31E4:6188 B5 92 db 0B5h, 92h
-31E4:618A 0007[00] db 7 dup (0)
-31E4:6191 E0 92 db 0E0h, 92h
-31E4:6193 0007[00] db 7 dup (0)
-31E4:619A 0B 93 00 00 00 00 db 0Bh, 93h, 00h, 00h, 00h, 00h
-31E4:61A0 00 00 00 36 93 00 db 00h, 00h, 00h, 36h, 93h, 00h
-31E4:61A6 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:61AC 8C 93 00 00 00 00 db 8Ch, 93h, 00h, 00h, 00h, 00h
-31E4:61B2 00 00 00 B7 93 00 db 00h, 00h, 00h,0B7h, 93h, 00h
-31E4:61B8 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:61BE E2 93 db 0E2h, 93h
-31E4:61C0 0007[00] db 7 dup (0)
-31E4:61C7 0D 94 00 00 00 00 db 0Dh, 94h, 00h, 00h, 00h, 00h
-31E4:61CD 00 00 00 38 94 db 00h, 00h, 00h, 38h, 94h
-31E4:61D2 0007[00] db 7 dup (0)
-31E4:61D9 63 94 db 63h, 94h
-31E4:61DB 0007[00] db 7 dup (0)
-31E4:61E2 8E 94 00 00 00 00 db 8Eh, 94h, 00h, 00h, 00h, 00h
-31E4:61E8 00 00 00 B9 94 A7 db 00h, 00h, 00h,0B9h, 94h,0A7h
-31E4:61EE 0C A8 0C 00 00 00 db 0Ch,0A8h, 0Ch, 00h, 00h, 00h
-31E4:61F4 EC 94 A9 0C AA 0C db 0ECh, 94h,0A9h, 0Ch,0AAh, 0Ch
-31E4:61FA 00 00 02 17 95 db 00h, 00h, 02h, 17h, 95h
-31E4:61FF 0007[00] db 7 dup (0)
-31E4:6206 42 95 db 42h, 95h
-31E4:6208 0007[00] db 7 dup (0)
-31E4:620F 6D 95 db 6Dh, 95h
-31E4:6211 0010[00] db 16 dup (0)
-31E4:6221 98 95 db 98h, 95h
-31E4:6223 0007[00] db 7 dup (0)
-31E4:622A FA 8E 00 00 00 00 db 0FAh, 8Eh, 00h, 00h, 00h, 00h
-31E4:6230 00 00 00 D4 db 00h, 00h, 00h,0D4h
-31E4:6234 6A db 6Ah
-31E4:6235 0007[00] db 7 dup (0)
-31E4:623C FF FF db 0FFh,0FFh
-31E4:623E 39 hotspot_table_3 db 39h
-
-31E4:623F 84 6C 40 E7 00 DC db 84h, 6Ch, 40h,0E7h, 00h,0DCh
-31E4:6245 00 0F 38 87 6D 20 db 00h, 0Fh, 38h, 87h, 6Dh, 20h
-31E4:624B AD 00 00 00 01 70 db 0ADh, 00h, 00h, 00h, 01h, 70h
-31E4:6251 87 6D 20 E5 00 00 db 87h, 6Dh, 20h,0E5h, 00h, 00h
-31E4:6257 00 01 6E 84 90 40 db 00h, 01h, 6Eh, 84h, 90h, 40h
-31E4:625D E4 00 DD 00 0F AE db 0E4h, 00h,0DDh, 00h, 0Fh,0AEh
-31E4:6263 87 91 20 DB 00 00 db 87h, 91h, 20h,0DBh, 00h, 00h
-31E4:6269 00 01 E6 87 DD 47 db 00h, 01h,0E6h, 87h,0DDh, 47h
-31E4:626F 7B 08 00 00 02 1B db 7Bh, 08h, 00h, 00h, 02h, 1Bh
-31E4:6275 88 DD 47 7B 08 00 db 88h,0DDh, 47h, 7Bh, 08h, 00h
-31E4:627B 00 02 AE 88 DD 47 db 00h, 02h,0AEh, 88h,0DDh, 47h
-31E4:6281 31 08 00 00 02 D8 db 31h, 08h, 00h, 00h, 02h,0D8h
-31E4:6287 88 DD 47 7B 08 00 db 88h,0DDh, 47h, 7Bh, 08h, 00h
-31E4:628D 00 02 10 89 DD 47 db 00h, 02h, 10h, 89h,0DDh, 47h
-31E4:6293 7B 08 00 00 02 69 db 7Bh, 08h, 00h, 00h, 02h, 69h
-31E4:6299 8A DD 47 7B 08 00 db 8Ah,0DDh, 47h, 7Bh, 08h, 00h
-31E4:629F 00 02 98 84 49 41 db 00h, 02h, 98h, 84h, 49h, 41h
-31E4:62A5 5B 01 00 00 0F D9 db 5Bh, 01h, 00h, 00h, 0Fh,0D9h
-31E4:62AB 86 80 41 81 01 00 db 86h, 80h, 41h, 81h, 01h, 00h
-31E4:62B1 00 0F 0E 87 7D 41 db 00h, 0Fh, 0Eh, 87h, 7Dh, 41h
-31E4:62B7 62 01 00 00 0F A4 db 62h, 01h, 00h, 00h, 0Fh,0A4h
-31E4:62BD 8A DD 47 05 0C 00 db 8Ah,0DDh, 47h, 05h, 0Ch, 00h
-31E4:62C3 00 02 4B 89 DD 47 db 00h, 02h, 4Bh, 89h,0DDh, 47h
-31E4:62C9 7B 08 00 00 02 75 db 7Bh, 08h, 00h, 00h, 02h, 75h
-31E4:62CF 89 DD 47 7B 08 00 db 89h,0DDh, 47h, 7Bh, 08h, 00h
-31E4:62D5 00 02 B0 89 DD 47 db 00h, 02h,0B0h, 89h,0DDh, 47h
-31E4:62DB 7B 08 00 00 02 DA db 7Bh, 08h, 00h, 00h, 02h,0DAh
-31E4:62E1 89 DD 47 7B 08 00 db 89h,0DDh, 47h, 7Bh, 08h, 00h
-31E4:62E7 00 02 C7 84 F3 48 db 00h, 02h,0C7h, 84h,0F3h, 48h
-31E4:62ED F4 db 0F4h
-31E4:62EE loc_2135:
-31E4:62EE 08 00 or [bx+si],al
-31E4:62F0 00 0F add [bx],cl
-31E4:62F2 56 push si
-31E4:62F3 86 7B 41 xchg [bp+di+41h],bh
-31E4:62F6 7C 01 ;* jl loc_2136 ;*Jump if <
-31E4:62F6 7C 01 db 7Ch, 01h
-31E4:62F8 00 00 add [bx+si],al
-31E4:62FA 0F ;* pop cs ; Dangerous-8088 only
-31E4:62FA 0F db 0Fh
-31E4:62FB 15 DD8A adc ax,0DD8Ah
-31E4:62FE 47 inc di
-31E4:62FF 7B 08 ;* jnp loc_2137 ;*Jump if not parity
-31E4:62FF 7B 08 db 7Bh, 08h
-31E4:6301 00 00 add [bx+si],al
-31E4:6303 02 3F add bh,[bx]
-31E4:6305 8A DD mov bl,ch
-31E4:6307 47 inc di
-31E4:6308 7B 08 jnp loc_2138 ; Jump if not parity
-31E4:630A 00 00 add [bx+si],al
-31E4:630C 02 80 5086 add al,data_822[bx+si] ; (31E4:5086=5Ch)
-31E4:6310 41 inc cx
-31E4:6311 53 push bx
-31E4:6312 loc_2138: ; xref 31E4:6308
-31E4:6312 01 00 add [bx+si],ax
-31E4:6314 00 0F add [bx],cl
-31E4:6316 AF scasw ; Scan es:[di] for ax
-31E4:6317 86 51 41 xchg [bx+di+41h],dl
-31E4:631A 52 push dx
-31E4:631B 01 00 add [bx+si],ax
-31E4:631D 00 0F add [bx],cl
-31E4:631F CE into ; Int 4 on overflow
-31E4:6320 8A DD mov bl,ch
-31E4:6322 47 inc di
-31E4:6323 7B 08 jnp $+0Ah ; Jump if not parity
-31E4:6325 00 00 add [bx+si],al
-31E4:6327 04 09 add al,9
-31E4:6329 8B DD mov bx,bp
-31E4:632B 47 inc di
-31E4:632C 07 pop es
-31E4:632D 0C 00 or al,0
-31E4:632F 00 04 add [si],al
-31E4:6331 33 8B 47DD xor cx,[bp+di+47DDh]
-31E4:6335 07 pop es
-31E4:6336 0C 00 or al,0
-31E4:6338 00 04 add [si],al
-31E4:633A 5D pop bp
-31E4:633B 8B DD mov bx,bp
-31E4:633D 47 inc di
-31E4:633E 07 pop es
-31E4:633F 0C 00 or al,0
-31E4:6341 00 04 add [si],al
-31E4:6343 87 8B 47DD xchg [bp+di+47DDh],cx
-31E4:6347 07 pop es
-31E4:6348 0C 00 or al,0
-31E4:634A 00 04 add [si],al
-31E4:634C B1 8B mov cl,8Bh
-31E4:634E DD 47 07 fld qword ptr [bx+7] ; Push onto stack
-31E4:6351 0C 00 or al,0
-31E4:6353 00 04 add [si],al
-31E4:6355 DB 8B DD 47 07 0C db 0DBh, 8Bh,0DDh, 47h, 07h, 0Ch
-31E4:635B 00 00 04 F1 84 5D db 00h, 00h, 04h,0F1h, 84h, 5Dh
-31E4:6361 41 5E 01 00 00 0F db 41h, 5Eh, 01h, 00h, 00h, 0Fh
-31E4:6367 1B 85 4E 4B 4D 0B db 1Bh, 85h, 4Eh, 4Bh, 4Dh, 0Bh
-31E4:636D 00 00 0F 45 85 65 db 00h, 00h, 0Fh, 45h, 85h, 65h
-31E4:6373 0B 66 0B 00 00 0F db 0Bh, 66h, 0Bh, 00h, 00h, 0Fh
-31E4:6379 6F 85 67 0B 68 0B db 6Fh, 85h, 67h, 0Bh, 68h, 0Bh
-31E4:637F 00 00 0F 99 85 7E db 00h, 00h, 0Fh, 99h, 85h, 7Eh
-31E4:6385 41 7F 01 00 00 0F db 41h, 7Fh, 01h, 00h, 00h, 0Fh
-31E4:638B C8 85 FE 2F 15 10 db 0C8h, 85h,0FEh, 2Fh, 15h, 10h
-31E4:6391 14 10 0F F2 85 FF db 14h, 10h, 0Fh,0F2h, 85h,0FFh
-31E4:6397 2F 00 10 00 00 08 db 2Fh, 00h, 10h, 00h, 00h, 08h
-31E4:639D 27 86 6B 21 6C 01 db 27h, 86h, 6Bh, 21h, 6Ch, 01h
-31E4:63A3 00 00 0F 1C 86 74 db 00h, 00h, 0Fh, 1Ch, 86h, 74h
-31E4:63A9 81 75 01 00 00 0F db 81h, 75h, 01h, 00h, 00h, 0Fh
-31E4:63AF FF FF db 0FFh,0FFh
-
-31E4:63B1 A3 hotspot_table_4 db 0A3h
-
-31E4:63B2 6C 86 40 9A 00 00 db 6Ch, 86h, 40h, 9Ah, 00h, 00h
-31E4:63B8 00 01 6F 6C EA 40 db 00h, 01h, 6Fh, 6Ch,0EAh, 40h
-31E4:63BE EB 00 00 00 01 89 db 0EBh, 00h, 00h, 00h, 01h, 89h
-31E4:63C4 6C E8 40 E9 00 00 db 6Ch,0E8h, 40h,0E9h, 00h, 00h
-31E4:63CA 00 01 65 6C 04 41 db 00h, 01h, 65h, 6Ch, 04h, 41h
-31E4:63D0 05 01 00 00 01 56 db 05h, 01h, 00h, 00h, 01h, 56h
-31E4:63D6 6C 06 21 07 01 00 db 6Ch, 06h, 21h, 07h, 01h, 00h
-31E4:63DC 00 01 44 6C 1A 21 db 00h, 01h, 44h, 6Ch, 1Ah, 21h
-31E4:63E2 1B 01 00 00 01 35 db 1Bh, 01h, 00h, 00h, 01h, 35h
-31E4:63E8 6C 10 21 0D 01 00 db 6Ch, 10h, 21h, 0Dh, 01h, 00h
-31E4:63EE 00 01 26 6C 0F 21 db 00h, 01h, 26h, 6Ch, 0Fh, 21h
-31E4:63F4 0E 01 00 00 01 0D db 0Eh, 01h, 00h, 00h, 01h, 0Dh
-31E4:63FA 6C 24 21 25 01 00 db 6Ch, 24h, 21h, 25h, 01h, 00h
-31E4:6400 00 01 1C 6C 11 21 db 00h, 01h, 1Ch, 6Ch, 11h, 21h
-31E4:6406 12 01 00 00 01 FB db 12h, 01h, 00h, 00h, 01h,0FBh
-31E4:640C 6B 21 21 22 01 00 db 6Bh, 21h, 21h, 22h, 01h, 00h
-31E4:6412 00 01 E9 6B EC 27 db 00h, 01h,0E9h, 6Bh,0ECh, 27h
-31E4:6418 ED 07 00 00 02 D7 db 0EDh, 07h, 00h, 00h, 02h,0D7h
-31E4:641E 6B 33 48 32 08 00 db 6Bh, 33h, 48h, 32h, 08h, 00h
-31E4:6424 00 02 C4 6B EA 40 db 00h, 02h,0C4h, 6Bh,0EAh, 40h
-31E4:642A 61 08 00 00 02 BA db 61h, 08h, 00h, 00h, 02h,0BAh
-31E4:6430 6B 2F 08 2D 08 00 db 6Bh, 2Fh, 08h, 2Dh, 08h, 00h
-31E4:6436 00 02 B0 6B 2F 08 db 00h, 02h,0B0h, 6Bh, 2Fh, 08h
-31E4:643C 74 08 00 00 02 A6 db 74h, 08h, 00h, 00h, 02h,0A6h
-31E4:6442 6B 71 48 7E 08 00 db 6Bh, 71h, 48h, 7Eh, 08h, 00h
-31E4:6448 00 02 A6 6B 71 08 db 00h, 02h,0A6h, 6Bh, 71h, 08h
-31E4:644E 7E 08 00 00 02 9C db 7Eh, 08h, 00h, 00h, 02h, 9Ch
-31E4:6454 6B 7F 08 68 08 00 db 6Bh, 7Fh, 08h, 68h, 08h, 00h
-31E4:645A 00 02 88 6B 7F 08 db 00h, 02h, 88h, 6Bh, 7Fh, 08h
-31E4:6460 82 08 00 00 02 92 db 82h, 08h, 00h, 00h, 02h, 92h
-31E4:6466 6B 83 08 6E 08 00 db 6Bh, 83h, 08h, 6Eh, 08h, 00h
-31E4:646C 00 02 7E 6B 71 08 db 00h, 02h, 7Eh, 6Bh, 71h, 08h
-31E4:6472 85 08 00 00 02 74 db 85h, 08h, 00h, 00h, 02h, 74h
-31E4:6478 6B 83 08 87 08 00 db 6Bh, 83h, 08h, 87h, 08h, 00h
-31E4:647E 00 02 6A 6B 83 08 db 00h, 02h, 6Ah, 6Bh, 83h, 08h
-31E4:6484 89 08 00 00 02 60 db 89h, 08h, 00h, 00h, 02h, 60h
-31E4:648A 6B 30 08 65 08 00 db 6Bh, 30h, 08h, 65h, 08h, 00h
-31E4:6490 00 02 56 6B 30 08 db 00h, 02h, 56h, 6Bh, 30h, 08h
-31E4:6496 2E 08 00 00 02 db 2Eh, 08h, 00h, 00h, 02h
-31E4:649B 4C 6B db 4Ch, 6Bh
-31E4:649D 0009[00] db 9 dup (0)
-31E4:64A6 C8 09 C9 09 00 00 db 0C8h, 09h,0C9h, 09h, 00h, 00h
-31E4:64AC 00 B4 6C 2F 08 FB db 00h,0B4h, 6Ch, 2Fh, 08h,0FBh
-31E4:64B2 0B 00 00 02 14 6B db 0Bh, 00h, 00h, 02h, 14h, 6Bh
-31E4:64B8 E0 4F E3 0F 00 00 db 0E0h, 4Fh,0E3h, 0Fh, 00h, 00h
-31E4:64BE 08 3D 6B E1 0F E2 db 08h, 3Dh, 6Bh,0E1h, 0Fh,0E2h
-31E4:64C4 0F 00 00 08 29 6B db 0Fh, 00h, 00h, 08h, 29h, 6Bh
-31E4:64CA E1 0F E6 0F 00 00 db 0E1h, 0Fh,0E6h, 0Fh, 00h, 00h
-31E4:64D0 08 29 6B E1 0F E6 db 08h, 29h, 6Bh,0E1h, 0Fh,0E6h
-31E4:64D6 0F 00 00 08 29 6B db 0Fh, 00h, 00h, 08h, 29h, 6Bh
-31E4:64DC E1 0F E6 0F 00 00 db 0E1h, 0Fh,0E6h, 0Fh, 00h, 00h
-31E4:64E2 08 29 6B E1 0F E6 db 08h, 29h, 6Bh,0E1h, 0Fh,0E6h
-31E4:64E8 0F 00 00 08 29 6B db 0Fh, 00h, 00h, 08h, 29h, 6Bh
-31E4:64EE E1 0F E6 0F 00 00 db 0E1h, 0Fh,0E6h, 0Fh, 00h, 00h
-31E4:64F4 08 33 6B E1 0F E6 db 08h, 33h, 6Bh,0E1h, 0Fh,0E6h
-31E4:64FA 0F 00 00 08 33 6B db 0Fh, 00h, 00h, 08h, 33h, 6Bh
-31E4:6500 E1 0F E6 0F 00 00 db 0E1h, 0Fh,0E6h, 0Fh, 00h, 00h
-31E4:6506 08 33 6B E1 0F E6 db 08h, 33h, 6Bh,0E1h, 0Fh,0E6h
-31E4:650C 0F 00 00 08 A4 6A db 0Fh, 00h, 00h, 08h,0A4h, 6Ah
-31E4:6512 DD 47 7B 08 00 00 db 0DDh, 47h, 7Bh, 08h, 00h, 00h
-31E4:6518 01 C2 6A A7 0B A3 db 01h,0C2h, 6Ah,0A7h, 0Bh,0A3h
-31E4:651E loc_2139:
-31E4:651E 0B 00 or ax,[bx+si]
-31E4:6520 00 02 add [bp+si],al
-31E4:6522 C2 A76A retn 0A76Ah
- ;* No entry point to code
-31E4:6525 0B A4 000B or sp,word ptr copyright+0Bh[si] ; (31E4:000B=7665h)
-31E4:6529 00 02 add [bp+si],al
-31E4:652B B8 A86A mov ax,0A86Ah
-31E4:652E 0B A5 000B or sp,word ptr copyright+0Bh[di] ; (31E4:000B=7665h)
-31E4:6532 00 02 add [bp+si],al
-31E4:6534 B8 A86A mov ax,0A86Ah
-31E4:6537 0B A6 000B or sp,[bp+0Bh]
-31E4:653B 00 02 add [bp+si],al
-31E4:653D AE scasb ; Scan es:[di] for al
-31E4:653E 6A 83 08 FF 0B 00 db 6Ah, 83h, 08h,0FFh, 0Bh, 00h
-31E4:6544 00 00 9A 6A DD 47 db 00h, 00h, 9Ah, 6Ah,0DDh, 47h
-31E4:654A 7B 08 00 00 00 7F db 7Bh, 08h, 00h, 00h, 00h, 7Fh
-31E4:6550 6A 85 40 AE 00 00 db 6Ah, 85h, 40h,0AEh, 00h, 00h
-31E4:6556 00 01 70 6A 54 0C db 00h, 01h, 70h, 6Ah, 54h, 0Ch
-31E4:655C 55 0C 00 00 02 5E db 55h, 0Ch, 00h, 00h, 02h, 5Eh
-31E4:6562 6A 58 0C 79 0C 00 db 6Ah, 58h, 0Ch, 79h, 0Ch, 00h
-31E4:6568 00 02 54 6A EE 40 db 00h, 02h, 54h, 6Ah,0EEh, 40h
-31E4:656E 61 0C 00 00 02 54 db 61h, 0Ch, 00h, 00h, 02h, 54h
-31E4:6574 6A 7D 0C 60 0C 00 db 6Ah, 7Dh, 0Ch, 60h, 0Ch, 00h
-31E4:657A 00 02 54 6A 7E 0C db 00h, 02h, 54h, 6Ah, 7Eh, 0Ch
-31E4:6580 5F 0C 00 00 02 54 db 5Fh, 0Ch, 00h, 00h, 02h, 54h
-31E4:6586 6A 7F 0C 5E 0C 00 db 6Ah, 7Fh, 0Ch, 5Eh, 0Ch, 00h
-31E4:658C 00 02 54 6A 80 0C db 00h, 02h, 54h, 6Ah, 80h, 0Ch
-31E4:6592 5C 0C 00 00 02 45 db 5Ch, 0Ch, 00h, 00h, 02h, 45h
-31E4:6598 6A FC 0F FD 0F 00 db 6Ah,0FCh, 0Fh,0FDh, 0Fh, 00h
-31E4:659E 00 08 3B 6A 02 30 db 00h, 08h, 3Bh, 6Ah, 02h, 30h
-31E4:65A4 03 10 00 00 08 31 db 03h, 10h, 00h, 00h, 08h, 31h
-31E4:65AA 6A 04 30 05 10 00 db 6Ah, 04h, 30h, 05h, 10h, 00h
-31E4:65B0 00 08 27 6A 90 20 db 00h, 08h, 27h, 6Ah, 90h, 20h
-31E4:65B6 06 10 00 00 08 27 db 06h, 10h, 00h, 00h, 08h, 27h
-31E4:65BC 6A 07 10 08 10 00 db 6Ah, 07h, 10h, 08h, 10h, 00h
-31E4:65C2 00 08 27 6A 09 10 db 00h, 08h, 27h, 6Ah, 09h, 10h
-31E4:65C8 0A 10 00 00 08 27 db 0Ah, 10h, 00h, 00h, 08h, 27h
-31E4:65CE 6A 0B 10 0C 10 00 db 6Ah, 0Bh, 10h, 0Ch, 10h, 00h
-31E4:65D4 00 08 27 6A 0D 10 db 00h, 08h, 27h, 6Ah, 0Dh, 10h
-31E4:65DA 0E 10 00 00 02 13 db 0Eh, 10h, 00h, 00h, 02h, 13h
-31E4:65E0 6A 19 10 1A 10 00 db 6Ah, 19h, 10h, 1Ah, 10h, 00h
-31E4:65E6 00 08 1D 6A F3 08 db 00h, 08h, 1Dh, 6Ah,0F3h, 08h
-31E4:65EC B8 0C 00 00 02 FF db 0B8h, 0Ch, 00h, 00h, 02h,0FFh
-31E4:65F2 FF db 0FFh
- player_action_support_record:
-31E4:65F3 03E0[00] db 992 dup (0)
-
-31E4:69D3 20 00 db 20h, 00h
-31E4:69D5 0042[00] db 66 dup (0)
-31E4:6A17 57 6D 2D 00 00 00 db 57h, 6Dh, 2Dh, 00h, 00h, 00h
-31E4:6A1D 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6A23 24 00 00 00 00 00 db 24h, 00h, 00h, 00h, 00h, 00h
-31E4:6A29 00 00 57 6D 2B 00 db 00h, 00h, 57h, 6Dh, 2Bh, 00h
-31E4:6A2F 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:6A35 57 6D 2B 00 00 00 db 57h, 6Dh, 2Bh, 00h, 00h, 00h
-31E4:6A3B 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6A41 2B 00 00 00 00 00 db 2Bh, 00h, 00h, 00h, 00h, 00h
-31E4:6A47 00 00 4F 6A 2B 00 db 00h, 00h, 4Fh, 6Ah, 2Bh, 00h
-31E4:6A4D 00 00 01 00 10 BD db 00h, 00h, 01h, 00h, 10h,0BDh
-31E4:6A53 12 00 00 00 00 57 db 12h, 00h, 00h, 00h, 00h, 57h
-31E4:6A59 6D 22 00 00 00 00 db 6Dh, 22h, 00h, 00h, 00h, 00h
-31E4:6A5F 00 00 00 57 6D 09 db 00h, 00h, 00h, 57h, 6Dh, 09h
-31E4:6A65 00 00 00 02 00 01 db 00h, 00h, 00h, 02h, 00h, 01h
-31E4:6A6B 0B 80 10 2F 0E 01 db 0Bh, 80h, 10h, 2Fh, 0Eh, 01h
-31E4:6A71 02 00 00 68 6A 1E db 02h, 00h, 00h, 68h, 6Ah, 1Eh
-31E4:6A77 00 01 00 01 00 11 db 00h, 01h, 00h, 01h, 00h, 11h
-31E4:6A7D 1F 02 00 00 01 00 db 1Fh, 02h, 00h, 00h, 01h, 00h
-31E4:6A83 7A 6A 01 00 03 00 db 7Ah, 6Ah, 01h, 00h, 03h, 00h
-31E4:6A89 05 00 01 10 80 06 db 05h, 00h, 01h, 10h, 80h, 06h
-31E4:6A8F 06 80 07 07 00 08 db 06h, 80h, 07h, 07h, 00h, 08h
-31E4:6A95 36 09 09 36 09 E1 db 36h, 09h, 09h, 36h, 09h,0E1h
-31E4:6A9B 03 00 00 89 6A 0C db 03h, 00h, 00h, 89h, 6Ah, 0Ch
-31E4:6AA1 00 00 00 E0 01 00 db 00h, 00h, 00h,0E0h, 01h, 00h
-31E4:6AA7 00 89 6A 04 db 00h, 89h, 6Ah, 04h
-31E4:6AAB 0007[00] db 7 dup (0)
-31E4:6AB2 57 6D 0C 00 00 00 db 57h, 6Dh, 0Ch, 00h, 00h, 00h
-31E4:6AB8 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6ABE 23 00 00 00 00 00 db 23h, 00h, 00h, 00h, 00h, 00h
-31E4:6AC4 00 00 57 6D 13 00 db 00h, 00h, 57h, 6Dh, 13h, 00h
-31E4:6ACA 00 00 02 00 0A 66 db 00h, 00h, 02h, 00h, 0Ah, 66h
-31E4:6AD0 12 01 0B 80 db 12h, 01h, 0Bh, 80h
-
-; Hotspot entry 46Bh contains a loading routine offset for the copy protection check
-
-31E4:6AD4 39 41 00 00 CC 6A db 39h, 41h, 00h, 00h, 0cch, 6ah
-31E4:6ADA FF FF 00 db 0FFh,0FFh, 00h
-31E4:6ADD 3AFE dw offset copy_protection_check
-31E4:6ADF 00 00 64 db 00h, 00h, 64h
-31E4:6AE2 00 64 00 10 00 01 db 00h, 64h, 00h, 10h, 00h, 01h
-31E4:6AE8 00 03 01 02 00 40 db 00h, 03h, 01h, 02h, 00h, 40h
-31E4:6AEE CC 6A 02 00 00 72 db 0CCh, 6Ah, 02h, 00h, 00h, 72h
-31E4:6AF4 71 00 00 64 00 64 db 71h, 00h, 00h, 64h, 00h, 64h
-31E4:6AFA 00 10 00 01 00 03 db 00h, 10h, 00h, 01h, 00h, 03h
-31E4:6B00 00 BD 41 02 00 02 db 00h,0BDh, 41h, 02h, 00h, 02h
-31E4:6B06 00 02 00 00 00 A9 db 00h, 02h, 00h, 00h, 00h,0A9h
-31E4:6B0C 58 00 00 00 00 00 db 58h, 00h, 00h, 00h, 00h, 00h
-31E4:6B12 00 00 09 02 00 40 db 00h, 00h, 09h, 02h, 00h, 40h
-31E4:6B18 1E 6B 2A 00 02 00 db 1Eh, 6Bh, 2Ah, 00h, 02h, 00h
-31E4:6B1E 03 00 0A 50 04 04 db 03h, 00h, 0Ah, 50h, 04h, 04h
-31E4:6B24 30 04 01 30 04 00 db 30h, 04h, 01h, 30h, 04h, 00h
-31E4:6B2A 00 00 00 57 6D 2A db 00h, 00h, 00h, 57h, 6Dh, 2Ah
-31E4:6B30 00 02 00 00 00 00 db 00h, 02h, 00h, 00h, 00h, 00h
-31E4:6B36 00 57 6D 2A 00 03 db 00h, 57h, 6Dh, 2Ah, 00h, 03h
-31E4:6B3C 00 00 00 00 00 47 db 00h, 00h, 00h, 00h, 00h, 47h
-31E4:6B42 6B 2A 00 02 00 01 db 6Bh, 2Ah, 00h, 02h, 00h, 01h
-31E4:6B48 00 10 B6 12 00 00 db 00h, 10h,0B6h, 12h, 00h, 00h
-31E4:6B4E 00 00 57 6D 22 00 db 00h, 00h, 57h, 6Dh, 22h, 00h
-31E4:6B54 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-31E4:6B5A 57 6D 0A 00 03 00 db 57h, 6Dh, 0Ah, 00h, 03h, 00h
-31E4:6B60 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6B66 0C 00 00 00 00 00 db 0Ch, 00h, 00h, 00h, 00h, 00h
-31E4:6B6C 00 00 57 6D 1D 00 db 00h, 00h, 57h, 6Dh, 1Dh, 00h
-31E4:6B72 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:6B78 57 6D 1C 00 00 00 db 57h, 6Dh, 1Ch, 00h, 00h, 00h
-31E4:6B7E 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6B84 14 00 00 00 00 00 db 14h, 00h, 00h, 00h, 00h, 00h
-31E4:6B8A 00 00 57 6D 11 00 db 00h, 00h, 57h, 6Dh, 11h, 00h
-31E4:6B90 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:6B96 57 6D 11 00 00 00 db 57h, 6Dh, 11h, 00h, 00h, 00h
-31E4:6B9C 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6BA2 0E db 0Eh
-31E4:6BA3 0007[00] db 7 dup (0)
-31E4:6BAA 57 6D 09 00 00 00 db 57h, 6Dh, 09h, 00h, 00h, 00h
-31E4:6BB0 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:6BB6 13 00 00 00 00 00 db 13h, 00h, 00h, 00h, 00h, 00h
-31E4:6BBC 00 00 57 6D 0A 00 db 00h, 00h, 57h, 6Dh, 0Ah, 00h
-31E4:6BC2 00 00 00 02 00 50 db 00h, 00h, 00h, 02h, 00h, 50h
-31E4:6BC8 CE 6B 1E 00 01 00 db 0CEh, 6Bh, 1Eh, 00h, 01h, 00h
-31E4:6BCE 02 00 0A 4F 0B 01 db 02h, 00h, 0Ah, 4Fh, 0Bh, 01h
-31E4:6BD4 00 0B 80 01 02 00 db 00h, 0Bh, 80h, 01h, 02h, 00h
-31E4:6BDA 40 E1 6B 13 00 00 db 40h,0E1h, 6Bh, 13h, 00h, 00h
-31E4:6BE0 00 02 00 0A 81 09 db 00h, 02h, 00h, 0Ah, 81h, 09h
-31E4:6BE6 01 0B 80 01 02 00 db 01h, 0Bh, 80h, 01h, 02h, 00h
-31E4:6BEC 00 F3 6B 1C 00 01 db 00h,0F3h, 6Bh, 1Ch, 00h, 01h
-31E4:6BF2 00 02 00 01 50 0D db 00h, 02h, 00h, 01h, 50h, 0Dh
-31E4:6BF8 05 FB 08 10 00 00 db 05h,0FBh, 08h, 10h, 00h, 00h
-31E4:6BFE 00 05 db 00h, 05h
-31E4:6C00 6C data_891 db 6Ch
-31E4:6C01 04 00 03 00 02 00 db 04h, 00h, 03h, 00h, 02h, 00h
-31E4:6C07 01 12 80 05 21 80 db 01h, 12h, 80h, 05h, 21h, 80h
-31E4:6C0D 01 02 00 00 17 6C db 01h, 02h, 00h, 00h, 17h, 6Ch
-31E4:6C13 01 00 00 00 01 00 db 01h, 00h, 00h, 00h, 01h, 00h
-31E4:6C19 01 1F 80 00 00 00 db 01h, 1Fh, 80h, 00h, 00h, 00h
-31E4:6C1F 00 57 6D 03 00 01 db 00h, 57h, 6Dh, 03h, 00h, 01h
-31E4:6C25 00 00 00 00 00 30 db 00h, 00h, 00h, 00h, 00h, 30h
-31E4:6C2B 6C 03 00 00 00 01 db 6Ch, 03h, 00h, 00h, 00h, 01h
-31E4:6C31 00 01 19 80 00 00 db 00h, 01h, 19h, 80h, 00h, 00h
-31E4:6C37 00 00 3F 6C 03 00 db 00h, 00h, 3Fh, 6Ch, 03h, 00h
-31E4:6C3D 03 00 01 00 01 19 db 03h, 00h, 01h, 00h, 01h, 19h
-31E4:6C43 80 01 02 00 00 4E db 80h, 01h, 02h, 00h, 00h, 4Eh
-31E4:6C49 6C 04 00 01 00 02 db 6Ch, 04h, 00h, 01h, 00h, 02h
-31E4:6C4F 00 0A AD 07 01 0B db 00h, 0Ah,0ADh, 07h, 01h, 0Bh
-31E4:6C55 80 00 00 00 00 60 db 80h, 00h, 00h, 00h, 00h, 60h
-31E4:6C5B 6C 03 00 00 00 01 db 6Ch, 03h, 00h, 00h, 00h, 01h
-31E4:6C61 00 01 12 80 00 00 db 00h, 01h, 12h, 80h, 00h, 00h
-31E4:6C67 00 00 4E 6C 02 00 db 00h, 00h, 4Eh, 6Ch, 02h, 00h
-31E4:6C6D 00 00 70 02 00 40 db 00h, 00h, 70h, 02h, 00h, 40h
-31E4:6C73 78 6C 03 00 00 05 db 78h, 6Ch, 03h, 00h, 00h, 05h
-31E4:6C79 00 06 41 2C 05 41 db 00h, 06h, 41h, 2Ch, 05h, 41h
-31E4:6C7F 2C 07 03 80 0A F8 db 2Ch, 07h, 03h, 80h, 0Ah,0F8h
-31E4:6C85 07 01 0B 80 2D 02 db 07h, 01h, 0Bh, 80h, 2Dh, 02h
-31E4:6C8B 00 00 92 6C 03 00 db 00h, 00h, 92h, 6Ch, 03h, 00h
-31E4:6C91 00 05 00 01 10 80 db 00h, 05h, 00h, 01h, 10h, 80h
-31E4:6C97 04 13 80 03 13 80 db 04h, 13h, 80h, 03h, 13h, 80h
-31E4:6C9D 06 14 80 10 AF 12 db 06h, 14h, 80h, 10h,0AFh, 12h
-
-31E4:6CA3 00 00 01 00 AC 6C db 00h, 00h, 01h, 00h,0ACh, 6Ch
-31E4:6CA9 03 00 00 02 00 01 db 03h, 00h, 00h, 02h, 00h, 01h
-31E4:6CAF 0B 80 11 21 05 00 db 0Bh, 80h, 11h, 21h, 05h, 00h
-31E4:6CB5 00 01 00 BD 6C 13 db 00h, 01h, 00h,0BDh, 6Ch, 13h
-31E4:6CBB 00 00 01 00 11 3C db 00h, 00h, 01h, 00h, 11h, 3Ch
-31E4:6CC1 02 40 04 db 02h, 40h, 04h
-31E4:6CC4 0020[00] db 32 dup (0)
-31E4:6CE4 0001 data_893 dw 1
-31E4:6CE6 0009[00] db 9 dup (0)
-
-; This is the hotspot resource that represents the player character, and is returned
-; when a call to get_room_resource_pointer is done with id = 3e8h
-
-31E4:6CEF 00 player_hotspot_rec db 0
-31E4:6CF0 00 00 40 57 6D db 00h, 00h, 40h, 57h, 6Dh
-31E4:6CF5 0001 player_room_number dw 1
-31E4:6CF7 00 67 71 db 00h, 67h, 71h
-31E4:6CFA 0000 data_897 dw 0
-31E4:6CFC 0110 data_898 dw 110h
-31E4:6CFE 00FA data_899 dw 0FAh
-31E4:6D00 20 00 30 00 01 01 db 20h, 00h, 30h, 00h, 01h, 01h
-31E4:6D06 5E44 player_tick_handler dw offset player_tick_proc
-31E4:6D08 20 00 30 00 08 00 db 20h, 00h, 30h, 00h, 08h, 00h
-31E4:6D0E 00 00 80 5C 80 00 db 00h, 00h, 80h, 5Ch, 80h, 00h
-31E4:6D14 0010[00] db 16 dup (0)
-31E4:6D24 F8 04 00 db 0F8h, 04h, 00h
-31E4:6D27 0022[00] db 34 dup (0)
-
-....
-31E4:6D31 0000 dw 0
-31E4:6D33 00 db 0
-....
-31E4:6D49 73 66 db 73h, 66h
-31E4:6D4B 0007[00] db 7 dup (0)
-31E4:6D52 00 player_action_state db 0
-31E4:6D53 F3 65 00 00 00 00 db 0F3h, 65h, 00h, 00h, 00h, 00h
-31E4:6D59 04 00 0B 88 17 12 db 04h, 00h, 0Bh, 88h, 17h, 12h
-31E4:6D5F 8C 1B 0D B0 1C 0C db 8Ch, 1Bh, 0Dh,0B0h, 1Ch, 0Ch
-31E4:6D65 43 15 db 43h, 15h
-
-31E4:6D67 00 0C 82 00 skorl_hotspot_rec db 00h, 0Ch, 82h, 00h
-31E4:6D6B 59 6D 03 00 00 67 db 59h, 6Dh, 03h, 00h, 00h, 67h
-31E4:6D71 71 00 00 32 01 E8 db 71h, 00h, 00h, 32h, 01h,0E8h
-31E4:6D77 00 20 00 30 00 01 db 00h, 20h, 00h, 30h, 00h, 01h
-31E4:6D7D 01 FA 7E 20 00 30 db 01h,0FAh, 7Eh, 20h, 00h, 30h
-31E4:6D83 00 08 00 00 00 BF db 00h, 08h, 00h, 00h, 00h,0BFh
-31E4:6D89 5C 9E db 5Ch, 9Eh
-31E4:6D8B 0009[00] db 9 dup (0)
-31E4:6D94 C2 15 00 00 2C 01 db 0C2h, 15h, 00h, 00h, 2Ch, 01h
-31E4:6D9A 00 00 00 04 00 db 00h, 00h, 00h, 04h, 00h
-31E4:6D9F 000D[00] db 13 dup (0)
-31E4:6DAC C2 14 00 db 0C2h, 14h, 00h
-31E4:6DAF 0012[00] db 18 dup (0)
-31E4:6DC1 F3 66 db 0F3h, 66h
-31E4:6DC3 0007[00] db 7 dup (0)
-31E4:6DCA 02 B7 35 03 db 02h,0B7h, 35h, 03h
-31E4:6DCE 0010[00] db 16 dup (0)
-31E4:6DDE 02 00 0B 88 17 12 db 02h, 00h, 0Bh, 88h, 17h, 12h
-31E4:6DE4 8C 1B db 8Ch, 1Bh
-
- village_skorl_hotspot_rec:
-31E4:6DE6 00 0C 82 00 db 00h, 0Ch, 82h, 00h
-31E4:6DEA DE 6D 13 00 00 67 db 0DEh, 6Dh, 13h, 00h, 00h, 67h
-31E4:6DF0 71 00 00 39 01 F3 db 71h, 00h, 00h, 39h, 01h,0F3h
-31E4:6DF6 00 20 00 30 00 01 db 00h, 20h, 00h, 30h, 00h, 01h
-31E4:6DFC 01 82 4F 20 00 30 db 01h, 82h, 4Fh, 20h, 00h, 30h
-31E4:6E02 00 08 00 00 00 BF db 00h, 08h, 00h, 00h, 00h,0BFh
-31E4:6E08 5C 9E db 5Ch, 9Eh
-31E4:6E0A 0009[00] db 9 dup (0)
-31E4:6E13 15 15 00 00 64 00 db 15h, 15h, 00h, 00h, 64h, 00h
-31E4:6E19 00 00 00 04 28 00 db 00h, 00h, 00h, 04h, 28h, 00h
-31E4:6E1F 00 00 00 50 0B db 00h, 00h, 00h, 50h, 0Bh
-31E4:6E24 0007[00] db 7 dup (0)
-31E4:6E2B D9 14 db 0D9h, 14h
-31E4:6E2D 0013[00] db 19 dup (0)
-31E4:6E40 33 69 00 00 00 00 db 33h, 69h, 00h, 00h, 00h, 00h
-31E4:6E46 00 00 00 02 5D 6E db 00h, 00h, 00h, 02h, 5Dh, 6Eh
-31E4:6E4C 13 00 db 13h, 00h
-31E4:6E4E 000F[00] db 15 dup (0)
-31E4:6E5D 1C 00 13 00 00 00 db 1Ch, 00h, 13h, 00h, 00h, 00h
-31E4:6E63 23 00 D1 1D FB 6E db 23h, 00h,0D1h, 1Dh,0FBh, 6Eh
-31E4:6E69 21 00 4C 75 1F 00 db 21h, 00h, 4Ch, 75h, 1Fh, 00h
-31E4:6E6F 23 00 E2 1D FB 6E db 23h, 00h,0E2h, 1Dh,0FBh, 6Eh
-31E4:6E75 1C 00 23 00 FB 6E db 1Ch, 00h, 23h, 00h,0FBh, 6Eh
-31E4:6E7B 24 00 36 04 FB 6E db 24h, 00h, 36h, 04h,0FBh, 6Eh
-31E4:6E81 23 00 E2 1D EF 6E db 23h, 00h,0E2h, 1Dh,0EFh, 6Eh
-31E4:6E87 1E 00 B9 2A 25 00 db 1Eh, 00h,0B9h, 2Ah, 25h, 00h
-31E4:6E8D 36 04 AF 0A 00 00 db 36h, 04h,0AFh, 0Ah, 00h, 00h
-31E4:6E93 B0 0A 11 00 23 00 db 0B0h, 0Ah, 11h, 00h, 23h, 00h
-31E4:6E99 E2 1D EF 6E 25 00 db 0E2h, 1Dh,0EFh, 6Eh, 25h, 00h
-31E4:6E9F 36 04 B1 0A 11 00 db 36h, 04h,0B1h, 0Ah, 11h, 00h
-31E4:6EA5 B2 0A 1E 00 23 00 db 0B2h, 0Ah, 1Eh, 00h, 23h, 00h
-31E4:6EAB E2 1D EF 6E 25 00 db 0E2h, 1Dh,0EFh, 6Eh, 25h, 00h
-31E4:6EB1 36 04 B3 0A 50 00 db 36h, 04h,0B3h, 0Ah, 50h, 00h
-31E4:6EB7 B4 0A 0A 00 23 00 db 0B4h, 0Ah, 0Ah, 00h, 23h, 00h
-31E4:6EBD E2 1D EF 6E 25 00 db 0E2h, 1Dh,0EFh, 6Eh, 25h, 00h
-31E4:6EC3 36 04 B5 0A 00 00 db 36h, 04h,0B5h, 0Ah, 00h, 00h
-31E4:6EC9 B6 0A 37 00 23 00 db 0B6h, 0Ah, 37h, 00h, 23h, 00h
-31E4:6ECF E2 1D EF 6E 25 00 db 0E2h, 1Dh,0EFh, 6Eh, 25h, 00h
-31E4:6ED5 36 04 B7 0A 14 00 db 36h, 04h,0B7h, 0Ah, 14h, 00h
-31E4:6EDB B8 0A 32 00 1F 00 db 0B8h, 0Ah, 32h, 00h, 1Fh, 00h
-31E4:6EE1 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:6EE7 28 00 BE 87 22 00 db 28h, 00h,0BEh, 87h, 22h, 00h
-31E4:6EED FB 6E 25 00 36 04 db 0FBh, 6Eh, 25h, 00h, 36h, 04h
-31E4:6EF3 AD 0A 00 00 AE 0A db 0ADh, 0Ah, 00h, 00h,0AEh, 0Ah
-31E4:6EF9 00 00 1E 00 C0 2A db 00h, 00h, 1Eh, 00h,0C0h, 2Ah
-31E4:6EFF 1C 00 12 00 00 00 db 1Ch, 00h, 12h, 00h, 00h, 00h
-31E4:6F05 1C 00 16 00 00 00 db 1Ch, 00h, 16h, 00h, 00h, 00h
-31E4:6F0B 1C 00 13 00 00 00 db 1Ch, 00h, 13h, 00h, 00h, 00h
-31E4:6F11 23 00 7D 1E 2B 6F db 23h, 00h, 7Dh, 1Eh, 2Bh, 6Fh
-31E4:6F17 1C 00 1E 00 00 00 db 1Ch, 00h, 1Eh, 00h, 00h, 00h
-31E4:6F1D 1E 00 8A 1E 1C 00 db 1Eh, 00h, 8Ah, 1Eh, 1Ch, 00h
-31E4:6F23 13 00 00 00 07 00 db 13h, 00h, 00h, 00h, 07h, 00h
-31E4:6F29 17 27 1C 00 14 00 db 17h, 27h, 1Ch, 00h, 14h, 00h
-31E4:6F2F 00 00 1C 00 1B 00 db 00h, 00h, 1Ch, 00h, 1Bh, 00h
-31E4:6F35 00 00 1C 00 09 00 db 00h, 00h, 1Ch, 00h, 09h, 00h
-31E4:6F3B 00 00 20 00 1C 00 db 00h, 00h, 20h, 00h, 1Ch, 00h
-31E4:6F41 20 00 C3 6F 24 00 db 20h, 00h,0C3h, 6Fh, 24h, 00h
-31E4:6F47 29 04 C3 6F 1E 00 db 29h, 04h,0C3h, 6Fh, 1Eh, 00h
-31E4:6F4D F4 1E 25 00 29 04 db 0F4h, 1Eh, 25h, 00h, 29h, 04h
-31E4:6F53 F2 0A 00 00 AB 0C db 0F2h, 0Ah, 00h, 00h,0ABh, 0Ch
-31E4:6F59 00 00 25 00 29 04 db 00h, 00h, 25h, 00h, 29h, 04h
-31E4:6F5F F4 0A 00 00 F5 0A db 0F4h, 0Ah, 00h, 00h,0F5h, 0Ah
-31E4:6F65 00 00 25 00 29 04 db 00h, 00h, 25h, 00h, 29h, 04h
-31E4:6F6B F6 0A 00 00 00 00 db 0F6h, 0Ah, 00h, 00h, 00h, 00h
-31E4:6F71 00 00 22 00 C3 6F db 00h, 00h, 22h, 00h,0C3h, 6Fh
-31E4:6F77 25 00 29 04 CB 0B db 25h, 00h, 29h, 04h,0CBh, 0Bh
-31E4:6F7D 00 00 CC 0B 00 00 db 00h, 00h,0CCh, 0Bh, 00h, 00h
-31E4:6F83 25 00 29 04 CD 0B db 25h, 00h, 29h, 04h,0CDh, 0Bh
-31E4:6F89 00 00 CE 0B 00 00 db 00h, 00h,0CEh, 0Bh, 00h, 00h
-31E4:6F8F 25 00 29 04 CF 0B db 25h, 00h, 29h, 04h,0CFh, 0Bh
-31E4:6F95 00 00 D0 0B 00 00 db 00h, 00h,0D0h, 0Bh, 00h, 00h
-31E4:6F9B 22 00 C3 6F 25 00 db 22h, 00h,0C3h, 6Fh, 25h, 00h
-31E4:6FA1 29 04 D1 0B 00 00 db 29h, 04h,0D1h, 0Bh, 00h, 00h
-31E4:6FA7 D2 0B 00 00 25 00 db 0D2h, 0Bh, 00h, 00h, 25h, 00h
-31E4:6FAD 29 04 D3 0B 00 00 db 29h, 04h,0D3h, 0Bh, 00h, 00h
-31E4:6FB3 D4 0B 00 00 25 00 db 0D4h, 0Bh, 00h, 00h, 25h, 00h
-31E4:6FB9 29 04 D5 0B 00 00 db 29h, 04h,0D5h, 0Bh, 00h, 00h
-31E4:6FBF 00 00 00 00 1C 00 db 00h, 00h, 00h, 00h, 1Ch, 00h
-31E4:6FC5 13 00 00 00 21 00 db 13h, 00h, 00h, 00h, 21h, 00h
-31E4:6FCB 17 27 23 00 E4 1E db 17h, 27h, 23h, 00h,0E4h, 1Eh
-31E4:6FD1 17 6F 1C 00 0E 00 db 17h, 6Fh, 1Ch, 00h, 0Eh, 00h
-31E4:6FD7 00 00 1C 00 0A 00 db 00h, 00h, 1Ch, 00h, 0Ah, 00h
-31E4:6FDD 00 00 1C 00 0C 00 db 00h, 00h, 1Ch, 00h, 0Ch, 00h
-31E4:6FE3 00 00 22 00 5D 6E db 00h, 00h, 22h, 00h, 5Dh, 6Eh
-31E4:6FE9 00 0C 82 00 db 00h, 0Ch, 82h, 00h
-31E4:6FED 59 6D db 59h, 6Dh
-31E4:6FEF 0063 data_914 dw 63h
-31E4:6FF1 00 67 71 00 00 71 db 00h, 67h, 71h, 00h, 00h, 71h
-31E4:6FF7 01 18 01 20 00 30 db 01h, 18h, 01h, 20h, 00h, 30h
-31E4:6FFD 00 01 01 02 7F 20 db 00h, 01h, 01h, 02h, 7Fh, 20h
-31E4:7003 00 30 00 08 00 00 db 00h, 30h, 00h, 08h, 00h, 00h
-31E4:7009 00 BF 5C 9E db 00h,0BFh, 5Ch, 9Eh
-31E4:700D 0009[00] db 9 dup (0)
-31E4:7016 02 16 00 00 64 00 db 02h, 16h, 00h, 00h, 64h, 00h
-31E4:701C 00 00 00 04 db 00h, 00h, 00h, 04h
-31E4:7020 000E[00] db 14 dup (0)
-31E4:702E AB 14 00 db 0ABh, 14h, 00h
-31E4:7031 0012[00] db 18 dup (0)
-31E4:7043 33 69 00 00 00 00 db 33h, 69h, 00h, 00h, 00h, 00h
-31E4:7049 00 00 00 02 db 00h, 00h, 00h, 02h
-31E4:704D 60 70 2D db 60h, 70h, 2Dh
-31E4:7050 0010[00] db 16 dup (0)
-31E4:7060 28 00 1C 88 21 00 db 28h, 00h, 1Ch, 88h, 21h, 00h
-31E4:7066 E8 03 21 00 E8 03 db 0E8h, 03h, 21h, 00h,0E8h, 03h
-31E4:706C 1C 00 2C 00 00 00 db 1Ch, 00h, 2Ch, 00h, 00h, 00h
-31E4:7072 21 00 E8 03 21 00 db 21h, 00h,0E8h, 03h, 21h, 00h
-31E4:7078 E8 03 1C 00 2B 00 db 0E8h, 03h, 1Ch, 00h, 2Bh, 00h
-31E4:707E 00 00 21 00 E8 03 db 00h, 00h, 21h, 00h,0E8h, 03h
-31E4:7084 21 00 E8 03 1C 00 db 21h, 00h,0E8h, 03h, 1Ch, 00h
-31E4:708A 2A 00 00 00 21 00 db 2Ah, 00h, 00h, 00h, 21h, 00h
-31E4:7090 E8 03 21 00 4E 75 db 0E8h, 03h, 21h, 00h, 4Eh, 75h
-31E4:7096 1E 00 49 1E 21 00 db 1Eh, 00h, 49h, 1Eh, 21h, 00h
-31E4:709C E8 03 1E 00 42 1E db 0E8h, 03h, 1Eh, 00h, 42h, 1Eh
-31E4:70A2 21 00 E8 03 20 00 db 21h, 00h,0E8h, 03h, 20h, 00h
-31E4:70A8 22 00 9E 70 03 00 db 22h, 00h, 9Eh, 70h, 03h, 00h
-31E4:70AE 0B 33 18 12 32 1C db 0Bh, 33h, 18h, 12h, 32h, 1Ch
-31E4:70B4 0D B0 1C 00 00 db 0Dh,0B0h, 1Ch, 00h, 00h
-
-31E4:70B9 1C00 ratpouch_hotspot_rec dw 1C00h
-31E4:70BB 0082 dw 82h
-31E4:70BD 70AC dw 70ACh
-31E4:70BF 0005 dw 5
-31E4:70C1 00 67 71 00 00 B4 db 00h, 67h, 71h, 00h, 00h,0B4h
-31E4:70C7 00 E9 00 20 00 30 db 00h,0E9h, 00h, 20h, 00h, 30h
-31E4:70CD 00 01 01 14 7C 20 db 00h, 01h, 01h, 14h, 7Ch, 20h
-31E4:70D3 00 30 00 08 00 00 db 00h, 30h, 00h, 08h, 00h, 00h
-31E4:70D9 00 D4 5C AD db 00h,0D4h, 5Ch,0ADh
-31E4:70DD 0009[00] db 9 dup (0)
-31E4:70E6 55 16 00 00 96 00 db 55h, 16h, 00h, 00h, 96h, 00h
-31E4:70EC 00 00 F6 0A 28 00 db 00h, 00h,0F6h, 0Ah, 28h, 00h
-31E4:70F2 E8 db 0E8h
-31E4:70F3 loc_2141:
-31E4:70F3 03 00 add ax,[bx+si]
-31E4:70F5 9C pushf ; Push flags
-31E4:70F6 00 00 00 00 00 db 0, 0, 0, 0, 0
-31E4:70FB 002A data_923 dw 2Ah
-31E4:70FD 05 data_924 db 5
-31E4:70FE F9 12 00 db 0F9h, 12h, 00h
-31E4:7101 0012[00] db 18 dup (0)
-31E4:7113 33 67 73 67 00 00 db 33h, 67h, 73h, 67h, 00h, 00h
-31E4:7119 00 00 00 02 D3 69 db 00h, 00h, 00h, 02h,0D3h, 69h
-31E4:711F 04 db 04h
-31E4:7120 0015[00] db 21 dup (0)
-31E4:7135 1C 00 07 00 00 00 db 1Ch, 00h, 07h, 00h, 00h, 00h
-31E4:713B 20 00 1F 00 1E 00 db 20h, 00h, 1Fh, 00h, 1Eh, 00h
-31E4:7141 97 16 00 00 03 00 db 97h, 16h, 00h, 00h, 03h, 00h
-31E4:7147 0B 88 17 12 8C 1B db 0Bh, 88h, 17h, 12h, 8Ch, 1Bh
-31E4:714D 0D BD 1C 00 0C 02 db 0Dh,0BDh, 1Ch, 00h, 0Ch, 02h
-31E4:7153 00 45 71 2C 00 00 db 00h, 45h, 71h, 2Ch, 00h, 00h
-31E4:7159 67 71 00 00 4A 01 db 67h, 71h, 00h, 00h, 4Ah, 01h
-31E4:715F 02 01 20 00 30 00 db 02h, 01h, 20h, 00h, 30h, 00h
-31E4:7165 01 01 82 4F 20 00 db 01h, 01h, 82h, 4Fh, 20h, 00h
-31E4:716B 30 00 08 00 00 00 db 30h, 00h, 08h, 00h, 00h, 00h
-31E4:7171 67 5D 80 00 00 db 67h, 5Dh, 80h, 00h, 00h
-31E4:7176 0007[00] db 7 dup (0)
-31E4:717D 7B 15 00 00 96 00 db 7Bh, 15h, 00h, 00h, 96h, 00h
-31E4:7183 00 00 F8 09 00 db 00h, 00h,0F8h, 09h, 00h
-31E4:7188 000D[00] db 13 dup (0)
-31E4:7195 88 14 db 88h, 14h
-31E4:7197 0013[00] db 19 dup (0)
-31E4:71AA 73 69 B3 69 00 00 db 73h, 69h,0B3h, 69h, 00h, 00h
-31E4:71B0 00 00 00 02 CC db 00h, 00h, 00h, 02h,0CCh
-31E4:71B5 71 2C db 71h, 2Ch
-31E4:71B7 0015[00] db 21 dup (0)
-31E4:71CC 20 00 1C 00 2A 00 db 20h, 00h, 1Ch, 00h, 2Ah, 00h
-31E4:71D2 00 00 21 00 4E 75 db 00h, 00h, 21h, 00h, 4Eh, 75h
-31E4:71D8 1F 00 1C 00 2D 00 db 1Fh, 00h, 1Ch, 00h, 2Dh, 00h
-31E4:71DE 00 00 25 00 37 04 db 00h, 00h, 25h, 00h, 37h, 04h
-31E4:71E4 A5 0F 00 00 A6 0F db 0A5h, 0Fh, 00h, 00h,0A6h, 0Fh
-31E4:71EA 00 00 25 00 37 04 db 00h, 00h, 25h, 00h, 37h, 04h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 464
-
-31E4:71F0 A7 0F 00 00 A8 0F db 0A7h, 0Fh, 00h, 00h,0A8h, 0Fh
-31E4:71F6 00 00 1C 00 2A 00 db 00h, 00h, 1Ch, 00h, 2Ah, 00h
-31E4:71FC 00 00 20 00 1C 00 db 00h, 00h, 20h, 00h, 1Ch, 00h
-31E4:7202 2D 00 00 00 25 00 db 2Dh, 00h, 00h, 00h, 25h, 00h
-31E4:7208 37 04 A9 0F 00 00 db 37h, 04h,0A9h, 0Fh, 00h, 00h
-31E4:720E AA 0F 00 00 25 00 db 0AAh, 0Fh, 00h, 00h, 25h, 00h
-31E4:7214 37 04 AB 0F 00 00 db 37h, 04h,0ABh, 0Fh, 00h, 00h
-31E4:721A AC 0F 00 00 1C 00 db 0ACh, 0Fh, 00h, 00h, 1Ch, 00h
-31E4:7220 2A 00 00 00 20 00 db 2Ah, 00h, 00h, 00h, 20h, 00h
-31E4:7226 1C 00 2D 00 00 00 db 1Ch, 00h, 2Dh, 00h, 00h, 00h
-31E4:722C 25 00 37 04 AD 0F db 25h, 00h, 37h, 04h,0ADh, 0Fh
-31E4:7232 00 00 AE 0F 00 00 db 00h, 00h,0AEh, 0Fh, 00h, 00h
-31E4:7238 25 00 37 04 AF 0F db 25h, 00h, 37h, 04h,0AFh, 0Fh
-31E4:723E 00 00 B0 0F 00 00 db 00h, 00h,0B0h, 0Fh, 00h, 00h
-31E4:7244 22 00 CE 71 1C 00 db 22h, 00h,0CEh, 71h, 1Ch, 00h
-31E4:724A 2D 00 00 00 25 00 db 2Dh, 00h, 00h, 00h, 25h, 00h
-31E4:7250 37 04 C9 0F 00 00 db 37h, 04h,0C9h, 0Fh, 00h, 00h
-31E4:7256 CA 0F 00 00 25 00 db 0CAh, 0Fh, 00h, 00h, 25h, 00h
-31E4:725C 37 04 CB 0F 00 00 db 37h, 04h,0CBh, 0Fh, 00h, 00h
-31E4:7262 CC 0F 00 db 0CCh, 0Fh, 00h
-31E4:7265 loc_2142:
-31E4:7265 00 1E FF00 add ds:data_1202e,bl ; (31E4:FF00=2Fh)
-31E4:7269 1D 0022 sbb ax,22h
-31E4:726C A2 1C72 mov byte ptr data_691,al ; (31E4:1C72=' ')
-31E4:726F 00 2D add [di],ch
-31E4:7271 00 00 add [bx+si],al
-31E4:7273 00 25 add [di],ah
-31E4:7275 00 37 add [bx],dh
-31E4:7277 04 CD add al,0CDh
-31E4:7279 0F ;* pop cs ; Dangerous-8088 only
-31E4:7279 0F db 0Fh
-31E4:727A 00 00 add [bx+si],al
-31E4:727C CE into ; Int 4 on overflow
-31E4:727D 0F ;* pop cs ; Dangerous-8088 only
-31E4:727D 0F db 0Fh
-31E4:727E 00 00 add [bx+si],al
-31E4:7280 1E push ds
-31E4:7281 00 BE 1F20 add [bp+1F20h],bh
-31E4:7285 00 22 add [bp+si],ah
-31E4:7287 00 CE add dh,cl
-31E4:7289 71 1C ;* jno loc_2143 ;*Jump if not overflw
-31E4:7289 71 1C db 71h, 1Ch
-31E4:728B 00 2D add [di],ch
-31E4:728D 00 00 add [bx+si],al
-31E4:728F 00 25 add [di],ah
-31E4:7291 00 37 add [bx],dh
-31E4:7293 04 CF add al,0CFh
-31E4:7295 0F ;* pop cs ; Dangerous-8088 only
-31E4:7295 0F db 0Fh
-31E4:7296 00 00 add [bx+si],al
-31E4:7298 D0 0F ror byte ptr [bx],1 ; Rotate
-31E4:729A 00 00 add [bx+si],al
-31E4:729C 1F pop ds
-31E4:729D 00 1E FF00 add ds:data_1202e,bl ; (31E4:FF00=2Fh)
-31E4:72A1 1D 0020 sbb ax,20h
-31E4:72A4 1F pop ds
-31E4:72A5 00 1E 4200 add ds:data_62e,bl ; (0002:4200=0C4h)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 465
-
-31E4:72A9 1E push ds
-31E4:72AA 20 00 and [bx+si],al
-31E4:72AC 1F pop ds
-31E4:72AD 00 20 add [bx+si],ah
-31E4:72AF 00 1F add [bx],bl
-31E4:72B1 00 20 add [bx+si],ah
-31E4:72B3 00 1F add [bx],bl
-31E4:72B5 00 20 add [bx+si],ah
-31E4:72B7 00 1F add [bx],bl
-31E4:72B9 00 20 add [bx+si],ah
-31E4:72BB 00 1F add [bx],bl
-31E4:72BD 00 20 add [bx+si],ah
-31E4:72BF 00 1F add [bx],bl
-31E4:72C1 00 22 add [bp+si],ah
-31E4:72C3 00 A2 0272 add [bp+si+272h],ah
-31E4:72C7 00 0B add [bp+di],cl
-31E4:72C9 D9 17 fst dword ptr [bx] ; Store st to memory
-31E4:72CB 12 8C 001B adc cl,ds:data_61e[si] ; (0002:001B=0C8h)
-31E4:72CF 0C 82 or al,82h
-31E4:72D1 00 C6 add dh,al
-31E4:72D3 72 17 ;* jc loc_2144 ;*Jump if carry Set
-31E4:72D3 72 17 db 72h, 17h
-31E4:72D5 00 00 add [bx+si],al
-31E4:72D7 67 71 00 00 16 01 db 67h, 71h, 00h, 00h, 16h, 01h
-31E4:72DD F8 00 20 00 30 00 db 0F8h, 00h, 20h, 00h, 30h, 00h
-31E4:72E3 01 01 82 4F 20 00 db 01h, 01h, 82h, 4Fh, 20h, 00h
-31E4:72E9 30 00 db 30h, 00h
-31E4:72EB 08 db 8
-31E4:72EC 00 00 00 E9 5C 9E db 00h, 00h, 00h,0E9h, 5Ch, 9Eh
-31E4:72F2 0009[00] db 9 dup (0)
-31E4:72FB 54 15 00 00 96 00 db 54h, 15h, 00h, 00h, 96h, 00h
-31E4:7301 00 00 F8 04 28 00 db 00h, 00h,0F8h, 04h, 28h, 00h
-31E4:7307 00 00 00 50 0B db 00h, 00h, 00h, 50h, 0Bh
-31E4:730C 0007[00] db 7 dup (0)
-31E4:7313 54 13 00 db 54h, 13h, 00h
-31E4:7316 0012[00] db 18 dup (0)
-31E4:7328 93 67 db 93h, 67h
-31E4:732A 0007[00] db 7 dup (0)
-31E4:7331 02 4A 73 17 db 02h, 4Ah, 73h, 17h
-31E4:7335 0015[00] db 21 dup (0)
-31E4:734A 1C 00 1C 00 00 00 db 1Ch, 00h, 1Ch, 00h, 00h, 00h
-31E4:7350 21 00 3B 75 21 00 db 21h, 00h, 3Bh, 75h, 21h, 00h
-31E4:7356 E5 03 1F 00 05 00 db 0E5h, 03h, 1Fh, 00h, 05h, 00h
-31E4:735C 3B 75 05 00 3B 75 db 3Bh, 75h, 05h, 00h, 3Bh, 75h
-31E4:7362 05 00 3B 75 05 00 db 05h, 00h, 3Bh, 75h, 05h, 00h
-31E4:7368 3B 75 05 00 3B 75 db 3Bh, 75h, 05h, 00h, 3Bh, 75h
-31E4:736E 21 00 db 21h, 00h
-31E4:7370 loc_2145:
-31E4:7370 3B 75 21 cmp si,[di+21h]
-31E4:7373 00 E5 add ch,ah
-31E4:7375 03 1F add bx,[bx]
-31E4:7377 00 05 add [di],al
-31E4:7379 00 3B add [bp+di],bh
-31E4:737B 75 05 ;* jnz loc_2146 ;*Jump if not zero
-31E4:737B 75 05 db 75h, 05h
-31E4:737D 00 3B add [bp+di],bh
-31E4:737F 75 05 ;* jnz loc_2147 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 466
-
-31E4:737F 75 05 db 75h, 05h
-31E4:7381 00 3B add [bp+di],bh
-31E4:7383 75 05 ;* jnz loc_2148 ;*Jump if not zero
-31E4:7383 75 05 db 75h, 05h
-31E4:7385 00 3B add [bp+di],bh
-31E4:7387 75 05 ;* jnz loc_2149 ;*Jump if not zero
-31E4:7387 75 05 db 75h, 05h
-31E4:7389 00 3B add [bp+di],bh
-31E4:738B 75 21 ;* jnz loc_2156 ;*Jump if not zero
-31E4:738B 75 21 db 75h, 21h
-31E4:738D 00 3B add [bp+di],bh
-31E4:738F 75 21 ;* jnz loc_2157 ;*Jump if not zero
-31E4:738F 75 21 db 75h, 21h
-31E4:7391 00 E5 add ch,ah
-31E4:7393 03 1F add bx,[bx]
-31E4:7395 00 05 add [di],al
-31E4:7397 00 3B add [bp+di],bh
-31E4:7399 75 05 ;* jnz loc_2152 ;*Jump if not zero
-31E4:7399 75 05 db 75h, 05h
-31E4:739B 00 3B add [bp+di],bh
-31E4:739D 75 05 ;* jnz loc_2153 ;*Jump if not zero
-31E4:739D 75 05 db 75h, 05h
-31E4:739F 00 3B add [bp+di],bh
-31E4:73A1 75 05 ;* jnz loc_2154 ;*Jump if not zero
-31E4:73A1 75 05 db 75h, 05h
-31E4:73A3 00 3B add [bp+di],bh
-31E4:73A5 75 05 ;* jnz loc_2155 ;*Jump if not zero
-31E4:73A5 75 05 db 75h, 05h
-31E4:73A7 00 3B add [bp+di],bh
-31E4:73A9 75 21 ;* jnz loc_2162 ;*Jump if not zero
-31E4:73A9 75 21 db 75h, 21h
-31E4:73AB 00 3B add [bp+di],bh
-31E4:73AD 75 21 ;* jnz loc_2163 ;*Jump if not zero
-31E4:73AD 75 21 db 75h, 21h
-31E4:73AF 00 E5 add ch,ah
-31E4:73B1 03 1F add bx,[bx]
-31E4:73B3 00 05 add [di],al
-31E4:73B5 00 3B add [bp+di],bh
-31E4:73B7 75 05 ;* jnz loc_2158 ;*Jump if not zero
-31E4:73B7 75 05 db 75h, 05h
-31E4:73B9 00 3B add [bp+di],bh
-31E4:73BB 75 05 ;* jnz loc_2159 ;*Jump if not zero
-31E4:73BB 75 05 db 75h, 05h
-31E4:73BD 00 3B add [bp+di],bh
-31E4:73BF 75 05 ;* jnz loc_2160 ;*Jump if not zero
-31E4:73BF 75 05 db 75h, 05h
-31E4:73C1 00 3B add [bp+di],bh
-31E4:73C3 75 05 ;* jnz loc_2161 ;*Jump if not zero
-31E4:73C3 75 05 db 75h, 05h
-31E4:73C5 00 3B add [bp+di],bh
-31E4:73C7 75 21 ;* jnz loc_2167 ;*Jump if not zero
-31E4:73C7 75 21 db 75h, 21h
-31E4:73C9 00 E5 add ch,ah
-31E4:73CB 03 1F add bx,[bx]
-31E4:73CD 00 05 add [di],al
-31E4:73CF 00 3B add [bp+di],bh
-31E4:73D1 75 05 ;* jnz loc_2164 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 467
-
-31E4:73D1 75 05 db 75h, 05h
-31E4:73D3 00 3B add [bp+di],bh
-31E4:73D5 75 20 jnz loc_2168 ; Jump if not zero
-31E4:73D7 00 05 add [di],al
-31E4:73D9 00 3B add [bp+di],bh
-31E4:73DB 75 05 ;* jnz loc_2165 ;*Jump if not zero
-31E4:73DB 75 05 db 75h, 05h
-31E4:73DD 00 3B add [bp+di],bh
-31E4:73DF 75 05 ;* jnz loc_2166 ;*Jump if not zero
-31E4:73DF 75 05 db 75h, 05h
-31E4:73E1 00 3B add [bp+di],bh
-31E4:73E3 75 05 ;* jnz loc_2167 ;*Jump if not zero
-31E4:73E3 75 05 db 75h, 05h
-31E4:73E5 00 3B add [bp+di],bh
-31E4:73E7 75 21 ;* jnz loc_2174 ;*Jump if not zero
-31E4:73E7 75 21 db 75h, 21h
-31E4:73E9 00 E5 add ch,ah
-31E4:73EB 03 1F add bx,[bx]
-31E4:73ED 00 05 add [di],al
-31E4:73EF 00 3B add [bp+di],bh
-31E4:73F1 75 05 ;* jnz loc_2169 ;*Jump if not zero
-31E4:73F1 75 05 db 75h, 05h
-31E4:73F3 00 3B add [bp+di],bh
-31E4:73F5 75 05 ;* jnz loc_2170 ;*Jump if not zero
-31E4:73F5 75 05 db 75h, 05h
-31E4:73F7 loc_2168: ; xref 31E4:73D5
-31E4:73F7 00 3B add [bp+di],bh
-31E4:73F9 75 05 ;* jnz loc_2171 ;*Jump if not zero
-31E4:73F9 75 05 db 75h, 05h
-31E4:73FB 00 3B add [bp+di],bh
-31E4:73FD 75 05 ;* jnz loc_2172 ;*Jump if not zero
-31E4:73FD 75 05 db 75h, 05h
-31E4:73FF 00 3B add [bp+di],bh
-31E4:7401 75 05 ;* jnz loc_2173 ;*Jump if not zero
-31E4:7401 75 05 db 75h, 05h
-31E4:7403 00 3B add [bp+di],bh
-31E4:7405 75 05 ;* jnz loc_2175 ;*Jump if not zero
-31E4:7405 75 05 db 75h, 05h
-31E4:7407 00 3B add [bp+di],bh
-31E4:7409 75 05 ;* jnz loc_2176 ;*Jump if not zero
-31E4:7409 75 05 db 75h, 05h
-31E4:740B 00 3B add [bp+di],bh
-31E4:740D 75 1C jnz loc_2177 ; Jump if not zero
-31E4:740F 00 12 add [bp+si],dl
-31E4:7411 00 4A 73 add [bp+si+73h],cl
-31E4:7414 20 00 and [bx+si],al
-31E4:7416 1F pop ds
-31E4:7417 00 1F add [bx],bl
-31E4:7419 00 1F add [bx],bl
-31E4:741B 00 1C add [si],bl
-31E4:741D 00 1C add [si],bl
-31E4:741F 00 EC add ah,ch
-31E4:7421 76 21 ;* jbe loc_2182 ;*Jump if below or =
-31E4:7421 76 21 db 76h, 21h
-31E4:7423 00 3B add [bp+di],bh
-31E4:7425 75 21 ;* jnz loc_2184 ;*Jump if not zero
-31E4:7425 75 21 db 75h, 21h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 468
-
-31E4:7427 00 E5 add ch,ah
-31E4:7429 03 1F add bx,[bx]
-31E4:742B loc_2177: ; xref 31E4:740D
-31E4:742B 00 05 add [di],al
-31E4:742D 00 3B add [bp+di],bh
-31E4:742F 75 05 ;* jnz loc_2178 ;*Jump if not zero
-31E4:742F 75 05 db 75h, 05h
-31E4:7431 00 3B add [bp+di],bh
-31E4:7433 75 05 ;* jnz loc_2179 ;*Jump if not zero
-31E4:7433 75 05 db 75h, 05h
-31E4:7435 00 3B add [bp+di],bh
-31E4:7437 75 05 ;* jnz loc_2180 ;*Jump if not zero
-31E4:7437 75 05 db 75h, 05h
-31E4:7439 00 3B add [bp+di],bh
-31E4:743B 75 05 ;* jnz loc_2181 ;*Jump if not zero
-31E4:743B 75 05 db 75h, 05h
-31E4:743D 00 3B add [bp+di],bh
-31E4:743F 75 05 ;* jnz loc_2183 ;*Jump if not zero
-31E4:743F 75 05 db 75h, 05h
-31E4:7441 00 3B add [bp+di],bh
-31E4:7443 75 21 ;* jnz loc_2190 ;*Jump if not zero
-31E4:7443 75 21 db 75h, 21h
-31E4:7445 00 E5 add ch,ah
-31E4:7447 03 1F add bx,[bx]
-31E4:7449 00 05 add [di],al
-31E4:744B 00 3B add [bp+di],bh
-31E4:744D 75 05 ;* jnz loc_2185 ;*Jump if not zero
-31E4:744D 75 05 db 75h, 05h
-31E4:744F 00 3B add [bp+di],bh
-31E4:7451 75 05 ;* jnz loc_2186 ;*Jump if not zero
-31E4:7451 75 05 db 75h, 05h
-31E4:7453 00 3B add [bp+di],bh
-31E4:7455 75 05 ;* jnz loc_2187 ;*Jump if not zero
-31E4:7455 75 05 db 75h, 05h
-31E4:7457 00 3B add [bp+di],bh
-31E4:7459 75 05 ;* jnz loc_2188 ;*Jump if not zero
-31E4:7459 75 05 db 75h, 05h
-31E4:745B 00 3B add [bp+di],bh
-31E4:745D 75 05 ;* jnz loc_2189 ;*Jump if not zero
-31E4:745D 75 05 db 75h, 05h
-31E4:745F 00 3B add [bp+di],bh
-31E4:7461 75 21 ;* jnz loc_2196 ;*Jump if not zero
-31E4:7461 75 21 db 75h, 21h
-31E4:7463 00 E5 add ch,ah
-31E4:7465 03 1F add bx,[bx]
-31E4:7467 00 05 add [di],al
-31E4:7469 00 3B add [bp+di],bh
-31E4:746B 75 05 ;* jnz loc_2191 ;*Jump if not zero
-31E4:746B 75 05 db 75h, 05h
-31E4:746D 00 3B add [bp+di],bh
-31E4:746F 75 05 ;* jnz loc_2192 ;*Jump if not zero
-31E4:746F 75 05 db 75h, 05h
-31E4:7471 00 3B add [bp+di],bh
-31E4:7473 75 05 ;* jnz loc_2193 ;*Jump if not zero
-31E4:7473 75 05 db 75h, 05h
-31E4:7475 00 3B add [bp+di],bh
-31E4:7477 75 05 ;* jnz loc_2194 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 469
-
-31E4:7477 75 05 db 75h, 05h
-31E4:7479 00 3B add [bp+di],bh
-31E4:747B 75 05 ;* jnz loc_2195 ;*Jump if not zero
-31E4:747B 75 05 db 75h, 05h
-31E4:747D 00 3B add [bp+di],bh
-31E4:747F 75 1C jnz loc_2198 ; Jump if not zero
-31E4:7481 00 1C add [si],bl
-31E4:7483 00 00 add [bx+si],al
-31E4:7485 00 21 add [bx+di],ah
-31E4:7487 00 3B add [bp+di],bh
-31E4:7489 75 21 ;* jnz loc_2202 ;*Jump if not zero
-31E4:7489 75 21 db 75h, 21h
-31E4:748B 00 E5 add ch,ah
-31E4:748D 03 1F add bx,[bx]
-31E4:748F 00 05 add [di],al
-31E4:7491 00 3B add [bp+di],bh
-31E4:7493 75 05 ;* jnz loc_2197 ;*Jump if not zero
-31E4:7493 75 05 db 75h, 05h
-31E4:7495 00 3B add [bp+di],bh
-31E4:7497 75 05 ;* jnz loc_2199 ;*Jump if not zero
-31E4:7497 75 05 db 75h, 05h
-31E4:7499 00 3B add [bp+di],bh
-31E4:749B 75 05 ;* jnz loc_2200 ;*Jump if not zero
-31E4:749B 75 05 db 75h, 05h
-31E4:749D loc_2198: ; xref 31E4:747F
-31E4:749D 00 3B add [bp+di],bh
-31E4:749F 75 05 ;* jnz loc_2201 ;*Jump if not zero
-31E4:749F 75 05 db 75h, 05h
-31E4:74A1 00 3B add [bp+di],bh
-31E4:74A3 75 21 ;* jnz loc_2207 ;*Jump if not zero
-31E4:74A3 75 21 db 75h, 21h
-31E4:74A5 00 3B add [bp+di],bh
-31E4:74A7 75 21 ;* jnz loc_2208 ;*Jump if not zero
-31E4:74A7 75 21 db 75h, 21h
-31E4:74A9 00 E5 add ch,ah
-31E4:74AB 03 1F add bx,[bx]
-31E4:74AD 00 05 add [di],al
-31E4:74AF 00 3B add [bp+di],bh
-31E4:74B1 75 05 ;* jnz loc_2203 ;*Jump if not zero
-31E4:74B1 75 05 db 75h, 05h
-31E4:74B3 00 3B add [bp+di],bh
-31E4:74B5 75 05 ;* jnz loc_2204 ;*Jump if not zero
-31E4:74B5 75 05 db 75h, 05h
-31E4:74B7 00 3B add [bp+di],bh
-31E4:74B9 75 05 ;* jnz loc_2205 ;*Jump if not zero
-31E4:74B9 75 05 db 75h, 05h
-31E4:74BB 00 3B add [bp+di],bh
-31E4:74BD 75 05 ;* jnz loc_2206 ;*Jump if not zero
-31E4:74BD 75 05 db 75h, 05h
-31E4:74BF 00 3B add [bp+di],bh
-31E4:74C1 75 21 ;* jnz loc_2213 ;*Jump if not zero
-31E4:74C1 75 21 db 75h, 21h
-31E4:74C3 00 3B add [bp+di],bh
-31E4:74C5 75 21 ;* jnz loc_2214 ;*Jump if not zero
-31E4:74C5 75 21 db 75h, 21h
-31E4:74C7 00 E5 add ch,ah
-31E4:74C9 03 1F add bx,[bx]
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 470
-
-31E4:74CB 00 05 add [di],al
-31E4:74CD 00 3B add [bp+di],bh
-31E4:74CF 75 05 ;* jnz loc_2209 ;*Jump if not zero
-31E4:74CF 75 05 db 75h, 05h
-31E4:74D1 00 3B add [bp+di],bh
-31E4:74D3 75 05 ;* jnz loc_2210 ;*Jump if not zero
-31E4:74D3 75 05 db 75h, 05h
-31E4:74D5 00 3B add [bp+di],bh
-31E4:74D7 75 05 ;* jnz loc_2211 ;*Jump if not zero
-31E4:74D7 75 05 db 75h, 05h
-31E4:74D9 00 3B add [bp+di],bh
-31E4:74DB 75 05 ;* jnz loc_2212 ;*Jump if not zero
-31E4:74DB 75 05 db 75h, 05h
-31E4:74DD 00 3B add [bp+di],bh
-31E4:74DF 75 21 ;* jnz loc_2219 ;*Jump if not zero
-31E4:74DF 75 21 db 75h, 21h
-31E4:74E1 00 3B add [bp+di],bh
-31E4:74E3 75 21 ;* jnz loc_2220 ;*Jump if not zero
-31E4:74E3 75 21 db 75h, 21h
-31E4:74E5 00 E5 add ch,ah
-31E4:74E7 03 1F add bx,[bx]
-31E4:74E9 00 05 add [di],al
-31E4:74EB 00 3B add [bp+di],bh
-31E4:74ED 75 05 ;* jnz loc_2215 ;*Jump if not zero
-31E4:74ED 75 05 db 75h, 05h
-31E4:74EF 00 3B add [bp+di],bh
-31E4:74F1 75 05 ;* jnz loc_2216 ;*Jump if not zero
-31E4:74F1 75 05 db 75h, 05h
-31E4:74F3 00 3B add [bp+di],bh
-31E4:74F5 75 05 ;* jnz loc_2217 ;*Jump if not zero
-31E4:74F5 75 05 db 75h, 05h
-31E4:74F7 00 3B add [bp+di],bh
-31E4:74F9 75 05 ;* jnz loc_2218 ;*Jump if not zero
-31E4:74F9 75 05 db 75h, 05h
-31E4:74FB 00 3B add [bp+di],bh
-31E4:74FD 75 21 ;* jnz loc_2224 ;*Jump if not zero
-31E4:74FD 75 21 db 75h, 21h
-31E4:74FF 00 E5 add ch,ah
-31E4:7501 03 1F add bx,[bx]
-31E4:7503 00 05 add [di],al
-31E4:7505 00 3B add [bp+di],bh
-31E4:7507 75 05 ;* jnz loc_2221 ;*Jump if not zero
-31E4:7507 75 05 db 75h, 05h
-31E4:7509 00 3B add [bp+di],bh
-31E4:750B 75 20 jnz loc_2225 ; Jump if not zero
-31E4:750D 00 05 add [di],al
-31E4:750F 00 3B add [bp+di],bh
-31E4:7511 75 05 ;* jnz loc_2222 ;*Jump if not zero
-31E4:7511 75 05 db 75h, 05h
-31E4:7513 00 3B add [bp+di],bh
-31E4:7515 75 05 ;* jnz loc_2223 ;*Jump if not zero
-31E4:7515 75 05 db 75h, 05h
-31E4:7517 00 3B add [bp+di],bh
-31E4:7519 75 05 ;* jnz loc_2224 ;*Jump if not zero
-31E4:7519 75 05 db 75h, 05h
-31E4:751B 00 3B add [bp+di],bh
-31E4:751D 75 21 ;* jnz loc_2231 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 471
-
-31E4:751D 75 21 db 75h, 21h
-31E4:751F 00 E5 add ch,ah
-31E4:7521 03 1F add bx,[bx]
-31E4:7523 00 05 add [di],al
-31E4:7525 00 3B add [bp+di],bh
-31E4:7527 75 05 ;* jnz loc_2226 ;*Jump if not zero
-31E4:7527 75 05 db 75h, 05h
-31E4:7529 00 3B add [bp+di],bh
-31E4:752B 75 05 ;* jnz loc_2227 ;*Jump if not zero
-31E4:752B 75 05 db 75h, 05h
-31E4:752D loc_2225: ; xref 31E4:750B
-31E4:752D 00 3B add [bp+di],bh
-31E4:752F 75 05 ;* jnz loc_2228 ;*Jump if not zero
-31E4:752F 75 05 db 75h, 05h
-31E4:7531 00 3B add [bp+di],bh
-31E4:7533 75 05 ;* jnz loc_2229 ;*Jump if not zero
-31E4:7533 75 05 db 75h, 05h
-31E4:7535 00 3B add [bp+di],bh
-31E4:7537 75 05 ;* jnz loc_2230 ;*Jump if not zero
-31E4:7537 75 05 db 75h, 05h
-31E4:7539 00 3B add [bp+di],bh
-31E4:753B 75 05 ;* jnz loc_2232 ;*Jump if not zero
-31E4:753B 75 05 db 75h, 05h
-31E4:753D 00 3B add [bp+di],bh
-31E4:753F 75 05 ;* jnz loc_2233 ;*Jump if not zero
-31E4:753F 75 05 db 75h, 05h
-31E4:7541 00 3B add [bp+di],bh
-31E4:7543 75 1C jnz loc_2234 ; Jump if not zero
-31E4:7545 00 12 add [bp+si],dl
-31E4:7547 00 4A 73 add [bp+si+73h],cl
-31E4:754A 20 00 and [bx+si],al
-31E4:754C 1F pop ds
-31E4:754D 00 1F add [bx],bl
-31E4:754F 00 1F add [bx],bl
-31E4:7551 00 1C add [si],bl
-31E4:7553 00 1C add [si],bl
-31E4:7555 00 EC add ah,ch
-31E4:7557 76 21 ;* jbe loc_2239 ;*Jump if below or =
-31E4:7557 76 21 db 76h, 21h
-31E4:7559 00 3B add [bp+di],bh
-31E4:755B 75 21 ;* jnz loc_2241 ;*Jump if not zero
-31E4:755B 75 21 db 75h, 21h
-31E4:755D 00 E5 add ch,ah
-31E4:755F 03 1F add bx,[bx]
-31E4:7561 loc_2234: ; xref 31E4:7543
-31E4:7561 00 05 add [di],al
-31E4:7563 00 3B add [bp+di],bh
-31E4:7565 75 05 ;* jnz loc_2235 ;*Jump if not zero
-31E4:7565 75 05 db 75h, 05h
-31E4:7567 00 3B add [bp+di],bh
-31E4:7569 75 05 ;* jnz loc_2236 ;*Jump if not zero
-31E4:7569 75 05 db 75h, 05h
-31E4:756B 00 3B add [bp+di],bh
-31E4:756D 75 05 ;* jnz loc_2237 ;*Jump if not zero
-31E4:756D 75 05 db 75h, 05h
-31E4:756F 00 3B add [bp+di],bh
-31E4:7571 75 05 ;* jnz loc_2238 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 472
-
-31E4:7571 75 05 db 75h, 05h
-31E4:7573 00 3B add [bp+di],bh
-31E4:7575 75 05 ;* jnz loc_2240 ;*Jump if not zero
-31E4:7575 75 05 db 75h, 05h
-31E4:7577 00 3B add [bp+di],bh
-31E4:7579 75 21 ;* jnz loc_2247 ;*Jump if not zero
-31E4:7579 75 21 db 75h, 21h
-31E4:757B 00 E5 add ch,ah
-31E4:757D 03 1F add bx,[bx]
-31E4:757F 00 05 add [di],al
-31E4:7581 00 3B add [bp+di],bh
-31E4:7583 75 05 ;* jnz loc_2242 ;*Jump if not zero
-31E4:7583 75 05 db 75h, 05h
-31E4:7585 00 3B add [bp+di],bh
-31E4:7587 75 05 ;* jnz loc_2243 ;*Jump if not zero
-31E4:7587 75 05 db 75h, 05h
-31E4:7589 00 3B add [bp+di],bh
-31E4:758B 75 05 ;* jnz loc_2244 ;*Jump if not zero
-31E4:758B 75 05 db 75h, 05h
-31E4:758D 00 3B add [bp+di],bh
-31E4:758F 75 05 ;* jnz loc_2245 ;*Jump if not zero
-31E4:758F 75 05 db 75h, 05h
-31E4:7591 00 3B add [bp+di],bh
-31E4:7593 75 05 ;* jnz loc_2246 ;*Jump if not zero
-31E4:7593 75 05 db 75h, 05h
-31E4:7595 00 3B add [bp+di],bh
-31E4:7597 75 21 ;* jnz loc_2253 ;*Jump if not zero
-31E4:7597 75 21 db 75h, 21h
-31E4:7599 00 E5 add ch,ah
-31E4:759B 03 1F add bx,[bx]
-31E4:759D 00 05 add [di],al
-31E4:759F 00 3B add [bp+di],bh
-31E4:75A1 75 05 ;* jnz loc_2248 ;*Jump if not zero
-31E4:75A1 75 05 db 75h, 05h
-31E4:75A3 00 3B add [bp+di],bh
-31E4:75A5 75 05 ;* jnz loc_2249 ;*Jump if not zero
-31E4:75A5 75 05 db 75h, 05h
-31E4:75A7 00 3B add [bp+di],bh
-31E4:75A9 75 05 ;* jnz loc_2250 ;*Jump if not zero
-31E4:75A9 75 05 db 75h, 05h
-31E4:75AB 00 3B add [bp+di],bh
-31E4:75AD 75 05 ;* jnz loc_2251 ;*Jump if not zero
-31E4:75AD 75 05 db 75h, 05h
-31E4:75AF 00 3B add [bp+di],bh
-31E4:75B1 75 05 ;* jnz loc_2252 ;*Jump if not zero
-31E4:75B1 75 05 db 75h, 05h
-31E4:75B3 00 3B add [bp+di],bh
-31E4:75B5 75 1C jnz loc_2255 ; Jump if not zero
-31E4:75B7 00 1C add [si],bl
-31E4:75B9 00 00 add [bx+si],al
-31E4:75BB 00 21 add [bx+di],ah
-31E4:75BD 00 3B add [bp+di],bh
-31E4:75BF 75 21 ;* jnz loc_2259 ;*Jump if not zero
-31E4:75BF 75 21 db 75h, 21h
-31E4:75C1 00 E5 add ch,ah
-31E4:75C3 03 1F add bx,[bx]
-31E4:75C5 00 05 add [di],al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 473
-
-31E4:75C7 00 3B add [bp+di],bh
-31E4:75C9 75 05 ;* jnz loc_2254 ;*Jump if not zero
-31E4:75C9 75 05 db 75h, 05h
-31E4:75CB 00 3B add [bp+di],bh
-31E4:75CD 75 05 ;* jnz loc_2256 ;*Jump if not zero
-31E4:75CD 75 05 db 75h, 05h
-31E4:75CF 00 3B add [bp+di],bh
-31E4:75D1 75 05 ;* jnz loc_2257 ;*Jump if not zero
-31E4:75D1 75 05 db 75h, 05h
-31E4:75D3 loc_2255: ; xref 31E4:75B5
-31E4:75D3 00 3B add [bp+di],bh
-31E4:75D5 75 05 ;* jnz loc_2258 ;*Jump if not zero
-31E4:75D5 75 05 db 75h, 05h
-31E4:75D7 00 3B add [bp+di],bh
-31E4:75D9 75 21 ;* jnz loc_2264 ;*Jump if not zero
-31E4:75D9 75 21 db 75h, 21h
-31E4:75DB 00 3B add [bp+di],bh
-31E4:75DD 75 21 ;* jnz loc_2265 ;*Jump if not zero
-31E4:75DD 75 21 db 75h, 21h
-31E4:75DF 00 E5 add ch,ah
-31E4:75E1 03 1F add bx,[bx]
-31E4:75E3 00 05 add [di],al
-31E4:75E5 00 3B add [bp+di],bh
-31E4:75E7 75 05 ;* jnz loc_2260 ;*Jump if not zero
-31E4:75E7 75 05 db 75h, 05h
-31E4:75E9 00 3B add [bp+di],bh
-31E4:75EB 75 05 ;* jnz loc_2261 ;*Jump if not zero
-31E4:75EB 75 05 db 75h, 05h
-31E4:75ED 00 3B add [bp+di],bh
-31E4:75EF 75 05 ;* jnz loc_2262 ;*Jump if not zero
-31E4:75EF 75 05 db 75h, 05h
-31E4:75F1 00 3B add [bp+di],bh
-31E4:75F3 75 05 ;* jnz loc_2263 ;*Jump if not zero
-31E4:75F3 75 05 db 75h, 05h
-31E4:75F5 00 3B add [bp+di],bh
-31E4:75F7 75 21 ;* jnz loc_2270 ;*Jump if not zero
-31E4:75F7 75 21 db 75h, 21h
-31E4:75F9 00 3B add [bp+di],bh
-31E4:75FB 75 21 ;* jnz loc_2271 ;*Jump if not zero
-31E4:75FB 75 21 db 75h, 21h
-31E4:75FD 00 E5 add ch,ah
-31E4:75FF 03 1F add bx,[bx]
-31E4:7601 00 05 add [di],al
-31E4:7603 00 3B add [bp+di],bh
-31E4:7605 75 05 ;* jnz loc_2266 ;*Jump if not zero
-31E4:7605 75 05 db 75h, 05h
-31E4:7607 00 3B add [bp+di],bh
-31E4:7609 75 05 ;* jnz loc_2267 ;*Jump if not zero
-31E4:7609 75 05 db 75h, 05h
-31E4:760B 00 3B add [bp+di],bh
-31E4:760D 75 05 ;* jnz loc_2268 ;*Jump if not zero
-31E4:760D 75 05 db 75h, 05h
-31E4:760F 00 3B add [bp+di],bh
-31E4:7611 75 05 ;* jnz loc_2269 ;*Jump if not zero
-31E4:7611 75 05 db 75h, 05h
-31E4:7613 00 3B add [bp+di],bh
-31E4:7615 75 21 ;* jnz loc_2276 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 474
-
-31E4:7615 75 21 db 75h, 21h
-31E4:7617 00 3B add [bp+di],bh
-31E4:7619 75 21 ;* jnz loc_2277 ;*Jump if not zero
-31E4:7619 75 21 db 75h, 21h
-31E4:761B 00 E5 add ch,ah
-31E4:761D 03 1F add bx,[bx]
-31E4:761F 00 05 add [di],al
-31E4:7621 00 3B add [bp+di],bh
-31E4:7623 75 05 ;* jnz loc_2272 ;*Jump if not zero
-31E4:7623 75 05 db 75h, 05h
-31E4:7625 00 3B add [bp+di],bh
-31E4:7627 75 05 ;* jnz loc_2273 ;*Jump if not zero
-31E4:7627 75 05 db 75h, 05h
-31E4:7629 00 3B add [bp+di],bh
-31E4:762B 75 05 ;* jnz loc_2274 ;*Jump if not zero
-31E4:762B 75 05 db 75h, 05h
-31E4:762D 00 3B add [bp+di],bh
-31E4:762F 75 05 ;* jnz loc_2275 ;*Jump if not zero
-31E4:762F 75 05 db 75h, 05h
-31E4:7631 00 3B add [bp+di],bh
-31E4:7633 75 21 ;* jnz loc_2281 ;*Jump if not zero
-31E4:7633 75 21 db 75h, 21h
-31E4:7635 00 E5 add ch,ah
-31E4:7637 03 1F add bx,[bx]
-31E4:7639 00 05 add [di],al
-31E4:763B 00 3B add [bp+di],bh
-31E4:763D 75 05 ;* jnz loc_2278 ;*Jump if not zero
-31E4:763D 75 05 db 75h, 05h
-31E4:763F 00 3B add [bp+di],bh
-31E4:7641 75 20 jnz loc_2282 ; Jump if not zero
-31E4:7643 00 05 add [di],al
-31E4:7645 00 3B add [bp+di],bh
-31E4:7647 75 05 ;* jnz loc_2279 ;*Jump if not zero
-31E4:7647 75 05 db 75h, 05h
-31E4:7649 00 3B add [bp+di],bh
-31E4:764B 75 05 ;* jnz loc_2280 ;*Jump if not zero
-31E4:764B 75 05 db 75h, 05h
-31E4:764D 00 3B add [bp+di],bh
-31E4:764F 75 05 ;* jnz loc_2281 ;*Jump if not zero
-31E4:764F 75 05 db 75h, 05h
-31E4:7651 00 3B add [bp+di],bh
-31E4:7653 75 21 ;* jnz loc_2288 ;*Jump if not zero
-31E4:7653 75 21 db 75h, 21h
-31E4:7655 00 E5 add ch,ah
-31E4:7657 03 1F add bx,[bx]
-31E4:7659 00 05 add [di],al
-31E4:765B 00 3B add [bp+di],bh
-31E4:765D 75 05 ;* jnz loc_2283 ;*Jump if not zero
-31E4:765D 75 05 db 75h, 05h
-31E4:765F 00 3B add [bp+di],bh
-31E4:7661 75 05 ;* jnz loc_2284 ;*Jump if not zero
-31E4:7661 75 05 db 75h, 05h
-31E4:7663 loc_2282: ; xref 31E4:7641
-31E4:7663 00 3B add [bp+di],bh
-31E4:7665 75 05 ;* jnz loc_2285 ;*Jump if not zero
-31E4:7665 75 05 db 75h, 05h
-31E4:7667 00 3B add [bp+di],bh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 475
-
-31E4:7669 75 05 ;* jnz loc_2286 ;*Jump if not zero
-31E4:7669 75 05 db 75h, 05h
-31E4:766B 00 3B add [bp+di],bh
-31E4:766D 75 05 ;* jnz loc_2287 ;*Jump if not zero
-31E4:766D 75 05 db 75h, 05h
-31E4:766F 00 3B add [bp+di],bh
-31E4:7671 75 05 ;* jnz loc_2289 ;*Jump if not zero
-31E4:7671 75 05 db 75h, 05h
-31E4:7673 00 3B add [bp+di],bh
-31E4:7675 75 05 ;* jnz loc_2290 ;*Jump if not zero
-31E4:7675 75 05 db 75h, 05h
-31E4:7677 00 3B add [bp+di],bh
-31E4:7679 75 1C jnz loc_2291 ; Jump if not zero
-31E4:767B 00 12 add [bp+si],dl
-31E4:767D 00 4A 73 add [bp+si+73h],cl
-31E4:7680 20 00 and [bx+si],al
-31E4:7682 1F pop ds
-31E4:7683 00 1F add [bx],bl
-31E4:7685 00 1F add [bx],bl
-31E4:7687 00 1C add [si],bl
-31E4:7689 00 1C add [si],bl
-31E4:768B 00 EC add ah,ch
-31E4:768D 76 21 ;* jbe loc_2296 ;*Jump if below or =
-31E4:768D 76 21 db 76h, 21h
-31E4:768F 00 3B add [bp+di],bh
-31E4:7691 75 21 ;* jnz loc_2298 ;*Jump if not zero
-31E4:7691 75 21 db 75h, 21h
-31E4:7693 00 E5 add ch,ah
-31E4:7695 03 1F add bx,[bx]
-31E4:7697 loc_2291: ; xref 31E4:7679
-31E4:7697 00 05 add [di],al
-31E4:7699 00 3B add [bp+di],bh
-31E4:769B 75 05 ;* jnz loc_2292 ;*Jump if not zero
-31E4:769B 75 05 db 75h, 05h
-31E4:769D 00 3B add [bp+di],bh
-31E4:769F 75 05 ;* jnz loc_2293 ;*Jump if not zero
-31E4:769F 75 05 db 75h, 05h
-31E4:76A1 00 3B add [bp+di],bh
-31E4:76A3 75 05 ;* jnz loc_2294 ;*Jump if not zero
-31E4:76A3 75 05 db 75h, 05h
-31E4:76A5 00 3B add [bp+di],bh
-31E4:76A7 75 05 ;* jnz loc_2295 ;*Jump if not zero
-31E4:76A7 75 05 db 75h, 05h
-31E4:76A9 00 3B add [bp+di],bh
-31E4:76AB 75 05 ;* jnz loc_2297 ;*Jump if not zero
-31E4:76AB 75 05 db 75h, 05h
-31E4:76AD 00 3B add [bp+di],bh
-31E4:76AF 75 21 ;* jnz loc_2304 ;*Jump if not zero
-31E4:76AF 75 21 db 75h, 21h
-31E4:76B1 00 E5 add ch,ah
-31E4:76B3 03 1F add bx,[bx]
-31E4:76B5 00 05 add [di],al
-31E4:76B7 00 3B add [bp+di],bh
-31E4:76B9 75 05 ;* jnz loc_2299 ;*Jump if not zero
-31E4:76B9 75 05 db 75h, 05h
-31E4:76BB 00 3B add [bp+di],bh
-31E4:76BD 75 05 ;* jnz loc_2300 ;*Jump if not zero
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 476
-
-31E4:76BD 75 05 db 75h, 05h
-31E4:76BF 00 3B add [bp+di],bh
-31E4:76C1 75 05 ;* jnz loc_2301 ;*Jump if not zero
-31E4:76C1 75 05 db 75h, 05h
-31E4:76C3 00 3B add [bp+di],bh
-31E4:76C5 75 05 ;* jnz loc_2302 ;*Jump if not zero
-31E4:76C5 75 05 db 75h, 05h
-31E4:76C7 00 3B add [bp+di],bh
-31E4:76C9 75 05 ;* jnz loc_2303 ;*Jump if not zero
-31E4:76C9 75 05 db 75h, 05h
-31E4:76CB 00 3B add [bp+di],bh
-31E4:76CD 75 21 ;* jnz loc_2310 ;*Jump if not zero
-31E4:76CD 75 21 db 75h, 21h
-31E4:76CF 00 E5 add ch,ah
-31E4:76D1 03 1F add bx,[bx]
-31E4:76D3 00 05 add [di],al
-31E4:76D5 00 3B add [bp+di],bh
-31E4:76D7 75 05 ;* jnz loc_2305 ;*Jump if not zero
-31E4:76D7 75 05 db 75h, 05h
-31E4:76D9 00 3B add [bp+di],bh
-31E4:76DB 75 05 ;* jnz loc_2306 ;*Jump if not zero
-31E4:76DB 75 05 db 75h, 05h
-31E4:76DD 00 3B add [bp+di],bh
-31E4:76DF 75 05 ;* jnz loc_2307 ;*Jump if not zero
-31E4:76DF 75 05 db 75h, 05h
-31E4:76E1 00 3B add [bp+di],bh
-31E4:76E3 75 05 ;* jnz loc_2308 ;*Jump if not zero
-31E4:76E3 75 05 db 75h, 05h
-31E4:76E5 00 3B add [bp+di],bh
-31E4:76E7 75 05 ;* jnz loc_2309 ;*Jump if not zero
-31E4:76E7 75 05 db 75h, 05h
-31E4:76E9 00 3B add [bp+di],bh
-31E4:76EB 75 1C ;* jnz loc_2311 ;*Jump if not zero
-31E4:76EB 75 1C db 75h, 1Ch
-31E4:76ED 00 1D add [di],bl
-31E4:76EF 00 86 0777 add [bp+777h],al
-31E4:76F3 00 16 2427 add ds:data_34e,dl ; (0000:2427=8Bh)
-31E4:76F7 00 20 add [bx+si],ah
-31E4:76F9 04 86 add al,86h
-31E4:76FB 77 1E ja loc_2312 ; Jump if above
-31E4:76FD 00 1C add [si],bl
-31E4:76FF 1F pop ds
-31E4:7700 25 2000 and ax,2000h
-31E4:7703 04 05 add al,5
-31E4:7705 08 00 or [bx+si],al
-31E4:7707 00 00 db 0, 0
-31E4:7709 00 00 00 25 00 20 db 00h, 00h, 00h, 25h, 00h, 20h
-31E4:770F 04 00 00 00 00 D9 db 04h, 00h, 00h, 00h, 00h,0D9h
-31E4:7715 08 00 00 25 00 db 08h, 00h, 00h, 25h, 00h
-31E4:771A 20 db 20h
-31E4:771B loc_2312: ; xref 31E4:76FB
-31E4:771B 04 06 add al,6
-31E4:771D 08 00 or [bx+si],al
-31E4:771F 00 00 00 00 00 25 db 00h, 00h, 00h, 00h, 00h, 25h
-31E4:7725 00 20 04 07 08 00 db 00h, 20h, 04h, 07h, 08h, 00h
-31E4:772B 00 00 00 00 00 1F db 00h, 00h, 00h, 00h, 00h, 1Fh
-31E4:7731 00 22 00 86 77 25 db 00h, 22h, 00h, 86h, 77h, 25h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 477
-
-31E4:7737 00 20 04 F0 0B 00 db 00h, 20h, 04h,0F0h, 0Bh, 00h
-31E4:773D 00 F1 0B 00 00 25 db 00h,0F1h, 0Bh, 00h, 00h, 25h
-31E4:7743 00 20 04 F2 0B 00 db 00h, 20h, 04h,0F2h, 0Bh, 00h
-31E4:7749 00 F3 0B 14 00 25 db 00h,0F3h, 0Bh, 14h, 00h, 25h
-31E4:774F 00 20 04 F4 0B 14 db 00h, 20h, 04h,0F4h, 0Bh, 14h
-31E4:7755 00 00 00 00 00 1F db 00h, 00h, 00h, 00h, 00h, 1Fh
-31E4:775B 00 22 00 86 77 25 db 00h, 22h, 00h, 86h, 77h, 25h
-31E4:7761 00 20 04 F5 0B 00 db 00h, 20h, 04h,0F5h, 0Bh, 00h
-31E4:7767 00 F6 0B 00 00 25 db 00h,0F6h, 0Bh, 00h, 00h, 25h
-31E4:776D 00 20 04 F7 0B 00 db 00h, 20h, 04h,0F7h, 0Bh, 00h
-31E4:7773 00 F8 db 00h,0F8h
-31E4:7775 000B data_936 dw 0Bh ; xref 31E4:BCFE
-31E4:7777 00 25 00 20 04 F9 db 00h, 25h, 00h, 20h, 04h,0F9h
-31E4:777D 0B 00 00 FA 0B 00 db 0Bh, 00h, 00h,0FAh, 0Bh, 00h
-31E4:7783 00 1F 00 1C 00 11 db 00h, 1Fh, 00h, 1Ch, 00h, 11h
-31E4:7789 00 00 00 07 00 15 db 00h, 00h, 00h, 07h, 00h, 15h
-31E4:778F 27 1C 00 14 00 00 db 27h, 1Ch, 00h, 14h, 00h, 00h
-31E4:7795 00 1C 00 0D 00 00 db 00h, 1Ch, 00h, 0Dh, 00h, 00h
-31E4:779B 00 1C 00 0F 00 00 db 00h, 1Ch, 00h, 0Fh, 00h, 00h
-31E4:77A1 00 22 00 4A 73 1C db 00h, 22h, 00h, 4Ah, 73h, 1Ch
-31E4:77A7 00 1C 00 EC 76 20 db 00h, 1Ch, 00h,0ECh, 76h, 20h
-31E4:77AD 00 1F 00 1F 00 1F db 00h, 1Fh, 00h, 1Fh, 00h, 1Fh
-31E4:77B3 00 1F 00 22 00 EC db 00h, 1Fh, 00h, 22h, 00h,0ECh
-31E4:77B9 76 02 00 0B F7 16 db 76h, 02h, 00h, 0Bh,0F7h, 16h
-31E4:77BF 12 8C 1B 00 0C 82 db 12h, 8Ch, 1Bh, 00h, 0Ch, 82h
-31E4:77C5 00 BA 77 0A 00 00 db 00h,0BAh, 77h, 0Ah, 00h, 00h
-31E4:77CB 67 71 00 00 21 01 db 67h, 71h, 00h, 00h, 21h, 01h
-31E4:77D1 06 01 20 00 30 00 db 06h, 01h, 20h, 00h, 30h, 00h
-31E4:77D7 01 01 82 4F 20 00 db 01h, 01h, 82h, 4Fh, 20h, 00h
-31E4:77DD 30 00 08 00 00 00 db 30h, 00h, 08h, 00h, 00h, 00h
-31E4:77E3 13 5D 9E db 13h, 5Dh, 9Eh
-31E4:77E6 0009[00] db 9 dup (0)
-31E4:77EF 54 15 00 00 96 00 db 54h, 15h, 00h, 00h, 96h, 00h
-31E4:77F5 00 00 F8 04 00 db 00h, 00h,0F8h, 04h, 00h
-31E4:77FA 000D[00] db 13 dup (0)
-31E4:7807 9F 13 00 db 9Fh, 13h, 00h
-31E4:780A 0012[00] db 18 dup (0)
-31E4:781C D3 67 00 00 00 00 db 0D3h, 67h, 00h, 00h, 00h, 00h
-31E4:7822 00 00 00 02 AC db 00h, 00h, 00h, 02h,0ACh
-31E4:7827 78 0A db 78h, 0Ah
-31E4:7829 0015[00] db 21 dup (0)
-31E4:783E 23 00 00 00 5C 78 db 23h, 00h, 00h, 00h, 5Ch, 78h
-31E4:7844 25 00 ED 03 A8 0A db 25h, 00h,0EDh, 03h,0A8h, 0Ah
-31E4:784A 00 00 A9 0A 00 00 db 00h, 00h,0A9h, 0Ah, 00h, 00h
-31E4:7850 25 00 ED 03 AA 0A db 25h, 00h,0EDh, 03h,0AAh, 0Ah
-31E4:7856 00 00 AB 0A 00 00 db 00h, 00h,0ABh, 0Ah, 00h, 00h
-31E4:785C 1C 00 0E 00 00 00 db 1Ch, 00h, 0Eh, 00h, 00h, 00h
-31E4:7862 1C 00 13 00 00 00 db 1Ch, 00h, 13h, 00h, 00h, 00h
-31E4:7868 1C 00 20 00 A6 78 db 1Ch, 00h, 20h, 00h,0A6h, 78h
-31E4:786E 07 00 20 27 24 00 db 07h, 00h, 20h, 27h, 24h, 00h
-31E4:7874 29 04 db 29h, 04h
-31E4:7876 loc_2313:
-31E4:7876 9C pushf ; Push flags
-31E4:7877 78 25 js loc_2314 ; Jump if sign=1
-31E4:7879 00 29 add [bx+di],ch
-31E4:787B 04 72 add al,72h ; 'r'
-31E4:787D 09 00 or [bx+si],ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 478
-
-31E4:787F 00 73 09 add [bp+di+9],dh
-31E4:7882 00 00 add [bx+si],al
-31E4:7884 25 2900 and ax,2900h
-31E4:7887 04 74 add al,74h ; 't'
-31E4:7889 09 00 or [bx+si],ax
-31E4:788B 00 00 00 00 00 25 db 00h, 00h, 00h, 00h, 00h, 25h
-31E4:7891 00 29 04 75 09 00 db 00h, 29h, 04h, 75h, 09h, 00h
-31E4:7897 00 00 00 00 00 1C db 00h, 00h, 00h, 00h, 00h, 1Ch
-31E4:789D 00 db 00h
-31E4:789E loc_2314: ; xref 31E4:7877
-31E4:789E 0C 00 or al,0
-31E4:78A0 00 00 add [bx+si],al
-31E4:78A2 07 pop es
-31E4:78A3 00 1F add [bx],bl
-31E4:78A5 27 daa ; Decimal adjust
-31E4:78A6 1C 00 sbb al,0
-31E4:78A8 0A 00 or al,[bx+si]
-31E4:78AA 00 00 add [bx+si],al
-31E4:78AC 1C 00 sbb al,0
-31E4:78AE 0E push cs
-31E4:78AF 00 00 add [bx+si],al
-31E4:78B1 00 1C add [si],bl
-31E4:78B3 00 13 add [bp+di],dl
-31E4:78B5 00 00 add [bx+si],al
-31E4:78B7 00 1C add [si],bl
-31E4:78B9 00 20 add [bx+si],ah
-31E4:78BB 00 FC add ah,bh
-31E4:78BD 78 07 js loc_2315 ; Jump if sign=1
-31E4:78BF 00 20 add [bx+si],ah
-31E4:78C1 27 daa ; Decimal adjust
-31E4:78C2 24 00 and al,0
-31E4:78C4 29 04 sub [si],ax
-31E4:78C6 loc_2315: ; xref 31E4:78BD
-31E4:78C6 F2 78 25 00 29 04 db 0F2h, 78h, 25h, 00h, 29h, 04h
-31E4:78CC 97 0B 00 00 98 0B db 97h, 0Bh, 00h, 00h, 98h, 0Bh
-31E4:78D2 00 00 25 00 29 04 db 00h, 00h, 25h, 00h, 29h, 04h
-31E4:78D8 99 0B 00 00 00 00 db 99h, 0Bh, 00h, 00h, 00h, 00h
-31E4:78DE 00 00 25 00 29 04 db 00h, 00h, 25h, 00h, 29h, 04h
-31E4:78E4 9A 0B 1E 00 00 00 db 9Ah, 0Bh, 1Eh, 00h, 00h, 00h
-31E4:78EA 00 00 1F 00 1F 00 db 00h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:78F0 1F 00 1C 00 0C 00 db 1Fh, 00h, 1Ch, 00h, 0Ch, 00h
-31E4:78F6 00 00 07 00 1F 27 db 00h, 00h, 07h, 00h, 1Fh, 27h
-31E4:78FC 1C 00 0A 00 00 00 db 1Ch, 00h, 0Ah, 00h, 00h, 00h
-31E4:7902 1C 00 0E 00 00 00 db 1Ch, 00h, 0Eh, 00h, 00h, 00h
-31E4:7908 1C 00 13 00 00 00 db 1Ch, 00h, 13h, 00h, 00h, 00h
-31E4:790E 1E 00 6C 1F 1C 00 db 1Eh, 00h, 6Ch, 1Fh, 1Ch, 00h
-31E4:7914 23 00 98 79 24 00 db 23h, 00h, 98h, 79h, 24h, 00h
-31E4:791A 36 04 96 79 1E 00 db 36h, 04h, 96h, 79h, 1Eh, 00h
-31E4:7920 44 1F 25 00 36 04 db 44h, 1Fh, 25h, 00h, 36h, 04h
-31E4:7926 D6 0B 00 00 D7 0B db 0D6h, 0Bh, 00h, 00h,0D7h, 0Bh
-31E4:792C 00 00 25 00 36 04 db 00h, 00h, 25h, 00h, 36h, 04h
-31E4:7932 D8 0B 00 00 D9 0B db 0D8h, 0Bh, 00h, 00h,0D9h, 0Bh
-31E4:7938 00 00 25 00 db 00h, 00h, 25h, 00h
-31E4:793C 36 db 36h
-31E4:793D loc_2316:
-31E4:793D 04 DA add al,0DAh
-31E4:793F 0B 00 or ax,[bx+si]
-31E4:7941 00 00 00 00 00 22 db 00h, 00h, 00h, 00h, 00h, 22h
-31E4:7947 00 96 79 25 00 36 db 00h, 96h, 79h, 25h, 00h, 36h
-31E4:794D 04 DB 0B 00 00 DC db 04h,0DBh, 0Bh, 00h, 00h,0DCh
-31E4:7953 0B 00 00 25 00 36 db 0Bh, 00h, 00h, 25h, 00h, 36h
-31E4:7959 04 DD 0B 00 00 DE db 04h,0DDh, 0Bh, 00h, 00h,0DEh
-31E4:795F 0B 00 00 25 00 36 db 0Bh, 00h, 00h, 25h, 00h, 36h
-31E4:7965 04 DF 0B 00 00 E0 db 04h,0DFh, 0Bh, 00h, 00h,0E0h
-31E4:796B 0B 00 00 22 00 96 db 0Bh, 00h, 00h, 22h, 00h, 96h
-31E4:7971 79 25 00 36 04 E1 db 79h, 25h, 00h, 36h, 04h,0E1h
-31E4:7977 0B 00 00 E2 0B 00 db 0Bh, 00h, 00h,0E2h, 0Bh, 00h
-31E4:797D 00 25 00 36 04 E3 db 00h, 25h, 00h, 36h, 04h,0E3h
-31E4:7983 0B 00 00 E4 0B 00 db 0Bh, 00h, 00h,0E4h, 0Bh, 00h
-31E4:7989 00 25 00 36 04 E5 db 00h, 25h, 00h, 36h, 04h,0E5h
-31E4:798F 0B 00 00 00 00 00 db 0Bh, 00h, 00h, 00h, 00h, 00h
-31E4:7995 00 1F 00 1C 00 0C db 00h, 1Fh, 00h, 1Ch, 00h, 0Ch
-31E4:799B 00 00 00 1C 00 0A db 00h, 00h, 00h, 1Ch, 00h, 0Ah
-31E4:79A1 00 00 00 22 00 5C db 00h, 00h, 00h, 22h, 00h, 5Ch
-31E4:79A7 78 1C 00 0F 00 00 db 78h, 1Ch, 00h, 0Fh, 00h, 00h
-31E4:79AD 00 21 00 E6 03 1F db 00h, 21h, 00h,0E6h, 03h, 1Fh
-31E4:79B3 00 1F 00 1F 00 1F db 00h, 1Fh, 00h, 1Fh, 00h, 1Fh
-31E4:79B9 00 1F 00 1F 00 1F db 00h, 1Fh, 00h, 1Fh, 00h, 1Fh
-31E4:79BF 00 1F 00 1F 00 1F db 00h, 1Fh, 00h, 1Fh, 00h, 1Fh
-31E4:79C5 00 1F 00 1F 00 1F db 00h, 1Fh, 00h, 1Fh, 00h, 1Fh
-31E4:79CB 00 1F 00 1E 00 31 db 00h, 1Fh, 00h, 1Eh, 00h, 31h
-31E4:79D1 27 22 00 5C 78 03 db 27h, 22h, 00h, 5Ch, 78h, 03h
-31E4:79D7 00 0B D1 16 12 8C db 00h, 0Bh,0D1h, 16h, 12h, 8Ch
-31E4:79DD 1B 18 81 1D 00 0C db 1Bh, 18h, 81h, 1Dh, 00h, 0Ch
-31E4:79E3 82 00 D6 79 0A 00 db 82h, 00h,0D6h, 79h, 0Ah, 00h
-31E4:79E9 00 67 71 00 00 75 db 00h, 67h, 71h, 00h, 00h, 75h
-31E4:79EF 01 E5 00 20 00 30 db 01h,0E5h, 00h, 20h, 00h, 30h
-31E4:79F5 00 01 01 82 4F 20 db 00h, 01h, 01h, 82h, 4Fh, 20h
-31E4:79FB 00 30 00 08 00 00 db 00h, 30h, 00h, 08h, 00h, 00h
-31E4:7A01 00 FE 5C 8F 00 db 00h,0FEh, 5Ch, 8Fh, 00h
-31E4:7A06 0008[00] db 8 dup (0)
-31E4:7A0E 15 16 00 00 96 00 db 15h, 16h, 00h, 00h, 96h, 00h
-31E4:7A14 00 00 F8 04 28 00 db 00h, 00h,0F8h, 04h, 28h, 00h
-31E4:7A1A 00 00 00 50 0B db 00h, 00h, 00h, 50h, 0Bh
-31E4:7A1F 0007[00] db 7 dup (0)
-31E4:7A26 DA 13 db 0DAh, 13h
-31E4:7A28 0013[00] db 19 dup (0)
-31E4:7A3B 13 68 00 00 00 00 db 13h, 68h, 00h, 00h, 00h, 00h
-31E4:7A41 00 00 00 02 5D 7A db 00h, 00h, 00h, 02h, 5Dh, 7Ah
-31E4:7A47 0F db 0Fh
-31E4:7A48 0015[00] db 21 dup (0)
-31E4:7A5D 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7A63 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7A69 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7A6F 1C 00 15 00 00 00 db 1Ch, 00h, 15h, 00h, 00h, 00h
-31E4:7A75 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7A7B 1F 00 1C 00 12 00 db 1Fh, 00h, 1Ch, 00h, 12h, 00h
-31E4:7A81 00 00 1C 00 19 00 db 00h, 00h, 1Ch, 00h, 19h, 00h
-31E4:7A87 00 00 20 00 1F 00 db 00h, 00h, 20h, 00h, 1Fh, 00h
-31E4:7A8D 1F 00 1F 00 1C 00 db 1Fh, 00h, 1Fh, 00h, 1Ch, 00h
-31E4:7A93 17 00 00 00 20 00 db 17h, 00h, 00h, 00h, 20h, 00h
-31E4:7A99 1F 00 1C 00 15 00 db 1Fh, 00h, 1Ch, 00h, 15h, 00h
-31E4:7A9F 00 00 1C 00 14 00 db 00h, 00h, 1Ch, 00h, 14h, 00h
-31E4:7AA5 00 00 1C 00 0D 00 db 00h, 00h, 1Ch, 00h, 0Dh, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 480
-
-31E4:7AAB 00 00 1E 00 80 1F db 00h, 00h, 1Eh, 00h, 80h, 1Fh
-31E4:7AB1 1C 00 0F 00 00 00 db 1Ch, 00h, 0Fh, 00h, 00h, 00h
-31E4:7AB7 20 00 22 00 5D 7A db 20h, 00h, 22h, 00h, 5Dh, 7Ah
-31E4:7ABD 1C 00 09 00 00 00 db 1Ch, 00h, 09h, 00h, 00h, 00h
-31E4:7AC3 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7AC9 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7ACF 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7AD5 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7ADB 1C 00 07 00 00 00 db 1Ch, 00h, 07h, 00h, 00h, 00h
-31E4:7AE1 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7AE7 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7AED 1E 00 94 1F 22 00 db 1Eh, 00h, 94h, 1Fh, 22h, 00h
-31E4:7AF3 BD 7A 1C 00 1D 00 db 0BDh, 7Ah, 1Ch, 00h, 1Dh, 00h
-31E4:7AF9 15 7B 07 00 16 27 db 15h, 7Bh, 07h, 00h, 16h, 27h
-31E4:7AFF 24 00 20 04 15 7B db 24h, 00h, 20h, 04h, 15h, 7Bh
-31E4:7B05 25 00 20 04 51 0B db 25h, 00h, 20h, 04h, 51h, 0Bh
-31E4:7B0B 00 00 52 0B 00 00 db 00h, 00h, 52h, 0Bh, 00h, 00h
-31E4:7B11 1F 00 1F 00 00 00 db 1Fh, 00h, 1Fh, 00h, 00h, 00h
-31E4:7B17 02 00 0B F7 19 12 db 02h, 00h, 0Bh,0F7h, 19h, 12h
-31E4:7B1D 8C 1B 00 0C 82 00 db 8Ch, 1Bh, 00h, 0Ch, 82h, 00h
-31E4:7B23 17 7B 24 00 00 67 db 17h, 7Bh, 24h, 00h, 00h, 67h
-31E4:7B29 71 00 00 6B 01 07 db 71h, 00h, 00h, 6Bh, 01h, 07h
-31E4:7B2F 01 20 00 30 00 01 db 01h, 20h, 00h, 30h, 00h, 01h
-31E4:7B35 01 82 4F 20 00 30 db 01h, 82h, 4Fh, 20h, 00h, 30h
-31E4:7B3B 00 08 00 00 00 3D db 00h, 08h, 00h, 00h, 00h, 3Dh
-31E4:7B41 5D 9E db 5Dh, 9Eh
-31E4:7B43 0009[00] db 9 dup (0)
-31E4:7B4C A8 15 00 00 96 00 db 0A8h, 15h, 00h, 00h, 96h, 00h
-31E4:7B52 00 00 F8 04 28 00 db 00h, 00h,0F8h, 04h, 28h, 00h
-31E4:7B58 00 00 00 50 0B db 00h, 00h, 00h, 50h, 0Bh
-31E4:7B5D 0007[00] db 7 dup (0)
-31E4:7B64 07 15 00 00 db 07h, 15h, 00h, 00h
-31E4:7B68 0011[00] db 17 dup (0)
-31E4:7B79 53 68 db 53h, 68h
-31E4:7B7B 0007[00] db 7 dup (0)
-31E4:7B82 02 9B 7B 24 db 02h, 9Bh, 7Bh, 24h
-31E4:7B86 0015[00] db 21 dup (0)
-31E4:7B9B 1C 00 14 00 00 00 db 1Ch, 00h, 14h, 00h, 00h, 00h
-31E4:7BA1 07 00 21 27 1C 00 db 07h, 00h, 21h, 27h, 1Ch, 00h
-31E4:7BA7 0F 00 00 00 1C 00 db 0Fh, 00h, 00h, 00h, 1Ch, 00h
-31E4:7BAD 11 00 00 00 1C 00 db 11h, 00h, 00h, 00h, 1Ch, 00h
-31E4:7BB3 0A 00 00 00 1C 00 db 0Ah, 00h, 00h, 00h, 1Ch, 00h
-31E4:7BB9 0C 00 00 00 1C 00 db 0Ch, 00h, 00h, 00h, 1Ch, 00h
-31E4:7BBF 14 00 00 00 1C 00 db 14h, 00h, 00h, 00h, 1Ch, 00h
-31E4:7BC5 24 00 9B 7B 07 00 db 24h, 00h, 9Bh, 7Bh, 07h, 00h
-31E4:7BCB 22 27 20 00 1F 00 db 22h, 27h, 20h, 00h, 1Fh, 00h
-31E4:7BD1 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7BD7 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7BDD 1F 00 1F 00 20 00 db 1Fh, 00h, 1Fh, 00h, 20h, 00h
-31E4:7BE3 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7BE9 1F 00 20 00 1F 00 db 1Fh, 00h, 20h, 00h, 1Fh, 00h
-31E4:7BEF 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7BF5 20 00 1F 00 1F 00 db 20h, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7BFB 1F 00 1F 00 20 00 db 1Fh, 00h, 1Fh, 00h, 20h, 00h
-31E4:7C01 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7C07 1F 00 22 00 9B 7B db 1Fh, 00h, 22h, 00h, 9Bh, 7Bh
-31E4:7C0D 03 00 0B 3B 1A 12 db 03h, 00h, 0Bh, 3Bh, 1Ah, 12h
-31E4:7C13 8C 1B 0D B0 1C 00 db 8Ch, 1Bh, 0Dh,0B0h, 1Ch, 00h
-31E4:7C19 0C 82 00 0D 7C 24 db 0Ch, 82h, 00h, 0Dh, 7Ch, 24h
-31E4:7C1F 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:7C25 F7 00 FD 00 20 00 db 0F7h, 00h,0FDh, 00h, 20h, 00h
-31E4:7C2B 30 00 01 01 82 4F db 30h, 00h, 01h, 01h, 82h, 4Fh
-31E4:7C31 20 00 30 00 08 00 db 20h, 00h, 30h, 00h, 08h, 00h
-31E4:7C37 00 00 52 5D 9E db 00h, 00h, 52h, 5Dh, 9Eh
-31E4:7C3C 0009[00] db 9 dup (0)
-31E4:7C45 A8 15 00 00 96 00 db 0A8h, 15h, 00h, 00h, 96h, 00h
-31E4:7C4B 00 00 F8 04 00 db 00h, 00h,0F8h, 04h, 00h
-31E4:7C50 000D[00] db 13 dup (0)
-31E4:7C5D 07 15 00 00 db 07h, 15h, 00h, 00h
-31E4:7C61 0011[00] db 17 dup (0)
-31E4:7C72 F3 68 db 0F3h, 68h
-31E4:7C74 0007[00] db 7 dup (0)
-31E4:7C7B 02 94 7C 24 db 02h, 94h, 7Ch, 24h
-31E4:7C7F 0015[00] db 21 dup (0)
-31E4:7C94 1C 00 14 00 00 00 db 1Ch, 00h, 14h, 00h, 00h, 00h
-31E4:7C9A 22 00 AC 7C 1F 00 db 22h, 00h,0ACh, 7Ch, 1Fh, 00h
-31E4:7CA0 1F 00 1C 00 14 00 db 1Fh, 00h, 1Ch, 00h, 14h, 00h
-31E4:7CA6 00 00 07 00 21 27 db 00h, 00h, 07h, 00h, 21h, 27h
-31E4:7CAC 1C 00 0F 00 00 00 db 1Ch, 00h, 0Fh, 00h, 00h, 00h
-31E4:7CB2 1C 00 11 00 00 00 db 1Ch, 00h, 11h, 00h, 00h, 00h
-31E4:7CB8 1C 00 0A 00 00 00 db 1Ch, 00h, 0Ah, 00h, 00h, 00h
-31E4:7CBE 1C 00 0C 00 00 00 db 1Ch, 00h, 0Ch, 00h, 00h, 00h
-31E4:7CC4 1C 00 14 00 00 00 db 1Ch, 00h, 14h, 00h, 00h, 00h
-31E4:7CCA 1C 00 24 00 9E 7C db 1Ch, 00h, 24h, 00h, 9Eh, 7Ch
-31E4:7CD0 07 00 22 27 20 00 db 07h, 00h, 22h, 27h, 20h, 00h
-31E4:7CD6 1F 00 db 1Fh, 00h
-31E4:7CD8 loc_2317:
-31E4:7CD8 1F pop ds
-31E4:7CD9 00 1F add [bx],bl
-31E4:7CDB 00 1F add [bx],bl
-31E4:7CDD 00 20 add [bx+si],ah
-31E4:7CDF 00 1F add [bx],bl
-31E4:7CE1 00 1F add [bx],bl
-31E4:7CE3 00 1F add [bx],bl
-31E4:7CE5 00 1F add [bx],bl
-31E4:7CE7 00 20 add [bx+si],ah
-31E4:7CE9 00 1F add [bx],bl
-31E4:7CEB 00 1F add [bx],bl
-31E4:7CED 00 1F add [bx],bl
-31E4:7CEF 00 1F add [bx],bl
-31E4:7CF1 00 20 add [bx+si],ah
-31E4:7CF3 00 1F add [bx],bl
-31E4:7CF5 00 1F add [bx],bl
-31E4:7CF7 00 1F add [bx],bl
-31E4:7CF9 00 1F add [bx],bl
-31E4:7CFB 00 20 add [bx+si],ah
-31E4:7CFD 00 1F add [bx],bl
-31E4:7CFF 00 1F add [bx],bl
-31E4:7D01 00 1F add [bx],bl
-31E4:7D03 00 1F add [bx],bl
-31E4:7D05 00 20 add [bx+si],ah
-31E4:7D07 00 1F add [bx],bl
-31E4:7D09 00 1F add [bx],bl
-31E4:7D0B 00 1F add [bx],bl
-31E4:7D0D 00 1F add [bx],bl
-31E4:7D0F 00 22 add [bp+si],ah
-31E4:7D11 00 9E 037C add [bp+37Ch],bl
-31E4:7D15 00 0B add [bp+di],cl
-31E4:7D17 CB retf ; Return far
-31E4:7D18 25 0D CA 1C 12 8C db 25h, 0Dh,0CAh, 1Ch, 12h, 8Ch
-31E4:7D1E 1B 00 00 db 1Bh, 00h, 00h
-
-31E4:7D21 goewin_hotspot_rec:
-31E4:7D21 00 00 00 db 00h, 00h, 00h
-31E4:7D24 00 14 7D 1F 00 00 db 00h, 14h, 7Dh, 1Fh, 00h, 00h
-31E4:7D2A 67 71 00 00 11 01 db 67h, 71h, 00h, 00h, 11h, 01h
-31E4:7D30 E6 00 20 00 30 00 db 0E6h, 00h, 20h, 00h, 30h, 00h
-31E4:7D36 01 01 80 81 20 00 db 01h, 01h, 80h, 81h, 20h, 00h
-31E4:7D3C 30 00 08 00 00 00 db 30h, 00h, 08h, 00h, 00h, 00h
-31E4:7D42 1E 59 9E 3A 04 db 1Eh, 59h, 9Eh, 3Ah, 04h
-31E4:7D47 0007[00] db 7 dup (0)
-31E4:7D4E 5B 15 00 00 96 00 db 5Bh, 15h, 00h, 00h, 96h, 00h
-31E4:7D54 00 00 F8 04 00 db 00h, 00h,0F8h, 04h, 00h
-31E4:7D59 000D[00] db 13 dup (0)
-31E4:7D66 2D 14 00 db 2Dh, 14h, 00h
-31E4:7D69 0012[00] db 18 dup (0)
-31E4:7D7B 93 68 D3 68 00 00 db 93h, 68h,0D3h, 68h, 00h, 00h
-31E4:7D81 00 00 00 02 9D 7D db 00h, 00h, 00h, 02h, 9Dh, 7Dh
-31E4:7D87 0E db 0Eh
-31E4:7D88 0015[00] db 21 dup (0)
-31E4:7D9D 1C 00 22 00 00 00 db 1Ch, 00h, 22h, 00h, 00h, 00h
-31E4:7DA3 21 00 4A 75 1E 00 db 21h, 00h, 4Ah, 75h, 1Eh, 00h
-31E4:7DA9 CD 1D 1C 00 0A 00 db 0CDh, 1Dh, 1Ch, 00h, 0Ah, 00h
-31E4:7DAF 00 00 07 00 25 27 db 00h, 00h, 07h, 00h, 25h, 27h
-31E4:7DB5 1C 00 14 00 00 00 db 1Ch, 00h, 14h, 00h, 00h, 00h
-31E4:7DBB 1C 00 11 00 00 00 db 1Ch, 00h, 11h, 00h, 00h, 00h
-31E4:7DC1 1C 00 0F 00 00 00 db 1Ch, 00h, 0Fh, 00h, 00h, 00h
-31E4:7DC7 22 00 9D 7D 1C 00 db 22h, 00h, 9Dh, 7Dh, 1Ch, 00h
-31E4:7DCD 0F 00 00 00 21 00 db 0Fh, 00h, 00h, 00h, 21h, 00h
-31E4:7DD3 E6 03 1F 00 1F 00 db 0E6h, 03h, 1Fh, 00h, 1Fh, 00h
-31E4:7DD9 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7DDF 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7DE5 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7DEB 1F 00 1F 00 1F 00 db 1Fh, 00h, 1Fh, 00h, 1Fh, 00h
-31E4:7DF1 1E 00 31 27 22 00 db 1Eh, 00h, 31h, 27h, 22h, 00h
-31E4:7DF7 9D 7D 1C 00 26 00 db 9Dh, 7Dh, 1Ch, 00h, 26h, 00h
-31E4:7DFD F9 7D 20 00 20 00 db 0F9h, 7Dh, 20h, 00h, 20h, 00h
-31E4:7E03 22 00 01 7E 09 02 db 22h, 00h, 01h, 7Eh, 09h, 02h
-31E4:7E09 00 10 32 7E 02 00 db 00h, 10h, 32h, 7Eh, 02h, 00h
-31E4:7E0F 00 db 00h
-31E4:7E10 loc_2318:
-31E4:7E10 72 71 jc loc_2322 ; Jump if carry Set
-31E4:7E12 00 00 add [bx+si],al
-31E4:7E14 08 01 or [bx+di],al
-31E4:7E16 loc_2320:
-31E4:7E16 C7 00 0010 mov word ptr [bx+si],10h
-31E4:7E1A 0B 00 or ax,[bx+si]
-31E4:7E1C 03 01 add ax,[bx+di]
-31E4:7E1E 3A 7F 08 cmp bh,[bx+8]
-31E4:7E21 00 2F add [bx],ch
-31E4:7E23 00 02 add [bp+si],al
-31E4:7E25 00 00 add [bx+si],al
-31E4:7E27 00 3D add [di],bh
-31E4:7E29 58 pop ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 483
-
-31E4:7E2A 00 58 06 add [bx+si+6],bl
-31E4:7E2D 00 00 00 00 00 02 db 00h, 00h, 00h, 00h, 00h, 02h
-31E4:7E33 00 01 0B 80 04 0B db 00h, 01h, 0Bh, 80h, 04h, 0Bh
-31E4:7E39 80 09 02 00 10 32 db 80h, 09h, 02h, 00h, 10h, 32h
-31E4:7E3F 7E 02 00 00 72 71 db 7Eh, 02h, 00h, 00h, 72h, 71h
-31E4:7E45 00 00 2C 01 C7 00 db 00h, 00h, 2Ch, 01h,0C7h, 00h
-31E4:7E4B 10 00 0B 00 03 01 db 10h, 00h, 0Bh, 00h, 03h, 01h
-31E4:7E51 3A 7F 08 00 2F 00 db 3Ah, 7Fh, 08h, 00h, 2Fh, 00h
-31E4:7E57 02 00 00 00 3D 58 db 02h, 00h, 00h, 00h, 3Dh, 58h
-31E4:7E5D 00 4E 06 00 00 00 db 00h, 4Eh, 06h, 00h, 00h, 00h
-31E4:7E63 00 06 03 00 01 0B db 00h, 06h, 03h, 00h, 01h, 0Bh
-31E4:7E69 80 10 20 0A 0A 37 db 80h, 10h, 20h, 0Ah, 0Ah, 37h
-31E4:7E6F 0A db 0Ah
-
- oil_burner_hotspot_rec:
-31E4:7E70 01 02 00 50 65 db 01h, 02h, 00h, 50h, 65h
-31E4:7E75 7E 1E 00 00 72 71 db 7Eh, 1Eh, 00h, 00h, 72h, 71h
-31E4:7E7B 00 00 78 00 05 01 db 00h, 00h, 78h, 00h, 05h, 01h
-31E4:7E81 10 00 db 10h, 00h
-31E4:7E83 loc_2322: ; xref 31E4:7E10
-31E4:7E83 06 push es
-31E4:7E84 00 02 add [bp+si],al
-31E4:7E86 01 BD 0241 add data_539[di],di ; (31E4:0241=0)
-31E4:7E8A 00 46 00 add [bp],al
-31E4:7E8D 02 00 add al,[bx+si]
-31E4:7E8F 00 00 add [bx+si],al
-31E4:7E91 27 daa ; Decimal adjust
-31E4:7E92 59 pop cx
-31E4:7E93 00 1C add [si],bl
-31E4:7E95 06 push es
-31E4:7E96 0008[00] db 8 dup (0)
-31E4:7E9E 20 57 6D A8 01 00 db 20h, 57h, 6Dh,0A8h, 01h, 00h
-31E4:7EA4 67 71 00 00 78 00 db 67h, 71h, 00h, 00h, 78h, 00h
-31E4:7EAA 05 01 30 00 44 00 db 05h, 01h, 30h, 00h, 44h, 00h
-31E4:7EB0 01 01 C6 80 2F 00 db 01h, 01h,0C6h, 80h, 2Fh, 00h
-31E4:7EB6 44 00 02 00 00 00 db 44h, 00h, 02h, 00h, 00h, 00h
-31E4:7EBC 30 59 db 30h, 59h
-31E4:7EBE 000B[00] db 11 dup (0)
-31E4:7EC9 20 57 6D 01 80 00 db 20h, 57h, 6Dh, 01h, 80h, 00h
-31E4:7ECF 72 71 00 00 47 01 db 72h, 71h, 00h, 00h, 47h, 01h
-31E4:7ED5 F2 00 10 00 19 00 db 0F2h, 00h, 10h, 00h, 19h, 00h
-31E4:7EDB 03 01 69 7F 10 00 db 03h, 01h, 69h, 7Fh, 10h, 00h
-31E4:7EE1 19 00 04 00 00 00 db 19h, 00h, 04h, 00h, 00h, 00h
-31E4:7EE7 C4 58 00 84 01 00 db 0C4h, 58h, 00h, 84h, 01h, 00h
-31E4:7EED 00 00 00 01 02 00 db 00h, 00h, 00h, 01h, 02h, 00h
-31E4:7EF3 50 1A 7F 01 00 00 db 50h, 1Ah, 7Fh, 01h, 00h, 00h
-31E4:7EF9 BD 41 00 00 38 01 db 0BDh, 41h, 00h, 00h, 38h, 01h
-31E4:7EFF E8 00 20 00 3D 00 db 0E8h, 00h, 20h, 00h, 3Dh, 00h
-31E4:7F05 03 01 09 80 20 00 db 03h, 01h, 09h, 80h, 20h, 00h
-31E4:7F0B 35 00 04 00 00 00 db 35h, 00h, 04h, 00h, 00h, 00h
-31E4:7F11 CD 58 00 82 02 00 db 0CDh, 58h, 00h, 82h, 02h, 00h
-31E4:7F17 00 00 00 01 00 01 db 00h, 00h, 00h, 01h, 00h, 01h
-31E4:7F1D 1D 80 00 00 00 20 db 1Dh, 80h, 00h, 00h, 00h, 20h
-31E4:7F23 57 6D 01 00 00 BD db 57h, 6Dh, 01h, 00h, 00h,0BDh
-31E4:7F29 41 00 00 40 01 64 db 41h, 00h, 00h, 40h, 01h, 64h
-31E4:7F2F 00 20 00 0C 00 03 db 00h, 20h, 00h, 0Ch, 00h, 03h
-31E4:7F35 01 3A 7F 14 00 0C db 01h, 3Ah, 7Fh, 14h, 00h, 0Ch
-31E4:7F3B 00 04 00 14 00 34 db 00h, 04h, 00h, 14h, 00h, 34h
-31E4:7F41 58 00 26 02 00 00 db 58h, 00h, 26h, 02h, 00h, 00h
-31E4:7F47 00 00 00 00 00 20 db 00h, 00h, 00h, 00h, 00h, 20h
-31E4:7F4D 57 6D 04 00 00 72 db 57h, 6Dh, 04h, 00h, 00h, 72h
-31E4:7F53 71 00 00 C2 00 0F db 71h, 00h, 00h,0C2h, 00h, 0Fh
-31E4:7F59 01 20 00 0C 00 03 db 01h, 20h, 00h, 0Ch, 00h, 03h
-31E4:7F5F 01 54 7F 14 00 0C db 01h, 54h, 7Fh, 14h, 00h, 0Ch
-31E4:7F65 00 04 00 0A 00 34 db 00h, 04h, 00h, 0Ah, 00h, 34h
-31E4:7F6B 58 00 A4 01 00 00 db 58h, 00h,0A4h, 01h, 00h, 00h
-31E4:7F71 00 00 00 02 00 0A db 00h, 00h, 00h, 02h, 00h, 0Ah
-31E4:7F77 B7 0A 01 23 80 01 db 0B7h, 0Ah, 01h, 23h, 80h, 01h
-31E4:7F7D 02 00 00 74 7F 07 db 02h, 00h, 00h, 74h, 7Fh, 07h
-31E4:7F83 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:7F89 19 01 C9 00 10 00 db 19h, 01h,0C9h, 00h, 10h, 00h
-31E4:7F8F 37 00 03 00 3A 7F db 37h, 00h, 03h, 00h, 3Ah, 7Fh
-31E4:7F95 0E 00 37 00 01 00 db 0Eh, 00h, 37h, 00h, 01h, 00h
-31E4:7F9B 00 00 BB 58 00 9E db 00h, 00h,0BBh, 58h, 00h, 9Eh
-31E4:7FA1 02 00 db 02h, 00h
-31E4:7FA3 0007[00] db 7 dup (0)
-31E4:7FAA 20 57 6D 07 00 00 db 20h, 57h, 6Dh, 07h, 00h, 00h
-31E4:7FB0 72 71 00 00 1C 01 db 72h, 71h, 00h, 00h, 1Ch, 01h
-31E4:7FB6 CA 00 20 00 30 00 db 0CAh, 00h, 20h, 00h, 30h, 00h
-31E4:7FBC 01 01 A1 7F 10 00 db 01h, 01h,0A1h, 7Fh, 10h, 00h
-31E4:7FC2 30 00 04 00 00 00 db 30h, 00h, 04h, 00h, 00h, 00h
-31E4:7FC8 B2 58 80 A8 02 00 db 0B2h, 58h, 80h,0A8h, 02h, 00h
-31E4:7FCE 00 00 00 00 09 02 db 00h, 00h, 00h, 00h, 09h, 02h
-31E4:7FD4 00 10 FD 7F 01 00 db 00h, 10h,0FDh, 7Fh, 01h, 00h
-31E4:7FDA 00 AC 88 00 00 4D db 00h,0ACh, 88h, 00h, 00h, 4Dh
-31E4:7FE0 01 EB 00 10 00 18 db 01h,0EBh, 00h, 10h, 00h, 18h
-31E4:7FE6 00 03 01 3A 7F 0B db 00h, 03h, 01h, 3Ah, 7Fh, 0Bh
-31E4:7FEC 00 3B 00 02 00 00 db 00h, 3Bh, 00h, 02h, 00h, 00h
-31E4:7FF2 00 97 58 00 4E 06 db 00h, 97h, 58h, 00h, 4Eh, 06h
-31E4:7FF8 00 00 00 00 00 02 db 00h, 00h, 00h, 00h, 00h, 02h
-31E4:7FFE 00 01 db 00h, 01h
-31E4:8000 E4 data_962 db 0E4h
-31E4:8001 03 04 E4 03 11 02 db 03h, 04h,0E4h, 03h, 11h, 02h
-31E4:8007 00 00 2F 80 04 00 db 00h, 00h, 2Fh, 80h, 04h, 00h
-31E4:800D 00 72 71 00 00 F2 db 00h, 72h, 71h, 00h, 00h,0F2h
-31E4:8013 00 0C 01 30 00 10 db 00h, 0Ch, 01h, 30h, 00h, 10h
-31E4:8019 00 00 00 BD 41 08 db 00h, 00h, 00h,0BDh, 41h, 08h
-31E4:801F 00 20 00 10 00 00 db 00h, 20h, 00h, 10h, 00h, 00h
-31E4:8025 00 db 00h
-31E4:8026 3D 58 db 3Dh, 58h
-31E4:8028 0007[00] db 7 dup (0)
-31E4:802F 02 00 01 10 80 05 db 02h, 00h, 01h, 10h, 80h, 05h
-31E4:8035 0A 07 00 08 00 00 db 0Ah, 07h, 00h, 08h, 00h, 00h
-31E4:803B 7C 80 04 00 00 67 db 7Ch, 80h, 04h, 00h, 00h, 67h
-31E4:8041 71 00 00 AA 00 0C db 71h, 00h, 00h,0AAh, 00h, 0Ch
-31E4:8047 01 50 00 0E 00 01 db 01h, 50h, 00h, 0Eh, 00h, 01h
-31E4:804D 01 2A 88 49 00 1E db 01h, 2Ah, 88h, 49h, 00h, 1Eh
-31E4:8053 00 02 00 00 00 A0 db 00h, 02h, 00h, 00h, 00h,0A0h
-31E4:8059 58 AD db 58h,0ADh
-31E4:805B 000D[00] db 13 dup (0)
-31E4:8068 96 00 00 00 0A db 96h, 00h, 00h, 00h, 0Ah
-31E4:806D 000F[00] db 15 dup (0)
-31E4:807C 01 00 0C 93 1A 00 db 01h, 00h, 0Ch, 93h, 1Ah, 00h
-31E4:8082 0C 00 00 C6 80 02 db 0Ch, 00h, 00h,0C6h, 80h, 02h
-31E4:8088 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:808E AA 00 CF 00 10 00 db 0AAh, 00h,0CFh, 00h, 10h, 00h
-31E4:8094 10 00 03 01 B3 81 db 10h, 00h, 03h, 01h,0B3h, 81h
-31E4:809A 08 00 3E 00 02 00 db 08h, 00h, 3Eh, 00h, 02h, 00h
-31E4:80A0 00 00 A9 58 00 E0 db 00h, 00h,0A9h, 58h, 00h,0E0h
-31E4:80A6 03 db 03h
-31E4:80A7 000B[00] db 11 dup (0)
-31E4:80B2 96 00 00 00 F8 06 db 96h, 00h, 00h, 00h,0F8h, 06h
-31E4:80B8 000E[00] db 14 dup (0)
-31E4:80C6 03 00 0C B7 1A 0B db 03h, 00h, 0Ch,0B7h, 1Ah, 0Bh
-31E4:80CC D4 1A 10 CB 12 00 db 0D4h, 1Ah, 10h,0CBh, 12h, 00h
-31E4:80D2 0C 82 00 45 88 1D db 0Ch, 82h, 00h, 45h, 88h, 1Dh
-31E4:80D8 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:80DE 10 01 C2 00 20 00 db 10h, 01h,0C2h, 00h, 20h, 00h
-31E4:80E4 16 00 03 01 A0 82 db 16h, 00h, 03h, 01h,0A0h, 82h
-31E4:80EA 20 00 16 00 02 00 db 20h, 00h, 16h, 00h, 02h, 00h
-31E4:80F0 00 00 db 00h, 00h
-31E4:80F2 73 58 db 73h, 58h
-31E4:80F4 000E[00] db 14 dup (0)
-31E4:8102 96 00 00 00 F4 06 db 96h, 00h, 00h, 00h,0F4h, 06h
-31E4:8108 28 00 00 00 00 50 db 28h, 00h, 00h, 00h, 00h, 50h
-31E4:810E 0B db 0Bh
-31E4:810F 0007[00] db 7 dup (0)
-31E4:8116 02 00 0B 49 17 12 db 02h, 00h, 0Bh, 49h, 17h, 12h
-31E4:811C 8C 1B 00 0C 82 00 db 8Ch, 1Bh, 00h, 0Ch, 82h, 00h
-31E4:8122 16 81 20 00 00 67 db 16h, 81h, 20h, 00h, 00h, 67h
-31E4:8128 71 00 00 10 01 C4 db 71h, 00h, 00h, 10h, 01h,0C4h
-31E4:812E 00 20 00 16 00 03 db 00h, 20h, 00h, 16h, 00h, 03h
-31E4:8134 01 A0 82 20 00 16 db 01h,0A0h, 82h, 20h, 00h, 16h
-31E4:813A 00 02 00 00 00 db 00h, 02h, 00h, 00h, 00h
-31E4:813F 7C 58 db 7Ch, 58h
-31E4:8141 000E[00] db 14 dup (0)
-31E4:814F 96 00 00 00 F2 06 db 96h, 00h, 00h, 00h,0F2h, 06h
-31E4:8155 28 00 00 00 00 50 db 28h, 00h, 00h, 00h, 00h, 50h
-31E4:815B 0B db 0Bh
-31E4:815C 0007[00] db 7 dup (0)
-31E4:8163 02 00 0B 9F 18 12 db 02h, 00h, 0Bh, 9Fh, 18h, 12h
-31E4:8169 8C 1B 00 0C 82 00 db 8Ch, 1Bh, 00h, 0Ch, 82h, 00h
-31E4:816F 63 81 23 00 00 67 db 63h, 81h, 23h, 00h, 00h, 67h
-31E4:8175 71 00 00 02 01 D8 db 71h, 00h, 00h, 02h, 01h,0D8h
-31E4:817B 00 10 00 17 00 03 db 00h, 10h, 00h, 17h, 00h, 03h
-31E4:8181 01 A0 82 10 00 17 db 01h,0A0h, 82h, 10h, 00h, 17h
-31E4:8187 00 02 00 00 00 E4 db 00h, 02h, 00h, 00h, 00h,0E4h
-31E4:818D 59 db 59h
-31E4:818E 000E[00] db 14 dup (0)
-31E4:819C 96 00 00 00 F0 06 db 96h, 00h, 00h, 00h,0F0h, 06h
-31E4:81A2 28 00 00 00 00 50 db 28h, 00h, 00h, 00h, 00h, 50h
-31E4:81A8 0B db 0Bh
-31E4:81A9 0007[00] db 7 dup (0)
-31E4:81B0 09 02 00 10 32 7E db 09h, 02h, 00h, 10h, 32h, 7Eh
-31E4:81B6 03 00 00 72 71 00 db 03h, 00h, 00h, 72h, 71h, 00h
-31E4:81BC 00 62 01 DF 00 10 db 00h, 62h, 01h,0DFh, 00h, 10h
-31E4:81C2 00 0B 00 03 01 3A db 00h, 0Bh, 00h, 03h, 01h, 3Ah
-31E4:81C8 7F 08 00 2F 00 02 db 7Fh, 08h, 00h, 2Fh, 00h, 02h
-31E4:81CE 00 00 00 3D 58 00 db 00h, 00h, 00h, 3Dh, 58h, 00h
-31E4:81D4 4E 06 00 00 00 00 db 4Eh, 06h, 00h, 00h, 00h, 00h
-31E4:81DA 00 09 02 00 10 32 db 00h, 09h, 02h, 00h, 10h, 32h
-31E4:81E0 7E 04 00 00 72 71 db 7Eh, 04h, 00h, 00h, 72h, 71h
-31E4:81E6 00 00 DC 00 DD 00 db 00h, 00h,0DCh, 00h,0DDh, 00h
-31E4:81EC 10 00 0B 00 01 01 db 10h, 00h, 0Bh, 00h, 01h, 01h
-31E4:81F2 3A 7F 08 00 2F 00 db 3Ah, 7Fh, 08h, 00h, 2Fh, 00h
-31E4:81F8 02 00 00 00 3D 58 db 02h, 00h, 00h, 00h, 3Dh, 58h
-31E4:81FE 00 4E 06 db 00h, 4Eh, 06h
-31E4:8201 0009[00] db 9 dup (0)
-31E4:820A 1A 7F 04 00 00 72 db 1Ah, 7Fh, 04h, 00h, 00h, 72h
-31E4:8210 71 00 00 12 01 F4 db 71h, 00h, 00h, 12h, 01h,0F4h
-31E4:8216 00 10 00 1B 00 03 db 00h, 10h, 00h, 1Bh, 00h, 03h
-31E4:821C 01 3A 7F 10 00 1B db 01h, 3Ah, 7Fh, 10h, 00h, 1Bh
-31E4:8222 00 02 00 00 00 D6 db 00h, 02h, 00h, 00h, 00h,0D6h
-31E4:8228 58 00 4E 06 db 58h, 00h, 4Eh, 06h
-31E4:822C 0008[00] db 8 dup (0)
-31E4:8234 20 57 6D 01 00 00 db 20h, 57h, 6Dh, 01h, 00h, 00h
-31E4:823A 72 71 00 00 58 01 db 72h, 71h, 00h, 00h, 58h, 01h
-31E4:8240 BC 00 10 00 0A 00 db 0BCh, 00h, 10h, 00h, 0Ah, 00h
-31E4:8246 01 01 3A 7F 0F 00 db 01h, 01h, 3Ah, 7Fh, 0Fh, 00h
-31E4:824C 0A 00 02 00 00 00 db 0Ah, 00h, 02h, 00h, 00h, 00h
-31E4:8252 DF 58 00 1C 01 00 db 0DFh, 58h, 00h, 1Ch, 01h, 00h
-31E4:8258 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:825E 01 00 87 82 01 00 db 01h, 00h, 87h, 82h, 01h, 00h
-31E4:8264 00 67 71 00 00 18 db 00h, 67h, 71h, 00h, 00h, 18h
-31E4:826A 01 58 00 10 00 10 db 01h, 58h, 00h, 10h, 00h, 10h
-31E4:8270 00 01 01 BD 41 10 db 00h, 01h, 01h,0BDh, 41h, 10h
-31E4:8276 00 10 00 02 00 00 db 00h, 10h, 00h, 02h, 00h, 00h
-31E4:827C 00 db 00h
-31E4:827D 34 58 db 34h, 58h
-31E4:827F 0008[00] db 8 dup (0)
-31E4:8287 01 00 11 1A 80 00 db 01h, 00h, 11h, 1Ah, 80h, 00h
-31E4:828D 00 00 00 57 6D 14 db 00h, 00h, 00h, 57h, 6Dh, 14h
-31E4:8293 00 00 17 86 00 00 db 00h, 00h, 17h, 86h, 00h, 00h
-31E4:8299 75 01 64 00 10 00 db 75h, 01h, 64h, 00h, 10h, 00h
-31E4:829F 10 00 03 01 BD 41 db 10h, 00h, 03h, 01h,0BDh, 41h
-31E4:82A5 10 00 10 00 02 00 db 10h, 00h, 10h, 00h, 02h, 00h
-31E4:82AB 00 00 db 00h, 00h
-31E4:82AD 42 59 db 42h, 59h
-31E4:82AF 0008[00] db 8 dup (0)
-31E4:82B7 03 00 01 10 80 04 db 03h, 00h, 01h, 10h, 80h, 04h
-31E4:82BD E5 0F 03 35 10 0D db 0E5h, 0Fh, 03h, 35h, 10h, 0Dh
-31E4:82C3 02 00 10 B7 82 26 db 02h, 00h, 10h,0B7h, 82h, 26h
-31E4:82C9 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:82CF 4C 01 C6 00 10 00 db 4Ch, 01h,0C6h, 00h, 10h, 00h
-31E4:82D5 0A 00 03 01 FA 86 db 0Ah, 00h, 03h, 01h,0FAh, 86h
-31E4:82DB 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:82E1 00 00 C9 db 00h, 00h,0C9h
-31E4:82E4 59 db 59h
-31E4:82E5 0008[00] db 8 dup (0)
-31E4:82ED 03 00 01 10 80 04 db 03h, 00h, 01h, 10h, 80h, 04h
-31E4:82F3 6F 0F 03 BF 0F 0D db 6Fh, 0Fh, 03h,0BFh, 0Fh, 0Dh
-31E4:82F9 02 00 10 ED 82 26 db 02h, 00h, 10h,0EDh, 82h, 26h
-31E4:82FF 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8305 E3 00 C6 00 10 00 db 0E3h, 00h,0C6h, 00h, 10h, 00h
-31E4:830B 0A 00 03 01 FF 86 db 0Ah, 00h, 03h, 01h,0FFh, 86h
-31E4:8311 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:8317 00 00 C9 db 00h, 00h,0C9h
-31E4:831A 59 db 59h
-31E4:831B 0008[00] db 8 dup (0)
-31E4:8323 03 00 01 10 80 03 db 03h, 00h, 01h, 10h, 80h, 03h
-31E4:8329 21 11 04 D1 10 0D db 21h, 11h, 04h,0D1h, 10h, 0Dh
-31E4:832F 02 00 10 23 83 27 db 02h, 00h, 10h, 23h, 83h, 27h
-31E4:8335 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:833B 4C 01 C6 00 10 00 db 4Ch, 01h,0C6h, 00h, 10h, 00h
-31E4:8341 0A 00 03 01 3D 87 db 0Ah, 00h, 03h, 01h, 3Dh, 87h
-31E4:8347 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:834D 00 00 C9 db 00h, 00h,0C9h
-31E4:8350 59 db 59h
-31E4:8351 0008[00] db 8 dup (0)
-31E4:8359 03 00 01 10 80 03 db 03h, 00h, 01h, 10h, 80h, 03h
-31E4:835F AB 10 04 5B 10 0D db 0ABh, 10h, 04h, 5Bh, 10h, 0Dh
-31E4:8365 02 00 10 59 83 27 db 02h, 00h, 10h, 59h, 83h, 27h
-31E4:836B 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8371 E3 00 C6 00 10 00 db 0E3h, 00h,0C6h, 00h, 10h, 00h
-31E4:8377 0A 00 03 01 1E 87 db 0Ah, 00h, 03h, 01h, 1Eh, 87h
-31E4:837D 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:8383 00 00 C9 db 00h, 00h,0C9h
-31E4:8386 59 db 59h
-31E4:8387 0008[00] db 8 dup (0)
-31E4:838F 03 00 01 10 80 03 db 03h, 00h, 01h, 10h, 80h, 03h
-31E4:8395 07 12 04 BD 11 0D db 07h, 12h, 04h,0BDh, 11h, 0Dh
-31E4:839B 02 00 10 8F 83 28 db 02h, 00h, 10h, 8Fh, 83h, 28h
-31E4:83A1 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:83A7 52 01 C6 00 10 00 db 52h, 01h,0C6h, 00h, 10h, 00h
-31E4:83AD 0A 00 03 00 47 87 db 0Ah, 00h, 03h, 00h, 47h, 87h
-31E4:83B3 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:83B9 00 00 C9 db 00h, 00h,0C9h
-31E4:83BC 59 db 59h
-31E4:83BD 0008[00] db 8 dup (0)
-31E4:83C5 03 00 01 10 80 03 db 03h, 00h, 01h, 10h, 80h, 03h
-31E4:83CB 97 11 04 47 11 0D db 97h, 11h, 04h, 47h, 11h, 0Dh
-31E4:83D1 02 00 10 C5 83 28 db 02h, 00h, 10h,0C5h, 83h, 28h
-31E4:83D7 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:83DD E9 00 C6 00 10 00 db 0E9h, 00h,0C6h, 00h, 10h, 00h
-31E4:83E3 0A 00 03 00 42 87 db 0Ah, 00h, 03h, 00h, 42h, 87h
-31E4:83E9 09 00 0A 00 02 00 db 09h, 00h, 0Ah, 00h, 02h, 00h
-31E4:83EF 00 00 C9 db 00h, 00h,0C9h
-31E4:83F2 59 db 59h
-31E4:83F3 0008[00] db 8 dup (0)
-
- sack_hotspot_rec
-31E4:83FB 2D 02 00 00 25 84 db 2Dh, 02h, 00h, 00h, 25h, 84h
-31E4:8401 03 00 00 67 71 db 03h, 00h, 00h, 67h, 71h
-31E4:8406 0000 data_8406 dw 0
-31E4:8408 015E dw 015Eh
-31E4:840A 0064 data_840a dw 64h
-31E4:840C 20 db 20h
-31E4:840D 00 0E 00 03 00 BD db 00h, 0Eh, 00h, 03h, 00h,0BDh
-31E4:8413 41 1B 00 18 00 02 db 41h, 1Bh, 00h, 18h, 00h, 02h
-31E4:8419 00 00 00 2B 58 40 db 00h, 00h, 00h, 2Bh, 58h, 40h
-31E4:841F 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8425 06 00 10 84 08 06 db 06h, 00h, 10h, 84h, 08h, 06h
-31E4:842B E4 08 01 10 80 04 db 0E4h, 08h, 01h, 10h, 80h, 04h
-31E4:8431 10 80 03 10 80 0A db 10h, 80h, 03h, 10h, 80h, 0Ah
-31E4:8437 44 08 01 02 00 00 db 44h, 08h, 01h, 02h, 00h, 00h
-31E4:843D 63 84 03 00 00 72 db 63h, 84h, 03h, 00h, 00h, 72h
-31E4:8443 71 00 00 64 01 09 db 71h, 00h, 00h, 64h, 01h, 09h
-31E4:8449 01 10 00 0C 00 01 db 01h, 10h, 00h, 0Ch, 00h, 01h
-31E4:844F 01 BD 41 04 00 0D db 01h,0BDh, 41h, 04h, 00h, 0Dh
-31E4:8455 00 04 00 00 00 19 db 00h, 04h, 00h, 00h, 00h, 19h
-31E4:845B 58 70 00 00 00 00 db 58h, 70h, 00h, 00h, 00h, 00h
-31E4:8461 00 00 03 00 19 D2 db 00h, 00h, 03h, 00h, 19h,0D2h
-31E4:8467 12 10 D2 12 14 0E db 12h, 10h,0D2h, 12h, 14h, 0Eh
-31E4:846D 00 db 00h
-
-31E4:846E 01 02 00 00 57 hotspot_2713 db 01h, 02h, 00h, 00h, 57h
-31E4:8473 6D 03 00 00 72 71 db 6Dh, 03h, 00h, 00h, 72h, 71h
-31E4:8479 00 00 BF 00 FB 00 db 00h, 00h,0BFh, 00h,0FBh, 00h
-31E4:847F 10 00 03 00 01 01 db 10h, 00h, 03h, 00h, 01h, 01h
-31E4:8485 BD 41 10 00 1E 00 db 0BDh, 41h, 10h, 00h, 1Eh, 00h
-31E4:848B 04 00 00 00 22 58 db 04h, 00h, 00h, 00h, 22h, 58h
-31E4:8491 70 00 00 00 00 00 db 70h, 00h, 00h, 00h, 00h, 00h
-31E4:8497 00 01 02 00 00 57 db 00h, 01h, 02h, 00h, 00h, 57h
-31E4:849D 6D 02 01 00 72 71 db 6Dh, 02h, 01h, 00h, 72h, 71h
-31E4:84A3 00 00 1D 01 07 01 db 00h, 00h, 1Dh, 01h, 07h, 01h
-31E4:84A9 10 00 03 00 01 01 db 10h, 00h, 03h, 00h, 01h, 01h
-31E4:84AF BD 41 06 00 03 00 db 0BDh, 41h, 06h, 00h, 03h, 00h
-31E4:84B5 02 db 02h
-31E4:84B6 000C[00] db 12 dup (0)
-31E4:84C2 01 00 19 F1 0D 01 db 01h, 00h, 19h,0F1h, 0Dh, 01h
-31E4:84C8 02 00 00 C2 84 db 02h, 00h, 00h,0C2h, 84h
-
-31E4:84CD 0102 hotspot_2713_hs5e dw 0102h
-31E4:84CF 00 72 71 00 00 db 00h, 72h, 71h, 00h, 00h
-31E4:84D4 1D 01 07 01 10 00 db 1Dh, 01h, 07h, 01h, 10h, 00h
-31E4:84DA 0F 00 01 01 BD 41 db 0Fh, 00h, 01h, 01h,0BDh, 41h
-31E4:84E0 0F 00 0F 00 02 db 0Fh, 00h, 0Fh, 00h, 02h
-31E4:84E5 000C[00] db 12 dup (0)
-31E4:84F1 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:84F7 02 01 00 72 71 00 db 02h, 01h, 00h, 72h, 71h, 00h
-31E4:84FD 00 1D 01 07 01 10 db 00h, 1Dh, 01h, 07h, 01h, 10h
-31E4:8503 00 0F 00 01 01 BD db 00h, 0Fh, 00h, 01h, 01h,0BDh
-31E4:8509 41 0F 00 0F 00 02 db 41h, 0Fh, 00h, 0Fh, 00h, 02h
-31E4:850F 000C[00] db 12 dup (0)
-31E4:851B 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:8521 02 01 00 72 71 00 db 02h, 01h, 00h, 72h, 71h, 00h
-31E4:8527 00 1D 01 07 01 10 db 00h, 1Dh, 01h, 07h, 01h, 10h
-31E4:852D 00 0F 00 01 01 BD db 00h, 0Fh, 00h, 01h, 01h,0BDh
-31E4:8533 41 0F 00 0F 00 02 db 41h, 0Fh, 00h, 0Fh, 00h, 02h
-31E4:8539 000C[00] db 12 dup (0)
-31E4:8545 01 02 00 20 57 6D db 01h, 02h, 00h, 20h, 57h, 6Dh
-31E4:854B 12 00 00 72 71 00 db 12h, 00h, 00h, 72h, 71h, 00h
-31E4:8551 00 BC 00 EF 00 10 db 00h,0BCh, 00h,0EFh, 00h, 10h
-31E4:8557 00 08 00 01 01 BD db 00h, 08h, 00h, 01h, 01h,0BDh
-31E4:855D 41 08 00 08 00 02 db 41h, 08h, 00h, 08h, 00h, 02h
-31E4:8563 00 00 00 8F 5A 00 db 00h, 00h, 00h, 8Fh, 5Ah, 00h
-31E4:8569 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:856F 01 02 00 20 57 6D db 01h, 02h, 00h, 20h, 57h, 6Dh
-31E4:8575 0E 00 00 72 71 00 db 0Eh, 00h, 00h, 72h, 71h, 00h
-31E4:857B 00 8C 01 FE 00 10 db 00h, 8Ch, 01h,0FEh, 00h, 10h
-31E4:8581 00 06 00 01 01 BD db 00h, 06h, 00h, 01h, 01h,0BDh
-31E4:8587 41 0A 00 06 00 02 db 41h, 0Ah, 00h, 06h, 00h, 02h
-31E4:858D 00 00 00 98 5A 00 db 00h, 00h, 00h, 98h, 5Ah, 00h
-31E4:8593 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8599 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:859F 02 01 00 72 71 00 db 02h, 01h, 00h, 72h, 71h, 00h
-31E4:85A5 00 1D 01 07 01 10 db 00h, 1Dh, 01h, 07h, 01h, 10h
-31E4:85AB 00 0F 00 01 01 BD db 00h, 0Fh, 00h, 01h, 01h,0BDh
-31E4:85B1 41 0F 00 0F 00 02 db 41h, 0Fh, 00h, 0Fh, 00h, 02h
-31E4:85B7 000C[00] db 12 dup (0)
-31E4:85C3 01 00 01 13 04 01 db 01h, 00h, 01h, 13h, 04h, 01h
-31E4:85C9 02 00 40 C3 85 2B db 02h, 00h, 40h,0C3h, 85h, 2Bh
-31E4:85CF 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:85D5 F3 00 F0 00 10 00 db 0F3h, 00h,0F0h, 00h, 10h, 00h
-31E4:85DB 0D 00 03 01 BD 41 db 0Dh, 00h, 03h, 01h,0BDh, 41h
-31E4:85E1 0F 00 0F 00 02 00 db 0Fh, 00h, 0Fh, 00h, 02h, 00h
-31E4:85E7 00 00 BC 5A 00 00 db 00h, 00h,0BCh, 5Ah, 00h, 00h
-31E4:85ED 00 00 00 00 00 01 db 00h, 00h, 00h, 00h, 00h, 01h
-31E4:85F3 02 00 00 57 6D 2B db 02h, 00h, 00h, 57h, 6Dh, 2Bh
-31E4:85F9 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:85FF 0E 01 F0 00 10 00 db 0Eh, 01h,0F0h, 00h, 10h, 00h
-31E4:8605 0D 00 03 01 BD 41 db 0Dh, 00h, 03h, 01h,0BDh, 41h
-31E4:860B 0F 00 0F 00 02 00 db 0Fh, 00h, 0Fh, 00h, 02h, 00h
-31E4:8611 00 00 C5 db 00h, 00h,0C5h
-31E4:8614 5A db 5Ah
-31E4:8615 0007[00] db 7 dup (0)
-31E4:861C 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:8622 BB 01 00 72 71 01 db 0BBh, 01h, 00h, 72h, 71h, 01h
-31E4:8628 02 00 00 57 6D BB db 02h, 00h, 00h, 57h, 6Dh,0BBh
-31E4:862E 01 00 72 71 00 00 db 01h, 00h, 72h, 71h, 00h, 00h
-31E4:8634 0E 01 F0 00 10 00 db 0Eh, 01h,0F0h, 00h, 10h, 00h
-31E4:863A 0D 00 03 01 BD 41 db 0Dh, 00h, 03h, 01h,0BDh, 41h
-31E4:8640 0F 00 0F 00 02 00 db 0Fh, 00h, 0Fh, 00h, 02h, 00h
-31E4:8646 00 00 C5 db 00h, 00h,0C5h
-31E4:8649 5A db 5Ah
-31E4:864A 0007[00] db 7 dup (0)
-31E4:8651 01 00 19 FE 0D 01 db 01h, 00h, 19h,0FEh, 0Dh, 01h
-31E4:8657 02 00 00 51 86 63 db 02h, 00h, 00h, 51h, 86h, 63h
-31E4:865D 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8663 F3 00 F6 00 10 00 db 0F3h, 00h,0F6h, 00h, 10h, 00h
-31E4:8669 07 00 01 01 BD 41 db 07h, 00h, 01h, 01h,0BDh, 41h
-31E4:866F 0F 00 07 00 02 db 0Fh, 00h, 07h, 00h, 02h
-31E4:8674 000C[00] db 12 dup (0)
-31E4:8680 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:8686 00 01 00 72 71 00 db 00h, 01h, 00h, 72h, 71h, 00h
-31E4:868C 00 F3 00 F6 00 10 db 00h,0F3h, 00h,0F6h, 00h, 10h
-31E4:8692 00 0F 00 01 01 BD db 00h, 0Fh, 00h, 01h, 01h,0BDh
-31E4:8698 41 08 00 0F 00 02 db 41h, 08h, 00h, 0Fh, 00h, 02h
-31E4:869E 000C[00] db 12 dup (0)
-31E4:86AA 01 00 14 2E 80 01 db 01h, 00h, 14h, 2Eh, 80h, 01h
-31E4:86B0 02 00 00 AA 86 00 db 02h, 00h, 00h,0AAh, 86h, 00h
-31E4:86B6 01 00 72 71 00 00 db 01h, 00h, 72h, 71h, 00h, 00h
-31E4:86BC F3 00 F6 00 10 00 db 0F3h, 00h,0F6h, 00h, 10h, 00h
-31E4:86C2 07 00 01 01 BD 41 db 07h, 00h, 01h, 01h,0BDh, 41h
-31E4:86C8 05 00 07 00 02 db 05h, 00h, 07h, 00h, 02h
-31E4:86CD 000C[00] db 12 dup (0)
-31E4:86D9 01 02 00 00 57 6D db 01h, 02h, 00h, 00h, 57h, 6Dh
-31E4:86DF 00 00 00 72 71 00 db 00h, 00h, 00h, 72h, 71h, 00h
-31E4:86E5 00 3A 01 3A 01 10 db 00h, 3Ah, 01h, 3Ah, 01h, 10h
-31E4:86EB 00 03 00 01 01 BD db 00h, 03h, 00h, 01h, 01h,0BDh
-31E4:86F1 41 06 00 04 00 02 db 41h, 06h, 00h, 04h, 00h, 02h
-31E4:86F7 00 00 00 db 00h, 00h, 00h
-31E4:86FA 39 59 db 39h, 59h
-31E4:86FC 0007[00] db 7 dup (0)
-31E4:8703 03 00 10 C7 09 19 db 03h, 00h, 10h,0C7h, 09h, 19h
-31E4:8709 C7 09 14 B4 0B 01 db 0C7h, 09h, 14h,0B4h, 0Bh, 01h
-31E4:870F 02 00 00 03 87 E7 db 02h, 00h, 00h, 03h, 87h,0E7h
-31E4:8715 03 00 72 71 00 00 db 03h, 00h, 72h, 71h, 00h, 00h
-31E4:871B E9 00 F3 00 10 00 db 0E9h, 00h,0F3h, 00h, 10h, 00h
-31E4:8721 09 00 01 01 BD 41 db 09h, 00h, 01h, 01h,0BDh, 41h
-31E4:8727 06 00 09 00 02 db 06h, 00h, 09h, 00h, 02h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 490
-
-31E4:872C 000C[00] db 12 dup (0)
-31E4:8738 E0 01 00 10 62 87 db 0E0h, 01h, 00h, 10h, 62h, 87h
-31E4:873E 01 00 00 67 71 00 db 01h, 00h, 00h, 67h, 71h, 00h
-31E4:8744 00 D1 00 F6 00 10 db 00h,0D1h, 00h,0F6h, 00h, 10h
-31E4:874A 00 35 00 03 00 07 db 00h, 35h, 00h, 03h, 00h, 07h
-31E4:8750 72 0B 00 35 00 08 db 72h, 0Bh, 00h, 35h, 00h, 08h
-31E4:8756 00 00 00 db 00h, 00h, 00h
-31E4:8759 4F 58 db 4Fh, 58h
-31E4:875B 0007[00] db 7 dup (0)
-31E4:8762 04 00 01 10 80 06 db 04h, 00h, 01h, 10h, 80h, 06h
-31E4:8768 59 02 08 CE 02 09 db 59h, 02h, 08h,0CEh, 02h, 09h
-31E4:876E CE 02 E0 01 00 10 db 0CEh, 02h,0E0h, 01h, 00h, 10h
-31E4:8774 9A 87 02 00 00 67 db 9Ah, 87h, 02h, 00h, 00h, 67h
-31E4:877A 71 00 00 E0 00 C8 db 71h, 00h, 00h,0E0h, 00h,0C8h
-31E4:8780 00 20 00 30 00 03 db 00h, 20h, 00h, 30h, 00h, 03h
-31E4:8786 01 07 72 20 00 30 db 01h, 07h, 72h, 20h, 00h, 30h
-31E4:878C 00 04 00 00 00 db 00h, 04h, 00h, 00h, 00h
-31E4:8791 58 58 db 58h, 58h
-31E4:8793 0007[00] db 7 dup (0)
-31E4:879A 06 00 10 CA 08 06 db 06h, 00h, 10h,0CAh, 08h, 06h
-31E4:87A0 86 02 07 B7 02 08 db 86h, 02h, 07h,0B7h, 02h, 08h
-31E4:87A6 F8 02 09 25 03 01 db 0F8h, 02h, 09h, 25h, 03h, 01h
-31E4:87AC 10 80 0D 02 00 40 db 10h, 80h, 0Dh, 02h, 00h, 40h
-31E4:87B2 D8 87 02 00 00 67 db 0D8h, 87h, 02h, 00h, 00h, 67h
-31E4:87B8 71 00 00 88 01 D0 db 71h, 00h, 00h, 88h, 01h,0D0h
-31E4:87BE 00 20 00 40 00 03 db 00h, 20h, 00h, 40h, 00h, 03h
-31E4:87C4 01 07 72 20 00 35 db 01h, 07h, 72h, 20h, 00h, 35h
-31E4:87CA 00 08 00 00 00 46 db 00h, 08h, 00h, 00h, 00h, 46h
-31E4:87D0 58 10 00 00 00 00 db 58h, 10h, 00h, 00h, 00h, 00h
-31E4:87D6 00 00 04 00 06 07 db 00h, 00h, 04h, 00h, 06h, 07h
-31E4:87DC 00 03 04 05 04 04 db 00h, 03h, 04h, 05h, 04h, 04h
-31E4:87E2 05 01 12 80 61 02 db 05h, 01h, 12h, 80h, 61h, 02h
-31E4:87E8 00 10 10 88 11 00 db 00h, 10h, 10h, 88h, 11h, 00h
-31E4:87EE 00 67 71 00 00 49 db 00h, 67h, 71h, 00h, 00h, 49h
-31E4:87F4 01 E5 00 20 00 39 db 01h,0E5h, 00h, 20h, 00h, 39h
-31E4:87FA 00 03 01 07 72 20 db 00h, 03h, 01h, 07h, 72h, 20h
-31E4:8800 00 34 00 08 00 00 db 00h, 34h, 00h, 08h, 00h, 00h
-31E4:8806 00 db 00h
-31E4:8807 61 58 db 61h, 58h
-31E4:8809 0007[00] db 7 dup (0)
-31E4:8810 03 00 06 73 0D 07 db 03h, 00h, 06h, 73h, 0Dh, 07h
-31E4:8816 7A 0D 01 0B 80 61 db 7Ah, 0Dh, 01h, 0Bh, 80h, 61h
-31E4:881C 02 00 10 10 88 1D db 02h, 00h, 10h, 10h, 88h, 1Dh
-31E4:8822 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8828 98 00 1E 01 60 00 db 98h, 00h, 1Eh, 01h, 60h, 00h
-31E4:882E 28 00 03 01 07 72 db 28h, 00h, 03h, 01h, 07h, 72h
-31E4:8834 20 00 2C 00 08 00 db 20h, 00h, 2Ch, 00h, 08h, 00h
-31E4:883A 00 00 db 00h, 00h
-31E4:883C 6A 58 db 6Ah, 58h
-31E4:883E 0007[00] db 7 dup (0)
-31E4:8845 02 00 0B 88 17 12 db 02h, 00h, 0Bh, 88h, 17h, 12h
-31E4:884B 8C 1B 02 00 0B F6 db 8Ch, 1Bh, 02h, 00h, 0Bh,0F6h
-31E4:8851 1B 12 D0 1B 00 0C db 1Bh, 12h,0D0h, 1Bh, 00h, 0Ch
-31E4:8857 82 00 4D 88 1C 00 db 82h, 00h, 4Dh, 88h, 1Ch, 00h
-31E4:885D 00 72 71 00 00 CE db 00h, 72h, 71h, 00h, 00h,0CEh
-31E4:8863 00 13 01 30 00 2F db 00h, 13h, 01h, 30h, 00h, 2Fh
-31E4:8869 00 01 01 F3 81 27 db 00h, 01h, 01h,0F3h, 81h, 27h
-31E4:886F 00 43 00 02 00 00 db 00h, 43h, 00h, 02h, 00h, 00h
-31E4:8875 00 E8 58 00 EC 00 db 00h,0E8h, 58h, 00h,0ECh, 00h
-31E4:887B 00 00 00 00 05 00 db 00h, 00h, 00h, 00h, 05h, 00h
-31E4:8881 00 00 00 00 00 96 db 00h, 00h, 00h, 00h, 00h, 96h
-31E4:8887 00 00 00 02 06 db 00h, 00h, 00h, 02h, 06h
-31E4:888C 000E[00] db 14 dup (0)
-31E4:889A 06 00 08 36 09 09 db 06h, 00h, 08h, 36h, 09h, 09h
-31E4:88A0 36 09 06 05 09 07 db 36h, 09h, 06h, 05h, 09h, 07h
-31E4:88A6 1F 09 01 10 80 10 db 1Fh, 09h, 01h, 10h, 80h, 10h
-31E4:88AC C4 12 E1 03 00 10 db 0C4h, 12h,0E1h, 03h, 00h, 10h
-31E4:88B2 9A 88 13 00 00 67 db 9Ah, 88h, 13h, 00h, 00h, 67h
-31E4:88B8 71 00 00 6D 01 D1 db 71h, 00h, 00h, 6Dh, 01h,0D1h
-31E4:88BE 00 20 00 39 00 03 db 00h, 20h, 00h, 39h, 00h, 03h
-31E4:88C4 01 07 72 20 00 37 db 01h, 07h, 72h, 20h, 00h, 37h
-31E4:88CA 00 08 00 00 00 F1 db 00h, 08h, 00h, 00h, 00h,0F1h
-31E4:88D0 58 db 58h
-31E4:88D1 0007[00] db 7 dup (0)
-31E4:88D8 61 02 00 10 10 88 db 61h, 02h, 00h, 10h, 10h, 88h
-31E4:88DE 1E 00 00 67 71 00 db 1Eh, 00h, 00h, 67h, 71h, 00h
-31E4:88E4 00 C2 00 05 01 60 db 00h,0C2h, 00h, 05h, 01h, 60h
-31E4:88EA 00 28 00 03 01 07 db 00h, 28h, 00h, 03h, 01h, 07h
-31E4:88F0 72 20 00 30 00 04 db 72h, 20h, 00h, 30h, 00h, 04h
-31E4:88F6 00 00 00 FA 58 20 db 00h, 00h, 00h,0FAh, 58h, 20h
-31E4:88FC 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8902 04 00 08 D1 0C 09 db 04h, 00h, 08h,0D1h, 0Ch, 09h
-31E4:8908 D1 0C 06 D1 0C 01 db 0D1h, 0Ch, 06h,0D1h, 0Ch, 01h
-31E4:890E 10 80 E1 03 00 10 db 10h, 80h,0E1h, 03h, 00h, 10h
-31E4:8914 02 89 0E 00 00 67 db 02h, 89h, 0Eh, 00h, 00h, 67h
-31E4:891A 71 00 00 F6 00 CC db 71h, 00h, 00h,0F6h, 00h,0CCh
-31E4:8920 00 20 00 31 00 03 db 00h, 20h, 00h, 31h, 00h, 03h
-31E4:8926 01 07 72 20 00 31 db 01h, 07h, 72h, 20h, 00h, 31h
-31E4:892C 00 04 00 00 00 03 db 00h, 04h, 00h, 00h, 00h, 03h
-31E4:8932 59 50 00 00 00 00 db 59h, 50h, 00h, 00h, 00h, 00h
-31E4:8938 00 00 05 00 01 10 db 00h, 00h, 05h, 00h, 01h, 10h
-31E4:893E 80 06 00 00 07 00 db 80h, 06h, 00h, 00h, 07h, 00h
-31E4:8944 00 db 00h
-31E4:8945 08 36 09 09 36 db 08h, 36h, 09h, 09h, 36h
-31E4:894A loc_2325:
-31E4:894A 09 61 02 or [bx+di+2],sp
-31E4:894D 00 10 add [bx+si],dl
-31E4:894F 3A 89 000C cmp cl,byte ptr copyright+0Ch[bx+di] ; (31E4:000C='vo')
-31E4:8953 00 67 71 add [bx+71h],ah
-31E4:8956 00 00 add [bx+si],al
-31E4:8958 A8 00 test al,0
-31E4:895A AA stosb ; Store al to es:[di]
-31E4:895B 00 20 add [bx+si],ah
-31E4:895D 00 3B add [bp+di],bh
-31E4:895F 00 03 add [bp+di],al
-31E4:8961 01 07 add [bx],ax
-31E4:8963 72 20 jc loc_2326 ; Jump if carry Set
-31E4:8965 00 3B add [bp+di],bh
-31E4:8967 00 04 add [si],al
-31E4:8969 00 00 add [bx+si],al
-31E4:896B 00 54 59 add [si+59h],dl
-31E4:896E 0007[00] db 7 dup (0)
-31E4:8975 61 02 00 10 3A 89 db 61h, 02h, 00h, 10h, 3Ah, 89h
-31E4:897B 20 00 00 67 71 00 db 20h, 00h, 00h, 67h, 71h, 00h
-31E4:8981 00 AC 00 17 db 00h,0ACh, 00h, 17h
-31E4:8985 loc_2326: ; xref 31E4:8963
-31E4:8985 01 50 00 ;* add [bx+si+0],dx
-31E4:8985 01 50 00 db 01h, 50h, 00h
-31E4:8988 30 00 03 01 07 72 db 30h, 00h, 03h, 01h, 07h, 72h
-31E4:898E 20 00 36 00 04 00 db 20h, 00h, 36h, 00h, 04h, 00h
-31E4:8994 00 00 db 00h, 00h
-31E4:8996 4B 59 db 4Bh, 59h
-31E4:8998 0007[00] db 7 dup (0)
-31E4:899F 05 00 01 10 80 06 db 05h, 00h, 01h, 10h, 80h, 06h
-31E4:89A5 81 0D 07 00 00 08 db 81h, 0Dh, 07h, 00h, 00h, 08h
-31E4:89AB 36 09 09 36 09 E1 db 36h, 09h, 09h, 36h, 09h,0E1h
-31E4:89B1 03 00 10 9F 89 14 db 03h, 00h, 10h, 9Fh, 89h, 14h
-31E4:89B7 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:89BD 41 01 BC 00 20 00 db 41h, 01h,0BCh, 00h, 20h, 00h
-31E4:89C3 38 00 03 01 07 72 db 38h, 00h, 03h, 01h, 07h, 72h
-31E4:89C9 20 00 38 00 04 00 db 20h, 00h, 38h, 00h, 04h, 00h
-31E4:89CF 00 00 db 00h, 00h
-31E4:89D1 66 59 db 66h, 59h
-31E4:89D3 0007[00] db 7 dup (0)
-31E4:89DA 61 02 00 10 3A 89 db 61h, 02h, 00h, 10h, 3Ah, 89h
-31E4:89E0 24 00 00 67 71 00 db 24h, 00h, 00h, 67h, 71h, 00h
-31E4:89E6 00 93 00 E1 00 70 db 00h, 93h, 00h,0E1h, 00h, 70h
-31E4:89EC 00 30 00 03 01 07 db 00h, 30h, 00h, 03h, 01h, 07h
-31E4:89F2 72 08 00 1E 00 04 db 72h, 08h, 00h, 1Eh, 00h, 04h
-31E4:89F8 00 00 00 5D 59 50 db 00h, 00h, 00h, 5Dh, 59h, 50h
-31E4:89FE 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8A04 05 00 01 10 80 06 db 05h, 00h, 01h, 10h, 80h, 06h
-31E4:8A0A 5B 0E 07 00 00 08 db 5Bh, 0Eh, 07h, 00h, 00h, 08h
-31E4:8A10 36 09 09 36 09 61 db 36h, 09h, 09h, 36h, 09h, 61h
-31E4:8A16 02 00 10 04 8A 0A db 02h, 00h, 10h, 04h, 8Ah, 0Ah
-31E4:8A1C 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8A22 06 01 DB 00 20 00 db 06h, 01h,0DBh, 00h, 20h, 00h
-31E4:8A28 36 00 01 01 07 72 db 36h, 00h, 01h, 01h, 07h, 72h
-31E4:8A2E 1A 00 36 00 04 00 db 1Ah, 00h, 36h, 00h, 04h, 00h
-31E4:8A34 00 00 9C 59 00 00 db 00h, 00h, 9Ch, 59h, 00h, 00h
-31E4:8A3A 00 00 00 00 00 61 db 00h, 00h, 00h, 00h, 00h, 61h
-31E4:8A40 02 00 10 3A 89 22 db 02h, 00h, 10h, 3Ah, 89h, 22h
-31E4:8A46 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8A4C B6 00 F3 00 30 00 db 0B6h, 00h,0F3h, 00h, 30h, 00h
-31E4:8A52 39 00 03 01 07 72 db 39h, 00h, 03h, 01h, 07h, 72h
-31E4:8A58 28 00 39 00 04 00 db 28h, 00h, 39h, 00h, 04h, 00h
-31E4:8A5E 00 00 A5 59 00 00 db 00h, 00h,0A5h, 59h, 00h, 00h
-31E4:8A64 00 00 00 00 00 61 db 00h, 00h, 00h, 00h, 00h, 61h
-31E4:8A6A 02 00 10 10 88 1F db 02h, 00h, 10h, 10h, 88h, 1Fh
-31E4:8A70 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8A76 41 01 15 01 40 00 db 41h, 01h, 15h, 01h, 40h, 00h
-31E4:8A7C 22 00 03 01 07 db 22h, 00h, 03h, 01h, 07h
-31E4:8A81 loc_2327:
-31E4:8A81 72 20 jc $+22h ; Jump if carry Set
-31E4:8A83 00 4A 00 ;* add [bp+si+0],cl
-31E4:8A83 00 4A 00 db 00h, 4Ah, 00h
-31E4:8A86 04 00 00 00 0C 59 db 04h, 00h, 00h, 00h, 0Ch, 59h
-31E4:8A8C 0007[00] db 7 dup (0)
-31E4:8A93 05 00 01 10 80 06 db 05h, 00h, 01h, 10h, 80h, 06h
-31E4:8A99 06 80 07 10 80 08 db 06h, 80h, 07h, 10h, 80h, 08h
-31E4:8A9F 36 09 09 36 09 E1 db 36h, 09h, 09h, 36h, 09h,0E1h
-31E4:8AA5 03 00 10 93 8A 0F db 03h, 00h, 10h, 93h, 8Ah, 0Fh
-31E4:8AAB 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8AB1 E3 00 A8 00 40 00 db 0E3h, 00h,0A8h, 00h, 40h, 00h
-31E4:8AB7 61 00 03 01 07 72 db 61h, 00h, 03h, 01h, 07h, 72h
-31E4:8ABD 3D 00 5D 00 04 00 db 3Dh, 00h, 5Dh, 00h, 04h, 00h
-31E4:8AC3 00 00 8A 59 00 00 db 00h, 00h, 8Ah, 59h, 00h, 00h
-31E4:8AC9 00 00 00 00 00 E1 db 00h, 00h, 00h, 00h, 00h,0E1h
-31E4:8ACF 03 00 10 93 8A 26 db 03h, 00h, 10h, 93h, 8Ah, 26h
-31E4:8AD5 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8ADB 32 01 14 01 40 00 db 32h, 01h, 14h, 01h, 40h, 00h
-31E4:8AE1 35 00 03 01 07 72 db 35h, 00h, 03h, 01h, 07h, 72h
-31E4:8AE7 35 00 35 00 04 00 db 35h, 00h, 35h, 00h, 04h, 00h
-31E4:8AED 00 00 AE 59 00 00 db 00h, 00h,0AEh, 59h, 00h, 00h
-31E4:8AF3 00 00 00 00 00 05 db 00h, 00h, 00h, 00h, 00h, 05h
-31E4:8AF9 00 01 10 80 06 06 db 00h, 01h, 10h, 80h, 06h, 06h
-31E4:8AFF 80 07 10 80 08 36 db 80h, 07h, 10h, 80h, 08h, 36h
-31E4:8B05 09 09 36 09 E1 03 db 09h, 09h, 36h, 09h,0E1h, 03h
-31E4:8B0B 00 10 F8 8A 26 00 db 00h, 10h,0F8h, 8Ah, 26h, 00h
-31E4:8B11 00 67 71 00 00 91 db 00h, 67h, 71h, 00h, 00h, 91h
-31E4:8B17 00 CD 00 30 00 42 db 00h,0CDh, 00h, 30h, 00h, 42h
-31E4:8B1D 00 03 01 07 72 18 db 00h, 03h, 01h, 07h, 72h, 18h
-31E4:8B23 00 42 00 04 00 00 db 00h, 42h, 00h, 04h, 00h, 00h
-31E4:8B29 00 B7 db 00h,0B7h
-31E4:8B2B 59 db 59h
-31E4:8B2C 0007[00] db 7 dup (0)
-31E4:8B33 E1 03 00 10 F8 8A db 0E1h, 03h, 00h, 10h,0F8h, 8Ah
-31E4:8B39 27 00 db 27h, 00h
-31E4:8B3B loc_2328:
-31E4:8B3B 00 67 71 add [bx+71h],ah
-31E4:8B3E 00 00 add [bx+si],al
-31E4:8B40 81 01 00CD add word ptr [bx+di],0CDh
-31E4:8B44 30 00 xor [bx+si],al
-31E4:8B46 42 inc dx
-31E4:8B47 00 03 add [bp+di],al
-31E4:8B49 01 07 add [bx],ax
-31E4:8B4B 72 30 jc loc_2329 ; Jump if carry Set
-31E4:8B4D 00 42 00 ;* add [bp+si+0],al
-31E4:8B4D 00 42 00 db 00h, 42h, 00h
-31E4:8B50 04 00 00 00 C0 59 db 04h, 00h, 00h, 00h,0C0h, 59h
-31E4:8B56 0007[00] db 7 dup (0)
-31E4:8B5D E1 03 00 10 F8 8A db 0E1h, 03h, 00h, 10h,0F8h, 8Ah
-31E4:8B63 27 00 00 67 71 00 db 27h, 00h, 00h, 67h, 71h, 00h
-31E4:8B69 00 91 00 CD 00 30 db 00h, 91h, 00h,0CDh, 00h, 30h
-31E4:8B6F 00 42 00 03 01 07 db 00h, 42h, 00h, 03h, 01h, 07h
-31E4:8B75 72 18 00 42 00 04 db 72h, 18h, 00h, 42h, 00h, 04h
-31E4:8B7B 00 00 db 00h, 00h
-31E4:8B7D loc_2329: ; xref 31E4:8B4B
-31E4:8B7D 00 B7 0059 add byte ptr data_519+32h[bx],dh ; (31E4:0059='rriner. Some oth')
-31E4:8B81 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8B87 E1 03 00 10 F8 8A db 0E1h, 03h, 00h, 10h,0F8h, 8Ah
-31E4:8B8D 28 00 00 67 71 00 db 28h, 00h, 00h, 67h, 71h, 00h
-31E4:8B93 00 81 01 CD 00 30 db 00h, 81h, 01h,0CDh, 00h, 30h
-31E4:8B99 00 42 00 03 01 07 db 00h, 42h, 00h, 03h, 01h, 07h
-31E4:8B9F 72 30 00 42 00 04 db 72h, 30h, 00h, 42h, 00h, 04h
-31E4:8BA5 00 00 00 C0 db 00h, 00h, 00h,0C0h
-31E4:8BA9 59 db 59h
-31E4:8BAA 0007[00] db 7 dup (0)
-31E4:8BB1 E1 03 00 10 F8 8A db 0E1h, 03h, 00h, 10h,0F8h, 8Ah
-31E4:8BB7 28 00 00 67 71 00 db 28h, 00h, 00h, 67h, 71h, 00h
-31E4:8BBD 00 91 00 CD 00 30 db 00h, 91h, 00h,0CDh, 00h, 30h
-31E4:8BC3 00 42 00 03 01 07 db 00h, 42h, 00h, 03h, 01h, 07h
-31E4:8BC9 72 18 00 42 00 04 db 72h, 18h, 00h, 42h, 00h, 04h
-31E4:8BCF 00 00 00 B7 db 00h, 00h, 00h,0B7h
-31E4:8BD3 59 db 59h
-31E4:8BD4 0007[00] db 7 dup (0)
-31E4:8BDB E1 03 00 10 F8 8A db 0E1h, 03h, 00h, 10h,0F8h, 8Ah
-31E4:8BE1 05 00 00 67 71 00 db 05h, 00h, 00h, 67h, 71h, 00h
-31E4:8BE7 00 81 01 CD 00 30 db 00h, 81h, 01h,0CDh, 00h, 30h
-31E4:8BED 00 42 00 03 01 07 db 00h, 42h, 00h, 03h, 01h, 07h
-31E4:8BF3 72 30 00 42 00 04 db 72h, 30h, 00h, 42h, 00h, 04h
-31E4:8BF9 00 00 00 C0 db 00h, 00h, 00h,0C0h
-31E4:8BFD 59 db 59h
-31E4:8BFE 0008[00] db 8 dup (0)
-31E4:8C06 0C 82 00 4A 8C 20 db 0Ch, 82h, 00h, 4Ah, 8Ch, 20h
-31E4:8C0C 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8C12 28 01 F4 00 20 00 db 28h, 01h,0F4h, 00h, 20h, 00h
-31E4:8C18 16 00 01 01 0E 82 db 16h, 00h, 01h, 01h, 0Eh, 82h
-31E4:8C1E 18 00 28 00 02 00 db 18h, 00h, 28h, 00h, 02h, 00h
-31E4:8C24 00 00 8E 58 00 db 00h, 00h, 8Eh, 58h, 00h
-31E4:8C29 000D[00] db 13 dup (0)
-31E4:8C36 96 00 00 00 F6 04 db 96h, 00h, 00h, 00h,0F6h, 04h
-31E4:8C3C 00 db 00h
-31E4:8C3D 000D[00] db 13 dup (0)
-31E4:8C4A 03 00 18 8B 1D 0B db 03h, 00h, 18h, 8Bh, 1Dh, 0Bh
-31E4:8C50 13 19 12 0A 80 00 db 13h, 19h, 12h, 0Ah, 80h, 00h
-31E4:8C56 0C 82 00 45 88 1D db 0Ch, 82h, 00h, 45h, 88h, 1Dh
-31E4:8C5C 00 00 67 71 00 00 db 00h, 00h, 67h, 71h, 00h, 00h
-31E4:8C62 BE 00 EA 00 20 00 db 0BEh, 00h,0EAh, 00h, 20h, 00h
-31E4:8C68 19 00 01 01 37 7F db 19h, 00h, 01h, 01h, 37h, 7Fh
-31E4:8C6E 10 00 29 00 02 00 db 10h, 00h, 29h, 00h, 02h, 00h
-31E4:8C74 00 00 93 59 00 6A db 00h, 00h, 93h, 59h, 00h, 6Ah
-31E4:8C7A 06 db 06h
-31E4:8C7B 000B[00] db 11 dup (0)
-31E4:8C86 96 00 00 00 F8 02 db 96h, 00h, 00h, 00h,0F8h, 02h
-31E4:8C8C 00 db 00h
-31E4:8C8D 000D[00] db 13 dup (0)
-31E4:8C9A 02 00 0B AB 16 12 db 02h, 00h, 0Bh,0ABh, 16h, 12h
-31E4:8CA0 8C 1B 00 0C 82 00 db 8Ch, 1Bh, 00h, 0Ch, 82h, 00h
-31E4:8CA6 9A 8C 1D 00 00 72 db 9Ah, 8Ch, 1Dh, 00h, 00h, 72h
-31E4:8CAC 71 00 00 4C 01 FD db 71h, 00h, 00h, 4Ch, 01h,0FDh
-31E4:8CB2 00 20 00 2D 00 01 db 00h, 20h, 00h, 2Dh, 00h, 01h
-31E4:8CB8 01 37 7F 10 00 2D db 01h, 37h, 7Fh, 10h, 00h, 2Dh
-31E4:8CBE 00 02 00 00 00 B3 db 00h, 02h, 00h, 00h, 00h,0B3h
-31E4:8CC4 5A 00 E4 06 db 5Ah, 00h,0E4h, 06h
-31E4:8CC8 000B[00] db 11 dup (0)
-31E4:8CD3 96 00 00 00 FE 06 db 96h, 00h, 00h, 00h,0FEh, 06h
-31E4:8CD9 000E[00] db 14 dup (0)
-31E4:8CE7 0000 data_8ce7 dw 0
-31E4:8CE9 0000 dw 0
-31E4:8CEB 57 6D 0F 00 00 72 db 57h, 6Dh, 0Fh, 00h, 00h, 72h
-31E4:8CF1 71 00 00 3F 01 64 db 71h, 00h, 00h, 3Fh, 01h, 64h
-31E4:8CF7 00 10 00 02 00 01 db 00h, 10h, 00h, 02h, 00h, 01h
-31E4:8CFD 00 2D 86 01 00 02 db 00h, 2Dh, 86h, 01h, 00h, 02h
-31E4:8D03 00 02 00 00 00 80 db 00h, 02h, 00h, 00h, 00h, 80h
-31E4:8D09 5C 00 db 5Ch, 00h
-31E4:8D0B 000D[00] db 13 dup (0)
-31E4:8D18 96 00 00 00 00 68 db 96h, 00h, 00h, 00h, 00h, 68h
-31E4:8D1E 00 db 00h
-31E4:8D1F 000D[00] db 13 dup (0)
-31E4:8D2C 0000 data_8d2c dw 0
-31E4:8D2E 0000 dw 0
-31E4:8D30 57 6D 0F 00 00 72 db 57h, 6Dh, 0Fh, 00h, 00h, 72h
-31E4:8D36 71 00 00 DB 00 64 db 71h, 00h, 00h,0DBh, 00h, 64h
-31E4:8D3C 00 10 00 02 00 01 db 00h, 10h, 00h, 02h, 00h, 01h
-31E4:8D42 00 2D 86 01 00 02 db 00h, 2Dh, 86h, 01h, 00h, 02h
-31E4:8D48 00 02 00 00 00 80 db 00h, 02h, 00h, 00h, 00h, 80h
-31E4:8D4E 5C 00 db 5Ch, 00h
-31E4:8D50 000D[00] db 13 dup (0)
-31E4:8D5D 96 00 00 00 00 68 db 96h, 00h, 00h, 00h, 00h, 68h
-31E4:8D63 00 db 00h
-31E4:8D64 000E[00] db 14 dup (0)
-31E4:8D72 0C 82 00 45 88 0C db 0Ch, 82h, 00h, 45h, 88h, 0Ch
-31E4:8D78 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8D7E 0F 01 F1 00 10 00 db 0Fh, 01h,0F1h, 00h, 10h, 00h
-31E4:8D84 08 00 01 01 41 82 db 08h, 00h, 01h, 01h, 41h, 82h
-31E4:8D8A 18 00 18 00 02 00 db 18h, 00h, 18h, 00h, 02h, 00h
-31E4:8D90 00 00 85 58 00 db 00h, 00h, 85h, 58h, 00h
-31E4:8D95 000D[00] db 13 dup (0)
-31E4:8DA2 96 00 00 00 F4 06 db 96h, 00h, 00h, 00h,0F4h, 06h
-31E4:8DA8 000F[00] db 15 dup (0)
-31E4:8DB7 08 00 00 57 6D 1F db 08h, 00h, 00h, 57h, 6Dh, 1Fh
-31E4:8DBD 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8DC3 2A 01 E3 00 20 00 db 2Ah, 01h,0E3h, 00h, 20h, 00h
-31E4:8DC9 30 00 01 01 CE 85 db 30h, 00h, 01h, 01h,0CEh, 85h
-31E4:8DCF 20 00 30 00 02 00 db 20h, 00h, 30h, 00h, 02h, 00h
-31E4:8DD5 00 00 6F 59 9E db 00h, 00h, 6Fh, 59h, 9Eh
-31E4:8DDA 000D[00] db 13 dup (0)
-31E4:8DE7 96 00 00 00 02 06 db 96h, 00h, 00h, 00h, 02h, 06h
-31E4:8DED 000F[00] db 15 dup (0)
-31E4:8DFC 08 00 00 57 6D 1F db 08h, 00h, 00h, 57h, 6Dh, 1Fh
-31E4:8E02 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8E08 EA 00 E3 00 20 00 db 0EAh, 00h,0E3h, 00h, 20h, 00h
-31E4:8E0E 30 00 01 01 CE 85 db 30h, 00h, 01h, 01h,0CEh, 85h
-31E4:8E14 20 00 30 00 02 00 db 20h, 00h, 30h, 00h, 02h, 00h
-31E4:8E1A 00 00 78 59 9E db 00h, 00h, 78h, 59h, 9Eh
-31E4:8E1F 000D[00] db 13 dup (0)
-31E4:8E2C 96 00 00 00 02 06 db 96h, 00h, 00h, 00h, 02h, 06h
-31E4:8E32 000F[00] db 15 dup (0)
-31E4:8E41 0C 82 00 45 88 0E db 0Ch, 82h, 00h, 45h, 88h, 0Eh
-31E4:8E47 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:8E4D 11 01 CF 00 20 00 db 11h, 01h,0CFh, 00h, 20h, 00h
-31E4:8E53 30 00 01 01 CE 85 db 30h, 00h, 01h, 01h,0CEh, 85h
-31E4:8E59 20 00 30 00 02 00 db 20h, 00h, 30h, 00h, 02h, 00h
-31E4:8E5F 00 00 6F 59 9E 00 db 00h, 00h, 6Fh, 59h, 9Eh, 00h
-31E4:8E65 00 00 00 00 00 01 db 00h, 00h, 00h, 00h, 00h, 01h
-31E4:8E6B 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:8E71 96 00 00 00 02 06 db 96h, 00h, 00h, 00h, 02h, 06h
-31E4:8E77 0011[00] db 17 dup (0)
-31E4:8E88 20 00 00 1E 00 00 db 20h, 00h, 00h, 1Eh, 00h, 00h
-31E4:8E8E 72 71 00 00 11 01 db 72h, 71h, 00h, 00h, 11h, 01h
-31E4:8E94 E6 00 30 00 20 00 db 0E6h, 00h, 30h, 00h, 20h, 00h
-31E4:8E9A 02 01 3F 81 26 00 db 02h, 01h, 3Fh, 81h, 26h, 00h
-31E4:8EA0 40 00 02 00 00 00 db 40h, 00h, 02h, 00h, 00h, 00h
-31E4:8EA6 81 59 00 DA 09 00 db 81h, 59h, 00h,0DAh, 09h, 00h
-31E4:8EAC 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-31E4:8EB2 0A 2D 12 00 0A 00 db 0Ah, 2Dh, 12h, 00h, 0Ah, 00h
-31E4:8EB8 00 B0 8E 29 00 00 db 00h,0B0h, 8Eh, 29h, 00h, 00h
-31E4:8EBE 72 71 00 00 C7 00 db 72h, 71h, 00h, 00h,0C7h, 00h
-31E4:8EC4 E7 00 10 00 08 00 db 0E7h, 00h, 10h, 00h, 08h, 00h
-31E4:8ECA 03 01 37 7F 0E 00 db 03h, 01h, 37h, 7Fh, 0Eh, 00h
-31E4:8ED0 08 00 04 00 00 00 db 08h, 00h, 04h, 00h, 00h, 00h
-31E4:8ED6 D2 59 00 88 0B 00 db 0D2h, 59h, 00h, 88h, 0Bh, 00h
-31E4:8EDC 00 db 00h
-31E4:8EDD 0009[00] db 9 dup (0)
-31E4:8EE6 96 00 00 00 0A 12 db 96h, 00h, 00h, 00h, 0Ah, 12h
-31E4:8EEC 00 db 00h
-31E4:8EED 0010[00] db 16 dup (0)
-31E4:8EFD 20 B0 8E 29 00 00 db 20h,0B0h, 8Eh, 29h, 00h, 00h
-31E4:8F03 72 71 00 00 AA 00 db 72h, 71h, 00h, 00h,0AAh, 00h
-31E4:8F09 07 01 70 00 1F 00 db 07h, 01h, 70h, 00h, 1Fh, 00h
-31E4:8F0F 03 00 3A 7F 6F 00 db 03h, 00h, 3Ah, 7Fh, 6Fh, 00h
-31E4:8F15 1F 00 04 00 00 00 db 1Fh, 00h, 04h, 00h, 00h, 00h
-31E4:8F1B AF 5B 00 BC 0B 00 db 0AFh, 5Bh, 00h,0BCh, 0Bh, 00h
-31E4:8F21 00 00 00 00 00 08 db 00h, 00h, 00h, 00h, 00h, 08h
-31E4:8F27 00 00 57 6D 2D 00 db 00h, 00h, 57h, 6Dh, 2Dh, 00h
-31E4:8F2D 00 67 71 00 00 7A db 00h, 67h, 71h, 00h, 00h, 7Ah
-31E4:8F33 01 14 01 30 00 33 db 01h, 14h, 01h, 30h, 00h, 33h
-31E4:8F39 00 02 01 EC 87 20 db 00h, 02h, 01h,0ECh, 87h, 20h
-31E4:8F3F 00 33 00 04 00 00 db 00h, 33h, 00h, 04h, 00h, 00h
-31E4:8F45 00 DB 59 9E EA 0B db 00h,0DBh, 59h, 9Eh,0EAh, 0Bh
-31E4:8F4B 00 00 00 db 00h, 00h, 00h
-31E4:8F4E 0008[00] db 8 dup (0)
-31E4:8F56 96 00 00 00 02 0A db 96h, 00h, 00h, 00h, 02h, 0Ah
-31E4:8F5C 00 db 00h
-31E4:8F5D 000E[00] db 14 dup (0)
-31E4:8F6B 08 00 00 57 6D 2A db 08h, 00h, 00h, 57h, 6Dh, 2Ah
-31E4:8F71 80 00 67 71 00 00 db 80h, 00h, 67h, 71h, 00h, 00h
-31E4:8F77 99 00 16 01 40 00 db 99h, 00h, 16h, 01h, 40h, 00h
-31E4:8F7D 28 00 01 01 EC 87 db 28h, 00h, 01h, 01h,0ECh, 87h
-31E4:8F83 3F 00 28 00 04 00 db 3Fh, 00h, 28h, 00h, 04h, 00h
-31E4:8F89 00 00 23 5A 9E A2 db 00h, 00h, 23h, 5Ah, 9Eh,0A2h
-31E4:8F8F 0C 00 db 0Ch, 00h
-31E4:8F91 000A[00] db 10 dup (0)
-31E4:8F9B 96 00 00 00 0A 12 db 96h, 00h, 00h, 00h, 0Ah, 12h
-31E4:8FA1 00 db 00h
-31E4:8FA2 0010[00] db 16 dup (0)
-31E4:8FB2 20 57 6D 2A 80 00 db 20h, 57h, 6Dh, 2Ah, 80h, 00h
-31E4:8FB8 67 71 00 00 99 00 db 67h, 71h, 00h, 00h, 99h, 00h
-31E4:8FBE 16 01 20 00 25 00 db 16h, 01h, 20h, 00h, 25h, 00h
-31E4:8FC4 02 01 3A 7F 1B 00 db 02h, 01h, 3Ah, 7Fh, 1Bh, 00h
-31E4:8FCA 25 00 04 00 00 00 db 25h, 00h, 04h, 00h, 00h, 00h
-31E4:8FD0 47 5A 00 EC 0C 00 db 47h, 5Ah, 00h,0ECh, 0Ch, 00h
-31E4:8FD6 0007[00] db 7 dup (0)
-31E4:8FDD 20 57 6D 1D 00 00 db 20h, 57h, 6Dh, 1Dh, 00h, 00h
-31E4:8FE3 72 71 00 00 7B 01 db 72h, 71h, 00h, 00h, 7Bh, 01h
-31E4:8FE9 E9 00 20 00 27 00 db 0E9h, 00h, 20h, 00h, 27h, 00h
-31E4:8FEF 03 00 3A 7F 14 00 db 03h, 00h, 3Ah, 7Fh, 14h, 00h
-31E4:8FF5 27 00 04 00 00 00 db 27h, 00h, 04h, 00h, 00h, 00h
-31E4:8FFB A1 5A 20 14 db 0A1h, 5Ah, 20h, 14h
-31E4:8FFF 0D db 0Dh
-31E4:9000 0008[00] db 8 dup (0)
-31E4:9008 20 57 6D 2B 00 00 db 20h, 57h, 6Dh, 2Bh, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 497
-
-31E4:900E 72 71 00 00 7D 01 db 72h, 71h, 00h, 00h, 7Dh, 01h
-31E4:9014 F9 db 0F9h
-31E4:9015 loc_2330:
-31E4:9015 00 30 add [bx+si],dh
-31E4:9017 00 29 add [bx+di],ch
-31E4:9019 00 03 add [bp+di],al
-31E4:901B 00 3A add [bp+si],bh
-31E4:901D 7F 14 jg loc_2331 ; Jump if >
-31E4:901F 00 27 add [bx],ah
-31E4:9021 00 04 add [si],al
-31E4:9023 00 00 add [bx+si],al
-31E4:9025 00 CE add dh,cl
-31E4:9027 5A pop dx
-31E4:9028 40 inc ax
-31E4:9029 2E 0D 00 00 00 00 db 2Eh, 0Dh, 00h, 00h, 00h, 00h
-31E4:902F 00 00 00 00 db 00h, 00h, 00h, 00h
-31E4:9033 loc_2331: ; xref 31E4:901D
-31E4:9033 20 57 6D and [bx+6Dh],dl
-31E4:9036 2B 00 sub ax,[bx+si]
-31E4:9038 00 72 71 add [bp+si+71h],dh
-31E4:903B 00 00 add [bx+si],al
-31E4:903D 70 01 ;* jo loc_2332 ;*Jump if overflow=1
-31E4:903D 70 01 db 70h, 01h
-31E4:903F E1 00 loopz locloop_2333 ; Loop if zf=1, cx>0
-
-
-31E4:9041 locloop_2333: ; xref 31E4:903F
-31E4:9041 30 00 xor [bx+si],al
-31E4:9043 11 00 adc [bx+si],ax
-31E4:9045 03 00 add ax,[bx+si]
-31E4:9047 3A 7F 14 cmp bh,[bx+14h]
-31E4:904A 00 27 add [bx],ah
-31E4:904C 00 04 add [si],al
-31E4:904E 00 00 add [bx+si],al
-31E4:9050 00 D7 add bh,dl
-31E4:9052 5A pop dx
-31E4:9053 40 inc ax
-31E4:9054 4E dec si
-31E4:9055 0D 0000 or ax,0
-31E4:9058 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:905E 20 57 6D 2B 00 00 db 20h, 57h, 6Dh, 2Bh, 00h, 00h
-31E4:9064 72 71 00 00 7D 01 db 72h, 71h, 00h, 00h, 7Dh, 01h
-31E4:906A D6 00 10 00 05 00 db 0D6h, 00h, 10h, 00h, 05h, 00h
-31E4:9070 03 00 3A 7F 14 00 db 03h, 00h, 3Ah, 7Fh, 14h, 00h
-31E4:9076 27 00 04 00 00 00 db 27h, 00h, 04h, 00h, 00h, 00h
-31E4:907C E0 5A 00 db 0E0h, 5Ah, 00h
-31E4:907F 6E 0D db 6Eh, 0Dh
-31E4:9081 0008[00] db 8 dup (0)
-31E4:9089 loc_2334:
-31E4:9089 20 57 6D and [bx+6Dh],dl
-31E4:908C 2D 0000 sub ax,0
-31E4:908F 72 71 ;* jc loc_2337 ;*Jump if carry Set
-31E4:908F 72 71 db 72h, 71h
-31E4:9091 00 00 add [bx+si],al
-31E4:9093 35 E401 xor ax,0E401h
-31E4:9096 00 10 add [bx+si],dl
-31E4:9098 00 0B add [bp+di],cl
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 498
-
-31E4:909A 00 03 add [bp+di],al
-31E4:909C 01 3A add [bp+si],di
-31E4:909E 7F 14 jg loc_2335 ; Jump if >
-31E4:90A0 00 27 add [bx],ah
-31E4:90A2 00 04 add [si],al
-31E4:90A4 00 00 add [bx+si],al
-31E4:90A6 00 E9 add cl,ch
-31E4:90A8 5A pop dx
-31E4:90A9 00 92 000D add [bp+si+0Dh],dl
-31E4:90AD 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:90B3 00 db 0
-31E4:90B4 loc_2335: ; xref 31E4:909E
-31E4:90B4 20 57 6D and [bx+6Dh],dl
-31E4:90B7 2E: 00 00 add cs:[bx+si],al
-31E4:90BA 72 71 ;* jc loc_2339 ;*Jump if carry Set
-31E4:90BA 72 71 db 72h, 71h
-31E4:90BC 00 00 add [bx+si],al
-31E4:90BE 80 00 E4 add byte ptr [bx+si],0E4h
-31E4:90C1 00 10 add [bx+si],dl
-31E4:90C3 00 0B add [bp+di],cl
-31E4:90C5 00 03 add [bp+di],al
-31E4:90C7 01 3A add [bp+si],di
-31E4:90C9 7F 14 jg loc_2336 ; Jump if >
-31E4:90CB 00 27 add [bx],ah
-31E4:90CD 00 04 add [si],al
-31E4:90CF 00 00 add [bx+si],al
-31E4:90D1 00 E9 add cl,ch
-31E4:90D3 5A pop dx
-31E4:90D4 00 92 000D add [bp+si+0Dh],dl
-31E4:90D8 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:90DE 00 db 0
-31E4:90DF loc_2336: ; xref 31E4:90C9
-31E4:90DF 20 57 6D and [bx+6Dh],dl
-31E4:90E2 30 00 xor [bx+si],al
-31E4:90E4 00 72 71 add [bp+si+71h],dh
-31E4:90E7 00 00 add [bx+si],al
-31E4:90E9 A1 E500 mov ax,data_1185 ; (31E4:E500=8000h)
-31E4:90EC 00 10 add [bx+si],dl
-31E4:90EE 00 0B add [bp+di],cl
-31E4:90F0 00 02 add [bp+si],al
-31E4:90F2 01 3A add [bp+si],di
-31E4:90F4 7F 14 jg loc_2338 ; Jump if >
-31E4:90F6 00 27 add [bx],ah
-31E4:90F8 00 04 add [si],al
-31E4:90FA 00 00 add [bx+si],al
-31E4:90FC 00 E9 add cl,ch
-31E4:90FE 5A pop dx
-31E4:90FF 00 92 000D add [bp+si+0Dh],dl
-31E4:9103 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-31E4:9109 00 db 0
-31E4:910A loc_2338: ; xref 31E4:90F4
-31E4:910A 20 57 6D and [bx+6Dh],dl
-31E4:910D 2C 00 sub al,0
-31E4:910F 00 72 71 add [bp+si+71h],dh
-31E4:9112 00 00 add [bx+si],al
-31E4:9114 1B 01 sbb ax,[bx+di]
-31E4:9116 C4 00 les ax,dword ptr [bx+si] ; Load seg:offset ptr
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 499
-
-31E4:9118 10 00 adc [bx+si],al
-31E4:911A 12 00 adc al,[bx+si]
-31E4:911C 03 01 add ax,[bx+di]
-31E4:911E 3A 7F 14 cmp bh,[bx+14h]
-31E4:9121 00 27 add [bx],ah
-31E4:9123 00 04 add [si],al
-31E4:9125 00 00 add [bx+si],al
-31E4:9127 00 F2 add dl,dh
-31E4:9129 5A pop dx
-31E4:912A 00 AE 000D add [bp+0Dh],ch
-31E4:912E 0007[00] db 7 dup (0)
-31E4:9135 20 57 6D 2C 00 00 db 20h, 57h, 6Dh, 2Ch, 00h, 00h
-31E4:913B 72 71 00 00 32 01 db 72h, 71h, 00h, 00h, 32h, 01h
-31E4:9141 A8 00 30 00 08 00 db 0A8h, 00h, 30h, 00h, 08h, 00h
-31E4:9147 03 01 3A 7F 14 00 db 03h, 01h, 3Ah, 7Fh, 14h, 00h
-31E4:914D 27 00 04 00 00 00 db 27h, 00h, 04h, 00h, 00h, 00h
-31E4:9153 FB 5A 00 C8 0D 00 db 0FBh, 5Ah, 00h,0C8h, 0Dh, 00h
-31E4:9159 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:915F 00 20 57 6D 2D 00 db 00h, 20h, 57h, 6Dh, 2Dh, 00h
-31E4:9165 00 72 71 00 00 BF db 00h, 72h, 71h, 00h, 00h,0BFh
-31E4:916B 00 08 01 20 00 1E db 00h, 08h, 01h, 20h, 00h, 1Eh
-31E4:9171 00 03 00 3A 7F 14 db 00h, 03h, 00h, 3Ah, 7Fh, 14h
-31E4:9177 00 27 00 04 00 00 db 00h, 27h, 00h, 04h, 00h, 00h
-31E4:917D 00 04 5B 00 D4 0D db 00h, 04h, 5Bh, 00h,0D4h, 0Dh
-31E4:9183 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:9189 00 00 db 00h, 00h
-31E4:918B loc_2340:
-31E4:918B 20 57 6D and [bx+6Dh],dl
-31E4:918E 2D 0000 sub ax,0
-31E4:9191 72 71 ;* jc loc_2341 ;*Jump if carry Set
-31E4:9191 72 71 db 72h, 71h
-31E4:9193 00 00 add [bx+si],al
-31E4:9195 2E 01 FB 00 10 00 db 2Eh, 01h,0FBh, 00h, 10h, 00h
-31E4:919B 10 00 03 00 3A 7F db 10h, 00h, 03h, 00h, 3Ah, 7Fh
-31E4:91A1 10 00 10 00 04 00 db 10h, 00h, 10h, 00h, 04h, 00h
-31E4:91A7 00 00 0D 5B 00 04 db 00h, 00h, 0Dh, 5Bh, 00h, 04h
-31E4:91AD 0E db 0Eh
-31E4:91AE 0008[00] db 8 dup (0)
-31E4:91B6 20 57 6D 2D 00 00 db 20h, 57h, 6Dh, 2Dh, 00h, 00h
-31E4:91BC 72 71 00 00 5E 01 db 72h, 71h, 00h, 00h, 5Eh, 01h
-31E4:91C2 07 01 10 00 10 00 db 07h, 01h, 10h, 00h, 10h, 00h
-31E4:91C8 03 00 3A 7F 10 00 db 03h, 00h, 3Ah, 7Fh, 10h, 00h
-31E4:91CE 10 00 04 00 8C 00 db 10h, 00h, 04h, 00h, 8Ch, 00h
-31E4:91D4 16 5B 00 40 0E db 16h, 5Bh, 00h, 40h, 0Eh
-31E4:91D9 0008[00] db 8 dup (0)
-31E4:91E1 20 57 6D 2D 00 00 db 20h, 57h, 6Dh, 2Dh, 00h, 00h
-31E4:91E7 72 71 00 00 A0 01 db 72h, 71h, 00h, 00h,0A0h, 01h
-31E4:91ED 0E 01 10 00 10 00 db 0Eh, 01h, 10h, 00h, 10h, 00h
-31E4:91F3 02 01 3A 7F 10 00 db 02h, 01h, 3Ah, 7Fh, 10h, 00h
-31E4:91F9 10 00 04 00 28 00 db 10h, 00h, 04h, 00h, 28h, 00h
-31E4:91FF 1F 5B 00 8C 0E db 1Fh, 5Bh, 00h, 8Ch, 0Eh
-31E4:9204 00 db 0
-31E4:9205 0007[00] db 7 dup (0)
-31E4:920C 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:9212 72 71 00 00 80 00 db 72h, 71h, 00h, 00h, 80h, 00h
-31E4:9218 09 01 20 00 2E 00 db 09h, 01h, 20h, 00h, 2Eh, 00h
-31E4:921E 02 01 3A 7F 19 00 db 02h, 01h, 3Ah, 7Fh, 19h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 500
-
-31E4:9224 2E 00 04 00 00 00 db 2Eh, 00h, 04h, 00h, 00h, 00h
-31E4:922A 28 5B 00 E6 0E db 28h, 5Bh, 00h,0E6h, 0Eh
-31E4:922F 0008[00] db 8 dup (0)
-31E4:9237 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:923D 72 71 00 00 C7 00 db 72h, 71h, 00h, 00h,0C7h, 00h
-31E4:9243 0E 01 10 00 18 00 db 0Eh, 01h, 10h, 00h, 18h, 00h
-31E4:9249 02 00 3A 7F 10 00 db 02h, 00h, 3Ah, 7Fh, 10h, 00h
-31E4:924F 18 00 04 00 00 00 db 18h, 00h, 04h, 00h, 00h, 00h
-31E4:9255 31 5B 00 BC 0F 00 db 31h, 5Bh, 00h,0BCh, 0Fh, 00h
-31E4:925B 0007[00] db 7 dup (0)
-31E4:9262 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:9268 72 71 00 00 9A 00 db 72h, 71h, 00h, 00h, 9Ah, 00h
-31E4:926E 07 01 10 00 10 00 db 07h, 01h, 10h, 00h, 10h, 00h
-31E4:9274 02 00 3A 7F 10 00 db 02h, 00h, 3Ah, 7Fh, 10h, 00h
-31E4:927A 10 00 04 00 00 00 db 10h, 00h, 04h, 00h, 00h, 00h
-31E4:9280 3A 5B 00 EC 0F db 3Ah, 5Bh, 00h,0ECh, 0Fh
-31E4:9285 0008[00] db 8 dup (0)
-31E4:928D 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:9293 72 71 00 00 F4 00 db 72h, 71h, 00h, 00h,0F4h, 00h
-31E4:9299 12 01 20 00 21 00 db 12h, 01h, 20h, 00h, 21h, 00h
-31E4:929F 02 01 3A 7F 13 00 db 02h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:92A5 21 00 04 00 00 00 db 21h, 00h, 04h, 00h, 00h, 00h
-31E4:92AB 43 5B 00 38 10 00 db 43h, 5Bh, 00h, 38h, 10h, 00h
-31E4:92B1 0007[00] db 7 dup (0)
-31E4:92B8 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:92BE 72 71 00 00 29 01 db 72h, 71h, 00h, 00h, 29h, 01h
-31E4:92C4 FA 00 20 00 14 00 db 0FAh, 00h, 20h, 00h, 14h, 00h
-31E4:92CA 03 00 3A 7F 15 00 db 03h, 00h, 3Ah, 7Fh, 15h, 00h
-31E4:92D0 14 00 04 00 00 00 db 14h, 00h, 04h, 00h, 00h, 00h
-31E4:92D6 55 5B 00 82 10 00 db 55h, 5Bh, 00h, 82h, 10h, 00h
-31E4:92DC 0007[00] db 7 dup (0)
-31E4:92E3 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:92E9 72 71 00 00 48 01 db 72h, 71h, 00h, 00h, 48h, 01h
-31E4:92EF 14 01 10 00 0F 00 db 14h, 01h, 10h, 00h, 0Fh, 00h
-31E4:92F5 03 00 3A 7F 0B 00 db 03h, 00h, 3Ah, 7Fh, 0Bh, 00h
-31E4:92FB 0F 00 04 00 00 00 db 0Fh, 00h, 04h, 00h, 00h, 00h
-31E4:9301 5E 5B 50 3E 11 00 db 5Eh, 5Bh, 50h, 3Eh, 11h, 00h
-31E4:9307 0007[00] db 7 dup (0)
-31E4:930E 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:9314 72 71 00 00 23 01 db 72h, 71h, 00h, 00h, 23h, 01h
-31E4:931A 19 01 10 00 0B 00 db 19h, 01h, 10h, 00h, 0Bh, 00h
-31E4:9320 03 00 3A 7F 0F 00 db 03h, 00h, 3Ah, 7Fh, 0Fh, 00h
-31E4:9326 0B 00 04 00 00 00 db 0Bh, 00h, 04h, 00h, 00h, 00h
-31E4:932C 67 5B 00 80 11 00 db 67h, 5Bh, 00h, 80h, 11h, 00h
-31E4:9332 0007[00] db 7 dup (0)
-31E4:9339 20 57 6D 2E 00 00 db 20h, 57h, 6Dh, 2Eh, 00h, 00h
-31E4:933F 72 71 00 00 32 01 db 72h, 71h, 00h, 00h, 32h, 01h
-31E4:9345 18 01 20 00 14 00 db 18h, 01h, 20h, 00h, 14h, 00h
-31E4:934B 03 00 3A 7F 0F 00 db 03h, 00h, 3Ah, 7Fh, 0Fh, 00h
-31E4:9351 0B 00 04 00 00 00 db 0Bh, 00h, 04h, 00h, 00h, 00h
-31E4:9357 70 5B 00 A4 11 00 db 70h, 5Bh, 00h,0A4h, 11h, 00h
-31E4:935D 0007[00] db 7 dup (0)
-31E4:9364 20 57 6D 2A 00 00 db 20h, 57h, 6Dh, 2Ah, 00h, 00h
-31E4:936A 72 71 00 00 03 01 db 72h, 71h, 00h, 00h, 03h, 01h
-31E4:9370 F6 00 20 00 0C 00 db 0F6h, 00h, 20h, 00h, 0Ch, 00h
-31E4:9376 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:937C 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 501
-
-31E4:9382 4C 5B 00 14 12 00 db 4Ch, 5Bh, 00h, 14h, 12h, 00h
-31E4:9388 0007[00] db 7 dup (0) ; Data table (indexed access)
-31E4:938F 20 57 6D 2A 00 00 db 20h, 57h, 6Dh, 2Ah, 00h, 00h
-31E4:9395 72 71 00 00 15 01 db 72h, 71h, 00h, 00h, 15h, 01h
-31E4:939B 12 01 20 00 0C 00 db 12h, 01h, 20h, 00h, 0Ch, 00h
-31E4:93A1 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:93A7 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:93AD 4C 5B 00 4E 12 db 4Ch, 5Bh, 00h, 4Eh, 12h
-31E4:93B2 0008[00] db 8 dup (0)
-31E4:93BA 20 57 6D 2A 00 00 db 20h, 57h, 6Dh, 2Ah, 00h, 00h
-31E4:93C0 72 71 00 00 42 01 db 72h, 71h, 00h, 00h, 42h, 01h
-31E4:93C6 18 01 20 00 0C 00 db 18h, 01h, 20h, 00h, 0Ch, 00h
-31E4:93CC 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:93D2 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:93D8 4C 5B 00 E8 12 00 db 4Ch, 5Bh, 00h,0E8h, 12h, 00h
-31E4:93DE 0007[00] db 7 dup (0)
-31E4:93E5 20 57 6D 2B 00 00 db 20h, 57h, 6Dh, 2Bh, 00h, 00h
-31E4:93EB 72 71 00 00 92 00 db 72h, 71h, 00h, 00h, 92h, 00h
-31E4:93F1 0D 01 20 00 0C 00 db 0Dh, 01h, 20h, 00h, 0Ch, 00h
-31E4:93F7 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:93FD 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:9403 4C 5B 00 26 14 00 db 4Ch, 5Bh, 00h, 26h, 14h, 00h
-31E4:9409 0007[00] db 7 dup (0)
-31E4:9410 20 57 6D 2B 00 00 db 20h, 57h, 6Dh, 2Bh, 00h, 00h
-31E4:9416 72 71 00 00 87 00 db 72h, 71h, 00h, 00h, 87h, 00h
-31E4:941C 22 01 20 00 0C 00 db 22h, 01h, 20h, 00h, 0Ch, 00h
-31E4:9422 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:9428 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:942E 4C 5B 00 7C 14 db 4Ch, 5Bh, 00h, 7Ch, 14h
-31E4:9433 0008[00] db 8 dup (0)
-31E4:943B 20 57 6D 2C 00 00 db 20h, 57h, 6Dh, 2Ch, 00h, 00h
-31E4:9441 72 71 00 00 0E 01 db 72h, 71h, 00h, 00h, 0Eh, 01h
-31E4:9447 3D 01 20 00 0C 00 db 3Dh, 01h, 20h, 00h, 0Ch, 00h
-31E4:944D 01 01 3A 7F 13 00 db 01h, 01h, 3Ah, 7Fh, 13h, 00h
-31E4:9453 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:9459 4C 5B 00 20 15 00 db 4Ch, 5Bh, 00h, 20h, 15h, 00h
-31E4:945F 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:9465 00 20 57 6D 1C 00 db 00h, 20h, 57h, 6Dh, 1Ch, 00h
-31E4:946B 00 72 71 00 00 F1 db 00h, 72h, 71h, 00h, 00h,0F1h
-31E4:9471 00 1E 01 50 00 0B db 00h, 1Eh, 01h, 50h, 00h, 0Bh
-31E4:9477 00 03 00 3A 7F 48 db 00h, 03h, 00h, 3Ah, 7Fh, 48h
-31E4:947D 00 0B 00 04 00 00 db 00h, 0Bh, 00h, 04h, 00h, 00h
-31E4:9483 00 79 5B 00 AA 15 db 00h, 79h, 5Bh, 00h,0AAh, 15h
-31E4:9489 00 db 00h
-31E4:948A 0007[00] db 7 dup (0)
-31E4:9491 20 57 6D 1C 00 00 db 20h, 57h, 6Dh, 1Ch, 00h, 00h
-31E4:9497 72 71 00 00 62 01 db 72h, 71h, 00h, 00h, 62h, 01h
-31E4:949D F0 00 20 00 2B 00 db 0F0h, 00h, 20h, 00h, 2Bh, 00h
-31E4:94A3 03 00 3A 7F 14 00 db 03h, 00h, 3Ah, 7Fh, 14h, 00h
-31E4:94A9 2A 00 04 00 00 00 db 2Ah, 00h, 04h, 00h, 00h, 00h
-31E4:94AF 82 5B 00 AA 15 00 db 82h, 5Bh, 00h,0AAh, 15h, 00h
-31E4:94B5 00 db 00h
-31E4:94B6 0007[00] db 7 dup (0)
-31E4:94BD 57 6D 0D 00 00 72 db 57h, 6Dh, 0Dh, 00h, 00h, 72h
-31E4:94C3 71 00 00 7C 01 23 db 71h, 00h, 00h, 7Ch, 01h, 23h
-31E4:94C9 01 20 00 1C 00 02 db 01h, 20h, 00h, 1Ch, 00h, 02h
-31E4:94CF 01 3A 7F 18 00 1C db 01h, 3Ah, 7Fh, 18h, 00h, 1Ch
-31E4:94D5 00 04 00 00 00 8B db 00h, 04h, 00h, 00h, 00h, 8Bh
-31E4:94DB 5B 10 E6 15 00 00 db 5Bh, 10h,0E6h, 15h, 00h, 00h
-31E4:94E1 00 00 00 02 00 0A db 00h, 00h, 00h, 02h, 00h, 0Ah
-31E4:94E7 03 0B 01 2F 80 01 db 03h, 0Bh, 01h, 2Fh, 80h, 01h
-31E4:94ED 02 00 00 E4 94 0D db 02h, 00h, 00h,0E4h, 94h, 0Dh
-31E4:94F3 00 00 72 71 00 00 db 00h, 00h, 72h, 71h, 00h, 00h
-31E4:94F9 D5 00 FE 00 10 00 db 0D5h, 00h,0FEh, 00h, 10h, 00h
-31E4:94FF 0A 00 03 01 3A 7F db 0Ah, 00h, 03h, 01h, 3Ah, 7Fh
-31E4:9505 07 00 08 00 04 00 db 07h, 00h, 08h, 00h, 04h, 00h
-31E4:950B 00 00 94 5B 30 1A db 00h, 00h, 94h, 5Bh, 30h, 1Ah
-31E4:9511 16 00 00 00 00 00 db 16h, 00h, 00h, 00h, 00h, 00h
-31E4:9517 00 00 00 20 57 6D db 00h, 00h, 00h, 20h, 57h, 6Dh
-31E4:951D 09 00 00 72 71 00 db 09h, 00h, 00h, 72h, 71h, 00h
-31E4:9523 00 80 00 88 00 10 db 00h, 80h, 00h, 88h, 00h, 10h
-31E4:9529 00 14 00 02 01 3A db 00h, 14h, 00h, 02h, 01h, 3Ah
-31E4:952F 7F 0F 00 14 00 04 db 7Fh, 0Fh, 00h, 14h, 00h, 04h
-31E4:9535 00 00 00 A6 5B 00 db 00h, 00h, 00h,0A6h, 5Bh, 00h
-31E4:953B 46 16 db 46h, 16h
-31E4:953D 0008[00] db 8 dup (0)
-31E4:9545 20 57 6D 09 00 00 db 20h, 57h, 6Dh, 09h, 00h, 00h
-31E4:954B 72 71 00 00 80 00 db 72h, 71h, 00h, 00h, 80h, 00h
-31E4:9551 88 00 10 00 14 00 db 88h, 00h, 10h, 00h, 14h, 00h
-31E4:9557 02 01 3A 7F 0F 00 db 02h, 01h, 3Ah, 7Fh, 0Fh, 00h
-31E4:955D 14 00 04 00 00 00 db 14h, 00h, 04h, 00h, 00h, 00h
-31E4:9563 A6 5B 00 8A 19 db 0A6h, 5Bh, 00h, 8Ah, 19h
-31E4:9568 0008[00] db 8 dup (0)
-31E4:9570 20 57 6D 09 00 00 db 20h, 57h, 6Dh, 09h, 00h, 00h
-31E4:9576 72 71 00 00 80 00 db 72h, 71h, 00h, 00h, 80h, 00h
-31E4:957C 88 00 10 00 14 00 db 88h, 00h, 10h, 00h, 14h, 00h
-31E4:9582 02 01 3A 7F 0F 00 db 02h, 01h, 3Ah, 7Fh, 0Fh, 00h
-31E4:9588 14 00 04 00 00 00 db 14h, 00h, 04h, 00h, 00h, 00h
-31E4:958E A6 5B 00 92 1E db 0A6h, 5Bh, 00h, 92h, 1Eh
-31E4:9593 0008[00] db 8 dup (0)
-31E4:959B 20 57 6D 0F 00 00 db 20h, 57h, 6Dh, 0Fh, 00h, 00h
-31E4:95A1 72 71 00 00 B1 01 db 72h, 71h, 00h, 00h,0B1h, 01h
-31E4:95A7 B5 00 10 00 08 00 db 0B5h, 00h, 10h, 00h, 08h, 00h
-31E4:95AD 01 01 3A 7F 0B 00 db 01h, 01h, 3Ah, 7Fh, 0Bh, 00h
-31E4:95B3 08 00 04 00 00 00 db 08h, 00h, 04h, 00h, 00h, 00h
-31E4:95B9 9D 5B 00 06 26 00 db 9Dh, 5Bh, 00h, 06h, 26h, 00h
-31E4:95BF 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-31E4:95C5 01 10 80 05 F2 05 db 01h, 10h, 80h, 05h,0F2h, 05h
-31E4:95CB 11 02 00 00 C3 95 db 11h, 02h, 00h, 00h,0C3h, 95h
-31E4:95D1 30 00 00 72 71 00 db 30h, 00h, 00h, 72h, 71h, 00h
-31E4:95D7 00 21 01 EB 00 60 db 00h, 21h, 01h,0EBh, 00h, 60h
-31E4:95DD 00 40 00 01 01 3A db 00h, 40h, 00h, 01h, 01h, 3Ah
-31E4:95E3 7F 5C 00 40 00 04 db 7Fh, 5Ch, 00h, 40h, 00h, 04h
-31E4:95E9 00 00 00 2C 5A 00 db 00h, 00h, 00h, 2Ch, 5Ah, 00h
-31E4:95EF 72 26 db 72h, 26h
-31E4:95F1 0007[00] db 7 dup (0)
-31E4:95F8 20 C3 95 30 00 00 db 20h,0C3h, 95h, 30h, 00h, 00h
-31E4:95FE 72 71 00 00 61 01 db 72h, 71h, 00h, 00h, 61h, 01h
-31E4:9604 85 data_1064 db 85h
-31E4:9605 00 10 00 7D 00 01 db 00h, 10h, 00h, 7Dh, 00h, 01h
-31E4:960B 01 3A 7F 03 00 7D db 01h, 3Ah, 7Fh, 03h, 00h, 7Dh
-31E4:9611 00 01 00 00 00 35 db 00h, 01h, 00h, 00h, 00h, 35h
-31E4:9617 5A 00 db 5Ah, 00h
-31E4:9619 72 26 db 72h, 26h
-31E4:961B 0007[00] db 7 dup (0)
-31E4:9622 20 C3 95 30 00 00 db 20h,0C3h, 95h, 30h, 00h, 00h
-31E4:9628 72 71 00 00 81 01 db 72h, 71h, 00h, 00h, 81h, 01h
-31E4:962E 85 00 10 00 8D 00 db 85h, 00h, 10h, 00h, 8Dh, 00h
-31E4:9634 01 01 3A 7F 03 00 db 01h, 01h, 3Ah, 7Fh, 03h, 00h
-31E4:963A 8D 00 01 00 00 00 db 8Dh, 00h, 01h, 00h, 00h, 00h
-31E4:9640 3E 5A 00 72 26 00 db 3Eh, 5Ah, 00h, 72h, 26h, 00h
-31E4:9646 00 00 00 03 00 0A db 00h, 00h, 00h, 03h, 00h, 0Ah
-31E4:964C 59 06 04 8F 06 01 db 59h, 06h, 04h, 8Fh, 06h, 01h
-31E4:9652 10 80 09 02 00 00 db 10h, 80h, 09h, 02h, 00h, 00h
-31E4:9658 49 96 30 00 00 72 db 49h, 96h, 30h, 00h, 00h, 72h
-31E4:965E 71 00 00 06 01 07 db 71h, 00h, 00h, 06h, 01h, 07h
-31E4:9664 01 50 00 25 00 01 db 01h, 50h, 00h, 25h, 00h, 01h
-31E4:966A 01 3A 7F 50 00 25 db 01h, 3Ah, 7Fh, 50h, 00h, 25h
-31E4:9670 00 01 00 00 00 50 db 00h, 01h, 00h, 00h, 00h, 50h
-31E4:9676 5A 00 BC 26 00 00 db 5Ah, 00h,0BCh, 26h, 00h, 00h
-31E4:967C 00 00 00 00 41 04 db 00h, 00h, 00h, 00h, 41h, 04h
-31E4:9682 92 10 00 00 03 db 92h, 10h, 00h, 00h, 03h
-31E4:9687 0007[00] db 7 dup (0)
-31E4:968E F4 0C 94 0B 08 00 db 0F4h, 0Ch, 94h, 0Bh, 08h, 00h
-31E4:9694 34 0A D4 08 06 0D db 34h, 0Ah,0D4h, 08h, 06h, 0Dh
-31E4:969A 00 db 00h
-31E4:969B 0009[00] db 9 dup (0)
-31E4:96A4 DC 0D EF 6C db 0DCh, 0Dh,0EFh, 6Ch
-31E4:96A8 0008[00] db 8 dup (0)
-31E4:96B0 20 57 6D 06 00 00 db 20h, 57h, 6Dh, 06h, 00h, 00h
-31E4:96B6 72 71 00 00 C8 00 db 72h, 71h, 00h, 00h,0C8h, 00h
-31E4:96BC D3 00 40 00 3E 00 db 0D3h, 00h, 40h, 00h, 3Eh, 00h
-31E4:96C2 01 01 2D 98 30 00 db 01h, 01h, 2Dh, 98h, 30h, 00h
-31E4:96C8 3E 00 01 00 00 00 db 3Eh, 00h, 01h, 00h, 00h, 00h
-31E4:96CE 6B 5A 20 00 db 6Bh, 5Ah, 20h, 00h
-31E4:96D2 0008[00] db 8 dup (0)
-31E4:96DA 20 57 6D 06 00 00 db 20h, 57h, 6Dh, 06h, 00h, 00h
-31E4:96E0 72 71 00 00 60 00 db 72h, 71h, 00h, 00h, 60h, 00h
-31E4:96E6 68 00 20 00 20 00 db 68h, 00h, 20h, 00h, 20h, 00h
-31E4:96EC 01 01 BD 41 20 00 db 01h, 01h,0BDh, 41h, 20h, 00h
-31E4:96F2 20 00 01 00 00 00 db 20h, 00h, 01h, 00h, 00h, 00h
-31E4:96F8 74 5A 10 00 db 74h, 5Ah, 10h, 00h
-31E4:96FC 0008[00] db 8 dup (0)
-31E4:9704 20 57 6D 06 00 00 db 20h, 57h, 6Dh, 06h, 00h, 00h
-31E4:970A 72 71 00 00 60 00 db 72h, 71h, 00h, 00h, 60h, 00h
-31E4:9710 68 00 20 00 20 00 db 68h, 00h, 20h, 00h, 20h, 00h
-31E4:9716 01 01 BD 41 20 00 db 01h, 01h,0BDh, 41h, 20h, 00h
-31E4:971C 20 00 01 00 00 00 db 20h, 00h, 01h, 00h, 00h, 00h
-31E4:9722 7D 5A 20 00 db 7Dh, 5Ah, 20h, 00h
-31E4:9726 0007[00] db 7 dup (0)
-31E4:972D 46 04 92 10 00 00 db 46h, 04h, 92h, 10h, 00h, 00h
-31E4:9733 03 db 03h
-31E4:9734 0007[00] db 7 dup (0)
-31E4:973B F4 0C 94 0B 08 00 db 0F4h, 0Ch, 94h, 0Bh, 08h, 00h
-31E4:9741 34 0A D4 08 06 0D db 34h, 0Ah,0D4h, 08h, 06h, 0Dh
-31E4:9747 00 db 00h
-31E4:9748 0009[00] db 9 dup (0)
-31E4:9751 DC 0D EF 6C db 0DCh, 0Dh,0EFh, 6Ch
-31E4:9755 0008[00] db 8 dup (0)
-31E4:975D 20 57 6D 31 00 00 db 20h, 57h, 6Dh, 31h, 00h, 00h
-31E4:9763 72 71 00 00 C8 00 db 72h, 71h, 00h, 00h,0C8h, 00h
-31E4:9769 FC 00 40 00 3E 00 db 0FCh, 00h, 40h, 00h, 3Eh, 00h
-31E4:976F 01 01 2D 98 30 00 db 01h, 01h, 2Dh, 98h, 30h, 00h
-31E4:9775 3E 00 01 00 00 00 db 3Eh, 00h, 01h, 00h, 00h, 00h
-31E4:977B 6B 5A 70 00 db 6Bh, 5Ah, 70h, 00h
-31E4:977F 0008[00] db 8 dup (0)
-31E4:9787 20 57 6D 31 00 00 db 20h, 57h, 6Dh, 31h, 00h, 00h
-31E4:978D 72 71 00 00 60 00 db 72h, 71h, 00h, 00h, 60h, 00h
-31E4:9793 68 00 20 00 20 00 db 68h, 00h, 20h, 00h, 20h, 00h
-31E4:9799 01 01 BD 41 20 00 db 01h, 01h,0BDh, 41h, 20h, 00h
-31E4:979F 20 00 01 00 00 00 db 20h, 00h, 01h, 00h, 00h, 00h
-31E4:97A5 74 5A db 74h, 5Ah
-31E4:97A7 000A[00] db 10 dup (0)
-31E4:97B1 20 57 6D 31 00 00 db 20h, 57h, 6Dh, 31h, 00h, 00h
-31E4:97B7 72 71 00 00 60 00 db 72h, 71h, 00h, 00h, 60h, 00h
-31E4:97BD 68 00 20 00 20 00 db 68h, 00h, 20h, 00h, 20h, 00h
-31E4:97C3 01 01 BD 41 20 00 db 01h, 01h,0BDh, 41h, 20h, 00h
-31E4:97C9 20 00 01 00 00 00 db 20h, 00h, 01h, 00h, 00h, 00h
-31E4:97CF 7D 5A db 7Dh, 5Ah
-31E4:97D1 000A[00] db 10 dup (0)
-31E4:97DB 20 00 00 2D 00 00 db 20h, 00h, 00h, 2Dh, 00h, 00h
-31E4:97E1 72 71 00 00 70 01 db 72h, 71h, 00h, 00h, 70h, 01h
-31E4:97E7 1B 01 20 00 25 00 db 1Bh, 01h, 20h, 00h, 25h, 00h
-31E4:97ED 01 01 BD 41 18 00 db 01h, 01h,0BDh, 41h, 18h, 00h
-31E4:97F3 25 00 01 00 00 00 db 25h, 00h, 01h, 00h, 00h, 00h
-31E4:97F9 86 5A 00 db 86h, 5Ah, 00h
-31E4:97FC 0009[00] db 9 dup (0)
-31E4:9805 20 57 6D 29 00 00 db 20h, 57h, 6Dh, 29h, 00h, 00h
-31E4:980B BD 41 00 00 A3 00 db 0BDh, 41h, 00h, 00h,0A3h, 00h
-31E4:9811 C9 00 D0 00 59 00 db 0C9h, 00h,0D0h, 00h, 59h, 00h
-31E4:9817 02 00 B3 87 14 00 db 02h, 00h,0B3h, 87h, 14h, 00h
-31E4:981D 0C 00 04 00 00 00 db 0Ch, 00h, 04h, 00h, 00h, 00h
-31E4:9823 F6 59 00 db 0F6h, 59h, 00h
-31E4:9826 4E 27 db 4Eh, 27h
-31E4:9828 00 00 00 00 db 0, 0, 0, 0
-31E4:982C 0000 new_room_number_2 dw 0 ; xref 273F:60AB
-31E4:982E 0000 new_room_x dw 0 ; xref 273F:6093
-31E4:9830 0000 new_room_y dw 0 ; xref 273F:609F
-31E4:9832 0001 room_number dw 1
-31E4:9834 00 cursor_state db 0
-31E4:9835 00 num_inventory_items db 0
-31E4:9836 01 header_flag_mask db 1
-31E4:9837 00 talk_dialog_active db 0
-31E4:9838 0000 data_1087 dw 0
-31E4:983A 00 data_1088 db 0
-31E4:983B 03E8 talk_character_id dw PLAYER_HOTSPOT_ID
-31E4:983D 6B 00 db 6Bh, 00h
-31E4:983F 03EA data_1090 dw 3EAh ; xref 273F:1FC8
-31E4:9841 0000 data_1091 dw 0 ; xref 273F:1489
-31E4:9843 0000 current_hotspot_id dw 0
-31E4:9845 0000 current_character_id dw 0
-31E4:9847 0000 data_1093 dw 0 ; xref 273F:62B6
-
-31E4:9849 00 pathfind_data db 00 ; Set of entries each 120 bytes
-31E4:984A A5 C4 00 00 00 pathfind_data2 db 00h,0A5h,0C4h, 00h, 00h, 00h
-31E4:984F 96 75 5A AD 93 A0 db 96h, 75h, 5Ah,0ADh, 93h,0A0h
-31E4:9855 74 C9 24 44 8F C4 db 74h,0C9h, 24h, 44h, 8Fh,0C4h
-31E4:985B A9 88 93 3C 15 86 db 0A9h, 88h, 93h, 3Ch, 15h, 86h
-31E4:9861 24 A8 1B 44 7E E0 db 24h,0A8h, 1Bh, 44h, 7Eh,0E0h
-31E4:9867 69 C2 D4 CC C4 4C db 69h,0C2h,0D4h,0CCh,0C4h, 4Ch
-31E4:986D FB F4 86 E2 2E 6F db 0FBh,0F4h, 86h,0E2h, 2Eh, 6Fh
-31E4:9873 D6 C6 B8 D5 FF FC db 0D6h,0C6h,0B8h,0D5h,0FFh,0FCh
-31E4:9879 1E 80 9C 00 05 4C db 1Eh, 80h, 9Ch, 00h, 05h, 4Ch
-31E4:987F CC 56 00 05 22 11 db 0CCh, 56h, 00h, 05h, 22h, 11h
-31E4:9885 56 00 05 62 98 5C db 56h, 00h, 05h, 62h, 98h, 5Ch
-31E4:988B 00 04 A1 45 12 00 db 00h, 04h,0A1h, 45h, 12h, 00h
-31E4:9891 04 00 09 46 00 07 db 04h, 00h, 09h, 46h, 00h, 07h
-31E4:9897 EF 74 96 00 05 00 db 0EFh, 74h, 96h, 00h, 05h, 00h
-31E4:989D 02 36 00 07 FF E9 db 02h, 36h, 00h, 07h,0FFh,0E9h
-31E4:98A3 D0 03 F8 01 FF F2 db 0D0h, 03h,0F8h, 01h,0FFh,0F2h
-31E4:98A9 00 20 00 0B D6 00 db 00h, 20h, 00h, 0Bh,0D6h, 00h
-31E4:98AF 20 00 06 16 EF E0 db 20h, 00h, 06h, 16h,0EFh,0E0h
-31E4:98B5 00 01 EE 20 E0 00 db 00h, 01h,0EEh, 20h,0E0h, 00h
-31E4:98BB 01 3A B7 7F FF FE db 01h, 3Ah,0B7h, 7Fh,0FFh,0FEh
-31E4:98C1 C6 00 80 24 01 00 db 0C6h, 00h, 80h, 24h, 01h, 00h
-31E4:98C7 50 80 24 01 00 8E db 50h, 80h, 24h, 01h, 00h, 8Eh
-31E4:98CD 80 24 01 00 82 80 db 80h, 24h, 01h, 00h, 82h, 80h
-31E4:98D3 24 01 00 16 80 24 db 24h, 01h, 00h, 16h, 80h, 24h
-31E4:98D9 01 00 90 80 24 01 db 01h, 00h, 90h, 80h, 24h, 01h
-31E4:98DF 00 A6 80 24 01 FF db 00h,0A6h, 80h, 24h, 01h,0FFh
-31E4:98E5 04 80 24 01 00 46 db 04h, 80h, 24h, 01h, 00h, 46h
-31E4:98EB 80 E7 01 00 62 90 db 80h,0E7h, 01h, 00h, 62h, 90h
-31E4:98F1 81 09 00 44 90 81 db 81h, 09h, 00h, 44h, 90h, 81h
-31E4:98F7 09 00 5E 90 81 09 db 09h, 00h, 5Eh, 90h, 81h, 09h
-31E4:98FD 00 36 90 81 09 00 db 00h, 36h, 90h, 81h, 09h, 00h
-31E4:9903 59 FF FF 0F E0 96 db 59h,0FFh,0FFh, 0Fh,0E0h, 96h
-31E4:9909 00 00 00 10 88 00 db 00h, 00h, 00h, 10h, 88h, 00h
-31E4:990F 00 00 08 C8 00 7E db 00h, 00h, 08h,0C8h, 00h, 7Eh
-31E4:9915 00 0C 30 00 00 00 db 00h, 0Ch, 30h, 00h, 00h, 00h
-31E4:991B 0C C0 00 00 00 0C db 0Ch,0C0h, 00h, 00h, 00h, 0Ch
-31E4:9921 FF FF FF FF FF 80 db 0FFh,0FFh,0FFh,0FFh,0FFh, 80h
-31E4:9927 0A 94 D0 82 BD 4D db 0Ah, 94h,0D0h, 82h,0BDh, 4Dh
-31E4:992D 31 4E 08 DF 4E 6C db 31h, 4Eh, 08h,0DFh, 4Eh, 6Ch
-31E4:9933 8E B6 0A 45 00 A2 db 8Eh,0B6h, 0Ah, 45h, 00h,0A2h
-31E4:9939 BE 02 95 44 58 80 db 0BEh, 02h, 95h, 44h, 58h, 80h
-31E4:993F BA 80 16 26 FC B6 db 0BAh, 80h, 16h, 26h,0FCh,0B6h
-31E4:9945 97 00 22 8A A6 C4 db 97h, 00h, 22h, 8Ah,0A6h,0C4h
-31E4:994B 30 E8 88 7A 6C 45 db 30h,0E8h, 88h, 7Ah, 6Ch, 45h
-31E4:9951 0A B2 72 87 87 C6 db 0Ah,0B2h, 72h, 87h, 87h,0C6h
-31E4:9957 83 8E 8A 66 06 BC db 83h, 8Eh, 8Ah, 66h, 06h,0BCh
-31E4:995D FE 92 C6 E6 81 03 db 0FEh, 92h,0C6h,0E6h, 81h, 03h
-31E4:9963 02 16 0E FF 03 7F db 02h, 16h, 0Eh,0FFh, 03h, 7Fh
-31E4:9969 F7 58 80 02 00 00 db 0F7h, 58h, 80h, 02h, 00h, 00h
-31E4:996F 00 80 02 00 00 00 db 00h, 80h, 02h, 00h, 00h, 00h
-31E4:9975 80 02 00 00 00 80 db 80h, 02h, 00h, 00h, 00h, 80h
-31E4:997B 02 00 00 00 80 02 db 02h, 00h, 00h, 00h, 80h, 02h
-31E4:9981 00 00 00 80 03 FF db 00h, 00h, 00h, 80h, 03h,0FFh
-31E4:9987 FF FF 80 03 FF FF db 0FFh,0FFh, 80h, 03h,0FFh,0FFh
-31E4:998D FF 80 0F C0 00 00 db 0FFh, 80h, 0Fh,0C0h, 00h, 00h
-31E4:9993 70 00 00 00 00 00 db 70h, 00h, 00h, 00h, 00h, 00h
-31E4:9999 38 00 1F F0 1F 10 db 38h, 00h, 1Fh,0F0h, 1Fh, 10h
-31E4:999F 00 00 00 14 30 00 db 00h, 00h, 00h, 14h, 30h, 00h
-31E4:99A5 00 00 16 FF FF FF db 00h, 00h, 16h,0FFh,0FFh,0FFh
-31E4:99AB FF FF E9 FF 9B 32 db 0FFh,0FFh,0E9h,0FFh, 9Bh, 32h
-31E4:99B1 FF 02 80 36 22 AE db 0FFh, 02h, 80h, 36h, 22h,0AEh
-31E4:99B7 FE AA A5 36 E9 A2 db 0FEh,0AAh,0A5h, 36h,0E9h,0A2h
-31E4:99BD BF 80 CE 8C 86 D2 db 0BFh, 80h,0CEh, 8Ch, 86h,0D2h
-31E4:99C3 D6 16 E2 36 C0 3D db 0D6h, 16h,0E2h, 36h,0C0h, 3Dh
-31E4:99C9 D6 9C 4A AE 88 A6 db 0D6h, 9Ch, 4Ah,0AEh, 88h,0A6h
-31E4:99CF B4 BA B5 10 FD 9D db 0B4h,0BAh,0B5h, 10h,0FDh, 9Dh
-31E4:99D5 93 BE 57 2B E1 02 db 93h,0BEh, 57h, 2Bh,0E1h, 02h
-31E4:99DB 65 CE 6E BB FF FF db 65h,0CEh, 6Eh,0BBh,0FFh,0FFh
-31E4:99E1 FF FF D5 02 00 00 db 0FFh,0FFh,0D5h, 02h, 00h, 00h
-31E4:99E7 00 80 02 00 00 00 db 00h, 80h, 02h, 00h, 00h, 00h
-31E4:99ED 80 02 00 00 00 80 db 80h, 02h, 00h, 00h, 00h, 80h
-31E4:99F3 02 00 00 00 80 02 db 02h, 00h, 00h, 00h, 80h, 02h
-31E4:99F9 00 00 00 80 02 00 db 00h, 00h, 00h, 80h, 02h, 00h
-31E4:99FF 00 00 80 07 FF FF db 00h, 00h, 80h, 07h,0FFh,0FFh
-31E4:9A05 FF C0 08 00 00 00 db 0FFh,0C0h, 08h, 00h, 00h, 00h
-31E4:9A0B 20 10 00 00 00 10 db 20h, 10h, 00h, 00h, 00h, 10h
-31E4:9A11 3F FF 00 00 0C 40 db 3Fh,0FFh, 00h, 00h, 0Ch, 40h
-31E4:9A17 00 00 00 04 FF FF db 00h, 00h, 00h, 04h,0FFh,0FFh
-31E4:9A1D FF 83 FF B0 00 00 db 0FFh, 83h,0FFh,0B0h, 00h, 00h
-31E4:9A23 02 00 F0 00 00 00 db 02h, 00h,0F0h, 00h, 00h, 00h
-31E4:9A29 00 11 22 00 00 30 db 00h, 11h, 22h, 00h, 00h, 30h
-31E4:9A2F 60 08 A0 C8 C4 C5 db 60h, 08h,0A0h,0C8h,0C4h,0C5h
-31E4:9A35 82 20 62 8C 88 2F db 82h, 20h, 62h, 8Ch, 88h, 2Fh
-31E4:9A3B 20 22 A0 32 10 22 db 20h, 22h,0A0h, 32h, 10h, 22h
-31E4:9A41 D7 48 87 64 0C 00 db 0D7h, 48h, 87h, 64h, 0Ch, 00h
-31E4:9A47 74 34 1A 63 F1 10 db 74h, 34h, 1Ah, 63h,0F1h, 10h
-31E4:9A4D A4 64 9A 11 34 81 db 0A4h, 64h, 9Ah, 11h, 34h, 81h
-31E4:9A53 09 02 10 64 31 92 db 09h, 02h, 10h, 64h, 31h, 92h
-31E4:9A59 A2 15 AA A0 41 AE db 0A2h, 15h,0AAh,0A0h, 41h,0AEh
-31E4:9A5F 10 10 05 5A 22 10 db 10h, 10h, 05h, 5Ah, 22h, 10h
-31E4:9A65 00 88 B0 04 08 84 db 00h, 88h,0B0h, 04h, 08h, 84h
-31E4:9A6B 18 B8 64 04 6E 40 db 18h,0B8h, 64h, 04h, 6Eh, 40h
-31E4:9A71 26 C4 02 00 B0 55 db 26h,0C4h, 02h, 00h,0B0h, 55h
-31E4:9A77 C8 03 FF 05 28 10 db 0C8h, 03h,0FFh, 05h, 28h, 10h
-31E4:9A7D 00 FC 08 19 98 00 db 00h,0FCh, 08h, 19h, 98h, 00h
-31E4:9A83 3F 93 E0 06 00 40 db 3Fh, 93h,0E0h, 06h, 00h, 40h
-31E4:9A89 30 18 61 0F 81 00 db 30h, 18h, 61h, 0Fh, 81h, 00h
-31E4:9A8F 51 36 B0 0C A2 42 db 51h, 36h,0B0h, 0Ch,0A2h, 42h
-31E4:9A95 10 43 F1 86 02 6C db 10h, 43h,0F1h, 86h, 02h, 6Ch
-31E4:9A9B 1E 00 44 A8 db 1Eh, 00h, 44h,0A8h
-31E4:9A9F B1 data_1094 db 0B1h
-31E4:9AA0 F5 A7 00 00 00 00 db 0F5h,0A7h, 00h, 00h, 00h, 00h
-31E4:9AA6 00 FD 55 65 72 D7 db 00h,0FDh, 55h, 65h, 72h,0D7h
-31E4:9AAC 03 5D A9 75 40 4B db 03h, 5Dh,0A9h, 75h, 40h, 4Bh
-31E4:9AB2 4C 99 44 5B 2E 94 db 4Ch, 99h, 44h, 5Bh, 2Eh, 94h
-31E4:9AB8 98 AA A5 81 25 92 db 98h,0AAh,0A5h, 81h, 25h, 92h
-31E4:9ABE 4A CD EA 40 00 09 db 4Ah,0CDh,0EAh, 40h, 00h, 09h
-31E4:9AC4 72 00 19 52 A0 06 db 72h, 00h, 19h, 52h,0A0h, 06h
-31E4:9ACA AC 39 54 51 42 80 db 0ACh, 39h, 54h, 51h, 42h, 80h
-31E4:9AD0 00 AA 29 22 52 B2 db 00h,0AAh, 29h, 22h, 52h,0B2h
-31E4:9AD6 00 02 44 00 16 4C db 00h, 02h, 44h, 00h, 16h, 4Ch
-31E4:9ADC 90 00 56 87 EB BB db 90h, 00h, 56h, 87h,0EBh,0BBh
-31E4:9AE2 76 83 B3 00 00 20 db 76h, 83h,0B3h, 00h, 00h, 20h
-31E4:9AE8 BC 02 CF FF 1E 00 db 0BCh, 02h,0CFh,0FFh, 1Eh, 00h
-31E4:9AEE FF F0 00 80 FF 00 db 0FFh,0F0h, 00h, 80h,0FFh, 00h
-31E4:9AF4 00 00 FF 00 00 00 db 00h, 00h,0FFh, 00h, 00h, 00h
-31E4:9AFA 00 00 FC 00 00 00 db 00h, 00h,0FCh, 00h, 00h, 00h
-31E4:9B00 7F 82 00 00 00 58 db 7Fh, 82h, 00h, 00h, 00h, 58h
-31E4:9B06 B9 00 00 01 9F 96 db 0B9h, 00h, 00h, 01h, 9Fh, 96h
-31E4:9B0C 80 00 06 60 8A 40 db 80h, 00h, 06h, 60h, 8Ah, 40h
-31E4:9B12 00 F9 C0 56 3F FF db 00h,0F9h,0C0h, 56h, 3Fh,0FFh
-31E4:9B18 3A 13 FF E0 20 40 db 3Ah, 13h,0FFh,0E0h, 20h, 40h
-31E4:9B1E 80 FF FB 56 19 90 db 80h,0FFh,0FBh, 56h, 19h, 90h
-31E4:9B24 FF EF 64 44 24 FF db 0FFh,0EFh, 64h, 44h, 24h,0FFh
-31E4:9B2A E0 20 08 30 FF FD db 0E0h, 20h, 08h, 30h,0FFh,0FDh
-31E4:9B30 EA 69 90 FF F2 F4 db 0EAh, 69h, 90h,0FFh,0F2h,0F4h
-31E4:9B36 02 81 FF E1 4B 01 db 02h, 81h,0FFh,0E1h, 4Bh, 01h
-31E4:9B3C 28 FF FA 50 AB 26 db 28h,0FFh,0FAh, 50h,0ABh, 26h
-31E4:9B42 00 09 E0 91 1E 00 db 00h, 09h,0E0h, 91h, 1Eh, 00h
-31E4:9B48 09 53 84 B0 00 08 db 09h, 53h, 84h,0B0h, 00h, 08h
-31E4:9B4E 2F 2D A0 00 09 43 db 2Fh, 2Dh,0A0h, 00h, 09h, 43h
-31E4:9B54 1C E3 00 09 38 85 db 1Ch,0E3h, 00h, 09h, 38h, 85h
-31E4:9B5A 39 00 09 8D 57 DE db 39h, 00h, 09h, 8Dh, 57h,0DEh
-31E4:9B60 00 09 FF 28 19 00 db 00h, 09h,0FFh, 28h, 19h, 00h
-31E4:9B66 FE 00 9D 81 00 00 db 0FEh, 00h, 9Dh, 81h, 00h, 00h
-31E4:9B6C 00 67 69 03 C0 00 db 00h, 67h, 69h, 03h,0C0h, 00h
-31E4:9B72 15 18 00 40 00 09 db 15h, 18h, 00h, 40h, 00h, 09h
-31E4:9B78 6B FF FF FF FB 85 db 6Bh,0FFh,0FFh,0FFh,0FBh, 85h
-31E4:9B7E D7 44 02 FA F5 FB db 0D7h, 44h, 02h,0FAh,0F5h,0FBh
-31E4:9B84 31 A8 63 FF C0 16 db 31h,0A8h, 63h,0FFh,0C0h, 16h
-31E4:9B8A BD A4 FE 15 21 22 db 0BDh,0A4h,0FEh, 15h, 21h, 22h
-31E4:9B90 78 70 05 23 88 82 db 78h, 70h, 05h, 23h, 88h, 82h
-31E4:9B96 74 D4 D5 4B 5F AA db 74h,0D4h,0D5h, 4Bh, 5Fh,0AAh
-31E4:9B9C 00 09 9A 9B 22 CD db 00h, 09h, 9Ah, 9Bh, 22h,0CDh
-31E4:9BA2 4F 55 9A 8A 05 C0 db 4Fh, 55h, 9Ah, 8Ah, 05h,0C0h
-31E4:9BA8 A8 FE FC 01 07 56 db 0A8h,0FEh,0FCh, 01h, 07h, 56h
-31E4:9BAE E2 16 92 B8 FE 33 db 0E2h, 16h, 92h,0B8h,0FEh, 33h
-31E4:9BB4 5F E7 42 06 2C CF db 5Fh,0E7h, 42h, 06h, 2Ch,0CFh
-31E4:9BBA 42 17 E5 A7 F2 9D db 42h, 17h,0E5h,0A7h,0F2h, 9Dh
-31E4:9BC0 64 24 39 F3 A4 34 db 64h, 24h, 39h,0F3h,0A4h, 34h
-31E4:9BC6 2F 20 CB 92 A4 22 db 2Fh, 20h,0CBh, 92h,0A4h, 22h
-31E4:9BCC 0B 26 E1 B4 24 03 db 0Bh, 26h,0E1h,0B4h, 24h, 03h
-31E4:9BD2 AD 9C A4 23 3A 00 db 0ADh, 9Ch,0A4h, 23h, 3Ah, 00h
-31E4:9BD8 00 E4 37 DD AB 24 db 00h,0E4h, 37h,0DDh,0ABh, 24h
-31E4:9BDE 44 20 00 B1 C6 CC db 44h, 20h, 00h,0B1h,0C6h,0CCh
-31E4:9BE4 3F 87 9B 01 D0 07 db 3Fh, 87h, 9Bh, 01h,0D0h, 07h
-31E4:9BEA C8 1A 28 60 01 E7 db 0C8h, 1Ah, 28h, 60h, 01h,0E7h
-31E4:9BF0 A3 D7 A0 00 12 BB db 0A3h,0D7h,0A0h, 00h, 12h,0BBh
-31E4:9BF6 D4 A0 00 11 20 59 db 0D4h,0A0h, 00h, 11h, 20h, 59h
-31E4:9BFC C0 00 0F 25 1B 40 db 0C0h, 00h, 0Fh, 25h, 1Bh, 40h
-31E4:9C02 00 09 57 EE 40 00 db 00h, 09h, 57h,0EEh, 40h, 00h
-31E4:9C08 08 A8 5E C4 7A 68 db 08h,0A8h, 5Eh,0C4h, 7Ah, 68h
-31E4:9C0E 00 D3 9D 90 2E DB db 00h,0D3h, 9Dh, 90h, 2Eh,0DBh
-31E4:9C14 91 77 D6 BB 25 A4 db 91h, 77h,0D6h,0BBh, 25h,0A4h
-31E4:9C1A EC 09 7F 5E 00 BE db 0ECh, 09h, 7Fh, 5Eh, 00h,0BEh
-31E4:9C20 D7 B6 00 A6 4C ED db 0D7h,0B6h, 00h,0A6h, 4Ch,0EDh
-31E4:9C26 FD 09 0B A5 94 38 db 0FDh, 09h, 0Bh,0A5h, 94h, 38h
-31E4:9C2C F5 A4 FE BC ED 03 db 0F5h,0A4h,0FEh,0BCh,0EDh, 03h
-31E4:9C32 A0 FC CE AE FB 57 db 0A0h,0FCh,0CEh,0AEh,0FBh, 57h
-31E4:9C38 EE 73 2A 09 99 EE db 0EEh, 73h, 2Ah, 09h, 99h,0EEh
-31E4:9C3E 6F A4 94 E7 EC 55 db 6Fh,0A4h, 94h,0E7h,0ECh, 55h
-31E4:9C44 6B 2C 3F FC 00 7A db 6Bh, 2Ch, 3Fh,0FCh, 00h, 7Ah
-31E4:9C4A 1B B5 7D FF A8 2C db 1Bh,0B5h, 7Dh,0FFh,0A8h, 2Ch
-31E4:9C50 DD FE 00 68 A4 4E db 0DDh,0FEh, 00h, 68h,0A4h, 4Eh
-31E4:9C56 C4 00 2B 02 FF F8 db 0C4h, 00h, 2Bh, 02h,0FFh,0F8h
-31E4:9C5C 00 1F F4 00 00 00 db 00h, 1Fh,0F4h, 00h, 00h, 00h
-31E4:9C62 00 13 00 00 00 00 db 00h, 13h, 00h, 00h, 00h, 00h
-31E4:9C68 12 00 00 00 00 12 db 12h, 00h, 00h, 00h, 00h, 12h
-31E4:9C6E FC 00 00 00 17 04 db 0FCh, 00h, 00h, 00h, 17h, 04h
-31E4:9C74 00 00 00 16 04 00 db 00h, 00h, 00h, 16h, 04h, 00h
-31E4:9C7A 00 00 12 07 FC 00 db 00h, 00h, 12h, 07h,0FCh, 00h
-31E4:9C80 00 7A FF E7 48 84 db 00h, 7Ah,0FFh,0E7h, 48h, 84h
-31E4:9C86 20 BC 1F DF BD AE db 20h,0BCh, 1Fh,0DFh,0BDh,0AEh
-31E4:9C8C CD C7 9A 84 70 EB db 0CDh,0C7h, 9Ah, 84h, 70h,0EBh
-31E4:9C92 CB 34 D7 9B 8B 93 db 0CBh, 34h,0D7h, 9Bh, 8Bh, 93h
-31E4:9C98 2F 32 3A 5D D8 EE db 2Fh, 32h, 3Ah, 5Dh,0D8h,0EEh
-31E4:9C9E E6 CE 9B 13 79 9D db 0E6h,0CEh, 9Bh, 13h, 79h, 9Dh
-31E4:9CA4 54 72 D3 C1 00 3A db 54h, 72h,0D3h,0C1h, 00h, 3Ah
-31E4:9CAA 6F FB 5D 94 2A 1A db 6Fh,0FBh, 5Dh, 94h, 2Ah, 1Ah
-31E4:9CB0 AC 45 9A D6 6B CF db 0ACh, 45h, 9Ah,0D6h, 6Bh,0CFh
-31E4:9CB6 F9 8D 4C 4B EF 0B db 0F9h, 8Dh, 4Ch, 4Bh,0EFh, 0Bh
-31E4:9CBC B8 62 6F 67 0C 3B db 0B8h, 62h, 6Fh, 67h, 0Ch, 3Bh
-31E4:9CC2 6E 85 EF 0F 40 1C db 6Eh, 85h,0EFh, 0Fh, 40h, 1Ch
-31E4:9CC8 7E FF 08 DF EC EF db 7Eh,0FFh, 08h,0DFh,0ECh,0EFh
-31E4:9CCE FD 09 E0 1F FF ED db 0FDh, 09h,0E0h, 1Fh,0FFh,0EDh
-31E4:9CD4 EE 00 00 17 5F 00 db 0EEh, 00h, 00h, 17h, 5Fh, 00h
-31E4:9CDA 00 01 FF E0 00 00 db 00h, 01h,0FFh,0E0h, 00h, 00h
-31E4:9CE0 07 00 00 00 00 19 db 07h, 00h, 00h, 00h, 00h, 19h
-31E4:9CE6 00 00 00 00 6E 00 db 00h, 00h, 00h, 00h, 6Eh, 00h
-31E4:9CEC 00 00 00 9B 00 00 db 00h, 00h, 00h, 9Bh, 00h, 00h
-31E4:9CF2 00 07 E7 FE 1F FF db 00h, 07h,0E7h,0FEh, 1Fh,0FFh
-31E4:9CF8 F9 DC 4E 46 C0 C1 db 0F9h,0DCh, 4Eh, 46h,0C0h,0C1h
-31E4:9CFE 4C FF FB DA 2D 50 db 4Ch,0FFh,0FBh,0DAh, 2Dh, 50h
-31E4:9D04 7A BB 53 C6 22 FF db 7Ah,0BBh, 53h,0C6h, 22h,0FFh
-31E4:9D0A B7 66 8F 02 39 97 db 0B7h, 66h, 8Fh, 02h, 39h, 97h
-31E4:9D10 DF 28 78 DB 46 FC db 0DFh, 28h, 78h,0DBh, 46h,0FCh
-31E4:9D16 2C 86 7A FD EE AE db 2Ch, 86h, 7Ah,0FDh,0EEh,0AEh
-31E4:9D1C D2 DF 78 31 35 9C db 0D2h,0DFh, 78h, 31h, 35h, 9Ch
-31E4:9D22 FB FF E9 AC AC FD db 0FBh,0FFh,0E9h,0ACh,0ACh,0FDh
-31E4:9D28 FC 2D C6 4E D7 DC db 0FCh, 2Dh,0C6h, 4Eh,0D7h,0DCh
-31E4:9D2E 2E AB A5 AF BC 21 db 2Eh,0ABh,0A5h,0AFh,0BCh, 21h
-31E4:9D34 2F EC 9F BC 2C C6 db 2Fh,0ECh, 9Fh,0BCh, 2Ch,0C6h
-31E4:9D3A 7E DF FC 29 FA A6 db 7Eh,0DFh,0FCh, 29h,0FAh,0A6h
-31E4:9D40 FA EC 3E 3F EF F6 db 0FAh,0ECh, 3Eh, 3Fh,0EFh,0F6h
-31E4:9D46 FC 2B D7 7D BB AC db 0FCh, 2Bh,0D7h, 7Dh,0BBh,0ACh
-31E4:9D4C 3F 2D D9 F7 F0 03 db 3Fh, 2Dh,0D9h,0F7h,0F0h, 03h
-31E4:9D52 55 BF F6 A0 00 C5 db 55h,0BFh,0F6h,0A0h, 00h,0C5h
-31E4:9D58 67 7F C0 00 2C DE db 67h, 7Fh,0C0h, 00h, 2Ch,0DEh
-31E4:9D5E EE C0 00 12 BA 97 db 0EEh,0C0h, 00h, 12h,0BAh, 97h
-31E4:9D64 C0 00 12 AF BE C0 db 0C0h, 00h, 12h,0AFh,0BEh,0C0h
-31E4:9D6A 00 13 BD FF C0 00 db 00h, 13h,0BDh,0FFh,0C0h, 00h
-31E4:9D70 15 B2 F9 CF E0 84 db 15h,0B2h,0F9h,0CFh,0E0h, 84h
-31E4:9D76 21 EF 3E 44 9D A8 db 21h,0EFh, 3Eh, 44h, 9Dh,0A8h
-31E4:9D7C C0 18 0E A0 25 DF db 0C0h, 18h, 0Eh,0A0h, 25h,0DFh
-31E4:9D82 EA FA 80 22 50 6B db 0EAh,0FAh, 80h, 22h, 50h, 6Bh
-31E4:9D88 0A 9D 24 50 6B FC db 0Ah, 9Dh, 24h, 50h, 6Bh,0FCh
-31E4:9D8E A0 08 50 4B FE AA db 0A0h, 08h, 50h, 4Bh,0FEh,0AAh
-31E4:9D94 D8 D0 79 0A 80 06 db 0D8h,0D0h, 79h, 0Ah, 80h, 06h
-31E4:9D9A 50 59 0A B5 42 D0 db 50h, 59h, 0Ah,0B5h, 42h,0D0h
-31E4:9DA0 49 08 AD 34 70 7F db 49h, 08h,0ADh, 34h, 70h, 7Fh
-31E4:9DA6 0C 80 06 FF 80 03 db 0Ch, 80h, 06h,0FFh, 80h, 03h
-31E4:9DAC FE 42 F8 00 00 03 db 0FEh, 42h,0F8h, 00h, 00h, 03h
-31E4:9DB2 7E 78 00 40 01 80 db 7Eh, 78h, 00h, 40h, 01h, 80h
-31E4:9DB8 F8 00 F8 00 7F D8 db 0F8h, 00h,0F8h, 00h, 7Fh,0D8h
-31E4:9DBE 01 FC 00 7F E8 00 db 01h,0FCh, 00h, 7Fh,0E8h, 00h
-31E4:9DC4 00 00 7F E8 00 00 db 00h, 00h, 7Fh,0E8h, 00h, 00h
-31E4:9DCA 00 FF F4 00 00 01 db 00h,0FFh,0F4h, 00h, 00h, 01h
-31E4:9DD0 FF B2 00 00 07 FF db 0FFh,0B2h, 00h, 00h, 07h,0FFh
-31E4:9DD6 ED 00 00 00 7F BE db 0EDh, 00h, 00h, 00h, 7Fh,0BEh
-31E4:9DDC 80 00 FF FF 0D 60 db 80h, 00h,0FFh,0FFh, 0Dh, 60h
-31E4:9DE2 0F FF FF FB DF FF db 0Fh,0FFh,0FFh,0FBh,0DFh,0FFh
-31E4:9DE8 FF FF 08 1B 61 08 db 0FFh,0FFh, 08h, 1Bh, 61h, 08h
-31E4:9DEE 46 BE 7F 7D DE 7B db 46h,0BEh, 7Fh, 7Dh,0DEh, 7Bh
-31E4:9DF4 94 D5 9F FF F6 01 db 94h,0D5h, 9Fh,0FFh,0F6h, 01h
-31E4:9DFA AF 42 BF D9 77 56 db 0AFh, 42h,0BFh,0D9h, 77h, 56h
-31E4:9E00 FD 3B 56 86 76 C3 db 0FDh, 3Bh, 56h, 86h, 76h,0C3h
-31E4:9E06 F3 CA 24 F9 BB ED db 0F3h,0CAh, 24h,0F9h,0BBh,0EDh
-31E4:9E0C C7 3D 75 B0 6E 96 db 0C7h, 3Dh, 75h,0B0h, 6Eh, 96h
-31E4:9E12 4F 6A 0F DD AA 03 db 4Fh, 6Ah, 0Fh,0DDh,0AAh, 03h
-31E4:9E18 71 6E 7F 57 CE E5 db 71h, 6Eh, 7Fh, 57h,0CEh,0E5h
-31E4:9E1E 4F D2 FF 11 9A D1 db 4Fh,0D2h,0FFh, 11h, 9Ah,0D1h
-31E4:9E24 B7 5A 6C D5 BD C7 db 0B7h, 5Ah, 6Ch,0D5h,0BDh,0C7h
-31E4:9E2A 7C 3F 3E 2D BF F7 db 7Ch, 3Fh, 3Eh, 2Dh,0BFh,0F7h
-31E4:9E30 E4 B0 C9 41 7E 4C db 0E4h,0B0h,0C9h, 41h, 7Eh, 4Ch
-31E4:9E36 1D F2 67 FD FC D7 db 1Dh,0F2h, 67h,0FDh,0FCh,0D7h
-31E4:9E3C F7 EB 7E 7A 6D 55 db 0F7h,0EBh, 7Eh, 7Ah, 6Dh, 55h
-31E4:9E42 FF 80 5F FF FE 00 db 0FFh, 80h, 5Fh,0FFh,0FEh, 00h
-31E4:9E48 00 E0 db 00h,0E0h
-31E4:9E4A 0008[00] db 8 dup (0)
-31E4:9E52 FF 00 00 00 0F 3E db 0FFh, 00h, 00h, 00h, 0Fh, 3Eh
-31E4:9E58 00 00 01 F3 FA 00 db 00h, 00h, 01h,0F3h,0FAh, 00h
-31E4:9E5E 00 06 7C BC AF FD db 00h, 06h, 7Ch,0BCh,0AFh,0FDh
-31E4:9E64 F5 6A 74 F7 BD F7 db 0F5h, 6Ah, 74h,0F7h,0BDh,0F7h
-31E4:9E6A 58 07 DA DB B3 FD db 58h, 07h,0DAh,0DBh,0B3h,0FDh
-31E4:9E70 FD 41 FB F5 AB 5D db 0FDh, 41h,0FBh,0F5h,0ABh, 5Dh
-31E4:9E76 6F FF FF 6F BF 9E db 6Fh,0FFh,0FFh, 6Fh,0BFh, 9Eh
-31E4:9E7C 98 7B F9 D6 33 77 db 98h, 7Bh,0F9h,0D6h, 33h, 77h
-31E4:9E82 EF 6F 56 FE D4 2F db 0EFh, 6Fh, 56h,0FEh,0D4h, 2Fh
-31E4:9E88 BF FD E9 B4 2B 5D db 0BFh,0FDh,0E9h,0B4h, 2Bh, 5Dh
-31E4:9E8E BF 0A F4 2F F3 FF db 0BFh, 0Ah,0F4h, 2Fh,0F3h,0FFh
-31E4:9E94 E5 F4 29 77 9F A3 db 0E5h,0F4h, 29h, 77h, 9Fh,0A3h
-31E4:9E9A D4 2F D7 7F 17 54 db 0D4h, 2Fh,0D7h, 7Fh, 17h, 54h
-31E4:9EA0 29 FD FF CF F4 2A db 29h,0FDh,0FFh,0CFh,0F4h, 2Ah
-31E4:9EA6 9D FF 62 D7 FF FE db 9Dh,0FFh, 62h,0D7h,0FFh,0FEh
-31E4:9EAC 00 1E 88 00 00 00 db 00h, 1Eh, 88h, 00h, 00h, 00h
-31E4:9EB2 FF F8 db 0FFh,0F8h
-31E4:9EB4 000D[00] db 13 dup (0)
-31E4:9EC1 FF 80 00 0F FF F0 db 0FFh, 80h, 00h, 0Fh,0FFh,0F0h
-31E4:9EC7 00 03 F3 FB 00 00 db 00h, 03h,0F3h,0FBh, 00h, 00h
-31E4:9ECD 1D 7F FB 00 00 2F db 1Dh, 7Fh,0FBh, 00h, 00h, 2Fh
-31E4:9ED3 C3 5F 00 00 4F 3E db 0C3h, 5Fh, 00h, 00h, 4Fh, 3Eh
-31E4:9ED9 AD FB 94 FE 84 26 db 0ADh,0FBh, 94h,0FEh, 84h, 26h
-31E4:9EDF F4 FB FB 76 EF FF db 0F4h,0FBh,0FBh, 76h,0EFh,0FFh
-31E4:9EE5 6D E2 D4 AF C8 3D db 6Dh,0E2h,0D4h,0AFh,0C8h, 3Dh
-31E4:9EEB FE EE C6 D7 BE DA db 0FEh,0EEh,0C6h,0D7h,0BEh,0DAh
-31E4:9EF1 DE BD 3B 7F FD FD db 0DEh,0BDh, 3Bh, 7Fh,0FDh,0FDh
-31E4:9EF7 45 CB 6F FF 9B 77 db 45h,0CBh, 6Fh,0FFh, 9Bh, 77h
-31E4:9EFD 1F BF FD db 1Fh,0BFh,0FDh
-31E4:9F00 56 data_1097 db 56h ; xref 31E4:189D
-31E4:9F01 92 4F 78 07 FA 97 db 92h, 4Fh, 78h, 07h,0FAh, 97h
-31E4:9F07 66 78 06 9F 27 F2 db 66h, 78h, 06h, 9Fh, 27h,0F2h
-31E4:9F0D F8 05 FC A4 92 E8 db 0F8h, 05h,0FCh,0A4h, 92h,0E8h
-31E4:9F13 05 3F AF FF 38 07 db 05h, 3Fh,0AFh,0FFh, 38h, 07h
-31E4:9F19 35 D6 33 E8 05 B7 db 35h,0D6h, 33h,0E8h, 05h,0B7h
-31E4:9F1F FF BF F8 04 FE BF db 0FFh,0BFh,0F8h, 04h,0FEh,0BFh
-31E4:9F25 78 FF E7 FF FF FF db 78h,0FFh,0E7h,0FFh,0FFh,0FFh
-31E4:9F2B F8 00 FF FF 80 F8 db 0F8h, 00h,0FFh,0FFh, 80h,0F8h
-31E4:9F31 00 00 00 80 00 00 db 00h, 00h, 00h, 80h, 00h, 00h
-31E4:9F37 00 00 80 00 00 00 db 00h, 00h, 80h, 00h, 00h, 00h
-31E4:9F3D 00 80 00 00 00 00 db 00h, 80h, 00h, 00h, 00h, 00h
-31E4:9F43 80 00 00 00 3F 80 db 80h, 00h, 00h, 00h, 3Fh, 80h
-31E4:9F49 00 00 03 CE 80 00 db 00h, 00h, 03h,0CEh, 80h, 00h
-31E4:9F4F 00 04 7F 00 00 42 db 00h, 04h, 7Fh, 00h, 00h, 42h
-31E4:9F55 10 84 00 00 42 00 db 10h, 84h, 00h, 00h, 42h, 00h
-31E4:9F5B 00 00 00 42 00 04 db 00h, 00h, 00h, 42h, 00h, 04h
-31E4:9F61 00 00 42 00 00 00 db 00h, 00h, 42h, 00h, 00h, 00h
-31E4:9F67 00 42 00 00 00 00 db 00h, 42h, 00h, 00h, 00h, 00h
-31E4:9F6D 42 00 00 00 00 42 db 42h, 00h, 00h, 00h, 00h, 42h
-31E4:9F73 00 00 00 00 C3 00 db 00h, 00h, 00h, 00h,0C3h, 00h
-31E4:9F79 00 00 00 81 00 00 db 00h, 00h, 00h, 81h, 00h, 00h
-31E4:9F7F 00 01 00 80 00 00 db 00h, 01h, 00h, 80h, 00h, 00h
-31E4:9F85 01 00 80 00 db 01h, 00h, 80h, 00h
-31E4:9F89 loc_2342: ; xref 31E4:9FCA
-31E4:9F89 00 01 add [bx+di],al
-31E4:9F8B 00 80 0000 add byte ptr copyright[bx+si],al ; (31E4:0000='Copyright Revolu')
-31E4:9F8F 02 00 add al,[bx+si]
-31E4:9F91 40 inc ax
-31E4:9F92 00 00 add [bx+si],al
-31E4:9F94 02 00 add al,[bx+si]
-31E4:9F96 40 inc ax
-31E4:9F97 00 00 add [bx+si],al
-31E4:9F99 04 00 add al,0
-31E4:9F9B 40 inc ax
-31E4:9F9C 00 00 add [bx+si],al
-31E4:9F9E 04 00 add al,0
-31E4:9FA0 20 00 and [bx+si],al
-31E4:9FA2 00 04 add [si],al
-31E4:9FA4 00 20 add [bx+si],ah
-31E4:9FA6 00 00 add [bx+si],al
-31E4:9FA8 08 00 or [bx+si],al
-31E4:9FAA 10 00 adc [bx+si],al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 511
-
-31E4:9FAC 00 08 add [bx+si],cl
-31E4:9FAE 00 10 add [bx+si],dl
-31E4:9FB0 00 00 add [bx+si],al
-31E4:9FB2 10 00 adc [bx+si],al
-31E4:9FB4 08 00 or [bx+si],al
-31E4:9FB6 00 10 add [bx+si],dl
-31E4:9FB8 00 08 add [bx+si],cl
-31E4:9FBA 00 00 add [bx+si],al
-31E4:9FBC 20 00 and [bx+si],al
-31E4:9FBE 0C 00 or al,0
-31E4:9FC0 00 20 add [bx+si],ah
-31E4:9FC2 00 04 add [si],al
-31E4:9FC4 00 00 add [bx+si],al
-31E4:9FC6 20 00 and [bx+si],al
-31E4:9FC8 04 00 add al,0
-31E4:9FCA 78 BD js loc_2342 ; Jump if sign=1
-31E4:9FCC 95 xchg bp,ax
-31E4:9FCD F9 stc ; Set carry flag
-31E4:9FCE 7F D9 ;* jg loc_2343 ;*Jump if >
-31E4:9FCE 7F D9 db 7Fh,0D9h
-31E4:9FD0 9A F627:7FAE ;* call far ptr sub_281 ;*(F627:7FAE)
-31E4:9FD0 9A db 9Ah
-31E4:9FD1 7FAE F627 dw 7FAEh, 0F627h
-31E4:9FD5 B3 BF mov bl,0BFh
-31E4:9FD7 4E dec si
-31E4:9FD8 7F 75 jg $+77h ; Jump if >
-31E4:9FDA F5 cmc ; Complement carry
-31E4:9FDB 55 push bp
-31E4:9FDC FD std ; Set direction flag
-31E4:9FDD C9 DD FD 7F E7 8D db 0C9h,0DDh,0FDh, 7Fh,0E7h, 8Dh
-31E4:9FE3 77 FF ED 1D BB DF db 77h,0FFh,0EDh, 1Dh,0BBh,0DFh
-31E4:9FE9 E0 6F FD 77 37 E0 db 0E0h, 6Fh,0FDh, 77h, 37h,0E0h
-31E4:9FEF 7E D4 34 6D E0 57 db 7Eh,0D4h, 34h, 6Dh,0E0h, 57h
-31E4:9FF5 7F BD DF E0 5F AF db 7Fh,0BDh,0DFh,0E0h, 5Fh,0AFh
-31E4:9FFB 7F BF E0 4F F7 6B db 7Fh,0BFh,0E0h, 4Fh,0F7h, 6Bh
-31E4:A001 E7 E0 43 FF BB 7F db 0E7h,0E0h, 43h,0FFh,0BBh, 7Fh
-31E4:A007 E0 43 FF CF FF 60 db 0E0h, 43h,0FFh,0CFh,0FFh, 60h
-31E4:A00D 43 87 F6 F7 E0 23 db 43h, 87h,0F6h,0F7h,0E0h, 23h
-31E4:A013 FC A7 BE A0 13 87 db 0FCh,0A7h,0BEh,0A0h, 13h, 87h
-31E4:A019 98 BD A0 0B 85 FF db 98h,0BDh,0A0h, 0Bh, 85h,0FFh
-31E4:A01F EF 40 05 FC FF FD db 0EFh, 40h, 05h,0FCh,0FFh,0FDh
-31E4:A025 80 03 83 1F FE 00 db 80h, 03h, 83h, 1Fh,0FEh, 00h
-31E4:A02B 00 00 7F 00 db 00h, 00h, 7Fh, 00h
-31E4:A02F 000E[00] db 14 dup (0)
-31E4:A03D FC 3F FF FF FF DB db 0FCh, 3Fh,0FFh,0FFh,0FFh,0DBh
-31E4:A043 FB F9 F3 D6 FD DA db 0FBh,0F9h,0F3h,0D6h,0FDh,0DAh
-31E4:A049 AF 7F F7 C6 DB B7 db 0AFh, 7Fh,0F7h,0C6h,0DBh,0B7h
-31E4:A04F FF FA E6 FB EF FF db 0FFh,0FAh,0E6h,0FBh,0EFh,0FFh
-31E4:A055 FD 34 AE FB 00 F5 db 0FDh, 34h,0AEh,0FBh, 00h,0F5h
-31E4:A05B AF D7 F7 00 FD DD db 0AFh,0D7h,0F7h, 00h,0FDh,0DDh
-31E4:A061 EE D7 00 B1 B7 ED db 0EEh,0D7h, 00h,0B1h,0B7h,0EDh
-31E4:A067 FF 00 AF 9E 67 6B db 0FFh, 00h,0AFh, 9Eh, 67h, 6Bh
-31E4:A06D 00 FB E9 EE 9F 00 db 00h,0FBh,0E9h,0EEh, 9Fh, 00h
-31E4:A073 F4 65 7F EF 00 FB db 0F4h, 65h, 7Fh,0EFh, 00h,0FBh
-31E4:A079 8E FB FF 00 FA 7B db 8Eh,0FBh,0FFh, 00h,0FAh, 7Bh
-31E4:A07F BF 00 00 BF FF FF db 0BFh, 00h, 00h,0BFh,0FFh,0FFh
-31E4:A085 F8 00 EB FF FF F8 db 0F8h, 00h,0EBh,0FFh,0FFh,0F8h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 512
-
-31E4:A08B 00 B7 FF FF F8 00 db 00h,0B7h,0FFh,0FFh,0F8h, 00h
-31E4:A091 AB FF E0 00 00 B1 db 0ABh,0FFh,0E0h, 00h, 00h,0B1h
-31E4:A097 FF 80 00 00 FF 00 db 0FFh, 80h, 00h, 00h,0FFh, 00h
-31E4:A09D 0009[00] db 9 dup (0)
-31E4:A0A6 FF FF E0 00 00 FF db 0FFh,0FFh,0E0h, 00h, 00h,0FFh
-31E4:A0AC BF 7F C0 00 FF 77 db 0BFh, 7Fh,0C0h, 00h,0FFh, 77h
-31E4:A0B2 EB FF FF AD B6 A6 db 0EBh,0FFh,0FFh,0ADh,0B6h,0A6h
-31E4:A0B8 F3 DD 7D 66 A9 2E db 0F3h,0DDh, 7Dh, 66h,0A9h, 2Eh
-31E4:A0BE E4 DD 3F 97 CF FE db 0E4h,0DDh, 3Fh, 97h,0CFh,0FEh
-31E4:A0C4 CB 53 DF 7E CA 3A db 0CBh, 53h,0DFh, 7Eh,0CAh, 3Ah
-31E4:A0CA 1A EF A8 6B A1 DF db 1Ah,0EFh,0A8h, 6Bh,0A1h,0DFh
-31E4:A0D0 F3 7F 7F 9D FB DF db 0F3h, 7Fh, 7Fh, 9Dh,0FBh,0DFh
-31E4:A0D6 86 4D FE 5F FA BE db 86h, 4Dh,0FEh, 5Fh,0FAh,0BEh
-31E4:A0DC BD 7F F7 FF BB 9A db 0BDh, 7Fh,0F7h,0FFh,0BBh, 9Ah
-31E4:A0E2 C1 D5 01 37 E3 C1 db 0C1h,0D5h, 01h, 37h,0E3h,0C1h
-31E4:A0E8 7D 01 FC 2F C1 FF db 7Dh, 01h,0FCh, 2Fh,0C1h,0FFh
-31E4:A0EE 01 DC 31 C1 9B 01 db 01h,0DCh, 31h,0C1h, 9Bh, 01h
-31E4:A0F4 FC 2E C1 DF 01 4C db 0FCh, 2Eh,0C1h,0DFh, 01h, 4Ch
-31E4:A0FA 23 C1 FD 01 7C 3C db 23h,0C1h,0FDh, 01h, 7Ch, 3Ch
-31E4:A100 C1 3F 01 F4 39 21 db 0C1h, 3Fh, 01h,0F4h, 39h, 21h
-31E4:A106 C0 00 0F B7 E0 00 db 0C0h, 00h, 0Fh,0B7h,0E0h, 00h
-31E4:A10C 00 00 0F db 00h, 00h, 0Fh
-31E4:A10F 000F[00] db 15 dup (0)
-31E4:A11E 80 00 00 00 00 F0 db 80h, 00h, 00h, 00h, 00h,0F0h
-31E4:A124 00 00 00 00 FF 00 db 00h, 00h, 00h, 00h,0FFh, 00h
-31E4:A12A 00 00 01 FF C3 FF db 00h, 00h, 01h,0FFh,0C3h,0FFh
-31E4:A130 FF FF 00 02 F7 FF db 0FFh,0FFh, 00h, 02h,0F7h,0FFh
-31E4:A136 F4 00 03 FB 76 FF db 0F4h, 00h, 03h,0FBh, 76h,0FFh
-31E4:A13C 00 03 FE EC DF 00 db 00h, 03h,0FEh,0ECh,0DFh, 00h
-31E4:A142 02 EB FB AF 00 03 db 02h,0EBh,0FBh,0AFh, 00h, 03h
-31E4:A148 FF FE F7 00 03 D3 db 0FFh,0FEh,0F7h, 00h, 03h,0D3h
-31E4:A14E 7D 7F 00 03 82 FA db 7Dh, 7Fh, 00h, 03h, 82h,0FAh
-31E4:A154 5F 00 03 EF FB FE db 5Fh, 00h, 03h,0EFh,0FBh,0FEh
-31E4:A15A 00 03 9F FF 9E 0F db 00h, 03h, 9Fh,0FFh, 9Eh, 0Fh
-31E4:A160 C3 B9 FE FD F0 03 db 0C3h,0B9h,0FEh,0FDh,0F0h, 03h
-31E4:A166 4F FF EF 00 03 FF db 4Fh,0FFh,0EFh, 00h, 03h,0FFh
-31E4:A16C 04 FE 00 07 F7 07 db 04h,0FEh, 00h, 07h,0F7h, 07h
-31E4:A172 E1 00 03 FB F7 DD db 0E1h, 00h, 03h,0FBh,0F7h,0DDh
-31E4:A178 00 03 E5 00 2F 00 db 00h, 03h,0E5h, 00h, 2Fh, 00h
-31E4:A17E 00 1D 00 17 00 00 db 00h, 1Dh, 00h, 17h, 00h, 00h
-31E4:A184 0F F0 0B 00 00 0F db 0Fh,0F0h, 0Bh, 00h, 00h, 0Fh
-31E4:A18A F0 07 00 00 00 00 db 0F0h, 07h, 00h, 00h, 00h, 00h
-31E4:A190 1F 00 00 00 00 2F db 1Fh, 00h, 00h, 00h, 00h, 2Fh
-31E4:A196 00 00 00 00 5F 00 db 00h, 00h, 00h, 00h, 5Fh, 00h
-31E4:A19C 00 00 00 5F 00 00 db 00h, 00h, 00h, 5Fh, 00h, 00h
-31E4:A1A2 00 00 5F FF FF FF db 00h, 00h, 5Fh,0FFh,0FFh,0FFh
-31E4:A1A8 F0 57 6E AF DB F5 db 0F0h, 57h, 6Eh,0AFh,0DBh,0F5h
-31E4:A1AE 55 FF FA DF D7 6A db 55h,0FFh,0FAh,0DFh,0D7h, 6Ah
-31E4:A1B4 F5 EB F9 D4 01 E6 db 0F5h,0EBh,0F9h,0D4h, 01h,0E6h
-31E4:A1BA EE 82 77 FF BF E0 db 0EEh, 82h, 77h,0FFh,0BFh,0E0h
-31E4:A1C0 9B 55 00 DC F9 76 db 9Bh, 55h, 00h,0DCh,0F9h, 76h
-31E4:A1C6 7D 77 E5 FC 1F AF db 7Dh, 77h,0E5h,0FCh, 1Fh,0AFh
-31E4:A1CC 7E FF E7 AB BC 00 db 7Eh,0FFh,0E7h,0ABh,0BCh, 00h
-31E4:A1D2 00 3C B6 2C 00 00 db 00h, 3Ch,0B6h, 2Ch, 00h, 00h
-31E4:A1D8 22 DB 6C 00 00 2F db 22h,0DBh, 6Ch, 00h, 00h, 2Fh
-31E4:A1DE ED 7C 00 00 3E FB db 0EDh, 7Ch, 00h, 00h, 3Eh,0FBh
-31E4:A1E4 E4 00 00 3F FF FC db 0E4h, 00h, 00h, 3Fh,0FFh,0FCh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 513
-
-31E4:A1EA 00 00 40 00 02 00 db 00h, 00h, 40h, 00h, 02h, 00h
-31E4:A1F0 0F 80 00 01 F8 00 db 0Fh, 80h, 00h, 01h,0F8h, 00h
-31E4:A1F6 00 00 00 00 0E 00 db 00h, 00h, 00h, 00h, 0Eh, 00h
-31E4:A1FC 00 00 78 0A 00 00 db 00h, 00h, 78h, 0Ah, 00h, 00h
-31E4:A202 00 68 FE 00 00 00 db 00h, 68h,0FEh, 00h, 00h, 00h
-31E4:A208 7F FE 00 00 00 76 db 7Fh,0FEh, 00h, 00h, 00h, 76h
-31E4:A20E FF FF FF FF FA CF db 0FFh,0FFh,0FFh,0FFh,0FAh,0CFh
-31E4:A214 FF FF BE 6B 56 BE db 0FFh,0FFh,0BEh, 6Bh, 56h,0BEh
-31E4:A21A DA F6 DB DF 54 99 db 0DAh,0F6h,0DBh,0DFh, 54h, 99h
-31E4:A220 4F FF AB F2 BE 2D db 4Fh,0FFh,0ABh,0F2h,0BEh, 2Dh
-31E4:A226 18 CF BD FF 94 95 db 18h,0CFh,0BDh,0FFh, 94h, 95h
-31E4:A22C AB D5 FF AA C9 FF db 0ABh,0D5h,0FFh,0AAh,0C9h,0FFh
-31E4:A232 6A AF 69 EA AB 3E db 6Ah,0AFh, 69h,0EAh,0ABh, 3Eh
-31E4:A238 BE C5 AD D2 AA C7 db 0BEh,0C5h,0ADh,0D2h,0AAh,0C7h
-31E4:A23E D6 E9 B2 AD 6F ED db 0D6h,0E9h,0B2h,0ADh, 6Fh,0EDh
-31E4:A244 AA D7 DF 6F 25 39 db 0AAh,0D7h,0DFh, 6Fh, 25h, 39h
-31E4:A24A EF 77 F0 E8 A5 B7 db 0EFh, 77h,0F0h,0E8h,0A5h,0B7h
-31E4:A250 7C 16 EB 7D EA DC db 7Ch, 16h,0EBh, 7Dh,0EAh,0DCh
-31E4:A256 17 97 5D E7 74 13 db 17h, 97h, 5Dh,0E7h, 74h, 13h
-31E4:A25C ED 77 D5 DC 1F db 0EDh, 77h,0D5h,0DCh, 1Fh
-31E4:A261 49 db 49h
-31E4:A262 úBF E3 BC 1F db 0BFh,0E3h,0BCh, 1Fh
-31E4:A266 ú03 CF FF FC 1D FD db 03h,0CFh,0FFh,0FCh, 1Dh,0FDh
-31E4:A26C 37 B5 FC 17 BF 26 db 37h,0B5h,0FCh, 17h,0BFh, 26h
-31E4:A272 FF FC 1F BC F7 FB db 0FFh,0FCh, 1Fh,0BCh,0F7h,0FBh
-31E4:A278 D0 07 D2 F7 FF A0 db 0D0h, 07h,0D2h,0F7h,0FFh,0A0h
-31E4:A27E 01 FF 7D DA A0 00 db 01h,0FFh, 7Dh,0DAh,0A0h, 00h
-31E4:A284 1E EB DF A0 00 1D db 1Eh,0EBh,0DFh,0A0h, 00h, 1Dh
-31E4:A28A 7F EA C0 00 0D 67 db 7Fh,0EAh,0C0h, 00h, 0Dh, 67h
-31E4:A290 DE C0 00 0E EF D5 db 0DEh,0C0h, 00h, 0Eh,0EFh,0D5h
-31E4:A296 40 00 0A FA DE FF db 40h, 00h, 0Ah,0FAh,0DEh,0FFh
-31E4:A29C FF 6A F4 F3 E9 52 db 0FFh, 6Ah,0F4h,0F3h,0E9h, 52h
-31E4:A2A2 D6 BB BF F8 D6 7E db 0D6h,0BBh,0BFh,0F8h,0D6h, 7Eh
-31E4:A2A8 07 FF F7 D3 FE F8 db 07h,0FFh,0F7h,0D3h,0FEh,0F8h
-31E4:A2AE BD 78 E9 5E 1D 8E db 0BDh, 78h,0E9h, 5Eh, 1Dh, 8Eh
-31E4:A2B4 6F BE BE E2 FA E9 db 6Fh,0BEh,0BEh,0E2h,0FAh,0E9h
-31E4:A2BA 3D 6F F8 CE DF 7B db 3Dh, 6Fh,0F8h,0CEh,0DFh, 7Bh
-31E4:A2C0 FE 00 00 60 BA FE db 0FEh, 00h, 00h, 60h,0BAh,0FEh
-31E4:A2C6 00 00 79 96 B6 00 db 00h, 00h, 79h, 96h,0B6h, 00h
-31E4:A2CC 00 75 63 66 00 00 db 00h, 75h, 63h, 66h, 00h, 00h
-31E4:A2D2 4B 65 D6 00 00 3F db 4Bh, 65h,0D6h, 00h, 00h, 3Fh
-31E4:A2D8 FF FC 00 00 40 00 db 0FFh,0FCh, 00h, 00h, 40h, 00h
-31E4:A2DE 02 00 0F 80 00 01 db 02h, 00h, 0Fh, 80h, 00h, 01h
-31E4:A2E4 C0 00 00 00 00 00 db 0C0h, 00h, 00h, 00h, 00h, 00h
-31E4:A2EA 0E 00 00 00 70 0E db 0Eh, 00h, 00h, 00h, 70h, 0Eh
-31E4:A2F0 00 00 00 50 FE 00 db 00h, 00h, 00h, 50h,0FEh, 00h
-31E4:A2F6 00 00 7F AE 00 00 db 00h, 00h, 7Fh,0AEh, 00h, 00h
-31E4:A2FC 00 7F BF FF FF FF db 00h, 7Fh,0BFh,0FFh,0FFh,0FFh
-31E4:A302 FF EE DF BD FF FF db 0FFh,0EEh,0DFh,0BDh,0FFh,0FFh
-31E4:A308 FA BA A9 FA 7F DC db 0FAh,0BAh,0A9h,0FAh, 7Fh,0DCh
-31E4:A30E FE 5E DF AF BA EF db 0FEh, 5Eh,0DFh,0AFh,0BAh,0EFh
-31E4:A314 DE B7 3C AA 6E 7B db 0DEh,0B7h, 3Ch,0AAh, 6Eh, 7Bh
-31E4:A31A FE 96 FD 74 0D 76 db 0FEh, 96h,0FDh, 74h, 0Dh, 76h
-31E4:A320 FB 65 F4 BE FF BB db 0FBh, 65h,0F4h,0BEh,0FFh,0BBh
-31E4:A326 A7 6E F2 FB 77 6A db 0A7h, 6Eh,0F2h,0FBh, 77h, 6Ah
-31E4:A32C E3 B7 6F D9 AB FE db 0E3h,0B7h, 6Fh,0D9h,0ABh,0FEh
-31E4:A332 95 F7 FE FD FB FD db 95h,0F7h,0FEh,0FDh,0FBh,0FDh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 514
-
-31E4:A338 7E 00 00 20 07 C2 db 7Eh, 00h, 00h, 20h, 07h,0C2h
-31E4:A33E 00 00 20 00 02 00 db 00h, 00h, 20h, 00h, 02h, 00h
-31E4:A344 00 20 00 02 00 00 db 00h, 20h, 00h, 02h, 00h, 00h
-31E4:A34A 20 00 02 00 00 3F db 20h, 00h, 02h, 00h, 00h, 3Fh
-31E4:A350 FF FE 00 00 40 00 db 0FFh,0FEh, 00h, 00h, 40h, 00h
-31E4:A356 02 00 07 80 00 01 db 02h, 00h, 07h, 80h, 00h, 01h
-31E4:A35C F0 00 00 00 00 00 db 0F0h, 00h, 00h, 00h, 00h, 00h
-31E4:A362 0E 00 db 0Eh, 00h
-31E4:A364 00 00 70 0E 00 00 db 00h, 00h, 70h, 0Eh, 00h, 00h
-31E4:A36A 00 70 FA 00 00 00 db 00h, 70h,0FAh, 00h, 00h, 00h
-31E4:A370 7F F6 00 00 00 6F db 7Fh,0F6h, 00h, 00h, 00h, 6Fh
-31E4:A376 FB db 0FBh
-31E4:A377 0007[FF] db 7 dup (0FFh)
-31E4:A37E FD B7 AF DB 3E FF db 0FDh,0B7h,0AFh,0DBh, 3Eh,0FFh
-31E4:A384 7F 08 00 00 00 00 db 7Fh, 08h, 00h, 00h, 00h, 00h
-31E4:A38A AE D5 56 5E DB 9D db 0AEh,0D5h, 56h, 5Eh,0DBh, 9Dh
-31E4:A390 5A 8E EE 9D AA 0B db 5Ah, 8Eh,0EEh, 9Dh,0AAh, 0Bh
-31E4:A396 1E 95 55 25 B0 F3 db 1Eh, 95h, 55h, 25h,0B0h,0F3h
-31E4:A39C D5 B7 9A 01 BD 5D db 0D5h,0B7h, 9Ah, 01h,0BDh, 5Dh
-31E4:A3A2 F9 9D 95 E1 BD 75 db 0F9h, 9Dh, 95h,0E1h,0BDh, 75h
-31E4:A3A8 BE 56 DF F9 2B 12 db 0BEh, 56h,0DFh,0F9h, 2Bh, 12h
-31E4:A3AE 87 F6 43 67 D8 D4 db 87h,0F6h, 43h, 67h,0D8h,0D4h
-31E4:A3B4 17 BE 91 A4 E4 1B db 17h,0BEh, 91h,0A4h,0E4h, 1Bh
-31E4:A3BA 4D FA C9 9C 1B 3D db 4Dh,0FAh,0C9h, 9Ch, 1Bh, 3Dh
-31E4:A3C0 B5 55 CC 1A 91 1D db 0B5h, 55h,0CCh, 1Ah, 91h, 1Dh
-31E4:A3C6 8B 3C 1A 16 A9 9A db 8Bh, 3Ch, 1Ah, 16h,0A9h, 9Ah
-31E4:A3CC D4 1B 69 BF B5 9C db 0D4h, 1Bh, 69h,0BFh,0B5h, 9Ch
-31E4:A3D2 18 45 D5 2C 64 1E db 18h, 45h,0D5h, 2Ch, 64h, 1Eh
-31E4:A3D8 C9 5D F7 4C 3E 20 db 0C9h, 5Dh,0F7h, 4Ch, 3Eh, 20h
-31E4:A3DE 33 80 D0 03 CD 98 db 33h, 80h,0D0h, 03h,0CDh, 98h
-31E4:A3E4 6F A0 00 E3 AE A9 db 6Fh,0A0h, 00h,0E3h,0AEh,0A9h
-31E4:A3EA A0 00 1E 77 F5 C0 db 0A0h, 00h, 1Eh, 77h,0F5h,0C0h
-31E4:A3F0 00 16 43 3F C0 00 db 00h, 16h, 43h, 3Fh,0C0h, 00h
-31E4:A3F6 12 D4 ED 40 00 15 db 12h,0D4h,0EDh, 40h, 00h, 15h
-31E4:A3FC 5E 0B 40 00 17 6C db 5Eh, 0Bh, 40h, 00h, 17h, 6Ch
-31E4:A402 00 00 42 84 20 00 db 00h, 00h, 42h, 84h, 20h, 00h
-31E4:A408 00 42 00 00 00 00 db 00h, 42h, 00h, 00h, 00h, 00h
-31E4:A40E 42 84 20 00 00 42 db 42h, 84h, 20h, 00h, 00h, 42h
-31E4:A414 84 00 00 00 42 00 db 84h, 00h, 00h, 00h, 42h, 00h
-31E4:A41A 00 00 00 42 00 00 db 00h, 00h, 00h, 42h, 00h, 00h
-31E4:A420 00 00 42 00 00 00 db 00h, 00h, 42h, 00h, 00h, 00h
-31E4:A426 00 42 00 00 00 00 db 00h, 42h, 00h, 00h, 00h, 00h
-31E4:A42C 81 00 00 00 01 00 db 81h, 00h, 00h, 00h, 01h, 00h
-31E4:A432 80 00 00 01 00 80 db 80h, 00h, 00h, 01h, 00h, 80h
-31E4:A438 00 00 02 00 40 00 db 00h, 00h, 02h, 00h, 40h, 00h
-31E4:A43E 00 02 00 40 00 00 db 00h, 02h, 00h, 40h, 00h, 00h
-31E4:A444 02 00 20 00 00 04 db 02h, 00h, 20h, 00h, 00h, 04h
-31E4:A44A 00 20 00 00 04 00 db 00h, 20h, 00h, 00h, 04h, 00h
-31E4:A450 20 00 00 08 00 10 db 20h, 00h, 00h, 08h, 00h, 10h
-31E4:A456 00 00 08 00 10 00 db 00h, 00h, 08h, 00h, 10h, 00h
-31E4:A45C 00 10 00 10 00 00 db 00h, 10h, 00h, 10h, 00h, 00h
-31E4:A462 10 00 08 00 00 10 db 10h, 00h, 08h, 00h, 00h, 10h
-31E4:A468 00 08 00 00 20 00 db 00h, 08h, 00h, 00h, 20h, 00h
-31E4:A46E 04 00 00 20 00 04 db 04h, 00h, 00h, 20h, 00h, 04h
-31E4:A474 00 00 40 00 02 00 db 00h, 00h, 40h, 00h, 02h, 00h
-31E4:A47A D3 D6 A4 EA 0A E5 db 0D3h,0D6h,0A4h,0EAh, 0Ah,0E5h
-31E4:A480 70 00 23 A0 B7 C0 db 70h, 00h, 23h,0A0h,0B7h,0C0h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 515
-
-31E4:A486 84 2A BE A0 CD C4 db 84h, 2Ah,0BEh,0A0h,0CDh,0C4h
-31E4:A48C 5B 00 E7 C0 80 3F db 5Bh, 00h,0E7h,0C0h, 80h, 3Fh
-31E4:A492 12 29 5C 94 82 CA db 12h, 29h, 5Ch, 94h, 82h,0CAh
-31E4:A498 9D 46 D6 BF 00 FF db 9Dh, 46h,0D6h,0BFh, 00h,0FFh
-31E4:A49E C0 00 03 57 00 40 db 0C0h, 00h, 03h, 57h, 00h, 40h
-31E4:A4A4 00 02 00 00 40 00 db 00h, 02h, 00h, 00h, 40h, 00h
-31E4:A4AA 02 00 00 40 00 02 db 02h, 00h, 00h, 40h, 00h, 02h
-31E4:A4B0 00 00 40 00 02 00 db 00h, 00h, 40h, 00h, 02h, 00h
-31E4:A4B6 00 3F FF FC 00 00 db 00h, 3Fh,0FFh,0FCh, 00h, 00h
-31E4:A4BC 40 00 02 00 07 80 db 40h, 00h, 02h, 00h, 07h, 80h
-31E4:A4C2 00 01 F0 00 00 00 db 00h, 01h,0F0h, 00h, 00h, 00h
-31E4:A4C8 00 00 0E 00 00 00 db 00h, 00h, 0Eh, 00h, 00h, 00h
-31E4:A4CE 70 0A 00 00 00 40 db 70h, 0Ah, 00h, 00h, 00h, 40h
-31E4:A4D4 FE 00 00 00 40 BA db 0FEh, 00h, 00h, 00h, 40h,0BAh
-31E4:A4DA 00 00 00 40 53 FF db 00h, 00h, 00h, 40h, 53h,0FFh
-31E4:A4E0 FF FF db 0FFh,0FFh
-31E4:A4E2 úFF 3A FD 77 67 7E db 0FFh, 3Ah,0FDh, 77h, 67h, 7Eh
-31E4:A4E8 63 A5 7F F7 C5 FF db 63h,0A5h, 7Fh,0F7h,0C5h,0FFh
-31E4:A4EE E6 7B 7E ED 20 00 db 0E6h, 7Bh, 7Eh,0EDh, 20h, 00h
-31E4:A4F4 01 05 34 BE 4F 92 db 01h, 05h, 34h,0BEh, 4Fh, 92h
-31E4:A4FA AA 02 E9 B4 89 44 db 0AAh, 02h,0E9h,0B4h, 89h, 44h
-31E4:A500 5A 8B D8 98 A6 B6 db 5Ah, 8Bh,0D8h, 98h,0A6h,0B6h
-31E4:A506 96 1A 99 00 0B 40 db 96h, 1Ah, 99h, 00h, 0Bh, 40h
-31E4:A50C 32 A5 77 FB 66 9D db 32h,0A5h, 77h,0FBh, 66h, 9Dh
-31E4:A512 59 04 77 CA 00 E9 db 59h, 04h, 77h,0CAh, 00h,0E9h
-31E4:A518 39 7A 8B 4B 02 2E db 39h, 7Ah, 8Bh, 4Bh, 02h, 2Eh
-31E4:A51E 7B D4 25 FB D4 E0 db 7Bh,0D4h, 25h,0FBh,0D4h,0E0h
-31E4:A524 2A E7 0F 38 E7 FE db 2Ah,0E7h, 0Fh, 38h,0E7h,0FEh
-31E4:A52A CB 0A 0A 5B 3F 17 db 0CBh, 0Ah, 0Ah, 5Bh, 3Fh, 17h
-31E4:A530 09 46 EE EB AD 0D db 09h, 46h,0EEh,0EBh,0ADh, 0Dh
-31E4:A536 22 2E EB 75 09 4B db 22h, 2Eh,0EBh, 75h, 09h, 4Bh
-31E4:A53C E5 6B F9 08 07 53 db 0E5h, 6Bh,0F9h, 08h, 07h, 53h
-31E4:A542 B7 D7 0F EC A9 DD db 0B7h,0D7h, 0Fh,0ECh,0A9h,0DDh
-31E4:A548 E8 00 12 C4 6F D0 db 0E8h, 00h, 12h,0C4h, 6Fh,0D0h
-31E4:A54E 00 0B 7D FF A0 01 db 00h, 0Bh, 7Dh,0FFh,0A0h, 01h
-31E4:A554 85 88 D7 40 00 02 db 85h, 88h,0D7h, 40h, 00h, 02h
-31E4:A55A F5 BE 9C 00 01 5E db 0F5h,0BEh, 9Ch, 00h, 01h, 5Eh
-31E4:A560 ED 04 00 78 AF D9 db 0EDh, 04h, 00h, 78h,0AFh,0D9h
-31E4:A566 04 00 40 AB 33 52 db 04h, 00h, 40h,0ABh, 33h, 52h
-31E4:A56C B2 AA 66 93 45 12 db 0B2h,0AAh, 66h, 93h, 45h, 12h
-31E4:A572 01 12 52 48 00 50 db 01h, 12h, 52h, 48h, 00h, 50h
-31E4:A578 91 84 22 92 D5 9F db 91h, 84h, 22h, 92h,0D5h, 9Fh
-31E4:A57E A7 B5 A2 82 BB B3 db 0A7h,0B5h,0A2h, 82h,0BBh,0B3h
-31E4:A584 01 52 46 49 12 97 db 01h, 52h, 46h, 49h, 12h, 97h
-31E4:A58A A9 56 1A F7 B4 10 db 0A9h, 56h, 1Ah,0F7h,0B4h, 10h
-31E4:A590 09 A7 99 1C A1 28 db 09h,0A7h, 99h, 1Ch,0A1h, 28h
-31E4:A596 99 D7 AA 92 DD 32 db 99h,0D7h,0AAh, 92h,0DDh, 32h
-31E4:A59C 6A 64 A0 21 B5 B5 db 6Ah, 64h,0A0h, 21h,0B5h,0B5h
-31E4:A5A2 4B 2D 95 57 F3 BF db 4Bh, 2Dh, 95h, 57h,0F3h,0BFh
-31E4:A5A8 FF F8 00 D6 C0 00 db 0FFh,0F8h, 00h,0D6h,0C0h, 00h
-31E4:A5AE 05 54 73 40 00 04 db 05h, 54h, 73h, 40h, 00h, 04h
-31E4:A5B4 EB BF 40 00 02 F3 db 0EBh,0BFh, 40h, 00h, 02h,0F3h
-31E4:A5BA 7E F0 00 01 2D 9F db 7Eh,0F0h, 00h, 01h, 2Dh, 9Fh
-31E4:A5C0 E0 00 30 92 D3 C0 db 0E0h, 00h, 30h, 92h,0D3h,0C0h
-31E4:A5C6 00 18 5B 87 C0 01 db 00h, 18h, 5Bh, 87h,0C0h, 01h
-31E4:A5CC F8 27 B8 00 01 F0 db 0F8h, 27h,0B8h, 00h, 01h,0F0h
-31E4:A5D2 13 A0 00 00 F0 08 db 13h,0A0h, 00h, 00h,0F0h, 08h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 516
-
-31E4:A5D8 A0 00 00 00 06 BF db 0A0h, 00h, 00h, 00h, 06h,0BFh
-31E4:A5DE 00 00 00 01 73 6D db 00h, 00h, 00h, 01h, 73h, 6Dh
-31E4:A5E4 BB EE 73 F6 5A 9F db 0BBh,0EEh, 73h,0F6h, 5Ah, 9Fh
-31E4:A5EA F7 35 E5 25 56 AA db 0F7h, 35h,0E5h, 25h, 56h,0AAh
-31E4:A5F0 ED B7 9A 54 B1 3B db 0EDh,0B7h, 9Ah, 54h,0B1h, 3Bh
-31E4:A5F6 F3 DB 57 6F FD FD db 0F3h,0DBh, 57h, 6Fh,0FDh,0FDh
-31E4:A5FC 4F 9B 55 5F BD DD db 4Fh, 9Bh, 55h, 5Fh,0BDh,0DDh
-31E4:A602 DB 76 FD 5A 6A 4A db 0DBh, 76h,0FDh, 5Ah, 6Ah, 4Ah
-31E4:A608 A4 DF B7 FE BE 36 db 0A4h,0DFh,0B7h,0FEh,0BEh, 36h
-31E4:A60E BF F3 BC 97 6C BF db 0BFh,0F3h,0BCh, 97h, 6Ch,0BFh
-31E4:A614 FF D3 F9 B5 77 DB db 0FFh,0D3h,0F9h,0B5h, 77h,0DBh
-31E4:A61A FA D5 B5 7F FF C0 db 0FAh,0D5h,0B5h, 7Fh,0FFh,0C0h
-31E4:A620 00 1D D9 87 DF FF db 00h, 1Dh,0D9h, 87h,0DFh,0FFh
-31E4:A626 D6 EF DB 20 00 25 db 0D6h,0EFh,0DBh, 20h, 00h, 25h
-31E4:A62C EF F2 db 0EFh,0F2h
-31E4:A62E 40 db 40h
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-31E4:A62F sub_275 proc near
-31E4:A62F 00 13 add [bp+di],dl
-31E4:A631 B7 B6 mov bh,0B6h
-31E4:A633 80 00 0B add byte ptr [bx+si],0Bh
-31E4:A636 3D 00DD cmp ax,0DDh
-31E4:A639 00 05 add [di],al
-31E4:A63B EF out dx,ax ; port 8300h ??I/O Non-standard
-31E4:A63C DA 00 fiadd dword ptr [bx+si] ; st = st + memory
-31E4:A63E 00 02 add [bp+si],al
-31E4:A640 F0> B4 00 lock mov ah,0
-31E4:A643 7F FF FF 74 00 40 db 7Fh,0FFh,0FFh, 74h, 00h, 40h
-31E4:A649 01 AE FF FF FE 03 db 01h,0AEh,0FFh,0FFh,0FEh, 03h
-31E4:A64F A9 BC 00 49 FA AA db 0A9h,0BCh, 00h, 49h,0FAh,0AAh
-31E4:A655 64 00 7E F3 B7 7C db 64h, 00h, 7Eh,0F3h,0B7h, 7Ch
-31E4:A65B 00 E6 DD 74 8F 7A db 00h,0E6h,0DDh, 74h, 8Fh, 7Ah
-31E4:A661 B5 4D 72 FD B5 99 db 0B5h, 4Dh, 72h,0FDh,0B5h, 99h
-31E4:A667 A5 D6 BD 29 85 49 db 0A5h,0D6h,0BDh, 29h, 85h, 49h
-31E4:A66D AD FA 69 F3 6B 6D db 0ADh,0FAh, 69h,0F3h, 6Bh, 6Dh
-31E4:A673 5E 58 A9 51 DA FF db 5Eh, 58h,0A9h, 51h,0DAh,0FFh
-31E4:A679 BB 7E 9E B7 FE AD db 0BBh, 7Eh, 9Eh,0B7h,0FEh,0ADh
-31E4:A67F 2B 4A D7 E5 7B F3 db 2Bh, 4Ah,0D7h,0E5h, 7Bh,0F3h
-31E4:A685 6E 7F E7 AD EE DD db 6Eh, 7Fh,0E7h,0ADh,0EEh,0DDh
-31E4:A68B 79 FF BB B6 D5 AF db 79h,0FFh,0BBh,0B6h,0D5h,0AFh
-31E4:A691 FB B7 6D 5A FB EF db 0FBh,0B7h, 6Dh, 5Ah,0FBh,0EFh
-31E4:A697 F5 CD F7 BB FE F5 db 0F5h,0CDh,0F7h,0BBh,0FEh,0F5h
-31E4:A69D AA 94 DD FA FF FB db 0AAh, 94h,0DDh,0FAh,0FFh,0FBh
-31E4:A6A3 EF FD BB FF FF FE db 0EFh,0FDh,0BBh,0FFh,0FFh,0FEh
-31E4:A6A9 6F B4 02 30 81 9E db 6Fh,0B4h, 02h, 30h, 81h, 9Eh
-31E4:A6AF E8 03 83 80 4F 90 db 0E8h, 03h, 83h, 80h, 4Fh, 90h
-31E4:A6B5 00 00 00 2D 20 00 db 00h, 00h, 00h, 2Dh, 20h, 00h
-31E4:A6BB 00 00 17 40 00 FE db 00h, 00h, 17h, 40h, 00h,0FEh
-31E4:A6C1 00 0B 80 00 82 00 db 00h, 0Bh, 80h, 00h, 82h, 00h
-31E4:A6C7 04 FF FF FF F0 FF db 04h,0FFh,0FFh,0FFh,0F0h,0FFh
-31E4:A6CD 00 00 00 10 80 FE db 00h, 00h, 00h, 10h, 80h,0FEh
-31E4:A6D3 B6 F7 DF 9E FD 37 db 0B6h,0F7h,0DFh, 9Eh,0FDh, 37h
-31E4:A6D9 5E DD ED A9 AD DD db 5Eh,0DDh,0EDh,0A9h,0ADh,0DDh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 517
-
-31E4:A6DF AFFF dw 0AFFFh ; Data table (indexed access)
-31E4:A6E1 FB 7B 5E DB B7 7F db 0FBh, 7Bh, 5Eh,0DBh,0B7h, 7Fh
-31E4:A6E7 69 6D EE EF B6 83 db 69h, 6Dh,0EEh,0EFh,0B6h, 83h
-31E4:A6ED F1 59 37 DC FC AD db 0F1h, 59h, 37h,0DCh,0FCh,0ADh
-31E4:A6F3 DA D7 FF 6E B5 5B db 0DAh,0D7h,0FFh, 6Eh,0B5h, 5Bh
-31E4:A6F9 ED F5 FF db 0EDh,0F5h,0FFh
-31E4:A6FC loc_2345: ; xref 31E4:A6FF
-31E4:A6FC úAD lodsw ; String [si] to ax
-31E4:A6FD AB stosw ; Store ax to es:[di]
-31E4:A6FE 2F das ; Decimal adjust
-31E4:A6FF EB FB jmp short loc_2345 ; (A6FC)
- sub_275 endp
-
-31E4:A701 ED 7D BB EC EB 5B db 0EDh, 7Dh,0BBh,0ECh,0EBh, 5Bh
-31E4:A707 FF FF BF FF 52 00 db 0FFh,0FFh,0BFh,0FFh, 52h, 00h
-31E4:A70D 0F FD BF FE FF 6C db 0Fh,0FDh,0BFh,0FEh,0FFh, 6Ch
-31E4:A713 BE FF FF C0 00 FF db 0BEh,0FFh,0FFh,0C0h, 00h,0FFh
-31E4:A719 FC 00 3E AA FF 00 db 0FCh, 00h, 3Eh,0AAh,0FFh, 00h
-31E4:A71F 00 01 00 BE 00 00 db 00h, 01h, 00h,0BEh, 00h, 00h
-31E4:A725 00 80 F4 00 00 00 db 00h, 80h,0F4h, 00h, 00h, 00h
-31E4:A72B 40 E8 00 FF 00 20 db 40h,0E8h, 00h,0FFh, 00h, 20h
-31E4:A731 D0 00 FF 00 10 A0 db 0D0h, 00h,0FFh, 00h, 10h,0A0h
-31E4:A737 00 00 00 08 40 00 db 00h, 00h, 00h, 08h, 40h, 00h
-31E4:A73D 00 00 04 80 00 00 db 00h, 00h, 04h, 80h, 00h, 00h
-31E4:A743 00 02 F8 3F FF FF db 00h, 02h,0F8h, 3Fh,0FFh,0FFh
-31E4:A749 FE 2D 2B 34 62 15 db 0FEh, 2Dh, 2Bh, 34h, 62h, 15h
-31E4:A74F 18 66 6B 2A C3 2B db 18h, 66h, 6Bh, 2Ah,0C3h, 2Bh
-31E4:A755 A4 26 23 09 96 41 db 0A4h, 26h, 23h, 09h, 96h, 41h
-31E4:A75B 27 28 30 4A 2B 1C db 27h, 28h, 30h, 4Ah, 2Bh, 1Ch
-31E4:A761 2A db 2Ah
-31E4:A762 loc_2346:
-31E4:A762 2E 93 34 36 DA 14 db 2Eh, 93h, 34h, 36h,0DAh, 14h
-31E4:A768 16 54 32 2D 16 12 db 16h, 54h, 32h, 2Dh, 16h, 12h
-31E4:A76E 9A 66 2A 12 13 17 db 9Ah, 66h, 2Ah, 12h, 13h, 17h
-31E4:A774 19 2F 7F 55 28 5F db 19h, 2Fh, 7Fh, 55h, 28h, 5Fh
-31E4:A77A 96 94 93 69 96 db 96h, 94h, 93h, 69h, 96h
-31E4:A77F 57 4B 3D 3D 44 2B db 'WK==D+V0'
-31E4:A785 56 30
-31E4:A787 91 B6 AB 98 A2 96 db 91h,0B6h,0ABh, 98h,0A2h, 96h
-31E4:A78D 3A 99 71 91 48 7F db 3Ah, 99h, 71h, 91h, 48h, 7Fh
-31E4:A793 66 7A 55 64 63 5D db 'fzUdc]hIO'
-31E4:A799 68 49 4F
-31E4:A79C 13 34 3A 35 99 35 db 13h, 34h, 3Ah, 35h, 99h, 35h
-31E4:A7A2 91 9A 97 78 93 98 db 91h, 9Ah, 97h, 78h, 93h, 98h
-31E4:A7A8 91 9F 91 2E 13 58 db 91h, 9Fh, 91h, 2Eh, 13h, 58h
-31E4:A7AE AD 14 92 98 A2 9F db 0ADh, 14h, 92h, 98h,0A2h, 9Fh
-31E4:A7B4 9A 12 91 16 2F 58 db 9Ah, 12h, 91h, 16h, 2Fh, 58h
-31E4:A7BA 77 71 96 5F 92 92 db 77h, 71h, 96h, 5Fh, 92h, 92h
-31E4:A7C0 AB C5 02 AE BE B7 db 0ABh,0C5h, 02h,0AEh,0BEh,0B7h
-31E4:A7C6 EA BF DC EE E7 EF db 0EAh,0BFh,0DCh,0EEh,0E7h,0EFh
-31E4:A7CC CB FE 6E D5 F7 FF db 0CBh,0FEh, 6Eh,0D5h,0F7h,0FFh
-31E4:A7D2 6B F3 2E 7B CB 72 db 6Bh,0F3h, 2Eh, 7Bh,0CBh, 72h
-31E4:A7D8 6D 5D BF EF 00 0D db 6Dh, 5Dh,0BFh,0EFh, 00h, 0Dh
-31E4:A7DE 6E DE AA 77 FB 5D db 6Eh,0DEh,0AAh, 77h,0FBh, 5Dh
-31E4:A7E4 5F DB 6E 67 75 BA db 5Fh,0DBh, 6Eh, 67h, 75h,0BAh
-31E4:A7EA D9 FD 5E D5 D7 ED db 0D9h,0FDh, 5Eh,0D5h,0D7h,0EDh
-31E4:A7F0 AE EF DD 77 DF F4 db 0AEh,0EFh,0DDh, 77h,0DFh,0F4h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 518
-
-31E4:A7F6 CF 65 EB BB D6 DB db 0CFh, 65h,0EBh,0BBh,0D6h,0DBh
-31E4:A7FC 7F FF F5 FF D6 FE db 7Fh,0FFh,0F5h,0FFh,0D6h,0FEh
-31E4:A802 DF FD 5F FF FB 78 db 0DFh,0FDh, 5Fh,0FFh,0FBh, 78h
-31E4:A808 46 A0 00 04 EB 3B db 46h,0A0h, 00h, 04h,0EBh, 3Bh
-31E4:A80E 40 0F FE DF DF 80 db 40h, 0Fh,0FEh,0DFh,0DFh, 80h
-31E4:A814 00 02 52 DD 00 00 db 00h, 02h, 52h,0DDh, 00h, 00h
-31E4:A81A 01 7F DA 00 00 00 db 01h, 7Fh,0DAh, 00h, 00h, 00h
-31E4:A820 BD 74 00 00 00 48 db 0BDh, 74h, 00h, 00h, 00h, 48h
-31E4:A826 FF EF FF FF FF DB db 0FFh,0EFh,0FFh,0FFh,0FFh,0DBh
-31E4:A82C 0F FF B7 3F BD 0F db 0Fh,0FFh,0B7h, 3Fh,0BDh, 0Fh
-31E4:A832 F3 AB FF BD 0E FF db 0F3h,0ABh,0FFh,0BDh, 0Eh,0FFh
-31E4:A838 9A BF ED 55 B7 6A db 9Ah,0BFh,0EDh, 55h,0B7h, 6Ah
-31E4:A83E 04 FF 6E CB D5 EE db 04h,0FFh, 6Eh,0CBh,0D5h,0EEh
-31E4:A844 ED FD 67 D6 FE BD db 0EDh,0FDh, 67h,0D6h,0FEh,0BDh
-31E4:A84A FD AD DD EF FA B7 db 0FDh,0ADh,0DDh,0EFh,0FAh,0B7h
-31E4:A850 F7 BD 9F FF 6F BA db 0F7h,0BDh, 9Fh,0FFh, 6Fh,0BAh
-31E4:A856 BA FD EA EB 6F DF db 0BAh,0FDh,0EAh,0EBh, 6Fh,0DFh
-31E4:A85C FF DF BB BB 7F FB db 0FFh,0DFh,0BBh,0BBh, 7Fh,0FBh
-31E4:A862 F6 F5 6F BA F5 FD db 0F6h,0F5h, 6Fh,0BAh,0F5h,0FDh
-31E4:A868 9E CA 95 6D F6 DB db 9Eh,0CAh, 95h, 6Dh,0F6h,0DBh
-31E4:A86E 6D 5C FF EF B4 6A db 6Dh, 5Ch,0FFh,0EFh,0B4h, 6Ah
-31E4:A874 B6 DF FD BF B7 7F db 0B6h,0DFh,0FDh,0BFh,0B7h, 7Fh
-31E4:A87A FF FD 77 77 AD AD db 0FFh,0FDh, 77h, 77h,0ADh,0ADh
-31E4:A880 AB FD F8 7D DB DA db 0ABh,0FDh,0F8h, 7Dh,0DBh,0DAh
-31E4:A886 FF FF 5F 7F FC 80 db 0FFh,0FFh, 5Fh, 7Fh,0FCh, 80h
-31E4:A88C 06 BD FE 21 00 00 db 06h,0BDh,0FEh, 21h, 00h, 00h
-31E4:A892 FF FF C6 00 00 1C db 0FFh,0FFh,0C6h, 00h, 00h, 1Ch
-31E4:A898 00 E8 00 00 03 FF db 00h,0E8h, 00h, 00h, 03h,0FFh
-31E4:A89E EF 00 00 00 00 B0 db 0EFh, 00h, 00h, 00h, 00h,0B0h
-31E4:A8A4 C0 00 00 00 1D BF db 0C0h, 00h, 00h, 00h, 1Dh,0BFh
-31E4:A8AA 00 03 FF 00 7F FF db 00h, 03h,0FFh, 00h, 7Fh,0FFh
-31E4:A8B0 02 00 B6 8A 9A EE db 02h, 00h,0B6h, 8Ah, 9Ah,0EEh
-31E4:A8B6 83 9E 5C B6 54 B5 db 83h, 9Eh, 5Ch,0B6h, 54h,0B5h
-31E4:A8BC EA 8C 92 B5 5F FD db 0EAh, 8Ch, 92h,0B5h, 5Fh,0FDh
-31E4:A8C2 3C E7 6F 5D D5 55 db 3Ch,0E7h, 6Fh, 5Dh,0D5h, 55h
-31E4:A8C8 FF EA FB DD 7F FB db 0FFh,0EAh,0FBh,0DDh, 7Fh,0FBh
-31E4:A8CE BE F5 DF 99 A6 F7 db 0BEh,0F5h,0DFh, 99h,0A6h,0F7h
-31E4:A8D4 BF DA AA FE BE E7 db 0BFh,0DAh,0AAh,0FEh,0BEh,0E7h
-31E4:A8DA F7 7A 95 49 3F F7 db 0F7h, 7Ah, 95h, 49h, 3Fh,0F7h
-31E4:A8E0 D7 6B 37 B5 FF 7F db 0D7h, 6Bh, 37h,0B5h,0FFh, 7Fh
-31E4:A8E6 2A FF DF ED B5 EA db 2Ah,0FFh,0DFh,0EDh,0B5h,0EAh
-31E4:A8EC EC AD EB F7 7F FF db 0ECh,0ADh,0EBh,0F7h, 7Fh,0FFh
-31E4:A8F2 FF 43 FF FF F8 AB db 0FFh, 43h,0FFh,0FFh,0F8h,0ABh
-31E4:A8F8 FC 00 00 65 FF 00 db 0FCh, 00h, 00h, 65h,0FFh, 00h
-31E4:A8FE 00 00 02 FF E0 00 db 00h, 00h, 02h,0FFh,0E0h, 00h
-31E4:A904 00 01 BD 20 00 00 db 00h, 01h,0BDh, 20h, 00h, 00h
-31E4:A90A 00 5F 40 00 03 80 db 00h, 5Fh, 40h, 00h, 03h, 80h
-31E4:A910 2F 80 00 27 E0 17 db 2Fh, 80h, 00h, 27h,0E0h, 17h
-31E4:A916 80 00 0C 10 0B 80 db 80h, 00h, 0Ch, 10h, 0Bh, 80h
-31E4:A91C 00 07 40 05 80 00 db 00h, 07h, 40h, 05h, 80h, 00h
-31E4:A922 00 00 02 80 00 00 db 00h, 00h, 02h, 80h, 00h, 00h
-31E4:A928 00 01 00 00 00 db 00h, 01h, 00h, 00h, 00h
-31E4:A92D 00 00 FE FE FE FE db 00h, 00h,0FEh,0FEh,0FEh,0FEh
-31E4:A933 FE 00 db 0FEh, 00h
-31E4:A935 001A[00] db 26 dup (0)
-31E4:A94F FE FE FE FE FE 00 db 0FEh,0FEh,0FEh,0FEh,0FEh, 00h
-31E4:A955 0008[00] db 8 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 519
-
-31E4:A95D FE FE FF FF FF FF db 0FEh,0FEh,0FFh,0FFh,0FFh,0FFh
-31E4:A963 FF FE FE 00 00 00 db 0FFh,0FEh,0FEh, 00h, 00h, 00h
-31E4:A969 00 00 00 FE FF FF db 00h, 00h, 00h,0FEh,0FFh,0FFh
-31E4:A96F FE 00 FE 00 FE FF db 0FEh, 00h,0FEh, 00h,0FEh,0FFh
-31E4:A975 FF FE 00 00 00 00 db 0FFh,0FEh, 00h, 00h, 00h, 00h
-31E4:A97B FE FF 00 FE 00 FE db 0FEh,0FFh, 00h,0FEh, 00h,0FEh
-31E4:A981 00 FE 00 FE 00 FF db 00h,0FEh, 00h,0FEh, 00h,0FFh
-31E4:A987 FE 00 00 00 FE FF db 0FEh, 00h, 00h, 00h,0FEh,0FFh
-31E4:A98D FE FF FE 00 FE 00 db 0FEh,0FFh,0FEh, 00h,0FEh, 00h
-31E4:A993 FE 00 FE FF FE 00 db 0FEh, 00h,0FEh,0FFh,0FEh, 00h
-31E4:A999 00 FE FF FE 00 FE db 00h,0FEh,0FFh,0FEh, 00h,0FEh
-31E4:A99F FF FE 00 ED F6 6B db 0FFh,0FEh, 00h,0EDh,0F6h, 6Bh
-31E4:A9A5 68 0B CE AB 55 53 db 68h, 0Bh,0CEh,0ABh, 55h, 53h
-31E4:A9AB 79 EA 76 B6 96 B7 db 79h,0EAh, 76h,0B6h, 96h,0B7h
-31E4:A9B1 AC CA 96 9E 59 CD db 0ACh,0CAh, 96h, 9Eh, 59h,0CDh
-31E4:A9B7 4F 6B F5 6F 9A FF db 4Fh, 6Bh,0F5h, 6Fh, 9Ah,0FFh
-31E4:A9BD 75 49 B7 DB CD 53 db 75h, 49h,0B7h,0DBh,0CDh, 53h
-31E4:A9C3 6A EF FF AE EA DA db 6Ah,0EFh,0FFh,0AEh,0EAh,0DAh
-31E4:A9C9 FB F6 FB A7 CF FF db 0FBh,0F6h,0FBh,0A7h,0CFh,0FFh
-31E4:A9CF BF FF 5E DF 67 EF db 0BFh,0FFh, 5Eh,0DFh, 67h,0EFh
-31E4:A9D5 BB F7 FB B5 7F FF db 0BBh,0F7h,0FBh,0B5h, 7Fh,0FFh
-31E4:A9DB FF FF BF EB C0 00 db 0FFh,0FFh,0BFh,0EBh,0C0h, 00h
-31E4:A9E1 00 7F D7 C0 00 00 db 00h, 7Fh,0D7h,0C0h, 00h, 00h
-31E4:A9E7 10 D7 40 00 00 1F db 10h,0D7h, 40h, 00h, 00h, 1Fh
-31E4:A9ED FF C0 00 00 01 38 db 0FFh,0C0h, 00h, 00h, 01h, 38h
-31E4:A9F3 00 00 00 01 FF 00 db 00h, 00h, 00h, 01h,0FFh, 00h
-31E4:A9F9 00 00 01 FD 00 00 db 00h, 00h, 01h,0FDh, 00h, 00h
-31E4:A9FF 00 01 BF 80 00 00 db 00h, 01h,0BFh, 80h, 00h, 00h
-31E4:AA05 01 DF C0 00 00 01 db 01h,0DFh,0C0h, 00h, 00h, 01h
-31E4:AA0B CF 60 00 00 01 DD db 0CFh, 60h, 00h, 00h, 01h,0DDh
-31E4:AA11 DF F8 00 01 CC B6 db 0DFh,0F8h, 00h, 01h,0CCh,0B6h
-31E4:AA17 D7 F7 FF E8 DE EE db 0D7h,0F7h,0FFh,0E8h,0DEh,0EEh
-31E4:AA1D FB AE FB 6A B7 E4 db 0FBh,0AEh,0FBh, 6Ah,0B7h,0E4h
-31E4:AA23 99 65 B2 B5 6A 99 db 99h, 65h,0B2h,0B5h, 6Ah, 99h
-31E4:AA29 FB 6D 49 67 4E E9 db 0FBh, 6Dh, 49h, 67h, 4Eh,0E9h
-31E4:AA2F 96 B5 D7 B5 F3 73 db 96h,0B5h,0D7h,0B5h,0F3h, 73h
-31E4:AA35 58 D4 BB 7D 9A FE db 58h,0D4h,0BBh, 7Dh, 9Ah,0FEh
-31E4:AA3B BE EA AC 56 A2 44 db 0BEh,0EAh,0ACh, 56h,0A2h, 44h
-31E4:AA41 C9 F6 6D 5F 7C BD db 0C9h,0F6h, 6Dh, 5Fh, 7Ch,0BDh
-31E4:AA47 FF FF DA AD B5 DF db 0FFh,0FFh,0DAh,0ADh,0B5h,0DFh
-31E4:AA4D DF BB 5A FD 9F FB db 0DFh,0BBh, 5Ah,0FDh, 9Fh,0FBh
-31E4:AA53 FE ED 6F FF 7F FF db 0FEh,0EDh, 6Fh,0FFh, 7Fh,0FFh
-31E4:AA59 F7 FB F2 80 00 db 0F7h,0FBh,0F2h, 80h, 00h
-31E4:AA5E ú0D C3 FE 80 00 0E db 0Dh,0C3h,0FEh, 80h, 00h, 0Eh
-31E4:AA64 7F FF 80 00 01 FF db 7Fh,0FFh, 80h, 00h, 01h,0FFh
-31E4:AA6A 38 00 00 00 FC FE db 38h, 00h, 00h, 00h,0FCh,0FEh
-31E4:AA70 00 00 00 7F F2 00 db 00h, 00h, 00h, 7Fh,0F2h, 00h
-31E4:AA76 00 00 7D EB 00 00 db 00h, 00h, 7Dh,0EBh, 00h, 00h
-31E4:AA7C 00 5F F5 80 00 00 db 00h, 5Fh,0F5h, 80h, 00h, 00h
-31E4:AA82 77 6E C0 00 03 ED db 77h, 6Eh,0C0h, 00h, 03h,0EDh
-31E4:AA88 9B 60 00 04 DF FE db 9Bh, 60h, 00h, 04h,0DFh,0FEh
-31E4:AA8E FF FF FD 9F BB 36 db 0FFh,0FFh,0FDh, 9Fh,0BBh, 36h
-31E4:AA94 A0 0B FE BF 54 AF db 0A0h, 0Bh,0FEh,0BFh, 54h,0AFh
-31E4:AA9A F5 BB BC AF 2D 5D db 0F5h,0BBh,0BCh,0AFh, 2Dh, 5Dh
-31E4:AAA0 9E BA B4 B3 77 DB db 9Eh,0BAh,0B4h,0B3h, 77h,0DBh
-31E4:AAA6 AD D9 6B BD BB BD db 0ADh,0D9h, 6Bh,0BDh,0BBh,0BDh
-31E4:AAAC AA CB 95 93 B5 55 db 0AAh,0CBh, 95h, 93h,0B5h, 55h
-31E4:AAB2 96 FB 59 EB A7 75 db 96h,0FBh, 59h,0EBh,0A7h, 75h
-31E4:AAB8 5A F6 BE 95 77 6F db 5Ah,0F6h,0BEh, 95h, 77h, 6Fh
-31E4:AABE 66 CA BE 6E AE B7 db 66h,0CAh,0BEh, 6Eh,0AEh,0B7h
-31E4:AAC4 AA 9A FF 73 DF 7D db 0AAh, 9Ah,0FFh, 73h,0DFh, 7Dh
-31E4:AACA FF FF FF 7F C1 38 db 0FFh,0FFh,0FFh, 7Fh,0C1h, 38h
-31E4:AAD0 00 00 DD FE 60 00 db 00h, 00h,0DDh,0FEh, 60h, 00h
-31E4:AAD6 00 FE 1C C0 00 00 db 00h,0FEh, 1Ch,0C0h, 00h, 00h
-31E4:AADC BF FF 80 00 00 FF db 0BFh,0FFh, 80h, 00h, 00h,0FFh
-31E4:AAE2 38 00 00 00 FC F8 db 38h, 00h, 00h, 00h,0FCh,0F8h
-31E4:AAE8 00 00 00 7F E8 00 db 00h, 00h, 00h, 7Fh,0E8h, 00h
-31E4:AAEE 00 00 FF EC 00 00 db 00h, 00h,0FFh,0ECh, 00h, 00h
-31E4:AAF4 01 FB D7 F8 00 07 db 01h,0FBh,0D7h,0F8h, 00h, 07h
-31E4:AAFA E7 7F FF FF FD 3B db 0E7h, 7Fh,0FFh,0FFh,0FDh, 3Bh
-31E4:AB00 DF FF DB 7E E7 E7 db 0DFh,0FFh,0DBh, 7Eh,0E7h,0E7h
-31E4:AB06 FE FD EE BD A5 59 db 0FEh,0FDh,0EEh,0BDh,0A5h, 59h
-31E4:AB0C 9A A9 26 8D 15 FD db 9Ah,0A9h, 26h, 8Dh, 15h,0FDh
-31E4:AB12 D6 db 0D6h
-31E4:AB13 loc_2348:
-31E4:AB13 54 push sp
-31E4:AB14 F2 49 2B 3C 53 F5 db 0F2h, 49h, 2Bh, 3Ch, 53h,0F5h
-31E4:AB1A A9 50 5F DB BB FF db 0A9h, 50h, 5Fh,0DBh,0BBh,0FFh
-31E4:AB20 63 6F 83 BF F7 BF db 63h, 6Fh, 83h,0BFh,0F7h,0BFh
-31E4:AB26 74 37 B6 A6 6A 7E db 74h, 37h,0B6h,0A6h, 6Ah, 7Eh
-31E4:AB2C 9D BB E5 92 BF 5A db 9Dh,0BBh,0E5h, 92h,0BFh, 5Ah
-31E4:AB32 55 67 74 B0 AF 5F db 55h, 67h, 74h,0B0h,0AFh, 5Fh
-31E4:AB38 FC A6 D9 53 55 BB db 0FCh,0A6h,0D9h, 53h, 55h,0BBh
-31E4:AB3E A2 35 B4 7A AA 00 db 0A2h, 35h,0B4h, 7Ah,0AAh, 00h
-31E4:AB44 05 db 05h
-31E4:AB45 loc_2349:
-31E4:AB45 3C F2 cmp al,0F2h
-31E4:AB47 98 cbw ; Convrt byte to word
-31E4:AB48 0F ;* pop cs ; Dangerous-8088 only
-31E4:AB48 0F db 0Fh
-31E4:AB49 F3 7B EF 5D F0 0E db 0F3h, 7Bh,0EFh, 5Dh,0F0h, 0Eh
-31E4:AB4F 7C F4 9D 00 03 72 db 7Ch,0F4h, 9Dh, 00h, 03h, 72h
-31E4:AB55 F7 6B 00 01 FF E2 db 0F7h, 6Bh, 00h, 01h,0FFh,0E2h
-31E4:AB5B 5E 00 00 00 BD 34 db 5Eh, 00h, 00h, 00h,0BDh, 34h
-31E4:AB61 00 00 FF C8 C8 00 db 00h, 00h,0FFh,0C8h,0C8h, 00h
-31E4:AB67 01 93 AE F8 00 07 db 01h, 93h,0AEh,0F8h, 00h, 07h
-31E4:AB6D 9B 40 D0 00 00 4B db 9Bh, 40h,0D0h, 00h, 00h, 4Bh
-31E4:AB73 9E 5E 00 00 29 B2 db 9Eh, 5Eh, 00h, 00h, 29h,0B2h
-31E4:AB79 B1 00 00 AE BA DE db 0B1h, 00h, 00h,0AEh,0BAh,0DEh
-31E4:AB7F FF FF 32 0D 26 29 db 0FFh,0FFh, 32h, 0Dh, 26h, 29h
-31E4:AB85 EE 28 65 00 4B D3 db 0EEh, 28h, 65h, 00h, 4Bh,0D3h
-31E4:AB8B EB A2 5A 9A 20 03 db 0EBh,0A2h, 5Ah, 9Ah, 20h, 03h
-31E4:AB91 EC 16 C8 99 55 19 db 0ECh, 16h,0C8h, 99h, 55h, 19h
-31E4:AB97 A0 C5 A3 B3 0C 57 db 0A0h,0C5h,0A3h,0B3h, 0Ch, 57h
-31E4:AB9D AE E8 F9 B4 86 6B db 0AEh,0E8h,0F9h,0B4h, 86h, 6Bh
-31E4:ABA3 A9 93 db 0A9h, 93h
-31E4:ABA5 loc_2350:
-31E4:ABA5 55 push bp
-31E4:ABA6 19 4C 72 sbb [si+72h],cx
-31E4:ABA9 29 6A CC sub [bp+si-34h],bp
-31E4:ABAC 4A dec dx
-31E4:ABAD EA 966B:DBED ;* jmp far ptr loc_2376 ;*(966B:DBED)
-31E4:ABAD EA db 0EAh
-31E4:ABAE DBED 966B dw 0DBEDh, 966Bh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 521
-
- ;* No entry point to code
-31E4:ABB2 D2 7B D6 sar byte ptr [bp+di-2Ah],cl ; Shift w/sign fill
-31E4:ABB5 CF iret ; Interrupt return
- ;* No entry point to code
-31E4:ABB6 54 push sp
-31E4:ABB7 CB retf
- ;* No entry point to code
-31E4:ABB8 9F lahf ; Load ah from flags
-31E4:ABB9 BA 55A5 mov dx,55A5h
-31E4:ABBC FF C9 dec cx
-31E4:ABBE 5A pop dx
-31E4:ABBF úBF FFE7 mov di,data_1203e ; (31E4:FFE7=0)
-31E4:ABC2 19 DF sbb di,bx
-31E4:ABC4 7F FF FE 4D D4 80 db 7Fh,0FFh,0FEh, 4Dh,0D4h, 80h
-31E4:ABCA 00 01 43 F9 04 00 db 00h, 01h, 43h,0F9h, 04h, 00h
-31E4:ABD0 81 B5 B2 00 00 01 db 81h,0B5h,0B2h, 00h, 00h, 01h
-31E4:ABD6 C9 E4 00 00 00 7A db 0C9h,0E4h, 00h, 00h, 00h, 7Ah
-31E4:ABDC C8 00 00 00 36 90 db 0C8h, 00h, 00h, 00h, 36h, 90h
-31E4:ABE2 18 00 30 3F 20 00 db 18h, 00h, 30h, 3Fh, 20h, 00h
-31E4:ABE8 00 00 00 40 00 00 db 00h, 00h, 00h, 40h, 00h, 00h
-31E4:ABEE 00 01 80 00 00 00 db 00h, 01h, 80h, 00h, 00h, 00h
-31E4:ABF4 01 FF FF FF FF FF db 01h,0FFh,0FFh,0FFh,0FFh,0FFh
-31E4:ABFA AD E5 3B FD FC F3 db 0ADh,0E5h, 3Bh,0FDh,0FCh,0F3h
-31E4:AC00 B2 A5 3D EB F3 BB db 0B2h,0A5h, 3Dh,0EBh,0F3h,0BBh
-31E4:AC06 9B BD 67 F7 6A B9 db 9Bh,0BDh, 67h,0F7h, 6Ah,0B9h
-31E4:AC0C 2D 2F D6 C7 3D BD db 2Dh, 2Fh,0D6h,0C7h, 3Dh,0BDh
-31E4:AC12 95 FA B5 32 8A 48 db 95h,0FAh,0B5h, 32h, 8Ah, 48h
-31E4:AC18 72 A5 55 6C 5B 7F db 72h,0A5h, 55h, 6Ch, 5Bh, 7Fh
-31E4:AC1E B8 EC A4 97 DD 72 db 0B8h,0ECh,0A4h, 97h,0DDh, 72h
-31E4:AC24 D6 D5 27 BF 53 6A db 0D6h,0D5h, 27h,0BFh, 53h, 6Ah
-31E4:AC2A 95 2B F4 EA DD 55 db 95h, 2Bh,0F4h,0EAh,0DDh, 55h
-31E4:AC30 D5 F5 8D D2 ED 7F db 0D5h,0F5h, 8Dh,0D2h,0EDh, 7Fh
-31E4:AC36 7B FF 6F AE BB 85 db 7Bh,0FFh, 6Fh,0AEh,0BBh, 85h
-31E4:AC3C FF FE 79 9F EA 00 db 0FFh,0FEh, 79h, 9Fh,0EAh, 00h
-31E4:AC42 01 7A BF 07 FF FF db 01h, 7Ah,0BFh, 07h,0FFh,0FFh
-31E4:AC48 FF F8 F8 00 00 00 db 0FFh,0F8h,0F8h, 00h, 00h, 00h
-31E4:AC4E 07 00 00 00 00 00 db 07h, 00h, 00h, 00h, 00h, 00h
-31E4:AC54 80 00 00 00 01 80 db 80h, 00h, 00h, 00h, 01h, 80h
-31E4:AC5A 00 00 00 01 FF FF db 00h, 00h, 00h, 01h,0FFh,0FFh
-31E4:AC60 FF FF FF 00 db 0FFh,0FFh,0FFh, 00h
-31E4:AC64 000E[00] db 14 dup (0)
-31E4:AC72 D6 E7 66 EF F6 13 db 0D6h,0E7h, 66h,0EFh,0F6h, 13h
-31E4:AC78 6F ED B2 AB B5 37 db 6Fh,0EDh,0B2h,0ABh,0B5h, 37h
-31E4:AC7E EB 3B 35 DB 46 CF db 0EBh, 3Bh, 35h,0DBh, 46h,0CFh
-31E4:AC84 2A 56 EB 6B BB 73 db 2Ah, 56h,0EBh, 6Bh,0BBh, 73h
-31E4:AC8A A5 FD 7B B7 EA E5 db 0A5h,0FDh, 7Bh,0B7h,0EAh,0E5h
-31E4:AC90 93 7F FE FF FD 9F db 93h, 7Fh,0FEh,0FFh,0FDh, 9Fh
-31E4:AC96 43 BF F8 7F FB 43 db 43h,0BFh,0F8h, 7Fh,0FBh, 43h
-31E4:AC9C E7 F8 5E AB C3 FF db 0E7h,0F8h, 5Eh,0ABh,0C3h,0FFh
-31E4:ACA2 78 51 DF C2 E9 F8 db 78h, 51h,0DFh,0C2h,0E9h,0F8h
-31E4:ACA8 5B AB C3 69 E8 50 db 5Bh,0ABh,0C3h, 69h,0E8h, 50h
-31E4:ACAE D7 C3 5D D8 5D FF db 0D7h,0C3h, 5Dh,0D8h, 5Dh,0FFh
-31E4:ACB4 C2 AF B8 79 BF C2 db 0C2h,0AFh,0B8h, 79h,0BFh,0C2h
-31E4:ACBA FB F8 52 8F C3 FF db 0FBh,0F8h, 52h, 8Fh,0C3h,0FFh
-31E4:ACC0 C0 77 A8 C0 00 00 db 0C0h, 77h,0A8h,0C0h, 00h, 00h
-31E4:ACC6 12 5B 40 00 00 15 db 12h, 5Bh, 40h, 00h, 00h, 15h
-31E4:ACCC E7 C0 00 00 29 FA db 0E7h,0C0h, 00h, 00h, 29h,0FAh
-31E4:ACD2 00 00 00 4B FF 80 db 00h, 00h, 00h, 4Bh,0FFh, 80h
-31E4:ACD8 00 00 B4 FF F8 00 db 00h, 00h,0B4h,0FFh,0F8h, 00h
-31E4:ACDE 01 6B DE C6 00 02 db 01h, 6Bh,0DEh,0C6h, 00h, 02h
-31E4:ACE4 C8 EB 39 87 FD BF db 0C8h,0EBh, 39h, 87h,0FDh,0BFh
-31E4:ACEA 08 C5 69 9B 6E 40 db 08h,0C5h, 69h, 9Bh, 6Eh, 40h
-31E4:ACF0 80 00 00 00 40 68 db 80h, 00h, 00h, 00h, 40h, 68h
-31E4:ACF6 91 22 A0 46 AA E8 db 91h, 22h,0A0h, 46h,0AAh,0E8h
-31E4:ACFC 8A 4B AD 34 A5 93 db 8Ah, 4Bh,0ADh, 34h,0A5h, 93h
-31E4:AD02 6A 2F D7 AD 3A AA db 6Ah, 2Fh,0D7h,0ADh, 3Ah,0AAh
-31E4:AD08 FF FF FF FF FF 00 db 0FFh,0FFh,0FFh,0FFh,0FFh, 00h
-31E4:AD0E 00 00 00 00 FC 00 db 00h, 00h, 00h, 00h,0FCh, 00h
-31E4:AD14 00 00 00 03 FF FF db 00h, 00h, 00h, 03h,0FFh,0FFh
-31E4:AD1A FF FF 98 00 06 52 db 0FFh,0FFh, 98h, 00h, 06h, 52h
-31E4:AD20 9B A8 AB A9 92 95 db 9Bh,0A8h,0ABh,0A9h, 92h, 95h
-31E4:AD26 A4 db 0A4h
-31E4:AD27 loc_2351: ; xref 31E4:AD38
-31E4:AD27 A6 cmpsb ; Cmp [si] to es:[di]
-31E4:AD28 35 4D55 xor ax,4D55h
-31E4:AD2B AA stosb ; Store al to es:[di]
-31E4:AD2C A4 movsb ; Mov [si] to es:[di]
-31E4:AD2D A9 6962 test ax,6962h
-31E4:AD30 E6 A9 out 0A9h,al ; port 0A9h ??I/O Non-standard
-31E4:AD32 4E dec si
-31E4:AD33 59 pop cx
-31E4:AD34 2B EB sub bp,bx
-31E4:AD36 55 push bp
-31E4:AD37 9F lahf ; Load ah from flags
-31E4:AD38 7F ED jg loc_2351 ; Jump if >
-31E4:AD3A 9A FFFF:FF7F ;* call far ptr sub_283 ;*(FFFF:FF7F)
-31E4:AD3A 9A db 9Ah
-31E4:AD3B FF7F FFFF dw 0FF7Fh, 0FFFFh
-31E4:AD3F A6 cmpsb ; Cmp [si] to es:[di]
-31E4:AD40 80 87 0080 DD add byte ptr data_519+59h[bx],0DDh ; (31E4:0080=' This ')
-31E4:AD45 07 pop es
-31E4:AD46 06 push es
-31E4:AD47 00 00 add [bx+si],al
-31E4:AD49 EF out dx,ax ; port 0, DMA-1 bas&add ch 0
-31E4:AD4A F8 clc ; Clear carry flag
-31E4:AD4B 00 00 add [bx+si],al
-31E4:AD4D 00 FC add ah,bh
-31E4:AD4F 00 60 02 add [bx+si+2],ah
-31E4:AD52 00 00 00 00 00 3F db 00h, 00h, 00h, 00h, 00h, 3Fh
-31E4:AD58 C0 00 00 03 FF 40 db 0C0h, 00h, 00h, 03h,0FFh, 40h
-31E4:AD5E 00 00 00 db 00h, 00h, 00h
-31E4:AD61 3F db 3Fh
-31E4:AD62 0007[FF] db 7 dup (0FFh)
-31E4:AD69 0F FF FF FF FF 0F db 0Fh,0FFh,0FFh,0FFh,0FFh, 0Fh
-31E4:AD6F FF FF FF FF 0F FF db 0FFh,0FFh,0FFh,0FFh, 0Fh,0FFh
-31E4:AD75 FF FF FF 0F FF FF db 0FFh,0FFh,0FFh, 0Fh,0FFh,0FFh
-31E4:AD7B FF FF 0F FF FF FF db 0FFh,0FFh, 0Fh,0FFh,0FFh,0FFh
-31E4:AD81 FF 0F F0 00 00 00 db 0FFh, 0Fh,0F0h, 00h, 00h, 00h
-31E4:AD87 00 08 00 00 00 00 db 00h, 08h, 00h, 00h, 00h, 00h
-31E4:AD8D 08 00 FF FF FF F0 db 08h, 00h,0FFh,0FFh,0FFh,0F0h
-31E4:AD93 00 FF FF FF F0 00 db 00h,0FFh,0FFh,0FFh,0F0h, 00h
-31E4:AD99 FF FF FF F0 00 FF db 0FFh,0FFh,0FFh,0F0h, 00h,0FFh
-31E4:AD9F FF FF F0 00 FF FF db 0FFh,0FFh,0F0h, 00h,0FFh,0FFh
-31E4:ADA5 FF F0 00 FF FF FF db 0FFh,0F0h, 00h,0FFh,0FFh,0FFh
-31E4:ADAB F0 00 FF FF FF F0 db 0F0h, 00h,0FFh,0FFh,0FFh,0F0h
-31E4:ADB1 00 FF FF FF F0 00 db 00h,0FFh,0FFh,0FFh,0F0h, 00h
-31E4:ADB7 00 00 1F F0 00 00 db 00h, 00h, 1Fh,0F0h, 00h, 00h
-31E4:ADBD 00 1F F0 00 30 06 db 00h, 1Fh,0F0h, 00h, 30h, 06h
-31E4:ADC3 00 08 00 00 00 00 db 00h, 08h, 00h, 00h, 00h, 00h
-31E4:ADC9 07 FF 20 02 00 00 db 07h,0FFh, 20h, 02h, 00h, 00h
-31E4:ADCF 00 FF FC 00 00 3F db 00h,0FFh,0FCh, 00h, 00h, 3Fh
-31E4:ADD5 FF FE 08 00 1F db 0FFh,0FEh, 08h, 00h, 1Fh
-31E4:ADDA 004E[00] db 78 dup (0)
-31E4:AE28 0F FF 00 00 00 0F db 0Fh,0FFh, 00h, 00h, 00h, 0Fh
-31E4:AE2E FF 00 00 00 0F FF db 0FFh, 00h, 00h, 00h, 0Fh,0FFh
-31E4:AE34 00 00 00 0F FF 00 db 00h, 00h, 00h, 0Fh,0FFh, 00h
-31E4:AE3A 00 00 0F FF 00 00 db 00h, 00h, 0Fh,0FFh, 00h, 00h
-31E4:AE40 00 0F FF 00 00 00 db 00h, 0Fh,0FFh, 00h, 00h, 00h
-31E4:AE46 0F C0 00 00 00 0F db 0Fh,0C0h, 00h, 00h, 00h, 0Fh
-31E4:AE4C C0 00 00 00 0F FF db 0C0h, 00h, 00h, 00h, 0Fh,0FFh
-31E4:AE52 00 db 00h
-31E4:AE53 0028[00] db 40 dup (0)
-31E4:AE7B 20 04 00 00 01 11 db 20h, 04h, 00h, 00h, 01h, 11h
-31E4:AE81 00 81 00 8A 08 13 db 00h, 81h, 00h, 8Ah, 08h, 13h
-31E4:AE87 64 A3 28 47 19 52 db 64h,0A3h, 28h, 47h, 19h, 52h
-31E4:AE8D 2B 96 A8 78 48 85 db 2Bh, 96h,0A8h, 78h, 48h, 85h
-31E4:AE93 06 B5 0A D6 A1 00 db 06h,0B5h, 0Ah,0D6h,0A1h, 00h
-31E4:AE99 7F FF E5 16 FF 80 db 7Fh,0FFh,0E5h, 16h,0FFh, 80h
-31E4:AE9F 00 1F 00 00 00 07 db 00h, 1Fh, 00h, 00h, 00h, 07h
-31E4:AEA5 FC 90 FE 00 06 02 db 0FCh, 90h,0FEh, 00h, 06h, 02h
-31E4:AEAB 6A 02 00 07 01 62 db 6Ah, 02h, 00h, 07h, 01h, 62h
-31E4:AEB1 07 80 07 0F CC 09 db 07h, 80h, 07h, 0Fh,0CCh, 09h
-31E4:AEB7 00 3F F0 24 12 00 db 00h, 3Fh,0F0h, 24h, 12h, 00h
-31E4:AEBD 00 00 10 3E 00 00 db 00h, 00h, 10h, 3Eh, 00h, 00h
-31E4:AEC3 00 08 1F FF FF FF db 00h, 08h, 1Fh,0FFh,0FFh,0FFh
-31E4:AEC9 F8 db 0F8h
-31E4:AECA 0038[00] db 56 dup (0)
-31E4:AF02 01 54 00 03 65 A6 db 01h, 54h, 00h, 03h, 65h,0A6h
-31E4:AF08 00 90 BC 34 AA 2A db 00h, 90h,0BCh, 34h,0AAh, 2Ah
-31E4:AF0E 5A 9B AA 94 91 52 db 5Ah, 9Bh,0AAh, 94h, 91h, 52h
-31E4:AF14 85 94 A9 9C A2 66 db 85h, 94h,0A9h, 9Ch,0A2h, 66h
-31E4:AF1A F5 67 21 48 A6 E6 db 0F5h, 67h, 21h, 48h,0A6h,0E6h
-31E4:AF20 D4 A9 72 EF DB A6 db 0D4h,0A9h, 72h,0EFh,0DBh,0A6h
-31E4:AF26 59 17 37 57 DA F7 db 59h, 17h, 37h, 57h,0DAh,0F7h
-31E4:AF2C FB 7F FF FF FF FF db 0FBh, 7Fh,0FFh,0FFh,0FFh,0FFh
-31E4:AF32 FF 00 db 0FFh, 00h
-31E4:AF34 0009[00] db 9 dup (0)
-31E4:AF3D FF FF FF FF FF db 0FFh,0FFh,0FFh,0FFh,0FFh
-
-31E4:AF42 0168[00] talk_string_buffer db 360 dup (0)
-31E4:B0AA 0000 game_time_ctr dw 0
-31E4:B0AC 0000 game_time_ctr_2 dw 0
-
-31E4:B0AE 00A0[00] character_pause_list db 160 dup (0)
-
-; Animation table - this contains the list of active hotspots
-
-31E4:B14E 0011[00] animation_table db 17 dup (0)
-31E4:B15F 0000 slot0_tick_proc dw 0 ; Tick handler
-31E4:B161 0011[00] db 17 dup (0)
-31E4:B172 0000 data_1116 dw 0 ; Offset 24h in slot
- dw 0
-31E4:B176 00 slot0_col_offset db 0
-31E4:B177 070C[00] db 1804 dup (0) ; Remaining slots
-
-
-31E4:B883 00 animation_block_list db 0
-31E4:B884 0027[00] db 39 dup (0)
-
-31E4:B8AB 0000 seq_timer_ctr dw 0 ; xref 273F:485A, 273F:495D
-31E4:B8AD 0000 seq_timer_ctr_2 dw 0 ; xref 273F:485E, 273F:4962
-
-31E4:B8AF 0118[00] sequence_delay_table db 280 dup (0)
-
-31E4:B9C7 0032[00] data_1121 db 50 dup (0) ; xref 273F:A066, 273F:A0BD
-
-31E4:B9F9 0000 talk_speech_ptr dw 0
-31E4:B9FB 0000 data_b9fb dw 0
-31E4:B9FD 0000 data_1122 dw 0
-31E4:B9FF 0000 talk_buffer_segment dw 0
-31E4:BA01 0000 talk_buffer_offset dw 0
-31E4:BA03 0000 talk_buffer_offset_2 dw 0
-31E4:BA05 00 db 0
-31E4:BA06 00 data_ba06 db 0
-31E4:BA07 0000 talk_string_offset dw 0
-31E4:BA09 000C[00] db 12 dup (0)
-
-; All variables below are placed together to be accessible from the sequence
-; executor GET_FIELD and SET_FIELD opcodes
-
-31E4:BA15 0000 room_number_2 dw 0
-31E4:BA17 0000 character_hotspot dw 0
-31E4:BA19 0000 use_hotspot_id dw 0
-31E4:BA1B 0000 active_hotspot_id dw 0
-31E4:BA1D 0000 sequence_result dw 0
-31E4:BA1F 0000 general_val dw 0
-31E4:BA21 0000 script_v6 dw 0
-31E4:BA23 0000 new_room_number dw 0
-31E4:BA25 0000 old_room_number dw 0
-31E4:BA27 0000 cell_door_state dw 0
-31E4:BA29 0000 torch_hide dw 0 ; #10
-31E4:BA2B 0000 script_v11 dw 0
-31E4:BA2D 0000 dw 0
-31E4:BA2F 0000 dw 0
-31E4:BA31 0000 dw 0
-31E4:BA33 0000 prisoner_dead dw 0
-31E4:BA35 0000 dw 0
-31E4:BA37 0000 dw 0
-31E4:BA39 0000 bottle_filled dw 0
-31E4:BA3B 0000 talk_record_index dw 0 ; xref 273F:2035, 273F:5C96
-31E4:BA3D 0000 sack_cut dw 0 ; #20
-31E4:BA3F 0000 dw 0
-31E4:BA41 0000 dw 0
-31E4:BA43 0000 dw 0
-31E4:BA45 0000 dw 0
-31E4:BA47 0000 dw 0
-31E4:BA49 0000 dw 0
-31E4:BA4B 0000 dw 0
-31E4:BA4D 0000 dw 0
-31E4:BA4F 0000 script_val_29 dw 0
-31E4:BA51 0000 dw 0 ; #30
-31E4:BA53 0000 dw 0
-31E4:BA55 0000 dw 0
-31E4:BA57 0000 dw 0
-31E4:BA59 0000 dw 0
-31E4:BA5B 0000 dw 0
-31E4:BA5D 0000 dw 0
-31E4:BA5F 0000 script_val_37 dw 0
-31E4:BA61 0000 dw 0
-31E4:BA63 0000 dw 0
-31E4:BA65 0000 dw 0 ; #40
-31E4:BA67 0000 dw 0
-31E4:BA69 0000 dw 0
-31E4:BA6B 0000 dw 0
-31E4:BA6D 0000 dw 0
-31E4:BA6F 0000 dw 0
-31E4:BA71 0000 dw 0
-31E4:BA73 0000 dw 0
-31E4:BA75 0000 dw 0 ; #50
-31E4:BA77 0000 dw 0
-31E4:BA79 0000 dw 0
-31E4:BA7B 0000 dw 0
-31E4:BA7D 0000 dw 0
-31E4:BA7F 0000 dw 0
-31E4:BA81 0000 dw 0
-31E4:BA83 0000 dw 0
-31E4:BA85 0000 dw 0 ; #60
-31E4:BA87 0000 dw 0
-31E4:BA89 0000 dw 0
-31E4:BA8B 0000 dw 0
-31E4:BA8D 0000 dw 0
-31E4:BA8F 0000 dw 0
-31E4:BA91 0000 dw 0
-31E4:BA93 0000 dw 0
-31E4:BA95 0000 dw 0 ; #70
-31E4:BA97 0000 dw 0
-31E4:BA99 0000 dw 0
-31E4:BA9B 0000 script_val_73 db 0
-31E4:BA9D 0000 dw 0
-31E4:BA9F 0000 dw 0
-31E4:BAA1 0000 dw 0
-31E4:BAA3 0000 dw 0
-31E4:BAA5 0000 dw 0
-31E4:BAA7 0000 dw 0
-31E4:BAA9 0000 script_val_80 dw 0 ; #80
-31E4:BAAB 0000 dw 0
-31E4:BAAD 0000 room_exit_animation_flag dw 0
-31E4:BAAF 0000 dw 0
-31E4:BAB1 0000 dw 0
-31E4:BAB3 0000 dw 0
-31E4:BAB5 0000 dw 0
-31E4:BAB7 0000 script_val_87 dw 0
-31E4:BAB9 0000 script_val_88 dw 0
-31E4:BABB 0000 dw 0
-31E4:BABD 0000 dw 0
-
-31E4:BABF 0CC6 sequence_method_list dw offset animation_load_entry
- dw offset sequence_set_hotspot_script
- dw offset sub_247
- dw offset seq_method_3
- dw offset sequence_delay_list_init
- dw offset seq_deactivate_hotspot_set
- dw offset seq_deactivate_hotspot
- dw offset seq_pathfind_reset
-31E4:BACF dw offset add_sequence_delay
- dw offset sub_252
- dw offset seq_character_in_room ; #10
- dw offset seq_set_desc
- dw offset seq_set_hotspot_name
- dw offset play_sound
- dw offset seq_endgame_sequence
- dw offset sub_238
-31E4:BADF dw offset display_dialog
- dw offset seq_method_17
- dw offset seq_room_remote_view_setup
- dw offset start_talk_noone
- dw offset seq_check_cell_door_2 ; #20
- dw offset play_music
- dw offset seq_get_door_blocked
- dw offset seq_is_skorl_in_cell
-31E4:BAEF dw 8022h
- dw offset sub_92
- dw 7eeeh
- dw offset seq_set_blocking_hotspot_script
- dw offset seq_decrease_inventory_items
- dw offset talk_setup
- dw offset seq_set_action_ctr ; #30
- dw offset seq_converse
-31E4:BAFF dw offset seq_disable_hotspot
- dw offset seq_cut_sack
- dw offset seq_increase_groats
- dw offset seq_enable_hotspot
- dw offset display_message_dialog_4
- dw offset seq_method_37
- dw offset seq_transform_player
- dw offset seq_room_14_door_close
-31E4:BB0F dw offset seq_check_dropped_desc ; #40
- dw 8782h
- dw offset seq_door_close
- dw offset seq_method_43
- dw offset seq_door_open
- dw offset seq_method_45
- dw 2035h
- dw offset display_message_dialog
-31E4:BB1F dw offset seq_set_new_dispatch_action
- dw offset seq_set_support_offset
- dw offset seq_add_item_to_inventory ; #50
- dw offset seq_decrase_groats
- dw 8630h
- dw offset seq_method_53
- dw offset set_village_skorl_tick_proc
- dw offset seq_method_55
-31E4:BB2F dw offset seq_method_56
- dw offset get_num_groats
- dw offset seq_method_58
- dw offset seq_method_59
- dw offset seq_method_60 ; #60
- dw offset seq_kill_player
- dw offset animation_load
- dw offset seq_add_actions
-31E4:BB3F dw offset seq_random_to_general
-31E4:BB41 dw offset seq_check_cell_door
- dw offset seq_method_66
-
-31E4:BB45 0000 current_action_num dw 0
-31E4:BB47 0012[00] db 18 dup (0)
-31E4:BB59 20 04 A0 4F B4 4F db 20h, 04h,0A0h, 4Fh,0B4h, 4Fh
-31E4:BB5F 0D 00 00 db 0Dh, 00h, 00h
-31E4:BB62 0011[00] db 17 dup (0)
-31E4:BB73 29 04 C2 4F D0 4F db 29h, 04h,0C2h, 4Fh,0D0h, 4Fh
-31E4:BB79 0E db 0Eh
-31E4:BB7A 0013[00] db 19 dup (0)
-31E4:BB8D 36 04 DD 4F DD 4F db 36h, 04h,0DDh, 4Fh,0DDh, 4Fh
-31E4:BB93 10 00 db 10h, 00h
-
-; Following is a support data offset set indexed both by the script index list,
-; as well as directly by the program code
-
-31E4:BB95 06 00 00 00 support_data_rec_bb95 db 06h, 00h, 00h, 00h
-31E4:BB99 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BB9F 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBA5 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBAB 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBB1 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBB7 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBBD 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBC3 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBC9 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBCF 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBD5 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBDB 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBE1 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBE7 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBED 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBF3 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBF9 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-31E4:BBFF 00 db 00h
-31E4:BC00 00 data_1143 db 0
-31E4:BC01 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC07 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC0D 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC13 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC19 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC1F 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC25 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC2B 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC31 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC37 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC3D 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC43 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
-31E4:BC49 00 00 num_groats dw 0
-
- hotspot_walkto_list
-31E4:BC4B 0418 0143 8123 dw 418h, 143h, 8123h
-31E4:BC51 2721 0144 80FB
-31E4:BC57 2722 0095 8105
-31E4:BC5D 271F 00AC 80EB
-31E4:BC63 2720 00AE 813A
-31E4:BC69 271E 00ED 810C
-31E4:BC6F 753C 016D 010E
-31E4:BC75 0421 0112 0112
-31E4:BC7B 0422 00F0 010A
-31E4:BC81 753B 012A 811B
-31E4:BC87 041F 00E6 0131
-31E4:BC8D 2716 009C 813A
-31E4:BC93 2711 00E5 0125
-31E4:BC99 2712 00E4 00FA
-...more...
-
-31E4:BC9E 5E 75 add [bp+75h],bl
-31E4:BCA1 59 pop cx
-31E4:BCA2 01 31 add [bx+di],si
-31E4:BCA4 loc_2354: ; xref 31E4:BCE8
-31E4:BCA4 01 0F add [bx],cx
-31E4:BCA6 04 42 add al,42h ; 'B'
-31E4:BCA8 01 25 add [di],sp
-31E4:BCAA 01 10 add [bx+si],dx
-31E4:BCAC 04 EF add al,0EFh
-31E4:BCAE 00 1C add [si],bl
-31E4:BCB0 81 35 EF75 xor word ptr [di],0EF75h
-31E4:BCB4 00 1A add [bp+si],bl
-31E4:BCB6 01 14 add [si],dx
-31E4:BCB8 27 daa ; Decimal adjust
-31E4:BCB9 82 01 04 add byte ptr [bx+di],4
-31E4:BCBC 01 1B add [bp+di],bx
-31E4:BCBE 04 1A add al,1Ah
-31E4:BCC0 01 1A add [bp+si],bx
-31E4:BCC2 01 4A 75 add [bp+si+75h],cx
-31E4:BCC5 35 FC01 xor ax,0FC01h
-31E4:BCC8 00 4C 75 add [si+75h],cl
-31E4:BCCB D4 00 ;* aam 0 ; undocumented inst
-31E4:BCCB D4 00 db 0D4h, 00h
-31E4:BCCD 03 81 03E6 add ax,data_541[bx+di] ; (31E4:03E6=0)
-31E4:BCD1 FC cld ; Clear direction
-31E4:BCD2 00 29 add [bx+di],ch
-31E4:BCD4 01 E7 add di,sp
-31E4:BCD6 03 CE add cx,si
-31E4:BCD8 00 22 add [bp+si],ah
-31E4:BCDA 01 30 add [bx+si],si
-31E4:BCDC 75 E1 ;* jnz loc_2356 ;*Jump if not zero
-31E4:BCDC 75 E1 db 75h,0E1h
-31E4:BCDE 00 12 add [bp+si],dl
-31E4:BCE0 01 31 add [bx+di],si
-31E4:BCE2 75 BA jnz loc_2353 ; Jump if not zero
-31E4:BCE4 00 1B add [bp+di],bl
-31E4:BCE6 01 32 add [bp+si],si
-31E4:BCE8 75 BA jnz loc_2354 ; Jump if not zero
-31E4:BCEA 00 1B add [bp+di],bl
-31E4:BCEC 01 0D add [di],cx
-31E4:BCEE 04 67 add al,67h ; 'g'
-31E4:BCF0 01 14 add [si],dx
-31E4:BCF2 01 33 add [bp+di],si
-31E4:BCF4 75 12 jnz loc_2357 ; Jump if not zero
-31E4:BCF6 01 11 add [bx+di],dx
-31E4:BCF8 01 34 add [si],si
-31E4:BCFA 75 1E jnz loc_2358 ; Jump if not zero
-31E4:BCFC 01 14 add [si],dx
-31E4:BCFE 01 36 7775 add data_936,si ; (31E4:7775=0Bh)
-31E4:BD02 01 1D add [di],bx
-31E4:BD04 01 37 add [bx],si
-31E4:BD06 75 A9 ;* jnz loc_2355 ;*Jump if not zero
-31E4:BD06 75 A9 db 75h,0A9h
-31E4:BD08 loc_2357: ; xref 31E4:BCF4
-31E4:BD08 00 1C add [si],bl
-31E4:BD0A 01 38 add [bx+si],di
-31E4:BD0C 75 43 ;* jnz loc_2359 ;*Jump if not zero
-31E4:BD0C 75 43 db 75h, 43h
-31E4:BD0E 01 2B add [bp+di],bp
-31E4:BD10 01 39 add [bx+di],di
-31E4:BD12 75 31 jnz $+33h ; Jump if not zero
-31E4:BD14 01 1B add [bp+di],bx
-31E4:BD16 01 3A add [bp+si],di
-31E4:BD18 75 7B ;* jnz loc_2361 ;*Jump if not zero
-31E4:BD18 75 7B db 75h, 7Bh
-31E4:BD1A loc_2358: ; xref 31E4:BCFA
-31E4:BD1A 01 25 add [di],sp
-31E4:BD1C 01 18 add [bx+si],bx
-31E4:BD1E 27 daa ; Decimal adjust
-31E4:BD1F C4 00 les ax,dword ptr [bx+si] ; Load seg:offset ptr
-31E4:BD21 23 81 2717 and ax,data_756[bx+di] ; (31E4:2717=0)
-31E4:BD25 72 01 jc $+3 ; Jump if carry Set
-31E4:BD27 0E push cs
-31E4:BD28 01 1A add [bp+si],bx
-31E4:BD2A 27 daa ; Decimal adjust
-31E4:BD2B 64 01 2E 81 24 04 db 64h, 01h, 2Eh, 81h, 24h, 04h
-31E4:BD31 0D 01 1C 01 3D 75 db 0Dh, 01h, 1Ch, 01h, 3Dh, 75h
-31E4:BD37 2E 01 1C 01 5F 75 db 2Eh, 01h, 1Ch, 01h, 5Fh, 75h
-31E4:BD3D 1E 01 1C 01 3E 75 db 1Eh, 01h, 1Ch, 01h, 3Eh, 75h
-31E4:BD43 55 01 15 01 3F 75 db 55h, 01h, 15h, 01h, 3Fh, 75h
-31E4:BD49 8F 01 15 01 40 75 db 8Fh, 01h, 15h, 01h, 40h, 75h
-31E4:BD4F CC 00 db 0CCh, 00h
-31E4:BD51 loc_2359: ; xref 31E4:BD0C
-31E4:BD51 19 01 sbb [bx+di],ax
-31E4:BD53 41 inc cx
-31E4:BD54 loc_2360: ; xref 31E4:BD7E
-31E4:BD54 75 63 jnz $+65h ; Jump if not zero
-31E4:BD56 01 1E 4201 add word ptr ds:[4201h],bx ; (31E4:4201=0)
-31E4:BD5A 75 83 jnz $-7Bh ; Jump if not zero
-31E4:BD5C 01 FC add sp,di
-31E4:BD5E 00 43 75 add [bp+di+75h],al
-31E4:BD61 12 01 adc al,[bx+di]
-31E4:BD63 38 01 cmp [bx+di],al
-31E4:BD65 44 inc sp
-31E4:BD66 75 4D jnz $+4Fh ; Jump if not zero
-31E4:BD68 01 1E 4501 add word ptr ds:[4501h],bx ; (31E4:4501=0)
-31E4:BD6C 75 FB jnz $-3 ; Jump if not zero
-31E4:BD6E 00 14 add [si],dl
-
- ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
- ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
-31E4:BD70 sub_276 proc near
-31E4:BD70 01 46 75 add [bp+75h],ax
-31E4:BD73 31 01 xor [bx+di],ax
-31E4:BD75 13 01 adc ax,[bx+di]
-31E4:BD77 17 pop ss
-31E4:BD78 04 18 add al,18h
-31E4:BD7A 01 06 4701 add ds:data_45e,ax ; (0000:4701=800Fh)
-31E4:BD7E 75 D4 jnz loc_2360 ; Jump if not zero
-31E4:BD80 00 F3 add bl,dh
-31E4:BD82 00 48 75 add [bx+si+75h],cl
-31E4:BD85 AC lodsb ; String [si] to al
-31E4:BD86 00 13 add [bp+di],dl
-31E4:BD88 01 2A add [bp+si],bp
-31E4:BD8A 04 72 add al,72h ; 'r'
-31E4:BD8C 01 06 2B01 add ds:data_38e,ax ; (0000:2B01=663Eh)
-31E4:BD90 04 D4 add al,0D4h
-31E4:BD92 00 1C add [si],bl
-31E4:BD94 81 49 75 00C8 or word ptr [bx+di+75h],0C8h
-31E4:BD99 2B 01 sub ax,[bx+di]
-31E4:BD9B FF FF 33 01 0A 01 db 0FFh,0FFh, 33h, 01h, 0Ah, 01h
-31E4:BDA1 2C 04 40 01 22 01 db 2Ch, 04h, 40h, 01h, 22h, 01h
-31E4:BDA7 2D 04 C6 00 29 01 db 2Dh, 04h,0C6h, 00h, 29h, 01h
-31E4:BDAD 4B 75 1C 01 20 01 db 4Bh, 75h, 1Ch, 01h, 20h, 01h
-31E4:BDB3 25 27 01 01 15 81 db 25h, 27h, 01h, 01h, 15h, 81h
-31E4:BDB9 26 27 C5 00 1C 81 db 26h, 27h,0C5h, 00h, 1Ch, 81h
-31E4:BDBF 29 27 42 01 36 81 db 29h, 27h, 42h, 01h, 36h, 81h
-31E4:BDC5 2A 27 BF 00 0C 81 db 2Ah, 27h,0BFh, 00h, 0Ch, 81h
-31E4:BDCB 2B 27 67 01 0C 81 db 2Bh, 27h, 67h, 01h, 0Ch, 81h
-31E4:BDD1 2C 27 BF 00 0C 81 db 2Ch, 27h,0BFh, 00h, 0Ch, 81h
-31E4:BDD7 2D 27 67 01 0C 81 db 2Dh, 27h, 67h, 01h, 0Ch, 81h
-31E4:BDDD 2E 27 BF 00 0C 81 db 2Eh, 27h,0BFh, 00h, 0Ch, 81h
-31E4:BDE3 1C 27 2C 01 34 01 db 1Ch, 27h, 2Ch, 01h, 34h, 01h
-31E4:BDE9 2F 27 67 01 0C 81 db 2Fh, 27h, 67h, 01h, 0Ch, 81h
-31E4:BDEF 2E 04 49 01 F1 00 db 2Eh, 04h, 49h, 01h,0F1h, 00h
-31E4:BDF5 2F 04 E3 00 F1 00 db 2Fh, 04h,0E3h, 00h,0F1h, 00h
-31E4:BDFB 30 04 3A 01 F1 00 db 30h, 04h, 3Ah, 01h,0F1h, 00h
-31E4:BE01 31 04 E3 00 F1 00 db 31h, 04h,0E3h, 00h,0F1h, 00h
-31E4:BE07 32 04 49 01 F1 00 db 32h, 04h, 49h, 01h,0F1h, 00h
-31E4:BE0D 33 04 E3 00 F1 00 db 33h, 04h,0E3h, 00h,0F1h, 00h
-31E4:BE13 34 04 0E 01 16 01 db 34h, 04h, 0Eh, 01h, 16h, 01h
-31E4:BE19 37 04 7A 01 30 01 db 37h, 04h, 7Ah, 01h, 30h, 01h
-31E4:BE1F 4D 75 99 00 30 01 db 4Dh, 75h, 99h, 00h, 30h, 01h
-31E4:BE25 4E 75 99 00 30 01 db 4Eh, 75h, 99h, 00h, 30h, 01h
-31E4:BE2B 4F 75 A9 00 28 01 db 4Fh, 75h,0A9h, 00h, 28h, 01h
-31E4:BE31 50 75 A9 00 28 01 db 50h, 75h,0A9h, 00h, 28h, 01h
-31E4:BE37 51 75 C4 00 11 01 db 51h, 75h,0C4h, 00h, 11h, 01h
-31E4:BE3D 52 75 C4 00 11 01 db 52h, 75h,0C4h, 00h, 11h, 01h
-31E4:BE43 53 75 C4 00 11 01 db 53h, 75h,0C4h, 00h, 11h, 01h
-31E4:BE49 54 75 55 01 0C 01 db 54h, 75h, 55h, 01h, 0Ch, 01h
-31E4:BE4F 55 75 55 01 0C 01 db 55h, 75h, 55h, 01h, 0Ch, 01h
-31E4:BE55 56 75 55 01 0C 01 db 56h, 75h, 55h, 01h, 0Ch, 01h
-31E4:BE5B 38 04 AE 00 28 01 db 38h, 04h,0AEh, 00h, 28h, 01h
-31E4:BE61 3A 04 22 01 02 01 db 3Ah, 04h, 22h, 01h, 02h, 01h
-31E4:BE67 3D 04 0D 01 20 81 db 3Dh, 04h, 0Dh, 01h, 20h, 81h
-31E4:BE6D 12 04 AD 00 0D 81 db 12h, 04h,0ADh, 00h, 0Dh, 81h
-31E4:BE73 0C 04 AD 00 0D 81 db 0Ch, 04h,0ADh, 00h, 0Dh, 81h
-31E4:BE79 32 27 A9 00 19 01 db 32h, 27h,0A9h, 00h, 19h, 01h
-31E4:BE7F 58 75 8C 00 1F 01 db 58h, 75h, 8Ch, 00h, 1Fh, 01h
-31E4:BE85 59 75 DF 00 14 01 db 59h, 75h,0DFh, 00h, 14h, 01h
-31E4:BE8B 5A 75 BA 00 26 01 db 5Ah, 75h,0BAh, 00h, 26h, 01h
-31E4:BE91 5B 75 64 01 2A 01 db 5Bh, 75h, 64h, 01h, 2Ah, 01h
-31E4:BE97 5C 75 6B 01 FC 00 db 5Ch, 75h, 6Bh, 01h,0FCh, 00h
-31E4:BE9D 5D 75 6B 01 FC 00 db 5Dh, 75h, 6Bh, 01h,0FCh, 00h
-31E4:BEA3 42 04 59 01 32 01 db 42h, 04h, 59h, 01h, 32h, 01h
-31E4:BEA9 60 75 17 01 0A 01 db 60h, 75h, 17h, 01h, 0Ah, 01h
-31E4:BEAF 61 75 C5 00 1A 01 db 61h, 75h,0C5h, 00h, 1Ah, 01h
-31E4:BEB5 62 75 3F 01 19 01 db 62h, 75h, 3Fh, 01h, 19h, 01h
-31E4:BEBB 63 75 29 01 15 01 db 63h, 75h, 29h, 01h, 15h, 01h
-31E4:BEC1 64 75 29 01 15 01 db 64h, 75h, 29h, 01h, 15h, 01h
-31E4:BEC7 65 75 C5 00 1A 01 db 65h, 75h,0C5h, 00h, 1Ah, 01h
-31E4:BECD 66 75 E1 00 0B 01 db 66h, 75h,0E1h, 00h, 0Bh, 01h
-31E4:BED3 35 27 E1 00 0B 01 db 35h, 27h,0E1h, 00h, 0Bh, 01h
-31E4:BED9 36 27 0A 01 0C 01 db 36h, 27h, 0Ah, 01h, 0Ch, 01h
-31E4:BEDF 67 75 7A 01 0B 01 db 67h, 75h, 7Ah, 01h, 0Bh, 01h
-31E4:BEE5 68 75 51 01 0B 01 db 68h, 75h, 51h, 01h, 0Bh, 01h
-31E4:BEEB 69 75 3B 01 0B 01 db 69h, 75h, 3Bh, 01h, 0Bh, 01h
-31E4:BEF1 6A 75 4B 01 14 01 db 6Ah, 75h, 4Bh, 01h, 14h, 01h
-31E4:BEF7 6B 75 60 01 14 01 db 6Bh, 75h, 60h, 01h, 14h, 01h
-31E4:BEFD 6C 75 69 01 14 01 db 6Ch, 75h, 69h, 01h, 14h, 01h
-31E4:BF03 6D 75 4C 01 0B 01 db 6Dh, 75h, 4Ch, 01h, 0Bh, 01h
-31E4:BF09 13 27 BA 00 1A 01 db 13h, 27h,0BAh, 00h, 1Ah, 01h
-31E4:BF0F E5 03 29 01 12 81 db 0E5h, 03h, 29h, 01h, 12h, 81h
-31E4:BF15 6E 75 6A 01 C3 00 db 6Eh, 75h, 6Ah, 01h,0C3h, 00h
-31E4:BF1B 63 04 64 01 24 01 db 63h, 04h, 64h, 01h, 24h, 01h
-31E4:BF21 64 04 CF 00 23 01 db 64h, 04h,0CFh, 00h, 23h, 01h
-31E4:BF27 57 75 51 01 12 01 db 57h, 75h, 51h, 01h, 12h, 01h
-31E4:BF2D 6F 75 43 01 02 01 db 6Fh, 75h, 43h, 01h, 02h, 01h
-31E4:BF33 15 27 4C 01 1F 01 db 15h, 27h, 4Ch, 01h, 1Fh, 01h
-31E4:BF39 00 db 00h
-31E4:BF3A 00 00 00 00 00 00 db 0, 0, 0, 0, 0, 0
-
-31E4:BF40 0000 room_info_table dw 0
-31E4:BF42 0007[00] db 7 dup (0)
-
-31E4:BF49 0D C1 01 00 84 00 db 0Dh,0C1h, 01h, 00h, 84h, 00h
-31E4:BF4F 00 00 01 3C C1 02 db 00h, 00h, 01h, 3Ch,0C1h, 02h
-31E4:BF55 00 71 00 00 00 01 db 00h, 71h, 00h, 00h, 00h, 01h
-31E4:BF5B 85 C1 03 00 DE 00 db 85h,0C1h, 03h, 00h,0DEh, 00h
-31E4:BF61 00 00 01 C4 C1 04 db 00h, 00h, 01h,0C4h,0C1h, 04h
-31E4:BF67 00 DF 00 00 00 01 db 00h,0DFh, 00h, 00h, 00h, 01h
-31E4:BF6D FD C9 09 0C CA 0B db 0FDh,0C9h, 09h, 0Ch,0CAh, 0Bh
-31E4:BF73 00 00 00 3C CA 09 db 00h, 00h, 00h, 3Ch,0CAh, 09h
-31E4:BF79 0C CA 0B 00 00 00 db 0Ch,0CAh, 0Bh, 00h, 00h, 00h
-31E4:BF7F FD C1 07 00 7D 08 db 0FDh,0C1h, 07h, 00h, 7Dh, 08h
-31E4:BF85 00 00 02 2C C2 08 db 00h, 00h, 02h, 2Ch,0C2h, 08h
-31E4:BF8B 00 7C 08 00 00 02 db 00h, 7Ch, 08h, 00h, 00h, 02h
-31E4:BF91 6B C2 09 00 62 08 db 6Bh,0C2h, 09h, 00h, 62h, 08h
-31E4:BF97 00 00 02 AA C2 0A db 00h, 00h, 02h,0AAh,0C2h, 0Ah
-31E4:BF9D 00 63 08 00 00 02 db 00h, 63h, 08h, 00h, 00h, 02h
-31E4:BFA3 09 C3 0B 00 7C 08 db 09h,0C3h, 0Bh, 00h, 7Ch, 08h
-31E4:BFA9 00 00 02 48 C3 0C db 00h, 00h, 02h, 48h,0C3h, 0Ch
-31E4:BFAF 00 64 08 00 00 02 db 00h, 64h, 08h, 00h, 00h, 02h
-31E4:BFB5 97 C3 0D 00 72 08 db 97h,0C3h, 0Dh, 00h, 72h, 08h
-31E4:BFBB 00 00 02 E6 C3 0E db 00h, 00h, 02h,0E6h,0C3h, 0Eh
-31E4:BFC1 00 67 08 00 00 02 db 00h, 67h, 08h, 00h, 00h, 02h
-31E4:BFC7 59 C4 0F 00 73 08 db 59h,0C4h, 0Fh, 00h, 73h, 08h
-31E4:BFCD 00 00 02 00 db 00h, 00h, 02h, 00h
-31E4:BFD1 0008[00] db 8 dup (0)
-31E4:BFD9 A8 C4 11 00 6D 08 db 0A8h,0C4h, 11h, 00h, 6Dh, 08h
-31E4:BFDF 00 00 02 17 C5 12 db 00h, 00h, 02h, 17h,0C5h, 12h
-31E4:BFE5 00 74 0B 00 00 02 db 00h, 74h, 0Bh, 00h, 00h, 02h
-31E4:BFEB 76 C5 13 00 6F 08 db 76h,0C5h, 13h, 00h, 6Fh, 08h
-31E4:BFF1 00 00 02 F5 C5 14 db 00h, 00h, 02h,0F5h,0C5h, 14h
-31E4:BFF7 00 84 08 00 00 02 db 00h, 84h, 08h, 00h, 00h, 02h
-31E4:BFFD 54 C6 15 00 7C 08 db 54h,0C6h, 15h, 00h, 7Ch, 08h
-31E4:C003 00 00 02 93 C6 16 db 00h, 00h, 02h, 93h,0C6h, 16h
-31E4:C009 00 7C 08 00 00 02 db 00h, 7Ch, 08h, 00h, 00h, 02h
-31E4:C00F D2 C6 17 00 7C 08 db 0D2h,0C6h, 17h, 00h, 7Ch, 08h
-31E4:C015 00 00 02 11 C7 18 db 00h, 00h, 02h, 11h,0C7h, 18h
-31E4:C01B 00 7C 08 00 00 02 db 00h, 7Ch, 08h, 00h, 00h, 02h
-31E4:C021 50 C7 19 00 7C 08 db 50h,0C7h, 19h, 00h, 7Ch, 08h
-31E4:C027 00 00 02 00 00 1A db 00h, 00h, 02h, 00h, 00h, 1Ah
-31E4:C02D 00 7C 08 00 00 02 db 00h, 7Ch, 08h, 00h, 00h, 02h
-31E4:C033 8F C7 1B 00 7C 08 db 8Fh,0C7h, 1Bh, 00h, 7Ch, 08h
-31E4:C039 00 00 02 CE C7 1C db 00h, 00h, 02h,0CEh,0C7h, 1Ch
-31E4:C03F 00 86 08 00 00 02 db 00h, 86h, 08h, 00h, 00h, 02h
-31E4:C045 FD C7 1D 00 88 08 db 0FDh,0C7h, 1Dh, 00h, 88h, 08h
-31E4:C04B 00 00 02 2C C8 1E db 00h, 00h, 02h, 2Ch,0C8h, 1Eh
-31E4:C051 00 4D 08 00 00 02 db 00h, 4Dh, 08h, 00h, 00h, 02h
-31E4:C057 5B C8 1F 00 70 08 db 5Bh,0C8h, 1Fh, 00h, 70h, 08h
-31E4:C05D 00 00 02 B9 C8 20 db 00h, 00h, 02h,0B9h,0C8h, 20h
-31E4:C063 00 8C 08 00 00 02 db 00h, 8Ch, 08h, 00h, 00h, 02h
-31E4:C069 00 00 21 00 00 00 db 00h, 00h, 21h, 00h, 00h, 00h
-31E4:C06F 00 00 02 E8 C8 22 db 00h, 00h, 02h,0E8h,0C8h, 22h
-31E4:C075 00 CE 00 00 00 02 db 00h,0CEh, 00h, 00h, 00h, 02h
-31E4:C07B 17 C9 23 00 9B 0C db 17h,0C9h, 23h, 00h, 9Bh, 0Ch
-31E4:C081 00 00 02 8A C8 24 db 00h, 00h, 02h, 8Ah,0C8h, 24h
-31E4:C087 00 EA 08 00 00 02 db 00h,0EAh, 08h, 00h, 00h, 02h
-31E4:C08D 00 00 25 00 00 00 db 00h, 00h, 25h, 00h, 00h, 00h
-31E4:C093 00 00 02 46 C9 26 db 00h, 00h, 02h, 46h,0C9h, 26h
-31E4:C099 00 CA 0B 00 00 04 db 00h,0CAh, 0Bh, 00h, 00h, 04h
-31E4:C09F 7F C9 27 00 CA 0B db 7Fh,0C9h, 27h, 00h,0CAh, 0Bh
-31E4:C0A5 00 00 04 BE C9 28 db 00h, 00h, 04h,0BEh,0C9h, 28h
-31E4:C0AB 00 CA 0B 00 00 04 db 00h,0CAh, 0Bh, 00h, 00h, 04h
-31E4:C0B1 7B CA 29 00 F1 0A db 7Bh,0CAh, 29h, 00h,0F1h, 0Ah
-31E4:C0B7 00 00 04 AA CA 2A db 00h, 00h, 04h,0AAh,0CAh, 2Ah
-31E4:C0BD 00 A0 0F 00 00 08 db 00h,0A0h, 0Fh, 00h, 00h, 08h
-31E4:C0C3 D9 CA 2B 00 A1 0F db 0D9h,0CAh, 2Bh, 00h,0A1h, 0Fh
-31E4:C0C9 00 00 08 18 CB 2C db 00h, 00h, 08h, 18h,0CBh, 2Ch
-31E4:C0CF 00 F3 0F 00 00 08 db 00h,0F3h, 0Fh, 00h, 00h, 08h
-31E4:C0D5 67 CB 2D 00 A2 0F db 67h,0CBh, 2Dh, 00h,0A2h, 0Fh
-31E4:C0DB 00 00 08 D0 CB 2E db 00h, 00h, 08h,0D0h,0CBh, 2Eh
-31E4:C0E1 00 A2 0F 00 00 08 db 00h,0A2h, 0Fh, 00h, 00h, 08h
-31E4:C0E7 29 CC 2F 00 18 10 db 29h,0CCh, 2Fh, 00h, 18h, 10h
-31E4:C0ED 00 00 08 68 CC 30 db 00h, 00h, 08h, 68h,0CCh, 30h
-31E4:C0F3 00 17 10 00 00 08 db 00h, 17h, 10h, 00h, 00h, 08h
-31E4:C0F9 97 CC 2F 00 18 10 db 97h,0CCh, 2Fh, 00h, 18h, 10h
-31E4:C0FF 00 00 08 C0 CC db 00h, 00h, 08h,0C0h,0CCh
-31E4:C104 0007[00] db 7 dup (0)
-31E4:C10B FF FF db 0FFh,0FFh
-
-; Start of room information data for initial cell room
-31E4:C10D 0000 dw 0000h
-31E4:C10F 8020 dw 8020h
-31E4:C111 6D57 dw 6D57h
-31E4:C113 1430 dw 1430h ; Offset for auto-load pixel blocks
-31E4:C115 02 db 2 ; Default number of screns
-31E4:C116 4100 dw 4100h ; Layer Id - Background
-31E4:C118 4101 dw 4101h ; Layer Id - Front part of door
-31E4:C11A 4102 dw 4102h ; Layer Id - cell window overlay
-
-31E4:C11C 00 db 00h
-31E4:C11D 00 db 00h
-31E4:C11E 3B db 3Bh
-31E4:C11F 0007[00] db 7 dup (0)
-
-31E4:C126 00CD dw 0CDh ; X start
-31E4:C128 0000 dw 0 ; X end
-31E4:C12A 00A8 dw 0A8h
-31E4:C12C D0 00 1F 01 26 01 db 0D0h, 00h, 1Fh, 01h, 26h, 01h
-31E4:C132 FF FF 02 40 E4 00 db 0FFh,0FFh, 02h, 40h,0E4h, 00h
-31E4:C138 00 01 FF FF 00 00 db 00h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C13E 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C144 02 01 42 02 42 00 db 02h, 01h, 42h, 02h, 42h, 00h
-31E4:C14A 00 00 00 E8 2B 00 db 00h, 00h, 00h,0E8h, 2Bh, 00h
-31E4:C150 0009[00] db 9 dup (0)
-31E4:C159 E0 00 FC 00 EE 00 db 0E0h, 00h,0FCh, 00h,0EEh, 00h
-31E4:C15F F8 00 FF FF 01 10 db 0F8h, 00h,0FFh,0FFh, 01h, 10h
-31E4:C165 C6 00 28 01 3C 01 db 0C6h, 00h, 28h, 01h, 3Ch, 01h
-31E4:C16B 6E 01 E8 00 FC 00 db 6Eh, 01h,0E8h, 00h,0FCh, 00h
-31E4:C171 FF FF 03 10 90 00 db 0FFh,0FFh, 03h, 10h, 90h, 00h
-31E4:C177 20 01 AA 01 B8 01 db 20h, 01h,0AAh, 01h,0B8h, 01h
-31E4:C17D E6 00 18 01 55 05 db 0E6h, 00h, 18h, 01h, 55h, 05h
-31E4:C183 FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:C189 57 6D 3C 14 02 01 db 57h, 6Dh, 3Ch, 14h, 02h, 01h
-31E4:C18F 43 02 43 00 00 00 db 43h, 02h, 43h, 00h, 00h, 00h
-31E4:C195 00 EC 2B 00 00 00 db 00h,0ECh, 2Bh, 00h, 00h, 00h
-31E4:C19B 00 00 02 9F 00 81 db 00h, 00h, 02h, 9Fh, 00h, 81h
-31E4:C1A1 01 8A 00 98 00 1A db 01h, 8Ah, 00h, 98h, 00h, 1Ah
-31E4:C1A7 01 24 01 FF FF 02 db 01h, 24h, 01h,0FFh,0FFh, 02h
-31E4:C1AD 40 44 01 00 01 A4 db 40h, 44h, 01h, 00h, 01h,0A4h
-31E4:C1B3 01 C0 01 1A 01 24 db 01h,0C0h, 01h, 1Ah, 01h, 24h
-31E4:C1B9 01 FF FF 04 80 4F db 01h,0FFh,0FFh, 04h, 80h, 4Fh
-31E4:C1BF 01 3A 01 FF FF 00 db 01h, 3Ah, 01h,0FFh,0FFh, 00h
-31E4:C1C5 00 20 00 57 6D 3C db 00h, 20h, 00h, 57h, 6Dh, 3Ch
-31E4:C1CB 14 03 00 44 01 44 db 14h, 03h, 00h, 44h, 01h, 44h
-31E4:C1D1 02 44 03 44 F3 2B db 02h, 44h, 03h, 44h,0F3h, 2Bh
-31E4:C1D7 00 00 00 00 00 03 db 00h, 00h, 00h, 00h, 00h, 03h
-31E4:C1DD 00 00 00 00 4C 01 db 00h, 00h, 00h, 00h, 4Ch, 01h
-31E4:C1E3 6D 01 39 01 40 01 db 6Dh, 01h, 39h, 01h, 40h, 01h
-31E4:C1E9 FF FF 03 20 80 01 db 0FFh,0FFh, 03h, 20h, 80h, 01h
-31E4:C1EF 20 01 50 01 69 01 db 20h, 01h, 50h, 01h, 69h, 01h
-31E4:C1F5 21 01 30 01 C6 05 db 21h, 01h, 30h, 01h,0C6h, 05h
-31E4:C1FB FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:C201 57 6D 3C 14 02 00 db 57h, 6Dh, 3Ch, 14h, 02h, 00h
-31E4:C207 87 01 87 00 00 00 db 87h, 01h, 87h, 00h, 00h, 00h
-31E4:C20D 00 83 00 FF FF 0F db 00h, 83h, 00h,0FFh,0FFh, 0Fh
-31E4:C213 00 01 04 DE 00 00 db 00h, 01h, 04h,0DEh, 00h, 00h
-31E4:C219 00 A5 00 D5 00 EF db 00h,0A5h, 00h,0D5h, 00h,0EFh
-31E4:C21F 00 2C 01 FF FF 08 db 00h, 2Ch, 01h,0FFh,0FFh, 08h
-31E4:C225 80 10 01 40 01 FF db 80h, 10h, 01h, 40h, 01h,0FFh
-31E4:C22B FF 00 00 00 20 57 db 0FFh, 00h, 00h, 00h, 20h, 57h
-31E4:C231 6D 3C 14 01 00 88 db 6Dh, 3Ch, 14h, 01h, 00h, 88h
-31E4:C237 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:C23D FA 2B 00 00 00 00 db 0FAh, 2Bh, 00h, 00h, 00h, 00h
-31E4:C243 01 05 00 00 00 00 db 01h, 05h, 00h, 00h, 00h, 00h
-31E4:C249 C7 00 6F 01 3F 01 db 0C7h, 00h, 6Fh, 01h, 3Fh, 01h
-31E4:C24F 47 01 FF FF 07 10 db 47h, 01h,0FFh,0FFh, 07h, 10h
-31E4:C255 D1 00 11 01 ED 00 db 0D1h, 00h, 11h, 01h,0EDh, 00h
-31E4:C25B 12 01 FA 00 09 01 db 12h, 01h,0FAh, 00h, 09h, 01h
-31E4:C261 FF FF 09 00 50 01 db 0FFh,0FFh, 09h, 00h, 50h, 01h
-31E4:C267 40 01 FF FF 00 00 db 40h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C26D 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C273 02 00 89 01 89 00 db 02h, 00h, 89h, 01h, 89h, 00h
-31E4:C279 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:C27F 00 00 00 01 06 00 db 00h, 00h, 00h, 01h, 06h, 00h
-31E4:C285 00 00 00 DD 00 8D db 00h, 00h, 00h,0DDh, 00h, 8Dh
-31E4:C28B 01 40 01 90 01 FF db 01h, 40h, 01h, 90h, 01h,0FFh
-31E4:C291 FF 08 40 F2 00 16 db 0FFh, 08h, 40h,0F2h, 00h, 16h
-31E4:C297 01 81 00 B2 00 E6 db 01h, 81h, 00h,0B2h, 00h,0E6h
-31E4:C29D 00 29 01 FF FF 0A db 00h, 29h, 01h,0FFh,0FFh, 0Ah
-31E4:C2A3 20 A4 01 10 01 FF db 20h,0A4h, 01h, 10h, 01h,0FFh
-31E4:C2A9 FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:C2AF 6D 3C 14 02 00 8A db 6Dh, 3Ch, 14h, 02h, 00h, 8Ah
-31E4:C2B5 01 8A 00 00 00 00 db 01h, 8Ah, 00h, 00h, 00h, 00h
-31E4:C2BB FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:C2C1 01 07 00 00 B5 01 db 01h, 07h, 00h, 00h,0B5h, 01h
-31E4:C2C7 C0 01 00 02 01 01 db 0C0h, 01h, 00h, 02h, 01h, 01h
-31E4:C2CD 16 01 FF FF 09 00 db 16h, 01h,0FFh,0FFh, 09h, 00h
-31E4:C2D3 A9 00 21 01 AC 00 db 0A9h, 00h, 21h, 01h,0ACh, 00h
-31E4:C2D9 DB 00 44 01 4A 01 db 0DBh, 00h, 44h, 01h, 4Ah, 01h
-31E4:C2DF FF FF 0B 00 F2 00 db 0FFh,0FFh, 0Bh, 00h,0F2h, 00h
-31E4:C2E5 16 01 50 00 7A 00 db 16h, 01h, 50h, 00h, 7Ah, 00h
-31E4:C2EB F6 00 46 01 FF FF db 0F6h, 00h, 46h, 01h,0FFh,0FFh
-31E4:C2F1 0D 00 A4 01 2B 01 db 0Dh, 00h,0A4h, 01h, 2Bh, 01h
-31E4:C2F7 01 01 20 01 FC 00 db 01h, 01h, 20h, 01h,0FCh, 00h
-31E4:C2FD 0A 01 FF FF 22 00 db 0Ah, 01h,0FFh,0FFh, 22h, 00h
-31E4:C303 C5 00 2F 01 FF FF db 0C5h, 00h, 2Fh, 01h,0FFh,0FFh
-31E4:C309 00 00 00 20 57 6D db 00h, 00h, 00h, 20h, 57h, 6Dh
-31E4:C30F 3C 14 01 00 88 00 db 3Ch, 14h, 01h, 00h, 88h, 00h
-31E4:C315 00 00 00 00 00 FF db 00h, 00h, 00h, 00h, 00h,0FFh
-31E4:C31B FF 00 00 00 00 01 db 0FFh, 00h, 00h, 00h, 00h, 01h
-31E4:C321 05 00 00 00 00 C7 db 05h, 00h, 00h, 00h, 00h,0C7h
-31E4:C327 00 6F 01 3F 01 47 db 00h, 6Fh, 01h, 3Fh, 01h, 47h
-31E4:C32D 01 FF FF 1B 20 77 db 01h,0FFh,0FFh, 1Bh, 20h, 77h
-31E4:C333 01 0B 01 ED 00 12 db 01h, 0Bh, 01h,0EDh, 00h, 12h
-31E4:C339 01 FA 00 09 01 FF db 01h,0FAh, 00h, 09h, 01h,0FFh
-31E4:C33F FF 0A 00 BE 00 46 db 0FFh, 0Ah, 00h,0BEh, 00h, 46h
-31E4:C345 01 FF FF 00 00 20 db 01h,0FFh,0FFh, 00h, 00h, 20h
-31E4:C34B 00 57 6D 3C 14 03 db 00h, 57h, 6Dh, 3Ch, 14h, 03h
-31E4:C351 00 8C 01 8C 02 8C db 00h, 8Ch, 01h, 8Ch, 02h, 8Ch
-31E4:C357 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C35D 00 00 01 0F 00 00 db 00h, 00h, 01h, 0Fh, 00h, 00h
-31E4:C363 00 00 03 01 22 01 db 00h, 00h, 03h, 01h, 22h, 01h
-31E4:C369 BD 00 D8 00 FF FF db 0BDh, 00h,0D8h, 00h,0FFh,0FFh
-31E4:C36F 14 00 65 01 44 01 db 14h, 00h, 65h, 01h, 44h, 01h
-31E4:C375 6C 01 89 01 26 01 db 6Ch, 01h, 89h, 01h, 26h, 01h
-31E4:C37B 3B 01 FF FF 1B 00 db 3Bh, 01h,0FFh,0FFh, 1Bh, 00h
-31E4:C381 AD 00 0B 01 A2 00 db 0ADh, 00h, 0Bh, 01h,0A2h, 00h
-31E4:C387 C3 00 C6 00 E0 00 db 0C3h, 00h,0C6h, 00h,0E0h, 00h
-31E4:C38D FF FF 20 00 AC 00 db 0FFh,0FFh, 20h, 00h,0ACh, 00h
-31E4:C393 40 01 FF FF 00 00 db 40h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C399 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C39F 02 00 8D 01 8D 02 db 02h, 00h, 8Dh, 01h, 8Dh, 02h
-31E4:C3A5 8D 00 00 01 2C 00 db 8Dh, 00h, 00h, 01h, 2Ch, 00h
-31E4:C3AB 00 00 00 01 08 00 db 00h, 00h, 00h, 01h, 08h, 00h
-31E4:C3B1 00 00 00 50 00 7A db 00h, 00h, 00h, 50h, 00h, 7Ah
-31E4:C3B7 00 1A 01 46 01 FF db 00h, 1Ah, 01h, 46h, 01h,0FFh
-31E4:C3BD FF 0E 00 A8 01 1F db 0FFh, 0Eh, 00h,0A8h, 01h, 1Fh
-31E4:C3C3 01 C6 01 E0 01 10 db 01h,0C6h, 01h,0E0h, 01h, 10h
-31E4:C3C9 01 46 01 FF FF 0A db 01h, 46h, 01h,0FFh,0FFh, 0Ah
-31E4:C3CF 00 7A 00 30 01 9F db 00h, 7Ah, 00h, 30h, 01h, 9Fh
-31E4:C3D5 00 0E 01 44 01 4A db 00h, 0Eh, 01h, 44h, 01h, 4Ah
-31E4:C3DB 01 FF FF 14 00 D4 db 01h,0FFh,0FFh, 14h, 00h,0D4h
-31E4:C3E1 00 D8 00 FF FF 00 db 00h,0D8h, 00h,0FFh,0FFh, 00h
-31E4:C3E7 00 20 00 57 6D 3C db 00h, 20h, 00h, 57h, 6Dh, 3Ch
-31E4:C3ED 14 02 00 8E 01 8E db 14h, 02h, 00h, 8Eh, 01h, 8Eh
-31E4:C3F3 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-31E4:C3F9 00 00 00 00 01 09 db 00h, 00h, 00h, 00h, 01h, 09h
-31E4:C3FF 00 00 00 00 50 00 db 00h, 00h, 00h, 00h, 50h, 00h
-31E4:C405 7A 00 11 01 26 01 db 7Ah, 00h, 11h, 01h, 26h, 01h
-31E4:C40B FF FF 0F 00 A4 01 db 0FFh,0FFh, 0Fh, 00h,0A4h, 01h
-31E4:C411 2B 01 80 00 0E 01 db 2Bh, 01h, 80h, 00h, 0Eh, 01h
-31E4:C417 3D 01 4A 01 FF FF db 3Dh, 01h, 4Ah, 01h,0FFh,0FFh
-31E4:C41D 13 00 04 01 02 01 db 13h, 00h, 04h, 01h, 02h, 01h
-31E4:C423 C6 01 E0 01 FC 00 db 0C6h, 01h,0E0h, 01h,0FCh, 00h
-31E4:C429 28 01 FF FF 0D 00 db 28h, 01h,0FFh,0FFh, 0Dh, 00h
-31E4:C42F 7A 00 35 01 F7 00 db 7Ah, 00h, 35h, 01h,0F7h, 00h
-31E4:C435 12 01 E8 00 F8 00 db 12h, 01h,0E8h, 00h,0F8h, 00h
-31E4:C43B FF FF 1F 00 67 01 db 0FFh,0FFh, 1Fh, 00h, 67h, 01h
-31E4:C441 3B 01 E8 00 54 01 db 3Bh, 01h,0E8h, 00h, 54h, 01h
-31E4:C447 09 01 17 01 39 0D db 09h, 01h, 17h, 01h, 39h, 0Dh
-31E4:C44D 35 01 4A 01 FC 00 db 35h, 01h, 4Ah, 01h,0FCh, 00h
-31E4:C453 0B 01 39 0D FF FF db 0Bh, 01h, 39h, 0Dh,0FFh,0FFh
-31E4:C459 00 00 20 00 57 6D db 00h, 00h, 20h, 00h, 57h, 6Dh
-31E4:C45F 3C 14 02 00 8F 01 db 3Ch, 14h, 02h, 00h, 8Fh, 01h
-31E4:C465 8F 00 00 00 00 0D db 8Fh, 00h, 00h, 00h, 00h, 0Dh
-31E4:C46B 0F 00 00 00 00 01 db 0Fh, 00h, 00h, 00h, 00h, 01h
-31E4:C471 0A 00 00 00 00 7F db 0Ah, 00h, 00h, 00h, 00h, 7Fh
-31E4:C477 00 73 01 3D 01 48 db 00h, 73h, 01h, 3Dh, 01h, 48h
-31E4:C47D 01 FF FF 11 00 E3 db 01h,0FFh,0FFh, 11h, 00h,0E3h
-31E4:C483 00 0E 01 B2 01 C2 db 00h, 0Eh, 01h,0B2h, 01h,0C2h
-31E4:C489 01 11 01 3C 01 FF db 01h, 11h, 01h, 3Ch, 01h,0FFh
-31E4:C48F FF 0E 00 7A 00 1D db 0FFh, 0Eh, 00h, 7Ah, 00h, 1Dh
-31E4:C495 01 EC 00 23 01 F0 db 01h,0ECh, 00h, 23h, 01h,0F0h
-31E4:C49B 00 FA 00 FF FF 26 db 00h,0FAh, 00h,0FFh,0FFh, 26h
-31E4:C4A1 00 42 01 46 01 FF db 00h, 42h, 01h, 46h, 01h,0FFh
-31E4:C4A7 FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:C4AD 6D 3C 14 03 00 91 db 6Dh, 3Ch, 14h, 03h, 00h, 91h
-31E4:C4B3 01 91 02 91 00 00 db 01h, 91h, 02h, 91h, 00h, 00h
-31E4:C4B9 FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:C4BF 01 0B 00 00 00 00 db 01h, 0Bh, 00h, 00h, 00h, 00h
-31E4:C4C5 50 00 7A 00 0B 01 db 50h, 00h, 7Ah, 00h, 0Bh, 01h
-31E4:C4CB 47 01 FF FF 15 00 db 47h, 01h,0FFh,0FFh, 15h, 00h
-31E4:C4D1 77 01 0B 01 D2 00 db 77h, 01h, 0Bh, 01h,0D2h, 00h
-31E4:C4D7 0C 01 CE 00 F5 00 db 0Ch, 01h,0CEh, 00h,0F5h, 00h
-31E4:C4DD FF FF 0F 00 FC 00 db 0FFh,0FFh, 0Fh, 00h,0FCh, 00h
-31E4:C4E3 46 01 C6 01 E0 01 db 46h, 01h,0C6h, 01h,0E0h, 01h
-31E4:C4E9 1C 01 47 01 FF FF db 1Ch, 01h, 47h, 01h,0FFh,0FFh
-31E4:C4EF 13 00 78 00 21 01 db 13h, 00h, 78h, 00h, 21h, 01h
-31E4:C4F5 9F 00 11 01 40 01 db 9Fh, 00h, 11h, 01h, 40h, 01h
-31E4:C4FB 48 01 FF FF 12 00 db 48h, 01h,0FFh,0FFh, 12h, 00h
-31E4:C501 4D 01 F0 00 4A 01 db 4Dh, 01h,0F0h, 00h, 4Ah, 01h
-31E4:C507 63 01 0A 01 14 01 db 63h, 01h, 0Ah, 01h, 14h, 01h
-31E4:C50D FF FF 1D 00 99 00 db 0FFh,0FFh, 1Dh, 00h, 99h, 00h
-31E4:C513 40 01 FF FF 00 00 db 40h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C519 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C51F 02 00 92 01 92 00 db 02h, 00h, 92h, 01h, 92h, 00h
-31E4:C525 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:C52B 00 00 00 01 0C 00 db 00h, 00h, 00h, 01h, 0Ch, 00h
-31E4:C531 00 00 00 50 00 7A db 00h, 00h, 00h, 50h, 00h, 7Ah
-31E4:C537 00 13 01 3C 01 FF db 00h, 13h, 01h, 3Ch, 01h,0FFh
-31E4:C53D FF 17 00 77 01 0B db 0FFh, 17h, 00h, 77h, 01h, 0Bh
-31E4:C543 01 3B 01 7E 01 DD db 01h, 3Bh, 01h, 7Eh, 01h,0DDh
-31E4:C549 00 EB 00 FF FF 11 db 00h,0EBh, 00h,0FFh,0FFh, 11h
-31E4:C54F 00 B1 00 42 01 C6 db 00h,0B1h, 00h, 42h, 01h,0C6h
-31E4:C555 01 E0 01 0F 01 47 db 01h,0E0h, 01h, 0Fh, 01h, 47h
-31E4:C55B 01 FF FF 18 00 AD db 01h,0FFh,0FFh, 18h, 00h,0ADh
-31E4:C561 00 0B 01 FF 00 19 db 00h, 0Bh, 01h,0FFh, 00h, 19h
-31E4:C567 01 DB 00 EF 00 FF db 01h,0DBh, 00h,0EFh, 00h,0FFh
-31E4:C56D FF 1C 40 01 01 10 db 0FFh, 1Ch, 40h, 01h, 01h, 10h
-31E4:C573 01 FF FF 00 00 20 db 01h,0FFh,0FFh, 00h, 00h, 20h
-31E4:C579 00 57 6D 3C 14 03 db 00h, 57h, 6Dh, 3Ch, 14h, 03h
-31E4:C57F 00 93 01 93 02 93 db 00h, 93h, 01h, 93h, 02h, 93h
-31E4:C585 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C58B 00 00 01 0E 00 00 db 00h, 00h, 01h, 0Eh, 00h, 00h
-31E4:C591 00 00 50 00 7A 00 db 00h, 00h, 50h, 00h, 7Ah, 00h
-31E4:C597 0C 01 2E 01 FF FF db 0Ch, 01h, 2Eh, 01h,0FFh,0FFh
-31E4:C59D 11 00 AD 01 3B 01 db 11h, 00h,0ADh, 01h, 3Bh, 01h
-31E4:C5A3 F7 00 36 01 E6 00 db 0F7h, 00h, 36h, 01h,0E6h, 00h
-31E4:C5A9 F8 00 FF FF 0E 00 db 0F8h, 00h,0FFh,0FFh, 0Eh, 00h
-31E4:C5AF B1 00 46 01 C6 01 db 0B1h, 00h, 46h, 01h,0C6h, 01h
-31E4:C5B5 E0 01 11 01 43 01 db 0E0h, 01h, 11h, 01h, 43h, 01h
-31E4:C5BB FF FF 14 00 7C 00 db 0FFh,0FFh, 14h, 00h, 7Ch, 00h
-31E4:C5C1 26 01 BC 00 FE 00 db 26h, 01h,0BCh, 00h,0FEh, 00h
-31E4:C5C7 40 01 48 01 FF FF db 40h, 01h, 48h, 01h,0FFh,0FFh
-31E4:C5CD 19 00 F2 00 16 01 db 19h, 00h,0F2h, 00h, 16h, 01h
-31E4:C5D3 6F 01 90 01 F7 00 db 6Fh, 01h, 90h, 01h,0F7h, 00h
-31E4:C5D9 04 01 FF FF 1E 00 db 04h, 01h,0FFh,0FFh, 1Eh, 00h
-31E4:C5DF C1 00 29 01 95 00 db 0C1h, 00h, 29h, 01h, 95h, 00h
-31E4:C5E5 BA 00 F5 00 FF 00 db 0BAh, 00h,0F5h, 00h,0FFh, 00h
-31E4:C5EB FF FF 23 00 4C 01 db 0FFh,0FFh, 23h, 00h, 4Ch, 01h
-31E4:C5F1 43 01 FF FF 00 00 db 43h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C5F7 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C5FD 03 00 94 01 94 02 db 03h, 00h, 94h, 01h, 94h, 02h
-31E4:C603 94 00 00 FF FF 00 db 94h, 00h, 00h,0FFh,0FFh, 00h
-31E4:C609 00 00 00 01 14 00 db 00h, 00h, 00h, 01h, 14h, 00h
-31E4:C60F 00 00 00 50 00 7A db 00h, 00h, 00h, 50h, 00h, 7Ah
-31E4:C615 00 0E 01 33 01 FF db 00h, 0Eh, 01h, 33h, 01h,0FFh
-31E4:C61B FF 13 00 AE 01 2C db 0FFh, 13h, 00h,0AEh, 01h, 2Ch
-31E4:C621 01 D1 00 ED 00 CA db 01h,0D1h, 00h,0EDh, 00h,0CAh
-31E4:C627 00 D4 00 FF FF 0D db 00h,0D4h, 00h,0FFh,0FFh, 0Dh
-31E4:C62D 00 BC 00 40 01 FE db 00h,0BCh, 00h, 40h, 01h,0FEh
-31E4:C633 00 82 01 43 01 47 db 00h, 82h, 01h, 43h, 01h, 47h
-31E4:C639 01 FF FF 0C 00 01 db 01h,0FFh,0FFh, 0Ch, 00h, 01h
-31E4:C63F 01 E0 00 40 01 5D db 01h,0E0h, 00h, 40h, 01h, 5Dh
-31E4:C645 01 E8 00 F3 00 FF db 01h,0E8h, 00h,0F3h, 00h,0FFh
-31E4:C64B FF 24 10 85 00 0E db 0FFh, 24h, 10h, 85h, 00h, 0Eh
-31E4:C651 01 FF FF 00 00 00 db 01h,0FFh,0FFh, 00h, 00h, 00h
-31E4:C657 20 57 6D 3C 14 02 db 20h, 57h, 6Dh, 3Ch, 14h, 02h
-31E4:C65D 10 88 11 88 00 00 db 10h, 88h, 11h, 88h, 00h, 00h
-31E4:C663 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C669 00 00 01 0D BA 00 db 00h, 00h, 01h, 0Dh,0BAh, 00h
-31E4:C66F 86 01 90 00 B2 00 db 86h, 01h, 90h, 00h,0B2h, 00h
-31E4:C675 FB 00 0D 01 FF FF db 0FBh, 00h, 0Dh, 01h,0FFh,0FFh
-31E4:C67B 16 40 F2 00 16 01 db 16h, 40h,0F2h, 00h, 16h, 01h
-31E4:C681 8C 01 AA 01 FB 00 db 8Ch, 01h,0AAh, 01h,0FBh, 00h
-31E4:C687 0D 01 FF FF 11 00 db 0Dh, 01h,0FFh,0FFh, 11h, 00h
-31E4:C68D 78 00 3E 01 FF FF db 78h, 00h, 3Eh, 01h,0FFh,0FFh
-31E4:C693 00 00 00 20 57 6D db 00h, 00h, 00h, 20h, 57h, 6Dh
-31E4:C699 3C 14 01 00 88 00 db 3Ch, 14h, 01h, 00h, 88h, 00h
-31E4:C69F 00 00 00 00 00 FF db 00h, 00h, 00h, 00h, 00h,0FFh
-31E4:C6A5 FF 00 00 00 00 01 db 0FFh, 00h, 00h, 00h, 00h, 01h
-31E4:C6AB 05 00 00 00 00 C7 db 05h, 00h, 00h, 00h, 00h,0C7h
-31E4:C6B1 00 6F 01 40 01 48 db 00h, 6Fh, 01h, 40h, 01h, 48h
-31E4:C6B7 01 FF FF 17 10 AD db 01h,0FFh,0FFh, 17h, 10h,0ADh
-31E4:C6BD 00 0B 01 ED 00 12 db 00h, 0Bh, 01h,0EDh, 00h, 12h
-31E4:C6C3 01 FA 00 09 01 FF db 01h,0FAh, 00h, 09h, 01h,0FFh
-31E4:C6C9 FF 15 10 AD 00 0B db 0FFh, 15h, 10h,0ADh, 00h, 0Bh
-31E4:C6CF 01 FF FF 00 00 00 db 01h,0FFh,0FFh, 00h, 00h, 00h
-31E4:C6D5 20 57 6D 3C 14 02 db 20h, 57h, 6Dh, 3Ch, 14h, 02h
-31E4:C6DB 10 88 11 88 00 00 db 10h, 88h, 11h, 88h, 00h, 00h
-31E4:C6E1 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C6E7 00 00 01 0D BA 00 db 00h, 00h, 01h, 0Dh,0BAh, 00h
-31E4:C6ED 86 01 90 00 B2 00 db 86h, 01h, 90h, 00h,0B2h, 00h
-31E4:C6F3 FB 00 0D 01 FF FF db 0FBh, 00h, 0Dh, 01h,0FFh,0FFh
-31E4:C6F9 16 80 13 01 42 01 db 16h, 80h, 13h, 01h, 42h, 01h
-31E4:C6FF 8C 01 AA 01 FB 00 db 8Ch, 01h,0AAh, 01h,0FBh, 00h
-31E4:C705 0D 01 FF FF 12 00 db 0Dh, 01h,0FFh,0FFh, 12h, 00h
-31E4:C70B 73 00 2E 01 FF FF db 73h, 00h, 2Eh, 01h,0FFh,0FFh
-31E4:C711 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:C717 3C 14 02 10 88 11 db 3Ch, 14h, 02h, 10h, 88h, 11h
-31E4:C71D 88 00 00 00 00 FF db 88h, 00h, 00h, 00h, 00h,0FFh
-31E4:C723 FF 00 00 00 00 01 db 0FFh, 00h, 00h, 00h, 00h, 01h
-31E4:C729 0D BA 00 86 01 90 db 0Dh,0BAh, 00h, 86h, 01h, 90h
-31E4:C72F 00 B2 00 FB 00 0D db 00h,0B2h, 00h,0FBh, 00h, 0Dh
-31E4:C735 01 FF FF 12 00 A8 db 01h,0FFh,0FFh, 12h, 00h,0A8h
-31E4:C73B 01 34 01 8C 01 AA db 01h, 34h, 01h, 8Ch, 01h,0AAh
-31E4:C741 01 FB 00 0D 01 FF db 01h,0FBh, 00h, 0Dh, 01h,0FFh
-31E4:C747 FF 19 80 13 01 42 db 0FFh, 19h, 80h, 13h, 01h, 42h
-31E4:C74D 01 FF FF 00 00 00 db 01h,0FFh,0FFh, 00h, 00h, 00h
-31E4:C753 20 57 6D 3C 14 01 db 20h, 57h, 6Dh, 3Ch, 14h, 01h
-31E4:C759 00 88 00 00 00 00 db 00h, 88h, 00h, 00h, 00h, 00h
-31E4:C75F 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C765 00 00 01 05 00 00 db 00h, 00h, 01h, 05h, 00h, 00h
-31E4:C76B 00 00 C7 00 6F 01 db 00h, 00h,0C7h, 00h, 6Fh, 01h
-31E4:C771 40 01 48 01 FF FF db 40h, 01h, 48h, 01h,0FFh,0FFh
-31E4:C777 18 20 77 01 0B 01 db 18h, 20h, 77h, 01h, 0Bh, 01h
-31E4:C77D ED 00 12 01 FA 00 db 0EDh, 00h, 12h, 01h,0FAh, 00h
-31E4:C783 09 01 FF FF 13 00 db 09h, 01h,0FFh,0FFh, 13h, 00h
-31E4:C789 D0 00 42 01 FF FF db 0D0h, 00h, 42h, 01h,0FFh,0FFh
-31E4:C78F 00 00 00 00 57 6D db 00h, 00h, 00h, 00h, 57h, 6Dh
-31E4:C795 3C 14 02 10 88 11 db 3Ch, 14h, 02h, 10h, 88h, 11h
-31E4:C79B 88 00 00 00 00 FF db 88h, 00h, 00h, 00h, 00h,0FFh
-31E4:C7A1 FF 00 00 00 00 01 db 0FFh, 00h, 00h, 00h, 00h, 01h
-31E4:C7A7 0D BA 00 86 01 90 db 0Dh,0BAh, 00h, 86h, 01h, 90h
-31E4:C7AD 00 B2 00 FB 00 0D db 00h,0B2h, 00h,0FBh, 00h, 0Dh
-31E4:C7B3 01 FF FF 0C 00 5A db 01h,0FFh,0FFh, 0Ch, 00h, 5Ah
-31E4:C7B9 01 34 01 8C 01 AA db 01h, 34h, 01h, 8Ch, 01h,0AAh
-31E4:C7BF 01 FB 00 0D 01 FF db 01h,0FBh, 00h, 0Dh, 01h,0FFh
-31E4:C7C5 FF 0B 80 13 01 42 db 0FFh, 0Bh, 80h, 13h, 01h, 42h
-31E4:C7CB 01 FF FF 00 00 20 db 01h,0FFh,0FFh, 00h, 00h, 20h
-31E4:C7D1 00 57 6D 3C 14 03 db 00h, 57h, 6Dh, 3Ch, 14h, 03h
-31E4:C7D7 00 9C 01 9C 02 9C db 00h, 9Ch, 01h, 9Ch, 02h, 9Ch
-31E4:C7DD 00 00 0F 2C 00 00 db 00h, 00h, 0Fh, 2Ch, 00h, 00h
-31E4:C7E3 00 00 02 10 BA 00 db 00h, 00h, 02h, 10h,0BAh, 00h
-31E4:C7E9 86 01 F9 00 21 01 db 86h, 01h,0F9h, 00h, 21h, 01h
-31E4:C7EF F8 00 0A 01 FF FF db 0F8h, 00h, 0Ah, 01h,0FFh,0FFh
-31E4:C7F5 12 10 19 01 F0 00 db 12h, 10h, 19h, 01h,0F0h, 00h
-31E4:C7FB FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:C801 57 6D 3C 14 03 00 db 57h, 6Dh, 3Ch, 14h, 03h, 00h
-31E4:C807 9D 01 9D 02 9D 00 db 9Dh, 01h, 9Dh, 02h, 9Dh, 00h
-31E4:C80D 00 08 2C 00 00 00 db 00h, 08h, 2Ch, 00h, 00h, 00h
-31E4:C813 00 02 11 BA 00 86 db 00h, 02h, 11h,0BAh, 00h, 86h
-31E4:C819 01 99 00 B7 00 42 db 01h, 99h, 00h,0B7h, 00h, 42h
-31E4:C81F 01 54 01 FF FF 11 db 01h, 54h, 01h,0FFh,0FFh, 11h
-31E4:C825 00 4D 01 20 01 FF db 00h, 4Dh, 01h, 20h, 01h,0FFh
-31E4:C82B FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:C831 6D 3C 14 02 00 9E db 6Dh, 3Ch, 14h, 02h, 00h, 9Eh
-31E4:C837 01 9E 00 00 00 00 db 01h, 9Eh, 00h, 00h, 00h, 00h
-31E4:C83D FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:C843 02 13 00 00 00 00 db 02h, 13h, 00h, 00h, 00h, 00h
-31E4:C849 B4 00 30 01 32 01 db 0B4h, 00h, 30h, 01h, 32h, 01h
-31E4:C84F 40 01 FF FF 13 00 db 40h, 01h,0FFh,0FFh, 13h, 00h
-31E4:C855 72 01 10 01 FF FF db 72h, 01h, 10h, 01h,0FFh,0FFh
-31E4:C85B 00 00 20 00 57 6D db 00h, 00h, 20h, 00h, 57h, 6Dh
-31E4:C861 3C 14 02 00 9F 01 db 3Ch, 14h, 02h, 00h, 9Fh, 01h
-31E4:C867 9F 00 00 00 00 FF db 9Fh, 00h, 00h, 00h, 00h,0FFh
-31E4:C86D FF 00 00 00 00 02 db 0FFh, 00h, 00h, 00h, 00h, 02h
-31E4:C873 12 00 00 00 00 38 db 12h, 00h, 00h, 00h, 00h, 38h
-31E4:C879 01 86 01 3C 01 40 db 01h, 86h, 01h, 3Ch, 01h, 40h
-31E4:C87F 01 FF FF 0E 00 F7 db 01h,0FFh,0FFh, 0Eh, 00h,0F7h
-31E4:C885 00 02 01 FF FF 00 db 00h, 02h, 01h,0FFh,0FFh, 00h
-31E4:C88B 00 20 00 57 6D 3C db 00h, 20h, 00h, 57h, 6Dh, 3Ch
-31E4:C891 14 02 00 A4 01 A4 db 14h, 02h, 00h,0A4h, 01h,0A4h
-31E4:C897 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-31E4:C89D 00 00 00 00 02 12 db 00h, 00h, 00h, 00h, 02h, 12h
-31E4:C8A3 00 00 00 00 80 00 db 00h, 00h, 00h, 00h, 80h, 00h
-31E4:C8A9 8C 00 FB 00 09 01 db 8Ch, 00h,0FBh, 00h, 09h, 01h
-31E4:C8AF FF FF 14 40 44 01 db 0FFh,0FFh, 14h, 40h, 44h, 01h
-31E4:C8B5 FB 00 FF FF 00 00 db 0FBh, 00h,0FFh,0FFh, 00h, 00h
-31E4:C8BB 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C8C1 02 00 A0 01 A0 00 db 02h, 00h,0A0h, 01h,0A0h, 00h
-31E4:C8C7 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:C8CD 00 00 00 02 12 00 db 00h, 00h, 00h, 02h, 12h, 00h
-31E4:C8D3 00 00 00 AA 00 C6 db 00h, 00h, 00h,0AAh, 00h,0C6h
-31E4:C8D9 00 44 01 5E 01 FF db 00h, 44h, 01h, 5Eh, 01h,0FFh
-31E4:C8DF FF 0C 00 A1 00 EA db 0FFh, 0Ch, 00h,0A1h, 00h,0EAh
-31E4:C8E5 00 FF FF 00 00 20 db 00h,0FFh,0FFh, 00h, 00h, 20h
-31E4:C8EB 00 57 6D 3C 14 02 db 00h, 57h, 6Dh, 3Ch, 14h, 02h
-31E4:C8F1 00 A2 01 A2 00 00 db 00h,0A2h, 01h,0A2h, 00h, 00h
-31E4:C8F7 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-31E4:C8FD 00 00 02 15 00 00 db 00h, 00h, 02h, 15h, 00h, 00h
-31E4:C903 00 00 C1 00 E0 00 db 00h, 00h,0C1h, 00h,0E0h, 00h
-31E4:C909 30 01 3C 01 FF FF db 30h, 01h, 3Ch, 01h,0FFh,0FFh
-31E4:C90F 0A 00 03 01 15 01 db 0Ah, 00h, 03h, 01h, 15h, 01h
-31E4:C915 FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:C91B 57 6D 3C 14 02 00 db 57h, 6Dh, 3Ch, 14h, 02h, 00h
-31E4:C921 A3 01 A3 02 A3 00 db 0A3h, 01h,0A3h, 02h,0A3h, 00h
-31E4:C927 00 FF FF 00 00 00 db 00h,0FFh,0FFh, 00h, 00h, 00h
-31E4:C92D 00 02 15 00 00 00 db 00h, 02h, 15h, 00h, 00h, 00h
-31E4:C933 00 41 01 70 01 41 db 00h, 41h, 01h, 70h, 01h, 41h
-31E4:C939 01 54 01 FF FF 13 db 01h, 54h, 01h,0FFh,0FFh, 13h
-31E4:C93F 00 9C 00 0A 01 FF db 00h, 9Ch, 00h, 0Ah, 01h,0FFh
-31E4:C945 FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:C94B 6D 3C 14 02 00 66 db 6Dh, 3Ch, 14h, 02h, 00h, 66h
-31E4:C951 01 66 00 00 00 00 db 01h, 66h, 00h, 00h, 00h, 00h
-31E4:C957 91 0E 00 00 00 00 db 91h, 0Eh, 00h, 00h, 00h, 00h
-31E4:C95D 03 12 00 00 00 00 db 03h, 12h, 00h, 00h, 00h, 00h
-31E4:C963 80 00 9B 00 FA 00 db 80h, 00h, 9Bh, 00h,0FAh, 00h
-31E4:C969 18 01 FF FF 27 00 db 18h, 01h,0FFh,0FFh, 27h, 00h
-31E4:C96F 86 01 13 01 2C 01 db 86h, 01h, 13h, 01h, 2Ch, 01h
-31E4:C975 5E 01 42 01 4A 01 db 5Eh, 01h, 42h, 01h, 4Ah, 01h
-31E4:C97B F2 0E FF FF 00 00 db 0F2h, 0Eh,0FFh,0FFh, 00h, 00h
-31E4:C981 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:C987 02 00 67 01 67 00 db 02h, 00h, 67h, 01h, 67h, 00h
-31E4:C98D 00 00 00 05 02 00 db 00h, 00h, 00h, 05h, 02h, 00h
-31E4:C993 00 00 00 03 12 00 db 00h, 00h, 00h, 03h, 12h, 00h
-31E4:C999 00 00 00 A2 01 C7 db 00h, 00h, 00h,0A2h, 01h,0C7h
-31E4:C99F 01 04 01 18 01 FF db 01h, 04h, 01h, 18h, 01h,0FFh
-31E4:C9A5 FF 26 00 9F 00 13 db 0FFh, 26h, 00h, 9Fh, 00h, 13h
-31E4:C9AB 01 80 00 9B 00 FA db 01h, 80h, 00h, 9Bh, 00h,0FAh
-31E4:C9B1 00 18 01 FF FF 28 db 00h, 18h, 01h,0FFh,0FFh, 28h
-31E4:C9B7 00 86 01 13 01 FF db 00h, 86h, 01h, 13h, 01h,0FFh
-31E4:C9BD FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:C9C3 6D 3C 14 02 00 68 db 6Dh, 3Ch, 14h, 02h, 00h, 68h
-31E4:C9C9 01 68 00 00 00 00 db 01h, 68h, 00h, 00h, 00h, 00h
-31E4:C9CF FF FF 00 00 00 00 db 0FFh,0FFh, 00h, 00h, 00h, 00h
-31E4:C9D5 03 12 00 00 00 00 db 03h, 12h, 00h, 00h, 00h, 00h
-31E4:C9DB A2 01 C7 01 04 01 db 0A2h, 01h,0C7h, 01h, 04h, 01h
-31E4:C9E1 18 01 FF FF 27 00 db 18h, 01h,0FFh,0FFh, 27h, 00h
-31E4:C9E7 9F 00 13 01 80 00 db 9Fh, 00h, 13h, 01h, 80h, 00h
-31E4:C9ED 9B 00 FA 00 18 01 db 9Bh, 00h,0FAh, 00h, 18h, 01h
-31E4:C9F3 FF FF 05 00 86 01 db 0FFh,0FFh, 05h, 00h, 86h, 01h
-31E4:C9F9 13 01 FF FF 00 00 db 13h, 01h,0FFh,0FFh, 00h, 00h
-31E4:C9FF 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:CA05 02 00 46 01 46 00 db 02h, 00h, 46h, 01h, 46h, 00h
-31E4:CA0B 00 00 00 FF FF 00 db 00h, 00h, 00h,0FFh,0FFh, 00h
-31E4:CA11 00 00 00 03 12 00 db 00h, 00h, 00h, 03h, 12h, 00h
-31E4:CA17 00 00 00 A2 01 C7 db 00h, 00h, 00h,0A2h, 01h,0C7h
-31E4:CA1D 01 04 01 18 01 FF db 01h, 04h, 01h, 18h, 01h,0FFh
-31E4:CA23 FF 28 00 9F 00 13 db 0FFh, 28h, 00h, 9Fh, 00h, 13h
-31E4:CA29 01 29 01 51 01 E6 db 01h, 29h, 01h, 51h, 01h,0E6h
-31E4:CA2F 00 F7 00 FF FF 06 db 00h,0F7h, 00h,0FFh,0FFh, 06h
-31E4:CA35 20 96 01 1B 01 FF db 20h, 96h, 01h, 1Bh, 01h,0FFh
-31E4:CA3B FF 00 00 20 00 57 db 0FFh, 00h, 00h, 20h, 00h, 57h
-31E4:CA41 6D 3C 14 02 00 45 db 6Dh, 3Ch, 14h, 02h, 00h, 45h
-31E4:CA47 01 45 00 00 00 00 db 01h, 45h, 00h, 00h, 00h, 00h
-31E4:CA4D B1 01 FF FF 0F 00 db 0B1h, 01h,0FFh,0FFh, 0Fh, 00h
-31E4:CA53 03 12 00 00 00 00 db 03h, 12h, 00h, 00h, 00h, 00h
-31E4:CA59 A2 01 C7 01 04 01 db 0A2h, 01h,0C7h, 01h, 04h, 01h
-31E4:CA5F 18 01 FF FF 05 40 db 18h, 01h,0FFh,0FFh, 05h, 40h
-31E4:CA65 32 01 04 01 80 00 db 32h, 01h, 04h, 01h, 80h, 00h
-31E4:CA6B 9B 00 FA 00 18 01 db 9Bh, 00h,0FAh, 00h, 18h, 01h
-31E4:CA71 FF FF 29 00 86 01 db 0FFh,0FFh, 29h, 00h, 86h, 01h
-31E4:CA77 13 01 FF FF 00 00 db 13h, 01h,0FFh,0FFh, 00h, 00h
-31E4:CA7D 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:CA83 02 00 69 01 69 00 db 02h, 00h, 69h, 01h, 69h, 00h
-31E4:CA89 00 00 00 FF FF FF db 00h, 00h, 00h,0FFh,0FFh,0FFh
-31E4:CA8F FF 0F 00 03 12 00 db 0FFh, 0Fh, 00h, 03h, 12h, 00h
-31E4:CA95 00 00 00 A2 01 C7 db 00h, 00h, 00h,0A2h, 01h,0C7h
-31E4:CA9B 01 04 01 18 01 FF db 01h, 04h, 01h, 18h, 01h,0FFh
-31E4:CAA1 FF 06 00 8F 00 1B db 0FFh, 06h, 00h, 8Fh, 00h, 1Bh
-31E4:CAA7 01 FF FF 00 00 20 db 01h,0FFh,0FFh, 00h, 00h, 20h
-31E4:CAAD 00 57 6D 3C 14 03 db 00h, 57h, 6Dh, 3Ch, 14h, 03h
-31E4:CAB3 00 EA 01 EA 02 EA db 00h,0EAh, 01h,0EAh, 02h,0EAh
-31E4:CAB9 00 00 51 00 FF FF db 00h, 00h, 51h, 00h,0FFh,0FFh
-31E4:CABF 0F 00 04 12 00 00 db 0Fh, 00h, 04h, 12h, 00h, 00h
-31E4:CAC5 00 00 B4 01 C7 01 db 00h, 00h,0B4h, 01h,0C7h, 01h
-31E4:CACB 20 01 34 01 FF FF db 20h, 01h, 34h, 01h,0FFh,0FFh
-31E4:CAD1 2B 00 7F 00 1D 01 db 2Bh, 00h, 7Fh, 00h, 1Dh, 01h
-31E4:CAD7 FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:CADD 57 6D 3C 14 02 00 db 57h, 6Dh, 3Ch, 14h, 02h, 00h
-31E4:CAE3 EB 01 EB 00 00 00 db 0EBh, 01h,0EBh, 00h, 00h, 00h
-31E4:CAE9 00 FF FF FF FF 0F db 00h,0FFh,0FFh,0FFh,0FFh, 0Fh
-31E4:CAEF 00 04 12 00 00 00 db 00h, 04h, 12h, 00h, 00h, 00h
-31E4:CAF5 00 7F 00 8D 00 08 db 00h, 7Fh, 00h, 8Dh, 00h, 08h
-31E4:CAFB 01 34 0B FF FF 2A db 01h, 34h, 0Bh,0FFh,0FFh, 2Ah
-31E4:CB01 00 A4 01 32 01 B7 db 00h,0A4h, 01h, 32h, 01h,0B7h
-31E4:CB07 01 C7 01 09 01 1E db 01h,0C7h, 01h, 09h, 01h, 1Eh
-31E4:CB0D 01 FF FF 2C 80 0A db 01h,0FFh,0FFh, 2Ch, 80h, 0Ah
-31E4:CB13 01 40 01 FF FF 00 db 01h, 40h, 01h,0FFh,0FFh, 00h
-31E4:CB19 00 00 00 57 6D 3C db 00h, 00h, 00h, 57h, 6Dh, 3Ch
-31E4:CB1F 14 03 00 EC 01 EC db 14h, 03h, 00h,0ECh, 01h,0ECh
-31E4:CB25 02 EC 00 00 FF FF db 02h,0ECh, 00h, 00h,0FFh,0FFh
-31E4:CB2B FF FF 0F 00 04 12 db 0FFh,0FFh, 0Fh, 00h, 04h, 12h
-31E4:CB31 00 00 00 00 09 01 db 00h, 00h, 00h, 00h, 09h, 01h
-31E4:CB37 2C 01 44 01 4A 01 db 2Ch, 01h, 44h, 01h, 4Ah, 01h
-31E4:CB3D FF FF 2B 20 A4 01 db 0FFh,0FFh, 2Bh, 20h,0A4h, 01h
-31E4:CB43 1A 01 D0 00 F0 00 db 1Ah, 01h,0D0h, 00h,0F0h, 00h
-31E4:CB49 EE 00 FB 00 FF FF db 0EEh, 00h,0FBh, 00h,0FFh,0FFh
-31E4:CB4F 2D 10 A0 00 C8 00 db 2Dh, 10h,0A0h, 00h,0C8h, 00h
-31E4:CB55 6A 01 88 01 F0 00 db 6Ah, 01h, 88h, 01h,0F0h, 00h
-31E4:CB5B F9 00 FF FF 2D 10 db 0F9h, 00h,0FFh,0FFh, 2Dh, 10h
-31E4:CB61 87 00 3C 01 FF FF db 87h, 00h, 3Ch, 01h,0FFh,0FFh
-31E4:CB67 00 00 20 00 57 6D db 00h, 00h, 20h, 00h, 57h, 6Dh
-31E4:CB6D 3C 14 03 00 ED 01 db 3Ch, 14h, 03h, 00h,0EDh, 01h
-31E4:CB73 ED 02 ED 03 ED FF db 0EDh, 02h,0EDh, 03h,0EDh,0FFh
-31E4:CB79 FF FF FF 0F 00 04 db 0FFh,0FFh,0FFh, 0Fh, 00h, 04h
-31E4:CB7F 12 00 00 00 00 9A db 12h, 00h, 00h, 00h, 00h, 9Ah
-31E4:CB85 00 AE 00 C0 00 CC db 00h,0AEh, 00h,0C0h, 00h,0CCh
-31E4:CB8B 00 FF FF 2C 40 D3 db 00h,0FFh,0FFh, 2Ch, 40h,0D3h
-31E4:CB91 00 02 01 BF 01 F4 db 00h, 02h, 01h,0BFh, 01h,0F4h
-31E4:CB97 01 C0 00 CC 00 FF db 01h,0C0h, 00h,0CCh, 00h,0FFh
-31E4:CB9D FF 2E 00 71 00 C8 db 0FFh, 2Eh, 00h, 71h, 00h,0C8h
-31E4:CBA3 00 80 00 8B 00 2C db 00h, 80h, 00h, 8Bh, 00h, 2Ch
-31E4:CBA9 01 5E 01 FF FF 2C db 01h, 5Eh, 01h,0FFh,0FFh, 2Ch
-31E4:CBAF 40 6E 01 07 01 BF db 40h, 6Eh, 01h, 07h, 01h,0BFh
-31E4:CBB5 01 F4 01 11 01 36 db 01h,0F4h, 01h, 11h, 01h, 36h
-31E4:CBBB 01 FF FF 2E 00 71 db 01h,0FFh,0FFh, 2Eh, 00h, 71h
-31E4:CBC1 00 2F 01 CA 00 F0 db 00h, 2Fh, 01h,0CAh, 00h,0F0h
-31E4:CBC7 00 22 01 47 01 15 db 00h, 22h, 01h, 47h, 01h, 15h
-31E4:CBCD 1E FF FF 00 00 00 db 1Eh,0FFh,0FFh, 00h, 00h, 00h
-31E4:CBD3 00 57 6D 3C 14 03 db 00h, 57h, 6Dh, 3Ch, 14h, 03h
-31E4:CBD9 00 EE 01 EE 02 EE db 00h,0EEh, 01h,0EEh, 02h,0EEh
-31E4:CBDF 03 EE D3 04 FF FF db 03h,0EEh,0D3h, 04h,0FFh,0FFh
-31E4:CBE5 0F 00 04 12 00 00 db 0Fh, 00h, 04h, 12h, 00h, 00h
-31E4:CBEB 00 00 7F 00 84 00 db 00h, 00h, 7Fh, 00h, 84h, 00h
-31E4:CBF1 C0 00 CC 00 FF FF db 0C0h, 00h,0CCh, 00h,0FFh,0FFh
-31E4:CBF7 2D 00 AA 01 C8 00 db 2Dh, 00h,0AAh, 01h,0C8h, 00h
-31E4:CBFD 7F 00 84 00 11 01 db 7Fh, 00h, 84h, 00h, 11h, 01h
-31E4:CC03 36 01 FF FF 2D 00 db 36h, 01h,0FFh,0FFh, 2Dh, 00h
-31E4:CC09 AA 01 2F 01 A1 01 db 0AAh, 01h, 2Fh, 01h,0A1h, 01h
-31E4:CC0F B8 01 2F 01 40 01 db 0B8h, 01h, 2Fh, 01h, 40h, 01h
-31E4:CC15 FF FF 30 00 AA 00 db 0FFh,0FFh, 30h, 00h,0AAh, 00h
-31E4:CC1B 12 01 00 01 22 01 db 12h, 01h, 00h, 01h, 22h, 01h
-31E4:CC21 A0 00 BC 00 90 05 db 0A0h, 00h,0BCh, 00h, 90h, 05h
-31E4:CC27 FF FF 00 00 20 00 db 0FFh,0FFh, 00h, 00h, 20h, 00h
-31E4:CC2D 57 6D 3C 14 02 00 db 57h, 6Dh, 3Ch, 14h, 02h, 00h
-31E4:CC33 F0 01 F0 00 00 00 db 0F0h, 01h,0F0h, 00h, 00h, 00h
-31E4:CC39 00 FF FF 00 00 00 db 00h,0FFh,0FFh, 00h, 00h, 00h
-31E4:CC3F 00 01 12 00 00 00 db 00h, 01h, 12h, 00h, 00h, 00h
-31E4:CC45 00 80 00 8C 00 31 db 00h, 80h, 00h, 8Ch, 00h, 31h
-31E4:CC4B 01 36 01 FF FF 2E db 01h, 36h, 01h,0FFh,0FFh, 2Eh
-31E4:CC51 40 07 01 CF 00 B6 db 40h, 07h, 01h,0CFh, 00h,0B6h
-31E4:CC57 01 C2 01 31 01 4A db 01h,0C2h, 01h, 31h, 01h, 4Ah
-31E4:CC5D 01 FF FF 2E 40 07 db 01h,0FFh,0FFh, 2Eh, 40h, 07h
-31E4:CC63 01 CF 00 FF FF 00 db 01h,0CFh, 00h,0FFh,0FFh, 00h
-31E4:CC69 00 20 00 57 6D 3C db 00h, 20h, 00h, 57h, 6Dh, 3Ch
-31E4:CC6F 14 02 00 EF 01 EF db 14h, 02h, 00h,0EFh, 01h,0EFh
-31E4:CC75 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-31E4:CC7B 00 00 00 00 04 12 db 00h, 00h, 00h, 00h, 04h, 12h
-31E4:CC81 00 00 00 00 A6 00 db 00h, 00h, 00h, 00h,0A6h, 00h
-31E4:CC87 B5 00 07 01 10 01 db 0B5h, 00h, 07h, 01h, 10h, 01h
-31E4:CC8D FF FF 2E 00 83 01 db 0FFh,0FFh, 2Eh, 00h, 83h, 01h
-31E4:CC93 38 01 FF FF 00 00 db 38h, 01h,0FFh,0FFh, 00h, 00h
-31E4:CC99 20 00 57 6D 3C 14 db 20h, 00h, 57h, 6Dh, 3Ch, 14h
-31E4:CC9F 02 00 F2 01 F2 00 db 02h, 00h,0F2h, 01h,0F2h, 00h
-31E4:CCA5 00 00 00 DE 01 FF db 00h, 00h, 00h,0DEh, 01h,0FFh
-31E4:CCAB FF 0F 00 01 12 00 db 0FFh, 0Fh, 00h, 01h, 12h, 00h
-31E4:CCB1 00 00 00 80 00 8C db 00h, 00h, 00h, 80h, 00h, 8Ch
-31E4:CCB7 00 31 01 4A 01 AD db 00h, 31h, 01h, 4Ah, 01h,0ADh
-31E4:CCBD 01 FF FF 00 00 00 db 01h,0FFh,0FFh, 00h, 00h, 00h
-31E4:CCC3 00 57 6D 00 00 01 db 00h, 57h, 6Dh, 00h, 00h, 01h
-31E4:CCC9 00 78 00 00 00 00 db 00h, 78h, 00h, 00h, 00h, 00h
-31E4:CCCF 00 00 FF FF FF FF db 00h, 00h,0FFh,0FFh,0FFh,0FFh
-31E4:CCD5 0F 00 01 12 00 00 db 0Fh, 00h, 01h, 12h, 00h, 00h
-31E4:CCDB 00 00 FF FF 00 db 00h, 00h,0FFh,0FFh, 00h
-
-31E4:CCE0 0014[00] talk_character_buffer db 20 dup (0)
-31E4:CCF4 012C[00] talk_text_buffer db 300 dup (0)
-
-31E4:CE20 05 game_flags db 5
-31E4:CE21 00 00 db 0, 0
-31E4:CE23 000D[00] db 13 dup (0)
-31E4:CE30 loc_2362: ; xref 31E4:CEA5
-
-31E4:CE30 11 27 room_exit_joins_table dw 2711h ; Res Id for Cell Door #1
-31E4:CE32 03 03 dw 0303h ; Result 1
-31E4:CE34 0A 09 dw 090Ah
-31E4:CE36 12 27 dw 2712h ; Res Id for Cell Door #2
-31E4:CE38 03 04 dw 0403h ; Result 2
-
-31E4:CE3A 0A 09 or cl,[bx+di]
-31E4:CE3C 01 38 add [bx+si],di
-31E4:CE3E 87 70 87 xchg [bx+si-79h],si
-31E4:CE41 14 27 adc al,27h ; '''
-31E4:CE43 03 03 add ax,[bp+di]
-31E4:CE45 0D 000D or ax,0Dh
-31E4:CE48 00 00 add [bx+si],al
-31E4:CE4A 00 0A add [bp+si],cl
-31E4:CE4C 09 01 or [bx+di],ax
-31E4:CE4E AE scasb ; Scan es:[di] for al
-31E4:CE4F 87 AE 1587 xchg [bp+1587h],bp
-31E4:CE53 27 daa ; Decimal adjust
-31E4:CE54 03 04 add ax,[si]
-31E4:CE56 0A 17 or dl,[bx]
-31E4:CE58 16 push ss
-31E4:CE59 27 daa ; Decimal adjust
-31E4:CE5A 03 05 add ax,[di]
-31E4:CE5C 0A 17 or dl,[bx]
-31E4:CE5E 01 E6 add si,sp
-31E4:CE60 87 1B xchg [bp+di],bx
-31E4:CE62 88 17 mov [bx],dl
-31E4:CE64 27 daa ; Decimal adjust
-31E4:CE65 03 04 add ax,[si]
-31E4:CE67 0A 17 or dl,[bx]
-31E4:CE69 18 27 sbb [bx],ah
-31E4:CE6B 03 05 add ax,[di]
-31E4:CE6D 0A 17 or dl,[bx]
-31E4:CE6F 01 AE D888 add [bp-2778h],bp
-31E4:CE73 88 19 mov [bx+di],bl
-31E4:CE75 27 daa ; Decimal adjust
-31E4:CE76 03 04 add ax,[si]
-31E4:CE78 0A 17 or dl,[bx]
-31E4:CE7A 1A 27 sbb ah,[bx]
-31E4:CE7C 03 05 add ax,[di]
-31E4:CE7E 0A 17 or dl,[bx]
-31E4:CE80 01 10 add [bx+si],dx
-31E4:CE82 89 69 8A mov [bx+di-76h],bp
-31E4:CE85 1E push ds
-31E4:CE86 27 daa ; Decimal adjust
-31E4:CE87 03 04 add ax,[si]
-31E4:CE89 0A 17 or dl,[bx]
-31E4:CE8B 29 27 sub [bx],sp
-31E4:CE8D 03 04 add ax,[si]
-31E4:CE8F 0A 17 or dl,[bx]
-31E4:CE91 01 A4 CE8A add ds:data_59e[si],sp ; (0000:CE8A=301Eh)
-31E4:CE95 8A 1F mov bl,[bx]
-31E4:CE97 27 daa ; Decimal adjust
-31E4:CE98 03 05 add ax,[di]
-31E4:CE9A 0A 17 or dl,[bx]
-31E4:CE9C 20 27 and [bx],ah
-31E4:CE9E 03 05 add ax,[di]
-31E4:CEA0 0A 17 or dl,[bx]
-31E4:CEA2 01 4B 89 add [bp+di-77h],cx
-31E4:CEA5 75 89 jnz loc_2362 ; Jump if not zero
-31E4:CEA7 21 27 and [bx],sp
-31E4:CEA9 03 05 add ax,[di]
-31E4:CEAB 0A 17 or dl,[bx]
-31E4:CEAD 22 27 and ah,[bx]
-31E4:CEAF 03 05 add ax,[di]
-31E4:CEB1 0A 17 or dl,[bx]
-31E4:CEB3 01 B0 DA89 add ds:data_60e[bx+si],si ; (0000:DA89=52F9h)
-31E4:CEB7 89 25 mov [di],sp
-31E4:CEB9 27 daa ; Decimal adjust
-31E4:CEBA 03 05 add ax,[di]
-31E4:CEBC 0A 17 or dl,[bx]
-31E4:CEBE 26 27 03 04 0A 17 db 26h, 27h, 03h, 04h, 0Ah, 17h
-31E4:CEC4 01 15 8A 3F 8A 2A db 01h, 15h, 8Ah, 3Fh, 8Ah, 2Ah
-31E4:CECA 27 03 05 00 00 2B db 27h, 03h, 05h, 00h, 00h, 2Bh
-31E4:CED0 27 03 05 00 00 01 db 27h, 03h, 05h, 00h, 00h, 01h
-31E4:CED6 09 8B 33 8B 2C 27 db 09h, 8Bh, 33h, 8Bh, 2Ch, 27h
-31E4:CEDC 03 05 00 00 2D 27 db 03h, 05h, 00h, 00h, 2Dh, 27h
-31E4:CEE2 03 05 00 00 01 5D db 03h, 05h, 00h, 00h, 01h, 5Dh
-31E4:CEE8 8B 87 8B 2E 27 03 db 8Bh, 87h, 8Bh, 2Eh, 27h, 03h
-31E4:CEEE 05 00 00 2F 27 03 db 05h, 00h, 00h, 2Fh, 27h, 03h
-31E4:CEF4 05 00 00 01 B1 8B db 05h, 00h, 00h, 01h,0B1h, 8Bh
-31E4:CEFA DB 8B 00 db 0DBh, 8Bh, 00h
-31E4:CEFD 0005[00] db 5 dup (0)
-
-31E4:CF02 0000 talk_response_ptr dw 0
-31E4:CF04 0000 talk_next_talk_offset dw 0
-31E4:CF06 0000 talk_to_hotspot_ptr dw 0
-31E4:CF08 0000 talk_state dw 0
-31E4:CF09 00 talk_line_num db 0
-31E4:CF0A 00 talk_selected_line db 0
-31E4:CF0B 00 talk_cf0b db 0
-31E4:CF0C 0008 talk_entry_list db 8 dup (0)
-
-31E4:CF14 3A CF 00 80 24 04 db 3Ah,0CFh, 00h, 80h, 24h, 04h
-31E4:CF1A 00 00 00 80 FB 00 db 00h, 00h, 00h, 80h,0FBh, 00h
-31E4:CF20 01 00 00 80 F9 00 db 01h, 00h, 00h, 80h,0F9h, 00h
-31E4:CF26 02 00 00 80 FC 00 db 02h, 00h, 00h, 80h,0FCh, 00h
-31E4:CF2C 03 00 00 80 FE 00 db 03h, 00h, 00h, 80h,0FEh, 00h
-31E4:CF32 04 00 00 80 24 04 db 04h, 00h, 00h, 80h, 24h, 04h
-31E4:CF38 05 00 00 00 FA 00 db 05h, 00h, 00h, 00h,0FAh, 00h
-31E4:CF3E 01 00 0B 20 00 01 db 01h, 00h, 0Bh, 20h, 00h, 01h
-31E4:CF44 02 00 00 00 FF 00 db 02h, 00h, 00h, 00h,0FFh, 00h
-31E4:CF4A 03 00 00 00 01 01 db 03h, 00h, 00h, 00h, 01h, 01h
-31E4:CF50 04 00 00 00 94 00 db 04h, 00h, 00h, 00h, 94h, 00h
-31E4:CF56 05 00 E9 1F 24 04 db 05h, 00h,0E9h, 1Fh, 24h, 04h
-31E4:CF5C FF FF 78 CF 00 80 db 0FFh,0FFh, 78h,0CFh, 00h, 80h
-31E4:CF62 24 04 00 00 00 80 db 24h, 04h, 00h, 00h, 00h, 80h
-31E4:CF68 78 0A 01 00 00 80 db 78h, 0Ah, 01h, 00h, 00h, 80h
-31E4:CF6E 24 04 02 00 00 80 db 24h, 04h, 02h, 00h, 00h, 80h
-31E4:CF74 24 04 03 00 00 00 db 24h, 04h, 03h, 00h, 00h, 00h
-31E4:CF7A 77 0A 01 00 00 00 db 77h, 0Ah, 01h, 00h, 00h, 00h
-31E4:CF80 40 0B 02 00 00 00 db 40h, 0Bh, 02h, 00h, 00h, 00h
-31E4:CF86 41 0B 03 00 7E 29 db 41h, 0Bh, 03h, 00h, 7Eh, 29h
-31E4:CF8C 24 04 FF FF 9E CF db 24h, 04h,0FFh,0FFh, 9Eh,0CFh
-31E4:CF92 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:CF98 00 80 24 04 01 00 db 00h, 80h, 24h, 04h, 01h, 00h
-31E4:CF9E 00 00 24 04 01 00 db 00h, 00h, 24h, 04h, 01h, 00h
-31E4:CFA4 60 2A 24 04 FF FF db 60h, 2Ah, 24h, 04h,0FFh,0FFh
-31E4:CFAA BE CF 00 80 24 04 db 0BEh,0CFh, 00h, 80h, 24h, 04h
-31E4:CFB0 00 00 00 80 24 04 db 00h, 00h, 00h, 80h, 24h, 04h
-31E4:CFB6 01 00 00 80 24 04 db 01h, 00h, 00h, 80h, 24h, 04h
-31E4:CFBC 02 00 00 00 BD 0B db 02h, 00h, 00h, 00h,0BDh, 0Bh
-31E4:CFC2 01 00 00 00 BE 0B db 01h, 00h, 00h, 00h,0BEh, 0Bh
-31E4:CFC8 02 00 00 00 BF 0B db 02h, 00h, 00h, 00h,0BFh, 0Bh
-31E4:CFCE FF FF E4 CF 00 80 db 0FFh,0FFh,0E4h,0CFh, 00h, 80h
-31E4:CFD4 24 04 00 00 00 80 db 24h, 04h, 00h, 00h, 00h, 80h
-31E4:CFDA EC 0B 01 00 00 80 db 0ECh, 0Bh, 01h, 00h, 00h, 80h
-31E4:CFE0 EE 0B 02 00 00 00 db 0EEh, 0Bh, 02h, 00h, 00h, 00h
-31E4:CFE6 EB 0B 01 00 00 00 db 0EBh, 0Bh, 01h, 00h, 00h, 00h
-31E4:CFEC ED 0B 02 00 00 00 db 0EDh, 0Bh, 02h, 00h, 00h, 00h
-31E4:CFF2 EF 0B FF FF 04 D0 db 0EFh, 0Bh,0FFh,0FFh, 04h,0D0h
-31E4:CFF8 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:CFFE 00 80 24 04 01 00 db 00h, 80h, 24h, 04h, 01h, 00h
-31E4:D004 00 00 17 0B 01 00 db 00h, 00h, 17h, 0Bh, 01h, 00h
-31E4:D00A 06 19 24 04 FF FF db 06h, 19h, 24h, 04h,0FFh,0FFh
-31E4:D010 18 D0 00 80 D5 07 db 18h,0D0h, 00h, 80h,0D5h, 07h
-31E4:D016 00 00 73 2A 10 0C db 00h, 00h, 73h, 2Ah, 10h, 0Ch
-31E4:D01C FF FF 26 D0 00 80 db 0FFh,0FFh, 26h,0D0h, 00h, 80h
-31E4:D022 F9 07 00 00 00 00 db 0F9h, 07h, 00h, 00h, 00h, 00h
-31E4:D028 13 0C FF FF 46 D0 db 13h, 0Ch,0FFh,0FFh, 46h,0D0h
-31E4:D02E 00 80 FB 07 00 00 db 00h, 80h,0FBh, 07h, 00h, 00h
-31E4:D034 00 80 16 0C 01 00 db 00h, 80h, 16h, 0Ch, 01h, 00h
-31E4:D03A 00 80 18 0C 02 00 db 00h, 80h, 18h, 0Ch, 02h, 00h
-31E4:D040 00 80 1A db 00h, 80h, 1Ah
-31E4:D043 0C db 0Ch
-31E4:D044 loc_2363:
-31E4:D044 03 00 add ax,[bx+si]
-31E4:D046 00 00 add [bx+si],al
-31E4:D048 15 010C adc ax,10Ch
-31E4:D04B 00 00 add [bx+si],al
-31E4:D04D 00 17 add [bx],dl
-31E4:D04F 0C 02 or al,2
-31E4:D051 00 00 add [bx+si],al
-31E4:D053 00 19 add [bx+di],bl
-31E4:D055 0C 03 or al,3
-31E4:D057 00 00 add [bx+si],al
-31E4:D059 00 1B add [bp+di],bl
-31E4:D05B 0C FF or al,0FFh
-31E4:D05D FF 66 D0 jmp word ptr [bp-30h] ;*
- sub_276 endp
-
-31E4:D060 00 80 29 0A 00 00 db 00h, 80h, 29h, 0Ah, 00h, 00h
-31E4:D066 00 00 0D 0C FF FF db 00h, 00h, 0Dh, 0Ch,0FFh,0FFh
-31E4:D06C 8C D0 00 00 22 08 db 8Ch,0D0h, 00h, 00h, 22h, 08h
-31E4:D072 00 00 00 80 2C 08 db 00h, 00h, 00h, 80h, 2Ch, 08h
-31E4:D078 02 00 00 80 29 0C db 02h, 00h, 00h, 80h, 29h, 0Ch
-31E4:D07E 01 00 00 80 24 04 db 01h, 00h, 00h, 80h, 24h, 04h
-31E4:D084 03 00 00 80 2E 0C db 03h, 00h, 00h, 80h, 2Eh, 0Ch
-31E4:D08A 04 00 00 00 28 0C db 04h, 00h, 00h, 00h, 28h, 0Ch
-31E4:D090 02 00 00 00 2A 0C db 02h, 00h, 00h, 00h, 2Ah, 0Ch
-31E4:D096 FF FF 00 00 2C 0C db 0FFh,0FFh, 00h, 00h, 2Ch, 0Ch
-31E4:D09C 03 00 00 00 2D 0C db 03h, 00h, 00h, 00h, 2Dh, 0Ch
-31E4:D0A2 04 00 00 00 2F 0C db 04h, 00h, 00h, 00h, 2Fh, 0Ch
-31E4:D0A8 FF FF CA D0 00 00 db 0FFh,0FFh,0CAh,0D0h, 00h, 00h
-31E4:D0AE 38 88 00 00 00 80 db 38h, 88h, 00h, 00h, 00h, 80h
-31E4:D0B4 0F 0C 04 00 00 80 db 0Fh, 0Ch, 04h, 00h, 00h, 80h
-31E4:D0BA 1E 0C 01 00 00 80 db 1Eh, 0Ch, 01h, 00h, 00h, 80h
-31E4:D0C0 20 0C 02 00 00 80 db 20h, 0Ch, 02h, 00h, 00h, 80h
-31E4:D0C6 24 04 03 00 00 00 db 24h, 04h, 03h, 00h, 00h, 00h
-31E4:D0CC 1D 0C 02 00 00 00 db 1Dh, 0Ch, 02h, 00h, 00h, 00h
-31E4:D0D2 1F 0C 03 00 00 00 db 1Fh, 0Ch, 03h, 00h, 00h, 00h
-31E4:D0D8 21 0C 04 00 83 2A db 21h, 0Ch, 04h, 00h, 83h, 2Ah
-31E4:D0DE 24 04 FF FF 00 00 db 24h, 04h,0FFh,0FFh, 00h, 00h
-31E4:D0E4 12 0C FF FF FC D0 db 12h, 0Ch,0FFh,0FFh,0FCh,0D0h
-31E4:D0EA 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:D0F0 00 80 32 0C 01 00 db 00h, 80h, 32h, 0Ch, 01h, 00h
-31E4:D0F6 00 80 34 0C 02 00 db 00h, 80h, 34h, 0Ch, 02h, 00h
-31E4:D0FC 00 00 31 0C 01 00 db 00h, 00h, 31h, 0Ch, 01h, 00h
-31E4:D102 00 00 33 0C 02 00 db 00h, 00h, 33h, 0Ch, 02h, 00h
-31E4:D108 00 00 35 0C FF FF db 00h, 00h, 35h, 0Ch,0FFh,0FFh
-31E4:D10E 28 D1 00 00 CA 09 db 28h,0D1h, 00h, 00h,0CAh, 09h
-31E4:D114 00 00 00 80 0D 0B db 00h, 00h, 00h, 80h, 0Dh, 0Bh
-31E4:D11A 02 00 00 80 38 0C db 02h, 00h, 00h, 80h, 38h, 0Ch
-31E4:D120 01 00 00 80 3C 0C db 01h, 00h, 00h, 80h, 3Ch, 0Ch
-31E4:D126 03 00 00 00 37 0C db 03h, 00h, 00h, 00h, 37h, 0Ch
-31E4:D12C 02 00 00 00 39 0C db 02h, 00h, 00h, 00h, 39h, 0Ch
-31E4:D132 FF FF 00 00 3B 0C db 0FFh,0FFh, 00h, 00h, 3Bh, 0Ch
-31E4:D138 03 00 00 00 3D 0C db 03h, 00h, 00h, 00h, 3Dh, 0Ch
-31E4:D13E FF FF 5A D1 69 23 db 0FFh,0FFh, 5Ah,0D1h, 69h, 23h
-31E4:D144 03 09 00 00 00 80 db 03h, 09h, 00h, 00h, 00h, 80h
-31E4:D14A 27 0C 03 00 00 80 db 27h, 0Ch, 03h, 00h, 00h, 80h
-31E4:D150 40 0C 01 00 00 80 db 40h, 0Ch, 01h, 00h, 00h, 80h
-31E4:D156 24 04 02 00 00 00 db 24h, 04h, 02h, 00h, 00h, 00h
-31E4:D15C 3F 0C 02 00 00 00 db 3Fh, 0Ch, 02h, 00h, 00h, 00h
-31E4:D162 41 0C 03 00 00 00 db 41h, 0Ch, 03h, 00h, 00h, 00h
-31E4:D168 42 0C FF FF 00 00 db 42h, 0Ch,0FFh,0FFh, 00h, 00h
-31E4:D16E 2B 0C FF FF 80 D1 db 2Bh, 0Ch,0FFh,0FFh, 80h,0D1h
-31E4:D174 00 80 EF 09 00 00 db 00h, 80h,0EFh, 09h, 00h, 00h
-31E4:D17A 00 80 45 0C 01 00 db 00h, 80h, 45h, 0Ch, 01h, 00h
-31E4:D180 00 00 44 0C 01 00 db 00h, 00h, 44h, 0Ch, 01h, 00h
-31E4:D186 00 00 46 0C FF FF db 00h, 00h, 46h, 0Ch,0FFh,0FFh
-31E4:D18C 9A D1 00 80 40 09 db 9Ah,0D1h, 00h, 80h, 40h, 09h
-31E4:D192 00 00 00 80 48 0C db 00h, 00h, 00h, 80h, 48h, 0Ch
-31E4:D198 01 00 00 00 47 0C db 01h, 00h, 00h, 00h, 47h, 0Ch
-31E4:D19E 01 00 00 00 49 0C db 01h, 00h, 00h, 00h, 49h, 0Ch
-31E4:D1A4 FF FF B4 D1 00 80 db 0FFh,0FFh,0B4h,0D1h, 00h, 80h
-31E4:D1AA 48 09 00 00 00 80 db 48h, 09h, 00h, 00h, 00h, 80h
-31E4:D1B0 4B 0C 01 00 00 00 db 4Bh, 0Ch, 01h, 00h, 00h, 00h
-31E4:D1B6 4A 0C 01 00 00 00 db 4Ah, 0Ch, 01h, 00h, 00h, 00h
-31E4:D1BC 24 04 FF FF CE D1 db 24h, 04h,0FFh,0FFh,0CEh,0D1h
-31E4:D1C2 00 80 2E 0B 00 00 db 00h, 80h, 2Eh, 0Bh, 00h, 00h
-31E4:D1C8 00 80 4E 0C 01 00 db 00h, 80h, 4Eh, 0Ch, 01h, 00h
-31E4:D1CE 00 00 4D 0C 01 00 db 00h, 00h, 4Dh, 0Ch, 01h, 00h
-31E4:D1D4 00 00 4F 0C FF FF db 00h, 00h, 4Fh, 0Ch,0FFh,0FFh
-31E4:D1DA E2 D1 00 80 92 09 db 0E2h,0D1h, 00h, 80h, 92h, 09h
-31E4:D1E0 00 00 00 00 50 0C db 00h, 00h, 00h, 00h, 50h, 0Ch
-31E4:D1E6 FF FF F6 D1 00 80 db 0FFh,0FFh,0F6h,0D1h, 00h, 80h
-31E4:D1EC 38 0A 00 00 00 80 db 38h, 0Ah, 00h, 00h, 00h, 80h
-31E4:D1F2 52 0C 01 00 00 00 db 52h, 0Ch, 01h, 00h, 00h, 00h
-31E4:D1F8 51 0C 01 00 00 00 db 51h, 0Ch, 01h, 00h, 00h, 00h
-31E4:D1FE 53 0C FF db 53h, 0Ch,0FFh
-31E4:D201 0AFF data_1156 dw 0AFFh ; xref 31E4:2A54
-31E4:D203 D2 00 80 D5 07 00 db 0D2h, 00h, 80h,0D5h, 07h, 00h
-31E4:D209 00 00 00 EC A4 FF db 00h, 00h, 00h,0ECh,0A4h,0FFh
-31E4:D20F FF 36 D2 00 00 59 db 0FFh, 36h,0D2h, 00h, 00h, 59h
-31E4:D215 89 00 00 00 00 5B db 89h, 00h, 00h, 00h, 00h, 5Bh
-31E4:D21B 89 01 00 00 80 F9 db 89h, 01h, 00h, 00h, 80h,0F9h
-31E4:D221 07 02 00 db 07h, 02h, 00h
-31E4:D224 0007[00] db 7 dup (0)
-31E4:D22B 80 24 04 03 00 00 db 80h, 24h, 04h, 03h, 00h, 00h
-31E4:D231 80 EF 07 04 00 FC db 80h,0EFh, 07h, 04h, 00h,0FCh
-31E4:D237 24 5A 09 00 00 09 db 24h, 5Ah, 09h, 00h, 00h, 09h
-31E4:D23D 25 5C 09 04 00 00 db 25h, 5Ch, 09h, 04h, 00h, 00h
-31E4:D243 00 5E 09 05 00 00 db 00h, 5Eh, 09h, 05h, 00h, 00h
-31E4:D249 00 5D 09 00 00 00 db 00h, 5Dh, 09h, 00h, 00h, 00h
-31E4:D24F 00 5F 09 FF FF 7A db 00h, 5Fh, 09h,0FFh,0FFh, 7Ah
-31E4:D255 D2 16 25 59 09 00 db 0D2h, 16h, 25h, 59h, 09h, 00h
-31E4:D25B 00 1D 25 5B 09 01 db 00h, 1Dh, 25h, 5Bh, 09h, 01h
-31E4:D261 00 00 80 FB 07 02 db 00h, 00h, 80h,0FBh, 07h, 02h
-31E4:D267 00 db 00h
-31E4:D268 0007[00] db 7 dup (0)
-31E4:D26F 80 24 04 03 00 00 db 80h, 24h, 04h, 03h, 00h, 00h
-31E4:D275 80 76 00 04 00 FC db 80h, 76h, 00h, 04h, 00h,0FCh
-31E4:D27B 24 5A 09 00 00 09 db 24h, 5Ah, 09h, 00h, 00h, 09h
-31E4:D281 25 5C 09 04 00 00 db 25h, 5Ch, 09h, 04h, 00h, 00h
-31E4:D287 00 62 09 05 00 00 db 00h, 62h, 09h, 05h, 00h, 00h
-31E4:D28D 00 5D 09 00 00 00 db 00h, 5Dh, 09h, 00h, 00h, 00h
-31E4:D293 00 24 04 FF FF B8 db 00h, 24h, 04h,0FFh,0FFh,0B8h
-31E4:D299 D2 16 25 59 09 00 db 0D2h, 16h, 25h, 59h, 09h, 00h
-31E4:D29F 00 1D 25 5B 09 01 db 00h, 1Dh, 25h, 5Bh, 09h, 01h
-31E4:D2A5 00 00 00 22 08 02 db 00h, 00h, 00h, 22h, 08h, 02h
-31E4:D2AB 00 00 80 2C 08 04 db 00h, 00h, 80h, 2Ch, 08h, 04h
-31E4:D2B1 00 00 80 24 04 03 db 00h, 00h, 80h, 24h, 04h, 03h
-31E4:D2B7 00 FC 24 5A 09 00 db 00h,0FCh, 24h, 5Ah, 09h, 00h
-31E4:D2BD 00 09 25 5C 09 04 db 00h, 09h, 25h, 5Ch, 09h, 04h
-31E4:D2C3 00 00 00 63 09 FF db 00h, 00h, 00h, 63h, 09h,0FFh
-31E4:D2C9 FF 00 00 5D 09 00 db 0FFh, 00h, 00h, 5Dh, 09h, 00h
-31E4:D2CF 00 00 00 A1 0A FF db 00h, 00h, 00h,0A1h, 0Ah,0FFh
-31E4:D2D5 FF F6 D2 16 25 59 db 0FFh,0F6h,0D2h, 16h, 25h, 59h
-31E4:D2DB 09 00 00 1D 25 5B db 09h, 00h, 00h, 1Dh, 25h, 5Bh
-31E4:D2E1 09 01 00 00 80 38 db 09h, 01h, 00h, 00h, 80h, 38h
-31E4:D2E7 08 02 00 db 08h, 02h, 00h
-31E4:D2EA 0007[00] db 7 dup (0)
-31E4:D2F1 80 24 04 03 00 FC db 80h, 24h, 04h, 03h, 00h,0FCh
-31E4:D2F7 24 5A 09 00 00 09 db 24h, 5Ah, 09h, 00h, 00h, 09h
-31E4:D2FD 25 5C 09 04 00 00 db 25h, 5Ch, 09h, 04h, 00h, 00h
-31E4:D303 00 64 09 FF FF 00 db 00h, 64h, 09h,0FFh,0FFh, 00h
-31E4:D309 00 5D 09 00 00 1C db 00h, 5Dh, 09h, 00h, 00h, 1Ch
-31E4:D30F D3 00 80 24 04 00 db 0D3h, 00h, 80h, 24h, 04h, 00h
-31E4:D315 00 00 80 66 09 01 db 00h, 00h, 80h, 66h, 09h, 01h
-31E4:D31B 00 00 00 65 09 01 db 00h, 00h, 00h, 65h, 09h, 01h
-31E4:D321 00 00 00 67 09 FF db 00h, 00h, 00h, 67h, 09h,0FFh
-31E4:D327 FF 36 D3 00 80 0D db 0FFh, 36h,0D3h, 00h, 80h, 0Dh
-31E4:D32D 0B 00 00 00 80 0F db 0Bh, 00h, 00h, 00h, 80h, 0Fh
-31E4:D333 0B 01 00 00 00 0E db 0Bh, 01h, 00h, 00h, 00h, 0Eh
-31E4:D339 0B 01 00 00 00 10 db 0Bh, 01h, 00h, 00h, 00h, 10h
-31E4:D33F 0B FF FF 4A D3 00 db 0Bh,0FFh,0FFh, 4Ah,0D3h, 00h
-31E4:D345 80 CA 09 00 00 00 db 80h,0CAh, 09h, 00h, 00h, 00h
-31E4:D34B 00 11 0B FF FF 6A db 00h, 11h, 0Bh,0FFh,0FFh, 6Ah
-31E4:D351 D3 69 23 03 09 00 db 0D3h, 69h, 23h, 03h, 09h, 00h
-31E4:D357 00 00 80 40 09 02 db 00h, 00h, 80h, 40h, 09h, 02h
-31E4:D35D 0008[00] db 8 dup (0)
-31E4:D365 80 69 09 01 00 00 db 80h, 69h, 09h, 01h, 00h, 00h
-31E4:D36B 00 68 09 03 00 00 db 00h, 68h, 09h, 03h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 545
-
-31E4:D371 00 6A 09 FF FF 00 db 00h, 6Ah, 09h,0FFh,0FFh, 00h
-31E4:D377 00 D2 09 FF FF 8A db 00h,0D2h, 09h,0FFh,0FFh, 8Ah
-31E4:D37D D3 00 80 01 0C 00 db 0D3h, 00h, 80h, 01h, 0Ch, 00h
-31E4:D383 00 00 80 03 0C 01 db 00h, 00h, 80h, 03h, 0Ch, 01h
-31E4:D389 00 00 00 02 0C 01 db 00h, 00h, 00h, 02h, 0Ch, 01h
-31E4:D38F 00 00 00 04 0C FF db 00h, 00h, 00h, 04h, 0Ch,0FFh
-31E4:D395 FF AA D3 00 80 48 db 0FFh,0AAh,0D3h, 00h, 80h, 48h
-31E4:D39B 09 00 db 09h, 00h
-31E4:D39D 0008[00] db 8 dup (0)
-31E4:D3A5 80 6C 09 01 00 00 db 80h, 6Ch, 09h, 01h, 00h, 00h
-31E4:D3AB 00 6B 09 02 00 00 db 00h, 6Bh, 09h, 02h, 00h, 00h
-31E4:D3B1 00 6D 09 FF FF CA db 00h, 6Dh, 09h,0FFh,0FFh,0CAh
-31E4:D3B7 D3 00 80 97 09 00 db 0D3h, 00h, 80h, 97h, 09h, 00h
-31E4:D3BD 00 db 00h
-31E4:D3BE 0007[00] db 7 dup (0)
-31E4:D3C5 80 99 09 01 00 00 db 80h, 99h, 09h, 01h, 00h, 00h
-31E4:D3CB 00 98 09 02 00 00 db 00h, 98h, 09h, 02h, 00h, 00h
-31E4:D3D1 00 9A 09 FF FF E4 db 00h, 9Ah, 09h,0FFh,0FFh,0E4h
-31E4:D3D7 D3 00 80 97 09 00 db 0D3h, 00h, 80h, 97h, 09h, 00h
-31E4:D3DD 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-31E4:D3E3 00 B7 26 9B 09 FF db 00h,0B7h, 26h, 9Bh, 09h,0FFh
-31E4:D3E9 FF F2 D3 00 80 9C db 0FFh,0F2h,0D3h, 00h, 80h, 9Ch
-31E4:D3EF 09 00 00 00 00 9D db 09h, 00h, 00h, 00h, 00h, 9Dh
-31E4:D3F5 09 FF FF 0C D4 00 db 09h,0FFh,0FFh, 0Ch,0D4h, 00h
-31E4:D3FB 00 38 0A 00 00 00 db 00h, 38h, 0Ah, 00h, 00h, 00h
-31E4:D401 80 7F 0A 02 00 00 db 80h, 7Fh, 0Ah, 02h, 00h, 00h
-31E4:D407 80 7D 0A 01 00 00 db 80h, 7Dh, 0Ah, 01h, 00h, 00h
-31E4:D40D 00 7C 0A 02 00 00 db 00h, 7Ch, 0Ah, 02h, 00h, 00h
-31E4:D413 00 7E 0A FF FF 00 db 00h, 7Eh, 0Ah,0FFh,0FFh, 00h
-31E4:D419 00 80 0A FF FF 26 db 00h, 80h, 0Ah,0FFh,0FFh, 26h
-31E4:D41F D4 00 80 D5 07 00 db 0D4h, 00h, 80h,0D5h, 07h, 00h
-31E4:D425 00 00 00 94 A4 FF db 00h, 00h, 00h, 94h,0A4h,0FFh
-31E4:D42B FF 52 D4 6D 23 36 db 0FFh, 52h,0D4h, 6Dh, 23h, 36h
-31E4:D431 09 00 00 00 00 2E db 09h, 00h, 00h, 00h, 00h, 2Eh
-31E4:D437 89 03 00 00 80 3A db 89h, 03h, 00h, 00h, 80h, 3Ah
-31E4:D43D 09 04 00 db 09h, 04h, 00h
-31E4:D440 0007[00] db 7 dup (0)
-31E4:D447 80 2B 09 01 00 00 db 80h, 2Bh, 09h, 01h, 00h, 00h
-31E4:D44D 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:D453 00 37 09 04 00 00 db 00h, 37h, 09h, 04h, 00h, 00h
-31E4:D459 00 38 09 05 00 70 db 00h, 38h, 09h, 05h, 00h, 70h
-31E4:D45F 24 24 04 FF FF 00 db 24h, 24h, 04h,0FFh,0FFh, 00h
-31E4:D465 00 39 09 FF FF 00 db 00h, 39h, 09h,0FFh,0FFh, 00h
-31E4:D46B 00 3B 09 FF FF 90 db 00h, 3Bh, 09h,0FFh,0FFh, 90h
-31E4:D471 D4 00 00 6D 0B 08 db 0D4h, 00h, 00h, 6Dh, 0Bh, 08h
-31E4:D477 00 00 80 40 09 00 db 00h, 00h, 80h, 40h, 09h, 00h
-31E4:D47D 00 00 80 42 09 02 db 00h, 00h, 80h, 42h, 09h, 02h
-31E4:D483 00 00 80 24 04 03 db 00h, 00h, 80h, 24h, 04h, 03h
-31E4:D489 00 00 80 45 89 04 db 00h, 00h, 80h, 45h, 89h, 04h
-31E4:D48F 00 A4 24 41 09 02 db 00h,0A4h, 24h, 41h, 09h, 02h
-31E4:D495 00 00 00 4B 09 FF db 00h, 00h, 00h, 4Bh, 09h,0FFh
-31E4:D49B FF 00 00 43 09 03 db 0FFh, 00h, 00h, 43h, 09h, 03h
-31E4:D4A1 00 00 00 44 09 04 db 00h, 00h, 00h, 44h, 09h, 04h
-31E4:D4A7 00 42 2A 46 09 FF db 00h, 42h, 2Ah, 46h, 09h,0FFh
-31E4:D4AD FF 00 00 47 09 04 db 0FFh, 00h, 00h, 47h, 09h, 04h
-31E4:D4B3 00 BB 24 49 09 07 db 00h,0BBh, 24h, 49h, 09h, 07h
-31E4:D4B9 00 00 00 4A 09 FF db 00h, 00h, 00h, 4Ah, 09h,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 546
-
-31E4:D4BF FF 00 00 72 0B 00 db 0FFh, 00h, 00h, 72h, 0Bh, 00h
-31E4:D4C5 00 D4 D4 00 80 48 db 00h,0D4h,0D4h, 00h, 80h, 48h
-31E4:D4CB 09 00 00 00 80 24 db 09h, 00h, 00h, 00h, 80h, 24h
-31E4:D4D1 04 01 00 00 00 49 db 04h, 01h, 00h, 00h, 00h, 49h
-31E4:D4D7 09 01 00 00 00 4A db 09h, 01h, 00h, 00h, 00h, 4Ah
-31E4:D4DD 09 FF FF E8 D4 00 db 09h,0FFh,0FFh,0E8h,0D4h, 00h
-31E4:D4E3 80 24 04 00 00 00 db 80h, 24h, 04h, 00h, 00h, 00h
-31E4:D4E9 00 27 0B FF FF F6 db 00h, 27h, 0Bh,0FFh,0FFh,0F6h
-31E4:D4EF D4 00 80 D5 07 00 db 0D4h, 00h, 80h,0D5h, 07h, 00h
-31E4:D4F5 00 00 00 60 A4 FF db 00h, 00h, 00h, 60h,0A4h,0FFh
-31E4:D4FB FF 22 D5 6D 23 29 db 0FFh, 22h,0D5h, 6Dh, 23h, 29h
-31E4:D501 09 00 00 00 00 2E db 09h, 00h, 00h, 00h, 00h, 2Eh
-31E4:D507 89 03 00 00 80 30 db 89h, 03h, 00h, 00h, 80h, 30h
-31E4:D50D 09 04 00 db 09h, 04h, 00h
-31E4:D510 0007[00] db 7 dup (0)
-31E4:D517 80 2B 09 01 00 00 db 80h, 2Bh, 09h, 01h, 00h, 00h
-31E4:D51D 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:D523 00 2A 09 04 00 00 db 00h, 2Ah, 09h, 04h, 00h, 00h
-31E4:D529 00 2C 09 05 00 70 db 00h, 2Ch, 09h, 05h, 00h, 70h
-31E4:D52F 24 24 04 FF FF 00 db 24h, 24h, 04h,0FFh,0FFh, 00h
-31E4:D535 00 2F 09 FF FF 00 db 00h, 2Fh, 09h,0FFh,0FFh, 00h
-31E4:D53B 00 31 09 FF FF 4E db 00h, 31h, 09h,0FFh,0FFh, 4Eh
-31E4:D541 D5 00 80 24 04 00 db 0D5h, 00h, 80h, 24h, 04h, 00h
-31E4:D547 00 00 80 14 0B 01 db 00h, 00h, 80h, 14h, 0Bh, 01h
-31E4:D54D 00 00 00 13 0B 01 db 00h, 00h, 00h, 13h, 0Bh, 01h
-31E4:D553 00 00 00 15 0B FF db 00h, 00h, 00h, 15h, 0Bh,0FFh
-31E4:D559 FF 92 D5 00 00 6D db 0FFh, 92h,0D5h, 00h, 00h, 6Dh
-31E4:D55F 8B 06 00 00 80 40 db 8Bh, 06h, 00h, 00h, 80h, 40h
-31E4:D565 09 00 00 00 00 4D db 09h, 00h, 00h, 00h, 00h, 4Dh
-31E4:D56B 09 01 00 00 80 42 db 09h, 01h, 00h, 00h, 80h, 42h
-31E4:D571 09 02 00 00 80 24 db 09h, 02h, 00h, 00h, 80h, 24h
-31E4:D577 04 03 00 00 80 51 db 04h, 03h, 00h, 00h, 80h, 51h
-31E4:D57D 09 04 00 00 80 24 db 09h, 04h, 00h, 00h, 80h, 24h
-31E4:D583 04 05 00 00 80 6F db 04h, 05h, 00h, 00h, 80h, 6Fh
-31E4:D589 0B 07 00 00 80 24 db 0Bh, 07h, 00h, 00h, 80h, 24h
-31E4:D58F 04 08 00 C8 24 4C db 04h, 08h, 00h,0C8h, 24h, 4Ch
-31E4:D595 09 02 00 00 00 4E db 09h, 02h, 00h, 00h, 00h, 4Eh
-31E4:D59B 09 FF FF DF 24 4F db 09h,0FFh,0FFh,0DFh, 24h, 4Fh
-31E4:D5A1 09 04 00 00 00 50 db 09h, 04h, 00h, 00h, 00h, 50h
-31E4:D5A7 09 05 00 00 00 52 db 09h, 05h, 00h, 00h, 00h, 52h
-31E4:D5AD 09 06 00 00 00 53 db 09h, 06h, 00h, 00h, 00h, 53h
-31E4:D5B3 09 FF FF 00 00 6E db 09h,0FFh,0FFh, 00h, 00h, 6Eh
-31E4:D5B9 0B 07 00 00 00 70 db 0Bh, 07h, 00h, 00h, 00h, 70h
-31E4:D5BF 0B 08 00 2F 2A 24 db 0Bh, 08h, 00h, 2Fh, 2Ah, 24h
-31E4:D5C5 04 FF FF E2 D5 00 db 04h,0FFh,0FFh,0E2h,0D5h, 00h
-31E4:D5CB 80 48 09 00 00 00 db 80h, 48h, 09h, 00h, 00h, 00h
-31E4:D5D1 00 3A 0A 01 00 00 db 00h, 3Ah, 0Ah, 01h, 00h, 00h
-31E4:D5D7 00 3C 0A 02 00 00 db 00h, 3Ch, 0Ah, 02h, 00h, 00h
-31E4:D5DD 80 3E 0A 03 00 00 db 80h, 3Eh, 0Ah, 03h, 00h, 00h
-31E4:D5E3 00 39 0A 01 00 00 db 00h, 39h, 0Ah, 01h, 00h, 00h
-31E4:D5E9 00 3B 0A FF FF 00 db 00h, 3Bh, 0Ah,0FFh,0FFh, 00h
-31E4:D5EF 00 3D 0A FF FF 00 db 00h, 3Dh, 0Ah,0FFh,0FFh, 00h
-31E4:D5F5 00 3F 0A FF FF 02 db 00h, 3Fh, 0Ah,0FFh,0FFh, 02h
-31E4:D5FB D6 00 80 D5 07 00 db 0D6h, 00h, 80h,0D5h, 07h, 00h
-31E4:D601 00 00 00 85 A2 FF db 00h, 00h, 00h, 85h,0A2h,0FFh
-31E4:D607 FF 1C D6 00 00 BD db 0FFh, 1Ch,0D6h, 00h, 00h,0BDh
-31E4:D60D 08 02 00 00 80 F9 db 08h, 02h, 00h, 00h, 80h,0F9h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 547
-
-31E4:D613 07 03 00 db 07h, 03h, 00h
-31E4:D616 0008[00] db 8 dup (0)
-31E4:D61E 91 08 00 00 00 00 db 91h, 08h, 00h, 00h, 00h, 00h
-31E4:D624 BA 08 00 00 02 22 db 0BAh, 08h, 00h, 00h, 02h, 22h
-31E4:D62A 95 A2 01 00 00 00 db 95h,0A2h, 01h, 00h, 00h, 00h
-31E4:D630 BE 08 FF FF 42 D6 db 0BEh, 08h,0FFh,0FFh, 42h,0D6h
-31E4:D636 00 00 BD 08 02 00 db 00h, 00h,0BDh, 08h, 02h, 00h
-31E4:D63C 00 80 FB 07 03 00 db 00h, 80h,0FBh, 07h, 03h, 00h
-31E4:D642 00 00 91 08 00 00 db 00h, 00h, 91h, 08h, 00h, 00h
-31E4:D648 00 00 BA 08 00 00 db 00h, 00h,0BAh, 08h, 00h, 00h
-31E4:D64E 02 22 95 A2 01 00 db 02h, 22h, 95h,0A2h, 01h, 00h
-31E4:D654 00 00 BF 08 FF FF db 00h, 00h,0BFh, 08h,0FFh,0FFh
-31E4:D65A 6E D6 00 00 BD 08 db 6Eh,0D6h, 00h, 00h,0BDh, 08h
-31E4:D660 02 00 00 00 22 08 db 02h, 00h, 00h, 00h, 22h, 08h
-31E4:D666 03 00 00 80 2C 08 db 03h, 00h, 00h, 80h, 2Ch, 08h
-31E4:D66C 04 00 00 00 91 08 db 04h, 00h, 00h, 00h, 91h, 08h
-31E4:D672 00 00 00 00 BA 08 db 00h, 00h, 00h, 00h,0BAh, 08h
-31E4:D678 00 00 02 22 95 A2 db 00h, 00h, 02h, 22h, 95h,0A2h
-31E4:D67E 01 00 00 00 C0 08 db 01h, 00h, 00h, 00h,0C0h, 08h
-31E4:D684 FF FF 00 00 E3 0A db 0FFh,0FFh, 00h, 00h,0E3h, 0Ah
-31E4:D68A FF FF 9A D6 00 00 db 0FFh,0FFh, 9Ah,0D6h, 00h, 00h
-31E4:D690 BD 08 02 00 00 80 db 0BDh, 08h, 02h, 00h, 00h, 80h
-31E4:D696 38 08 03 00 00 00 db 38h, 08h, 03h, 00h, 00h, 00h
-31E4:D69C 91 08 00 00 00 00 db 91h, 08h, 00h, 00h, 00h, 00h
-31E4:D6A2 BA 08 00 00 02 22 db 0BAh, 08h, 00h, 00h, 02h, 22h
-31E4:D6A8 95 A2 01 00 00 00 db 95h,0A2h, 01h, 00h, 00h, 00h
-31E4:D6AE C1 08 FF FF BA D6 db 0C1h, 08h,0FFh,0FFh,0BAh,0D6h
-31E4:D6B4 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:D6BA 00 00 C2 08 FF FF db 00h, 00h,0C2h, 08h,0FFh,0FFh
-31E4:D6C0 D4 D6 00 80 CA db 0D4h,0D6h, 00h, 80h,0CAh
-31E4:D6C5 09 db 9
-31E4:D6C6 0009[00] db 9 dup (0)
-31E4:D6CF 80 24 04 db 80h, 24h, 04h
-31E4:D6D2 01 data_1167 db 1 ; Data table (indexed access)
-31E4:D6D3 00 00 00 E9 09 02 db 00h, 00h, 00h,0E9h, 09h, 02h
-31E4:D6D9 00 3B 28 24 04 FF db 00h, 3Bh, 28h, 24h, 04h,0FFh
-31E4:D6DF FF FA D6 69 23 03 db 0FFh,0FAh,0D6h, 69h, 23h, 03h
-31E4:D6E5 09 00 00 00 00 ED db 09h, 00h, 00h, 00h, 00h,0EDh
-31E4:D6EB 09 01 00 00 80 EF db 09h, 01h, 00h, 00h, 80h,0EFh
-31E4:D6F1 09 02 00 db 09h, 02h, 00h
-31E4:D6F4 0008[00] db 8 dup (0)
-31E4:D6FC EC 09 FF FF 00 00 db 0ECh, 09h,0FFh,0FFh, 00h, 00h
-31E4:D702 EE 09 FF FF 00 00 db 0EEh, 09h,0FFh,0FFh, 00h, 00h
-31E4:D708 F0 09 FF FF 14 D7 db 0F0h, 09h,0FFh,0FFh, 14h,0D7h
-31E4:D70E 00 80 40 09 00 00 db 00h, 80h, 40h, 09h, 00h, 00h
-31E4:D714 00 00 EB 09 FF FF db 00h, 00h,0EBh, 09h,0FFh,0FFh
-31E4:D71A 22 D7 00 80 48 09 db 22h,0D7h, 00h, 80h, 48h, 09h
-31E4:D720 00 00 00 00 F1 09 db 00h, 00h, 00h, 00h,0F1h, 09h
-31E4:D726 FF FF 30 D7 00 80 db 0FFh,0FFh, 30h,0D7h, 00h, 80h
-31E4:D72C 92 09 00 00 00 00 db 92h, 09h, 00h, 00h, 00h, 00h
-31E4:D732 F2 09 FF FF 3E D7 db 0F2h, 09h,0FFh,0FFh, 3Eh,0D7h
-31E4:D738 00 80 38 0A 00 00 db 00h, 80h, 38h, 0Ah, 00h, 00h
-31E4:D73E 00 00 0C 0B FF FF db 00h, 00h, 0Ch, 0Bh,0FFh,0FFh
-31E4:D744 52 D7 00 80 24 04 db 52h,0D7h, 00h, 80h, 24h, 04h
-31E4:D74A 00 00 00 80 24 04 db 00h, 00h, 00h, 80h, 24h, 04h
-31E4:D750 01 00 00 00 B1 08 db 01h, 00h, 00h, 00h,0B1h, 08h
-31E4:D756 01 00 96 2A 24 04 db 01h, 00h, 96h, 2Ah, 24h, 04h
-31E4:D75C FF FF 7E D7 00 80 db 0FFh,0FFh, 7Eh,0D7h, 00h, 80h
-31E4:D762 B2 08 00 00 00 80 db 0B2h, 08h, 00h, 00h, 00h, 80h
-31E4:D768 B4 08 01 00 72 A2 db 0B4h, 08h, 01h, 00h, 72h,0A2h
-31E4:D76E B7 08 04 00 00 80 db 0B7h, 08h, 04h, 00h, 00h, 80h
-31E4:D774 24 04 03 00 00 80 db 24h, 04h, 03h, 00h, 00h, 80h
-31E4:D77A 6F 09 02 00 00 00 db 6Fh, 09h, 02h, 00h, 00h, 00h
-31E4:D780 B3 08 01 00 00 00 db 0B3h, 08h, 01h, 00h, 00h, 00h
-31E4:D786 B5 08 02 00 00 00 db 0B5h, 08h, 02h, 00h, 00h, 00h
-31E4:D78C B8 08 03 00 00 00 db 0B8h, 08h, 03h, 00h, 00h, 00h
-31E4:D792 24 04 FF FF 00 00 db 24h, 04h,0FFh,0FFh, 00h, 00h
-31E4:D798 6E 09 04 00 A4 D7 db 6Eh, 09h, 04h, 00h,0A4h,0D7h
-31E4:D79E 00 80 CA 09 00 00 db 00h, 80h,0CAh, 09h, 00h, 00h
-31E4:D7A4 00 00 31 0B FF FF db 00h, 00h, 31h, 0Bh,0FFh,0FFh
-31E4:D7AA B8 D7 69 23 03 09 db 0B8h,0D7h, 69h, 23h, 03h, 09h
-31E4:D7B0 00 00 00 80 75 0A db 00h, 00h, 00h, 80h, 75h, 0Ah
-31E4:D7B6 01 00 00 00 70 09 db 01h, 00h, 00h, 00h, 70h, 09h
-31E4:D7BC FF FF 00 00 81 0C db 0FFh,0FFh, 00h, 00h, 81h, 0Ch
-31E4:D7C2 FF FF CC D7 00 80 db 0FFh,0FFh,0CCh,0D7h, 00h, 80h
-31E4:D7C8 EF 09 00 00 00 00 db 0EFh, 09h, 00h, 00h, 00h, 00h
-31E4:D7CE 32 0B FF FF DA D7 db 32h, 0Bh,0FFh,0FFh,0DAh,0D7h
-31E4:D7D4 00 80 40 09 00 00 db 00h, 80h, 40h, 09h, 00h, 00h
-31E4:D7DA 00 00 33 0B FF FF db 00h, 00h, 33h, 0Bh,0FFh,0FFh
-31E4:D7E0 E8 D7 00 80 2E 0B db 0E8h,0D7h, 00h, 80h, 2Eh, 0Bh
-31E4:D7E6 00 00 00 00 34 0B db 00h, 00h, 00h, 00h, 34h, 0Bh
-31E4:D7EC FF FF 38 D8 00 00 db 0FFh,0FFh, 38h,0D8h, 00h, 00h
-31E4:D7F2 48 09 00 00 00 80 db 48h, 09h, 00h, 00h, 00h, 80h
-31E4:D7F8 7D 09 01 db 7Dh, 09h, 01h
-31E4:D7FB 0009[00] db 9 dup (0)
-31E4:D804 7F data_1170 db 7Fh
-31E4:D805 09 03 00 00 00 80 db 09h, 03h, 00h, 00h, 00h, 80h
-31E4:D80B 09 02 00 00 80 81 db 09h, 02h, 00h, 00h, 80h, 81h
-31E4:D811 09 04 00 00 00 83 db 09h, 04h, 00h, 00h, 00h, 83h
-31E4:D817 09 05 00 00 00 86 db 09h, 05h, 00h, 00h, 00h, 86h
-31E4:D81D 09 06 00 00 80 89 db 09h, 06h, 00h, 00h, 80h, 89h
-31E4:D823 09 07 00 00 80 85 db 09h, 07h, 00h, 00h, 80h, 85h
-31E4:D829 09 08 00 00 80 88 db 09h, 08h, 00h, 00h, 80h, 88h
-31E4:D82F 09 08 00 00 80 61 db 09h, 08h, 00h, 00h, 80h, 61h
-31E4:D835 0B 0B 00 00 00 7C db 0Bh, 0Bh, 00h, 00h, 00h, 7Ch
-31E4:D83B 09 FF FF 00 00 7E db 09h,0FFh,0FFh, 00h, 00h, 7Eh
-31E4:D841 09 03 00 8F 25 82 db 09h, 03h, 00h, 8Fh, 25h, 82h
-31E4:D847 09 06 00 82 25 82 db 09h, 06h, 00h, 82h, 25h, 82h
-31E4:D84D 09 06 00 9C 25 82 db 09h, 06h, 00h, 9Ch, 25h, 82h
-31E4:D853 09 06 00 00 00 84 db 09h, 06h, 00h, 00h, 00h, 84h
-31E4:D859 09 09 00 00 00 87 db 09h, 09h, 00h, 00h, 00h, 87h
-31E4:D85F 09 0A 00 00 00 8A db 09h, 0Ah, 00h, 00h, 00h, 8Ah
-31E4:D865 09 0A 00 24 25 8C db 09h, 0Ah, 00h, 24h, 25h, 8Ch
-31E4:D86B 09 FF FF 00 00 5F db 09h,0FFh,0FFh, 00h, 00h, 5Fh
-31E4:D871 0B FF FF 00 00 60 db 0Bh,0FFh,0FFh, 00h, 00h, 60h
-31E4:D877 0B 0B 00 00 00 62 db 0Bh, 0Bh, 00h, 00h, 00h, 62h
-31E4:D87D 0B FF FF A0 D8 A9 db 0Bh,0FFh,0FFh,0A0h,0D8h,0A9h
-31E4:D883 25 63 0B 04 00 BA db 25h, 63h, 0Bh, 04h, 00h,0BAh
-31E4:D889 25 8D 09 00 00 00 db 25h, 8Dh, 09h, 00h, 00h, 00h
-31E4:D88F 80 48 09 03 db 80h, 48h, 09h, 03h
-31E4:D893 0008[00] db 8 dup (0)
-31E4:D89B 80 90 09 02 00 87 db 80h, 90h, 09h, 02h, 00h, 87h
-31E4:D8A1 26 8E 09 FF FF 00 db 26h, 8Eh, 09h,0FFh,0FFh, 00h
-31E4:D8A7 00 8F 09 04 00 9E db 00h, 8Fh, 09h, 04h, 00h, 9Eh
-31E4:D8AD 26 91 09 FF FF 00 db 26h, 91h, 09h,0FFh,0FFh, 00h
-31E4:D8B3 00 7C 09 FF FF 00 db 00h, 7Ch, 09h,0FFh,0FFh, 00h
-31E4:D8B9 00 64 0B FF FF D2 db 00h, 64h, 0Bh,0FFh,0FFh,0D2h
-31E4:D8BF D8 00 80 92 09 00 db 0D8h, 00h, 80h, 92h, 09h, 00h
-31E4:D8C5 00 db 00h
-31E4:D8C6 0007[00] db 7 dup (0)
-31E4:D8CD 80 94 09 01 00 00 db 80h, 94h, 09h, 01h, 00h, 00h
-31E4:D8D3 00 93 09 02 00 CE db 00h, 93h, 09h, 02h, 00h,0CEh
-31E4:D8D9 26 95 09 FF FF E6 db 26h, 95h, 09h,0FFh,0FFh,0E6h
-31E4:D8DF D8 00 80 72 0C 00 db 0D8h, 00h, 80h, 72h, 0Ch, 00h
-31E4:D8E5 00 00 00 73 0C FF db 00h, 00h, 00h, 73h, 0Ch,0FFh
-31E4:D8EB FF 0C D9 00 80 A7 db 0FFh, 0Ch,0D9h, 00h, 80h,0A7h
-31E4:D8F1 09 00 00 00 80 A9 db 09h, 00h, 00h, 00h, 80h,0A9h
-31E4:D8F7 09 02 00 00 80 24 db 09h, 02h, 00h, 00h, 80h, 24h
-31E4:D8FD 04 03 00 00 80 AC db 04h, 03h, 00h, 00h, 80h,0ACh
-31E4:D903 09 04 00 00 80 AE db 09h, 04h, 00h, 00h, 80h,0AEh
-31E4:D909 09 05 00 FD 26 AB db 09h, 05h, 00h,0FDh, 26h,0ABh
-31E4:D90F 09 FF FF 00 00 A8 db 09h,0FFh,0FFh, 00h, 00h,0A8h
-31E4:D915 09 01 00 00 00 AA db 09h, 01h, 00h, 00h, 00h,0AAh
-31E4:D91B 09 02 00 38 27 AD db 09h, 02h, 00h, 38h, 27h,0ADh
-31E4:D921 09 03 00 00 00 24 db 09h, 03h, 00h, 00h, 00h, 24h
-31E4:D927 04 04 00 00 00 AF db 04h, 04h, 00h, 00h, 00h,0AFh
-31E4:D92D 09 FF FF 00 80 24 db 09h,0FFh,0FFh, 00h, 80h, 24h
-31E4:D933 04 66 D9 00 00 D5 db 04h, 66h,0D9h, 00h, 00h,0D5h
-31E4:D939 09 00 00 00 00 D7 db 09h, 00h, 00h, 00h, 00h,0D7h
-31E4:D93F 09 01 00 00 00 D9 db 09h, 01h, 00h, 00h, 00h,0D9h
-31E4:D945 09 02 00 00 80 DD db 09h, 02h, 00h, 00h, 80h,0DDh
-31E4:D94B 09 04 00 00 80 DB db 09h, 04h, 00h, 00h, 80h,0DBh
-31E4:D951 09 03 00 00 00 DF db 09h, 03h, 00h, 00h, 00h,0DFh
-31E4:D957 09 05 00 00 00 E1 db 09h, 05h, 00h, 00h, 00h,0E1h
-31E4:D95D 09 06 00 00 80 E2 db 09h, 06h, 00h, 00h, 80h,0E2h
-31E4:D963 09 07 00 00 00 D6 db 09h, 07h, 00h, 00h, 00h,0D6h
-31E4:D969 09 FF FF 00 00 74 db 09h,0FFh,0FFh, 00h, 00h, 74h
-31E4:D96F 0C FF FF 00 00 DA db 0Ch,0FFh,0FFh, 00h, 00h,0DAh
-31E4:D975 09 04 00 00 00 DC db 09h, 04h, 00h, 00h, 00h,0DCh
-31E4:D97B 09 FF FF 00 00 DE db 09h,0FFh,0FFh, 00h, 00h,0DEh
-31E4:D981 09 05 00 00 00 E0 db 09h, 05h, 00h, 00h, 00h,0E0h
-31E4:D987 09 FF FF 00 00 E3 db 09h,0FFh,0FFh, 00h, 00h,0E3h
-31E4:D98D 09 FF FF 00 00 E4 db 09h,0FFh,0FFh, 00h, 00h,0E4h
-31E4:D993 09 FF FF B0 D9 00 db 09h,0FFh,0FFh,0B0h,0D9h, 00h
-31E4:D999 00 E5 09 00 00 00 db 00h,0E5h, 09h, 00h, 00h, 00h
-31E4:D99F 80 E4 0A 02 00 00 db 80h,0E4h, 0Ah, 02h, 00h, 00h
-31E4:D9A5 80 E7 09 01 00 00 db 80h,0E7h, 09h, 01h, 00h, 00h
-31E4:D9AB 80 E6 0A 03 00 00 db 80h,0E6h, 0Ah, 03h, 00h, 00h
-31E4:D9B1 00 E6 09 02 00 00 db 00h,0E6h, 09h, 02h, 00h, 00h
-31E4:D9B7 00 E8 09 FF FF 00 db 00h,0E8h, 09h,0FFh,0FFh, 00h
-31E4:D9BD 00 E5 0A 03 00 00 db 00h,0E5h, 0Ah, 03h, 00h, 00h
-31E4:D9C3 00 24 04 FF FF E2 db 00h, 24h, 04h,0FFh,0FFh,0E2h
-31E4:D9C9 D9 00 80 38 0A 00 db 0D9h, 00h, 80h, 38h, 0Ah, 00h
-31E4:D9CF 00 00 80 37 0B 01 db 00h, 00h, 80h, 37h, 0Bh, 01h
-31E4:D9D5 00 00 80 24 04 02 db 00h, 00h, 80h, 24h, 04h, 02h
-31E4:D9DB 00 00 80 6E 09 03 db 00h, 00h, 80h, 6Eh, 09h, 03h
-31E4:D9E1 00 00 00 36 0B 01 db 00h, 00h, 00h, 36h, 0Bh, 01h
-31E4:D9E7 00 00 00 38 0B 02 db 00h, 00h, 00h, 38h, 0Bh, 02h
-31E4:D9ED 00 00 00 39 0B 03 db 00h, 00h, 00h, 39h, 0Bh, 03h
-31E4:D9F3 00 00 00 3A 0B FF db 00h, 00h, 00h, 3Ah, 0Bh,0FFh
-31E4:D9F9 FF 02 DA 00 80 80 db 0FFh, 02h,0DAh, 00h, 80h, 80h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 550
-
-31E4:D9FF 08 00 00 00 00 db 08h, 00h, 00h, 00h, 00h
-31E4:DA04 81 data_1173 db 81h
-31E4:DA05 08 FF FF 22 DA B5 db 08h,0FFh,0FFh, 22h,0DAh,0B5h
-31E4:DA0B 27 B0 09 00 00 D5 db 27h,0B0h, 09h, 00h, 00h,0D5h
-31E4:DA11 A7 B2 09 01 00 00 db 0A7h,0B2h, 09h, 01h, 00h, 00h
-31E4:DA17 80 B4 09 02 00 00 db 80h,0B4h, 09h, 02h, 00h, 00h
-31E4:DA1D 80 B6 09 03 00 00 db 80h,0B6h, 09h, 03h, 00h, 00h
-31E4:DA23 00 B1 09 FF FF A9 db 00h,0B1h, 09h,0FFh,0FFh,0A9h
-31E4:DA29 2A B3 09 02 00 00 db 2Ah,0B3h, 09h, 02h, 00h, 00h
-31E4:DA2F 00 B5 09 03 00 00 db 00h,0B5h, 09h, 03h, 00h, 00h
-31E4:DA35 00 24 04 FF FF 5A db 00h, 24h, 04h,0FFh,0FFh, 5Ah
-31E4:DA3B DA 00 80 D5 07 00 db 0DAh, 00h, 80h,0D5h, 07h, 00h
-31E4:DA41 00 00 80 DE 08 01 db 00h, 00h, 80h,0DEh, 08h, 01h
-31E4:DA47 00 00 00 E0 08 02 db 00h, 00h, 00h,0E0h, 08h, 02h
-31E4:DA4D 00 00 80 E2 08 03 db 00h, 00h, 80h,0E2h, 08h, 03h
-31E4:DA53 00 00 80 24 04 04 db 00h, 00h, 80h, 24h, 04h, 04h
-31E4:DA59 00 00 00 B5 A2 01 db 00h, 00h, 00h,0B5h,0A2h, 01h
-31E4:DA5F 00 00 00 DF 08 02 db 00h, 00h, 00h,0DFh, 08h, 02h
-31E4:DA65 00 00 00 E1 08 04 db 00h, 00h, 00h,0E1h, 08h, 04h
-31E4:DA6B 00 00 00 E3 08 FF db 00h, 00h, 00h,0E3h, 08h,0FFh
-31E4:DA71 FF 58 28 24 04 FF db 0FFh, 58h, 28h, 24h, 04h,0FFh
-31E4:DA77 FF 92 DA 00 00 F9 db 0FFh, 92h,0DAh, 00h, 00h,0F9h
-31E4:DA7D 07 00 00 71 A8 F4 db 07h, 00h, 00h, 71h,0A8h,0F4h
-31E4:DA83 09 01 db 09h, 01h
-31E4:DA85 00 00 00 00 db 0, 0, 0, 0
-31E4:DA89 0000 data_1175 dw 0 ; Data table (indexed access)
-31E4:DA8B 00 00 80 24 04 02 db 00h, 00h, 80h, 24h, 04h, 02h
-31E4:DA91 00 00 00 E4 08 FF db 00h, 00h, 00h,0E4h, 08h,0FFh
-31E4:DA97 FF 00 00 E1 08 03 db 0FFh, 00h, 00h,0E1h, 08h, 03h
-31E4:DA9D 00 58 28 24 04 FF db 00h, 58h, 28h, 24h, 04h,0FFh
-31E4:DAA3 FF BE DA 00 00 FB db 0FFh,0BEh,0DAh, 00h, 00h,0FBh
-31E4:DAA9 07 00 00 71 A8 F4 db 07h, 00h, 00h, 71h,0A8h,0F4h
-31E4:DAAF 09 01 db 09h, 01h
-31E4:DAB1 0008[00] db 8 dup (0)
-31E4:DAB9 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:DABF 00 E5 08 FF FF 00 db 00h,0E5h, 08h,0FFh,0FFh, 00h
-31E4:DAC5 00 E1 08 03 00 58 db 00h,0E1h, 08h, 03h, 00h, 58h
-31E4:DACB 28 24 04 FF FF EA db 28h, 24h, 04h,0FFh,0FFh,0EAh
-31E4:DAD1 DA 00 00 22 08 00 db 0DAh, 00h, 00h, 22h, 08h, 00h
-31E4:DAD7 00 71 28 F4 09 02 db 00h, 71h, 28h,0F4h, 09h, 02h
-31E4:DADD 00 00 80 2C 08 01 db 00h, 00h, 80h, 2Ch, 08h, 01h
-31E4:DAE3 00 00 80 24 04 03 db 00h, 00h, 80h, 24h, 04h, 03h
-31E4:DAE9 00 00 00 E6 08 FF db 00h, 00h, 00h,0E6h, 08h,0FFh
-31E4:DAEF FF 00 00 81 0A FF db 0FFh, 00h, 00h, 81h, 0Ah,0FFh
-31E4:DAF5 FF 00 00 E1 08 03 db 0FFh, 00h, 00h,0E1h, 08h, 03h
-31E4:DAFB 00 58 28 24 04 FF db 00h, 58h, 28h, 24h, 04h,0FFh
-31E4:DB01 FF 16 DB 71 28 F4 db 0FFh, 16h,0DBh, 71h, 28h,0F4h
-31E4:DB07 09 01 00 00 80 38 db 09h, 01h, 00h, 00h, 80h, 38h
-31E4:DB0D 08 00 00 00 80 24 db 08h, 00h, 00h, 00h, 80h, 24h
-31E4:DB13 04 02 00 00 00 E7 db 04h, 02h, 00h, 00h, 00h,0E7h
-31E4:DB19 08 FF FF 00 00 E1 db 08h,0FFh,0FFh, 00h, 00h,0E1h
-31E4:DB1F 08 02 00 58 28 24 db 08h, 02h, 00h, 58h, 28h, 24h
-31E4:DB25 04 FF FF 30 DB 00 db 04h,0FFh,0FFh, 30h,0DBh, 00h
-31E4:DB2B 80 F5 09 00 00 00 db 80h,0F5h, 09h, 00h, 00h, 00h
-31E4:DB31 00 F6 09 FF FF 56 db 00h,0F6h, 09h,0FFh,0FFh, 56h
-31E4:DB37 DB 00 80 24 04 00 db 0DBh, 00h, 80h, 24h, 04h, 00h
-31E4:DB3D 00 00 00 EE 08 01 db 00h, 00h, 00h,0EEh, 08h, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 551
-
-31E4:DB43 00 00 00 F1 88 02 db 00h, 00h, 00h,0F1h, 88h, 02h
-31E4:DB49 00 00 80 EF 08 03 db 00h, 00h, 80h,0EFh, 08h, 03h
-31E4:DB4F 00 00 80 24 04 04 db 00h, 00h, 80h, 24h, 04h, 04h
-31E4:DB55 00 00 00 C5 A2 01 db 00h, 00h, 00h,0C5h,0A2h, 01h
-31E4:DB5B 00 00 00 24 04 FF db 00h, 00h, 00h, 24h, 04h,0FFh
-31E4:DB61 FF 00 00 F2 08 01 db 0FFh, 00h, 00h,0F2h, 08h, 01h
-31E4:DB67 00 00 00 24 04 04 db 00h, 00h, 00h, 24h, 04h, 04h
-31E4:DB6D 00 F6 22 24 04 FF db 00h,0F6h, 22h, 24h, 04h,0FFh
-31E4:DB73 FF 88 DB 00 80 24 db 0FFh, 88h,0DBh, 00h, 80h, 24h
-31E4:DB79 04 00 00 00 80 3C db 04h, 00h, 00h, 00h, 80h, 3Ch
-31E4:DB7F 0B 01 00 00 80 3E db 0Bh, 01h, 00h, 00h, 80h, 3Eh
-31E4:DB85 0B 02 00 00 00 3B db 0Bh, 02h, 00h, 00h, 00h, 3Bh
-31E4:DB8B 0B 01 00 00 00 3D db 0Bh, 01h, 00h, 00h, 00h, 3Dh
-31E4:DB91 0B 02 00 00 00 3F db 0Bh, 02h, 00h, 00h, 00h, 3Fh
-31E4:DB97 0B FF FF A8 DB 69 db 0Bh,0FFh,0FFh,0A8h,0DBh, 69h
-31E4:DB9D 23 03 09 00 00 00 db 23h, 03h, 09h, 00h, 00h, 00h
-31E4:DBA3 80 F8 09 01 00 00 db 80h,0F8h, 09h, 01h, 00h, 00h
-31E4:DBA9 00 F7 09 FF FF 00 db 00h,0F7h, 09h,0FFh,0FFh, 00h
-31E4:DBAF 00 F9 09 FF FF C8 db 00h,0F9h, 09h,0FFh,0FFh,0C8h
-31E4:DBB5 DB 00 00 40 09 00 db 0DBh, 00h, 00h, 40h, 09h, 00h
-31E4:DBBB 00 00 80 75 0A 01 db 00h, 00h, 80h, 75h, 0Ah, 01h
-31E4:DBC1 00 00 80 29 0B 02 db 00h, 00h, 80h, 29h, 0Bh, 02h
-31E4:DBC7 00 00 00 AC 0A FF db 00h, 00h, 00h,0ACh, 0Ah,0FFh
-31E4:DBCD FF 00 00 28 0B 02 db 0FFh, 00h, 00h, 28h, 0Bh, 02h
-31E4:DBD3 00 00 00 2A 0B FF db 00h, 00h, 00h, 2Ah, 0Bh,0FFh
-31E4:DBD9 FF E2 DB 00 80 48 db 0FFh,0E2h,0DBh, 00h, 80h, 48h
-31E4:DBDF 09 00 00 00 00 2B db 09h, 00h, 00h, 00h, 00h, 2Bh
-31E4:DBE5 0B FF FF F0 DB 00 db 0Bh,0FFh,0FFh,0F0h,0DBh, 00h
-31E4:DBEB 80 2E 0B 00 00 00 db 80h, 2Eh, 0Bh, 00h, 00h, 00h
-31E4:DBF1 00 2C 0B FF FF FE db 00h, 2Ch, 0Bh,0FFh,0FFh,0FEh
-31E4:DBF7 DB 00 80 92 09 00 db 0DBh, 00h, 80h, 92h, 09h, 00h
-31E4:DBFD 00 00 00 2D 0B FF db 00h, 00h, 00h, 2Dh, 0Bh,0FFh
-31E4:DC03 FF 12 DC 00 80 38 db 0FFh, 12h,0DCh, 00h, 80h, 38h
-31E4:DC09 0A 00 00 00 80 2F db 0Ah, 00h, 00h, 00h, 80h, 2Fh
-31E4:DC0F 0B 01 00 00 00 09 db 0Bh, 01h, 00h, 00h, 00h, 09h
-31E4:DC15 0B 01 00 00 00 30 db 0Bh, 01h, 00h, 00h, 00h, 30h
-31E4:DC1B 0B FF FF 50 DC 00 db 0Bh,0FFh,0FFh, 50h,0DCh, 00h
-31E4:DC21 80 D5 07 00 00 00 db 80h,0D5h, 07h, 00h, 00h, 00h
-31E4:DC27 80 5E 0A 01 00 00 db 80h, 5Eh, 0Ah, 01h, 00h, 00h
-31E4:DC2D 80 60 0A 02 00 00 db 80h, 60h, 0Ah, 02h, 00h, 00h
-31E4:DC33 80 62 0A 03 00 00 db 80h, 62h, 0Ah, 03h, 00h, 00h
-31E4:DC39 80 24 04 04 00 00 db 80h, 24h, 04h, 04h, 00h, 00h
-31E4:DC3F 80 65 0A 05 00 00 db 80h, 65h, 0Ah, 05h, 00h, 00h
-31E4:DC45 80 67 0A 06 00 00 db 80h, 67h, 0Ah, 06h, 00h, 00h
-31E4:DC4B 80 69 0A 07 00 00 db 80h, 69h, 0Ah, 07h, 00h, 00h
-31E4:DC51 00 3F A2 01 00 00 db 00h, 3Fh,0A2h, 01h, 00h, 00h
-31E4:DC57 00 5F 0A 02 00 00 db 00h, 5Fh, 0Ah, 02h, 00h, 00h
-31E4:DC5D 00 61 0A 03 00 00 db 00h, 61h, 0Ah, 03h, 00h, 00h
-31E4:DC63 00 63 0A 04 00 00 db 00h, 63h, 0Ah, 04h, 00h, 00h
-31E4:DC69 00 64 0A 05 00 00 db 00h, 64h, 0Ah, 05h, 00h, 00h
-31E4:DC6F 00 66 0A 06 00 00 db 00h, 66h, 0Ah, 06h, 00h, 00h
-31E4:DC75 00 68 0A 07 00 00 db 00h, 68h, 0Ah, 07h, 00h, 00h
-31E4:DC7B 00 6A 0A FF FF 88 db 00h, 6Ah, 0Ah,0FFh,0FFh, 88h
-31E4:DC81 DC 00 80 F9 07 00 db 0DCh, 00h, 80h,0F9h, 07h, 00h
-31E4:DC87 00 00 00 4F A2 FF db 00h, 00h, 00h, 4Fh,0A2h,0FFh
-31E4:DC8D FF 96 DC 00 80 FB db 0FFh, 96h,0DCh, 00h, 80h,0FBh
-31E4:DC93 07 00 00 00 00 AB db 07h, 00h, 00h, 00h, 00h,0ABh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 552
-
-31E4:DC99 08 FF FF AA DC 00 db 08h,0FFh,0FFh,0AAh,0DCh, 00h
-31E4:DC9F 00 22 08 00 00 00 db 00h, 22h, 08h, 00h, 00h, 00h
-31E4:DCA5 80 2C 08 01 00 00 db 80h, 2Ch, 08h, 01h, 00h, 00h
-31E4:DCAB 00 AC 08 FF FF 00 db 00h,0ACh, 08h,0FFh,0FFh, 00h
-31E4:DCB1 00 6B 0A FF FF BE db 00h, 6Bh, 0Ah,0FFh,0FFh,0BEh
-31E4:DCB7 DC 00 80 38 08 00 db 0DCh, 00h, 80h, 38h, 08h, 00h
-31E4:DCBD 00 00 00 AD 08 FF db 00h, 00h, 00h,0ADh, 08h,0FFh
-31E4:DCC3 FF D2 DC 00 80 24 db 0FFh,0D2h,0DCh, 00h, 80h, 24h
-31E4:DCC9 04 00 00 00 80 AF db 04h, 00h, 00h, 00h, 80h,0AFh
-31E4:DCCF 08 01 00 00 00 AE db 08h, 01h, 00h, 00h, 00h,0AEh
-31E4:DCD5 08 01 00 00 00 B0 db 08h, 01h, 00h, 00h, 00h,0B0h
-31E4:DCDB 08 FF FF E6 DC 00 db 08h,0FFh,0FFh,0E6h,0DCh, 00h
-31E4:DCE1 80 0D 0B 00 00 00 db 80h, 0Dh, 0Bh, 00h, 00h, 00h
-31E4:DCE7 00 FD 0B FF FF 00 db 00h,0FDh, 0Bh,0FFh,0FFh, 00h
-31E4:DCED DD 69 A3 03 db 0DDh, 69h,0A3h, 03h
-31E4:DCF1 09 db 9
-31E4:DCF2 0009[00] db 9 dup (0)
-31E4:DCFB 80 6D 0A 01 00 00 db 80h, 6Dh, 0Ah, 01h, 00h, 00h
-31E4:DD01 00 6C 0A 02 00 00 db 00h, 6Ch, 0Ah, 02h, 00h, 00h
-31E4:DD07 00 6E 0A FF FF 20 db 00h, 6Eh, 0Ah,0FFh,0FFh, 20h
-31E4:DD0D DD 00 80 40 09 00 db 0DDh, 00h, 80h, 40h, 09h, 00h
-31E4:DD13 00 00 00 70 0A 01 db 00h, 00h, 00h, 70h, 0Ah, 01h
-31E4:DD19 00 00 80 72 0A 02 db 00h, 00h, 80h, 72h, 0Ah, 02h
-31E4:DD1F 00 00 00 6F 0A 01 db 00h, 00h, 00h, 6Fh, 0Ah, 01h
-31E4:DD25 00 00 00 71 0A FF db 00h, 00h, 00h, 71h, 0Ah,0FFh
-31E4:DD2B FF 00 00 73 0A FF db 0FFh, 00h, 00h, 73h, 0Ah,0FFh
-31E4:DD31 FF 3A DD 00 80 48 db 0FFh, 3Ah,0DDh, 00h, 80h, 48h
-31E4:DD37 09 00 00 00 00 62 db 09h, 00h, 00h, 00h, 00h, 62h
-31E4:DD3D 0C FF FF 48 DD 00 db 0Ch,0FFh,0FFh, 48h,0DDh, 00h
-31E4:DD43 80 92 09 00 00 00 db 80h, 92h, 09h, 00h, 00h, 00h
-31E4:DD49 00 63 0C FF FF 62 db 00h, 63h, 0Ch,0FFh,0FFh, 62h
-31E4:DD4F DD 00 00 38 0A 00 db 0DDh, 00h, 00h, 38h, 0Ah, 00h
-31E4:DD55 00 00 80 1F 0B 01 db 00h, 00h, 80h, 1Fh, 0Bh, 01h
-31E4:DD5B 00 00 80 66 0C 02 db 00h, 00h, 80h, 66h, 0Ch, 02h
-31E4:DD61 00 00 00 64 0C FF db 00h, 00h, 00h, 64h, 0Ch,0FFh
-31E4:DD67 FF 00 00 db 0FFh, 00h, 00h
-31E4:DD6A 65 data_1178 db 65h ; Data table (indexed access)
-31E4:DD6B 0C 02 00 00 00 67 db 0Ch, 02h, 00h, 00h, 00h, 67h
-31E4:DD71 0C FF FF 7C DD 00 db 0Ch,0FFh,0FFh, 7Ch,0DDh, 00h
-31E4:DD77 80 D5 07 00 00 00 db 80h,0D5h, 07h, 00h, 00h, 00h
-31E4:DD7D 00 A4 A1 FF FF 90 db 00h,0A4h,0A1h,0FFh,0FFh, 90h
-31E4:DD83 DD 00 00 90 08 02 db 0DDh, 00h, 00h, 90h, 08h, 02h
-31E4:DD89 00 00 80 F9 07 03 db 00h, 00h, 80h,0F9h, 07h, 03h
-31E4:DD8F 00 00 00 91 08 00 db 00h, 00h, 00h, 91h, 08h, 00h
-31E4:DD95 00 00 00 BA 08 FF db 00h, 00h, 00h,0BAh, 08h,0FFh
-31E4:DD9B FF 02 22 B4 A1 01 db 0FFh, 02h, 22h,0B4h,0A1h, 01h
-31E4:DDA1 00 E0 21 1C A2 FF db 00h,0E0h, 21h, 1Ch,0A2h,0FFh
-31E4:DDA7 FF B6 DD 00 00 90 db 0FFh,0B6h,0DDh, 00h, 00h, 90h
-31E4:DDAD 08 02 00 00 80 FB db 08h, 02h, 00h, 00h, 80h,0FBh
-31E4:DDB3 07 03 00 00 00 91 db 07h, 03h, 00h, 00h, 00h, 91h
-31E4:DDB9 08 00 00 00 00 BA db 08h, 00h, 00h, 00h, 00h,0BAh
-31E4:DDBF 08 FF FF 02 22 B4 db 08h,0FFh,0FFh, 02h, 22h,0B4h
-31E4:DDC5 A1 01 00 E0 21 96 db 0A1h, 01h, 00h,0E0h, 21h, 96h
-31E4:DDCB 08 FF FF E8 DD 00 db 08h,0FFh,0FFh,0E8h,0DDh, 00h
-31E4:DDD1 00 90 08 02 00 00 db 00h, 90h, 08h, 02h, 00h, 00h
-31E4:DDD7 80 22 08 03 00 db 80h, 22h, 08h, 03h, 00h
-31E4:DDDC 0007[00] db 7 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 553
-
-31E4:DDE3 80 98 08 04 00 00 db 80h, 98h, 08h, 04h, 00h, 00h
-31E4:DDE9 00 91 08 00 00 00 db 00h, 91h, 08h, 00h, 00h, 00h
-31E4:DDEF 00 BA 08 FF FF 02 db 00h,0BAh, 08h,0FFh,0FFh, 02h
-31E4:DDF5 22 B4 A1 01 00 E0 db 22h,0B4h,0A1h, 01h, 00h,0E0h
-31E4:DDFB 21 97 08 03 00 00 db 21h, 97h, 08h, 03h, 00h, 00h
-31E4:DE01 00 99 08 FF FF 26 db 00h, 99h, 08h,0FFh,0FFh, 26h
-31E4:DE07 DE 00 00 90 08 02 db 0DEh, 00h, 00h, 90h, 08h, 02h
-31E4:DE0D 00 00 80 38 08 03 db 00h, 00h, 80h, 38h, 08h, 03h
-31E4:DE13 00 db 00h
-31E4:DE14 0008[00] db 8 dup (0)
-31E4:DE1C 9B 08 04 00 00 80 db 9Bh, 08h, 04h, 00h, 00h, 80h
-31E4:DE22 9D 08 05 00 00 00 db 9Dh, 08h, 05h, 00h, 00h, 00h
-31E4:DE28 91 08 00 00 00 00 db 91h, 08h, 00h, 00h, 00h, 00h
-31E4:DE2E BA 08 FF FF 02 22 db 0BAh, 08h,0FFh,0FFh, 02h, 22h
-31E4:DE34 B4 A1 01 00 E0 21 db 0B4h,0A1h, 01h, 00h,0E0h, 21h
-31E4:DE3A 9A 08 03 00 00 00 db 9Ah, 08h, 03h, 00h, 00h, 00h
-31E4:DE40 9C 08 FF FF 00 00 db 9Ch, 08h,0FFh,0FFh, 00h, 00h
-31E4:DE46 9E 08 FF FF 6A DE db 9Eh, 08h,0FFh,0FFh, 6Ah,0DEh
-31E4:DE4C 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:DE52 00 00 A0 08 01 00 db 00h, 00h,0A0h, 08h, 01h, 00h
-31E4:DE58 00 80 2D 0A 03 00 db 00h, 80h, 2Dh, 0Ah, 03h, 00h
-31E4:DE5E 0007[00] db 7 dup (0)
-31E4:DE65 80 A2 08 02 00 00 db 80h,0A2h, 08h, 02h, 00h, 00h
-31E4:DE6B 00 9F 08 01 00 00 db 00h, 9Fh, 08h, 01h, 00h, 00h
-31E4:DE71 00 A1 08 04 00 00 db 00h,0A1h, 08h, 04h, 00h, 00h
-31E4:DE77 00 A3 08 FF FF 00 db 00h,0A3h, 08h,0FFh,0FFh, 00h
-31E4:DE7D 00 2E 0A FF FF A2 db 00h, 2Eh, 0Ah,0FFh,0FFh,0A2h
-31E4:DE83 DE 00 80 24 04 02 db 0DEh, 00h, 80h, 24h, 04h, 02h
-31E4:DE89 00 00 00 CA 09 04 db 00h, 00h, 00h,0CAh, 09h, 04h
-31E4:DE8F 00 00 80 90 08 06 db 00h, 00h, 80h, 90h, 08h, 06h
-31E4:DE95 00 db 00h
-31E4:DE96 0007[00] db 7 dup (0)
-31E4:DE9D 80 CA 09 05 00 00 db 80h,0CAh, 09h, 05h, 00h, 00h
-31E4:DEA3 00 91 08 01 00 00 db 00h, 91h, 08h, 01h, 00h, 00h
-31E4:DEA9 00 BA 08 FF FF C7 db 00h,0BAh, 08h,0FFh,0FFh,0C7h
-31E4:DEAF 28 31 0A 01 00 00 db 28h, 31h, 0Ah, 01h, 00h, 00h
-31E4:DEB5 00 2F 0A 04 00 E0 db 00h, 2Fh, 0Ah, 04h, 00h,0E0h
-31E4:DEBB 21 32 0A FF FF 00 db 21h, 32h, 0Ah,0FFh,0FFh, 00h
-31E4:DEC1 00 30 0A FF FF 02 db 00h, 30h, 0Ah,0FFh,0FFh, 02h
-31E4:DEC7 22 B4 A1 01 00 E0 db 22h,0B4h,0A1h, 01h, 00h,0E0h
-31E4:DECD DE 69 23 03 09 02 db 0DEh, 69h, 23h, 03h, 09h, 02h
-31E4:DED3 00 00 00 40 09 03 db 00h, 00h, 00h, 40h, 09h, 03h
-31E4:DED9 00 00 80 90 08 04 db 00h, 00h, 80h, 90h, 08h, 04h
-31E4:DEDF 00 00 00 91 08 00 db 00h, 00h, 00h, 91h, 08h, 00h
-31E4:DEE5 00 00 00 BA 08 FF db 00h, 00h, 00h,0BAh, 08h,0FFh
-31E4:DEEB FF 00 00 33 0A FF db 0FFh, 00h, 00h, 33h, 0Ah,0FFh
-31E4:DEF1 FF E0 21 34 0A FF db 0FFh,0E0h, 21h, 34h, 0Ah,0FFh
-31E4:DEF7 FF 02 22 B4 A1 00 db 0FFh, 02h, 22h,0B4h,0A1h, 00h
-31E4:DEFD 00 0C DF 00 00 90 db 00h, 0Ch,0DFh, 00h, 00h, 90h
-31E4:DF03 08 03 00 00 80 48 db 08h, 03h, 00h, 00h, 80h, 48h
-31E4:DF09 09 02 00 00 00 91 db 09h, 02h, 00h, 00h, 00h, 91h
-31E4:DF0F 08 00 00 00 00 BA db 08h, 00h, 00h, 00h, 00h,0BAh
-31E4:DF15 08 FF FF E0 21 35 db 08h,0FFh,0FFh,0E0h, 21h, 35h
-31E4:DF1B 0A FF FF 02 22 B4 db 0Ah,0FFh,0FFh, 02h, 22h,0B4h
-31E4:DF21 A1 00 00 32 DF 00 db 0A1h, 00h, 00h, 32h,0DFh, 00h
-31E4:DF27 00 90 08 03 00 00 db 00h, 90h, 08h, 03h, 00h, 00h
-31E4:DF2D 80 92 09 02 00 00 db 80h, 92h, 09h, 02h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 554
-
-31E4:DF33 00 91 08 00 00 00 db 00h, 91h, 08h, 00h, 00h, 00h
-31E4:DF39 00 BA 08 FF FF E0 db 00h,0BAh, 08h,0FFh,0FFh,0E0h
-31E4:DF3F 21 36 0A FF FF 02 db 21h, 36h, 0Ah,0FFh,0FFh, 02h
-31E4:DF45 22 B4 A1 00 00 58 db 22h,0B4h,0A1h, 00h, 00h, 58h
-31E4:DF4B DF 00 00 90 08 03 db 0DFh, 00h, 00h, 90h, 08h, 03h
-31E4:DF51 00 00 80 38 0A 02 db 00h, 00h, 80h, 38h, 0Ah, 02h
-31E4:DF57 00 00 00 91 08 00 db 00h, 00h, 00h, 91h, 08h, 00h
-31E4:DF5D 00 00 00 BA 08 FF db 00h, 00h, 00h,0BAh, 08h,0FFh
-31E4:DF63 FF E0 21 37 0A FF db 0FFh,0E0h, 21h, 37h, 0Ah,0FFh
-31E4:DF69 FF 02 22 B4 A1 00 db 0FFh, 02h, 22h,0B4h,0A1h, 00h
-31E4:DF6F 00 7E DF 00 80 D5 db 00h, 7Eh,0DFh, 00h, 80h,0D5h
-31E4:DF75 07 00 00 00 80 20 db 07h, 00h, 00h, 00h, 80h, 20h
-31E4:DF7B 08 01 00 00 00 49 db 08h, 01h, 00h, 00h, 00h, 49h
-31E4:DF81 A1 01 00 00 00 21 db 0A1h, 01h, 00h, 00h, 00h, 21h
-31E4:DF87 08 FF FF 92 DF 00 db 08h,0FFh,0FFh, 92h,0DFh, 00h
-31E4:DF8D 80 F9 07 00 00 00 db 80h,0F9h, 07h, 00h, 00h, 00h
-31E4:DF93 00 59 08 FF FF A0 db 00h, 59h, 08h,0FFh,0FFh,0A0h
-31E4:DF99 DF 00 80 FB 07 00 db 0DFh, 00h, 80h,0FBh, 07h, 00h
-31E4:DF9F 00 00 00 5A 08 FF db 00h, 00h, 00h, 5Ah, 08h,0FFh
-31E4:DFA5 FF C6 DF 00 00 22 db 0FFh,0C6h,0DFh, 00h, 00h, 22h
-31E4:DFAB 08 00 00 00 80 2C db 08h, 00h, 00h, 00h, 80h, 2Ch
-31E4:DFB1 08 01 00 00 80 25 db 08h, 01h, 00h, 00h, 80h, 25h
-31E4:DFB7 08 02 00 00 80 24 db 08h, 02h, 00h, 00h, 80h, 24h
-31E4:DFBD 04 03 00 00 80 24 db 04h, 03h, 00h, 00h, 80h, 24h
-31E4:DFC3 04 04 00 00 00 23 db 04h, 04h, 00h, 00h, 00h, 23h
-31E4:DFC9 08 FF FF 72 21 24 db 08h,0FFh,0FFh, 72h, 21h, 24h
-31E4:DFCF 08 02 00 00 00 26 db 08h, 02h, 00h, 00h, 00h, 26h
-31E4:DFD5 08 03 00 00 00 27 db 08h, 03h, 00h, 00h, 00h, 27h
-31E4:DFDB 08 04 00 59 21 24 db 08h, 04h, 00h, 59h, 21h, 24h
-31E4:DFE1 04 FF FF EC DF 00 db 04h,0FFh,0FFh,0ECh,0DFh, 00h
-31E4:DFE7 80 38 08 00 00 00 db 80h, 38h, 08h, 00h, 00h, 00h
-31E4:DFED 00 A4 08 FF FF 00 db 00h,0A4h, 08h,0FFh,0FFh, 00h
-31E4:DFF3 E0 00 80 24 04 00 db 0E0h, 00h, 80h, 24h, 04h, 00h
-31E4:DFF9 00 00 80 41 0A 01 db 00h, 00h, 80h, 41h, 0Ah, 01h
-31E4:DFFF 00 00 00 40 0A 01 db 00h, 00h, 00h, 40h, 0Ah, 01h
-31E4:E005 00 00 00 42 0A FF db 00h, 00h, 00h, 42h, 0Ah,0FFh
-31E4:E00B FF 1A E0 00 80 43 db 0FFh, 1Ah,0E0h, 00h, 80h, 43h
-31E4:E011 0A 00 00 00 80 45 db 0Ah, 00h, 00h, 00h, 80h, 45h
-31E4:E017 0A 01 00 00 00 44 db 0Ah, 01h, 00h, 00h, 00h, 44h
-31E4:E01D 0A 01 00 00 00 46 db 0Ah, 01h, 00h, 00h, 00h, 46h
-31E4:E023 0A FF FF 2E E0 00 db 0Ah,0FFh,0FFh, 2Eh,0E0h, 00h
-31E4:E029 80 CA 09 00 00 00 db 80h,0CAh, 09h, 00h, 00h, 00h
-31E4:E02F 00 74 0A FF FF 54 db 00h, 74h, 0Ah,0FFh,0FFh, 54h
-31E4:E035 E0 69 23 03 09 00 db 0E0h, 69h, 23h, 03h, 09h, 00h
-31E4:E03B 00 00 80 75 0A 01 db 00h, 00h, 80h, 75h, 0Ah, 01h
-31E4:E041 00 00 80 E7 0A 02 db 00h, 00h, 80h,0E7h, 0Ah, 02h
-31E4:E047 00 00 80 E9 0A 03 db 00h, 00h, 80h,0E9h, 0Ah, 03h
-31E4:E04D 00 00 80 EB 0A 04 db 00h, 00h, 80h,0EBh, 0Ah, 04h
-31E4:E053 00 00 00 47 0A FF db 00h, 00h, 00h, 47h, 0Ah,0FFh
-31E4:E059 FF 00 00 76 0A 02 db 0FFh, 00h, 00h, 76h, 0Ah, 02h
-31E4:E05F 00 00 00 E8 0A 03 db 00h, 00h, 00h,0E8h, 0Ah, 03h
-31E4:E065 00 00 00 EA 0A 04 db 00h, 00h, 00h,0EAh, 0Ah, 04h
-31E4:E06B 00 00 00 EC 0A FF db 00h, 00h, 00h,0ECh, 0Ah,0FFh
-31E4:E071 FF 86 E0 00 80 EF db 0FFh, 86h,0E0h, 00h, 80h,0EFh
-31E4:E077 09 00 00 00 00 49 db 09h, 00h, 00h, 00h, 00h, 49h
-31E4:E07D 0A 01 00 00 80 4B db 0Ah, 01h, 00h, 00h, 80h, 4Bh
-31E4:E083 0A 02 00 00 00 48 db 0Ah, 02h, 00h, 00h, 00h, 48h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 555
-
-31E4:E089 0A 01 00 00 00 4A db 0Ah, 01h, 00h, 00h, 00h, 4Ah
-31E4:E08F 0A FF FF 00 00 4C db 0Ah,0FFh,0FFh, 00h, 00h, 4Ch
-31E4:E095 0A FF FF A6 E0 00 db 0Ah,0FFh,0FFh,0A6h,0E0h, 00h
-31E4:E09B 80 40 09 00 00 00 db 80h, 40h, 09h, 00h, 00h, 00h
-31E4:E0A1 80 4E 0A 01 00 00 db 80h, 4Eh, 0Ah, 01h, 00h, 00h
-31E4:E0A7 00 4D 0A 01 00 00 db 00h, 4Dh, 0Ah, 01h, 00h, 00h
-31E4:E0AD 00 4F 0A FF FF C6 db 00h, 4Fh, 0Ah,0FFh,0FFh,0C6h
-31E4:E0B3 E0 00 80 48 09 00 db 0E0h, 00h, 80h, 48h, 09h, 00h
-31E4:E0B9 00 00 80 24 04 01 db 00h, 00h, 80h, 24h, 04h, 01h
-31E4:E0BF 00 00 80 52 0A 02 db 00h, 00h, 80h, 52h, 0Ah, 02h
-31E4:E0C5 00 00 00 50 0A 01 db 00h, 00h, 00h, 50h, 0Ah, 01h
-31E4:E0CB 00 00 00 51 0A 02 db 00h, 00h, 00h, 51h, 0Ah, 02h
-31E4:E0D1 00 00 00 53 0A FF db 00h, 00h, 00h, 53h, 0Ah,0FFh
-31E4:E0D7 FF F2 E0 00 80 97 db 0FFh,0F2h,0E0h, 00h, 80h, 97h
-31E4:E0DD 09 00 00 00 00 55 db 09h, 00h, 00h, 00h, 00h, 55h
-31E4:E0E3 0A 01 00 00 00 57 db 0Ah, 01h, 00h, 00h, 00h, 57h
-31E4:E0E9 0A 02 00 00 80 59 db 0Ah, 02h, 00h, 00h, 80h, 59h
-31E4:E0EF 0A 03 00 00 00 54 db 0Ah, 03h, 00h, 00h, 00h, 54h
-31E4:E0F5 0A 01 00 00 00 56 db 0Ah, 01h, 00h, 00h, 00h, 56h
-31E4:E0FB 0A FF FF 00 00 58 db 0Ah,0FFh,0FFh, 00h, 00h, 58h
-31E4:E101 0A FF FF 00 00 5A db 0Ah,0FFh,0FFh, 00h, 00h, 5Ah
-31E4:E107 0A FF FF 12 E1 00 db 0Ah,0FFh,0FFh, 12h,0E1h, 00h
-31E4:E10D 80 92 09 00 00 00 db 80h, 92h, 09h, 00h, 00h, 00h
-31E4:E113 00 5B 0A FF FF 20 db 00h, 5Bh, 0Ah,0FFh,0FFh, 20h
-31E4:E119 E1 00 80 5C 0A 00 db 0E1h, 00h, 80h, 5Ch, 0Ah, 00h
-31E4:E11F 00 00 00 5D 0A FF db 00h, 00h, 00h, 5Dh, 0Ah,0FFh
-31E4:E125 FF 2E E1 00 80 D5 db 0FFh, 2Eh,0E1h, 00h, 80h,0D5h
-31E4:E12B 07 00 00 00 00 EF db 07h, 00h, 00h, 00h, 00h,0EFh
-31E4:E131 A0 FF FF 3C E1 00 db 0A0h,0FFh,0FFh, 3Ch,0E1h, 00h
-31E4:E137 80 D9 07 00 00 00 db 80h,0D9h, 07h, 00h, 00h, 00h
-31E4:E13D 00 0B 08 FF FF 50 db 00h, 0Bh, 08h,0FFh,0FFh, 50h
-31E4:E143 E1 00 80 19 08 00 db 0E1h, 00h, 80h, 19h, 08h, 00h
-31E4:E149 00 00 80 24 04 01 db 00h, 00h, 80h, 24h, 04h, 01h
-31E4:E14F 00 00 00 11 08 01 db 00h, 00h, 00h, 11h, 08h, 01h
-31E4:E155 00 FF 20 24 04 FF db 00h,0FFh, 20h, 24h, 04h,0FFh
-31E4:E15B FF 70 E1 00 80 FB db 0FFh, 70h,0E1h, 00h, 80h,0FBh
-31E4:E161 07 00 00 00 80 0D db 07h, 00h, 00h, 00h, 80h, 0Dh
-31E4:E167 08 01 00 00 80 24 db 08h, 01h, 00h, 00h, 80h, 24h
-31E4:E16D 04 03 00 1C 21 0C db 04h, 03h, 00h, 1Ch, 21h, 0Ch
-31E4:E173 08 01 00 00 00 0E db 08h, 01h, 00h, 00h, 00h, 0Eh
-31E4:E179 08 FF FF 00 00 17 db 08h,0FFh,0FFh, 00h, 00h, 17h
-31E4:E17F 08 02 00 3C 21 24 db 08h, 02h, 00h, 3Ch, 21h, 24h
-31E4:E185 04 FF FF 9C E1 00 db 04h,0FFh,0FFh, 9Ch,0E1h, 00h
-31E4:E18B 00 22 08 00 00 00 db 00h, 22h, 08h, 00h, 00h, 00h
-31E4:E191 80 2C 08 01 00 00 db 80h, 2Ch, 08h, 01h, 00h, 00h
-31E4:E197 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:E19D 00 77 08 FF FF 00 db 00h, 77h, 08h,0FFh,0FFh, 00h
-31E4:E1A3 00 E1 0A 02 00 2E db 00h,0E1h, 0Ah, 02h, 00h, 2Eh
-31E4:E1A9 29 24 04 FF FF B6 db 29h, 24h, 04h,0FFh,0FFh,0B6h
-31E4:E1AF E1 00 80 38 08 00 db 0E1h, 00h, 80h, 38h, 08h, 00h
-31E4:E1B5 00 00 00 78 08 FF db 00h, 00h, 00h, 78h, 08h,0FFh
-31E4:E1BB FF CA E1 00 80 24 db 0FFh,0CAh,0E1h, 00h, 80h, 24h
-31E4:E1C1 04 00 00 00 80 CF db 04h, 00h, 00h, 00h, 80h,0CFh
-31E4:E1C7 08 01 00 00 00 CE db 08h, 01h, 00h, 00h, 00h,0CEh
-31E4:E1CD 08 01 00 00 00 24 db 08h, 01h, 00h, 00h, 00h, 24h
-31E4:E1D3 04 FF FF DE E1 00 db 04h,0FFh,0FFh,0DEh,0E1h, 00h
-31E4:E1D9 80 F5 08 00 00 00 db 80h,0F5h, 08h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 556
-
-31E4:E1DF 00 F6 08 FF FF FE db 00h,0F6h, 08h,0FFh,0FFh,0FEh
-31E4:E1E5 E1 5B 23 F8 08 00 db 0E1h, 5Bh, 23h,0F8h, 08h, 00h
-31E4:E1EB 00 00 80 F5 08 02 db 00h, 00h, 80h,0F5h, 08h, 02h
-31E4:E1F1 00 db 00h
-31E4:E1F2 0007[00] db 7 dup (0)
-31E4:E1F9 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E1FF 00 0F A3 03 00 34 db 00h, 0Fh,0A3h, 03h, 00h, 34h
-31E4:E205 23 24 04 FF FF 00 db 23h, 24h, 04h,0FFh,0FFh, 00h
-31E4:E20B 00 F6 08 FF FF 5A db 00h,0F6h, 08h,0FFh,0FFh, 5Ah
-31E4:E211 E2 00 00 F5 08 00 db 0E2h, 00h, 00h,0F5h, 08h, 00h
-31E4:E217 00 8D A4 10 09 01 db 00h, 8Dh,0A4h, 10h, 09h, 01h
-31E4:E21D 0008[00] db 8 dup (0)
-31E4:E225 80 12 09 02 00 00 db 80h, 12h, 09h, 02h, 00h, 00h
-31E4:E22B 80 14 09 03 00 00 db 80h, 14h, 09h, 03h, 00h, 00h
-31E4:E231 80 16 09 04 00 00 db 80h, 16h, 09h, 04h, 00h, 00h
-31E4:E237 80 18 09 05 00 00 db 80h, 18h, 09h, 05h, 00h, 00h
-31E4:E23D 80 24 04 06 00 00 db 80h, 24h, 04h, 06h, 00h, 00h
-31E4:E243 00 1B 09 07 00 00 db 00h, 1Bh, 09h, 07h, 00h, 00h
-31E4:E249 80 1D 09 08 00 00 db 80h, 1Dh, 09h, 08h, 00h, 00h
-31E4:E24F 80 1F 09 09 00 00 db 80h, 1Fh, 09h, 09h, 00h, 00h
-31E4:E255 80 24 04 0A 00 00 db 80h, 24h, 04h, 0Ah, 00h, 00h
-31E4:E25B 00 F6 08 FF FF 2D db 00h,0F6h, 08h,0FFh,0FFh, 2Dh
-31E4:E261 24 11 09 03 00 00 db 24h, 11h, 09h, 03h, 00h, 00h
-31E4:E267 00 13 09 04 00 00 db 00h, 13h, 09h, 04h, 00h, 00h
-31E4:E26D 00 15 09 05 00 00 db 00h, 15h, 09h, 05h, 00h, 00h
-31E4:E273 00 17 09 06 00 00 db 00h, 17h, 09h, 06h, 00h, 00h
-31E4:E279 00 19 09 07 00 D3 db 00h, 19h, 09h, 07h, 00h,0D3h
-31E4:E27F 23 1A 09 08 00 00 db 23h, 1Ah, 09h, 08h, 00h, 00h
-31E4:E285 00 1C 09 09 00 B9 db 00h, 1Ch, 09h, 09h, 00h,0B9h
-31E4:E28B 23 1E 09 0A 00 00 db 23h, 1Eh, 09h, 0Ah, 00h, 00h
-31E4:E291 00 20 09 0B 00 94 db 00h, 20h, 09h, 0Bh, 00h, 94h
-31E4:E297 23 24 04 FF FF 00 db 23h, 24h, 04h,0FFh,0FFh, 00h
-31E4:E29D 00 3D 09 FF FF 00 db 00h, 3Dh, 09h,0FFh,0FFh, 00h
-31E4:E2A3 00 3E 09 FF FF 00 db 00h, 3Eh, 09h,0FFh,0FFh, 00h
-31E4:E2A9 00 3F 09 08 00 BC db 00h, 3Fh, 09h, 08h, 00h,0BCh
-31E4:E2AF E2 4E 29 F8 0A 00 db 0E2h, 4Eh, 29h,0F8h, 0Ah, 00h
-31E4:E2B5 00 00 80 40 09 01 db 00h, 00h, 80h, 40h, 09h, 01h
-31E4:E2BB 00 00 00 F9 0A FF db 00h, 00h, 00h,0F9h, 0Ah,0FFh
-31E4:E2C1 FF 00 00 F7 0A FF db 0FFh, 00h, 00h,0F7h, 0Ah,0FFh
-31E4:E2C7 FF D6 E2 4E 29 F8 db 0FFh,0D6h,0E2h, 4Eh, 29h,0F8h
-31E4:E2CD 0A 00 00 00 80 48 db 0Ah, 00h, 00h, 00h, 80h, 48h
-31E4:E2D3 09 01 00 00 00 F9 db 09h, 01h, 00h, 00h, 00h,0F9h
-31E4:E2D9 0A FF FF 00 00 FA db 0Ah,0FFh,0FFh, 00h, 00h,0FAh
-31E4:E2DF 0A FF FF FC E2 4E db 0Ah,0FFh,0FFh,0FCh,0E2h, 4Eh
-31E4:E2E5 29 F8 0A 00 00 00 db 29h,0F8h, 0Ah, 00h, 00h, 00h
-31E4:E2EB 80 92 09 01 00 00 db 80h, 92h, 09h, 01h, 00h, 00h
-31E4:E2F1 00 FC 0A 02 00 00 db 00h,0FCh, 0Ah, 02h, 00h, 00h
-31E4:E2F7 80 FE 0A 03 00 00 db 80h,0FEh, 0Ah, 03h, 00h, 00h
-31E4:E2FD 00 F9 0A FF FF 00 db 00h,0F9h, 0Ah,0FFh,0FFh, 00h
-31E4:E303 00 FB 0A 02 00 00 db 00h,0FBh, 0Ah, 02h, 00h, 00h
-31E4:E309 00 FD 0A FF FF 00 db 00h,0FDh, 0Ah,0FFh,0FFh, 00h
-31E4:E30F 00 FF 0A FF FF 3A db 00h,0FFh, 0Ah,0FFh,0FFh, 3Ah
-31E4:E315 E3 00 00 38 0A 00 db 0E3h, 00h, 00h, 38h, 0Ah, 00h
-31E4:E31B 00 00 80 1F 0B 04 db 00h, 00h, 80h, 1Fh, 0Bh, 04h
-31E4:E321 00 00 00 19 0B 01 db 00h, 00h, 00h, 19h, 0Bh, 01h
-31E4:E327 00 00 80 1B 0B 02 db 00h, 00h, 80h, 1Bh, 0Bh, 02h
-31E4:E32D 00 00 80 1D 0B 03 db 00h, 00h, 80h, 1Dh, 0Bh, 03h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 557
-
-31E4:E333 00 00 80 21 0B 05 db 00h, 00h, 80h, 21h, 0Bh, 05h
-31E4:E339 00 00 00 18 0B 02 db 00h, 00h, 00h, 18h, 0Bh, 02h
-31E4:E33F 00 00 00 1A 0B FF db 00h, 00h, 00h, 1Ah, 0Bh,0FFh
-31E4:E345 FF 00 00 1C 0B 04 db 0FFh, 00h, 00h, 1Ch, 0Bh, 04h
-31E4:E34B 00 00 00 1E 0B FF db 00h, 00h, 00h, 1Eh, 0Bh,0FFh
-31E4:E351 FF 00 00 20 0B 05 db 0FFh, 00h, 00h, 20h, 0Bh, 05h
-31E4:E357 00 00 00 22 0B FF db 00h, 00h, 00h, 22h, 0Bh,0FFh
-31E4:E35D FF 78 E3 00 80 D5 db 0FFh, 78h,0E3h, 00h, 80h,0D5h
-31E4:E363 87 00 00 00 00 EF db 87h, 00h, 00h, 00h, 00h,0EFh
-31E4:E369 07 5D A0 00 80 F6 db 07h, 5Dh,0A0h, 00h, 80h,0F6h
-31E4:E36F 07 97 A0 00 80 F2 db 07h, 97h,0A0h, 00h, 80h,0F2h
-31E4:E375 07 05 00 00 00 4D db 07h, 05h, 00h, 00h, 00h, 4Dh
-31E4:E37B A0 01 00 00 00 F0 db 0A0h, 01h, 00h, 00h, 00h,0F0h
-31E4:E381 07 FF FF 00 00 F1 db 07h,0FFh,0FFh, 00h, 00h,0F1h
-31E4:E387 07 03 00 00 00 F7 db 07h, 03h, 00h, 00h, 00h,0F7h
-31E4:E38D 07 FF FF 00 00 F8 db 07h,0FFh,0FFh, 00h, 00h,0F8h
-31E4:E393 07 FF FF BE 20 F4 db 07h,0FFh,0FFh,0BEh, 20h,0F4h
-31E4:E399 07 FF FF AA E3 00 db 07h,0FFh,0FFh,0AAh,0E3h, 00h
-31E4:E39F 80 FD 07 00 00 00 db 80h,0FDh, 07h, 00h, 00h, 00h
-31E4:E3A5 80 FF 07 01 00 00 db 80h,0FFh, 07h, 01h, 00h, 00h
-31E4:E3AB 00 FE 07 01 00 00 db 00h,0FEh, 07h, 01h, 00h, 00h
-31E4:E3B1 00 24 04 FF FF D0 db 00h, 24h, 04h,0FFh,0FFh,0D0h
-31E4:E3B7 E3 00 80 1A 08 00 db 0E3h, 00h, 80h, 1Ah, 08h, 00h
-31E4:E3BD 00 00 80 1C 08 01 db 00h, 00h, 80h, 1Ch, 08h, 01h
-31E4:E3C3 00 00 80 1E 08 02 db 00h, 00h, 80h, 1Eh, 08h, 02h
-31E4:E3C9 00 00 80 24 04 03 db 00h, 00h, 80h, 24h, 04h, 03h
-31E4:E3CF 00 00 00 1B 08 01 db 00h, 00h, 00h, 1Bh, 08h, 01h
-31E4:E3D5 00 00 00 1D 08 02 db 00h, 00h, 00h, 1Dh, 08h, 02h
-31E4:E3DB 00 00 00 00 08 03 db 00h, 00h, 00h, 00h, 08h, 03h
-31E4:E3E1 00 E2 20 01 08 FF db 00h,0E2h, 20h, 01h, 08h,0FFh
-31E4:E3E7 FF F6 E3 00 00 22 db 0FFh,0F6h,0E3h, 00h, 00h, 22h
-31E4:E3ED 08 00 00 00 80 2C db 08h, 00h, 00h, 00h, 80h, 2Ch
-31E4:E3F3 08 01 00 00 00 46 db 08h, 01h, 00h, 00h, 00h, 46h
-31E4:E3F9 08 FF FF 00 00 A7 db 08h,0FFh,0FFh, 00h, 00h,0A7h
-31E4:E3FF 0A FF FF 0A E4 00 db 0Ah,0FFh,0FFh, 0Ah,0E4h, 00h
-31E4:E405 80 38 08 00 00 00 db 80h, 38h, 08h, 00h, 00h, 00h
-31E4:E40B 00 39 08 FF FF 2A db 00h, 39h, 08h,0FFh,0FFh, 2Ah
-31E4:E411 E4 00 80 57 0B 00 db 0E4h, 00h, 80h, 57h, 0Bh, 00h
-31E4:E417 00 00 00 59 0B 01 db 00h, 00h, 00h, 59h, 0Bh, 01h
-31E4:E41D 00 00 80 5B 0B 02 db 00h, 00h, 80h, 5Bh, 0Bh, 02h
-31E4:E423 00 00 80 24 04 03 db 00h, 00h, 80h, 24h, 04h, 03h
-31E4:E429 00 00 00 58 0B 01 db 00h, 00h, 00h, 58h, 0Bh, 01h
-31E4:E42F 00 00 00 5A 0B FF db 00h, 00h, 00h, 5Ah, 0Bh,0FFh
-31E4:E435 FF 00 00 5C 0B FF db 0FFh, 00h, 00h, 5Ch, 0Bh,0FFh
-31E4:E43B FF 00 00 24 04 FF db 0FFh, 00h, 00h, 24h, 04h,0FFh
-31E4:E441 FF 50 E4 00 80 24 db 0FFh, 50h,0E4h, 00h, 80h, 24h
-31E4:E447 04 00 00 00 80 E1 db 04h, 00h, 00h, 00h, 80h,0E1h
-31E4:E44D 07 01 00 00 00 E0 db 07h, 01h, 00h, 00h, 00h,0E0h
-31E4:E453 07 01 00 00 00 E2 db 07h, 01h, 00h, 00h, 00h,0E2h
-31E4:E459 07 FF FF A0 E4 00 db 07h,0FFh,0FFh,0A0h,0E4h, 00h
-31E4:E45F 80 E3 07 00 00 00 db 80h,0E3h, 07h, 00h, 00h, 00h
-31E4:E465 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E46B 00 E6 87 02 00 00 db 00h,0E6h, 87h, 02h, 00h, 00h
-31E4:E471 00 E9 07 04 00 00 db 00h,0E9h, 07h, 04h, 00h, 00h
-31E4:E477 80 F3 07 05 00 00 db 80h,0F3h, 07h, 05h, 00h, 00h
-31E4:E47D 80 24 04 03 00 00 db 80h, 24h, 04h, 03h, 00h, 00h
-31E4:E483 80 24 04 06 00 00 db 80h, 24h, 04h, 06h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 558
-
-31E4:E489 80 01 0B 07 00 00 db 80h, 01h, 0Bh, 07h, 00h, 00h
-31E4:E48F 80 03 0B 08 00 00 db 80h, 03h, 0Bh, 08h, 00h, 00h
-31E4:E495 80 05 0B 09 00 00 db 80h, 05h, 0Bh, 09h, 00h, 00h
-31E4:E49B 80 07 0B 0A 00 00 db 80h, 07h, 0Bh, 0Ah, 00h, 00h
-31E4:E4A1 00 E4 07 01 00 00 db 00h,0E4h, 07h, 01h, 00h, 00h
-31E4:E4A7 00 E5 07 02 00 00 db 00h,0E5h, 07h, 02h, 00h, 00h
-31E4:E4AD 00 E7 07 05 00 00 db 00h,0E7h, 07h, 05h, 00h, 00h
-31E4:E4B3 00 E8 07 03 00 00 db 00h,0E8h, 07h, 03h, 00h, 00h
-31E4:E4B9 00 EA 07 06 00 00 db 00h,0EAh, 07h, 06h, 00h, 00h
-31E4:E4BF 00 F5 07 FF FF 00 db 00h,0F5h, 07h,0FFh,0FFh, 00h
-31E4:E4C5 00 00 0B 07 00 00 db 00h, 00h, 0Bh, 07h, 00h, 00h
-31E4:E4CB 00 02 0B 08 00 00 db 00h, 02h, 0Bh, 08h, 00h, 00h
-31E4:E4D1 00 04 0B 09 00 00 db 00h, 04h, 0Bh, 09h, 00h, 00h
-31E4:E4D7 00 06 0B FF FF 00 db 00h, 06h, 0Bh,0FFh,0FFh, 00h
-31E4:E4DD 00 08 0B FF FF EA db 00h, 08h, 0Bh,0FFh,0FFh,0EAh
-31E4:E4E3 E4 69 A3 03 09 00 db 0E4h, 69h,0A3h, 03h, 09h, 00h
-31E4:E4E9 00 00 00 29 08 FF db 00h, 00h, 00h, 29h, 08h,0FFh
-31E4:E4EF FF F8 E4 00 80 24 db 0FFh,0F8h,0E4h, 00h, 80h, 24h
-31E4:E4F5 04 00 00 00 00 2A db 04h, 00h, 00h, 00h, 00h, 2Ah
-31E4:E4FB 08 FF FF 0C E5 db 08h,0FFh,0FFh, 0Ch,0E5h
-31E4:E500 8000 data_1185 dw 8000h ; xref 31E4:90E9
-31E4:E502 40 09 00 00 00 80 db 40h, 09h, 00h, 00h, 00h, 80h
-31E4:E508 69 0C 01 00 00 00 db 69h, 0Ch, 01h, 00h, 00h, 00h
-31E4:E50E 68 0C 01 00 00 00 db 68h, 0Ch, 01h, 00h, 00h, 00h
-31E4:E514 6A 0C FF FF 20 E5 db 6Ah, 0Ch,0FFh,0FFh, 20h,0E5h
-31E4:E51A 00 80 48 09 00 00 db 00h, 80h, 48h, 09h, 00h, 00h
-31E4:E520 00 00 00 0C FF FF db 00h, 00h, 00h, 0Ch,0FFh,0FFh
-31E4:E526 3A E5 00 80 24 04 db 3Ah,0E5h, 00h, 80h, 24h, 04h
-31E4:E52C 00 00 00 80 6C 0C db 00h, 00h, 00h, 80h, 6Ch, 0Ch
-31E4:E532 01 00 00 80 6E 0C db 01h, 00h, 00h, 80h, 6Eh, 0Ch
-31E4:E538 02 00 00 00 6B 0C db 02h, 00h, 00h, 00h, 6Bh, 0Ch
-31E4:E53E 01 00 00 00 6D 0C db 01h, 00h, 00h, 00h, 6Dh, 0Ch
-31E4:E544 02 00 00 00 6F 0C db 02h, 00h, 00h, 00h, 6Fh, 0Ch
-31E4:E54A FF FF 5A E5 00 80 db 0FFh,0FFh, 5Ah,0E5h, 00h, 80h
-31E4:E550 2E 0B 00 00 00 80 db 2Eh, 0Bh, 00h, 00h, 00h, 80h
-31E4:E556 71 0C 01 00 00 00 db 71h, 0Ch, 01h, 00h, 00h, 00h
-31E4:E55C 70 0C 01 00 00 00 db 70h, 0Ch, 01h, 00h, 00h, 00h
-31E4:E562 24 04 FF FF 7A E5 db 24h, 04h,0FFh,0FFh, 7Ah,0E5h
-31E4:E568 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:E56E 00 80 98 0C 01 00 db 00h, 80h, 98h, 0Ch, 01h, 00h
-31E4:E574 00 80 9A 0C 02 00 db 00h, 80h, 9Ah, 0Ch, 02h, 00h
-31E4:E57A 00 00 97 0C 01 00 db 00h, 00h, 97h, 0Ch, 01h, 00h
-31E4:E580 00 00 99 0C 02 00 db 00h, 00h, 99h, 0Ch, 02h, 00h
-31E4:E586 00 00 24 04 FF FF db 00h, 00h, 24h, 04h,0FFh,0FFh
-31E4:E58C 94 E5 00 80 38 0A db 94h,0E5h, 00h, 80h, 38h, 0Ah
-31E4:E592 00 00 00 00 08 0C db 00h, 00h, 00h, 00h, 08h, 0Ch
-31E4:E598 FF FF A2 E5 00 80 db 0FFh,0FFh,0A2h,0E5h, 00h, 80h
-31E4:E59E 78 00 00 00 00 00 db 78h, 00h, 00h, 00h, 00h, 00h
-31E4:E5A4 7D 00 FF FF CE E5 db 7Dh, 00h,0FFh,0FFh,0CEh,0E5h
-31E4:E5AA 00 80 24 04 00 00 db 00h, 80h, 24h, 04h, 00h, 00h
-31E4:E5B0 00 80 FB 00 02 00 db 00h, 80h,0FBh, 00h, 02h, 00h
-31E4:E5B6 00 80 F9 00 03 00 db 00h, 80h,0F9h, 00h, 03h, 00h
-31E4:E5BC 00 80 FC 00 04 00 db 00h, 80h,0FCh, 00h, 04h, 00h
-31E4:E5C2 00 80 FE 00 05 00 db 00h, 80h,0FEh, 00h, 05h, 00h
-31E4:E5C8 00 80 24 04 06 00 db 00h, 80h, 24h, 04h, 06h, 00h
-31E4:E5CE CF 1F FD 00 FF FF db 0CFh, 1Fh,0FDh, 00h,0FFh,0FFh
-31E4:E5D4 00 00 24 04 01 00 db 00h, 00h, 24h, 04h, 01h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 559
-
-31E4:E5DA 0B 20 00 01 02 00 db 0Bh, 20h, 00h, 01h, 02h, 00h
-31E4:E5E0 00 00 FF 00 03 00 db 00h, 00h,0FFh, 00h, 03h, 00h
-31E4:E5E6 00 00 01 01 04 00 db 00h, 00h, 01h, 01h, 04h, 00h
-31E4:E5EC 00 00 94 00 05 00 db 00h, 00h, 94h, 00h, 05h, 00h
-31E4:E5F2 E9 1F 24 04 FF FF db 0E9h, 1Fh, 24h, 04h,0FFh,0FFh
-31E4:E5F8 06 E6 00 80 F4 00 db 06h,0E6h, 00h, 80h,0F4h, 00h
-31E4:E5FE 00 00 00 80 F6 00 db 00h, 00h, 00h, 80h,0F6h, 00h
-31E4:E604 01 00 00 00 F5 00 db 01h, 00h, 00h, 00h,0F5h, 00h
-31E4:E60A 01 00 00 00 F7 00 db 01h, 00h, 00h, 00h,0F7h, 00h
-31E4:E610 FF FF 1A E6 00 80 db 0FFh,0FFh, 1Ah,0E6h, 00h, 80h
-31E4:E616 F9 07 00 00 00 00 db 0F9h, 07h, 00h, 00h, 00h, 00h
-31E4:E61C FA 07 FF FF 28 E6 db 0FAh, 07h,0FFh,0FFh, 28h,0E6h
-31E4:E622 00 80 FB 07 00 00 db 00h, 80h,0FBh, 07h, 00h, 00h
-31E4:E628 00 00 FC 07 FF FF db 00h, 00h,0FCh, 07h,0FFh,0FFh
-31E4:E62E 3C E6 00 80 C9 08 db 3Ch,0E6h, 00h, 80h,0C9h, 08h
-31E4:E634 00 00 00 80 24 04 db 00h, 00h, 00h, 80h, 24h, 04h
-31E4:E63A 01 00 00 00 CA 08 db 01h, 00h, 00h, 00h,0CAh, 08h
-31E4:E640 01 00 A8 22 24 04 db 01h, 00h,0A8h, 22h, 24h, 04h
-31E4:E646 FF FF 56 E6 00 00 db 0FFh,0FFh, 56h,0E6h, 00h, 00h
-31E4:E64C 2C 08 01 00 00 80 db 2Ch, 08h, 01h, 00h, 00h, 80h
-31E4:E652 22 08 00 00 00 00 db 22h, 08h, 00h, 00h, 00h, 00h
-31E4:E658 3B 08 FF FF 00 00 db 3Bh, 08h,0FFh,0FFh, 00h, 00h
-31E4:E65E D7 0A FF FF 6A E6 db 0D7h, 0Ah,0FFh,0FFh, 6Ah,0E6h
-31E4:E664 00 80 CB 08 00 00 db 00h, 80h,0CBh, 08h, 00h, 00h
-31E4:E66A 00 00 CC 08 FF FF db 00h, 00h,0CCh, 08h,0FFh,0FFh
-31E4:E670 78 E6 00 80 C9 08 db 78h,0E6h, 00h, 80h,0C9h, 08h
-31E4:E676 00 00 00 00 10 0A db 00h, 00h, 00h, 00h, 10h, 0Ah
-31E4:E67C FF FF 86 E6 00 80 db 0FFh,0FFh, 86h,0E6h, 00h, 80h
-31E4:E682 38 08 00 00 00 00 db 38h, 08h, 00h, 00h, 00h, 00h
-31E4:E688 3A 08 FF FF B2 E6 db 3Ah, 08h,0FFh,0FFh,0B2h,0E6h
-31E4:E68E 69 23 03 09 00 00 db 69h, 23h, 03h, 09h, 00h, 00h
-31E4:E694 00 80 C9 08 03 00 db 00h, 80h,0C9h, 08h, 03h, 00h
-31E4:E69A 0007[00] db 7 dup (0)
-31E4:E6A1 80 05 09 01 00 00 db 80h, 05h, 09h, 01h, 00h, 00h
-31E4:E6A7 80 07 09 02 00 00 db 80h, 07h, 09h, 02h, 00h, 00h
-31E4:E6AD 80 12 0A 04 00 00 db 80h, 12h, 0Ah, 04h, 00h, 00h
-31E4:E6B3 00 04 09 03 00 00 db 00h, 04h, 09h, 03h, 00h, 00h
-31E4:E6B9 00 06 09 04 00 00 db 00h, 06h, 09h, 04h, 00h, 00h
-31E4:E6BF 00 08 09 FF FF 00 db 00h, 08h, 09h,0FFh,0FFh, 00h
-31E4:E6C5 00 11 0A 05 00 00 db 00h, 11h, 0Ah, 05h, 00h, 00h
-31E4:E6CB 00 13 0A FF FF EA db 00h, 13h, 0Ah,0FFh,0FFh,0EAh
-31E4:E6D1 E6 00 80 C9 08 00 db 0E6h, 00h, 80h,0C9h, 08h, 00h
-31E4:E6D7 0009[00] db 9 dup (0)
-31E4:E6E0 15 0A 01 00 00 80 db 15h, 0Ah, 01h, 00h, 00h, 80h
-31E4:E6E6 17 0A 02 00 00 00 db 17h, 0Ah, 02h, 00h, 00h, 00h
-31E4:E6EC 14 0A 02 00 00 00 db 14h, 0Ah, 02h, 00h, 00h, 00h
-31E4:E6F2 16 0A FF FF 00 00 db 16h, 0Ah,0FFh,0FFh, 00h, 00h
-31E4:E6F8 18 0A FF FF 04 E7 db 18h, 0Ah,0FFh,0FFh, 04h,0E7h
-31E4:E6FE 00 80 C9 08 00 00 db 00h, 80h,0C9h, 08h, 00h, 00h
-31E4:E704 00 00 19 0A FF FF db 00h, 00h, 19h, 0Ah,0FFh,0FFh
-31E4:E70A 2A E7 00 00 1A 0A db 2Ah,0E7h, 00h, 00h, 1Ah, 0Ah
-31E4:E710 00 00 00 80 48 09 db 00h, 00h, 00h, 80h, 48h, 09h
-31E4:E716 02 db 02h
-31E4:E717 0008[00] db 8 dup (0)
-31E4:E71F 80 1C 0A 01 00 00 db 80h, 1Ch, 0Ah, 01h, 00h, 00h
-31E4:E725 80 1F 0A 03 00 00 db 80h, 1Fh, 0Ah, 03h, 00h, 00h
-31E4:E72B 00 1B 0A 03 00 00 db 00h, 1Bh, 0Ah, 03h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 560
-
-31E4:E731 00 1D 0A FF FF 00 db 00h, 1Dh, 0Ah,0FFh,0FFh, 00h
-31E4:E737 00 1E 0A 04 00 00 db 00h, 1Eh, 0Ah, 04h, 00h, 00h
-31E4:E73D 00 20 0A FF FF 4A db 00h, 20h, 0Ah,0FFh,0FFh, 4Ah
-31E4:E743 E7 00 80 C9 08 00 db 0E7h, 00h, 80h,0C9h, 08h, 00h
-31E4:E749 00 00 00 21 0A FF db 00h, 00h, 00h, 21h, 0Ah,0FFh
-31E4:E74F FF 6A E7 00 80 22 db 0FFh, 6Ah,0E7h, 00h, 80h, 22h
-31E4:E755 0A 00 00 00 80 24 db 0Ah, 00h, 00h, 00h, 80h, 24h
-31E4:E75B 04 01 00 00 80 25 db 04h, 01h, 00h, 00h, 80h, 25h
-31E4:E761 0A 02 00 00 80 27 db 0Ah, 02h, 00h, 00h, 80h, 27h
-31E4:E767 0A 03 00 00 00 23 db 0Ah, 03h, 00h, 00h, 00h, 23h
-31E4:E76D 0A 01 00 00 00 24 db 0Ah, 01h, 00h, 00h, 00h, 24h
-31E4:E773 0A 02 00 00 00 26 db 0Ah, 02h, 00h, 00h, 00h, 26h
-31E4:E779 0A 03 00 00 00 28 db 0Ah, 03h, 00h, 00h, 00h, 28h
-31E4:E77F 0A FF FF BA E7 4F db 0Ah,0FFh,0FFh,0BAh,0E7h, 4Fh
-31E4:E785 2A 88 0B 00 00 00 db 2Ah, 88h, 0Bh, 00h, 00h, 00h
-31E4:E78B 00 7D 0B 03 00 00 db 00h, 7Dh, 0Bh, 03h, 00h, 00h
-31E4:E791 80 38 0A 05 00 00 db 80h, 38h, 0Ah, 05h, 00h, 00h
-31E4:E797 80 8A 0B 01 00 00 db 80h, 8Ah, 0Bh, 01h, 00h, 00h
-31E4:E79D 80 8C 0B 02 00 00 db 80h, 8Ch, 0Bh, 02h, 00h, 00h
-31E4:E7A3 80 7F 0B 04 00 00 db 80h, 7Fh, 0Bh, 04h, 00h, 00h
-31E4:E7A9 80 82 0B 06 00 00 db 80h, 82h, 0Bh, 06h, 00h, 00h
-31E4:E7AF 80 84 0B 07 00 00 db 80h, 84h, 0Bh, 07h, 00h, 00h
-31E4:E7B5 80 86 0B 08 00 00 db 80h, 86h, 0Bh, 08h, 00h, 00h
-31E4:E7BB 00 89 0B 03 00 00 db 00h, 89h, 0Bh, 03h, 00h, 00h
-31E4:E7C1 00 8B 0B 04 00 00 db 00h, 8Bh, 0Bh, 04h, 00h, 00h
-31E4:E7C7 00 8D 0B FF FF 00 db 00h, 8Dh, 0Bh,0FFh,0FFh, 00h
-31E4:E7CD 00 7E 0B 05 00 00 db 00h, 7Eh, 0Bh, 05h, 00h, 00h
-31E4:E7D3 00 80 0B FF FF 00 db 00h, 80h, 0Bh,0FFh,0FFh, 00h
-31E4:E7D9 00 81 0B 06 00 00 db 00h, 81h, 0Bh, 06h, 00h, 00h
-31E4:E7DF 00 83 0B 07 00 00 db 00h, 83h, 0Bh, 07h, 00h, 00h
-31E4:E7E5 00 85 0B 08 00 00 db 00h, 85h, 0Bh, 08h, 00h, 00h
-31E4:E7EB 00 87 0B FF FF 0A db 00h, 87h, 0Bh,0FFh,0FFh, 0Ah
-31E4:E7F1 E8 00 80 24 84 00 db 0E8h, 00h, 80h, 24h, 84h, 00h
-31E4:E7F7 00 00 80 5F 08 03 db 00h, 00h, 80h, 5Fh, 08h, 03h
-31E4:E7FD 00 00 80 58 08 01 db 00h, 00h, 80h, 58h, 08h, 01h
-31E4:E803 00 00 80 5D 08 02 db 00h, 00h, 80h, 5Dh, 08h, 02h
-31E4:E809 00 00 00 57 08 02 db 00h, 00h, 00h, 57h, 08h, 02h
-31E4:E80F 00 00 00 5C 08 03 db 00h, 00h, 00h, 5Ch, 08h, 03h
-31E4:E815 00 82 21 5E 08 FF db 00h, 82h, 21h, 5Eh, 08h,0FFh
-31E4:E81B FF 00 00 60 08 FF db 0FFh, 00h, 00h, 60h, 08h,0FFh
-31E4:E821 FF 3C E8 00 00 B2 db 0FFh, 3Ch,0E8h, 00h, 00h,0B2h
-31E4:E827 00 00 00 00 00 B3 db 00h, 00h, 00h, 00h, 00h,0B3h
-31E4:E82D 00 01 00 00 80 B4 db 00h, 01h, 00h, 00h, 80h,0B4h
-31E4:E833 00 02 00 00 80 F2 db 00h, 02h, 00h, 00h, 80h,0F2h
-31E4:E839 00 03 00 FD 06 C1 db 00h, 03h, 00h,0FDh, 06h,0C1h
-31E4:E83F 00 FF FF FD 06 C2 db 00h,0FFh,0FFh,0FDh, 06h,0C2h
-31E4:E845 00 FF FF FD 06 C7 db 00h,0FFh,0FFh,0FDh, 06h,0C7h
-31E4:E84B 00 03 00 00 00 F3 db 00h, 03h, 00h, 00h, 00h,0F3h
-31E4:E851 00 FF FF 5C E8 00 db 00h,0FFh,0FFh, 5Ch,0E8h, 00h
-31E4:E857 80 31 01 00 00 00 db 80h, 31h, 01h, 00h, 00h, 00h
-31E4:E85D 00 32 01 FF FF 70 db 00h, 32h, 01h,0FFh,0FFh, 70h
-31E4:E863 E8 00 80 24 04 00 db 0E8h, 00h, 80h, 24h, 04h, 00h
-31E4:E869 00 00 80 D9 0A 01 db 00h, 00h, 80h,0D9h, 0Ah, 01h
-31E4:E86F 00 00 00 D8 0A 01 db 00h, 00h, 00h,0D8h, 0Ah, 01h
-31E4:E875 00 00 00 DA 0A FF db 00h, 00h, 00h,0DAh, 0Ah,0FFh
-31E4:E87B FF 8A E8 00 80 D0 db 0FFh, 8Ah,0E8h, 00h, 80h,0D0h
-31E4:E881 07 00 00 00 80 24 db 07h, 00h, 00h, 00h, 80h, 24h
-31E4:E887 04 01 00 00 00 D1 db 04h, 01h, 00h, 00h, 00h,0D1h
-31E4:E88D 07 01 00 00 00 D2 db 07h, 01h, 00h, 00h, 00h,0D2h
-31E4:E893 07 FF FF B0 E8 00 db 07h,0FFh,0FFh,0B0h,0E8h, 00h
-31E4:E899 80 db 80h
-31E4:E89A 22 08 db 22h, 08h
-31E4:E89C 0009[00] db 9 dup (0)
-31E4:E8A5 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E8AB 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:E8B1 00 3C 08 02 00 00 db 00h, 3Ch, 08h, 02h, 00h, 00h
-31E4:E8B7 00 3D 08 03 00 00 db 00h, 3Dh, 08h, 03h, 00h, 00h
-31E4:E8BD 00 3E 08 FF FF E8 db 00h, 3Eh, 08h,0FFh,0FFh,0E8h
-31E4:E8C3 E8 00 80 db 0E8h, 00h, 80h
-31E4:E8C6 38 08 db 38h, 08h
-31E4:E8C8 0009[00] db 9 dup (0)
-31E4:E8D1 80 40 08 01 00 00 db 80h, 40h, 08h, 01h, 00h, 00h
-31E4:E8D7 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:E8DD 80 24 04 03 00 00 db 80h, 24h, 04h, 03h, 00h, 00h
-31E4:E8E3 80 44 08 04 00 00 db 80h, 44h, 08h, 04h, 00h, 00h
-31E4:E8E9 00 3F 08 02 00 00 db 00h, 3Fh, 08h, 02h, 00h, 00h
-31E4:E8EF 00 41 08 03 00 00 db 00h, 41h, 08h, 03h, 00h, 00h
-31E4:E8F5 00 42 08 04 00 00 db 00h, 42h, 08h, 04h, 00h, 00h
-31E4:E8FB 00 43 08 05 00 db 00h, 43h, 08h, 05h, 00h
-31E4:E900 00 data_1191 db 0 ; Data table (indexed access)
-31E4:E901 00 45 08 FF FF 1A db 00h, 45h, 08h,0FFh,0FFh, 1Ah
-31E4:E907 E9 00 80 FB 07 db 0E9h, 00h, 80h,0FBh, 07h
-31E4:E90C 0009[00] db 9 dup (0)
-31E4:E915 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E91B 00 08 08 02 00 00 db 00h, 08h, 08h, 02h, 00h, 00h
-31E4:E921 00 09 08 FF FF 52 db 00h, 09h, 08h,0FFh,0FFh, 52h
-31E4:E927 E9 00 80 D5 87 00 db 0E9h, 00h, 80h,0D5h, 87h, 00h
-31E4:E92D 00 00 80 24 84 01 db 00h, 00h, 80h, 24h, 84h, 01h
-31E4:E933 00 00 80 24 84 02 db 00h, 00h, 80h, 24h, 84h, 02h
-31E4:E939 00 2B A0 D9 07 03 db 00h, 2Bh,0A0h,0D9h, 07h, 03h
-31E4:E93F 00 db 00h
-31E4:E940 0007[00] db 7 dup (0)
-31E4:E947 80 24 04 04 00 00 db 80h, 24h, 04h, 04h, 00h, 00h
-31E4:E94D 80 24 04 05 00 00 db 80h, 24h, 04h, 05h, 00h, 00h
-31E4:E953 00 1B A0 01 00 00 db 00h, 1Bh,0A0h, 01h, 00h, 00h
-31E4:E959 00 D7 07 02 00 00 db 00h,0D7h, 07h, 02h, 00h, 00h
-31E4:E95F 00 D8 07 FF FF 00 db 00h,0D8h, 07h,0FFh,0FFh, 00h
-31E4:E965 00 DA 07 05 00 00 db 00h,0DAh, 07h, 05h, 00h, 00h
-31E4:E96B 00 DB 07 06 00 00 db 00h,0DBh, 07h, 06h, 00h, 00h
-31E4:E971 00 DC 07 FF FF 90 db 00h,0DCh, 07h,0FFh,0FFh, 90h
-31E4:E977 E9 00 80 db 0E9h, 00h, 80h
-31E4:E97A 29 0A db 29h, 0Ah
-31E4:E97C 0009[00] db 9 dup (0)
-31E4:E985 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E98B 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:E991 00 2A 0A 02 00 00 db 00h, 2Ah, 0Ah, 02h, 00h, 00h
-31E4:E997 00 2B 0A 03 00 00 db 00h, 2Bh, 0Ah, 03h, 00h, 00h
-31E4:E99D 00 2C 0A FF FF B0 db 00h, 2Ch, 0Ah,0FFh,0FFh,0B0h
-31E4:E9A3 E9 00 80 24 04 00 db 0E9h, 00h, 80h, 24h, 04h, 00h
-31E4:E9A9 00 00 80 24 04 01 db 00h, 00h, 80h, 24h, 04h, 01h
-31E4:E9AF 00 00 00 77 09 01 db 00h, 00h, 00h, 77h, 09h, 01h
-31E4:E9B5 00 00 00 78 09 FF db 00h, 00h, 00h, 78h, 09h,0FFh
-31E4:E9BB FF C4 E9 00 80 CA db 0FFh,0C4h,0E9h, 00h, 80h,0CAh
-31E4:E9C1 09 00 db 09h, 00h
-31E4:E9C3 00 00 00 CB 09 FF db 00h, 00h, 00h,0CBh, 09h,0FFh
-31E4:E9C9 FF EA E9 69 A3 03 db 0FFh,0EAh,0E9h, 69h,0A3h, 03h
-31E4:E9CF 09 00 00 00 80 24 db 09h, 00h, 00h, 00h, 80h, 24h
-31E4:E9D5 04 02 00 db 04h, 02h, 00h
-31E4:E9D8 0007[00] db 7 dup (0)
-31E4:E9DF 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:E9E5 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:E9EB 00 79 09 03 00 00 db 00h, 79h, 09h, 03h, 00h, 00h
-31E4:E9F1 00 7A 09 04 00 00 db 00h, 7Ah, 09h, 04h, 00h, 00h
-31E4:E9F7 00 7B 09 FF FF 0A db 00h, 7Bh, 09h,0FFh,0FFh, 0Ah
-31E4:E9FD EA 00 80 24 04 00 db 0EAh, 00h, 80h, 24h, 04h, 00h
-31E4:EA03 00 00 80 CD 09 01 db 00h, 00h, 80h,0CDh, 09h, 01h
-31E4:EA09 00 00 00 CC 09 01 db 00h, 00h, 00h,0CCh, 09h, 01h
-31E4:EA0F 00 00 00 45 08 FF db 00h, 00h, 00h, 45h, 08h,0FFh
-31E4:EA15 FF 30 EA 00 80 db 0FFh, 30h,0EAh, 00h, 80h
-31E4:EA1A 40 09 db 40h, 09h
-31E4:EA1C 0009[00] db 9 dup (0)
-31E4:EA25 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:EA2B 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:EA31 00 CF 09 02 00 00 db 00h,0CFh, 09h, 02h, 00h, 00h
-31E4:EA37 00 D0 09 03 00 00 db 00h,0D0h, 09h, 03h, 00h, 00h
-31E4:EA3D 00 D1 09 FF FF 5C db 00h,0D1h, 09h,0FFh,0FFh, 5Ch
-31E4:EA43 EA 00 80 db 0EAh, 00h, 80h
-31E4:EA46 48 09 db 48h, 09h
-31E4:EA48 0009[00] db 9 dup (0)
-31E4:EA51 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:EA57 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:EA5D 00 B7 09 02 00 00 db 00h,0B7h, 09h, 02h, 00h, 00h
-31E4:EA63 00 B8 09 03 00 00 db 00h,0B8h, 09h, 03h, 00h, 00h
-31E4:EA69 00 B9 09 FF FF 8E db 00h,0B9h, 09h,0FFh,0FFh, 8Eh
-31E4:EA6F EA 00 80 92 09 00 db 0EAh, 00h, 80h, 92h, 09h, 00h
-31E4:EA75 00 db 00h
-31E4:EA76 0007[00] db 7 dup (0)
-31E4:EA7D 80 24 04 03 00 00 db 80h, 24h, 04h, 03h, 00h, 00h
-31E4:EA83 80 BC 09 04 00 00 db 80h,0BCh, 09h, 04h, 00h, 00h
-31E4:EA89 80 24 04 02 00 DC db 80h, 24h, 04h, 02h, 00h,0DCh
-31E4:EA8F 27 BA 09 02 00 00 db 27h,0BAh, 09h, 02h, 00h, 00h
-31E4:EA95 00 BE 09 04 00 00 db 00h,0BEh, 09h, 04h, 00h, 00h
-31E4:EA9B 00 BF 09 FF FF 00 db 00h,0BFh, 09h,0FFh,0FFh, 00h
-31E4:EAA1 00 BB 09 03 00 E7 db 00h,0BBh, 09h, 03h, 00h,0E7h
-31E4:EAA7 26 BD 09 FF FF C0 db 26h,0BDh, 09h,0FFh,0FFh,0C0h
-31E4:EAAD EA 00 80 75 0C 00 db 0EAh, 00h, 80h, 75h, 0Ch, 00h
-31E4:EAB3 00 00 80 24 04 01 db 00h, 00h, 80h, 24h, 04h, 01h
-31E4:EAB9 00 00 80 24 04 02 db 00h, 00h, 80h, 24h, 04h, 02h
-31E4:EABF 00 00 00 76 0C 01 db 00h, 00h, 00h, 76h, 0Ch, 01h
-31E4:EAC5 00 00 00 77 0C 02 db 00h, 00h, 00h, 77h, 0Ch, 02h
-31E4:EACB 00 00 00 78 0C FF db 00h, 00h, 00h, 78h, 0Ch,0FFh
-31E4:EAD1 FF E6 EA 00 80 C0 db 0FFh,0E6h,0EAh, 00h, 80h,0C0h
-31E4:EAD7 09 00 00 00 80 A9 db 09h, 00h, 00h, 00h, 80h,0A9h
-31E4:EADD 09 02 00 00 80 24 db 09h, 02h, 00h, 00h, 80h, 24h
-31E4:EAE3 04 03 00 17 27 AB db 04h, 03h, 00h, 17h, 27h,0ABh
-31E4:EAE9 09 FF FF 00 00 C1 db 09h,0FFh,0FFh, 00h, 00h,0C1h
-31E4:EAEF 09 01 00 00 00 C2 db 09h, 01h, 00h, 00h, 00h,0C2h
-31E4:EAF5 09 02 00 F3 27 24 db 09h, 02h, 00h,0F3h, 27h, 24h
-31E4:EAFB 04 FF FF 12 EB 00 db 04h,0FFh,0FFh, 12h,0EBh, 00h
-31E4:EB01 80 38 0A 00 00 00 db 80h, 38h, 0Ah, 00h, 00h, 00h
-31E4:EB07 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:EB0D 80 24 04 02 00 00 db 80h, 24h, 04h, 02h, 00h, 00h
-31E4:EB13 00 23 0B 01 00 00 db 00h, 23h, 0Bh, 01h, 00h, 00h
-31E4:EB19 00 24 0B 02 00 00 db 00h, 24h, 0Bh, 02h, 00h, 00h
-31E4:EB1F 00 25 0B FF FF
-
-31E4:EB24 EB56 skorl_talk_0 dw offset skorl_responses
-31E4:EB26 00 00 AF 00 01 db 00h, 00h,0AFh, 00h, 01h
-31E4:EB2B 00 00 00 B0 00 01 db 00h, 00h, 00h,0B0h, 00h, 01h
-31E4:EB31 00 00 80 B1 00 02 db 00h, 00h, 80h,0B1h, 00h, 02h
-31E4:EB37 00 00 00 B5 00 03 db 00h, 00h, 00h,0B5h, 00h, 03h
-31E4:EB3D 00 00 00 B6 00 04 db 00h, 00h, 00h,0B6h, 00h, 04h
-31E4:EB43 00 00 80 B7 00 05 db 00h, 00h, 80h,0B7h, 00h, 05h
-31E4:EB49 00 00 00 B8 00 06 db 00h, 00h, 00h,0B8h, 00h, 06h
-31E4:EB4F 00 00 80 B9 00 07 db 00h, 00h, 80h,0B9h, 00h, 07h
-31E4:EB55 00 db 00h
-
-31E4:EB56 0000 00BF FFFF skorl_responses dw 0000h, 00BFh, 0FFFFh
-31E4:EB5C 1FA8 00BE 0003
-31E4:EB62 1FC2 00C0 FFFF
-31E4:EB68 0000 00C4 FFFF
-31E4:EB6E 0000 00C3 FFFF
-31E4:EB74 0000 00C6 0006
-31E4:EB7A 0000 00C5 FFFF
-31E4:EB80 0000 00C8 FFFF
-31E4:EB86 EBA6 8000 099E
-
-
-31E4:EB86 A6 EB 00 80 9E db 0A6h,0EBh, 00h, 80h, 9Eh
-31E4:EB8B 09 00 00 00 80 A0 db 09h, 00h, 00h, 00h, 80h,0A0h
-31E4:EB91 09 01 00 00 80 A2 db 09h, 01h, 00h, 00h, 80h,0A2h
-31E4:EB97 09 02 00 00 80 6C db 09h, 02h, 00h, 00h, 80h, 6Ch
-31E4:EB9D 09 03 00 00 80 A5 db 09h, 03h, 00h, 00h, 80h,0A5h
-31E4:EBA3 09 04 00 00 00 9F db 09h, 04h, 00h, 00h, 00h, 9Fh
-31E4:EBA9 09 01 00 00 00 A1 db 09h, 01h, 00h, 00h, 00h,0A1h
-31E4:EBAF 09 02 00 00 00 A3 db 09h, 02h, 00h, 00h, 00h,0A3h
-31E4:EBB5 09 03 00 00 00 A4 db 09h, 03h, 00h, 00h, 00h,0A4h
-31E4:EBBB 09 04 00 C1 26 A6 db 09h, 04h, 00h,0C1h, 26h,0A6h
-31E4:EBC1 09 FF FF CC EB 00 db 09h,0FFh,0FFh,0CCh,0EBh, 00h
-31E4:EBC7 80 7A 0A 00 00 00 db 80h, 7Ah, 0Ah, 00h, 00h, 00h
-31E4:EBCD 00 7B 0A FF FF DA db 00h, 7Bh, 0Ah,0FFh,0FFh,0DAh
-31E4:EBD3 EB 00 80 9E 09 00 db 0EBh, 00h, 80h, 9Eh, 09h, 00h
-31E4:EBD9 00 00 00 79 0A FF db 00h, 00h, 00h, 79h, 0Ah,0FFh
-31E4:EBDF FF E8 EB 00 80 9E db 0FFh,0E8h,0EBh, 00h, 80h, 9Eh
-31E4:EBE5 09 00 00 00 00 24 db 09h, 00h, 00h, 00h, 00h, 24h
-31E4:EBEB 04 FF FF 32 EC 00 db 04h,0FFh,0FFh, 32h,0ECh, 00h
-31E4:EBF1 80 FB 09 00 00 00 db 80h,0FBh, 09h, 00h, 00h, 00h
-31E4:EBF7 00 FD 89 02 00 00 db 00h,0FDh, 89h, 02h, 00h, 00h
-31E4:EBFD 00 FF 89 03 00 00 db 00h,0FFh, 89h, 03h, 00h, 00h
-31E4:EC03 80 01 0A 04 00 00 db 80h, 01h, 0Ah, 04h, 00h, 00h
-31E4:EC09 80 69 08 05 00 00 db 80h, 69h, 08h, 05h, 00h, 00h
-31E4:EC0F 80 24 04 06 00 00 db 80h, 24h, 04h, 06h, 00h, 00h
-31E4:EC15 80 24 04 07 00 00 db 80h, 24h, 04h, 07h, 00h, 00h
-31E4:EC1B 80 06 0A 08 00 00 db 80h, 06h, 0Ah, 08h, 00h, 00h
-31E4:EC21 80 08 0A 09 00 00 db 80h, 08h, 0Ah, 09h, 00h, 00h
-31E4:EC27 80 0A 0A 0A 00 00 db 80h, 0Ah, 0Ah, 0Ah, 00h, 00h
-31E4:EC2D 80 0C 0A 0B 00 78 db 80h, 0Ch, 0Ah, 0Bh, 00h, 78h
-31E4:EC33 28 24 04 FF FF 00 db 28h, 24h, 04h,0FFh,0FFh, 00h
-31E4:EC39 00 FC 09 01 00 00 db 00h,0FCh, 09h, 01h, 00h, 00h
-31E4:EC3F 00 FE 09 01 00 00 db 00h,0FEh, 09h, 01h, 00h, 00h
-31E4:EC45 00 00 0A 01 00 00 db 00h, 00h, 0Ah, 01h, 00h, 00h
-31E4:EC4B 00 02 0A 04 00 00 db 00h, 02h, 0Ah, 04h, 00h, 00h
-31E4:EC51 00 03 0A 05 00 00 db 00h, 03h, 0Ah, 05h, 00h, 00h
-31E4:EC57 00 04 0A 07 00 00 db 00h, 04h, 0Ah, 07h, 00h, 00h
-31E4:EC5D 00 05 0A 07 00 00 db 00h, 05h, 0Ah, 07h, 00h, 00h
-31E4:EC63 00 07 0A 08 00 00 db 00h, 07h, 0Ah, 08h, 00h, 00h
-31E4:EC69 00 09 0A 09 00 A5 db 00h, 09h, 0Ah, 09h, 00h,0A5h
-31E4:EC6F 28 0B 0A 0A 00 00 db 28h, 0Bh, 0Ah, 0Ah, 00h, 00h
-31E4:EC75 00 24 04 FF FF 82 db 00h, 24h, 04h,0FFh,0FFh, 82h
-31E4:EC7B EC 00 80 05 0A 00 db 0ECh, 00h, 80h, 05h, 0Ah, 00h
-31E4:EC81 00 00 00 24 04 FF db 00h, 00h, 00h, 24h, 04h,0FFh
-31E4:EC87 FF 9C EC 00 80 D5 db 0FFh, 9Ch,0ECh, 00h, 80h,0D5h
-31E4:EC8D 07 00 00 00 00 85 db 07h, 00h, 00h, 00h, 00h, 85h
-31E4:EC93 0A 01 00 00 80 87 db 0Ah, 01h, 00h, 00h, 80h, 87h
-31E4:EC99 0A 02 00 E1 28 84 db 0Ah, 02h, 00h,0E1h, 28h, 84h
-31E4:EC9F 0A 01 00 00 00 86 db 0Ah, 01h, 00h, 00h, 00h, 86h
-31E4:ECA5 0A FF FF 00 00 88 db 0Ah,0FFh,0FFh, 00h, 00h, 88h
-31E4:ECAB 0A FF FF B6 EC 00 db 0Ah,0FFh,0FFh,0B6h,0ECh, 00h
-31E4:ECB1 80 F9 07 00 00 00 db 80h,0F9h, 07h, 00h, 00h, 00h
-31E4:ECB7 00 89 0A FF FF C4 db 00h, 89h, 0Ah,0FFh,0FFh,0C4h
-31E4:ECBD EC 00 80 FB 07 00 db 0ECh, 00h, 80h,0FBh, 07h, 00h
-31E4:ECC3 00 00 00 8A 0A FF db 00h, 00h, 00h, 8Ah, 0Ah,0FFh
-31E4:ECC9 FF D8 EC 00 00 22 db 0FFh,0D8h,0ECh, 00h, 00h, 22h
-31E4:ECCF 08 00 00 00 80 2C db 08h, 00h, 00h, 00h, 80h, 2Ch
-31E4:ECD5 08 01 00 00 00 8B db 08h, 01h, 00h, 00h, 00h, 8Bh
-31E4:ECDB 0A FF FF 00 00 8C db 0Ah,0FFh,0FFh, 00h, 00h, 8Ch
-31E4:ECE1 0A FF FF EC EC 00 db 0Ah,0FFh,0FFh,0ECh,0ECh, 00h
-31E4:ECE7 80 38 08 00 00 00 db 80h, 38h, 08h, 00h, 00h, 00h
-31E4:ECED 00 8D 0A FF FF 00 db 00h, 8Dh, 0Ah,0FFh,0FFh, 00h
-31E4:ECF3 ED 00 80 24 04 00 db 0EDh, 00h, 80h, 24h, 04h, 00h
-31E4:ECF9 00 00 80 8F 0A 01 db 00h, 00h, 80h, 8Fh, 0Ah, 01h
-31E4:ECFF 00 00 00 8E 0A 01 db 00h, 00h, 00h, 8Eh, 0Ah, 01h
-31E4:ED05 00 00 00 90 0A FF db 00h, 00h, 00h, 90h, 0Ah,0FFh
-31E4:ED0B FF 20 ED 00 80 CA db 0FFh, 20h,0EDh, 00h, 80h,0CAh
-31E4:ED11 09 00 00 00 80 92 db 09h, 00h, 00h, 00h, 80h, 92h
-31E4:ED17 0A 01 00 00 80 94 db 0Ah, 01h, 00h, 00h, 80h, 94h
-31E4:ED1D 0A 02 00 00 00 91 db 0Ah, 02h, 00h, 00h, 00h, 91h
-31E4:ED23 0A 01 00 00 00 93 db 0Ah, 01h, 00h, 00h, 00h, 93h
-31E4:ED29 0A 02 00 00 00 95 db 0Ah, 02h, 00h, 00h, 00h, 95h
-31E4:ED2F 0A FF FF 40 ED 00 db 0Ah,0FFh,0FFh, 40h,0EDh, 00h
-31E4:ED35 80 40 09 00 00 00 db 80h, 40h, 09h, 00h, 00h, 00h
-31E4:ED3B 80 24 04 01 00 00 db 80h, 24h, 04h, 01h, 00h, 00h
-31E4:ED41 00 0A 0B 01 00 00 db 00h, 0Ah, 0Bh, 01h, 00h, 00h
-31E4:ED47 00 0B 0B FF FF 60 db 00h, 0Bh, 0Bh,0FFh,0FFh, 60h
-31E4:ED4D ED 69 23 03 09 00 db 0EDh, 69h, 23h, 03h, 09h, 00h
-31E4:ED53 00 00 80 99 0A 02 db 00h, 00h, 80h, 99h, 0Ah, 02h
-31E4:ED59 00 00 80 97 0A 01 db 00h, 00h, 80h, 97h, 0Ah, 01h
-31E4:ED5F 00 00 00 96 0A 02 db 00h, 00h, 00h, 96h, 0Ah, 02h
-31E4:ED65 00 00 00 98 0A FF db 00h, 00h, 00h, 98h, 0Ah,0FFh
-31E4:ED6B FF 00 00 9A 0A FF db 0FFh, 00h, 00h, 9Ah, 0Ah,0FFh
-31E4:ED71 FF 86 ED 00 00 40 db 0FFh, 86h,0EDh, 00h, 00h, 40h
-31E4:ED77 09 00 00 00 80 9C db 09h, 00h, 00h, 00h, 80h, 9Ch
-31E4:ED7D 0A 01 00 00 80 24 db 0Ah, 01h, 00h, 00h, 80h, 24h
-31E4:ED83 04 02 00 00 00 9B db 04h, 02h, 00h, 00h, 00h, 9Bh
-31E4:ED89 0A FF FF 00 00 9D db 0Ah,0FFh,0FFh, 00h, 00h, 9Dh
-31E4:ED8F 0A 02 00 00 00 9E db 0Ah, 02h, 00h, 00h, 00h, 9Eh
-31E4:ED95 0A FF FF AC ED 00 db 0Ah,0FFh,0FFh,0ACh,0EDh, 00h
-31E4:ED9B 80 48 09 00 00 00 db 80h, 48h, 09h, 00h, 00h, 00h
-31E4:EDA1 80 A3 0A 01 00 00 db 80h,0A3h, 0Ah, 01h, 00h, 00h
-31E4:EDA7 80 D1 0A 02 00 00 db 80h,0D1h, 0Ah, 02h, 00h, 00h
-31E4:EDAD 00 A2 0A 01 00 00 db 00h,0A2h, 0Ah, 01h, 00h, 00h
-31E4:EDB3 00 A4 0A 02 00 00 db 00h,0A4h, 0Ah, 02h, 00h, 00h
-31E4:EDB9 00 A5 0A FF FF C6 db 00h,0A5h, 0Ah,0FFh,0FFh,0C6h
-31E4:EDBF ED 00 80 92 09 00 db 0EDh, 00h, 80h, 92h, 09h, 00h
-31E4:EDC5 00 00 00 D2 0A FF db 00h, 00h, 00h,0D2h, 0Ah,0FFh
-31E4:EDCB FF E0 ED 00 80 38 db 0FFh,0E0h,0EDh, 00h, 80h, 38h
-31E4:EDD1 0A 00 00 00 80 D4 db 0Ah, 00h, 00h, 00h, 80h,0D4h
-31E4:EDD7 0A 01 00 00 80 D6 db 0Ah, 01h, 00h, 00h, 80h,0D6h
-31E4:EDDD 0A 02 00 00 00 D3 db 0Ah, 02h, 00h, 00h, 00h,0D3h
-31E4:EDE3 0A 01 00 00 00 D5 db 0Ah, 01h, 00h, 00h, 00h,0D5h
-31E4:EDE9 0A 02 00 00 00 24 db 0Ah, 02h, 00h, 00h, 00h, 24h
-31E4:EDEF 04 FF FF 12 EE 00 db 04h,0FFh,0FFh, 12h,0EEh, 00h
-31E4:EDF5 80 C9 0A 00 00 00 db 80h,0C9h, 0Ah, 00h, 00h, 00h
-31E4:EDFB 80 CB 0A 01 00 00 db 80h,0CBh, 0Ah, 01h, 00h, 00h
-31E4:EE01 80 CD 0A 02 00 00 db 80h,0CDh, 0Ah, 02h, 00h, 00h
-31E4:EE07 80 CD 0A 03 00 00 db 80h,0CDh, 0Ah, 03h, 00h, 00h
-31E4:EE0D 80 24 04 04 00 00 db 80h, 24h, 04h, 04h, 00h, 00h
-31E4:EE13 00 CA 0A 01 00 00 db 00h,0CAh, 0Ah, 01h, 00h, 00h
-31E4:EE19 00 CC 0A 02 00 00 db 00h,0CCh, 0Ah, 02h, 00h, 00h
-31E4:EE1F 00 CE 0A 03 00 00 db 00h,0CEh, 0Ah, 03h, 00h, 00h
-31E4:EE25 00 CF 0A 04 00 FE db 00h,0CFh, 0Ah, 04h, 00h,0FEh
-31E4:EE2B 28 24 04 FF FF 44 db 28h, 24h, 04h,0FFh,0FFh, 44h
-31E4:EE31 EE 00 80 77 0B 00 db 0EEh, 00h, 80h, 77h, 0Bh, 00h
-31E4:EE37 00 00 80 79 0B 01 db 00h, 00h, 80h, 79h, 0Bh, 01h
-31E4:EE3D 00 00 80 7B 0B 02 db 00h, 00h, 80h, 7Bh, 0Bh, 02h
-31E4:EE43 00 00 00 78 0B 01 db 00h, 00h, 00h, 78h, 0Bh, 01h
-31E4:EE49 00 00 00 7A 0B 02 db 00h, 00h, 00h, 7Ah, 0Bh, 02h
-31E4:EE4F 00 00 00 7C 0B FF db 00h, 00h, 00h, 7Ch, 0Bh,0FFh
-31E4:EE55 FF 82 EE 00 80 BA db 0FFh, 82h,0EEh, 00h, 80h,0BAh
-31E4:EE5B 0A 00 00 00 80 BC db 0Ah, 00h, 00h, 00h, 80h,0BCh
-31E4:EE61 0A 01 00 00 80 BE db 0Ah, 01h, 00h, 00h, 80h,0BEh
-31E4:EE67 0A 02 00 00 80 C0 db 0Ah, 02h, 00h, 00h, 80h,0C0h
-31E4:EE6D 0A 03 00 00 80 C2 db 0Ah, 03h, 00h, 00h, 80h,0C2h
-31E4:EE73 0A 04 00 00 80 C4 db 0Ah, 04h, 00h, 00h, 80h,0C4h
-31E4:EE79 0A 05 00 00 80 C6 db 0Ah, 05h, 00h, 00h, 80h,0C6h
-31E4:EE7F 0A 06 00 00 00 BB db 0Ah, 06h, 00h, 00h, 00h,0BBh
-31E4:EE85 0A 01 00 00 00 BD db 0Ah, 01h, 00h, 00h, 00h,0BDh
-31E4:EE8B 0A 02 00 00 00 BF db 0Ah, 02h, 00h, 00h, 00h,0BFh
-31E4:EE91 0A 03 00 00 00 C1 db 0Ah, 03h, 00h, 00h, 00h,0C1h
-31E4:EE97 0A 04 00 00 00 C3 db 0Ah, 04h, 00h, 00h, 00h,0C3h
-31E4:EE9D 0A 05 00 00 00 C5 db 0Ah, 05h, 00h, 00h, 00h,0C5h
-31E4:EEA3 0A 06 00 F1 28 C7 db 0Ah, 06h, 00h,0F1h, 28h,0C7h
-31E4:EEA9 0A FF FF B4 EE 00 db 0Ah,0FFh,0FFh,0B4h,0EEh, 00h
-31E4:EEAF 80 24 04 00 00 00 db 80h, 24h, 04h, 00h, 00h, 00h
-31E4:EEB5 00 C8 0A FF FF CE db 00h,0C8h, 0Ah,0FFh,0FFh,0CEh
-31E4:EEBB EE 00 80 B1 0F 00 db 0EEh, 00h, 80h,0B1h, 0Fh, 00h
-31E4:EEC1 00 00 80 B3 0F 01 db 00h, 00h, 80h,0B3h, 0Fh, 01h
-31E4:EEC7 00 00 80 C1 0F 02 db 00h, 00h, 80h,0C1h, 0Fh, 02h
-31E4:EECD 00 00 00 B2 0F 01 db 00h, 00h, 00h,0B2h, 0Fh, 01h
-31E4:EED3 00 9A 29 B4 0F 02 db 00h, 9Ah, 29h,0B4h, 0Fh, 02h
-31E4:EED9 00 00 00 C2 0F FF db 00h, 00h, 00h,0C2h, 0Fh,0FFh
-31E4:EEDF FF 1E EF 00 00 B5 db 0FFh, 1Eh,0EFh, 00h, 00h,0B5h
-31E4:EEE5 8F 00 00 00 00 B7 db 8Fh, 00h, 00h, 00h, 00h,0B7h
-31E4:EEEB 8F 01 00 00 00 B9 db 8Fh, 01h, 00h, 00h, 00h,0B9h
-31E4:EEF1 8F 02 00 00 80 BF db 8Fh, 02h, 00h, 00h, 80h,0BFh
-31E4:EEF7 0F 05 00 00 00 C3 db 0Fh, 05h, 00h, 00h, 00h,0C3h
-31E4:EEFD 0F 07 00 02 2A C7 db 0Fh, 07h, 00h, 02h, 2Ah,0C7h
-31E4:EF03 0F 08 00 00 80 C5 db 0Fh, 08h, 00h, 00h, 80h,0C5h
-31E4:EF09 0F 09 00 00 80 BB db 0Fh, 09h, 00h, 00h, 80h,0BBh
-31E4:EF0F 0F 03 00 00 80 BD db 0Fh, 03h, 00h, 00h, 80h,0BDh
-31E4:EF15 0F db 0Fh
-31E4:EF16 04 data_1199 db 4
-31E4:EF17 00 00 80 C1 0F 06 db 00h, 00h, 80h,0C1h, 0Fh, 06h
-31E4:EF1D 00 00 00 B6 0F 01 db 00h, 00h, 00h,0B6h, 0Fh, 01h
-31E4:EF23 00 EC 29 B8 0F FF db 00h,0ECh, 29h,0B8h, 0Fh,0FFh
-31E4:EF29 FF 00 00 BA 0F 07 db 0FFh, 00h, 00h,0BAh, 0Fh, 07h
-31E4:EF2F 00 00 00 BC 0F 08 db 00h, 00h, 00h,0BCh, 0Fh, 08h
-31E4:EF35 00 00 00 BE 0F 04 db 00h, 00h, 00h,0BEh, 0Fh, 04h
-31E4:EF3B 00 00 00 C0 0F 04 db 00h, 00h, 00h,0C0h, 0Fh, 04h
-31E4:EF41 00 00 00 C2 0F 04 db 00h, 00h, 00h,0C2h, 0Fh, 04h
-31E4:EF47 00 C0 29 C4 0F FF db 00h,0C0h, 29h,0C4h, 0Fh,0FFh
-31E4:EF4D FF D6 29 C8 0F FF db 0FFh,0D6h, 29h,0C8h, 0Fh,0FFh
-31E4:EF53 FF AA 29 C6 0F FF db 0FFh,0AAh, 29h,0C6h, 0Fh,0FFh
-31E4:EF59 FF 62 EF 00 80 24 db 0FFh, 62h,0EFh, 00h, 80h, 24h
-31E4:EF5F 04 00 00 00 00 D1 db 04h, 00h, 00h, 00h, 00h,0D1h
-31E4:EF65 0F FF FF 88 EF 00 db 0Fh,0FFh,0FFh, 88h,0EFh, 00h
-31E4:EF6B 80 24 84 00 00 00 db 80h, 24h, 84h, 00h, 00h, 00h
-31E4:EF71 00 D3 8F 01 00 02 db 00h,0D3h, 8Fh, 01h, 00h, 02h
-31E4:EF77 2A C7 0F 03 00 00 db 2Ah,0C7h, 0Fh, 03h, 00h, 00h
-31E4:EF7D 80 C5 0F 04 00 00 db 80h,0C5h, 0Fh, 04h, 00h, 00h
-31E4:EF83 80 D5 0F 02 00 00 db 80h,0D5h, 0Fh, 02h, 00h, 00h
-31E4:EF89 00 D2 0F 01 00 00 db 00h,0D2h, 0Fh, 01h, 00h, 00h
-31E4:EF8F 00 D4 0F 04 00 00 db 00h,0D4h, 0Fh, 04h, 00h, 00h
-31E4:EF95 00 D6 0F FF FF D6 db 00h,0D6h, 0Fh,0FFh,0FFh,0D6h
-31E4:EF9B 29 C8 0F FF FF AA db 29h,0C8h, 0Fh,0FFh,0FFh,0AAh
-31E4:EFA1 29 C6 0F FF FF B4 db 29h,0C6h, 0Fh,0FFh,0FFh,0B4h
-31E4:EFA7 EF 00 80 D7 0F 00 db 0EFh, 00h, 80h,0D7h, 0Fh, 00h
-31E4:EFAD 00 00 80 D9 0F 01 db 00h, 00h, 80h,0D9h, 0Fh, 01h
-31E4:EFB3 00 00 00 D8 0F 01 db 00h, 00h, 00h,0D8h, 0Fh, 01h
-31E4:EFB9 00 09 2A DA 0F FF db 00h, 09h, 2Ah,0DAh, 0Fh,0FFh
-31E4:EFBF FF C8 EF 00 80 12 db 0FFh,0C8h,0EFh, 00h, 80h, 12h
-31E4:EFC5 10 00 00 00 00 13 db 10h, 00h, 00h, 00h, 00h, 13h
-31E4:EFCB 10 FF FF D6 EF 00 db 10h,0FFh,0FFh,0D6h,0EFh, 00h
-31E4:EFD1 80 24 04 00 00 00 db 80h, 24h, 04h, 00h, 00h, 00h
-31E4:EFD7 00 DB 0F FF FF EA db 00h,0DBh, 0Fh,0FFh,0FFh,0EAh
-31E4:EFDD EF 00 80 DC 0F 00 db 0EFh, 00h, 80h,0DCh, 0Fh, 00h
-31E4:EFE3 00 00 80 24 04 01 db 00h, 00h, 80h, 24h, 04h, 01h
-31E4:EFE9 00 00 00 DD 0F 01 db 00h, 00h, 00h,0DDh, 0Fh, 01h
-31E4:EFEF 00 1F 2A 24 04 FF db 00h, 1Fh, 2Ah, 24h, 04h,0FFh
-31E4:EFF5 FF db 0FFh
-
-31E4:EFF6 FE EF 00 80 1D db 0FEh,0EFh, 00h, 80h, 1Dh
-31E4:EFFB 10 00 00 00 00 24 db 10h, 00h, 00h, 00h, 00h, 24h
-31E4:F001 04 FF FF 00 db 04h,0FFh,0FFh, 00h
-31E4:F005 000B[00] db 11 dup (0)
-
-31E4:F010 0000 timer_ticks dw 0 ; xref 273F:14BF, 273F:14E9
- ; 273F:48D5, 273F:48DD
- ; 273F:9500
-31E4:F012 000E[00] db 14 dup (0)
-
- data_seg ends
-
-
-
- ;------------------------------------------------------------ scripts2_seg ----
-
- scripts2_seg segment byte public
- assume cs:scripts2_seg, ds:scripts2_seg, ss:stack_seg_k
-
-40E6:0000 06 00 06 00 01 00 db 06h, 00h, 06h, 00h, 01h, 00h
-40E6:0006 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:000C 03 00 03 00 04 00 db 03h, 00h, 03h, 00h, 04h, 00h
-40E6:0012 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:0018 04 00 04 00 02 00 db 04h, 00h, 04h, 00h, 02h, 00h
-40E6:001E 02 00 06 00 06 00 db 02h, 00h, 06h, 00h, 06h, 00h
-40E6:0024 06 00 06 00 07 00 db 06h, 00h, 06h, 00h, 07h, 00h
-40E6:002A 07 00 08 00 08 00 db 07h, 00h, 08h, 00h, 08h, 00h
-40E6:0030 09 00 09 00 0A 00 db 09h, 00h, 09h, 00h, 0Ah, 00h
-40E6:0036 0A 00 0B 00 0B 00 db 0Ah, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:003C 0A 00 0A 00 0B 00 db 0Ah, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:0042 0B 00 09 00 09 00 db 0Bh, 00h, 09h, 00h, 09h, 00h
-40E6:0048 08 00 08 00 07 00 db 08h, 00h, 08h, 00h, 07h, 00h
-40E6:004E 07 00 06 00 FC FF db 07h, 00h, 06h, 00h,0FCh,0FFh
-40E6:0054 06 00 06 00 01 00 db 06h, 00h, 06h, 00h, 01h, 00h
-40E6:005A 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:0060 03 00 03 00 04 00 db 03h, 00h, 03h, 00h, 04h, 00h
-40E6:0066 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:006C 04 00 04 00 02 00 db 04h, 00h, 04h, 00h, 02h, 00h
-40E6:0072 02 00 F8 FF 11 00 db 02h, 00h,0F8h,0FFh, 11h, 00h
-40E6:0078 20 00 06 00 06 00 db 20h, 00h, 06h, 00h, 06h, 00h
-40E6:007E FC FF F6 FF 00 00 db 0FCh,0FFh,0F6h,0FFh, 00h, 00h
-40E6:0084 00 00 F9 FF 15 59 db 00h, 00h,0F9h,0FFh, 15h, 59h
-40E6:008A FD FF F8 FF 00 00 db 0FDh,0FFh,0F8h,0FFh, 00h, 00h
-40E6:0090 FB FF 03 00 2F 00 db 0FBh,0FFh, 03h, 00h, 2Fh, 00h
-40E6:0096 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:009C 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:00A2 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:00A8 F8 FF 07 00 1C 00 db 0F8h,0FFh, 07h, 00h, 1Ch, 00h
-40E6:00AE F8 FF 1B 00 12 00 db 0F8h,0FFh, 1Bh, 00h, 12h, 00h
-40E6:00B4 F8 FF 1C 00 17 00 db 0F8h,0FFh, 1Ch, 00h, 17h, 00h
-40E6:00BA F8 FF 1C 00 18 00 db 0F8h,0FFh, 1Ch, 00h, 18h, 00h
-40E6:00C0 F8 FF 1C 00 11 00 db 0F8h,0FFh, 1Ch, 00h, 11h, 00h
-40E6:00C6 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:00CC 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:00D2 F9 FF E9 5C FB FF db 0F9h,0FFh,0E9h, 5Ch,0FBh,0FFh
-40E6:00D8 02 00 30 00 FD FF db 02h, 00h, 30h, 00h,0FDh,0FFh
-40E6:00DE 08 00 00 00 22 00 db 08h, 00h, 00h, 00h, 22h, 00h
-40E6:00E4 F6 FF 00 0C 82 00 db 0F6h,0FFh, 00h, 0Ch, 82h, 00h
-40E6:00EA FC FF F8 FF 1E 00 db 0FCh,0FFh,0F8h,0FFh, 1Eh, 00h
-40E6:00F0 1C 00 FE FF CE 00 db 1Ch, 00h,0FEh,0FFh,0CEh, 00h
-40E6:00F6 13 01 00 00 FE FF db 13h, 01h, 00h, 00h,0FEh,0FFh
-40E6:00FC D0 00 13 01 01 00 db 0D0h, 00h, 13h, 01h, 01h, 00h
-40E6:0102 F8 FF 1F 00 1C 00 db 0F8h,0FFh, 1Fh, 00h, 1Ch, 00h
-40E6:0108 FE FF D2 00 13 01 db 0FEh,0FFh,0D2h, 00h, 13h, 01h
-40E6:010E 02 00 FE FF D0 00 db 02h, 00h,0FEh,0FFh,0D0h, 00h
-40E6:0114 13 01 01 00 FA FF db 13h, 01h, 01h, 00h,0FAh,0FFh
-40E6:011A EC 00 FE FF 80 00 db 0ECh, 00h,0FEh,0FFh, 80h, 00h
-40E6:0120 64 00 FF FF 1E 00 db 64h, 00h,0FFh,0FFh, 1Eh, 00h
-40E6:0126 FE FF 58 01 BC 00 db 0FEh,0FFh, 58h, 01h,0BCh, 00h
-40E6:012C 00 00 FE FF 58 01 db 00h, 00h,0FEh,0FFh, 58h, 01h
-40E6:0132 D0 00 00 00 FE FF db 0D0h, 00h, 00h, 00h,0FEh,0FFh
-40E6:0138 58 01 F7 00 00 00 db 58h, 01h,0F7h, 00h, 00h, 00h
-40E6:013E FE FF 58 01 33 01 db 0FEh,0FFh, 58h, 01h, 33h, 01h
-40E6:0144 00 00 F8 FF 06 00 db 00h, 00h,0F8h,0FFh, 06h, 00h
-40E6:014A 01 00 FE FF 57 01 db 01h, 00h,0FEh,0FFh, 57h, 01h
-40E6:0150 33 01 01 00 FE FF db 33h, 01h, 01h, 00h,0FEh,0FFh
-40E6:0156 56 01 33 01 02 00 db 56h, 01h, 33h, 01h, 02h, 00h
-40E6:015C FE FF 55 01 33 01 db 0FEh,0FFh, 55h, 01h, 33h, 01h
-40E6:0162 03 00 FE FF 53 01 db 03h, 00h,0FEh,0FFh, 53h, 01h
-40E6:0168 33 01 04 00 FE FF db 33h, 01h, 04h, 00h,0FEh,0FFh
-40E6:016E 52 01 33 01 05 00 db 52h, 01h, 33h, 01h, 05h, 00h
-40E6:0174 06 00 FE FF 52 01 db 06h, 00h,0FEh,0FFh, 52h, 01h
-40E6:017A 64 00 FF FF 02 00 db 64h, 00h,0FFh,0FFh, 02h, 00h
-40E6:0180 FA FF 1C 01 00 00 db 0FAh,0FFh, 1Ch, 01h, 00h, 00h
-40E6:0186 FF FF 02 00 FE FF db 0FFh,0FFh, 02h, 00h,0FEh,0FFh
-40E6:018C 47 01 FB 00 01 00 db 47h, 01h,0FBh, 00h, 01h, 00h
-40E6:0192 FF FF 02 00 FE FF db 0FFh,0FFh, 02h, 00h,0FEh,0FFh
-40E6:0198 47 01 08 01 02 00 db 47h, 01h, 08h, 01h, 02h, 00h
-40E6:019E FF FF 02 00 FC FF db 0FFh,0FFh, 02h, 00h,0FCh,0FFh
-40E6:01A4 02 00 F8 FF 05 00 db 02h, 00h,0F8h,0FFh, 05h, 00h
-40E6:01AA 04 00 FE FF F4 00 db 04h, 00h,0FEh,0FFh,0F4h, 00h
-40E6:01B0 0F 01 03 00 FE FF db 0Fh, 01h, 03h, 00h,0FEh,0FFh
-40E6:01B6 FE 00 0F 01 02 00 db 0FEh, 00h, 0Fh, 01h, 02h, 00h
-40E6:01BC FE FF 08 01 0F 01 db 0FEh,0FFh, 08h, 01h, 0Fh, 01h
-40E6:01C2 03 00 FE FF 12 01 db 03h, 00h,0FEh,0FFh, 12h, 01h
-40E6:01C8 0F 01 02 00 FE FF db 0Fh, 01h, 02h, 00h,0FEh,0FFh
-40E6:01CE 1C 01 0F 01 03 00 db 1Ch, 01h, 0Fh, 01h, 03h, 00h
-40E6:01D4 FF FF 06 00 F8 FF db 0FFh,0FFh, 06h, 00h,0F8h,0FFh
-40E6:01DA 05 00 04 00 FE FF db 05h, 00h, 04h, 00h,0FEh,0FFh
-40E6:01E0 26 01 0F 01 02 00 db 26h, 01h, 0Fh, 01h, 02h, 00h
-40E6:01E6 FE FF 30 01 0F 01 db 0FEh,0FFh, 30h, 01h, 0Fh, 01h
-40E6:01EC 03 00 FE FF 3A 01 db 03h, 00h,0FEh,0FFh, 3Ah, 01h
-40E6:01F2 0F 01 02 00 FE FF db 0Fh, 01h, 02h, 00h,0FEh,0FFh
-40E6:01F8 44 01 0F 01 03 00 db 44h, 01h, 0Fh, 01h, 03h, 00h
-40E6:01FE FE FF 4E 01 0F 01 db 0FEh,0FFh, 4Eh, 01h, 0Fh, 01h
-40E6:0204 02 00 FE FF 58 01 db 02h, 00h,0FEh,0FFh, 58h, 01h
-40E6:020A 0F 01 03 00 FE FF db 0Fh, 01h, 03h, 00h,0FEh,0FFh
-40E6:0210 62 01 0F 01 02 00 db 62h, 01h, 0Fh, 01h, 02h, 00h
-40E6:0216 FE FF 6C 01 0F 01 db 0FEh,0FFh, 6Ch, 01h, 0Fh, 01h
-40E6:021C 03 00 FE FF 4E 01 db 03h, 00h,0FEh,0FFh, 4Eh, 01h
-40E6:0222 64 00 FC FF FE FF db 64h, 00h,0FCh,0FFh,0FEh,0FFh
-40E6:0228 3F 01 12 01 01 00 db 3Fh, 01h, 12h, 01h, 01h, 00h
-40E6:022E F8 FF 05 00 01 00 db 0F8h,0FFh, 05h, 00h, 01h, 00h
-40E6:0234 FE FF 35 01 12 01 db 0FEh,0FFh, 35h, 01h, 12h, 01h
-40E6:023A 00 00 FE FF 2B 01 db 00h, 00h,0FEh,0FFh, 2Bh, 01h
-40E6:0240 12 01 01 00 FE FF db 12h, 01h, 01h, 00h,0FEh,0FFh
-40E6:0246 21 01 12 01 00 00 db 21h, 01h, 12h, 01h, 00h, 00h
-40E6:024C FE FF 17 01 12 01 db 0FEh,0FFh, 17h, 01h, 12h, 01h
-40E6:0252 01 00 F8 FF 05 00 db 01h, 00h,0F8h,0FFh, 05h, 00h
-40E6:0258 01 00 FE FF 0D 01 db 01h, 00h,0FEh,0FFh, 0Dh, 01h
-40E6:025E 12 01 00 00 FE FF db 12h, 01h, 00h, 00h,0FEh,0FFh
-40E6:0264 03 01 12 01 01 00 db 03h, 01h, 12h, 01h, 01h, 00h
-40E6:026A FE FF F9 00 12 01 db 0FEh,0FFh,0F9h, 00h, 12h, 01h
-40E6:0270 00 00 FE FF EF 00 db 00h, 00h,0FEh,0FFh,0EFh, 00h
-40E6:0276 12 01 01 00 FE FF db 12h, 01h, 01h, 00h,0FEh,0FFh
-40E6:027C EF 00 64 00 FC FF db 0EFh, 00h, 64h, 00h,0FCh,0FFh
-40E6:0282 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0288 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:028E 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0294 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:029A FA FF 82 02 00 00 db 0FAh,0FFh, 82h, 02h, 00h, 00h
-40E6:02A0 01 00 02 00 FA FF db 01h, 00h, 02h, 00h,0FAh,0FFh
-40E6:02A6 9E 02 FE FF 17 01 db 9Eh, 02h,0FEh,0FFh, 17h, 01h
-40E6:02AC C0 00 00 00 01 00 db 0C0h, 00h, 00h, 00h, 01h, 00h
-40E6:02B2 FE FF 1C 01 CD 00 db 0FEh,0FFh, 1Ch, 01h,0CDh, 00h
-40E6:02B8 02 00 FE FF 1D 01 db 02h, 00h,0FEh,0FFh, 1Dh, 01h
-40E6:02BE D8 00 03 00 FE FF db 0D8h, 00h, 03h, 00h,0FEh,0FFh
-40E6:02C4 1F 01 DC 00 04 00 db 1Fh, 01h,0DCh, 00h, 04h, 00h
-40E6:02CA F8 FF 24 00 07 00 db 0F8h,0FFh, 24h, 00h, 07h, 00h
-40E6:02D0 FE FF 21 01 E0 00 db 0FEh,0FFh, 21h, 01h,0E0h, 00h
-40E6:02D6 04 00 FF FF 01 00 db 04h, 00h,0FFh,0FFh, 01h, 00h
-40E6:02DC 05 00 FF FF 02 00 db 05h, 00h,0FFh,0FFh, 02h, 00h
-40E6:02E2 06 00 FF FF 03 00 db 06h, 00h,0FFh,0FFh, 03h, 00h
-40E6:02E8 07 00 FF FF 01 00 db 07h, 00h,0FFh,0FFh, 01h, 00h
-40E6:02EE FC FF 24 00 FF FF db 0FCh,0FFh, 24h, 00h,0FFh,0FFh
-40E6:02F4 0A 00 25 00 FF FF db 0Ah, 00h, 25h, 00h,0FFh,0FFh
-40E6:02FA 0A 00 26 00 FF FF db 0Ah, 00h, 26h, 00h,0FFh,0FFh
-40E6:0300 0A 00 27 00 FF FF db 0Ah, 00h, 27h, 00h,0FFh,0FFh
-40E6:0306 0A 00 26 00 FF FF db 0Ah, 00h, 26h, 00h,0FFh,0FFh
-40E6:030C 04 00 27 00 FF FF db 04h, 00h, 27h, 00h,0FFh,0FFh
-40E6:0312 06 00 26 00 FF FF db 06h, 00h, 26h, 00h,0FFh,0FFh
-40E6:0318 04 00 27 00 FF FF db 04h, 00h, 27h, 00h,0FFh,0FFh
-40E6:031E 06 00 FC FF F9 FF db 06h, 00h,0FCh,0FFh,0F9h,0FFh
-40E6:0324 95 5C 00 00 FF FF db 95h, 5Ch, 00h, 00h,0FFh,0FFh
-40E6:032A 0A 00 01 00 FF FF db 0Ah, 00h, 01h, 00h,0FFh,0FFh
-40E6:0330 0A 00 02 00 FF FF db 0Ah, 00h, 02h, 00h,0FFh,0FFh
-40E6:0336 0A 00 03 00 FF FF db 0Ah, 00h, 03h, 00h,0FFh,0FFh
-40E6:033C 0A 00 02 00 FF FF db 0Ah, 00h, 02h, 00h,0FFh,0FFh
-40E6:0342 04 00 03 00 FF FF db 04h, 00h, 03h, 00h,0FFh,0FFh
-40E6:0348 06 00 02 00 FF FF db 06h, 00h, 02h, 00h,0FFh,0FFh
-40E6:034E 04 00 03 00 FF FF db 04h, 00h, 03h, 00h,0FFh,0FFh
-40E6:0354 06 00 F9 FF 80 5C db 06h, 00h,0F9h,0FFh, 80h, 5Ch
-40E6:035A FC FF F8 FF 14 00 db 0FCh,0FFh,0F8h,0FFh, 14h, 00h
-40E6:0360 04 00 FF FF 0B 00 db 04h, 00h,0FFh,0FFh, 0Bh, 00h
-40E6:0366 01 00 FF FF 0A 00 db 01h, 00h,0FFh,0FFh, 0Ah, 00h
-40E6:036C F8 FF 14 00 04 00 db 0F8h,0FFh, 14h, 00h, 04h, 00h
-40E6:0372 02 00 FF FF 37 00 db 02h, 00h,0FFh,0FFh, 37h, 00h
-40E6:0378 F8 FF 14 00 04 00 db 0F8h,0FFh, 14h, 00h, 04h, 00h
-40E6:037E 01 00 00 00 FC FF db 01h, 00h, 00h, 00h,0FCh,0FFh
-40E6:0384 FB FF 03 00 19 00 db 0FBh,0FFh, 03h, 00h, 19h, 00h
-40E6:038A FE FF BE 00 FD 00 db 0FEh,0FFh,0BEh, 00h,0FDh, 00h
-40E6:0390 03 00 FF FF 05 00 db 03h, 00h,0FFh,0FFh, 05h, 00h
-40E6:0396 FB FF 03 00 1A 00 db 0FBh,0FFh, 03h, 00h, 1Ah, 00h
-40E6:039C FE FF BE 00 FB 00 db 0FEh,0FFh,0BEh, 00h,0FBh, 00h
-40E6:03A2 04 00 FF FF 03 00 db 04h, 00h,0FFh,0FFh, 03h, 00h
-40E6:03A8 FB FF 02 00 1A 00 db 0FBh,0FFh, 02h, 00h, 1Ah, 00h
-40E6:03AE FE FF BE 00 F4 00 db 0FEh,0FFh,0BEh, 00h,0F4h, 00h
-40E6:03B4 05 00 FF FF 01 00 db 05h, 00h,0FFh,0FFh, 01h, 00h
-40E6:03BA FB FF 02 00 1B 00 db 0FBh,0FFh, 02h, 00h, 1Bh, 00h
-40E6:03C0 FE FF BE 00 F3 00 db 0FEh,0FFh,0BEh, 00h,0F3h, 00h
-40E6:03C6 06 00 FF FF 01 00 db 06h, 00h,0FFh,0FFh, 01h, 00h
-40E6:03CC FB FF 01 00 1B 00 db 0FBh,0FFh, 01h, 00h, 1Bh, 00h
-40E6:03D2 FE FF BE 00 F3 00 db 0FEh,0FFh,0BEh, 00h,0F3h, 00h
-40E6:03D8 07 00 FF FF 01 00 db 07h, 00h,0FFh,0FFh, 01h, 00h
-40E6:03DE FC FF 02 00 FF FF db 0FCh,0FFh, 02h, 00h,0FFh,0FFh
-40E6:03E4 14 00 01 00 FF FF db 14h, 00h, 01h, 00h,0FFh,0FFh
-40E6:03EA 1E 00 02 00 FF FF db 1Eh, 00h, 02h, 00h,0FFh,0FFh
-40E6:03F0 05 00 00 00 FC FF db 05h, 00h, 00h, 00h,0FCh,0FFh
-40E6:03F6 02 00 FF FF 1E 00 db 02h, 00h,0FFh,0FFh, 1Eh, 00h
-40E6:03FC 00 00 FC FF F9 FF db 00h, 00h,0FCh,0FFh,0F9h,0FFh
-40E6:0402 1A 5A 00 00 01 00 db 1Ah, 5Ah, 00h, 00h, 01h, 00h
-40E6:0408 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:040E 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0414 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:041A 03 00 00 00 01 00 db 03h, 00h, 00h, 00h, 01h, 00h
-40E6:0420 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:0426 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:042C 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0432 03 00 F9 FF 80 5C db 03h, 00h,0F9h,0FFh, 80h, 5Ch
-40E6:0438 FC FF FF FF 32 00 db 0FCh,0FFh,0FFh,0FFh, 32h, 00h
-40E6:043E 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0444 04 00 F9 FF 28 5D db 04h, 00h,0F9h,0FFh, 28h, 5Dh
-40E6:044A FC FF FF FF 14 00 db 0FCh,0FFh,0FFh,0FFh, 14h, 00h
-40E6:0450 F9 FF AA 5A FF FF db 0F9h,0FFh,0AAh, 5Ah,0FFh,0FFh
-40E6:0456 0A 00 00 00 01 00 db 0Ah, 00h, 00h, 00h, 01h, 00h
-40E6:045C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0462 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0468 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:046E 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0474 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:047A 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0480 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0486 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:048C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0492 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0498 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:049E 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04A4 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04AA 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04B0 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04B6 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04BC 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04C2 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04C8 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04CE 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04D4 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04DA 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04E0 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04E6 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04EC 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04F2 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:04F8 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:04FE 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0504 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:050A 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0510 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0516 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:051C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0522 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0528 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:052E 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0534 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:053A 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0540 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0546 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:054C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0552 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0558 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:055E 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0564 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:056A 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0570 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0576 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:057C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0582 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0588 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:058E 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0594 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:059A 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05A0 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05A6 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05AC 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05B2 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05B8 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05BE 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05C4 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05CA 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05D0 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05D6 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05DC 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05E2 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05E8 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05EE 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:05F4 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:05FA 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0600 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0606 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:060C 01 00 00 00 F9 FF db 01h, 00h, 00h, 00h,0F9h,0FFh
-40E6:0612 28 5D 10 00 10 00 db 28h, 5Dh, 10h, 00h, 10h, 00h
-40E6:0618 FA FF 16 06 00 00 db 0FAh,0FFh, 16h, 06h, 00h, 00h
-40E6:061E 01 00 F8 FF 26 00 db 01h, 00h,0F8h,0FFh, 26h, 00h
-40E6:0624 1E 00 F8 FF 27 00 db 1Eh, 00h,0F8h,0FFh, 27h, 00h
-40E6:062A 1E 00 FA FF 1C 06 db 1Eh, 00h,0FAh,0FFh, 1Ch, 06h
-40E6:0630 00 00 F8 FF 23 00 db 00h, 00h,0F8h,0FFh, 23h, 00h
-40E6:0636 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:063C 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:0642 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0648 09 00 0A 00 FC FF db 09h, 00h, 0Ah, 00h,0FCh,0FFh
-40E6:064E 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0654 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:065A 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0660 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:0666 FA FF 4E 06 00 00 db 0FAh,0FFh, 4Eh, 06h, 00h, 00h
-40E6:066C 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0672 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0678 06 00 06 00 06 00 db 06h, 00h, 06h, 00h, 06h, 00h
-40E6:067E 06 00 05 00 07 00 db 06h, 00h, 05h, 00h, 07h, 00h
-40E6:0684 00 00 F8 FF 11 00 db 00h, 00h,0F8h,0FFh, 11h, 00h
-40E6:068A 1D 00 FF FF 23 00 db 1Dh, 00h,0FFh,0FFh, 23h, 00h
-40E6:0690 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0696 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:069C 06 00 06 00 06 00 db 06h, 00h, 06h, 00h, 06h, 00h
-40E6:06A2 06 00 05 00 07 00 db 06h, 00h, 05h, 00h, 07h, 00h
-40E6:06A8 00 00 F8 FF 11 00 db 00h, 00h,0F8h,0FFh, 11h, 00h
-40E6:06AE 1D 00 FF FF 2D 00 db 1Dh, 00h,0FFh,0FFh, 2Dh, 00h
-40E6:06B4 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:06BA 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:06C0 06 00 06 00 06 00 db 06h, 00h, 06h, 00h, 06h, 00h
-40E6:06C6 06 00 06 00 06 00 db 06h, 00h, 06h, 00h, 06h, 00h
-40E6:06CC 06 00 06 00 05 00 db 06h, 00h, 06h, 00h, 05h, 00h
-40E6:06D2 07 00 00 00 F8 FF db 07h, 00h, 00h, 00h,0F8h,0FFh
-40E6:06D8 11 00 1D 00 FF FF db 11h, 00h, 1Dh, 00h,0FFh,0FFh
-40E6:06DE 28 00 FA FF 6A 06 db 28h, 00h,0FAh,0FFh, 6Ah, 06h
-40E6:06E4 F8 FF db 0F8h,0FFh
-40E6:06E6 28 db 28h
-40E6:06E7 0007[00] db 7 dup (0)
-40E6:06EE 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:06F4 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:06FA 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0700 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0706 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:070C 28 db 28h
-40E6:070D 0007[00] db 7 dup (0)
-40E6:0714 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:071A 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0720 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0726 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:072C 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:0732 28 db 28h
-40E6:0733 0007[00] db 7 dup (0)
-40E6:073A 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0740 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0746 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:074C 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0752 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:0758 28 db 28h
-40E6:0759 0007[00] db 7 dup (0)
-40E6:0760 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0766 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:076C 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0772 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0778 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:077E 28 db 28h
-40E6:077F 0007[00] db 7 dup (0)
-40E6:0786 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:078C 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0792 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0798 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:079E 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:07A4 28 db 28h
-40E6:07A5 0007[00] db 7 dup (0)
-40E6:07AC 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:07B2 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:07B8 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:07BE 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:07C4 04 00 04 00 05 00 db 04h, 00h, 04h, 00h, 05h, 00h
-40E6:07CA 05 00 06 00 06 00 db 05h, 00h, 06h, 00h, 06h, 00h
-40E6:07D0 07 00 07 00 08 00 db 07h, 00h, 07h, 00h, 08h, 00h
-40E6:07D6 08 00 09 00 09 00 db 08h, 00h, 09h, 00h, 09h, 00h
-40E6:07DC 0A 00 0A 00 0B 00 db 0Ah, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:07E2 0B 00 0B 00 0B 00 db 0Bh, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:07E8 0A 00 0A 00 09 00 db 0Ah, 00h, 0Ah, 00h, 09h, 00h
-40E6:07EE 09 00 08 00 F8 FF db 09h, 00h, 08h, 00h,0F8h,0FFh
-40E6:07F4 11 00 1D 00 08 00 db 11h, 00h, 1Dh, 00h, 08h, 00h
-40E6:07FA 07 00 07 00 06 00 db 07h, 00h, 07h, 00h, 06h, 00h
-40E6:0800 06 00 05 00 05 00 db 06h, 00h, 05h, 00h, 05h, 00h
-40E6:0806 F8 FF db 0F8h,0FFh
-40E6:0808 28 db 28h
-40E6:0809 0007[00] db 7 dup (0)
-40E6:0810 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0816 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:081C 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0822 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0828 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:082E 28 db 28h
-40E6:082F 0007[00] db 7 dup (0)
-40E6:0836 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:083C 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0842 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0848 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:084E 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:0854 28 db 28h
-40E6:0855 0007[00] db 7 dup (0)
-40E6:085C 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0862 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0868 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:086E 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0874 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:087A 28 db 28h
-40E6:087B 0007[00] db 7 dup (0)
-40E6:0882 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0888 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:088E 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0894 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:089A 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:08A0 28 db 28h
-40E6:08A1 0007[00] db 7 dup (0)
-40E6:08A8 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:08AE 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:08B4 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:08BA 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:08C0 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:08C6 28 db 28h
-40E6:08C7 0007[00] db 7 dup (0)
-40E6:08CE 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:08D4 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:08DA 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:08E0 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:08E6 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:08EC 28 db 28h
-40E6:08ED 0007[00] db 7 dup (0)
-40E6:08F4 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:08FA 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0900 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0906 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:090C 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:0912 28 db 28h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 574
-
-40E6:0913 0007[00] db 7 dup (0)
-40E6:091A 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0920 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0926 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:092C 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0932 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:0938 28 db 28h
-40E6:0939 0007[00] db 7 dup (0)
-40E6:0940 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:0946 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:094C 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0952 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:0958 04 00 04 00 F8 FF db 04h, 00h, 04h, 00h,0F8h,0FFh
-40E6:095E 28 db 28h
-40E6:095F 0007[00] db 7 dup (0)
-40E6:0966 01 00 01 00 F8 FF db 01h, 00h, 01h, 00h,0F8h,0FFh
-40E6:096C 28 00 00 00 02 00 db 28h, 00h, 00h, 00h, 02h, 00h
-40E6:0972 02 00 F8 FF 28 00 db 02h, 00h,0F8h,0FFh, 28h, 00h
-40E6:0978 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:097E 04 00 04 00 05 00 db 04h, 00h, 04h, 00h, 05h, 00h
-40E6:0984 05 00 06 00 06 00 db 05h, 00h, 06h, 00h, 06h, 00h
-40E6:098A 07 00 07 00 08 00 db 07h, 00h, 07h, 00h, 08h, 00h
-40E6:0990 08 00 09 00 09 00 db 08h, 00h, 09h, 00h, 09h, 00h
-40E6:0996 0A 00 0A 00 0B 00 db 0Ah, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:099C 0B 00 0B 00 0B 00 db 0Bh, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:09A2 0A 00 0A 00 0B 00 db 0Ah, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:09A8 0B 00 0B 00 0B 00 db 0Bh, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:09AE 0B 00 0B 00 0B 00 db 0Bh, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:09B4 0B 00 0A 00 09 00 db 0Bh, 00h, 0Ah, 00h, 09h, 00h
-40E6:09BA 09 00 08 00 F8 FF db 09h, 00h, 08h, 00h,0F8h,0FFh
-40E6:09C0 11 00 1D 00 08 00 db 11h, 00h, 1Dh, 00h, 08h, 00h
-40E6:09C6 07 00 07 00 06 00 db 07h, 00h, 07h, 00h, 06h, 00h
-40E6:09CC 06 00 05 00 05 00 db 06h, 00h, 05h, 00h, 05h, 00h
-40E6:09D2 FF FF 03 00 FA FF db 0FFh,0FFh, 03h, 00h,0FAh,0FFh
-40E6:09D8 E4 06 00 00 FA FF db 0E4h, 06h, 00h, 00h,0FAh,0FFh
-40E6:09DE DA 09 01 00 FF FF db 0DAh, 09h, 01h, 00h,0FFh,0FFh
-40E6:09E4 00 00 02 00 FF FF db 00h, 00h, 02h, 00h,0FFh,0FFh
-40E6:09EA 00 00 03 00 FF FF db 00h, 00h, 03h, 00h,0FFh,0FFh
-40E6:09F0 00 00 04 00 FF FF db 00h, 00h, 04h, 00h,0FFh,0FFh
-40E6:09F6 00 00 05 00 FF FF db 00h, 00h, 05h, 00h,0FFh,0FFh
-40E6:09FC 00 00 06 00 FF FF db 00h, 00h, 06h, 00h,0FFh,0FFh
-40E6:0A02 00 00 07 00 FF FF db 00h, 00h, 07h, 00h,0FFh,0FFh
-40E6:0A08 00 00 08 00 FF FF db 00h, 00h, 08h, 00h,0FFh,0FFh
-40E6:0A0E 00 00 09 00 FF FF db 00h, 00h, 09h, 00h,0FFh,0FFh
-40E6:0A14 00 00 0A 00 FF FF db 00h, 00h, 0Ah, 00h,0FFh,0FFh
-40E6:0A1A 00 00 0B 00 FF FF db 00h, 00h, 0Bh, 00h,0FFh,0FFh
-40E6:0A20 00 00 0C 00 FF FF db 00h, 00h, 0Ch, 00h,0FFh,0FFh
-40E6:0A26 00 00 0D 00 FF FF db 00h, 00h, 0Dh, 00h,0FFh,0FFh
-40E6:0A2C 00 00 0E 00 FF FF db 00h, 00h, 0Eh, 00h,0FFh,0FFh
-40E6:0A32 00 00 0F 00 FF FF db 00h, 00h, 0Fh, 00h,0FFh,0FFh
-40E6:0A38 00 00 10 00 FF FF db 00h, 00h, 10h, 00h,0FFh,0FFh
-40E6:0A3E 00 00 11 00 FF FF db 00h, 00h, 11h, 00h,0FFh,0FFh
-40E6:0A44 00 00 12 00 FF FF db 00h, 00h, 12h, 00h,0FFh,0FFh
-40E6:0A4A 00 00 13 00 FF FF db 00h, 00h, 13h, 00h,0FFh,0FFh
-40E6:0A50 00 00 14 00 FF FF db 00h, 00h, 14h, 00h,0FFh,0FFh
-40E6:0A56 00 00 15 00 FF FF db 00h, 00h, 15h, 00h,0FFh,0FFh
-40E6:0A5C 00 00 16 00 FF FF db 00h, 00h, 16h, 00h,0FFh,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 575
-
-40E6:0A62 00 00 17 00 FF FF db 00h, 00h, 17h, 00h,0FFh,0FFh
-40E6:0A68 00 00 18 00 FF FF db 00h, 00h, 18h, 00h,0FFh,0FFh
-40E6:0A6E 00 00 19 00 FF FF db 00h, 00h, 19h, 00h,0FFh,0FFh
-40E6:0A74 00 00 1A 00 FF FF db 00h, 00h, 1Ah, 00h,0FFh,0FFh
-40E6:0A7A 00 00 1B 00 FF FF db 00h, 00h, 1Bh, 00h,0FFh,0FFh
-40E6:0A80 00 00 F8 FF 29 00 db 00h, 00h,0F8h,0FFh, 29h, 00h
-40E6:0A86 00 00 1C 00 FF FF db 00h, 00h, 1Ch, 00h,0FFh,0FFh
-40E6:0A8C 00 00 1D 00 FF FF db 00h, 00h, 1Dh, 00h,0FFh,0FFh
-40E6:0A92 00 00 1E 00 FF FF db 00h, 00h, 1Eh, 00h,0FFh,0FFh
-40E6:0A98 00 00 1F 00 FF FF db 00h, 00h, 1Fh, 00h,0FFh,0FFh
-40E6:0A9E 00 00 20 00 FF FF db 00h, 00h, 20h, 00h,0FFh,0FFh
-40E6:0AA4 00 00 21 00 FF FF db 00h, 00h, 21h, 00h,0FFh,0FFh
-40E6:0AAA 00 00 22 00 FF FF db 00h, 00h, 22h, 00h,0FFh,0FFh
-40E6:0AB0 00 00 23 00 FF FF db 00h, 00h, 23h, 00h,0FFh,0FFh
-40E6:0AB6 00 00 24 00 FF FF db 00h, 00h, 24h, 00h,0FFh,0FFh
-40E6:0ABC 00 00 25 00 FF FF db 00h, 00h, 25h, 00h,0FFh,0FFh
-40E6:0AC2 00 00 F7 FF 29 00 db 00h, 00h,0F7h,0FFh, 29h, 00h
-40E6:0AC8 26 00 FF FF 00 00 db 26h, 00h,0FFh,0FFh, 00h, 00h
-40E6:0ACE 27 00 FF FF 00 00 db 27h, 00h,0FFh,0FFh, 00h, 00h
-40E6:0AD4 28 00 FF FF 00 00 db 28h, 00h,0FFh,0FFh, 00h, 00h
-40E6:0ADA 29 00 FF FF 00 00 db 29h, 00h,0FFh,0FFh, 00h, 00h
-40E6:0AE0 2A 00 FF FF 00 00 db 2Ah, 00h,0FFh,0FFh, 00h, 00h
-40E6:0AE6 2B 00 FF FF 00 00 db 2Bh, 00h,0FFh,0FFh, 00h, 00h
-40E6:0AEC 2C 00 FC FF 01 00 db 2Ch, 00h,0FCh,0FFh, 01h, 00h
-40E6:0AF2 FF FF 00 00 02 00 db 0FFh,0FFh, 00h, 00h, 02h, 00h
-40E6:0AF8 FF FF 00 00 03 00 db 0FFh,0FFh, 00h, 00h, 03h, 00h
-40E6:0AFE FF FF 00 00 04 00 db 0FFh,0FFh, 00h, 00h, 04h, 00h
-40E6:0B04 FF FF 00 00 05 00 db 0FFh,0FFh, 00h, 00h, 05h, 00h
-40E6:0B0A FF FF 00 00 06 00 db 0FFh,0FFh, 00h, 00h, 06h, 00h
-40E6:0B10 FF FF 00 00 07 00 db 0FFh,0FFh, 00h, 00h, 07h, 00h
-40E6:0B16 FF FF 00 00 08 00 db 0FFh,0FFh, 00h, 00h, 08h, 00h
-40E6:0B1C FF FF 00 00 09 00 db 0FFh,0FFh, 00h, 00h, 09h, 00h
-40E6:0B22 FF FF 00 00 0A 00 db 0FFh,0FFh, 00h, 00h, 0Ah, 00h
-40E6:0B28 FF FF 00 00 0B 00 db 0FFh,0FFh, 00h, 00h, 0Bh, 00h
-40E6:0B2E FF FF 00 00 0C 00 db 0FFh,0FFh, 00h, 00h, 0Ch, 00h
-40E6:0B34 FF FF 00 00 0D 00 db 0FFh,0FFh, 00h, 00h, 0Dh, 00h
-40E6:0B3A FF FF 00 00 0E 00 db 0FFh,0FFh, 00h, 00h, 0Eh, 00h
-40E6:0B40 FF FF 00 00 F8 FF db 0FFh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:0B46 29 00 00 00 0F 00 db 29h, 00h, 00h, 00h, 0Fh, 00h
-40E6:0B4C FF FF 00 00 10 00 db 0FFh,0FFh, 00h, 00h, 10h, 00h
-40E6:0B52 FF FF 00 00 11 00 db 0FFh,0FFh, 00h, 00h, 11h, 00h
-40E6:0B58 FF FF 00 00 12 00 db 0FFh,0FFh, 00h, 00h, 12h, 00h
-40E6:0B5E FF FF 00 00 13 00 db 0FFh,0FFh, 00h, 00h, 13h, 00h
-40E6:0B64 FF FF 00 00 F7 FF db 0FFh,0FFh, 00h, 00h,0F7h,0FFh
-40E6:0B6A 29 00 14 00 FF FF db 29h, 00h, 14h, 00h,0FFh,0FFh
-40E6:0B70 00 00 15 00 FF FF db 00h, 00h, 15h, 00h,0FFh,0FFh
-40E6:0B76 00 00 16 00 FC FF db 00h, 00h, 16h, 00h,0FCh,0FFh
-40E6:0B7C 16 00 FA FF 7C 0B db 16h, 00h,0FAh,0FFh, 7Ch, 0Bh
-40E6:0B82 2C 00 FA FF 82 0B db 2Ch, 00h,0FAh,0FFh, 82h, 0Bh
-40E6:0B88 00 00 FF FF 1E 00 db 00h, 00h,0FFh,0FFh, 1Eh, 00h
-40E6:0B8E 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0B94 04 00 05 00 FF FF db 04h, 00h, 05h, 00h,0FFh,0FFh
-40E6:0B9A 50 00 00 00 05 00 db 50h, 00h, 00h, 00h, 05h, 00h
-40E6:0BA0 FF FF 78 00 00 00 db 0FFh,0FFh, 78h, 00h, 00h, 00h
-40E6:0BA6 00 00 05 00 FA FF db 00h, 00h, 05h, 00h,0FAh,0FFh
-40E6:0BAC 98 0B 04 00 03 00 db 98h, 0Bh, 04h, 00h, 03h, 00h
-40E6:0BB2 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 576
-
-40E6:0BB8 FA FF B6 0B 00 00 db 0FAh,0FFh,0B6h, 0Bh, 00h, 00h
-40E6:0BBE 03 00 01 00 00 00 db 03h, 00h, 01h, 00h, 00h, 00h
-40E6:0BC4 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:0BCA 01 00 00 00 03 00 db 01h, 00h, 00h, 00h, 03h, 00h
-40E6:0BD0 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:0BD6 01 00 03 00 01 00 db 01h, 00h, 03h, 00h, 01h, 00h
-40E6:0BDC 00 00 02 00 03 00 db 00h, 00h, 02h, 00h, 03h, 00h
-40E6:0BE2 01 00 02 00 FA FF db 01h, 00h, 02h, 00h,0FAh,0FFh
-40E6:0BE8 BC 0B 00 00 01 00 db 0BCh, 0Bh, 00h, 00h, 01h, 00h
-40E6:0BEE 01 00 0B 00 0B 00 db 01h, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:0BF4 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:0BFA 0F 00 0C 00 0D 00 db 0Fh, 00h, 0Ch, 00h, 0Dh, 00h
-40E6:0C00 0E 00 0F 00 0C 00 db 0Eh, 00h, 0Fh, 00h, 0Ch, 00h
-40E6:0C06 0D 00 0E 00 0F 00 db 0Dh, 00h, 0Eh, 00h, 0Fh, 00h
-40E6:0C0C 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:0C12 0F 00 0C 00 0D 00 db 0Fh, 00h, 0Ch, 00h, 0Dh, 00h
-40E6:0C18 0E 00 0F 00 0C 00 db 0Eh, 00h, 0Fh, 00h, 0Ch, 00h
-40E6:0C1E 0D 00 0E 00 0F 00 db 0Dh, 00h, 0Eh, 00h, 0Fh, 00h
-40E6:0C24 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:0C2A 0F 00 0C 00 0D 00 db 0Fh, 00h, 0Ch, 00h, 0Dh, 00h
-40E6:0C30 0E 00 0F 00 0C 00 db 0Eh, 00h, 0Fh, 00h, 0Ch, 00h
-40E6:0C36 0D 00 0E 00 0F 00 db 0Dh, 00h, 0Eh, 00h, 0Fh, 00h
-40E6:0C3C 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:0C42 0F 00 0B 00 0B 00 db 0Fh, 00h, 0Bh, 00h, 0Bh, 00h
-40E6:0C48 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:0C4E FF FF 24 00 01 00 db 0FFh,0FFh, 24h, 00h, 01h, 00h
-40E6:0C54 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:0C5A 10 00 10 00 11 00 db 10h, 00h, 10h, 00h, 11h, 00h
-40E6:0C60 11 00 11 00 11 00 db 11h, 00h, 11h, 00h, 11h, 00h
-40E6:0C66 11 00 11 00 11 00 db 11h, 00h, 11h, 00h, 11h, 00h
-40E6:0C6C 11 00 10 00 10 00 db 11h, 00h, 10h, 00h, 10h, 00h
-40E6:0C72 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:0C78 01 00 00 00 FF FF db 01h, 00h, 00h, 00h,0FFh,0FFh
-40E6:0C7E 57 00 FA FF EA 0B db 57h, 00h,0FAh,0FFh,0EAh, 0Bh
-40E6:0C84 FF FF 14 00 00 00 db 0FFh,0FFh, 14h, 00h, 00h, 00h
-40E6:0C8A 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0C90 04 00 03 00 05 00 db 04h, 00h, 03h, 00h, 05h, 00h
-40E6:0C96 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0C9C 09 00 0A 00 FC FF db 09h, 00h, 0Ah, 00h,0FCh,0FFh
-40E6:0CA2 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0CA8 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:0CAE FA FF A2 0C 06 00 db 0FAh,0FFh,0A2h, 0Ch, 06h, 00h
-40E6:0CB4 07 00 08 00 09 00 db 07h, 00h, 08h, 00h, 09h, 00h
-40E6:0CBA 0A 00 0B 00 0C 00 db 0Ah, 00h, 0Bh, 00h, 0Ch, 00h
-40E6:0CC0 FF FF 02 00 0D 00 db 0FFh,0FFh, 02h, 00h, 0Dh, 00h
-40E6:0CC6 FF FF 02 00 0E 00 db 0FFh,0FFh, 02h, 00h, 0Eh, 00h
-40E6:0CCC FF FF 02 00 0F 00 db 0FFh,0FFh, 02h, 00h, 0Fh, 00h
-40E6:0CD2 FF FF 02 00 10 00 db 0FFh,0FFh, 02h, 00h, 10h, 00h
-40E6:0CD8 FF FF 02 00 0F 00 db 0FFh,0FFh, 02h, 00h, 0Fh, 00h
-40E6:0CDE FF FF 14 00 10 00 db 0FFh,0FFh, 14h, 00h, 10h, 00h
-40E6:0CE4 FF FF 1E 00 FA FF db 0FFh,0FFh, 1Eh, 00h,0FAh,0FFh
-40E6:0CEA DC 0C 00 00 01 00 db 0DCh, 0Ch, 00h, 00h, 01h, 00h
-40E6:0CF0 02 00 F8 FF 2B 00 db 02h, 00h,0F8h,0FFh, 2Bh, 00h
-40E6:0CF6 2A 00 03 00 04 00 db 2Ah, 00h, 03h, 00h, 04h, 00h
-40E6:0CFC 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0D02 08 00 FA FF F2 0C db 08h, 00h,0FAh,0FFh,0F2h, 0Ch
-40E6:0D08 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 577
-
-40E6:0D0E 0C 00 0D 00 FC FF db 0Ch, 00h, 0Dh, 00h,0FCh,0FFh
-40E6:0D14 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0D1A 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:0D20 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0D26 09 00 0A 00 FA FF db 09h, 00h, 0Ah, 00h,0FAh,0FFh
-40E6:0D2C 14 0D 00 00 01 00 db 14h, 0Dh, 00h, 00h, 01h, 00h
-40E6:0D32 07 00 02 00 05 00 db 07h, 00h, 02h, 00h, 05h, 00h
-40E6:0D38 03 00 00 00 06 00 db 03h, 00h, 00h, 00h, 06h, 00h
-40E6:0D3E 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0D44 00 00 03 00 07 00 db 00h, 00h, 03h, 00h, 07h, 00h
-40E6:0D4A FA FF 2E 0D 00 00 db 0FAh,0FFh, 2Eh, 0Dh, 00h, 00h
-40E6:0D50 01 00 07 00 02 00 db 01h, 00h, 07h, 00h, 02h, 00h
-40E6:0D56 05 00 03 00 00 00 db 05h, 00h, 03h, 00h, 00h, 00h
-40E6:0D5C 06 00 04 00 05 00 db 06h, 00h, 04h, 00h, 05h, 00h
-40E6:0D62 06 00 00 00 03 00 db 06h, 00h, 00h, 00h, 03h, 00h
-40E6:0D68 07 00 FA FF 4E 0D db 07h, 00h,0FAh,0FFh, 4Eh, 0Dh
-40E6:0D6E 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:0D74 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:0D7A 03 00 03 00 04 00 db 03h, 00h, 03h, 00h, 04h, 00h
-40E6:0D80 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:0D86 06 00 06 00 07 00 db 06h, 00h, 06h, 00h, 07h, 00h
-40E6:0D8C 07 00 FA FF 6E 0D db 07h, 00h,0FAh,0FFh, 6Eh, 0Dh
-40E6:0D92 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0D98 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:0D9E 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:0DA4 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:0DAA FA FF 92 0D 00 00 db 0FAh,0FFh, 92h, 0Dh, 00h, 00h
-40E6:0DB0 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0DB6 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0DBC 07 00 08 00 09 00 db 07h, 00h, 08h, 00h, 09h, 00h
-40E6:0DC2 0A 00 FA FF AE 0D db 0Ah, 00h,0FAh,0FFh,0AEh, 0Dh
-40E6:0DC8 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0DCE 03 00 FA FF C8 0D db 03h, 00h,0FAh,0FFh,0C8h, 0Dh
-40E6:0DD4 F8 FF 1D 00 2D 00 db 0F8h,0FFh, 1Dh, 00h, 2Dh, 00h
-40E6:0DDA 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:0DE0 03 00 04 00 00 00 db 03h, 00h, 04h, 00h, 00h, 00h
-40E6:0DE6 FF FF 64 00 F8 FF db 0FFh,0FFh, 64h, 00h,0F8h,0FFh
-40E6:0DEC 1D 00 2D 00 00 00 db 1Dh, 00h, 2Dh, 00h, 00h, 00h
-40E6:0DF2 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0DF8 04 00 00 00 FF FF db 04h, 00h, 00h, 00h,0FFh,0FFh
-40E6:0DFE 28 00 FA FF D4 0D db 28h, 00h,0FAh,0FFh,0D4h, 0Dh
-40E6:0E04 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:0E0A 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:0E10 02 00 03 00 02 00 db 02h, 00h, 03h, 00h, 02h, 00h
-40E6:0E16 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:0E1C FF FF 78 00 00 00 db 0FFh,0FFh, 78h, 00h, 00h, 00h
-40E6:0E22 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:0E28 02 00 03 00 02 00 db 02h, 00h, 03h, 00h, 02h, 00h
-40E6:0E2E 03 00 02 00 01 00 db 03h, 00h, 02h, 00h, 01h, 00h
-40E6:0E34 01 00 00 00 FF FF db 01h, 00h, 00h, 00h,0FFh,0FFh
-40E6:0E3A 28 00 FA FF 04 0E db 28h, 00h,0FAh,0FFh, 04h, 0Eh
-40E6:0E40 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:0E46 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:0E4C 03 00 04 00 04 00 db 03h, 00h, 04h, 00h, 04h, 00h
-40E6:0E52 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:0E58 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:0E5E 00 00 FF FF 5A 00 db 00h, 00h,0FFh,0FFh, 5Ah, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 578
-
-40E6:0E64 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:0E6A 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:0E70 03 00 04 00 04 00 db 03h, 00h, 04h, 00h, 04h, 00h
-40E6:0E76 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:0E7C 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:0E82 00 00 FF FF 71 00 db 00h, 00h,0FFh,0FFh, 71h, 00h
-40E6:0E88 FA FF 40 0E 00 00 db 0FAh,0FFh, 40h, 0Eh, 00h, 00h
-40E6:0E8E 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:0E94 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:0E9A 03 00 04 00 04 00 db 03h, 00h, 04h, 00h, 04h, 00h
-40E6:0EA0 04 00 04 00 03 00 db 04h, 00h, 04h, 00h, 03h, 00h
-40E6:0EA6 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:0EAC 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:0EB2 FF FF 55 00 00 00 db 0FFh,0FFh, 55h, 00h, 00h, 00h
-40E6:0EB8 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:0EBE 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:0EC4 04 00 04 00 04 00 db 04h, 00h, 04h, 00h, 04h, 00h
-40E6:0ECA 04 00 04 00 04 00 db 04h, 00h, 04h, 00h, 04h, 00h
-40E6:0ED0 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:0ED6 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:0EDC 00 00 FF FF 2F 00 db 00h, 00h,0FFh,0FFh, 2Fh, 00h
-40E6:0EE2 FA FF 8C 0E 00 00 db 0FAh,0FFh, 8Ch, 0Eh, 00h, 00h
-40E6:0EE8 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0EEE 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0EF4 07 00 06 00 05 00 db 07h, 00h, 06h, 00h, 05h, 00h
-40E6:0EFA 04 00 03 00 02 00 db 04h, 00h, 03h, 00h, 02h, 00h
-40E6:0F00 01 00 00 00 FF FF db 01h, 00h, 00h, 00h,0FFh,0FFh
-40E6:0F06 38 00 00 00 01 00 db 38h, 00h, 00h, 00h, 01h, 00h
-40E6:0F0C 02 00 03 00 04 00 db 02h, 00h, 03h, 00h, 04h, 00h
-40E6:0F12 05 00 04 00 03 00 db 05h, 00h, 04h, 00h, 03h, 00h
-40E6:0F18 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:0F1E FF FF 2F 00 00 00 db 0FFh,0FFh, 2Fh, 00h, 00h, 00h
-40E6:0F24 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0F2A 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:0F30 FF FF 5A 00 00 00 db 0FFh,0FFh, 5Ah, 00h, 00h, 00h
-40E6:0F36 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0F3C 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0F42 05 00 04 00 03 00 db 05h, 00h, 04h, 00h, 03h, 00h
-40E6:0F48 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:0F4E FA FF E6 0E 00 00 db 0FAh,0FFh,0E6h, 0Eh, 00h, 00h
-40E6:0F54 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:0F5A 04 00 05 00 06 00 db 04h, 00h, 05h, 00h, 06h, 00h
-40E6:0F60 07 00 06 00 05 00 db 07h, 00h, 06h, 00h, 05h, 00h
-40E6:0F66 06 00 07 00 06 00 db 06h, 00h, 07h, 00h, 06h, 00h
-40E6:0F6C 05 00 06 00 07 00 db 05h, 00h, 06h, 00h, 07h, 00h
-40E6:0F72 06 00 05 00 06 00 db 06h, 00h, 05h, 00h, 06h, 00h
-40E6:0F78 07 00 08 00 09 00 db 07h, 00h, 08h, 00h, 09h, 00h
-40E6:0F7E 0A 00 0B 00 0C 00 db 0Ah, 00h, 0Bh, 00h, 0Ch, 00h
-40E6:0F84 0D 00 0E 00 0E 00 db 0Dh, 00h, 0Eh, 00h, 0Eh, 00h
-40E6:0F8A 0F 00 0F 00 10 00 db 0Fh, 00h, 0Fh, 00h, 10h, 00h
-40E6:0F90 10 00 11 00 FF FF db 10h, 00h, 11h, 00h,0FFh,0FFh
-40E6:0F96 5A 00 12 00 11 00 db 5Ah, 00h, 12h, 00h, 11h, 00h
-40E6:0F9C 12 00 11 00 FF FF db 12h, 00h, 11h, 00h,0FFh,0FFh
-40E6:0FA2 28 00 12 00 13 00 db 28h, 00h, 12h, 00h, 13h, 00h
-40E6:0FA8 14 00 14 00 14 00 db 14h, 00h, 14h, 00h, 14h, 00h
-40E6:0FAE 14 00 14 00 14 00 db 14h, 00h, 14h, 00h, 14h, 00h
-40E6:0FB4 13 00 12 00 FA FF db 13h, 00h, 12h, 00h,0FAh,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 579
-
-40E6:0FBA 92 0F 01 00 01 00 db 92h, 0Fh, 01h, 00h, 01h, 00h
-40E6:0FC0 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:0FC6 04 00 05 00 F8 FF db 04h, 00h, 05h, 00h,0F8h,0FFh
-40E6:0FCC 06 00 2E 00 05 00 db 06h, 00h, 2Eh, 00h, 05h, 00h
-40E6:0FD2 06 00 06 00 07 00 db 06h, 00h, 06h, 00h, 07h, 00h
-40E6:0FD8 07 00 08 00 08 00 db 07h, 00h, 08h, 00h, 08h, 00h
-40E6:0FDE 09 00 09 00 00 00 db 09h, 00h, 09h, 00h, 00h, 00h
-40E6:0FE4 FF FF 19 00 FA FF db 0FFh,0FFh, 19h, 00h,0FAh,0FFh
-40E6:0FEA BC 0F 00 00 00 00 db 0BCh, 0Fh, 00h, 00h, 00h, 00h
-40E6:0FF0 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:0FF6 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:0FFC 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:1002 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:1008 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-40E6:100E 39 00 00 00 00 00 db 39h, 00h, 00h, 00h, 00h, 00h
-40E6:1014 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:101A 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:1020 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:1026 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:102C 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-40E6:1032 62 00 FA FF EC 0F db 62h, 00h,0FAh,0FFh,0ECh, 0Fh
-40E6:1038 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:103E 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:1044 03 00 03 00 04 00 db 03h, 00h, 03h, 00h, 04h, 00h
-40E6:104A 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:1050 06 00 06 00 05 00 db 06h, 00h, 06h, 00h, 05h, 00h
-40E6:1056 05 00 04 00 04 00 db 05h, 00h, 04h, 00h, 04h, 00h
-40E6:105C 05 00 05 00 06 00 db 05h, 00h, 05h, 00h, 06h, 00h
-40E6:1062 06 00 05 00 05 00 db 06h, 00h, 05h, 00h, 05h, 00h
-40E6:1068 04 00 04 00 03 00 db 04h, 00h, 04h, 00h, 03h, 00h
-40E6:106E 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:1074 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:107A FF FF 9D 00 FA FF db 0FFh,0FFh, 9Dh, 00h,0FAh,0FFh
-40E6:1080 38 10 00 00 01 00 db 38h, 10h, 00h, 00h, 01h, 00h
-40E6:1086 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:108C 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:1092 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:1098 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:109E 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:10A4 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:10AA FF FF 39 00 00 00 db 0FFh,0FFh, 39h, 00h, 00h, 00h
-40E6:10B0 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:10B6 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:10BC 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:10C2 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:10C8 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:10CE 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:10D4 00 00 FF FF 64 00 db 00h, 00h,0FFh,0FFh, 64h, 00h
-40E6:10DA 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:10E0 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:10E6 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:10EC 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:10F2 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:10F8 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:10FE 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:1104 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:110A 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 580
-
-40E6:1110 00 00 FF FF A0 00 db 00h, 00h,0FFh,0FFh,0A0h, 00h
-40E6:1116 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:111C 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:1122 03 00 02 00 02 00 db 03h, 00h, 02h, 00h, 02h, 00h
-40E6:1128 03 00 03 00 02 00 db 03h, 00h, 03h, 00h, 02h, 00h
-40E6:112E 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:1134 00 00 FF FF 20 00 db 00h, 00h,0FFh,0FFh, 20h, 00h
-40E6:113A FA FF 82 10 00 00 db 0FAh,0FFh, 82h, 10h, 00h, 00h
-40E6:1140 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:1146 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:114C 00 00 FF FF 1B 00 db 00h, 00h,0FFh,0FFh, 1Bh, 00h
-40E6:1152 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:1158 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:115E 01 00 00 00 FF FF db 01h, 00h, 00h, 00h,0FFh,0FFh
-40E6:1164 A7 00 00 00 01 00 db 0A7h, 00h, 00h, 00h, 01h, 00h
-40E6:116A 01 00 02 00 FF FF db 01h, 00h, 02h, 00h,0FFh,0FFh
-40E6:1170 32 00 01 00 01 00 db 32h, 00h, 01h, 00h, 01h, 00h
-40E6:1176 00 00 FF FF 44 00 db 00h, 00h,0FFh,0FFh, 44h, 00h
-40E6:117C FA FF 3E 11 00 00 db 0FAh,0FFh, 3Eh, 11h, 00h, 00h
-40E6:1182 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:1188 01 00 00 00 FF FF db 01h, 00h, 00h, 00h,0FFh,0FFh
-40E6:118E 14 01 00 00 01 00 db 14h, 01h, 00h, 00h, 01h, 00h
-40E6:1194 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:119A 00 00 FF FF 38 00 db 00h, 00h,0FFh,0FFh, 38h, 00h
-40E6:11A0 FA FF 80 11 00 00 db 0FAh,0FFh, 80h, 11h, 00h, 00h
-40E6:11A6 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:11AC 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:11B2 04 00 04 00 05 00 db 04h, 00h, 04h, 00h, 05h, 00h
-40E6:11B8 05 00 06 00 06 00 db 05h, 00h, 06h, 00h, 06h, 00h
-40E6:11BE 00 00 FF FF 52 00 db 00h, 00h,0FFh,0FFh, 52h, 00h
-40E6:11C4 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:11CA 02 00 02 00 03 00 db 02h, 00h, 02h, 00h, 03h, 00h
-40E6:11D0 03 00 04 00 04 00 db 03h, 00h, 04h, 00h, 04h, 00h
-40E6:11D6 05 00 05 00 06 00 db 05h, 00h, 05h, 00h, 06h, 00h
-40E6:11DC 06 00 00 00 FF FF db 06h, 00h, 00h, 00h,0FFh,0FFh
-40E6:11E2 38 00 00 00 01 00 db 38h, 00h, 00h, 00h, 01h, 00h
-40E6:11E8 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:11EE 03 00 03 00 04 00 db 03h, 00h, 03h, 00h, 04h, 00h
-40E6:11F4 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:11FA 05 00 05 00 04 00 db 05h, 00h, 05h, 00h, 04h, 00h
-40E6:1200 04 00 05 00 05 00 db 04h, 00h, 05h, 00h, 05h, 00h
-40E6:1206 06 00 06 00 00 00 db 06h, 00h, 06h, 00h, 00h, 00h
-40E6:120C FF FF 81 00 FA FF db 0FFh,0FFh, 81h, 00h,0FAh,0FFh
-40E6:1212 A4 11 06 00 FE FF db 0A4h, 11h, 06h, 00h,0FEh,0FFh
-40E6:1218 13 01 F6 00 07 00 db 13h, 01h,0F6h, 00h, 07h, 00h
-40E6:121E FE FF 23 01 F6 00 db 0FEh,0FFh, 23h, 01h,0F6h, 00h
-40E6:1224 06 00 FE FF 33 01 db 06h, 00h,0FEh,0FFh, 33h, 01h
-40E6:122A F6 00 07 00 F8 FF db 0F6h, 00h, 07h, 00h,0F8h,0FFh
-40E6:1230 05 00 2A 00 FE FF db 05h, 00h, 2Ah, 00h,0FEh,0FFh
-40E6:1236 43 01 F6 00 06 00 db 43h, 01h,0F6h, 00h, 06h, 00h
-40E6:123C FE FF 53 01 F6 00 db 0FEh,0FFh, 53h, 01h,0F6h, 00h
-40E6:1242 07 00 FE FF 63 01 db 07h, 00h,0FEh,0FFh, 63h, 01h
-40E6:1248 F6 00 06 00 FC FF db 0F6h, 00h, 06h, 00h,0FCh,0FFh
-40E6:124E 02 00 FE FF 15 01 db 02h, 00h,0FEh,0FFh, 15h, 01h
-40E6:1254 1A 01 03 00 FE FF db 1Ah, 01h, 03h, 00h,0FEh,0FFh
-40E6:125A 15 01 22 01 02 00 db 15h, 01h, 22h, 01h, 02h, 00h
-40E6:1260 FE FF 15 01 2A 01 db 0FEh,0FFh, 15h, 01h, 2Ah, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 581
-
-40E6:1266 03 00 FE FF 15 01 db 03h, 00h,0FEh,0FFh, 15h, 01h
-40E6:126C 32 01 02 00 FE FF db 32h, 01h, 02h, 00h,0FEh,0FFh
-40E6:1272 25 01 32 01 07 00 db 25h, 01h, 32h, 01h, 07h, 00h
-40E6:1278 FE FF 35 01 32 01 db 0FEh,0FFh, 35h, 01h, 32h, 01h
-40E6:127E 06 00 FE FF 45 01 db 06h, 00h,0FEh,0FFh, 45h, 01h
-40E6:1284 32 01 07 00 FE FF db 32h, 01h, 07h, 00h,0FEh,0FFh
-40E6:128A 35 01 32 01 04 00 db 35h, 01h, 32h, 01h, 04h, 00h
-40E6:1290 FE FF 25 01 32 01 db 0FEh,0FFh, 25h, 01h, 32h, 01h
-40E6:1296 05 00 FE FF 15 01 db 05h, 00h,0FEh,0FFh, 15h, 01h
-40E6:129C 32 01 04 00 FE FF db 32h, 01h, 04h, 00h,0FEh,0FFh
-40E6:12A2 05 01 32 01 05 00 db 05h, 01h, 32h, 01h, 05h, 00h
-40E6:12A8 FE FF F5 00 32 01 db 0FEh,0FFh,0F5h, 00h, 32h, 01h
-40E6:12AE 04 00 FE FF E5 00 db 04h, 00h,0FEh,0FFh,0E5h, 00h
-40E6:12B4 32 01 05 00 FE FF db 32h, 01h, 05h, 00h,0FEh,0FFh
-40E6:12BA D5 00 32 01 04 00 db 0D5h, 00h, 32h, 01h, 04h, 00h
-40E6:12C0 FE FF C5 00 32 01 db 0FEh,0FFh,0C5h, 00h, 32h, 01h
-40E6:12C6 05 00 FE FF B5 00 db 05h, 00h,0FEh,0FFh,0B5h, 00h
-40E6:12CC 32 01 04 00 FE FF db 32h, 01h, 04h, 00h,0FEh,0FFh
-40E6:12D2 A5 00 32 01 05 00 db 0A5h, 00h, 32h, 01h, 05h, 00h
-40E6:12D8 F8 FF 05 00 2A 00 db 0F8h,0FFh, 05h, 00h, 2Ah, 00h
-40E6:12DE FE FF 95 00 32 01 db 0FEh,0FFh, 95h, 00h, 32h, 01h
-40E6:12E4 02 00 FC FF 04 00 db 02h, 00h,0FCh,0FFh, 04h, 00h
-40E6:12EA FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:12F0 05 00 FD FF F0 FF db 05h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:12F6 00 00 04 00 FD FF db 00h, 00h, 04h, 00h,0FDh,0FFh
-40E6:12FC F0 FF 00 00 05 00 db 0F0h,0FFh, 00h, 00h, 05h, 00h
-40E6:1302 FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:1308 04 00 FD FF F0 FF db 04h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:130E 00 00 05 00 FD FF db 00h, 00h, 05h, 00h,0FDh,0FFh
-40E6:1314 F0 FF 00 00 04 00 db 0F0h,0FFh, 00h, 00h, 04h, 00h
-40E6:131A FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:1320 05 00 FD FF F0 FF db 05h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:1326 00 00 04 00 FD FF db 00h, 00h, 04h, 00h,0FDh,0FFh
-40E6:132C F0 FF 00 00 05 00 db 0F0h,0FFh, 00h, 00h, 05h, 00h
-40E6:1332 FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:1338 04 00 08 00 FF FF db 04h, 00h, 08h, 00h,0FFh,0FFh
-40E6:133E 96 00 06 00 FD FF db 96h, 00h, 06h, 00h,0FDh,0FFh
-40E6:1344 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:134A FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1350 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:1356 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:135C 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:1362 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1368 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:136E 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:1374 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:137A FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1380 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:1386 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:138C 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:1392 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1398 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:139E 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:13A4 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:13AA FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:13B0 06 00 08 00 FF FF db 06h, 00h, 08h, 00h,0FFh,0FFh
-40E6:13B6 4C 00 FE FF 60 01 db 4Ch, 00h,0FEh,0FFh, 60h, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 582
-
-40E6:13BC FA 00 F8 FF 05 00 db 0FAh, 00h,0F8h,0FFh, 05h, 00h
-40E6:13C2 2A 00 04 00 FD FF db 2Ah, 00h, 04h, 00h,0FDh,0FFh
-40E6:13C8 F0 FF 00 00 05 00 db 0F0h,0FFh, 00h, 00h, 05h, 00h
-40E6:13CE FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:13D4 04 00 FD FF F0 FF db 04h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:13DA 00 00 05 00 FD FF db 00h, 00h, 05h, 00h,0FDh,0FFh
-40E6:13E0 F0 FF 00 00 04 00 db 0F0h,0FFh, 00h, 00h, 04h, 00h
-40E6:13E6 FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:13EC 05 00 FD FF F0 FF db 05h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:13F2 00 00 04 00 FD FF db 00h, 00h, 04h, 00h,0FDh,0FFh
-40E6:13F8 F0 FF 00 00 05 00 db 0F0h,0FFh, 00h, 00h, 05h, 00h
-40E6:13FE FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:1404 04 00 FD FF F0 FF db 04h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:140A 00 00 05 00 FD FF db 00h, 00h, 05h, 00h,0FDh,0FFh
-40E6:1410 F0 FF 00 00 04 00 db 0F0h,0FFh, 00h, 00h, 04h, 00h
-40E6:1416 FD FF F0 FF 00 00 db 0FDh,0FFh,0F0h,0FFh, 00h, 00h
-40E6:141C 05 00 FD FF F0 FF db 05h, 00h,0FDh,0FFh,0F0h,0FFh
-40E6:1422 00 00 FC FF 06 00 db 00h, 00h,0FCh,0FFh, 06h, 00h
-40E6:1428 F8 FF 05 00 2B 00 db 0F8h,0FFh, 05h, 00h, 2Bh, 00h
-40E6:142E FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1434 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:143A 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:1440 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:1446 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:144C 06 00 FD FF 00 00 db 06h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1452 F8 FF FD FF 10 00 db 0F8h,0FFh,0FDh,0FFh, 10h, 00h
-40E6:1458 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:145E 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:1464 FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:146A FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:1470 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1476 F8 FF 01 00 FC FF db 0F8h,0FFh, 01h, 00h,0FCh,0FFh
-40E6:147C 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:1482 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:1488 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:148E FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1494 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:149A 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:14A0 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:14A6 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:14AC 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:14B2 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:14B8 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:14BE FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:14C4 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:14CA 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:14D0 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:14D6 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:14DC 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:14E2 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:14E8 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:14EE FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:14F4 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:14FA 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:1500 00 00 F8 FF 00 00 db 00h, 00h,0F8h,0FFh, 00h, 00h
-40E6:1506 FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:150C 01 00 FD FF 10 00 db 01h, 00h,0FDh,0FFh, 10h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 583
-
-40E6:1512 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:1518 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:151E FC FF 00 00 F8 FF db 0FCh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:1524 05 00 2C 00 FD FF db 05h, 00h, 2Ch, 00h,0FDh,0FFh
-40E6:152A 00 00 F8 FF 01 00 db 00h, 00h,0F8h,0FFh, 01h, 00h
-40E6:1530 FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:1536 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:153C F8 FF 01 00 FD FF db 0F8h,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1542 00 00 F8 FF 00 00 db 00h, 00h,0F8h,0FFh, 00h, 00h
-40E6:1548 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:154E 06 00 FD FF 10 00 db 06h, 00h,0FDh,0FFh, 10h, 00h
-40E6:1554 00 00 07 00 FD FF db 00h, 00h, 07h, 00h,0FDh,0FFh
-40E6:155A 10 00 00 00 06 00 db 10h, 00h, 00h, 00h, 06h, 00h
-40E6:1560 FD FF 10 00 00 00 db 0FDh,0FFh, 10h, 00h, 00h, 00h
-40E6:1566 07 00 FD FF 10 00 db 07h, 00h,0FDh,0FFh, 10h, 00h
-40E6:156C 00 00 06 00 FD FF db 00h, 00h, 06h, 00h,0FDh,0FFh
-40E6:1572 10 00 00 00 07 00 db 10h, 00h, 00h, 00h, 07h, 00h
-40E6:1578 FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:157E 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1584 F8 FF 00 00 FD FF db 0F8h,0FFh, 00h, 00h,0FDh,0FFh
-40E6:158A 00 00 F8 FF 01 00 db 00h, 00h,0F8h,0FFh, 01h, 00h
-40E6:1590 FD FF 00 00 F8 FF db 0FDh,0FFh, 00h, 00h,0F8h,0FFh
-40E6:1596 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:159C F8 FF 01 00 FD FF db 0F8h,0FFh, 01h, 00h,0FDh,0FFh
-40E6:15A2 00 00 F8 FF 00 00 db 00h, 00h,0F8h,0FFh, 00h, 00h
-40E6:15A8 FC FF 02 00 02 00 db 0FCh,0FFh, 02h, 00h, 02h, 00h
-40E6:15AE 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-40E6:15B4 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:15BA 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:15C0 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:15C6 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:15CC 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-40E6:15D2 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:15D8 01 00 02 00 02 00 db 01h, 00h, 02h, 00h, 02h, 00h
-40E6:15DE 01 00 01 00 FA FF db 01h, 00h, 01h, 00h,0FAh,0FFh
-40E6:15E4 AA 15 00 00 00 00 db 0AAh, 15h, 00h, 00h, 00h, 00h
-40E6:15EA 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
-40E6:15F0 02 00 03 00 03 00 db 02h, 00h, 03h, 00h, 03h, 00h
-40E6:15F6 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-40E6:15FC 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-40E6:1602 03 00 03 00 00 00 db 03h, 00h, 03h, 00h, 00h, 00h
-40E6:1608 00 00 03 00 03 00 db 00h, 00h, 03h, 00h, 03h, 00h
-40E6:160E 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-40E6:1614 03 00 FA FF E6 15 db 03h, 00h,0FAh,0FFh,0E6h, 15h
-40E6:161A 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:1620 03 00 04 00 05 00 db 03h, 00h, 04h, 00h, 05h, 00h
-40E6:1626 06 00 07 00 08 00 db 06h, 00h, 07h, 00h, 08h, 00h
-40E6:162C 09 00 0A 00 0B 00 db 09h, 00h, 0Ah, 00h, 0Bh, 00h
-40E6:1632 0C 00 0D 00 0E 00 db 0Ch, 00h, 0Dh, 00h, 0Eh, 00h
-40E6:1638 0F 00 10 00 11 00 db 0Fh, 00h, 10h, 00h, 11h, 00h
-40E6:163E 12 00 13 00 FA FF db 12h, 00h, 13h, 00h,0FAh,0FFh
-40E6:1644 1A 16 FE FF 9E 00 db 1Ah, 16h,0FEh,0FFh, 9Eh, 00h
-40E6:164A C8 00 01 00 FF FF db 0C8h, 00h, 01h, 00h,0FFh,0FFh
-40E6:1650 10 00 FD FF 03 00 db 10h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1656 04 00 00 00 FD FF db 04h, 00h, 00h, 00h,0FDh,0FFh
-40E6:165C 03 00 03 00 01 00 db 03h, 00h, 03h, 00h, 01h, 00h
-40E6:1662 FD FF 05 00 02 00 db 0FDh,0FFh, 05h, 00h, 02h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 584
-
-40E6:1668 00 00 FD FF 08 00 db 00h, 00h,0FDh,0FFh, 08h, 00h
-40E6:166E 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1674 05 00 02 00 00 00 db 05h, 00h, 02h, 00h, 00h, 00h
-40E6:167A FD FF 06 00 04 00 db 0FDh,0FFh, 06h, 00h, 04h, 00h
-40E6:1680 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1686 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:168C 04 00 03 00 01 00 db 04h, 00h, 03h, 00h, 01h, 00h
-40E6:1692 FD FF 05 00 05 00 db 0FDh,0FFh, 05h, 00h, 05h, 00h
-40E6:1698 00 00 FD FF 05 00 db 00h, 00h,0FDh,0FFh, 05h, 00h
-40E6:169E 03 00 01 00 FD FF db 03h, 00h, 01h, 00h,0FDh,0FFh
-40E6:16A4 05 00 05 00 00 00 db 05h, 00h, 05h, 00h, 00h, 00h
-40E6:16AA FD FF 05 00 04 00 db 0FDh,0FFh, 05h, 00h, 04h, 00h
-40E6:16B0 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:16B6 03 00 00 00 FD FF db 03h, 00h, 00h, 00h,0FDh,0FFh
-40E6:16BC 04 00 03 00 01 00 db 04h, 00h, 03h, 00h, 01h, 00h
-40E6:16C2 FD FF 03 00 02 00 db 0FDh,0FFh, 03h, 00h, 02h, 00h
-40E6:16C8 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:16CE 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:16D4 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:16DA FD FF 03 00 03 00 db 0FDh,0FFh, 03h, 00h, 03h, 00h
-40E6:16E0 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:16E6 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:16EC 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:16F2 FD FF 02 00 01 00 db 0FDh,0FFh, 02h, 00h, 01h, 00h
-40E6:16F8 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:16FE 03 00 01 00 FD FF db 03h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1704 03 00 03 00 00 00 db 03h, 00h, 03h, 00h, 00h, 00h
-40E6:170A FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:1710 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1716 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:171C 02 00 00 00 01 00 db 02h, 00h, 00h, 00h, 01h, 00h
-40E6:1722 FD FF 03 00 00 00 db 0FDh,0FFh, 03h, 00h, 00h, 00h
-40E6:1728 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:172E 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1734 05 00 FE FF 00 00 db 05h, 00h,0FEh,0FFh, 00h, 00h
-40E6:173A FD FF 09 00 FD FF db 0FDh,0FFh, 09h, 00h,0FDh,0FFh
-40E6:1740 01 00 FD FF 06 00 db 01h, 00h,0FDh,0FFh, 06h, 00h
-40E6:1746 FC FF 00 00 FD FF db 0FCh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:174C 05 00 FE FF 01 00 db 05h, 00h,0FEh,0FFh, 01h, 00h
-40E6:1752 FD FF 07 00 FE FF db 0FDh,0FFh, 07h, 00h,0FEh,0FFh
-40E6:1758 00 00 FD FF 09 00 db 00h, 00h,0FDh,0FFh, 09h, 00h
-40E6:175E FC FF 01 00 FD FF db 0FCh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1764 08 00 FD FF 00 00 db 08h, 00h,0FDh,0FFh, 00h, 00h
-40E6:176A FD FF 06 00 FE FF db 0FDh,0FFh, 06h, 00h,0FEh,0FFh
-40E6:1770 01 00 FD FF 05 00 db 01h, 00h,0FDh,0FFh, 05h, 00h
-40E6:1776 FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:177C 03 00 FE FF 01 00 db 03h, 00h,0FEh,0FFh, 01h, 00h
-40E6:1782 FD FF 04 00 FE FF db 0FDh,0FFh, 04h, 00h,0FEh,0FFh
-40E6:1788 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:178E FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1794 02 00 FF FF 00 00 db 02h, 00h,0FFh,0FFh, 00h, 00h
-40E6:179A FD FF 05 00 FD FF db 0FDh,0FFh, 05h, 00h,0FDh,0FFh
-40E6:17A0 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:17A6 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:17AC 03 00 FF FF 01 00 db 03h, 00h,0FFh,0FFh, 01h, 00h
-40E6:17B2 FD FF 04 00 00 00 db 0FDh,0FFh, 04h, 00h, 00h, 00h
-40E6:17B8 00 00 FD FF 08 00 db 00h, 00h,0FDh,0FFh, 08h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 585
-
-40E6:17BE FD FF 01 00 FD FF db 0FDh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:17C4 04 00 FE FF 00 00 db 04h, 00h,0FEh,0FFh, 00h, 00h
-40E6:17CA FD FF 06 00 FE FF db 0FDh,0FFh, 06h, 00h,0FEh,0FFh
-40E6:17D0 01 00 FD FF 07 00 db 01h, 00h,0FDh,0FFh, 07h, 00h
-40E6:17D6 FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:17DC 08 00 FF FF 01 00 db 08h, 00h,0FFh,0FFh, 01h, 00h
-40E6:17E2 FD FF 0A 00 FF FF db 0FDh,0FFh, 0Ah, 00h,0FFh,0FFh
-40E6:17E8 00 00 FE FF 64 00 db 00h, 00h,0FEh,0FFh, 64h, 00h
-40E6:17EE 64 00 03 00 FF FF db 64h, 00h, 03h, 00h,0FFh,0FFh
-40E6:17F4 05 00 FE FF 7E 01 db 05h, 00h,0FEh,0FFh, 7Eh, 01h
-40E6:17FA F0 00 03 00 FD FF db 0F0h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1800 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-40E6:1806 FD FF FF FF 06 00 db 0FDh,0FFh,0FFh,0FFh, 06h, 00h
-40E6:180C 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1812 02 00 02 00 FD FF db 02h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1818 FC FF 04 00 03 00 db 0FCh,0FFh, 04h, 00h, 03h, 00h
-40E6:181E FD FF FC FF 04 00 db 0FDh,0FFh,0FCh,0FFh, 04h, 00h
-40E6:1824 02 00 FD FF FA FF db 02h, 00h,0FDh,0FFh,0FAh,0FFh
-40E6:182A 04 00 03 00 FD FF db 04h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1830 FB FF 04 00 02 00 db 0FBh,0FFh, 04h, 00h, 02h, 00h
-40E6:1836 FD FF FA FF 03 00 db 0FDh,0FFh,0FAh,0FFh, 03h, 00h
-40E6:183C 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:1842 03 00 02 00 FD FF db 03h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1848 FB FF 02 00 03 00 db 0FBh,0FFh, 02h, 00h, 03h, 00h
-40E6:184E FD FF FE FF 02 00 db 0FDh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:1854 02 00 FD FF FC FF db 02h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:185A 02 00 03 00 FD FF db 02h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1860 FC FF 02 00 02 00 db 0FCh,0FFh, 02h, 00h, 02h, 00h
-40E6:1866 FD FF FD FF 01 00 db 0FDh,0FFh,0FDh,0FFh, 01h, 00h
-40E6:186C 03 00 FD FF FA FF db 03h, 00h,0FDh,0FFh,0FAh,0FFh
-40E6:1872 03 00 02 00 FD FF db 03h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1878 FB FF 01 00 03 00 db 0FBh,0FFh, 01h, 00h, 03h, 00h
-40E6:187E FD FF FC FF 01 00 db 0FDh,0FFh,0FCh,0FFh, 01h, 00h
-40E6:1884 02 00 FD FF FB FF db 02h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:188A 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1890 FB FF 00 00 02 00 db 0FBh,0FFh, 00h, 00h, 02h, 00h
-40E6:1896 FD FF F9 FF 00 00 db 0FDh,0FFh,0F9h,0FFh, 00h, 00h
-40E6:189C 03 00 FD FF F8 FF db 03h, 00h,0FDh,0FFh,0F8h,0FFh
-40E6:18A2 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:18A8 F9 FF FF FF 03 00 db 0F9h,0FFh,0FFh,0FFh, 03h, 00h
-40E6:18AE FD FF F8 FF 00 00 db 0FDh,0FFh,0F8h,0FFh, 00h, 00h
-40E6:18B4 02 00 FD FF F8 FF db 02h, 00h,0FDh,0FFh,0F8h,0FFh
-40E6:18BA 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:18C0 F8 FF 00 00 02 00 db 0F8h,0FFh, 00h, 00h, 02h, 00h
-40E6:18C6 FD FF F9 FF FF FF db 0FDh,0FFh,0F9h,0FFh,0FFh,0FFh
-40E6:18CC 03 00 FD FF F7 FF db 03h, 00h,0FDh,0FFh,0F7h,0FFh
-40E6:18D2 FF FF 02 00 FD FF db 0FFh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:18D8 FA FF FE FF 03 00 db 0FAh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:18DE FD FF F9 FF FE FF db 0FDh,0FFh,0F9h,0FFh,0FEh,0FFh
-40E6:18E4 02 00 FD FF FB FF db 02h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:18EA FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:18F0 FB FF FE FF 02 00 db 0FBh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:18F6 FD FF FC FF FE FF db 0FDh,0FFh,0FCh,0FFh,0FEh,0FFh
-40E6:18FC 03 00 FD FF FD FF db 03h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:1902 FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:1908 FD FF FE FF 03 00 db 0FDh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:190E FD FF FC FF FD FF db 0FDh,0FFh,0FCh,0FFh,0FDh,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 586
-
-40E6:1914 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:191A FF FF 03 00 FD FF db 0FFh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1920 FE FF FE FF 02 00 db 0FEh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:1926 FD FF FE FF FD FF db 0FDh,0FFh,0FEh,0FFh,0FDh,0FFh
-40E6:192C 03 00 FD FF FD FF db 03h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:1932 FD FF 02 00 FD FF db 0FDh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:1938 FD FF FC FF 03 00 db 0FDh,0FFh,0FCh,0FFh, 03h, 00h
-40E6:193E FD FF FE FF FC FF db 0FDh,0FFh,0FEh,0FFh,0FCh,0FFh
-40E6:1944 02 00 FD FF FE FF db 02h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:194A FC FF 03 00 FD FF db 0FCh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1950 FD FF FB FF 02 00 db 0FDh,0FFh,0FBh,0FFh, 02h, 00h
-40E6:1956 FD FF FE FF FB FF db 0FDh,0FFh,0FEh,0FFh,0FBh,0FFh
-40E6:195C 03 00 FD FF FB FF db 03h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:1962 F9 FF 02 00 FD FF db 0F9h,0FFh, 02h, 00h,0FDh,0FFh
-40E6:1968 FD FF FB FF 03 00 db 0FDh,0FFh,0FBh,0FFh, 03h, 00h
-40E6:196E FD FF FC FF FA FF db 0FDh,0FFh,0FCh,0FFh,0FAh,0FFh
-40E6:1974 02 00 FD FF FE FF db 02h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:197A FC FF 03 00 FD FF db 0FCh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1980 FD FF E0 FF 02 00 db 0FDh,0FFh,0E0h,0FFh, 02h, 00h
-40E6:1986 FA FF 46 16 FE FF db 0FAh,0FFh, 46h, 16h,0FEh,0FFh
-40E6:198C A7 00 C5 00 02 00 db 0A7h, 00h,0C5h, 00h, 02h, 00h
-40E6:1992 FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
-40E6:1998 01 00 FD FF 09 00 db 01h, 00h,0FDh,0FFh, 09h, 00h
-40E6:199E 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:19A4 03 00 01 00 01 00 db 03h, 00h, 01h, 00h, 01h, 00h
-40E6:19AA FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
-40E6:19B0 00 00 FD FF 05 00 db 00h, 00h,0FDh,0FFh, 05h, 00h
-40E6:19B6 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:19BC 07 00 02 00 00 00 db 07h, 00h, 02h, 00h, 00h, 00h
-40E6:19C2 FD FF 04 00 00 00 db 0FDh,0FFh, 04h, 00h, 00h, 00h
-40E6:19C8 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:19CE 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:19D4 03 00 00 00 01 00 db 03h, 00h, 00h, 00h, 01h, 00h
-40E6:19DA FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:19E0 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:19E6 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:19EC 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-40E6:19F2 FD FF 02 00 00 00 db 0FDh,0FFh, 02h, 00h, 00h, 00h
-40E6:19F8 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:19FE 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1A04 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:1A0A FD FF 03 00 02 00 db 0FDh,0FFh, 03h, 00h, 02h, 00h
-40E6:1A10 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1A16 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1A1C 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:1A22 FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1A28 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1A2E 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1A34 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:1A3A FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
-40E6:1A40 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1A46 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1A4C 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:1A52 FD FF 05 00 03 00 db 0FDh,0FFh, 05h, 00h, 03h, 00h
-40E6:1A58 01 00 FD FF 07 00 db 01h, 00h,0FDh,0FFh, 07h, 00h
-40E6:1A5E 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1A64 04 00 01 00 01 00 db 04h, 00h, 01h, 00h, 01h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 587
-
-40E6:1A6A FD FF 03 00 01 00 db 0FDh,0FFh, 03h, 00h, 01h, 00h
-40E6:1A70 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1A76 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1A7C 06 00 01 00 00 00 db 06h, 00h, 01h, 00h, 00h, 00h
-40E6:1A82 FD FF 06 00 00 00 db 0FDh,0FFh, 06h, 00h, 00h, 00h
-40E6:1A88 01 00 FD FF 04 00 db 01h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1A8E 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1A94 04 00 00 00 01 00 db 04h, 00h, 00h, 00h, 01h, 00h
-40E6:1A9A FD FF 06 00 FF FF db 0FDh,0FFh, 06h, 00h,0FFh,0FFh
-40E6:1AA0 00 00 FD FF 05 00 db 00h, 00h,0FDh,0FFh, 05h, 00h
-40E6:1AA6 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1AAC 09 00 FE FF 00 00 db 09h, 00h,0FEh,0FFh, 00h, 00h
-40E6:1AB2 FD FF 04 00 00 00 db 0FDh,0FFh, 04h, 00h, 00h, 00h
-40E6:1AB8 01 00 FD FF 07 00 db 01h, 00h,0FDh,0FFh, 07h, 00h
-40E6:1ABE FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1AC4 04 00 FF FF 01 00 db 04h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1ACA FD FF 05 00 FF FF db 0FDh,0FFh, 05h, 00h,0FFh,0FFh
-40E6:1AD0 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1AD6 FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1ADC 03 00 FF FF 00 00 db 03h, 00h,0FFh,0FFh, 00h, 00h
-40E6:1AE2 FD FF 03 00 FF FF db 0FDh,0FFh, 03h, 00h,0FFh,0FFh
-40E6:1AE8 01 00 FD FF 04 00 db 01h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1AEE FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1AF4 04 00 FF FF 01 00 db 04h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1AFA FD FF 04 00 FE FF db 0FDh,0FFh, 04h, 00h,0FEh,0FFh
-40E6:1B00 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1B06 FF FF 01 00 FD FF db 0FFh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1B0C 03 00 FF FF 00 00 db 03h, 00h,0FFh,0FFh, 00h, 00h
-40E6:1B12 FD FF 02 00 FF FF db 0FDh,0FFh, 02h, 00h,0FFh,0FFh
-40E6:1B18 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1B1E FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1B24 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1B2A FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:1B30 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1B36 FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1B3C 01 00 FF FF 00 00 db 01h, 00h,0FFh,0FFh, 00h, 00h
-40E6:1B42 FD FF 01 00 FF FF db 0FDh,0FFh, 01h, 00h,0FFh,0FFh
-40E6:1B48 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1B4E 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1B54 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1B5A FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:1B60 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1B66 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1B6C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-40E6:1B72 FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:1B78 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1B7E 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1B84 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:1B8A FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1B90 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1B96 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1B9C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-40E6:1BA2 FD FF 02 00 01 00 db 0FDh,0FFh, 02h, 00h, 01h, 00h
-40E6:1BA8 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1BAE 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1BB4 03 00 01 00 01 00 db 03h, 00h, 01h, 00h, 01h, 00h
-40E6:1BBA FD FF 04 00 04 00 db 0FDh,0FFh, 04h, 00h, 04h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 588
-
-40E6:1BC0 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1BC6 04 00 01 00 FD FF db 04h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1BCC 02 00 02 00 00 00 db 02h, 00h, 02h, 00h, 00h, 00h
-40E6:1BD2 FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1BD8 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1BDE 02 00 00 00 FE FF db 02h, 00h, 00h, 00h,0FEh,0FFh
-40E6:1BE4 64 00 64 00 FF FF db 64h, 00h, 64h, 00h,0FFh,0FFh
-40E6:1BEA 15 00 FE FF 6F 01 db 15h, 00h,0FEh,0FFh, 6Fh, 01h
-40E6:1BF0 F3 00 02 00 FD FF db 0F3h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1BF6 FD FF 05 00 03 00 db 0FDh,0FFh, 05h, 00h, 03h, 00h
-40E6:1BFC FD FF FB FF 06 00 db 0FDh,0FFh,0FBh,0FFh, 06h, 00h
-40E6:1C02 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1C08 02 00 03 00 FD FF db 02h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1C0E FE FF 04 00 02 00 db 0FEh,0FFh, 04h, 00h, 02h, 00h
-40E6:1C14 FD FF FF FF 02 00 db 0FDh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:1C1A 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1C20 02 00 02 00 FD FF db 02h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1C26 FF FF 02 00 03 00 db 0FFh,0FFh, 02h, 00h, 03h, 00h
-40E6:1C2C FD FF FE FF 02 00 db 0FDh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:1C32 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1C38 01 00 03 00 FD FF db 01h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1C3E FF FF 01 00 02 00 db 0FFh,0FFh, 01h, 00h, 02h, 00h
-40E6:1C44 FD FF FF FF 01 00 db 0FDh,0FFh,0FFh,0FFh, 01h, 00h
-40E6:1C4A 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1C50 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1C56 00 00 01 00 00 00 db 00h, 00h, 01h, 00h, 00h, 00h
-40E6:1C5C FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:1C62 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1C68 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1C6E 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:1C74 FD FF 00 00 02 00 db 0FDh,0FFh, 00h, 00h, 02h, 00h
-40E6:1C7A 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1C80 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1C86 00 00 01 00 00 00 db 00h, 00h, 01h, 00h, 00h, 00h
-40E6:1C8C FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1C92 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1C98 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1C9E 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:1CA4 FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1CAA 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1CB0 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1CB6 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:1CBC FD FF 00 00 01 00 db 0FDh,0FFh, 00h, 00h, 01h, 00h
-40E6:1CC2 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1CC8 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1CCE 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:1CD4 FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:1CDA 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1CE0 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1CE6 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-40E6:1CEC FD FF 01 00 FE FF db 0FDh,0FFh, 01h, 00h,0FEh,0FFh
-40E6:1CF2 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1CF8 FE FF 00 00 FD FF db 0FEh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1CFE 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1D04 FD FF 02 00 01 00 db 0FDh,0FFh, 02h, 00h, 01h, 00h
-40E6:1D0A 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D10 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 589
-
-40E6:1D16 00 00 03 00 00 00 db 00h, 00h, 03h, 00h, 00h, 00h
-40E6:1D1C FD FF 00 00 02 00 db 0FDh,0FFh, 00h, 00h, 02h, 00h
-40E6:1D22 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D28 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1D2E 00 00 02 00 01 00 db 00h, 00h, 02h, 00h, 01h, 00h
-40E6:1D34 FD FF 00 00 01 00 db 0FDh,0FFh, 00h, 00h, 01h, 00h
-40E6:1D3A 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D40 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1D46 00 00 01 00 00 00 db 00h, 00h, 01h, 00h, 00h, 00h
-40E6:1D4C FD FF 00 00 01 00 db 0FDh,0FFh, 00h, 00h, 01h, 00h
-40E6:1D52 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D58 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1D5E 00 00 01 00 01 00 db 00h, 00h, 01h, 00h, 01h, 00h
-40E6:1D64 FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:1D6A 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D70 FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1D76 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:1D7C FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:1D82 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1D88 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1D8E FF FF 00 00 03 00 db 0FFh,0FFh, 00h, 00h, 03h, 00h
-40E6:1D94 FD FF FE FF 01 00 db 0FDh,0FFh,0FEh,0FFh, 01h, 00h
-40E6:1D9A 02 00 FD FF FD FF db 02h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:1DA0 FF FF 03 00 FD FF db 0FFh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1DA6 FE FF 00 00 02 00 db 0FEh,0FFh, 00h, 00h, 02h, 00h
-40E6:1DAC FD FF FE FF FE FF db 0FDh,0FFh,0FEh,0FFh,0FEh,0FFh
-40E6:1DB2 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1DB8 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1DBE FF FF FE FF 03 00 db 0FFh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:1DC4 FD FF FD FF FE FF db 0FDh,0FFh,0FDh,0FFh,0FEh,0FFh
-40E6:1DCA 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1DD0 FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1DD6 FE FF FF FF 02 00 db 0FEh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:1DDC FD FF FF FF FE FF db 0FDh,0FFh,0FFh,0FFh,0FEh,0FFh
-40E6:1DE2 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1DE8 FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:1DEE 00 00 FE FF 03 00 db 00h, 00h,0FEh,0FFh, 03h, 00h
-40E6:1DF4 FD FF 00 00 FF FF db 0FDh,0FFh, 00h, 00h,0FFh,0FFh
-40E6:1DFA 02 00 FD FF 01 00 db 02h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1E00 FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1E06 01 00 00 00 02 00 db 01h, 00h, 00h, 00h, 02h, 00h
-40E6:1E0C FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:1E12 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1E18 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:1E1E 01 00 FF FF 00 00 db 01h, 00h,0FFh,0FFh, 00h, 00h
-40E6:1E24 FD FF 02 00 FF FF db 0FDh,0FFh, 02h, 00h,0FFh,0FFh
-40E6:1E2A 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1E30 FD FF 00 00 FD FF db 0FDh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1E36 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1E3C FD FF 03 00 FB FF db 0FDh,0FFh, 03h, 00h,0FBh,0FFh
-40E6:1E42 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1E48 FA FF 01 00 FD FF db 0FAh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1E4E 02 00 FB FF 00 00 db 02h, 00h,0FBh,0FFh, 00h, 00h
-40E6:1E54 FD FF 01 00 FD FF db 0FDh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1E5A 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1E60 FD FF 00 00 FD FF db 0FDh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1E66 02 00 FD FF 01 00 db 02h, 00h,0FDh,0FFh, 01h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 590
-
-40E6:1E6C FD FF 01 00 FD FF db 0FDh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1E72 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1E78 FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1E7E 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1E84 FE FF 64 00 64 00 db 0FEh,0FFh, 64h, 00h, 64h, 00h
-40E6:1E8A FF FF 0A 00 FA FF db 0FFh,0FFh, 0Ah, 00h,0FAh,0FFh
-40E6:1E90 8A 19 FE FF A1 00 db 8Ah, 19h,0FEh,0FFh,0A1h, 00h
-40E6:1E96 EE 00 00 00 FD FF db 0EEh, 00h, 00h, 00h,0FDh,0FFh
-40E6:1E9C 04 00 01 00 01 00 db 04h, 00h, 01h, 00h, 01h, 00h
-40E6:1EA2 FD FF 02 00 FF FF db 0FDh,0FFh, 02h, 00h,0FFh,0FFh
-40E6:1EA8 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1EAE FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1EB4 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1EBA FD FF 03 00 FD FF db 0FDh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1EC0 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1EC6 FE FF 00 00 FD FF db 0FEh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1ECC 03 00 FF FF 01 00 db 03h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1ED2 FD FF 02 00 00 00 db 0FDh,0FFh, 02h, 00h, 00h, 00h
-40E6:1ED8 00 00 FD FF 03 00 db 00h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1EDE FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1EE4 07 00 FF FF 00 00 db 07h, 00h,0FFh,0FFh, 00h, 00h
-40E6:1EEA FD FF 04 00 00 00 db 0FDh,0FFh, 04h, 00h, 00h, 00h
-40E6:1EF0 01 00 FD FF 04 00 db 01h, 00h,0FDh,0FFh, 04h, 00h
-40E6:1EF6 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:1EFC 06 00 FF FF 01 00 db 06h, 00h,0FFh,0FFh, 01h, 00h
-40E6:1F02 FD FF 06 00 FC FF db 0FDh,0FFh, 06h, 00h,0FCh,0FFh
-40E6:1F08 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:1F0E FD FF 01 00 FD FF db 0FDh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:1F14 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1F1A FD FF 03 00 FD FF db 0FDh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1F20 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1F26 FA FF 00 00 FD FF db 0FAh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1F2C 02 00 FC FF 01 00 db 02h, 00h,0FCh,0FFh, 01h, 00h
-40E6:1F32 FD FF 00 00 FD FF db 0FDh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:1F38 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:1F3E 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1F44 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-40E6:1F4A FD FF FF FF 02 00 db 0FDh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:1F50 02 00 FD FF FE FF db 02h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:1F56 01 00 03 00 FD FF db 01h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1F5C FF FF FF FF 02 00 db 0FFh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:1F62 FD FF FE FF FE FF db 0FDh,0FFh,0FEh,0FFh,0FEh,0FFh
-40E6:1F68 03 00 FD FF FE FF db 03h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:1F6E FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:1F74 FE FF FE FF 03 00 db 0FEh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:1F7A FD FF FE FF FE FF db 0FDh,0FFh,0FEh,0FFh,0FEh,0FFh
-40E6:1F80 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1F86 FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1F8C 00 00 FE FF 02 00 db 00h, 00h,0FEh,0FFh, 02h, 00h
-40E6:1F92 FD FF 01 00 FF FF db 0FDh,0FFh, 01h, 00h,0FFh,0FFh
-40E6:1F98 03 00 FD FF 01 00 db 03h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1F9E 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1FA4 01 00 01 00 03 00 db 01h, 00h, 01h, 00h, 03h, 00h
-40E6:1FAA FD FF 02 00 03 00 db 0FDh,0FFh, 02h, 00h, 03h, 00h
-40E6:1FB0 02 00 FD FF 03 00 db 02h, 00h,0FDh,0FFh, 03h, 00h
-40E6:1FB6 02 00 03 00 FD FF db 02h, 00h, 03h, 00h,0FDh,0FFh
-40E6:1FBC 01 00 01 00 02 00 db 01h, 00h, 01h, 00h, 02h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 591
-
-40E6:1FC2 FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:1FC8 03 00 FD FF 01 00 db 03h, 00h,0FDh,0FFh, 01h, 00h
-40E6:1FCE 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:1FD4 01 00 00 00 03 00 db 01h, 00h, 00h, 00h, 03h, 00h
-40E6:1FDA FD FF 01 00 FF FF db 0FDh,0FFh, 01h, 00h,0FFh,0FFh
-40E6:1FE0 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1FE6 FC FF 03 00 FD FF db 0FCh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:1FEC FF FF FD FF 02 00 db 0FFh,0FFh,0FDh,0FFh, 02h, 00h
-40E6:1FF2 FD FF 00 00 FE FF db 0FDh,0FFh, 00h, 00h,0FEh,0FFh
-40E6:1FF8 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:1FFE FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2004 00 00 FE FF 03 00 db 00h, 00h,0FEh,0FFh, 03h, 00h
-40E6:200A FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:2010 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:2016 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:201C FF FF 01 00 02 00 db 0FFh,0FFh, 01h, 00h, 02h, 00h
-40E6:2022 FD FF 00 00 01 00 db 0FDh,0FFh, 00h, 00h, 01h, 00h
-40E6:2028 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:202E 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:2034 FF FF 01 00 03 00 db 0FFh,0FFh, 01h, 00h, 03h, 00h
-40E6:203A FD FF FD FF 02 00 db 0FDh,0FFh,0FDh,0FFh, 02h, 00h
-40E6:2040 02 00 FD FF FF FF db 02h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:2046 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:204C FD FF FF FF 02 00 db 0FDh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:2052 FD FF FD FF FF FF db 0FDh,0FFh,0FDh,0FFh,0FFh,0FFh
-40E6:2058 03 00 FD FF FF FF db 03h, 00h,0FDh,0FFh,0FFh,0FFh
-40E6:205E FF FF 02 00 FD FF db 0FFh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2064 FD FF 00 00 03 00 db 0FDh,0FFh, 00h, 00h, 03h, 00h
-40E6:206A FD FF FE FF 02 00 db 0FDh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:2070 02 00 FD FF FD FF db 02h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:2076 02 00 03 00 FD FF db 02h, 00h, 03h, 00h,0FDh,0FFh
-40E6:207C FF FF FF FF 02 00 db 0FFh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:2082 FD FF FF FF 01 00 db 0FDh,0FFh,0FFh,0FFh, 01h, 00h
-40E6:2088 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:208E 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:2094 02 00 00 00 03 00 db 02h, 00h, 00h, 00h, 03h, 00h
-40E6:209A FD FF 03 00 FF FF db 0FDh,0FFh, 03h, 00h,0FFh,0FFh
-40E6:20A0 02 00 FD FF 03 00 db 02h, 00h,0FDh,0FFh, 03h, 00h
-40E6:20A6 FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:20AC 02 00 FF FF 02 00 db 02h, 00h,0FFh,0FFh, 02h, 00h
-40E6:20B2 FD FF 01 00 FF FF db 0FDh,0FFh, 01h, 00h,0FFh,0FFh
-40E6:20B8 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:20BE 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:20C4 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-40E6:20CA FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:20D0 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:20D6 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:20DC 01 00 00 00 01 00 db 01h, 00h, 00h, 00h, 01h, 00h
-40E6:20E2 FD FF 01 00 01 00 db 0FDh,0FFh, 01h, 00h, 01h, 00h
-40E6:20E8 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:20EE 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
-40E6:20F4 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:20FA FD FF 03 00 02 00 db 0FDh,0FFh, 03h, 00h, 02h, 00h
-40E6:2100 01 00 FD FF 02 00 db 01h, 00h,0FDh,0FFh, 02h, 00h
-40E6:2106 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:210C 02 00 01 00 01 00 db 02h, 00h, 01h, 00h, 01h, 00h
-40E6:2112 FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 592
-
-40E6:2118 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:211E 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2124 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:212A FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
-40E6:2130 01 00 FD FF 03 00 db 01h, 00h,0FDh,0FFh, 03h, 00h
-40E6:2136 02 00 00 00 FD FF db 02h, 00h, 00h, 00h,0FDh,0FFh
-40E6:213C 02 00 02 00 01 00 db 02h, 00h, 02h, 00h, 01h, 00h
-40E6:2142 FD FF 06 00 03 00 db 0FDh,0FFh, 06h, 00h, 03h, 00h
-40E6:2148 00 00 FD FF 06 00 db 00h, 00h,0FDh,0FFh, 06h, 00h
-40E6:214E 04 00 01 00 FD FF db 04h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2154 04 00 03 00 00 00 db 04h, 00h, 03h, 00h, 00h, 00h
-40E6:215A FD FF 03 00 01 00 db 0FDh,0FFh, 03h, 00h, 01h, 00h
-40E6:2160 01 00 FD FF 04 00 db 01h, 00h,0FDh,0FFh, 04h, 00h
-40E6:2166 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:216C 05 00 02 00 01 00 db 05h, 00h, 02h, 00h, 01h, 00h
-40E6:2172 FD FF 04 00 01 00 db 0FDh,0FFh, 04h, 00h, 01h, 00h
-40E6:2178 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:217E 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2184 05 00 01 00 00 00 db 05h, 00h, 01h, 00h, 00h, 00h
-40E6:218A FD FF 07 00 02 00 db 0FDh,0FFh, 07h, 00h, 02h, 00h
-40E6:2190 01 00 FD FF 05 00 db 01h, 00h,0FDh,0FFh, 05h, 00h
-40E6:2196 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:219C 04 00 01 00 01 00 db 04h, 00h, 01h, 00h, 01h, 00h
-40E6:21A2 FD FF 08 00 01 00 db 0FDh,0FFh, 08h, 00h, 01h, 00h
-40E6:21A8 00 00 FD FF 09 00 db 00h, 00h,0FDh,0FFh, 09h, 00h
-40E6:21AE 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:21B4 07 00 00 00 00 00 db 07h, 00h, 00h, 00h, 00h, 00h
-40E6:21BA FD FF 06 00 00 00 db 0FDh,0FFh, 06h, 00h, 00h, 00h
-40E6:21C0 01 00 FD FF 07 00 db 01h, 00h,0FDh,0FFh, 07h, 00h
-40E6:21C6 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:21CC 02 00 00 00 01 00 db 02h, 00h, 00h, 00h, 01h, 00h
-40E6:21D2 FD FF 03 00 00 00 db 0FDh,0FFh, 03h, 00h, 00h, 00h
-40E6:21D8 00 00 FD FF 04 00 db 00h, 00h,0FDh,0FFh, 04h, 00h
-40E6:21DE 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:21E4 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-40E6:21EA FD FF 01 00 FF FF db 0FDh,0FFh, 01h, 00h,0FFh,0FFh
-40E6:21F0 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:21F6 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:21FC 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2202 FD FF 00 00 FF FF db 0FDh,0FFh, 00h, 00h,0FFh,0FFh
-40E6:2208 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:220E FE FF 01 00 FD FF db 0FEh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:2214 00 00 FE FF 00 00 db 00h, 00h,0FEh,0FFh, 00h, 00h
-40E6:221A FD FF 00 00 FE FF db 0FDh,0FFh, 00h, 00h,0FEh,0FFh
-40E6:2220 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:2226 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:222C 04 00 01 00 01 00 db 04h, 00h, 01h, 00h, 01h, 00h
-40E6:2232 FD FF 02 00 01 00 db 0FDh,0FFh, 02h, 00h, 01h, 00h
-40E6:2238 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:223E 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2244 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-40E6:224A FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:2250 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:2256 FF FF 00 00 FD FF db 0FFh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:225C 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2262 FD FF 00 00 FF FF db 0FDh,0FFh, 00h, 00h,0FFh,0FFh
-40E6:2268 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 593
-
-40E6:226E 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2274 02 00 FF FF 00 00 db 02h, 00h,0FFh,0FFh, 00h, 00h
-40E6:227A FD FF 05 00 01 00 db 0FDh,0FFh, 05h, 00h, 01h, 00h
-40E6:2280 01 00 FD FF 04 00 db 01h, 00h,0FDh,0FFh, 04h, 00h
-40E6:2286 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:228C 08 00 01 00 01 00 db 08h, 00h, 01h, 00h, 01h, 00h
-40E6:2292 FD FF 09 00 00 00 db 0FDh,0FFh, 09h, 00h, 00h, 00h
-40E6:2298 00 00 FE FF 64 00 db 00h, 00h,0FEh,0FFh, 64h, 00h
-40E6:229E 64 00 00 00 FF FF db 64h, 00h, 00h, 00h,0FFh,0FFh
-40E6:22A4 16 00 FE FF 8F 01 db 16h, 00h,0FEh,0FFh, 8Fh, 01h
-40E6:22AA 0C 01 02 00 FD FF db 0Ch, 01h, 02h, 00h,0FDh,0FFh
-40E6:22B0 FF FF FA FF 03 00 db 0FFh,0FFh,0FAh,0FFh, 03h, 00h
-40E6:22B6 FD FF 00 00 FF FF db 0FDh,0FFh, 00h, 00h,0FFh,0FFh
-40E6:22BC 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:22C2 FF FF 03 00 FD FF db 0FFh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:22C8 FE FF 00 00 02 00 db 0FEh,0FFh, 00h, 00h, 02h, 00h
-40E6:22CE FD FF FE FF 00 00 db 0FDh,0FFh,0FEh,0FFh, 00h, 00h
-40E6:22D4 03 00 FD FF FD FF db 03h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:22DA 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:22E0 FC FF FE FF 03 00 db 0FCh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:22E6 FD FF FD FF FF FF db 0FDh,0FFh,0FDh,0FFh,0FFh,0FFh
-40E6:22EC 02 00 FD FF FD FF db 02h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:22F2 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:22F8 FD FF FF FF 02 00 db 0FDh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:22FE FD FF FC FF FE FF db 0FDh,0FFh,0FCh,0FFh,0FEh,0FFh
-40E6:2304 03 00 FD FF FB FF db 03h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:230A FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2310 FC FF FF FF 03 00 db 0FCh,0FFh,0FFh,0FFh, 03h, 00h
-40E6:2316 FD FF FB FF FE FF db 0FDh,0FFh,0FBh,0FFh,0FEh,0FFh
-40E6:231C 02 00 FD FF FE FF db 02h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:2322 FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:2328 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-40E6:232E FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:2334 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:233A 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2340 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-40E6:2346 FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:234C 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:2352 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:2358 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:235E FD FF 02 00 02 00 db 0FDh,0FFh, 02h, 00h, 02h, 00h
-40E6:2364 00 00 FD FF 01 00 db 00h, 00h,0FDh,0FFh, 01h, 00h
-40E6:236A 02 00 01 00 FD FF db 02h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2370 01 00 01 00 00 00 db 01h, 00h, 01h, 00h, 00h, 00h
-40E6:2376 FD FF 02 00 03 00 db 0FDh,0FFh, 02h, 00h, 03h, 00h
-40E6:237C 01 00 FD FF 01 00 db 01h, 00h,0FDh,0FFh, 01h, 00h
-40E6:2382 01 00 00 00 FD FF db 01h, 00h, 00h, 00h,0FDh,0FFh
-40E6:2388 01 00 01 00 01 00 db 01h, 00h, 01h, 00h, 01h, 00h
-40E6:238E FD FF 03 00 03 00 db 0FDh,0FFh, 03h, 00h, 03h, 00h
-40E6:2394 00 00 FD FF 02 00 db 00h, 00h,0FDh,0FFh, 02h, 00h
-40E6:239A 01 00 01 00 FD FF db 01h, 00h, 01h, 00h,0FDh,0FFh
-40E6:23A0 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:23A6 FD FF 01 00 00 00 db 0FDh,0FFh, 01h, 00h, 00h, 00h
-40E6:23AC 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:23B2 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:23B8 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:23BE FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 594
-
-40E6:23C4 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:23CA FF FF 01 00 FD FF db 0FFh,0FFh, 01h, 00h,0FDh,0FFh
-40E6:23D0 00 00 FF FF 00 00 db 00h, 00h,0FFh,0FFh, 00h, 00h
-40E6:23D6 FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:23DC 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:23E2 FE FF 00 00 FD FF db 0FEh,0FFh, 00h, 00h,0FDh,0FFh
-40E6:23E8 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:23EE FD FF 00 00 FF FF db 0FDh,0FFh, 00h, 00h,0FFh,0FFh
-40E6:23F4 00 00 FD FF 00 00 db 00h, 00h,0FDh,0FFh, 00h, 00h
-40E6:23FA 00 00 01 00 FD FF db 00h, 00h, 01h, 00h,0FDh,0FFh
-40E6:2400 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-40E6:2406 FD FF 00 00 01 00 db 0FDh,0FFh, 00h, 00h, 01h, 00h
-40E6:240C 01 00 FD FF 00 00 db 01h, 00h,0FDh,0FFh, 00h, 00h
-40E6:2412 00 00 00 00 FD FF db 00h, 00h, 00h, 00h,0FDh,0FFh
-40E6:2418 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-40E6:241E FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:2424 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:242A 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:2430 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-40E6:2436 FD FF 00 00 00 00 db 0FDh,0FFh, 00h, 00h, 00h, 00h
-40E6:243C 03 00 FD FF 00 00 db 03h, 00h,0FDh,0FFh, 00h, 00h
-40E6:2442 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:2448 FF FF 00 00 03 00 db 0FFh,0FFh, 00h, 00h, 03h, 00h
-40E6:244E FD FF FF FF 00 00 db 0FDh,0FFh,0FFh,0FFh, 00h, 00h
-40E6:2454 02 00 FD FF 00 00 db 02h, 00h,0FDh,0FFh, 00h, 00h
-40E6:245A 01 00 03 00 FD FF db 01h, 00h, 03h, 00h,0FDh,0FFh
-40E6:2460 FF FF 00 00 02 00 db 0FFh,0FFh, 00h, 00h, 02h, 00h
-40E6:2466 FD FF FE FF 00 00 db 0FDh,0FFh,0FEh,0FFh, 00h, 00h
-40E6:246C 03 00 FD FF FD FF db 03h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:2472 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:2478 FE FF 01 00 03 00 db 0FEh,0FFh, 01h, 00h, 03h, 00h
-40E6:247E FD FF FE FF 01 00 db 0FDh,0FFh,0FEh,0FFh, 01h, 00h
-40E6:2484 02 00 FD FF FD FF db 02h, 00h,0FDh,0FFh,0FDh,0FFh
-40E6:248A 01 00 03 00 FD FF db 01h, 00h, 03h, 00h,0FDh,0FFh
-40E6:2490 FF FF 01 00 02 00 db 0FFh,0FFh, 01h, 00h, 02h, 00h
-40E6:2496 FD FF FD FF 01 00 db 0FDh,0FFh,0FDh,0FFh, 01h, 00h
-40E6:249C 03 00 FD FF FE FF db 03h, 00h,0FDh,0FFh,0FEh,0FFh
-40E6:24A2 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:24A8 FD FF 01 00 03 00 db 0FDh,0FFh, 01h, 00h, 03h, 00h
-40E6:24AE FD FF FB FF 01 00 db 0FDh,0FFh,0FBh,0FFh, 01h, 00h
-40E6:24B4 02 00 FD FF FC FF db 02h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:24BA 02 00 03 00 FD FF db 02h, 00h, 03h, 00h,0FDh,0FFh
-40E6:24C0 FA FF 02 00 02 00 db 0FAh,0FFh, 02h, 00h, 02h, 00h
-40E6:24C6 FD FF FD FF 00 00 db 0FDh,0FFh,0FDh,0FFh, 00h, 00h
-40E6:24CC 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:24D2 01 00 02 00 FD FF db 01h, 00h, 02h, 00h,0FDh,0FFh
-40E6:24D8 FD FF 01 00 03 00 db 0FDh,0FFh, 01h, 00h, 03h, 00h
-40E6:24DE FD FF FD FF 00 00 db 0FDh,0FFh,0FDh,0FFh, 00h, 00h
-40E6:24E4 02 00 FD FF FC FF db 02h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:24EA 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:24F0 FB FF 00 00 02 00 db 0FBh,0FFh, 00h, 00h, 02h, 00h
-40E6:24F6 FD FF FD FF 00 00 db 0FDh,0FFh,0FDh,0FFh, 00h, 00h
-40E6:24FC 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:2502 00 00 02 00 FD FF db 00h, 00h, 02h, 00h,0FDh,0FFh
-40E6:2508 FD FF 00 00 03 00 db 0FDh,0FFh, 00h, 00h, 03h, 00h
-40E6:250E FD FF FC FF 00 00 db 0FDh,0FFh,0FCh,0FFh, 00h, 00h
-40E6:2514 02 00 FD FF F9 FF db 02h, 00h,0FDh,0FFh,0F9h,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 595
-
-40E6:251A 00 00 03 00 FD FF db 00h, 00h, 03h, 00h,0FDh,0FFh
-40E6:2520 FF FF 00 00 02 00 db 0FFh,0FFh, 00h, 00h, 02h, 00h
-40E6:2526 FD FF FE FF FE FF db 0FDh,0FFh,0FEh,0FFh,0FEh,0FFh
-40E6:252C 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:2532 FF FF 02 00 FD FF db 0FFh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2538 FD FF FF FF 03 00 db 0FDh,0FFh,0FFh,0FFh, 03h, 00h
-40E6:253E FD FF FA FF FD FF db 0FDh,0FFh,0FAh,0FFh,0FDh,0FFh
-40E6:2544 02 00 FD FF FA FF db 02h, 00h,0FDh,0FFh,0FAh,0FFh
-40E6:254A FC FF 03 00 FD FF db 0FCh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:2550 FA FF FD FF 02 00 db 0FAh,0FFh,0FDh,0FFh, 02h, 00h
-40E6:2556 FD FF FD FF FE FF db 0FDh,0FFh,0FDh,0FFh,0FEh,0FFh
-40E6:255C 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:2562 FF FF 02 00 FD FF db 0FFh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2568 FE FF FF FF 03 00 db 0FEh,0FFh,0FFh,0FFh, 03h, 00h
-40E6:256E FD FF FC FF FE FF db 0FDh,0FFh,0FCh,0FFh,0FEh,0FFh
-40E6:2574 02 00 FD FF FC FF db 02h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:257A FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:2580 FD FF FF FF 02 00 db 0FDh,0FFh,0FFh,0FFh, 02h, 00h
-40E6:2586 FD FF FC FF FE FF db 0FDh,0FFh,0FCh,0FFh,0FEh,0FFh
-40E6:258C 03 00 FD FF FC FF db 03h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:2592 FD FF 02 00 FD FF db 0FDh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:2598 F8 FF FD FF 03 00 db 0F8h,0FFh,0FDh,0FFh, 03h, 00h
-40E6:259E FD FF FA FF FE FF db 0FDh,0FFh,0FAh,0FFh,0FEh,0FFh
-40E6:25A4 02 00 FD FF FB FF db 02h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:25AA FF FF 03 00 FD FF db 0FFh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:25B0 FA FF FE FF 02 00 db 0FAh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:25B6 FD FF FD FF FE FF db 0FDh,0FFh,0FDh,0FFh,0FEh,0FFh
-40E6:25BC 03 00 FD FF FB FF db 03h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:25C2 FE FF 02 00 FD FF db 0FEh,0FFh, 02h, 00h,0FDh,0FFh
-40E6:25C8 FB FF FE FF 03 00 db 0FBh,0FFh,0FEh,0FFh, 03h, 00h
-40E6:25CE FD FF FC FF FE FF db 0FDh,0FFh,0FCh,0FFh,0FEh,0FFh
-40E6:25D4 02 00 FD FF FC FF db 02h, 00h,0FDh,0FFh,0FCh,0FFh
-40E6:25DA FE FF 03 00 FD FF db 0FEh,0FFh, 03h, 00h,0FDh,0FFh
-40E6:25E0 FB FF FE FF 02 00 db 0FBh,0FFh,0FEh,0FFh, 02h, 00h
-40E6:25E6 FD FF FD FF FF FF db 0FDh,0FFh,0FDh,0FFh,0FFh,0FFh
-40E6:25EC 03 00 FD FF FB FF db 03h, 00h,0FDh,0FFh,0FBh,0FFh
-40E6:25F2 FD FF 02 00 FE FF db 0FDh,0FFh, 02h, 00h,0FEh,0FFh
-40E6:25F8 64 00 64 00 00 00 db 64h, 00h, 64h, 00h, 00h, 00h
-40E6:25FE FF FF 0D 00 FA FF db 0FFh,0FFh, 0Dh, 00h,0FAh,0FFh
-40E6:2604 92 1E FE FF 77 00 db 92h, 1Eh,0FEh,0FFh, 77h, 00h
-40E6:260A FD 00 19 00 FD FF db 0FDh, 00h, 19h, 00h,0FDh,0FFh
-40E6:2610 06 00 02 00 1A 00 db 06h, 00h, 02h, 00h, 1Ah, 00h
-40E6:2616 FF FF 0A 00 FA FF db 0FFh,0FFh, 0Ah, 00h,0FAh,0FFh
-40E6:261C 06 26 00 00 F8 FF db 06h, 26h, 00h, 00h,0F8h,0FFh
-40E6:2622 22 00 30 00 00 00 db 22h, 00h, 30h, 00h, 00h, 00h
-40E6:2628 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:262E 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:2634 03 00 00 00 01 00 db 03h, 00h, 00h, 00h, 01h, 00h
-40E6:263A 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:2640 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:2646 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:264C 03 00 00 00 01 00 db 03h, 00h, 00h, 00h, 01h, 00h
-40E6:2652 02 00 03 00 00 00 db 02h, 00h, 03h, 00h, 00h, 00h
-40E6:2658 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:265E 00 00 01 00 02 00 db 00h, 00h, 01h, 00h, 02h, 00h
-40E6:2664 03 00 00 00 01 00 db 03h, 00h, 00h, 00h, 01h, 00h
-40E6:266A 02 00 03 00 F7 FF db 02h, 00h, 03h, 00h,0F7h,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 596
-
-40E6:2670 22 00 00 00 FA FF db 22h, 00h, 00h, 00h,0FAh,0FFh
-40E6:2676 72 26 00 00 00 00 db 72h, 26h, 00h, 00h, 00h, 00h
-40E6:267C FF FF 01 00 F8 FF db 0FFh,0FFh, 01h, 00h,0F8h,0FFh
-40E6:2682 14 00 30 00 01 00 db 14h, 00h, 30h, 00h, 01h, 00h
-40E6:2688 FF FF 01 00 02 00 db 0FFh,0FFh, 01h, 00h, 02h, 00h
-40E6:268E FF FF 01 00 03 00 db 0FFh,0FFh, 01h, 00h, 03h, 00h
-40E6:2694 FF FF 01 00 04 00 db 0FFh,0FFh, 01h, 00h, 04h, 00h
-40E6:269A FF FF 01 00 05 00 db 0FFh,0FFh, 01h, 00h, 05h, 00h
-40E6:26A0 FF FF 01 00 06 00 db 0FFh,0FFh, 01h, 00h, 06h, 00h
-40E6:26A6 FF FF 01 00 07 00 db 0FFh,0FFh, 01h, 00h, 07h, 00h
-40E6:26AC FF FF 14 00 06 00 db 0FFh,0FFh, 14h, 00h, 06h, 00h
-40E6:26B2 05 00 04 00 03 00 db 05h, 00h, 04h, 00h, 03h, 00h
-40E6:26B8 02 00 01 00 00 00 db 02h, 00h, 01h, 00h, 00h, 00h
-40E6:26BE FA FF BC 26 F9 FF db 0FAh,0FFh,0BCh, 26h,0F9h,0FFh
-40E6:26C4 59 5A FD FF FE FF db 59h, 5Ah,0FDh,0FFh,0FEh,0FFh
-40E6:26CA 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-40E6:26D0 01 00 01 00 FF FF db 01h, 00h, 01h, 00h,0FFh,0FFh
-40E6:26D6 01 00 02 00 FF FF db 01h, 00h, 02h, 00h,0FFh,0FFh
-40E6:26DC 01 00 03 00 FF FF db 01h, 00h, 03h, 00h,0FFh,0FFh
-40E6:26E2 01 00 04 00 FF FF db 01h, 00h, 04h, 00h,0FFh,0FFh
-40E6:26E8 01 00 05 00 FF FF db 01h, 00h, 05h, 00h,0FFh,0FFh
-40E6:26EE 01 00 06 00 FF FF db 01h, 00h, 06h, 00h,0FFh,0FFh
-40E6:26F4 01 00 07 00 FF FF db 01h, 00h, 07h, 00h,0FFh,0FFh
-40E6:26FA 14 00 F9 FF 80 5C db 14h, 00h,0F9h,0FFh, 80h, 5Ch
-40E6:2700 FD FF 02 00 00 00 db 0FDh,0FFh, 02h, 00h, 00h, 00h
-40E6:2706 FC FF F9 FF 62 5A db 0FCh,0FFh,0F9h,0FFh, 62h, 5Ah
-40E6:270C FD FF FE FF 00 00 db 0FDh,0FFh,0FEh,0FFh, 00h, 00h
-40E6:2712 00 00 FF FF 01 00 db 00h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2718 01 00 FF FF 01 00 db 01h, 00h,0FFh,0FFh, 01h, 00h
-40E6:271E 02 00 FF FF 01 00 db 02h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2724 03 00 FF FF 01 00 db 03h, 00h,0FFh,0FFh, 01h, 00h
-40E6:272A 04 00 FF FF 01 00 db 04h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2730 05 00 FF FF 01 00 db 05h, 00h,0FFh,0FFh, 01h, 00h
-40E6:2736 06 00 FF FF 01 00 db 06h, 00h,0FFh,0FFh, 01h, 00h
-40E6:273C 07 00 FF FF 14 00 db 07h, 00h,0FFh,0FFh, 14h, 00h
-40E6:2742 F9 FF 67 5D FD FF db 0F9h,0FFh, 67h, 5Dh,0FDh,0FFh
-40E6:2748 02 00 00 00 FC FF db 02h, 00h, 00h, 00h,0FCh,0FFh
-40E6:274E F9 FF F6 59 00 00 db 0F9h,0FFh,0F6h, 59h, 00h, 00h
-40E6:2754 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:275A F9 FF FF 59 00 00 db 0F9h,0FFh,0FFh, 59h, 00h, 00h
-40E6:2760 F8 FF 20 00 29 00 db 0F8h,0FFh, 20h, 00h, 29h, 00h
-40E6:2766 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:276C F9 FF 08 5A 00 00 db 0F9h,0FFh, 08h, 5Ah, 00h, 00h
-40E6:2772 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:2778 F9 FF 11 5A 00 00 db 0F9h,0FFh, 11h, 5Ah, 00h, 00h
-40E6:277E 01 00 02 00 03 00 db 01h, 00h, 02h, 00h, 03h, 00h
-40E6:2784 F7 FF 20 00 FC FF db 0F7h,0FFh, 20h, 00h,0FCh,0FFh
-40E6:278A 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-
- scripts2_seg ends
-
-
-
- ;------------------------------------------------ seg_d ----
-
- seg_d segment byte public
- assume cs:seg_d , ds:seg_d , ss:stack_seg_k
-
-435F:0000 FF 55 1A call word ptr [di+1Ah] ;*
-435F:0003 56 push si
-435F:0004 11 56 08 adc [bp+8],dx
-435F:0007 56 push si
-435F:0008 2C 56 sub al,56h ; 'V'
-435F:000A 35 2356 xor ax,2356h
-435F:000D 56 push si
-435F:000E EB FF 00 00 EB FF db 0EBh,0FFh, 00h, 00h,0EBh,0FFh
-435F:0014 01 00 EB FF 02 00 db 01h, 00h,0EBh,0FFh, 02h, 00h
-435F:001A EB FF 03 00 EB FF db 0EBh,0FFh, 03h, 00h,0EBh,0FFh
-435F:0020 04 00 EB FF 05 00 db 04h, 00h,0EBh,0FFh, 05h, 00h
-435F:0026 EB FF 06 00 EB FF db 0EBh,0FFh, 06h, 00h,0EBh,0FFh
-435F:002C 07 00 db 07h, 00h
-435F:002E 08 db 8
-435F:002F 000B[00] db 11 dup (0)
-435F:003A FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:0040 01 00 00 00 ED FF db 01h, 00h, 00h, 00h,0EDh,0FFh
-435F:0046 00 db 00h
-435F:0047 0007[00] db 7 dup (0)
-435F:004E 01 00 db 1, 0
-435F:0050 000A[00] db 10 dup (0)
-435F:005A F2 FF 01 00 02 db 0F2h,0FFh, 01h, 00h, 02h
-435F:005F 000B[00] db 11 dup (0)
-435F:006A 02 00 db 2, 0
-435F:006C 000A[00] db 10 dup (0)
-435F:0076 02 00 db 2, 0
-435F:0078 000A[00] db 10 dup (0)
-435F:0082 02 00 db 2, 0
-435F:0084 000A[00] db 10 dup (0)
-435F:008E F2 FF 00 00 03 db 0F2h,0FFh, 00h, 00h, 03h
-435F:0093 000B[00] db 11 dup (0)
-435F:009E 04 00 db 4, 0
-435F:00A0 000A[00] db 10 dup (0)
-435F:00AA 05 00 00 db 5, 0, 0
-435F:00AD 0009[00] db 9 dup (0)
-435F:00B6 FE FF 00 00 EE FF db 0FEh,0FFh, 00h, 00h,0EEh,0FFh
-435F:00BC 08 db 08h
-435F:00BD 000B[00] db 11 dup (0)
-435F:00C8 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:00CE 01 00 00 00 ED FF db 01h, 00h, 00h, 00h,0EDh,0FFh
-435F:00D4 00 db 00h
-435F:00D5 0007[00] db 7 dup (0)
-435F:00DC 01 00 db 1, 0
-435F:00DE 000A[00] db 10 dup (0)
-435F:00E8 F2 FF 01 00 02 db 0F2h,0FFh, 01h, 00h, 02h
-435F:00ED 000B[00] db 11 dup (0)
-435F:00F8 02 00 db 2, 0
-435F:00FA 000A[00] db 10 dup (0)
-435F:0104 02 00 db 2, 0
-435F:0106 000A[00] db 10 dup (0)
-435F:0110 02 00 db 2, 0
-435F:0112 000A[00] db 10 dup (0)
-435F:011C F2 FF 00 00 EE FF db 0F2h,0FFh, 00h, 00h,0EEh,0FFh
-435F:0122 F8 FF 10 03 EF FF db 0F8h,0FFh, 10h, 03h,0EFh,0FFh
-435F:0128 FE FF 02 00 00 00 db 0FEh,0FFh, 02h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 598
-
-435F:012E ED FF 00 db 0EDh,0FFh, 00h
-435F:0131 0007[00] db 7 dup (0)
-435F:0138 F2 FF 02 00 01 db 0F2h,0FFh, 02h, 00h, 01h
-435F:013D 000B[00] db 11 dup (0)
-435F:0148 02 00 db 2, 0
-435F:014A 000A[00] db 10 dup (0)
-435F:0154 03 00 db 3, 0
-435F:0156 000A[00] db 10 dup (0)
-435F:0160 03 00 db 3, 0
-435F:0162 000A[00] db 10 dup (0)
-435F:016C 03 00 db 3, 0
-435F:016E 000A[00] db 10 dup (0)
-435F:0178 03 00 db 3, 0
-435F:017A 000A[00] db 10 dup (0)
-435F:0184 F2 FF 00 00 02 db 0F2h,0FFh, 00h, 00h, 02h
-435F:0189 000B[00] db 11 dup (0)
-435F:0194 01 00 db 1, 0
-435F:0196 0016[00] db 22 dup (0)
-435F:01AC FE FF 00 00 EE FF db 0FEh,0FFh, 00h, 00h,0EEh,0FFh
-435F:01B2 08 db 08h
-435F:01B3 000B[00] db 11 dup (0)
-435F:01BE FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:01C4 03 00 00 00 ED FF db 03h, 00h, 00h, 00h,0EDh,0FFh
-435F:01CA 00 db 00h
-435F:01CB 0007[00] db 7 dup (0)
-435F:01D2 F2 FF 03 00 01 db 0F2h,0FFh, 03h, 00h, 01h
-435F:01D7 000B[00] db 11 dup (0)
-435F:01E2 02 00 db 2, 0
-435F:01E4 000A[00] db 10 dup (0)
-435F:01EE 03 00 db 3, 0
-435F:01F0 000A[00] db 10 dup (0)
-435F:01FA 04 00 db 4, 0
-435F:01FC 000A[00] db 10 dup (0)
-435F:0206 05 00 00 db 5, 0, 0
-435F:0209 0009[00] db 9 dup (0)
-435F:0212 F2 FF 00 00 06 00 db 0F2h,0FFh, 00h, 00h, 06h, 00h
-435F:0218 00 db 00h
-435F:0219 0009[00] db 9 dup (0)
-435F:0222 07 db 7
-435F:0223 000B[00] db 11 dup (0)
-435F:022E FE FF 00 00 EE FF db 0FEh,0FFh, 00h, 00h,0EEh,0FFh
-435F:0234 08 db 08h
-435F:0235 000B[00] db 11 dup (0)
-435F:0240 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:0246 03 00 00 00 ED FF db 03h, 00h, 00h, 00h,0EDh,0FFh
-435F:024C 00 db 00h
-435F:024D 0007[00] db 7 dup (0)
-435F:0254 F2 FF 03 00 01 db 0F2h,0FFh, 03h, 00h, 01h
-435F:0259 000B[00] db 11 dup (0)
-435F:0264 02 00 db 2, 0
-435F:0266 000A[00] db 10 dup (0)
-435F:0270 03 00 db 3, 0
-435F:0272 000A[00] db 10 dup (0)
-435F:027C 04 00 db 4, 0
-435F:027E 000A[00] db 10 dup (0)
-435F:0288 05 00 00 db 5, 0, 0
-435F:028B 0009[00] db 9 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 599
-
-435F:0294 F2 FF 00 00 EE FF db 0F2h,0FFh, 00h, 00h,0EEh,0FFh
-435F:029A F8 FF 10 03 06 00 db 0F8h,0FFh, 10h, 03h, 06h, 00h
-435F:02A0 00 db 00h
-435F:02A1 0009[00] db 9 dup (0)
-435F:02AA 07 db 7
-435F:02AB 000B[00] db 11 dup (0)
-435F:02B6 FE FF 00 00 EE FF db 0FEh,0FFh, 00h, 00h,0EEh,0FFh
-435F:02BC 08 db 08h
-435F:02BD 000B[00] db 11 dup (0)
-435F:02C8 FB FF 07 00 FC FF db 0FBh,0FFh, 07h, 00h,0FCh,0FFh
-435F:02CE 00 db 00h
-435F:02CF 0007[00] db 7 dup (0)
-435F:02D6 EF FF 06 00 FC FF db 0EFh,0FFh, 06h, 00h,0FCh,0FFh
-435F:02DC 00 db 00h
-435F:02DD 0007[00] db 7 dup (0)
-435F:02E4 EF FF 05 00 FC FF db 0EFh,0FFh, 05h, 00h,0FCh,0FFh
-435F:02EA 00 db 00h
-435F:02EB 0007[00] db 7 dup (0)
-435F:02F2 EF FF 04 00 FC FF db 0EFh,0FFh, 04h, 00h,0FCh,0FFh
-435F:02F8 00 db 00h
-435F:02F9 0007[00] db 7 dup (0)
-435F:0300 EF FF 08 db 0EFh,0FFh, 08h
-435F:0303 000B[00] db 11 dup (0)
-435F:030E FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:0314 04 db 04h
-435F:0315 000D[00] db 13 dup (0)
-435F:0322 01 00 db 1, 0
-435F:0324 000A[00] db 10 dup (0)
-435F:032E 02 00 db 2, 0
-435F:0330 000A[00] db 10 dup (0)
-435F:033A F1 FF 05 00 A0 03 db 0F1h,0FFh, 05h, 00h,0A0h, 03h
-435F:0340 F2 FF 05 00 03 db 0F2h,0FFh, 05h, 00h, 03h
-435F:0345 000B[00] db 11 dup (0)
-435F:0350 F1 FF 02 00 F6 03 db 0F1h,0FFh, 02h, 00h,0F6h, 03h
-435F:0356 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:035C 06 00 31 00 16 00 db 06h, 00h, 31h, 00h, 16h, 00h
-435F:0362 F0 FF 46 0E 05 00 db 0F0h,0FFh, 46h, 0Eh, 05h, 00h
-435F:0368 00 00 00 00 07 00 db 00h, 00h, 00h, 00h, 07h, 00h
-435F:036E 38 00 16 00 F2 FF db 38h, 00h, 16h, 00h,0F2h,0FFh
-435F:0374 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-435F:037A 00 00 06 00 32 00 db 00h, 00h, 06h, 00h, 32h, 00h
-435F:0380 17 00 07 db 17h, 00h, 07h
-435F:0383 000B[00] db 11 dup (0)
-435F:038E FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0393 000B[00] db 11 dup (0)
-435F:039E FB FF EA FF 2A 00 db 0FBh,0FFh,0EAh,0FFh, 2Ah, 00h
-435F:03A4 02 db 02h
-435F:03A5 000B[00] db 11 dup (0)
-435F:03B0 02 00 db 2, 0
-435F:03B2 000A[00] db 10 dup (0)
-435F:03BC 02 00 db 2, 0
-435F:03BE 000A[00] db 10 dup (0)
-435F:03C8 F2 FF 00 00 01 db 0F2h,0FFh, 00h, 00h, 01h
-435F:03CD 0017[00] db 23 dup (0)
-435F:03E4 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:03E9 000B[00] db 11 dup (0)
-435F:03F4 FB FF 03 db 0FBh,0FFh, 03h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 600
-
-435F:03F7 000B[00] db 11 dup (0)
-435F:0402 03 00 db 3, 0
-435F:0404 000A[00] db 10 dup (0)
-435F:040E 02 00 db 2, 0
-435F:0410 000A[00] db 10 dup (0)
-435F:041A F2 FF 00 00 01 db 0F2h,0FFh, 00h, 00h, 01h
-435F:041F 0017[00] db 23 dup (0)
-435F:0436 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:043B 000B[00] db 11 dup (0)
-435F:0446 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:044C 05 db 05h
-435F:044D 000D[00] db 13 dup (0)
-435F:045A 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0460 01 00 F9 FF F3 FF db 01h, 00h,0F9h,0FFh,0F3h,0FFh
-435F:0466 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:046C 01 00 F9 FF F3 FF db 01h, 00h,0F9h,0FFh,0F3h,0FFh
-435F:0472 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0478 01 00 F9 FF F3 FF db 01h, 00h,0F9h,0FFh,0F3h,0FFh
-435F:047E 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0484 01 00 F9 FF F3 FF db 01h, 00h,0F9h,0FFh,0F3h,0FFh
-435F:048A F2 FF 04 00 02 00 db 0F2h,0FFh, 04h, 00h, 02h, 00h
-435F:0490 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:0496 ED FF F7 FF 03 00 db 0EDh,0FFh,0F7h,0FFh, 03h, 00h
-435F:049C 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-435F:04A2 0D 00 EF FF F1 FF db 0Dh, 00h,0EFh,0FFh,0F1h,0FFh
-435F:04A8 04 00 4E 05 04 00 db 04h, 00h, 4Eh, 05h, 04h, 00h
-435F:04AE 00 00 00 00 04 00 db 00h, 00h, 00h, 00h, 04h, 00h
-435F:04B4 30 00 0C 00 F1 FF db 30h, 00h, 0Ch, 00h,0F1h,0FFh
-435F:04BA 01 00 08 05 F0 FF db 01h, 00h, 08h, 05h,0F0h,0FFh
-435F:04C0 F8 0D 05 00 00 00 db 0F8h, 0Dh, 05h, 00h, 00h, 00h
-435F:04C6 00 00 05 00 30 00 db 00h, 00h, 05h, 00h, 30h, 00h
-435F:04CC 1B 00 F2 FF 00 00 db 1Bh, 00h,0F2h,0FFh, 00h, 00h
-435F:04D2 06 00 00 db 06h, 00h, 00h
-435F:04D5 0009[00] db 9 dup (0)
-435F:04DE 07 db 7
-435F:04DF 000B[00] db 11 dup (0)
-435F:04EA 08 00 db 8, 0
-435F:04EC 000A[00] db 10 dup (0)
-435F:04F6 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:04FB 000B[00] db 11 dup (0)
-435F:0506 FB FF F2 FF 00 00 db 0FBh,0FFh,0F2h,0FFh, 00h, 00h
-435F:050C 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0512 04 00 30 00 0C 00 db 04h, 00h, 30h, 00h, 0Ch, 00h
-435F:0518 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:051E 04 00 30 00 0C 00 db 04h, 00h, 30h, 00h, 0Ch, 00h
-435F:0524 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:052A 04 00 30 00 0C 00 db 04h, 00h, 30h, 00h, 0Ch, 00h
-435F:0530 08 db 8
-435F:0531 000B[00] db 11 dup (0)
-435F:053C FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0541 000B[00] db 11 dup (0)
-435F:054C FB FF EA FF 2A 00 db 0FBh,0FFh,0EAh,0FFh, 2Ah, 00h
-435F:0552 02 db 02h
-435F:0553 000B[00] db 11 dup (0)
-435F:055E 02 00 db 2, 0
-435F:0560 000A[00] db 10 dup (0)
-435F:056A 02 00 db 2, 0
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 601
-
-435F:056C 000A[00] db 10 dup (0)
-435F:0576 F2 FF 00 00 01 db 0F2h,0FFh, 00h, 00h, 01h
-435F:057B 0017[00] db 23 dup (0)
-435F:0592 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0597 000B[00] db 11 dup (0)
-435F:05A2 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:05A8 05 db 05h
-435F:05A9 000D[00] db 13 dup (0)
-435F:05B6 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:05BC 01 00 F9 FF F3 FF db 01h, 00h,0F9h,0FFh,0F3h,0FFh
-435F:05C2 F2 FF 04 00 02 00 db 0F2h,0FFh, 04h, 00h, 02h, 00h
-435F:05C8 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:05CE ED FF F7 FF 03 00 db 0EDh,0FFh,0F7h,0FFh, 03h, 00h
-435F:05D4 00 00 00 00 03 00 db 00h, 00h, 00h, 00h, 03h, 00h
-435F:05DA 0D 00 EF FF F1 FF db 0Dh, 00h,0EFh,0FFh,0F1h,0FFh
-435F:05E0 04 00 6E 06 04 00 db 04h, 00h, 6Eh, 06h, 04h, 00h
-435F:05E6 00 00 00 00 04 00 db 00h, 00h, 00h, 00h, 04h, 00h
-435F:05EC 30 00 0C 00 F1 FF db 30h, 00h, 0Ch, 00h,0F1h,0FFh
-435F:05F2 01 00 40 06 F0 FF db 01h, 00h, 40h, 06h,0F0h,0FFh
-435F:05F8 F8 0D 05 00 00 00 db 0F8h, 0Dh, 05h, 00h, 00h, 00h
-435F:05FE 00 00 05 00 30 00 db 00h, 00h, 05h, 00h, 30h, 00h
-435F:0604 1B 00 F2 FF 00 00 db 1Bh, 00h,0F2h,0FFh, 00h, 00h
-435F:060A 06 00 00 db 06h, 00h, 00h
-435F:060D 0009[00] db 9 dup (0)
-435F:0616 07 db 7
-435F:0617 000B[00] db 11 dup (0)
-435F:0622 08 00 db 8, 0
-435F:0624 000A[00] db 10 dup (0)
-435F:062E FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0633 000B[00] db 11 dup (0)
-435F:063E FB FF F2 FF 00 00 db 0FBh,0FFh,0F2h,0FFh, 00h, 00h
-435F:0644 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:064A 04 00 30 00 0C 00 db 04h, 00h, 30h, 00h, 0Ch, 00h
-435F:0650 08 db 8
-435F:0651 000B[00] db 11 dup (0)
-435F:065C FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0661 000B[00] db 11 dup (0)
-435F:066C FB FF EA FF 2A 00 db 0FBh,0FFh,0EAh,0FFh, 2Ah, 00h
-435F:0672 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:0678 02 00 ED FF F7 FF db 02h, 00h,0EDh,0FFh,0F7h,0FFh
-435F:067E F2 FF 00 00 01 00 db 0F2h,0FFh, 00h, 00h, 01h, 00h
-435F:0684 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-435F:068A F9 FF F3 FF 00 db 0F9h,0FFh,0F3h,0FFh, 00h
-435F:068F 000B[00] db 11 dup (0)
-435F:069A FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:069F 000B[00] db 11 dup (0)
-435F:06AA FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:06B0 06 00 00 db 06h, 00h, 00h
-435F:06B3 000B[00] db 11 dup (0)
-435F:06BE 01 00 db 1, 0
-435F:06C0 000A[00] db 10 dup (0)
-435F:06CA 02 00 db 2, 0
-435F:06CC 000A[00] db 10 dup (0)
-435F:06D6 02 00 db 2, 0
-435F:06D8 000A[00] db 10 dup (0)
-435F:06E2 02 00 db 2, 0
-435F:06E4 000A[00] db 10 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 602
-
-435F:06EE 02 00 db 2, 0
-435F:06F0 000A[00] db 10 dup (0)
-435F:06FA 03 00 db 3, 0
-435F:06FC 000A[00] db 10 dup (0)
-435F:0706 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:070C 08 00 3C 00 1F 00 db 08h, 00h, 3Ch, 00h, 1Fh, 00h
-435F:0712 F1 FF 02 00 58 07 db 0F1h,0FFh, 02h, 00h, 58h, 07h
-435F:0718 F1 FF 03 00 22 07 db 0F1h,0FFh, 03h, 00h, 22h, 07h
-435F:071E F0 FF 94 0E 05 00 db 0F0h,0FFh, 94h, 0Eh, 05h, 00h
-435F:0724 00 00 00 00 09 00 db 00h, 00h, 00h, 00h, 09h, 00h
-435F:072A 33 00 0D 00 06 00 db 33h, 00h, 0Dh, 00h, 06h, 00h
-435F:0730 00 db 00h
-435F:0731 0009[00] db 9 dup (0)
-435F:073A 07 db 7
-435F:073B 000B[00] db 11 dup (0)
-435F:0746 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:074B 000B[00] db 11 dup (0)
-435F:0756 FB FF 04 00 00 00 db 0FBh,0FFh, 04h, 00h, 00h, 00h
-435F:075C 00 00 08 00 3C 00 db 00h, 00h, 08h, 00h, 3Ch, 00h
-435F:0762 1F 00 04 00 00 00 db 1Fh, 00h, 04h, 00h, 00h, 00h
-435F:0768 00 00 08 00 3C 00 db 00h, 00h, 08h, 00h, 3Ch, 00h
-435F:076E 1F 00 04 00 00 00 db 1Fh, 00h, 04h, 00h, 00h, 00h
-435F:0774 00 00 08 00 3C 00 db 00h, 00h, 08h, 00h, 3Ch, 00h
-435F:077A 1F 00 07 db 1Fh, 00h, 07h
-435F:077D 000B[00] db 11 dup (0)
-435F:0788 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:078D 000B[00] db 11 dup (0)
-435F:0798 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:079E 06 00 00 db 06h, 00h, 00h
-435F:07A1 000B[00] db 11 dup (0)
-435F:07AC 01 00 db 1, 0
-435F:07AE 000A[00] db 10 dup (0)
-435F:07B8 02 00 db 2, 0
-435F:07BA 000A[00] db 10 dup (0)
-435F:07C4 02 00 db 2, 0
-435F:07C6 000A[00] db 10 dup (0)
-435F:07D0 03 00 db 3, 0
-435F:07D2 000A[00] db 10 dup (0)
-435F:07DC 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:07E2 08 00 3C 00 1F 00 db 08h, 00h, 3Ch, 00h, 1Fh, 00h
-435F:07E8 F1 FF 02 00 2E 08 db 0F1h,0FFh, 02h, 00h, 2Eh, 08h
-435F:07EE F1 FF 03 00 F8 07 db 0F1h,0FFh, 03h, 00h,0F8h, 07h
-435F:07F4 F0 FF 94 0E 05 00 db 0F0h,0FFh, 94h, 0Eh, 05h, 00h
-435F:07FA 00 00 00 00 09 00 db 00h, 00h, 00h, 00h, 09h, 00h
-435F:0800 33 00 0D 00 06 00 db 33h, 00h, 0Dh, 00h, 06h, 00h
-435F:0806 00 db 00h
-435F:0807 0009[00] db 9 dup (0)
-435F:0810 07 db 7
-435F:0811 000B[00] db 11 dup (0)
-435F:081C FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:0821 000B[00] db 11 dup (0)
-435F:082C FB FF 04 00 00 00 db 0FBh,0FFh, 04h, 00h, 00h, 00h
-435F:0832 00 00 08 00 3C 00 db 00h, 00h, 08h, 00h, 3Ch, 00h
-435F:0838 1F 00 07 db 1Fh, 00h, 07h
-435F:083B 000B[00] db 11 dup (0)
-435F:0846 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:084B 000B[00] db 11 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 603
-
-435F:0856 FB FF EF FF FE FF db 0FBh,0FFh,0EFh,0FFh,0FEh,0FFh
-435F:085C 06 00 00 db 06h, 00h, 00h
-435F:085F 000B[00] db 11 dup (0)
-435F:086A 01 00 db 1, 0
-435F:086C 000A[00] db 10 dup (0)
-435F:0876 02 00 db 2, 0
-435F:0878 000A[00] db 10 dup (0)
-435F:0882 02 00 db 2, 0
-435F:0884 000A[00] db 10 dup (0)
-435F:088E 01 00 db 1, 0
-435F:0890 0016[00] db 22 dup (0)
-435F:08A6 FE FF 00 00 08 db 0FEh,0FFh, 00h, 00h, 08h
-435F:08AB 000B[00] db 11 dup (0)
-435F:08B6 FB FF 00 00 0E 00 db 0FBh,0FFh, 00h, 00h, 0Eh, 00h
-435F:08BC 3C 00 CA 02 26 01 db 3Ch, 00h,0CAh, 02h, 26h, 01h
-435F:08C2 C0 01 10 03 48 04 db 0C0h, 01h, 10h, 03h, 48h, 04h
-435F:08C8 AC 06 58 08 A4 05 db 0ACh, 06h, 58h, 08h,0A4h, 05h
-435F:08CE 9A 07 42 02 CA 00 db 9Ah, 07h, 42h, 02h,0CAh, 00h
-435F:08D4 01 db 01h
-435F:08D5 001F[00] db 31 dup (0)
-435F:08F4 01 00 db 1, 0
-435F:08F6 001E[00] db 30 dup (0)
-435F:0914 01 00 01 00 00 01 db 1, 0, 1, 0, 0, 1
-435F:091A 00 01 01 00 db 0, 1, 1, 0
-435F:091E 0009[00] db 9 dup (0)
-435F:0927 0B 00 09 01 00 00 db 0Bh, 00h, 09h, 01h, 00h, 00h
-435F:092D 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0933 00 01 00 01 00 00 db 00h, 01h, 00h, 01h, 00h, 00h
-435F:0939 0B 00 01 00 01 00 db 0Bh, 00h, 01h, 00h, 01h, 00h
-435F:093F 01 0A 00 01 00 00 db 01h, 0Ah, 00h, 01h, 00h, 00h
-435F:0945 00 00 01 00 00 09 db 00h, 00h, 01h, 00h, 00h, 09h
-435F:094B 01 00 01 01 00 00 db 01h, 00h, 01h, 01h, 00h, 00h
-435F:0951 00 00 00 01 00 00 db 00h, 00h, 00h, 01h, 00h, 00h
-435F:0957 00 00 00 00 01 01 db 00h, 00h, 00h, 00h, 01h, 01h
-435F:095D 00 db 00h
-435F:095E 0009[00] db 9 dup (0)
-435F:0967 0A 00 00 09 00 01 db 0Ah, 00h, 00h, 09h, 00h, 01h
-435F:096D 00 01 00 00 00 0B db 00h, 01h, 00h, 00h, 00h, 0Bh
-435F:0973 00 01 00 00 01 01 db 00h, 01h, 00h, 00h, 01h, 01h
-435F:0979 00 0B 00 00 00 01 db 00h, 0Bh, 00h, 00h, 00h, 01h
-435F:097F 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0985 00 00 01 06 00 00 db 00h, 00h, 01h, 06h, 00h, 00h
-435F:098B 00 01 00 0A 01 00 db 00h, 01h, 00h, 0Ah, 01h, 00h
-435F:0991 01 00 00 01 db 01h, 00h, 00h, 01h
-435F:0995 0008[00] db 8 dup (0)
-435F:099D 01 01 01 00 00 00 db 01h, 01h, 01h, 00h, 00h, 00h
-435F:09A3 00 00 0A 00 00 01 db 00h, 00h, 0Ah, 00h, 00h, 01h
-435F:09A9 0B 00 09 01 06 00 db 0Bh, 00h, 09h, 01h, 06h, 00h
-435F:09AF 00 00 00 00 00 01 db 00h, 00h, 00h, 00h, 00h, 01h
-435F:09B5 00 00 00 01 00 db 00h, 00h, 00h, 01h, 00h
-435F:09BA 09 db 9
-435F:09BB 000B[00] db 11 dup (0)
-435F:09C6 09 01 01 0A 00 01 db 09h, 01h, 01h, 0Ah, 00h, 01h
-435F:09CC 00 00 00 0B 00 00 db 00h, 00h, 00h, 0Bh, 00h, 00h
-435F:09D2 06 00 01 00 00 01 db 06h, 00h, 01h, 00h, 00h, 01h
-435F:09D8 00 01 01 09 00 00 db 00h, 01h, 01h, 09h, 00h, 00h
-435F:09DE 00 00 01 01 00 06 db 00h, 00h, 01h, 01h, 00h, 06h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 604
-
-435F:09E4 00 00 0A 00 00 00 db 00h, 00h, 0Ah, 00h, 00h, 00h
-435F:09EA 0B 06 00 09 01 00 db 0Bh, 06h, 00h, 09h, 01h, 00h
-435F:09F0 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-435F:09F6 00 00 0B 00 01 09 db 00h, 00h, 0Bh, 00h, 01h, 09h
-435F:09FC 00 00 00 00 0A 01 db 00h, 00h, 00h, 00h, 0Ah, 01h
-435F:0A02 01 01 00 00 00 00 db 01h, 01h, 00h, 00h, 00h, 00h
-435F:0A08 00 00 01 00 01 09 db 00h, 00h, 01h, 00h, 01h, 09h
-435F:0A0E 01 01 01 db 01h, 01h, 01h
-435F:0A11 0023[00] db 35 dup (0)
-435F:0A34 FF FF FF 03 FF FF db 0FFh,0FFh,0FFh, 03h,0FFh,0FFh
-435F:0A3A 00 FF FF FF 00 FF db 00h,0FFh,0FFh,0FFh, 00h,0FFh
-435F:0A40 00 FF 00 FF FF FF db 00h,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0A46 FF FF 00 00 FF 03 db 0FFh,0FFh, 00h, 00h,0FFh, 03h
-435F:0A4C FF 00 03 db 0FFh, 00h, 03h
-435F:0A4F 000B[FF] db 11 dup (0FFh)
-435F:0A5A 00 FF FF FF 00 FF db 00h,0FFh,0FFh,0FFh, 00h,0FFh
-435F:0A60 00 FF 00 FF FF FF db 00h,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0A66 FF FF 00 00 FF FF db 0FFh,0FFh, 00h, 00h,0FFh,0FFh
-435F:0A6C FF 00 03 FF db 0FFh, 00h, 03h,0FFh
-435F:0A70 000A[FF] db 10 dup (0FFh)
-435F:0A7A 00 FF FF FF 00 db 00h,0FFh,0FFh,0FFh, 00h
-435F:0A7F 0009[FF] db 9 dup (0FFh)
-435F:0A88 00 00 FF FF FF 00 db 00h, 00h,0FFh,0FFh,0FFh, 00h
-435F:0A8E 03 FF db 03h,0FFh
-435F:0A90 000A[FF] db 10 dup (0FFh)
-435F:0A9A 00 FF FF FF FF FF db 00h,0FFh,0FFh,0FFh,0FFh,0FFh
-435F:0AA0 FF FF 00 FF FF FF db 0FFh,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0AA6 FF FF 00 00 FF FF db 0FFh,0FFh, 00h, 00h,0FFh,0FFh
-435F:0AAC FF FF db 0FFh,0FFh
-435F:0AAE 0D db 0Dh
-435F:0AAF 000B[FF] db 11 dup (0FFh)
-435F:0ABA 00 FF FF FF 00 FF db 00h,0FFh,0FFh,0FFh, 00h,0FFh
-435F:0AC0 00 FF 00 FF FF FF db 00h,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0AC6 FF FF 00 0C FF FF db 0FFh,0FFh, 00h, 0Ch,0FFh,0FFh
-435F:0ACC FF 00 03 FF db 0FFh, 00h, 03h,0FFh
-435F:0AD0 000A[FF] db 10 dup (0FFh)
-435F:0ADA 03 0C 03 FF 03 FF db 03h, 0Ch, 03h,0FFh, 03h,0FFh
-435F:0AE0 03 FF 03 FF 03 FF db 03h,0FFh, 03h,0FFh, 03h,0FFh
-435F:0AE6 03 FF FF FF FF 0D db 03h,0FFh,0FFh,0FFh,0FFh, 0Dh
-435F:0AEC FF 00 03 FF db 0FFh, 00h, 03h,0FFh
-435F:0AF0 000C[FF] db 12 dup (0FFh)
-435F:0AFC 0C FF 00 FF FF FF db 0Ch,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0B02 FF FF FF 03 FF FF db 0FFh,0FFh,0FFh, 03h,0FFh,0FFh
-435F:0B08 FF FF 0D FF FF 00 db 0FFh,0FFh, 0Dh,0FFh,0FFh, 00h
-435F:0B0E FF FF FF 03 db 0FFh,0FFh,0FFh, 03h
-435F:0B12 000C[FF] db 12 dup (0FFh)
-435F:0B1E 00 FF db 00h,0FFh
-435F:0B20 000D[FF] db 13 dup (0FFh)
-435F:0B2D 00 03 db 0, 3
-435F:0B2F 000B[FF] db 11 dup (0FFh)
-435F:0B3A 03 FF FF FF FF FF db 03h,0FFh,0FFh,0FFh,0FFh,0FFh
-435F:0B40 FF FF 00 FF FF 03 db 0FFh,0FFh, 00h,0FFh,0FFh, 03h
-435F:0B46 FF FF FF FF 03 0C db 0FFh,0FFh,0FFh,0FFh, 03h, 0Ch
-435F:0B4C FF db 0FFh
-435F:0B4D 000E[FF] db 14 dup (0FFh)
-435F:0B5B 03 FF FF 00 FF 00 db 03h,0FFh,0FFh, 00h,0FFh, 00h
-435F:0B61 FF 00 FF FF FF FF db 0FFh, 00h,0FFh,0FFh,0FFh,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 605
-
-435F:0B67 FF FF 00 FF FF FF db 0FFh,0FFh, 00h,0FFh,0FFh,0FFh
-435F:0B6D 00 FF FF FF FF FF db 00h,0FFh,0FFh,0FFh,0FFh,0FFh
-435F:0B73 FF 00 db 0FFh, 00h
-435F:0B75 0022[00] db 34 dup (0)
-435F:0B97 09 00 08 00 00 09 db 9, 0, 8, 0, 0, 9
-435F:0B9D 0007[00] db 7 dup (0)
-435F:0BA4 07 07 07 07 00 00 db 7, 7, 7, 7, 0, 0
-435F:0BAA 09 00 07 00 08 00 db 9, 0, 7, 0, 8, 0
-435F:0BB0 00 00 03 00 06 00 db 0, 0, 3, 0, 6, 0
-435F:0BB6 06 00 06 00 06 00 db 6, 0, 6, 0, 6, 0
-435F:0BBC 06 00 06 00 06 00 db 6, 0, 6, 0, 6, 0
-435F:0BC2 06 db 6
-435F:0BC3 0011[00] db 17 dup (0)
-435F:0BD4 09 00 09 00 00 00 db 9, 0, 9, 0, 0, 0
-435F:0BDA 09 00 06 06 db 9, 0, 6, 6
-435F:0BDE 0009[00] db 9 dup (0)
-435F:0BE7 07 07 0A 0A 0A 0A db 07h, 07h, 0Ah, 0Ah, 0Ah, 0Ah
-435F:0BED 0007[00] db 7 dup (0)
-435F:0BF4 0A 0A 0A 0A 0A 07 db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 07h
-435F:0BFA 07 07 07 db 07h, 07h, 07h
-435F:0BFD 08 08 db 8, 8
-435F:0BFF 000A[07] db 10 dup (7)
-435F:0C09 08 08 08 08 07 07 db 08h, 08h, 08h, 08h, 07h, 07h
-435F:0C0F 0A 0A 0A 0A 0A 07 db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 07h
-435F:0C15 07 07 07 07 07 07 db 07h, 07h, 07h, 07h, 07h, 07h
-435F:0C1B 00 00 00 00 0B 0B db 00h, 00h, 00h, 00h, 0Bh, 0Bh
-435F:0C21 00 0B 0B 00 00 0A db 00h, 0Bh, 0Bh, 00h, 00h, 0Ah
-435F:0C27 0A 0A 0A 00 08 08 db 0Ah, 0Ah, 0Ah, 00h, 08h, 08h
-435F:0C2D 0B 0B 0B 0B 07 08 db 0Bh, 0Bh, 0Bh, 0Bh, 07h, 08h
-435F:0C33 07 db 07h
-435F:0C34 0009[0B] db 9 dup (0Bh)
-435F:0C3D 0A 0B 0B 0B 0B 0B db 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
-435F:0C43 09 0B 0B 0B 0B 0B db 09h, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
-435F:0C49 0A 0A 0B 06 06 06 db 0Ah, 0Ah, 0Bh, 06h, 06h, 06h
-435F:0C4F 06 06 06 06 06 06 db 06h, 06h, 06h, 06h, 06h, 06h
-435F:0C55 0A 0B 06 0A 0B 06 db 0Ah, 0Bh, 06h, 0Ah, 0Bh, 06h
-435F:0C5B 0A 0B 06 0A 0B 06 db 0Ah, 0Bh, 06h, 0Ah, 0Bh, 06h
-435F:0C61 0A 0B 0B 00 00 0B db 0Ah, 0Bh, 0Bh, 00h, 00h, 0Bh
-435F:0C67 0B 0A 0A 0A 0A 0B db 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh
-435F:0C6D 0007[0B] db 7 dup (0Bh)
-435F:0C74 06 06 0B 06 07 0A db 06h, 06h, 0Bh, 06h, 07h, 0Ah
-435F:0C7A 0A 0A 0B 0B 0B 08 db 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 08h
-435F:0C80 07 07 0B 07 0B 06 db 07h, 07h, 0Bh, 07h, 0Bh, 06h
-435F:0C86 0B 06 0B 0A 08 08 db 0Bh, 06h, 0Bh, 0Ah, 08h, 08h
-435F:0C8C 07 07 0A 0A 0A 0A db 07h, 07h, 0Ah, 0Ah, 0Ah, 0Ah
-435F:0C92 0A 00 06 0B 06 0A db 0Ah, 00h, 06h, 0Bh, 06h, 0Ah
-435F:0C98 03 00 0A 0A 0A 0A db 03h, 00h, 0Ah, 0Ah, 0Ah, 0Ah
-435F:0C9E 0B 03 0B 0B 0B 0B db 0Bh, 03h, 0Bh, 0Bh, 0Bh, 0Bh
-435F:0CA4 0A 0B 0A 06 0B 06 db 0Ah, 0Bh, 0Ah, 06h, 0Bh, 06h
-435F:0CAA 0A 03 00 07 07 07 db 0Ah, 03h, 00h, 07h, 07h, 07h
-435F:0CB0 06 0B 0A 0A 0B 0A db 06h, 0Bh, 0Ah, 0Ah, 0Bh, 0Ah
-435F:0CB6 0B 00 03 00 0A 0B db 0Bh, 00h, 03h, 00h, 0Ah, 0Bh
-435F:0CBC 0A 0B 0B 00 07 0B db 0Ah, 0Bh, 0Bh, 00h, 07h, 0Bh
-435F:0CC2 07 00 00 00 0A 07 db 07h, 00h, 00h, 00h, 0Ah, 07h
-435F:0CC8 0B 07 00 03 03 06 db 0Bh, 07h, 00h, 03h, 03h, 06h
-435F:0CCE 0B 06 03 03 db 0Bh, 06h, 03h, 03h
-435F:0CD2 0022[00] db 34 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 606
-
-435F:0CF4 05 00 0C 00 0C 00 db 05h, 00h, 0Ch, 00h, 0Ch, 00h
-435F:0CFA 0A 00 09 00 08 00 db 0Ah, 00h, 09h, 00h, 08h, 00h
-435F:0D00 07 00 07 00 04 00 db 07h, 00h, 07h, 00h, 04h, 00h
-435F:0D06 02 00 01 00 0B 00 db 02h, 00h, 01h, 00h, 0Bh, 00h
-435F:0D0C 02 00 0C 00 04 00 db 02h, 00h, 0Ch, 00h, 04h, 00h
-435F:0D12 0D 00 05 00 00 00 db 0Dh, 00h, 05h, 00h, 00h, 00h
-435F:0D18 00 00 0B 00 02 00 db 00h, 00h, 0Bh, 00h, 02h, 00h
-435F:0D1E 0C 00 04 00 0D 00 db 0Ch, 00h, 04h, 00h, 0Dh, 00h
-435F:0D24 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0D2A 0B 00 02 00 0C 00 db 0Bh, 00h, 02h, 00h, 0Ch, 00h
-435F:0D30 04 00 0D 00 0C 00 db 04h, 00h, 0Dh, 00h, 0Ch, 00h
-435F:0D36 00 00 00 00 0B 00 db 00h, 00h, 00h, 00h, 0Bh, 00h
-435F:0D3C 02 00 0C 00 04 00 db 02h, 00h, 0Ch, 00h, 04h, 00h
-435F:0D42 0D 00 0C 00 00 00 db 0Dh, 00h, 0Ch, 00h, 00h, 00h
-435F:0D48 00 00 0B 00 02 00 db 00h, 00h, 0Bh, 00h, 02h, 00h
-435F:0D4E 0C 00 04 00 0D 00 db 0Ch, 00h, 04h, 00h, 0Dh, 00h
-435F:0D54 0C 00 00 00 00 00 db 0Ch, 00h, 00h, 00h, 00h, 00h
-435F:0D5A 0B 00 0D 00 0C 00 db 0Bh, 00h, 0Dh, 00h, 0Ch, 00h
-435F:0D60 04 00 0D 00 0C 00 db 04h, 00h, 0Dh, 00h, 0Ch, 00h
-435F:0D66 00 00 00 00 0B 00 db 00h, 00h, 00h, 00h, 0Bh, 00h
-435F:0D6C 0D 00 0C 00 04 00 db 0Dh, 00h, 0Ch, 00h, 04h, 00h
-435F:0D72 0D 00 05 00 00 00 db 0Dh, 00h, 05h, 00h, 00h, 00h
-435F:0D78 00 00 0B 00 0D 00 db 00h, 00h, 0Bh, 00h, 0Dh, 00h
-435F:0D7E 0C 00 04 00 0D 00 db 0Ch, 00h, 04h, 00h, 0Dh, 00h
-435F:0D84 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0D8A 0B 00 0D 00 0C 00 db 0Bh, 00h, 0Dh, 00h, 0Ch, 00h
-435F:0D90 04 00 0D 00 05 00 db 04h, 00h, 0Dh, 00h, 05h, 00h
-435F:0D96 00 00 00 00 0B 00 db 00h, 00h, 00h, 00h, 0Bh, 00h
-435F:0D9C 02 00 0C 00 04 00 db 02h, 00h, 0Ch, 00h, 04h, 00h
-435F:0DA2 0D 00 05 db 0Dh, 00h, 05h
-435F:0DA5 000F[00] db 15 dup (0)
-435F:0DB4 44 18 A8 13 2C 13 db 44h, 18h,0A8h, 13h, 2Ch, 13h
-435F:0DBA 90 12 4A 18 44 18 db 90h, 12h, 4Ah, 18h, 44h, 18h
-435F:0DC0 28 15 C8 16 18 14 db 28h, 15h,0C8h, 16h, 18h, 14h
-435F:0DC6 4A 18 FF FF F6 55 db 4Ah, 18h,0FFh,0FFh,0F6h, 55h
-435F:0DCC 00 00 F0 FF 00 00 db 00h, 00h,0F0h,0FFh, 00h, 00h
-435F:0DD2 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0DD8 EF FF FB FF 00 db 0EFh,0FFh,0FBh,0FFh, 00h
-435F:0DDD 000B[00] db 11 dup (0)
-435F:0DE8 01 00 db 1, 0
-435F:0DEA 000A[00] db 10 dup (0)
-435F:0DF4 EF FF FB FF EE FF db 0EFh,0FFh,0FBh,0FFh,0EEh,0FFh
-435F:0DFA FF FF 3E 56 F2 FF db 0FFh,0FFh, 3Eh, 56h,0F2h,0FFh
-435F:0E00 00 00 00 00 06 00 db 00h, 00h, 00h, 00h, 06h, 00h
-435F:0E06 00 00 18 db 00h, 00h, 18h
-435F:0E09 0007[00] db 7 dup (0)
-435F:0E10 03 00 00 00 18 00 db 03h, 00h, 00h, 00h, 18h, 00h
-435F:0E16 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:0E1C 02 00 00 00 18 db 02h, 00h, 00h, 00h, 18h
-435F:0E21 000B[00] db 11 dup (0)
-435F:0E2C 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E32 FF FF F6 55 EF FF db 0FFh,0FFh,0F6h, 55h,0EFh,0FFh
-435F:0E38 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:0E3E 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E44 FB FF EE FF FF FF db 0FBh,0FFh,0EEh,0FFh,0FFh,0FFh
-435F:0E4A 3E 56 F2 FF 00 00 db 3Eh, 56h,0F2h,0FFh, 00h, 00h
-435F:0E50 01 00 06 00 00 00 db 01h, 00h, 06h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 607
-
-435F:0E56 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E5C 01 00 03 00 00 00 db 01h, 00h, 03h, 00h, 00h, 00h
-435F:0E62 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E68 01 00 02 00 00 00 db 01h, 00h, 02h, 00h, 00h, 00h
-435F:0E6E 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E74 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:0E7A 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E80 FF FF F6 55 EF FF db 0FFh,0FFh,0F6h, 55h,0EFh,0FFh
-435F:0E86 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:0E8C 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:0E92 FB FF EE FF FF FF db 0FBh,0FFh,0EEh,0FFh,0FFh,0FFh
-435F:0E98 3E 56 F2 FF 00 00 db 3Eh, 56h,0F2h,0FFh, 00h, 00h
-435F:0E9E 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:0EA4 14 00 F0 FF FF FF db 14h, 00h,0F0h,0FFh,0FFh,0FFh
-435F:0EAA 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:0EB0 15 00 E2 FF 10 00 db 15h, 00h,0E2h,0FFh, 10h, 00h
-435F:0EB6 EA FF 24 00 04 00 db 0EAh,0FFh, 24h, 00h, 04h, 00h
-435F:0EBC 00 00 00 00 16 00 db 00h, 00h, 00h, 00h, 16h, 00h
-435F:0EC2 E6 FF 16 00 05 00 db 0E6h,0FFh, 16h, 00h, 05h, 00h
-435F:0EC8 00 00 00 00 16 00 db 00h, 00h, 00h, 00h, 16h, 00h
-435F:0ECE E4 FF 17 00 06 00 db 0E4h,0FFh, 17h, 00h, 06h, 00h
-435F:0ED4 00 00 00 00 17 00 db 00h, 00h, 00h, 00h, 17h, 00h
-435F:0EDA E9 FF 16 00 06 00 db 0E9h,0FFh, 16h, 00h, 06h, 00h
-435F:0EE0 00 00 00 00 17 00 db 00h, 00h, 00h, 00h, 17h, 00h
-435F:0EE6 E9 FF 16 00 06 00 db 0E9h,0FFh, 16h, 00h, 06h, 00h
-435F:0EEC 00 00 00 00 17 00 db 00h, 00h, 00h, 00h, 17h, 00h
-435F:0EF2 E9 FF 16 00 06 00 db 0E9h,0FFh, 16h, 00h, 06h, 00h
-435F:0EF8 00 00 00 00 17 00 db 00h, 00h, 00h, 00h, 17h, 00h
-435F:0EFE E9 FF 16 00 07 00 db 0E9h,0FFh, 16h, 00h, 07h, 00h
-435F:0F04 00 00 00 00 15 00 db 00h, 00h, 00h, 00h, 15h, 00h
-435F:0F0A E9 FF 19 00 07 00 db 0E9h,0FFh, 19h, 00h, 07h, 00h
-435F:0F10 00 00 00 00 15 00 db 00h, 00h, 00h, 00h, 15h, 00h
-435F:0F16 E9 FF 19 00 08 00 db 0E9h,0FFh, 19h, 00h, 08h, 00h
-435F:0F1C 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:0F22 00 00 00 00 08 00 db 00h, 00h, 00h, 00h, 08h, 00h
-435F:0F28 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:0F2E 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-435F:0F34 F6 55 EF FF 00 00 db 0F6h, 55h,0EFh,0FFh, 00h, 00h
-435F:0F3A 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:0F40 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:0F46 EE FF FF FF 3E 56 db 0EEh,0FFh,0FFh,0FFh, 3Eh, 56h
-435F:0F4C 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:0F52 14 00 F0 FF FF FF db 14h, 00h,0F0h,0FFh,0FFh,0FFh
-435F:0F58 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:0F5E 15 00 E2 FF 10 00 db 15h, 00h,0E2h,0FFh, 10h, 00h
-435F:0F64 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0F6A 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:0F70 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0F76 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0F7C 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0F82 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0F88 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0F8E 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0F94 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0F9A 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0FA0 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0FA6 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 608
-
-435F:0FAC 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0FB2 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0FB8 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:0FBE 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:0FC4 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0FCA 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:0FD0 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0FD6 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:0FDC 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0FE2 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:0FE8 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0FEE 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:0FF4 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:0FFA 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:1000 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1006 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:100C 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1012 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:1018 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:101E 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:1024 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:102A 16 00 E6 FF 16 00 db 16h, 00h,0E6h,0FFh, 16h, 00h
-435F:1030 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:1036 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:103C 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:1042 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1048 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:104E 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1054 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:105A 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1060 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:1066 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:106C 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:1072 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1078 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:107E 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1084 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:108A 16 00 E4 FF 17 00 db 16h, 00h,0E4h,0FFh, 17h, 00h
-435F:1090 ED FF EE FF FF FF db 0EDh,0FFh,0EEh,0FFh,0FFh,0FFh
-435F:1096 50 56 db 50h, 56h
-435F:1098 0048[00] db 72 dup (0)
-435F:10E0 01 00 db 1, 0
-435F:10E2 000A[00] db 10 dup (0)
-435F:10EC 01 00 db 1, 0
-435F:10EE 000A[00] db 10 dup (0)
-435F:10F8 01 00 db 1, 0
-435F:10FA 000A[00] db 10 dup (0)
-435F:1104 01 00 db 1, 0
-435F:1106 000A[00] db 10 dup (0)
-435F:1110 01 00 db 1, 0
-435F:1112 000A[00] db 10 dup (0)
-435F:111C 02 00 db 2, 0
-435F:111E 000A[00] db 10 dup (0)
-435F:1128 03 00 db 3, 0
-435F:112A 000A[00] db 10 dup (0)
-435F:1134 04 00 db 4, 0
-435F:1136 000A[00] db 10 dup (0)
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 609
-
-435F:1140 05 00 00 db 5, 0, 0
-435F:1143 0009[00] db 9 dup (0)
-435F:114C 06 db 6
-435F:114D 000B[00] db 11 dup (0)
-435F:1158 07 db 7
-435F:1159 000B[00] db 11 dup (0)
-435F:1164 08 00 db 8, 0
-435F:1166 000A[00] db 10 dup (0)
-435F:1170 09 00 db 9, 0
-435F:1172 000A[00] db 10 dup (0)
-435F:117C 0A 00 db 0Ah, 00h
-435F:117E 000A[00] db 10 dup (0)
-435F:1188 0B 00 db 0Bh, 00h
-435F:118A 000A[00] db 10 dup (0)
-435F:1194 EC FF 0B db 0ECh,0FFh, 0Bh
-435F:1197 000B[00] db 11 dup (0)
-435F:11A2 F8 FF 96 11 EE FF db 0F8h,0FFh, 96h, 11h,0EEh,0FFh
-435F:11A8 F2 FF 00 00 FF FF db 0F2h,0FFh, 00h, 00h,0FFh,0FFh
-435F:11AE 47 56 00 00 F8 FF db 47h, 56h, 00h, 00h,0F8h,0FFh
-435F:11B4 00 db 00h
-435F:11B5 0009[00] db 9 dup (0)
-435F:11BE FC FF 00 db 0FCh,0FFh, 00h
-435F:11C1 0009[00] db 9 dup (0)
-435F:11CA FD FF 00 db 0FDh,0FFh, 00h
-435F:11CD 0013[00] db 19 dup (0)
-435F:11E0 FF FF FF 55 EF FF db 0FFh,0FFh,0FFh, 55h,0EFh,0FFh
-435F:11E6 08 db 08h
-435F:11E7 000B[00] db 11 dup (0)
-435F:11F2 FB FF EE FF F2 FF db 0FBh,0FFh,0EEh,0FFh,0F2h,0FFh
-435F:11F8 00 00 FF FF 47 56 db 00h, 00h,0FFh,0FFh, 47h, 56h
-435F:11FE 02 00 F8 FF 00 db 02h, 00h,0F8h,0FFh, 00h
-435F:1203 0007[00] db 7 dup (0)
-435F:120A 02 00 FC FF 00 db 02h, 00h,0FCh,0FFh, 00h
-435F:120F 0007[00] db 7 dup (0)
-435F:1216 02 00 FD FF 00 db 02h, 00h,0FDh,0FFh, 00h
-435F:121B 0007[00] db 7 dup (0)
-435F:1222 02 00 db 2, 0
-435F:1224 000A[00] db 10 dup (0)
-435F:122E FF FF FF 55 EF FF db 0FFh,0FFh,0FFh, 55h,0EFh,0FFh
-435F:1234 08 db 08h
-435F:1235 000B[00] db 11 dup (0)
-435F:1240 FB FF EE FF F2 FF db 0FBh,0FFh,0EEh,0FFh,0F2h,0FFh
-435F:1246 00 00 FF FF 47 56 db 00h, 00h,0FFh,0FFh, 47h, 56h
-435F:124C 01 00 F8 FF 00 db 01h, 00h,0F8h,0FFh, 00h
-435F:1251 0007[00] db 7 dup (0)
-435F:1258 01 00 FC FF 00 db 01h, 00h,0FCh,0FFh, 00h
-435F:125D 0007[00] db 7 dup (0)
-435F:1264 01 00 FD FF 00 db 01h, 00h,0FDh,0FFh, 00h
-435F:1269 0007[00] db 7 dup (0)
-435F:1270 01 00 db 1, 0
-435F:1272 000A[00] db 10 dup (0)
-435F:127C FF FF FF 55 EF FF db 0FFh,0FFh,0FFh, 55h,0EFh,0FFh
-435F:1282 08 db 08h
-435F:1283 000B[00] db 11 dup (0)
-435F:128E FB FF EF FF FF FF db 0FBh,0FFh,0EFh,0FFh,0FFh,0FFh
-435F:1294 ED 55 00 00 0C 00 db 0EDh, 55h, 00h, 00h, 0Ch, 00h
-435F:129A 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 610
-
-435F:12A0 00 00 F6 FF 08 00 db 00h, 00h,0F6h,0FFh, 08h, 00h
-435F:12A6 0C 13 01 00 00 00 db 0Ch, 13h, 01h, 00h, 00h, 00h
-435F:12AC 00 00 11 00 F5 FF db 00h, 00h, 11h, 00h,0F5h,0FFh
-435F:12B2 EF FF F2 FF 03 00 db 0EFh,0FFh,0F2h,0FFh, 03h, 00h
-435F:12B8 02 00 00 00 FE FF db 02h, 00h, 00h, 00h,0FEh,0FFh
-435F:12BE 12 00 F5 FF EF FF db 12h, 00h,0F5h,0FFh,0EFh,0FFh
-435F:12C4 03 00 00 00 FC FF db 03h, 00h, 00h, 00h,0FCh,0FFh
-435F:12CA 12 00 F4 FF EE FF db 12h, 00h,0F4h,0FFh,0EEh,0FFh
-435F:12D0 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:12D6 12 00 F4 FF EE FF db 12h, 00h,0F4h,0FFh,0EEh,0FFh
-435F:12DC 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:12E2 11 00 F5 FF EF FF db 11h, 00h,0F5h,0FFh,0EFh,0FFh
-435F:12E8 05 00 00 00 00 00 db 05h, 00h, 00h, 00h, 00h, 00h
-435F:12EE 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:12F4 F2 FF 00 00 FF FF db 0F2h,0FFh, 00h, 00h,0FFh,0FFh
-435F:12FA F6 55 EE FF 00 00 db 0F6h, 55h,0EEh,0FFh, 00h, 00h
-435F:1300 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1306 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:130C 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:1312 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:1318 FF FF F6 55 EE FF db 0FFh,0FFh,0F6h, 55h,0EEh,0FFh
-435F:131E 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:1324 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:132A FB FF EF FF FF FF db 0FBh,0FFh,0EFh,0FFh,0FFh,0FFh
-435F:1330 C9 55 00 00 0C 00 db 0C9h, 55h, 00h, 00h, 0Ch, 00h
-435F:1336 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:133C 00 00 01 00 00 00 db 00h, 00h, 01h, 00h, 00h, 00h
-435F:1342 00 00 13 00 F2 FF db 00h, 00h, 13h, 00h,0F2h,0FFh
-435F:1348 16 00 F2 FF 02 00 db 16h, 00h,0F2h,0FFh, 02h, 00h
-435F:134E 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:1354 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:135A 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:1360 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:1366 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:136C 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:1372 F7 FF 07 00 66 13 db 0F7h,0FFh, 07h, 00h, 66h, 13h
-435F:1378 F2 FF 00 00 01 00 db 0F2h,0FFh, 00h, 00h, 01h, 00h
-435F:137E 00 00 00 00 13 00 db 00h, 00h, 00h, 00h, 13h, 00h
-435F:1384 F2 FF 16 00 00 00 db 0F2h,0FFh, 16h, 00h, 00h, 00h
-435F:138A 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1390 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-435F:1396 F6 55 EE FF 00 00 db 0F6h, 55h,0EEh,0FFh, 00h, 00h
-435F:139C 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:13A2 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:13A8 EF FF FF FF DB 55 db 0EFh,0FFh,0FFh,0FFh,0DBh, 55h
-435F:13AE 00 00 0C 00 00 00 db 00h, 00h, 0Ch, 00h, 00h, 00h
-435F:13B4 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:13BA F2 FF 01 00 02 00 db 0F2h,0FFh, 01h, 00h, 02h, 00h
-435F:13C0 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:13C6 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:13CC 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:13D2 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:13D8 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:13DE 00 00 00 00 F7 FF db 00h, 00h, 00h, 00h,0F7h,0FFh
-435F:13E4 06 00 D6 13 F2 FF db 06h, 00h,0D6h, 13h,0F2h,0FFh
-435F:13EA 00 00 03 00 00 00 db 00h, 00h, 03h, 00h, 00h, 00h
-435F:13F0 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:13F6 00 00 04 00 00 00 db 00h, 00h, 04h, 00h, 00h, 00h
-435F:13FC 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:1402 00 00 FF FF F6 55 db 00h, 00h,0FFh,0FFh,0F6h, 55h
-435F:1408 EE FF 04 00 00 00 db 0EEh,0FFh, 04h, 00h, 00h, 00h
-435F:140E 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:1414 00 00 FB FF EF FF db 00h, 00h,0FBh,0FFh,0EFh,0FFh
-435F:141A FF FF E4 55 00 00 db 0FFh,0FFh,0E4h, 55h, 00h, 00h
-435F:1420 00 00 00 00 0C 00 db 00h, 00h, 00h, 00h, 0Ch, 00h
-435F:1426 18 00 F8 FF F6 FF db 18h, 00h,0F8h,0FFh,0F6h,0FFh
-435F:142C 0D 00 A8 14 01 00 db 0Dh, 00h,0A8h, 14h, 01h, 00h
-435F:1432 00 00 00 00 0D 00 db 00h, 00h, 00h, 00h, 0Dh, 00h
-435F:1438 16 00 0D 00 02 00 db 16h, 00h, 0Dh, 00h, 02h, 00h
-435F:143E 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1444 00 00 00 00 F4 FF db 00h, 00h, 00h, 00h,0F4h,0FFh
-435F:144A 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:1450 0E 00 E3 FF 16 00 db 0Eh, 00h,0E3h,0FFh, 16h, 00h
-435F:1456 F1 FF 03 00 E0 14 db 0F1h,0FFh, 03h, 00h,0E0h, 14h
-435F:145C F0 FF F4 11 04 00 db 0F0h,0FFh,0F4h, 11h, 04h, 00h
-435F:1462 00 00 00 00 0F 00 db 00h, 00h, 00h, 00h, 0Fh, 00h
-435F:1468 E3 FF 16 00 05 00 db 0E3h,0FFh, 16h, 00h, 05h, 00h
-435F:146E 00 00 00 00 10 00 db 00h, 00h, 00h, 00h, 10h, 00h
-435F:1474 E3 FF 0A 00 06 00 db 0E3h,0FFh, 0Ah, 00h, 06h, 00h
-435F:147A 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1480 00 00 00 00 07 db 00h, 00h, 00h, 00h, 07h
-435F:1485 0007[00] db 7 dup (0)
-435F:148C 11 00 F6 FF FF FF db 11h, 00h,0F6h,0FFh,0FFh,0FFh
-435F:1492 F6 55 04 00 00 00 db 0F6h, 55h, 04h, 00h, 00h, 00h
-435F:1498 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:149E 00 00 F7 FF 0D 00 db 00h, 00h,0F7h,0FFh, 0Dh, 00h
-435F:14A4 94 14 FB FF 01 00 db 94h, 14h,0FBh,0FFh, 01h, 00h
-435F:14AA 00 00 00 00 0D 00 db 00h, 00h, 00h, 00h, 0Dh, 00h
-435F:14B0 16 00 0D 00 F4 FF db 16h, 00h, 0Dh, 00h,0F4h,0FFh
-435F:14B6 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:14BC 0D 00 16 00 db 0Dh, 00h, 16h, 00h
-435F:14C0 0D db 0Dh
-435F:14C1 0007[00] db 7 dup (0)
-435F:14C8 0C 00 18 00 F8 FF db 0Ch, 00h, 18h, 00h,0F8h,0FFh
-435F:14CE FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:14D4 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:14DA 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:14E0 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:14E6 0E 00 E3 FF 16 00 db 0Eh, 00h,0E3h,0FFh, 16h, 00h
-435F:14EC 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:14F2 0E 00 E3 FF 16 00 db 0Eh, 00h,0E3h,0FFh, 16h, 00h
-435F:14F8 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:14FE 0E 00 E3 FF 16 00 db 0Eh, 00h,0E3h,0FFh, 16h, 00h
-435F:1504 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:150A 0D 00 16 00 0D 00 db 0Dh, 00h, 16h, 00h, 0Dh, 00h
-435F:1510 FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:1516 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:151C 00 00 00 00 F7 FF db 00h, 00h, 00h, 00h,0F7h,0FFh
-435F:1522 0D 00 94 14 FB FF db 0Dh, 00h, 94h, 14h,0FBh,0FFh
-435F:1528 EF FF FF FF D2 55 db 0EFh,0FFh,0FFh,0FFh,0D2h, 55h
-435F:152E 00 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h, 00h
-435F:1534 01 00 17 00 F8 FF db 01h, 00h, 17h, 00h,0F8h,0FFh
-435F:153A 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:1540 02 00 16 00 05 00 db 02h, 00h, 16h, 00h, 05h, 00h
-435F:1546 F4 FF F6 FF 0B 00 db 0F4h,0FFh,0F6h,0FFh, 0Bh, 00h
-435F:154C DE 15 02 00 00 00 db 0DEh, 15h, 02h, 00h, 00h, 00h
-435F:1552 00 00 03 00 17 00 db 00h, 00h, 03h, 00h, 17h, 00h
-435F:1558 F0 FF F2 FF 04 00 db 0F0h,0FFh,0F2h,0FFh, 04h, 00h
-435F:155E 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:1564 04 00 08 00 EE FF db 04h, 00h, 08h, 00h,0EEh,0FFh
-435F:156A F1 FF 04 00 6C 16 db 0F1h,0FFh, 04h, 00h, 6Ch, 16h
-435F:1570 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1576 05 00 F0 FF EF FF db 05h, 00h,0F0h,0FFh,0EFh,0FFh
-435F:157C F1 FF 01 00 14 16 db 0F1h,0FFh, 01h, 00h, 14h, 16h
-435F:1582 F2 FF 00 00 F0 FF db 0F2h,0FFh, 00h, 00h,0F0h,0FFh
-435F:1588 A6 11 05 00 00 00 db 0A6h, 11h, 05h, 00h, 00h, 00h
-435F:158E 00 00 06 00 DF FF db 00h, 00h, 06h, 00h,0DFh,0FFh
-435F:1594 05 00 06 00 00 00 db 05h, 00h, 06h, 00h, 00h, 00h
-435F:159A 00 00 07 00 DF FF db 00h, 00h, 07h, 00h,0DFh,0FFh
-435F:15A0 07 00 07 00 00 00 db 07h, 00h, 07h, 00h, 00h, 00h
-435F:15A6 00 00 08 00 EF FF db 00h, 00h, 08h, 00h,0EFh,0FFh
-435F:15AC 07 00 08 00 00 00 db 07h, 00h, 08h, 00h, 00h, 00h
-435F:15B2 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:15B8 00 00 09 00 00 00 db 00h, 00h, 09h, 00h, 00h, 00h
-435F:15BE 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:15C4 00 00 FF FF F6 55 db 00h, 00h,0FFh,0FFh,0F6h, 55h
-435F:15CA 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:15D0 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:15D6 F7 FF 0B 00 CA 15 db 0F7h,0FFh, 0Bh, 00h,0CAh, 15h
-435F:15DC FB FF 01 00 00 00 db 0FBh,0FFh, 01h, 00h, 00h, 00h
-435F:15E2 00 00 02 00 16 00 db 00h, 00h, 02h, 00h, 16h, 00h
-435F:15E8 05 00 01 00 00 00 db 05h, 00h, 01h, 00h, 00h, 00h
-435F:15EE 00 00 02 00 16 00 db 00h, 00h, 02h, 00h, 16h, 00h
-435F:15F4 05 db 05h
-435F:15F5 0007[00] db 7 dup (0)
-435F:15FC 01 00 17 00 F8 FF db 01h, 00h, 17h, 00h,0F8h,0FFh
-435F:1602 FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:1608 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:160E 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:1614 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:161A 05 00 F0 FF EF FF db 05h, 00h,0F0h,0FFh,0EFh,0FFh
-435F:1620 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1626 05 00 F0 FF EF FF db 05h, 00h,0F0h,0FFh,0EFh,0FFh
-435F:162C F2 FF 00 00 07 00 db 0F2h,0FFh, 00h, 00h, 07h, 00h
-435F:1632 00 00 00 00 08 00 db 00h, 00h, 00h, 00h, 08h, 00h
-435F:1638 EF FF 07 00 08 00 db 0EFh,0FFh, 07h, 00h, 08h, 00h
-435F:163E 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1644 00 00 00 00 09 00 db 00h, 00h, 00h, 00h, 09h, 00h
-435F:164A 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1650 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-435F:1656 F6 55 04 00 00 00 db 0F6h, 55h, 04h, 00h, 00h, 00h
-435F:165C 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:1662 00 00 F7 FF 0B 00 db 00h, 00h,0F7h,0FFh, 0Bh, 00h
-435F:1668 CA 15 FB FF EA FF db 0CAh, 15h,0FBh,0FFh,0EAh,0FFh
-435F:166E 2A 00 03 00 00 00 db 2Ah, 00h, 03h, 00h, 00h, 00h
-435F:1674 00 00 04 00 08 00 db 00h, 00h, 04h, 00h, 08h, 00h
-435F:167A EE FF 03 00 00 00 db 0EEh,0FFh, 03h, 00h, 00h, 00h
-435F:1680 00 00 04 00 08 00 db 00h, 00h, 04h, 00h, 08h, 00h
-435F:1686 EE FF 03 00 00 00 db 0EEh,0FFh, 03h, 00h, 00h, 00h
-435F:168C 00 00 04 00 08 00 db 00h, 00h, 04h, 00h, 08h, 00h
-435F:1692 EE FF F2 FF 00 00 db 0EEh,0FFh,0F2h,0FFh, 00h, 00h
-435F:1698 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:169E 03 00 17 00 F0 FF db 03h, 00h, 17h, 00h,0F0h,0FFh
-435F:16A4 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:16AA 02 00 16 00 05 00 db 02h, 00h, 16h, 00h, 05h, 00h
-435F:16B0 FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:16B6 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:16BC 00 00 00 00 F7 FF db 00h, 00h, 00h, 00h,0F7h,0FFh
-435F:16C2 0B 00 CA 15 FB FF db 0Bh, 00h,0CAh, 15h,0FBh,0FFh
-435F:16C8 EF FF FF FF C0 55 db 0EFh,0FFh,0FFh,0FFh,0C0h, 55h
-435F:16CE 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:16D4 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:16DA F6 FF 0C 00 66 17 db 0F6h,0FFh, 0Ch, 00h, 66h, 17h
-435F:16E0 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:16E6 18 00 01 00 FF FF db 18h, 00h, 01h, 00h,0FFh,0FFh
-435F:16EC F4 FF F1 FF 05 00 db 0F4h,0FFh,0F1h,0FFh, 05h, 00h
-435F:16F2 F8 17 F2 FF 05 00 db 0F8h, 17h,0F2h,0FFh, 05h, 00h
-435F:16F8 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:16FE 09 00 F0 FF 05 00 db 09h, 00h,0F0h,0FFh, 05h, 00h
-435F:1704 F1 FF 02 00 9E 17 db 0F1h,0FFh, 02h, 00h, 9Eh, 17h
-435F:170A 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1710 0A 00 DF FF 05 00 db 0Ah, 00h,0DFh,0FFh, 05h, 00h
-435F:1716 F0 FF 42 12 05 00 db 0F0h,0FFh, 42h, 12h, 05h, 00h
-435F:171C 00 00 00 00 0B 00 db 00h, 00h, 00h, 00h, 0Bh, 00h
-435F:1722 EB FF 05 00 F2 FF db 0EBh,0FFh, 05h, 00h,0F2h,0FFh
-435F:1728 00 00 06 00 00 00 db 00h, 00h, 06h, 00h, 00h, 00h
-435F:172E 00 00 09 00 F2 FF db 00h, 00h, 09h, 00h,0F2h,0FFh
-435F:1734 03 00 07 00 00 00 db 03h, 00h, 07h, 00h, 00h, 00h
-435F:173A 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:1740 00 00 08 00 00 00 db 00h, 00h, 08h, 00h, 00h, 00h
-435F:1746 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:174C 00 00 FF FF F6 55 db 00h, 00h,0FFh,0FFh,0F6h, 55h
-435F:1752 04 00 00 00 00 00 db 04h, 00h, 00h, 00h, 00h, 00h
-435F:1758 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:175E F7 FF 0C 00 52 17 db 0F7h,0FFh, 0Ch, 00h, 52h, 17h
-435F:1764 FB FF 01 00 00 00 db 0FBh,0FFh, 01h, 00h, 00h, 00h
-435F:176A 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:1770 00 00 F4 FF 01 00 db 00h, 00h,0F4h,0FFh, 01h, 00h
-435F:1776 00 00 00 00 18 db 00h, 00h, 00h, 00h, 18h
-435F:177B 000B[00] db 11 dup (0)
-435F:1786 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:178C FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:1792 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1798 00 00 00 00 FB FF db 00h, 00h, 00h, 00h,0FBh,0FFh
-435F:179E 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:17A4 09 00 F0 FF 05 00 db 09h, 00h,0F0h,0FFh, 05h, 00h
-435F:17AA 03 00 00 00 00 00 db 03h, 00h, 00h, 00h, 00h, 00h
-435F:17B0 09 00 F0 FF 05 00 db 09h, 00h,0F0h,0FFh, 05h, 00h
-435F:17B6 02 00 00 00 00 00 db 02h, 00h, 00h, 00h, 00h, 00h
-435F:17BC 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:17C2 F2 FF 00 00 F4 FF db 0F2h,0FFh, 00h, 00h,0F4h,0FFh
-435F:17C8 01 00 00 00 00 00 db 01h, 00h, 00h, 00h, 00h, 00h
-435F:17CE 18 db 18h
-435F:17CF 000B[00] db 11 dup (0)
-435F:17DA 18 00 00 00 00 00 db 18h, 00h, 00h, 00h, 00h, 00h
-435F:17E0 FF FF F6 55 04 00 db 0FFh,0FFh,0F6h, 55h, 04h, 00h
-435F:17E6 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:17EC 00 00 00 00 F7 FF db 00h, 00h, 00h, 00h,0F7h,0FFh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 614
-
-435F:17F2 0C 00 52 17 FB FF db 0Ch, 00h, 52h, 17h,0FBh,0FFh
-435F:17F8 EA FF 2A 00 02 00 db 0EAh,0FFh, 2Ah, 00h, 02h, 00h
-435F:17FE 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1804 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:180A 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1810 00 00 00 00 02 00 db 00h, 00h, 00h, 00h, 02h, 00h
-435F:1816 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:181C 00 00 00 00 01 00 db 00h, 00h, 00h, 00h, 01h, 00h
-435F:1822 00 00 00 00 18 00 db 00h, 00h, 00h, 00h, 18h, 00h
-435F:1828 00 00 00 00 FF FF db 00h, 00h, 00h, 00h,0FFh,0FFh
-435F:182E F6 55 04 00 00 00 db 0F6h, 55h, 04h, 00h, 00h, 00h
-435F:1834 00 00 18 00 00 00 db 00h, 00h, 18h, 00h, 00h, 00h
-435F:183A 00 00 F7 FF 0C 00 db 00h, 00h,0F7h,0FFh, 0Ch, 00h
-435F:1840 52 17 FB FF FA FF db 52h, 17h,0FBh,0FFh,0FAh,0FFh
-435F:1846 F8 FF 44 18 F9 FF db 0F8h,0FFh, 44h, 18h,0F9h,0FFh
-435F:184C F8 FF 4A 18 db 0F8h,0FFh, 4Ah, 18h
-
- seg_d ends
-
-
-
- ;------------------------------------- ega_talk_frame_seg ----
-
- ega_talk_frame_seg segment byte public
- assume cs:ega_talk_frame_seg, ds:ega_talk_frame_seg, ss:stack_seg_k
-
-44E4:0000 00 FF FF 00 00 FF db 00h,0FFh,0FFh, 00h, 00h,0FFh
-44E4:0006 FF 00 00 FF FF 00 db 0FFh, 00h, 00h,0FFh,0FFh, 00h
-44E4:000C 00 data_1404 db 0 ; xref 273F:3042
-44E4:000D 80 80 80 00 00 00 db 80h, 80h, 80h, 00h, 00h, 00h
-44E4:0013 00 00 01 01 00 3F db 00h, 00h, 01h, 01h, 00h, 3Fh
-44E4:0019 80 80 BF FF 00 00 db 80h, 80h,0BFh,0FFh, 00h, 00h
-44E4:001F FF FC 01 01 FC 3F db 0FFh,0FCh, 01h, 01h,0FCh, 3Fh
-44E4:0025 BF 80 9F FF FF 00 db 0BFh, 80h, 9Fh,0FFh,0FFh, 00h
-44E4:002B FF FC F9 01 FC db 0FFh,0FCh,0F9h, 01h,0FCh
-44E4:0030 3F data_1405 db 3Fh ; xref 273F:3033
-44E4:0031 BF 80 80 FF FF 00 db 0BFh, 80h, 80h,0FFh,0FFh, 00h
-44E4:0037 00 FC FD 01 00 00 db 00h,0FCh,0FDh, 01h, 00h, 00h
-44E4:003D 80 80 80 00 00 00 db 80h, 80h, 80h, 00h, 00h, 00h
-44E4:0043 00 00 01 01 00 00 db 00h, 00h, 01h, 01h, 00h, 00h
-44E4:0049 FF FF FF 00 FF FF db 0FFh,0FFh,0FFh, 00h,0FFh,0FFh
-44E4:004F FF 00 FF FF FF 00 db 0FFh, 00h,0FFh,0FFh,0FFh, 00h
-44E4:0055 000B[00] db 11 dup (0)
-
- ega_talk_frame_seg ends
-
-
-
- ;---------------------------------------------------- dialog_segment ----
-
- dialog_segment segment byte public
- assume cs:dialog_segment, ds:dailog_segment, ss:stack_seg_k
-
-44EA:0000 0010[E0] db 16 dup (0E0h)
-44EA:0010 DE DF db 0DEh,0DFh
-44EA:0012 000E[E1] db 14 dup (0E1h)
-44EA:0020 DE DE DF E0 DF db 0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:0025 000C[DF] db 12 dup (0DFh)
-44EA:0031 DE DE DF E0 DF db 0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:0036 000A[E0] db 10 dup (0E0h)
-44EA:0040 DE DF DE DE DF E0 db 0DEh,0DFh,0DEh,0DEh,0DFh,0E0h
-44EA:0046 DF E0 E1 db 0DFh,0E0h,0E1h
-44EA:0049 0007[E1] db 7 dup (0E1h)
-44EA:0050 DE DE DF DE DE DF db 0DEh,0DEh,0DFh,0DEh,0DEh,0DFh
-44EA:0056 E0 DF E0 E1 db 0E0h,0DFh,0E0h,0E1h
-44EA:005A 0007[DF] db 7 dup (0DFh)
-44EA:0061 DE DE DF DE DE DF db 0DEh,0DEh,0DFh,0DEh,0DEh,0DFh
-44EA:0067 E0 DF E0 E1 DF DE db 0E0h,0DFh,0E0h,0E1h,0DFh,0DEh
-44EA:006D DE DE DE E0 DF DE db 0DEh,0DEh,0DEh,0E0h,0DFh,0DEh
-44EA:0073 DE DF DE DE DF E0 db 0DEh,0DFh,0DEh,0DEh,0DFh,0E0h
-44EA:0079 DF E0 E1 DF DE DD db 0DFh,0E0h,0E1h,0DFh,0DEh,0DDh
-44EA:007F DD DC E1 DF DE DE db 0DDh,0DCh,0E1h,0DFh,0DEh,0DEh
-44EA:0085 DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:008B E0 E1 DF DE DD DC db 0E0h,0E1h,0DFh,0DEh,0DDh,0DCh
-44EA:0091 E0 E1 DF DE DE DF db 0E0h,0E1h,0DFh,0DEh,0DEh,0DFh
-44EA:0097 DE DE DF E0 DF E0 db 0DEh,0DEh,0DFh,0E0h,0DFh,0E0h
-44EA:009D E1 DF DE DD DD DC db 0E1h,0DFh,0DEh,0DDh,0DDh,0DCh
-44EA:00A3 DF E0 E1 DF DE DE db 0DFh,0E0h,0E1h,0DFh,0DEh,0DEh
-44EA:00A9 DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:00AF E0 E1 DF DE DD DC db 0E0h,0E1h,0DFh,0DEh,0DDh,0DCh
-44EA:00B5 DF E0 E1 DF DE DE db 0DFh,0E0h,0E1h,0DFh,0DEh,0DEh
-44EA:00BB DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:00C1 E0 E1 DF DE DC E0 db 0E0h,0E1h,0DFh,0DEh,0DCh,0E0h
-44EA:00C7 E0 E0 E1 DF DE DE db 0E0h,0E0h,0E1h,0DFh,0DEh,0DEh
-44EA:00CD DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:00D3 E0 E1 DF E0 E1 E1 db 0E0h,0E1h,0DFh,0E0h,0E1h,0E1h
-44EA:00D9 E1 E1 E1 DF DE DE db 0E1h,0E1h,0E1h,0DFh,0DEh,0DEh
-44EA:00DF DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:00E5 E0 E0 db 0E0h,0E0h
-44EA:00E7 0008[DF] db 8 dup (0DFh)
-44EA:00EF DE DE DF DE DE DF db 0DEh,0DEh,0DFh,0DEh,0DEh,0DFh
-44EA:00F5 E0 DF DF db 0E0h,0DFh,0DFh
-44EA:00F8 000B[DE] db 11 dup (0DEh)
-44EA:0103 DF DE DE DF E0 DF db 0DFh,0DEh,0DEh,0DFh,0E0h,0DFh
-44EA:0109 000B[DD] db 11 dup (0DDh)
-44EA:0114 DE DF DE DE DF E0 db 0DEh,0DFh,0DEh,0DEh,0DFh,0E0h
-44EA:011A DF db 0DFh
-44EA:011B 000D[DF] db 13 dup (0DFh)
-44EA:0128 DE DE DF db 0DEh,0DEh,0DFh
-44EA:012B 0011[DE] db 17 dup (0DEh)
-44EA:013C 0011[DD] db 17 dup (0DDh)
-44EA:014D DE 00 00 db 0DEh, 00h, 00h
-
- dialog_segment ends
-
-
-
- ;--------------------------------------- vga_talk_frame_seg ----
-
- vga_talk_frame_seg segment byte public
- assume cs:talk_frame_seg, ds:talk_frame_seg, ss:stack_seg_k
-
-44FF:0000 E0 E0 E0 E0 E0 DF db 0E0h,0E0h,0E0h,0E0h,0E0h,0DFh
-44FF:0006 DF E1 E1 E1 E1 DE db 0DFh,0E1h,0E1h,0E1h,0E1h,0DEh
-44FF:000C DF E0 DD DF E0 DE db 0DFh,0E0h,0DDh,0DFh,0E0h,0DEh
-44FF:0012 DF E0 DD DC E0 DF db 0DFh,0E0h,0DDh,0DCh,0E0h,0DFh
-44FF:0018 DE DF E0 DF E0 DF db 0DEh,0DFh,0E0h,0DFh,0E0h,0DFh
-44FF:001E DE DF E0 DF DF DF db 0DEh,0DFh,0E0h,0DFh,0DFh,0DFh
-44FF:0024 DE DE DD DD DD DD db 0DEh,0DEh,0DDh,0DDh,0DDh,0DDh
-44FF:002A DD 00 00 00 00 00 db 0DDh, 00h, 00h, 00h, 00h, 00h
-
- vga_talk_frame_seg ends
-
-
-
- ;------------------------------------------------- musical_note_seg -----
- ; This segment contains the raw data for the display of a 14x14 pixel
- ; music note
-
- musical_note_seg segment byte public
-
-
-4502:0000 0008[00] db 8 dup (0)
-4502:0008 FC FA F9 F9 FC db 0FCh,0FAh,0F9h,0F9h,0FCh
-4502:000D 0007[00] db 7 dup (0)
-4502:0014 FC FA F9 F9 FA FA db 0FCh,0FAh,0F9h,0F9h,0FAh,0FAh
-4502:001A FC 00 00 00 00 00 db 0FCh, 00h, 00h, 00h, 00h, 00h
-4502:0020 FC FA F9 F9 FA FA db 0FCh,0FAh,0F9h,0F9h,0FAh,0FAh
-4502:0026 FA FA FC 00 00 00 db 0FAh,0FAh,0FCh, 00h, 00h, 00h
-4502:002C 00 FA F9 F9 FA FA db 00h,0FAh,0F9h,0F9h,0FAh,0FAh
-4502:0032 FA FB FC FA FC 00 db 0FAh,0FBh,0FCh,0FAh,0FCh, 00h
-4502:0038 00 00 00 F9 FA FA db 00h, 00h, 00h,0F9h,0FAh,0FAh
-4502:003E FA FB FC FD FB FA db 0FAh,0FBh,0FCh,0FDh,0FBh,0FAh
-4502:0044 FC 00 00 00 00 F9 db 0FCh, 00h, 00h, 00h, 00h,0F9h
-4502:004A FA FB FC FD 00 00 db 0FAh,0FBh,0FCh,0FDh, 00h, 00h
-4502:0050 FA FA FC 00 00 00 db 0FAh,0FAh,0FCh, 00h, 00h, 00h
-4502:0056 00 F9 FA FC 00 00 db 00h,0F9h,0FAh,0FCh, 00h, 00h
-4502:005C 00 00 F9 FA FC 00 db 00h, 00h,0F9h,0FAh,0FCh, 00h
-4502:0062 00 00 00 F9 FA FC db 00h, 00h, 00h,0F9h,0FAh,0FCh
-4502:0068 00 00 00 00 F9 FA db 00h, 00h, 00h, 00h,0F9h,0FAh
-4502:006E FC 00 00 00 00 F9 db 0FCh, 00h, 00h, 00h, 00h,0F9h
-4502:0074 FA FC 00 FB F9 F9 db 0FAh,0FCh, 00h,0FBh,0F9h,0F9h
-4502:007A FA FA FC 00 00 00 db 0FAh,0FAh,0FCh, 00h, 00h, 00h
-4502:0080 00 F9 FA FC 00 F9 db 00h,0F9h,0FAh,0FCh, 00h,0F9h
-4502:0086 F8 F8 F9 FA FD 00 db 0F8h,0F8h,0F9h,0FAh,0FDh, 00h
-4502:008C 00 00 00 F9 FA FC db 00h, 00h, 00h,0F9h,0FAh,0FCh
-4502:0092 00 FB F9 F9 FA FC db 00h,0FBh,0F9h,0F9h,0FAh,0FCh
-4502:0098 00 00 FB F9 F9 FA db 00h, 00h,0FBh,0F9h,0F9h,0FAh
-4502:009E FA FC db 0FAh,0FCh
-4502:00A0 0008[00] db 8 dup (0)
-4502:00A8 F9 F8 F8 F9 FA FD db 0F9h,0F8h,0F8h,0F9h,0FAh,0FDh
-4502:00AE 0008[00] db 8 dup (0)
-4502:00B6 FB F9 F9 FA FC db 0FBh,0F9h,0F9h,0FAh,0FCh
-4502:00BB 0015[00] db 21 dup (0)
-
- musical_note_seg ends
-
-
-
- ;---------------------------------------------- scripts_seg ----
-
- scripts_seg segment byte public
- assume cs:scripts_seg, ds:scripts_seg, ss:stack_seg_k
-
-450F:0000 23 00 00 21 08 00 db 23h, 00h, 00h, 21h, 08h, 00h
-450F:0006 28 23 01 00 21 08 db 28h, 23h, 01h, 00h, 21h, 08h
-450F:000C 00 28 23 18 00 21 db 00h, 28h, 23h, 18h, 00h, 21h
-450F:0012 08 00 1F 24 00 23 db 08h, 00h, 1Fh, 24h, 00h, 23h
-450F:0018 01 00 0A 2B 0C 00 db 01h, 00h, 0Ah, 2Bh, 0Ch, 00h
-450F:001E 23 17 00 21 08 00 db 23h, 17h, 00h, 21h, 08h, 00h
-450F:0024 23 00 00 21 24 00 db 23h, 00h, 00h, 21h, 24h, 00h
-450F:002A 1F 24 00 23 02 00 db 1Fh, 24h, 00h, 23h, 02h, 00h
-450F:0030 0A 2B 06 00 23 28 db 0Ah, 2Bh, 06h, 00h, 23h, 28h
-450F:0036 00 21 08 00 28 23 db 00h, 21h, 08h, 00h, 28h, 23h
-450F:003C 11 04 27 00 00 23 db 11h, 04h, 27h, 00h, 00h, 23h
-450F:0042 13 00 23 18 04 27 db 13h, 00h, 23h, 18h, 04h, 27h
-450F:0048 01 00 23 13 00 27 db 01h, 00h, 23h, 13h, 00h, 27h
-450F:004E 02 00 28 1F 7A 00 db 02h, 00h, 28h, 1Fh, 7Ah, 00h
-450F:0054 23 00 00 0A 2B 27 db 23h, 00h, 00h, 0Ah, 2Bh, 27h
-450F:005A 00 23 01 00 21 7A db 00h, 23h, 01h, 00h, 21h, 7Ah
-450F:0060 00 23 00 00 21 26 db 00h, 23h, 00h, 00h, 21h, 26h
-450F:0066 00 23 08 00 27 03 db 00h, 23h, 08h, 00h, 27h, 03h
-450F:006C 00 27 04 00 23 02 db 00h, 27h, 04h, 00h, 23h, 02h
-450F:0072 00 27 05 00 23 F2 db 00h, 27h, 05h, 00h, 23h,0F2h
-450F:0078 03 27 00 00 23 37 db 03h, 27h, 00h, 00h, 23h, 37h
-450F:007E 04 27 00 00 28 1F db 04h, 27h, 00h, 00h, 28h, 1Fh
-450F:0084 7C 00 23 00 00 0A db 7Ch, 00h, 23h, 00h, 00h, 0Ah
-450F:008A 2B 8E 00 23 01 00 db 2Bh, 8Eh, 00h, 23h, 01h, 00h
-450F:0090 21 7C 00 23 EA 03 db 21h, 7Ch, 00h, 23h,0EAh, 03h
-450F:0096 27 06 00 23 02 00 db 27h, 06h, 00h, 23h, 02h, 00h
-450F:009C 27 03 00 27 04 00 db 27h, 03h, 00h, 27h, 04h, 00h
-450F:00A2 27 07 00 25 22 01 db 27h, 07h, 00h, 25h, 22h, 01h
-450F:00A8 23 00 00 23 14 00 db 23h, 00h, 00h, 23h, 14h, 00h
-450F:00AE 23 5A 2B 27 08 00 db 23h, 5Ah, 2Bh, 27h, 08h, 00h
-450F:00B4 23 00 00 23 13 00 db 23h, 00h, 00h, 23h, 13h, 00h
-450F:00BA 23 C2 2B 27 08 00 db 23h,0C2h, 2Bh, 27h, 08h, 00h
-450F:00C0 23 19 00 27 09 00 db 23h, 19h, 00h, 27h, 09h, 00h
-450F:00C6 23 01 00 21 26 00 db 23h, 01h, 00h, 21h, 26h, 00h
-450F:00CC 23 01 00 21 56 00 db 23h, 01h, 00h, 21h, 56h, 00h
-450F:00D2 23 01 00 21 58 00 db 23h, 01h, 00h, 21h, 58h, 00h
-450F:00D8 23 01 00 21 6E 00 db 23h, 01h, 00h, 21h, 6Eh, 00h
-450F:00DE 23 02 00 21 32 00 db 23h, 02h, 00h, 21h, 32h, 00h
-450F:00E4 23 2A 00 21 70 00 db 23h, 2Ah, 00h, 21h, 70h, 00h
-450F:00EA 23 E8 03 23 10 27 db 23h,0E8h, 03h, 23h, 10h, 27h
-450F:00F0 27 0A 00 1F 0A 00 db 27h, 0Ah, 00h, 1Fh, 0Ah, 00h
-450F:00F6 23 01 00 0A 2B 1E db 23h, 01h, 00h, 0Ah, 2Bh, 1Eh
-450F:00FC 00 23 61 01 23 10 db 00h, 23h, 61h, 01h, 23h, 10h
-450F:0102 27 27 0B 00 23 60 db 27h, 27h, 0Bh, 00h, 23h, 60h
-450F:0108 01 23 10 27 27 0C db 01h, 23h, 10h, 27h, 27h, 0Ch
-450F:010E 00 23 02 00 21 24 db 00h, 23h, 02h, 00h, 21h, 24h
-450F:0114 00 23 01 00 21 8E db 00h, 23h, 01h, 00h, 21h, 8Eh
-450F:011A 00 23 00 00 27 0D db 00h, 23h, 00h, 00h, 27h, 0Dh
-450F:0120 00 28 23 EB 03 27 db 00h, 28h, 23h,0EBh, 03h, 27h
-450F:0126 00 00 23 EC 03 27 db 00h, 00h, 23h,0ECh, 03h, 27h
-450F:012C 00 00 23 ED 03 27 db 00h, 00h, 23h,0EDh, 03h, 27h
-450F:0132 00 00 23 EE 03 27 db 00h, 00h, 23h,0EEh, 03h, 27h
-450F:0138 00 00 23 EF 03 27 db 00h, 00h, 23h,0EFh, 03h, 27h
-450F:013E 00 00 23 F0 03 27 db 00h, 00h, 23h,0F0h, 03h, 27h
-450F:0144 00 00 23 F1 03 27 db 00h, 00h, 23h,0F1h, 03h, 27h
-450F:014A 00 00 23 36 04 27 db 00h, 00h, 23h, 36h, 04h, 27h
-450F:0150 00 00 23 15 27 27 db 00h, 00h, 23h, 15h, 27h, 27h
-450F:0156 00 00 23 16 27 27 db 00h, 00h, 23h, 16h, 27h, 27h
-450F:015C 00 00 23 17 27 27 db 00h, 00h, 23h, 17h, 27h, 27h
-450F:0162 00 00 23 18 27 27 db 00h, 00h, 23h, 18h, 27h, 27h
-450F:0168 00 00 23 19 27 27 db 00h, 00h, 23h, 19h, 27h, 27h
-450F:016E 00 00 23 1A 27 27 db 00h, 00h, 23h, 1Ah, 27h, 27h
-450F:0174 00 00 23 20 04 27 db 00h, 00h, 23h, 20h, 04h, 27h
-450F:017A 00 00 23 29 04 27 db 00h, 00h, 23h, 29h, 04h, 27h
-450F:0180 00 00 23 1E 27 27 db 00h, 00h, 23h, 1Eh, 27h, 27h
-450F:0186 00 00 23 1F 27 27 db 00h, 00h, 23h, 1Fh, 27h, 27h
-450F:018C 00 00 23 20 27 27 db 00h, 00h, 23h, 20h, 27h, 27h
-450F:0192 00 00 23 21 27 27 db 00h, 00h, 23h, 21h, 27h, 27h
-450F:0198 00 00 23 22 27 27 db 00h, 00h, 23h, 22h, 27h, 27h
-450F:019E 00 00 23 25 27 27 db 00h, 00h, 23h, 25h, 27h, 27h
-450F:01A4 00 00 23 26 27 27 db 00h, 00h, 23h, 26h, 27h, 27h
-450F:01AA 00 00 28 27 0E 00 db 00h, 00h, 28h, 27h, 0Eh, 00h
-450F:01B0 28 1F 8A 00 23 00 db 28h, 1Fh, 8Ah, 00h, 23h, 00h
-450F:01B6 00 0A 2B 1B 00 23 db 00h, 0Ah, 2Bh, 1Bh, 00h, 23h
-450F:01BC 03 00 27 05 00 27 db 03h, 00h, 27h, 05h, 00h, 27h
-450F:01C2 0F 00 23 01 00 21 db 0Fh, 00h, 23h, 01h, 00h, 21h
-450F:01C8 8A 00 23 01 00 23 db 8Ah, 00h, 23h, 01h, 00h, 23h
-450F:01CE 01 00 23 D7 01 27 db 01h, 00h, 23h,0D7h, 01h, 27h
-450F:01D4 08 00 28 23 9C 0C db 08h, 00h, 28h, 23h, 9Ch, 0Ch
-450F:01DA 27 10 00 28 1F 8C db 27h, 10h, 00h, 28h, 1Fh, 8Ch
-450F:01E0 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:01E6 15 00 27 11 00 23 db 15h, 00h, 27h, 11h, 00h, 23h
-450F:01EC 01 00 21 8C 00 23 db 01h, 00h, 21h, 8Ch, 00h, 23h
-450F:01F2 01 00 23 01 00 23 db 01h, 00h, 23h, 01h, 00h, 23h
-450F:01F8 FE 01 27 08 00 28 db 0FEh, 01h, 27h, 08h, 00h, 28h
-450F:01FE 23 16 10 27 10 00 db 23h, 16h, 10h, 27h, 10h, 00h
-450F:0204 28 25 22 01 23 E9 db 28h, 25h, 22h, 01h, 23h,0E9h
-450F:020A 03 27 00 00 1F 4A db 03h, 27h, 00h, 00h, 1Fh, 4Ah
-450F:0210 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:0216 06 00 23 02 00 21 db 06h, 00h, 23h, 02h, 00h, 21h
-450F:021C 4A 00 28 1F 02 00 db 4Ah, 00h, 28h, 1Fh, 02h, 00h
-450F:0222 23 E8 03 0C 2B 09 db 23h,0E8h, 03h, 0Ch, 2Bh, 09h
-450F:0228 00 23 2A 00 21 08 db 00h, 23h, 2Ah, 00h, 21h, 08h
-450F:022E 00 2D 09 00 23 04 db 00h, 2Dh, 09h, 00h, 23h, 04h
-450F:0234 00 21 0E 00 27 12 db 00h, 21h, 0Eh, 00h, 27h, 12h
-450F:023A 00 28 1F 02 00 23 db 00h, 28h, 1Fh, 02h, 00h, 23h
-450F:0240 E8 03 0C 2B 09 00 db 0E8h, 03h, 0Ch, 2Bh, 09h, 00h
-450F:0246 23 2A 00 21 08 00 db 23h, 2Ah, 00h, 21h, 08h, 00h
-450F:024C 2D 09 00 23 23 00 db 2Dh, 09h, 00h, 23h, 23h, 00h
-450F:0252 21 0E 00 27 12 00 db 21h, 0Eh, 00h, 27h, 12h, 00h
-450F:0258 28 1F 12 00 23 01 db 28h, 1Fh, 12h, 00h, 23h, 01h
-450F:025E 00 0A 2B 22 00 1F db 00h, 0Ah, 2Bh, 22h, 00h, 1Fh
-450F:0264 02 00 23 E9 03 0C db 02h, 00h, 23h,0E9h, 03h, 0Ch
-450F:026A 2B 09 00 23 06 00 db 2Bh, 09h, 00h, 23h, 06h, 00h
-450F:0270 21 08 00 2D 0F 00 db 21h, 08h, 00h, 2Dh, 0Fh, 00h
-450F:0276 23 73 01 23 E9 03 db 23h, 73h, 01h, 23h,0E9h, 03h
-450F:027C 27 13 00 23 01 00 db 27h, 13h, 00h, 23h, 01h, 00h
-450F:0282 21 08 00 28 1F 02 db 21h, 08h, 00h, 28h, 1Fh, 02h
-450F:0288 00 23 EA 03 0A 2B db 00h, 23h,0EAh, 03h, 0Ah, 2Bh
-450F:028E 06 00 23 00 00 21 db 06h, 00h, 23h, 00h, 00h, 21h
-450F:0294 12 00 1F 12 00 23 db 12h, 00h, 1Fh, 12h, 00h, 23h
-450F:029A 01 00 0A 2B 09 00 db 01h, 00h, 0Ah, 2Bh, 09h, 00h
-450F:02A0 23 06 00 21 08 00 db 23h, 06h, 00h, 21h, 08h, 00h
-450F:02A6 2D 0D 00 1F 02 00 db 2Dh, 0Dh, 00h, 1Fh, 02h, 00h
-450F:02AC 23 E8 03 0A 2B 03 db 23h,0E8h, 03h, 0Ah, 2Bh, 03h
-450F:02B2 00 27 14 00 28 1F db 00h, 27h, 14h, 00h, 28h, 1Fh
-450F:02B8 02 00 23 EA 03 0A db 02h, 00h, 23h,0EAh, 03h, 0Ah
-450F:02BE 2B 06 00 23 01 00 db 2Bh, 06h, 00h, 23h, 01h, 00h
-450F:02C4 21 12 00 23 15 00 db 21h, 12h, 00h, 23h, 15h, 00h
-450F:02CA 27 15 00 28 23 11 db 27h, 15h, 00h, 28h, 23h, 11h
-450F:02D0 27 27 16 00 1F 0A db 27h, 27h, 16h, 00h, 1Fh, 0Ah
-450F:02D6 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:02DC 09 00 23 88 00 27 db 09h, 00h, 23h, 88h, 00h, 27h
-450F:02E2 10 00 2D 10 00 1F db 10h, 00h, 2Dh, 10h, 00h, 1Fh
-450F:02E8 02 00 23 E8 03 0A db 02h, 00h, 23h,0E8h, 03h, 0Ah
-450F:02EE 2B 06 00 23 87 00 db 2Bh, 06h, 00h, 23h, 87h, 00h
-450F:02F4 27 10 00 28 23 11 db 27h, 10h, 00h, 28h, 23h, 11h
-450F:02FA 27 27 16 00 1F 0A db 27h, 27h, 16h, 00h, 1Fh, 0Ah
-450F:0300 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:0306 13 00 1F 02 00 23 db 13h, 00h, 1Fh, 02h, 00h, 23h
-450F:030C E8 03 0A 2B 06 00 db 0E8h, 03h, 0Ah, 2Bh, 06h, 00h
-450F:0312 23 88 00 27 10 00 db 23h, 88h, 00h, 27h, 10h, 00h
-450F:0318 2D 09 00 25 8B 03 db 2Dh, 09h, 00h, 25h, 8Bh, 03h
-450F:031E 23 01 00 21 12 00 db 23h, 01h, 00h, 21h, 12h, 00h
-450F:0324 28 23 11 27 27 16 db 28h, 23h, 11h, 27h, 27h, 16h
-450F:032A 00 1F 0A 00 23 00 db 00h, 1Fh, 0Ah, 00h, 23h, 00h
-450F:0330 00 0A 2B 13 00 1F db 00h, 0Ah, 2Bh, 13h, 00h, 1Fh
-450F:0336 02 00 23 E8 03 0A db 02h, 00h, 23h,0E8h, 03h, 0Ah
-450F:033C 2B 06 00 23 88 00 db 2Bh, 06h, 00h, 23h, 88h, 00h
-450F:0342 27 10 00 2D 42 00 db 27h, 10h, 00h, 2Dh, 42h, 00h
-450F:0348 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:034E 0A 2B 22 00 1F 12 db 0Ah, 2Bh, 22h, 00h, 1Fh, 12h
-450F:0354 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:035A 09 00 23 6A 01 27 db 09h, 00h, 23h, 6Ah, 01h, 27h
-450F:0360 10 00 2D 0C 00 23 db 10h, 00h, 2Dh, 0Ch, 00h, 23h
-450F:0366 19 00 27 0D 00 23 db 19h, 00h, 27h, 0Dh, 00h, 23h
-450F:036C 69 01 27 10 00 2D db 69h, 01h, 27h, 10h, 00h, 2Dh
-450F:0372 10 00 1F 12 00 23 db 10h, 00h, 1Fh, 12h, 00h, 23h
-450F:0378 01 00 0A 2B 06 00 db 01h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:037E 23 19 00 27 0D 00 db 23h, 19h, 00h, 27h, 0Dh, 00h
-450F:0384 23 00 00 21 12 00 db 23h, 00h, 00h, 21h, 12h, 00h
-450F:038A 28 1F 02 00 23 E8 db 28h, 1Fh, 02h, 00h, 23h,0E8h
-450F:0390 03 0A 2B 4E 00 27 db 03h, 0Ah, 2Bh, 4Eh, 00h, 27h
-450F:0396 17 00 1F 0A 00 23 db 17h, 00h, 1Fh, 0Ah, 00h, 23h
-450F:039C 00 00 0A 2B 22 00 db 00h, 00h, 0Ah, 2Bh, 22h, 00h
-450F:03A2 1F 12 00 23 00 00 db 1Fh, 12h, 00h, 23h, 00h, 00h
-450F:03A8 0A 2B 0F 00 23 19 db 0Ah, 2Bh, 0Fh, 00h, 23h, 19h
-450F:03AE 00 27 0D 00 23 D2 db 00h, 27h, 0Dh, 00h, 23h,0D2h
-450F:03B4 00 27 10 00 2D 06 db 00h, 27h, 10h, 00h, 2Dh, 06h
-450F:03BA 00 23 68 01 27 10 db 00h, 23h, 68h, 01h, 27h, 10h
-450F:03C0 00 2D 1F 00 1F 12 db 00h, 2Dh, 1Fh, 00h, 1Fh, 12h
-450F:03C6 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:03CC 0F 00 23 19 00 27 db 0Fh, 00h, 23h, 19h, 00h, 27h
-450F:03D2 0D 00 23 43 01 27 db 0Dh, 00h, 23h, 43h, 01h, 27h
-450F:03D8 10 00 2D 06 00 23 db 10h, 00h, 2Dh, 06h, 00h, 23h
-450F:03DE 68 01 27 10 00 28 db 68h, 01h, 27h, 10h, 00h, 28h
-450F:03E4 1F 14 00 23 00 00 db 1Fh, 14h, 00h, 23h, 00h, 00h
-450F:03EA 0A 2B 24 00 23 0F db 0Ah, 2Bh, 24h, 00h, 23h, 0Fh
-450F:03F0 04 27 06 00 23 38 db 04h, 27h, 06h, 00h, 23h, 38h
-450F:03F6 75 27 06 00 23 0E db 75h, 27h, 06h, 00h, 23h, 0Eh
-450F:03FC 04 27 00 00 23 01 db 04h, 27h, 00h, 00h, 23h, 01h
-450F:0402 00 21 14 00 23 A8 db 00h, 21h, 14h, 00h, 23h,0A8h
-450F:0408 00 27 10 00 23 01 db 00h, 27h, 10h, 00h, 23h, 01h
-450F:040E 00 21 08 00 28 1F db 00h, 21h, 08h, 00h, 28h, 1Fh
-450F:0414 02 00 23 E8 03 0A db 02h, 00h, 23h,0E8h, 03h, 0Ah
-450F:041A 2B 09 00 23 01 10 db 2Bh, 09h, 00h, 23h, 01h, 10h
-450F:0420 27 10 00 2D 09 00 db 27h, 10h, 00h, 2Dh, 09h, 00h
-450F:0426 23 1B 10 1F 02 00 db 23h, 1Bh, 10h, 1Fh, 02h, 00h
-450F:042C 27 13 00 28 1F 02 db 27h, 13h, 00h, 28h, 1Fh, 02h
-450F:0432 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:0438 0F 00 23 F7 0F 27 db 0Fh, 00h, 23h,0F7h, 0Fh, 27h
-450F:043E 10 00 23 01 00 21 db 10h, 00h, 23h, 01h, 00h, 21h
-450F:0444 08 00 2D 06 00 23 db 08h, 00h, 2Dh, 06h, 00h, 23h
-450F:044A 11 00 21 08 00 28 db 11h, 00h, 21h, 08h, 00h, 28h
-450F:0450 23 11 00 21 08 00 db 23h, 11h, 00h, 21h, 08h, 00h
-450F:0456 1F 04 00 23 36 27 db 1Fh, 04h, 00h, 23h, 36h, 27h
-450F:045C 0A 2B 3D 00 1F 02 db 0Ah, 2Bh, 3Dh, 00h, 1Fh, 02h
-450F:0462 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:0468 06 00 23 E5 0F 27 db 06h, 00h, 23h,0E5h, 0Fh, 27h
-450F:046E 10 00 23 4D 75 27 db 10h, 00h, 23h, 4Dh, 75h, 27h
-450F:0474 06 00 23 E4 0F 23 db 06h, 00h, 23h,0E4h, 0Fh, 23h
-450F:047A 4E 75 27 0B 00 23 db 4Eh, 75h, 27h, 0Bh, 00h, 23h
-450F:0480 39 04 27 00 00 23 db 39h, 04h, 27h, 00h, 00h, 23h
-450F:0486 01 00 21 7E 00 23 db 01h, 00h, 21h, 7Eh, 00h, 23h
-450F:048C 00 00 21 08 00 23 db 00h, 00h, 21h, 08h, 00h, 23h
-450F:0492 00 00 23 5F 00 23 db 00h, 00h, 23h, 5Fh, 00h, 23h
-450F:0498 9E 04 27 08 00 28 db 9Eh, 04h, 27h, 08h, 00h, 28h
-450F:049E 1F 80 00 23 01 00 db 1Fh, 80h, 00h, 23h, 01h, 00h
-450F:04A4 0A 2B 0C 00 23 04 db 0Ah, 2Bh, 0Ch, 00h, 23h, 04h
-450F:04AA 00 23 38 04 27 01 db 00h, 23h, 38h, 04h, 27h, 01h
-450F:04B0 00 2D 09 00 23 05 db 00h, 2Dh, 09h, 00h, 23h, 05h
-450F:04B6 00 23 39 04 27 01 db 00h, 23h, 39h, 04h, 27h, 01h
-450F:04BC 00 23 02 00 21 7E db 00h, 23h, 02h, 00h, 21h, 7Eh
-450F:04C2 00 23 FB 0F 23 4E db 00h, 23h,0FBh, 0Fh, 23h, 4Eh
-450F:04C8 75 27 0B 00 23 2D db 75h, 27h, 0Bh, 00h, 23h, 2Dh
-450F:04CE 00 27 15 00 28 1F db 00h, 27h, 15h, 00h, 28h, 1Fh
-450F:04D4 9C 00 23 00 00 0A db 9Ch, 00h, 23h, 00h, 00h, 0Ah
-450F:04DA 2B 0C 00 23 01 00 db 2Bh, 0Ch, 00h, 23h, 01h, 00h
-450F:04E0 23 3C 00 23 EA 04 db 23h, 3Ch, 00h, 23h,0EAh, 04h
-450F:04E6 27 08 00 28 23 0E db 27h, 08h, 00h, 28h, 23h, 0Eh
-450F:04EC 00 23 53 04 27 01 db 00h, 23h, 53h, 04h, 27h, 01h
-450F:04F2 00 23 01 00 21 9C db 00h, 23h, 01h, 00h, 21h, 9Ch
-450F:04F8 00 28 23 D6 00 23 db 00h, 28h, 23h,0D6h, 00h, 23h
-450F:04FE E8 03 27 13 00 28 db 0E8h, 03h, 27h, 13h, 00h, 28h
-450F:0504 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:050A 0A 2B 0F 00 23 A9 db 0Ah, 2Bh, 0Fh, 00h, 23h,0A9h
-450F:0510 00 27 10 00 23 01 db 00h, 27h, 10h, 00h, 23h, 01h
-450F:0516 00 21 08 00 2D 03 db 00h, 21h, 08h, 00h, 2Dh, 03h
-450F:051C 00 27 18 00 28 25 db 00h, 27h, 18h, 00h, 28h, 25h
-450F:0522 1F 02 1F 0E 00 23 db 1Fh, 02h, 1Fh, 0Eh, 00h, 23h
-450F:0528 00 00 0C 2B 06 00 db 00h, 00h, 0Ch, 2Bh, 06h, 00h
-450F:052E 23 01 00 21 0E 00 db 23h, 01h, 00h, 21h, 0Eh, 00h
-450F:0534 1F 02 00 23 E9 03 db 1Fh, 02h, 00h, 23h,0E9h, 03h
-450F:053A 0A 2B 16 00 27 17 db 0Ah, 2Bh, 16h, 00h, 27h, 17h
-450F:0540 00 1F 0A 00 23 00 db 00h, 1Fh, 0Ah, 00h, 23h, 00h
-450F:0546 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:054C 9D 00 23 E9 03 27 db 9Dh, 00h, 23h,0E9h, 03h, 27h
-450F:0552 13 00 28 1F 02 00 db 13h, 00h, 28h, 1Fh, 02h, 00h
-450F:0558 23 E9 03 0A 2B 18 db 23h,0E9h, 03h, 0Ah, 2Bh, 18h
-450F:055E 00 23 08 00 23 F3 db 00h, 23h, 08h, 00h, 23h,0F3h
-450F:0564 00 23 0C 01 27 19 db 00h, 23h, 0Ch, 01h, 27h, 19h
-450F:056A 00 27 1A 00 23 14 db 00h, 27h, 1Ah, 00h, 23h, 14h
-450F:0570 27 27 06 00 2D 18 db 27h, 27h, 06h, 00h, 2Dh, 18h
-450F:0576 00 23 00 00 27 05 db 00h, 23h, 00h, 00h, 27h, 05h
-450F:057C 00 23 07 00 23 80 db 00h, 23h, 07h, 00h, 23h, 80h
-450F:0582 00 23 88 00 27 19 db 00h, 23h, 88h, 00h, 27h, 19h
-450F:0588 00 23 01 00 21 98 db 00h, 23h, 01h, 00h, 21h, 98h
-450F:058E 00 28 1F 84 00 23 db 00h, 28h, 1Fh, 84h, 00h, 23h
-450F:0594 00 00 0A 2B 17 00 db 00h, 00h, 0Ah, 2Bh, 17h, 00h
-450F:059A 23 2F 00 23 00 20 db 23h, 2Fh, 00h, 23h, 00h, 20h
-450F:05A0 02 23 9A 01 23 40 db 02h, 23h, 9Ah, 01h, 23h, 40h
-450F:05A6 01 23 08 00 04 27 db 01h, 23h, 08h, 00h, 04h, 27h
-450F:05AC 19 00 2D 14 00 23 db 19h, 00h, 2Dh, 14h, 00h, 23h
-450F:05B2 31 00 23 00 20 02 db 31h, 00h, 23h, 00h, 20h, 02h
-450F:05B8 23 9A 01 23 40 01 db 23h, 9Ah, 01h, 23h, 40h, 01h
-450F:05BE 23 08 00 04 27 19 db 23h, 08h, 00h, 04h, 27h, 19h
-450F:05C4 00 28 1F 02 00 23 db 00h, 28h, 1Fh, 02h, 00h, 23h
-450F:05CA E8 03 0A 1F 1C 00 db 0E8h, 03h, 0Ah, 1Fh, 1Ch, 00h
-450F:05D0 23 00 00 0A 1A 2B db 23h, 00h, 00h, 0Ah, 1Ah, 2Bh
-450F:05D6 19 00 1F 20 00 23 db 19h, 00h, 1Fh, 20h, 00h, 23h
-450F:05DC 00 00 0A 2B 0F 00 db 00h, 00h, 0Ah, 2Bh, 0Fh, 00h
-450F:05E2 23 01 00 21 20 00 db 23h, 01h, 00h, 21h, 20h, 00h
-450F:05E8 23 98 00 23 11 04 db 23h, 98h, 00h, 23h, 11h, 04h
-450F:05EE 27 13 00 28 1F 02 db 27h, 13h, 00h, 28h, 1Fh, 02h
-450F:05F4 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:05FA 53 00 1F 84 00 23 db 53h, 00h, 1Fh, 84h, 00h, 23h
-450F:0600 00 00 0A 2B 40 00 db 00h, 00h, 0Ah, 2Bh, 40h, 00h
-450F:0606 1F 82 00 23 01 00 db 1Fh, 82h, 00h, 23h, 01h, 00h
-450F:060C 0A 2B 2D 00 23 06 db 0Ah, 2Bh, 2Dh, 00h, 23h, 06h
-450F:0612 00 23 E8 03 27 1B db 00h, 23h,0E8h, 03h, 27h, 1Bh
-450F:0618 00 23 07 00 23 3A db 00h, 23h, 07h, 00h, 23h, 3Ah
-450F:061E 04 27 01 00 23 07 db 04h, 27h, 01h, 00h, 23h, 07h
-450F:0624 00 23 3B 04 27 01 db 00h, 23h, 3Bh, 04h, 27h, 01h
-450F:062A 00 23 07 00 23 3C db 00h, 23h, 07h, 00h, 23h, 3Ch
-450F:0630 04 27 01 00 23 01 db 04h, 27h, 01h, 00h, 23h, 01h
-450F:0636 00 21 84 00 2D 06 db 00h, 21h, 84h, 00h, 2Dh, 06h
-450F:063C 00 23 EC 0F 27 10 db 00h, 23h,0ECh, 0Fh, 27h, 10h
-450F:0642 00 2D 06 00 23 EC db 00h, 2Dh, 06h, 00h, 23h,0ECh
-450F:0648 0F 27 10 00 2D 09 db 0Fh, 27h, 10h, 00h, 2Dh, 09h
-450F:064E 00 23 EE 0F 1F 02 db 00h, 23h,0EEh, 0Fh, 1Fh, 02h
-450F:0654 00 27 13 00 28 23 db 00h, 27h, 13h, 00h, 28h, 23h
-450F:065A 11 00 21 08 00 1F db 11h, 00h, 21h, 08h, 00h, 1Fh
-450F:0660 04 00 23 35 27 0A db 04h, 00h, 23h, 35h, 27h, 0Ah
-450F:0666 2B 25 00 23 01 00 db 2Bh, 25h, 00h, 23h, 01h, 00h
-450F:066C 21 9A 00 23 00 00 db 21h, 9Ah, 00h, 23h, 00h, 00h
-450F:0672 21 08 00 23 35 27 db 21h, 08h, 00h, 23h, 35h, 27h
-450F:0678 27 06 00 1F 02 00 db 27h, 06h, 00h, 1Fh, 02h, 00h
-450F:067E 23 E8 03 0A 2B 09 db 23h,0E8h, 03h, 0Ah, 2Bh, 09h
-450F:0684 00 23 11 10 27 10 db 00h, 23h, 11h, 10h, 27h, 10h
-450F:068A 00 27 1C 00 28 1F db 00h, 27h, 1Ch, 00h, 28h, 1Fh
-450F:0690 9A 00 23 01 00 0A db 9Ah, 00h, 23h, 01h, 00h, 0Ah
-450F:0696 2B 3D 00 1F 02 00 db 2Bh, 3Dh, 00h, 1Fh, 02h, 00h
-450F:069C 23 E8 03 0A 2B 0C db 23h,0E8h, 03h, 0Ah, 2Bh, 0Ch
-450F:06A2 00 23 08 00 23 E8 db 00h, 23h, 08h, 00h, 23h,0E8h
-450F:06A8 03 27 1B 00 2D 09 db 03h, 27h, 1Bh, 00h, 2Dh, 09h
-450F:06AE 00 23 09 00 1F 02 db 00h, 23h, 09h, 00h, 1Fh, 02h
-450F:06B4 00 27 1B 00 23 0A db 00h, 27h, 1Bh, 00h, 23h, 0Ah
-450F:06BA 00 23 3D 04 27 01 db 00h, 23h, 3Dh, 04h, 27h, 01h
-450F:06C0 00 23 01 00 21 82 db 00h, 23h, 01h, 00h, 21h, 82h
-450F:06C6 00 23 00 00 23 05 db 00h, 23h, 00h, 00h, 23h, 05h
-450F:06CC 00 23 F6 06 27 08 db 00h, 23h,0F6h, 06h, 27h, 08h
-450F:06D2 00 2D 1F 00 1F 02 db 00h, 2Dh, 1Fh, 00h, 1Fh, 02h
-450F:06D8 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:06DE 09 00 23 0F 10 27 db 09h, 00h, 23h, 0Fh, 10h, 27h
-450F:06E4 10 00 2D 0C 00 23 db 10h, 00h, 2Dh, 0Ch, 00h, 23h
-450F:06EA 10 10 23 E8 03 23 db 10h, 10h, 23h,0E8h, 03h, 23h
-450F:06F0 F2 03 27 1D 00 28 db 0F2h, 03h, 27h, 1Dh, 00h, 28h
-450F:06F6 23 00 00 21 82 00 db 23h, 00h, 00h, 21h, 82h, 00h
-450F:06FC 28 23 01 00 21 20 db 28h, 23h, 01h, 00h, 21h, 20h
-450F:0702 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:0708 00 28 23 01 00 21 db 00h, 28h, 23h, 01h, 00h, 21h
-450F:070E 20 00 1F 1C 00 23 db 20h, 00h, 1Fh, 1Ch, 00h, 23h
-450F:0714 00 00 0C 2B 09 00 db 00h, 00h, 0Ch, 2Bh, 09h, 00h
-450F:071A 23 11 00 21 08 00 db 23h, 11h, 00h, 21h, 08h, 00h
-450F:0720 2D 89 00 23 01 00 db 2Dh, 89h, 00h, 23h, 01h, 00h
-450F:0726 23 11 04 27 1E 00 db 23h, 11h, 04h, 27h, 1Eh, 00h
-450F:072C 1F 02 00 23 EA 03 db 1Fh, 02h, 00h, 23h,0EAh, 03h
-450F:0732 0A 2B 24 00 23 00 db 0Ah, 2Bh, 24h, 00h, 23h, 00h
-450F:0738 00 23 EA 03 27 1B db 00h, 23h,0EAh, 03h, 27h, 1Bh
-450F:073E 00 23 97 00 23 11 db 00h, 23h, 97h, 00h, 23h, 11h
-450F:0744 04 23 EA 03 27 1F db 04h, 23h,0EAh, 03h, 27h, 1Fh
-450F:074A 00 23 96 00 23 EA db 00h, 23h, 96h, 00h, 23h,0EAh
-450F:0750 03 23 11 04 27 1D db 03h, 23h, 11h, 04h, 27h, 1Dh
-450F:0756 00 2D 52 00 23 14 db 00h, 2Dh, 52h, 00h, 23h, 14h
-450F:075C 00 23 E8 03 27 1B db 00h, 23h,0E8h, 03h, 27h, 1Bh
-450F:0762 00 1F 78 00 23 00 db 00h, 1Fh, 78h, 00h, 23h, 00h
-450F:0768 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:076E ED 0A 23 11 04 27 db 0EDh, 0Ah, 23h, 11h, 04h, 27h
-450F:0774 13 00 1F 78 00 23 db 13h, 00h, 1Fh, 78h, 00h, 23h
-450F:077A 01 00 0A 2B 09 00 db 01h, 00h, 0Ah, 2Bh, 09h, 00h
-450F:0780 23 EE 0A 23 11 04 db 23h,0EEh, 0Ah, 23h, 11h, 04h
-450F:0786 27 13 00 1F 78 00 db 27h, 13h, 00h, 1Fh, 78h, 00h
-450F:078C 23 01 00 02 21 78 db 23h, 01h, 00h, 02h, 21h, 78h
-450F:0792 00 1F 78 00 23 02 db 00h, 1Fh, 78h, 00h, 23h, 02h
-450F:0798 00 0A 2B 0F 00 23 db 00h, 0Ah, 2Bh, 0Fh, 00h, 23h
-450F:079E 02 00 21 1C 00 23 db 02h, 00h, 21h, 1Ch, 00h, 23h
-450F:07A4 F0 0A 23 11 04 27 db 0F0h, 0Ah, 23h, 11h, 04h, 27h
-450F:07AA 0B 00 28 23 11 00 db 0Bh, 00h, 28h, 23h, 11h, 00h
-450F:07B0 21 08 00 1F 04 00 db 21h, 08h, 00h, 1Fh, 04h, 00h
-450F:07B6 23 13 27 0A 2B 3A db 23h, 13h, 27h, 0Ah, 2Bh, 3Ah
-450F:07BC 00 23 00 00 21 08 db 00h, 23h, 00h, 00h, 21h, 08h
-450F:07C2 00 23 35 75 27 06 db 00h, 23h, 35h, 75h, 27h, 06h
-450F:07C8 00 1F 1C 00 23 00 db 00h, 1Fh, 1Ch, 00h, 23h, 00h
-450F:07CE 00 0A 2B 1E 00 23 db 00h, 0Ah, 2Bh, 1Eh, 00h, 23h
-450F:07D4 01 00 21 1C 00 23 db 01h, 00h, 21h, 1Ch, 00h, 23h
-450F:07DA 1A 00 27 0D 00 23 db 1Ah, 00h, 27h, 0Dh, 00h, 23h
-450F:07E0 03 00 23 11 04 27 db 03h, 00h, 23h, 11h, 04h, 27h
-450F:07E6 1E 00 23 11 04 27 db 1Eh, 00h, 23h, 11h, 04h, 27h
-450F:07EC 20 00 2D 06 00 23 db 20h, 00h, 2Dh, 06h, 00h, 23h
-450F:07F2 6F 01 27 10 00 28 db 6Fh, 01h, 27h, 10h, 00h, 28h
-450F:07F8 23 11 00 21 08 00 db 23h, 11h, 00h, 21h, 08h, 00h
-450F:07FE 1F 04 00 23 10 27 db 1Fh, 04h, 00h, 23h, 10h, 27h
-450F:0804 0A 2B 3B 00 1F 24 db 0Ah, 2Bh, 3Bh, 00h, 1Fh, 24h
-450F:080A 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:0810 2B 00 23 01 00 21 db 2Bh, 00h, 23h, 01h, 00h, 21h
-450F:0816 24 00 23 00 00 21 db 24h, 00h, 23h, 00h, 00h, 21h
-450F:081C 08 00 23 04 00 27 db 08h, 00h, 23h, 04h, 00h, 27h
-450F:0822 0D 00 1F 02 00 23 db 0Dh, 00h, 1Fh, 02h, 00h, 23h
-450F:0828 E8 03 0A 2B 0C 00 db 0E8h, 03h, 0Ah, 2Bh, 0Ch, 00h
-450F:082E 23 ED 00 27 10 00 db 23h,0EDh, 00h, 27h, 10h, 00h
-450F:0834 23 04 00 27 15 00 db 23h, 04h, 00h, 27h, 15h, 00h
-450F:083A 2D 06 00 23 1C 00 db 2Dh, 06h, 00h, 23h, 1Ch, 00h
-450F:0840 21 08 00 28 23 11 db 21h, 08h, 00h, 28h, 23h, 11h
-450F:0846 00 21 08 00 1F 04 db 00h, 21h, 08h, 00h, 1Fh, 04h
-450F:084C 00 23 13 27 0A 2B db 00h, 23h, 13h, 27h, 0Ah, 2Bh
-450F:0852 2F 00 1F 28 00 23 db 2Fh, 00h, 1Fh, 28h, 00h, 23h
-450F:0858 00 00 0A 2B 25 00 db 00h, 00h, 0Ah, 2Bh, 25h, 00h
-450F:085E 23 01 00 21 28 00 db 23h, 01h, 00h, 21h, 28h, 00h
-450F:0864 23 00 00 21 08 00 db 23h, 00h, 00h, 21h, 08h, 00h
-450F:086A 27 21 00 23 1A 00 db 27h, 21h, 00h, 23h, 1Ah, 00h
-450F:0870 27 0D 00 1F 02 00 db 27h, 0Dh, 00h, 1Fh, 02h, 00h
-450F:0876 23 E8 03 0A 2B 06 db 23h,0E8h, 03h, 0Ah, 2Bh, 06h
-450F:087C 00 23 F0 00 27 10 db 00h, 23h,0F0h, 00h, 27h, 10h
-450F:0882 00 28 23 01 00 21 db 00h, 28h, 23h, 01h, 00h, 21h
-450F:0888 08 00 1F 28 00 23 db 08h, 00h, 1Fh, 28h, 00h, 23h
-450F:088E 00 00 0A 2B 06 00 db 00h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:0894 23 00 00 21 08 00 db 23h, 00h, 00h, 21h, 08h, 00h
-450F:089A 1F 28 00 23 02 00 db 1Fh, 28h, 00h, 23h, 02h, 00h
-450F:08A0 0A 2B 06 00 23 D8 db 0Ah, 2Bh, 06h, 00h, 23h,0D8h
-450F:08A6 00 27 10 00 1F 28 db 00h, 27h, 10h, 00h, 1Fh, 28h
-450F:08AC 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:08B2 15 00 23 0B 01 27 db 15h, 00h, 23h, 0Bh, 01h, 27h
-450F:08B8 10 00 23 01 00 1F db 10h, 00h, 23h, 01h, 00h, 1Fh
-450F:08BE 02 00 27 22 00 23 db 02h, 00h, 27h, 22h, 00h, 23h
-450F:08C4 02 00 21 28 00 28 db 02h, 00h, 21h, 28h, 00h, 28h
-450F:08CA 27 17 00 1F 0A 00 db 27h, 17h, 00h, 1Fh, 0Ah, 00h
-450F:08D0 23 00 00 0C 2B 0C db 23h, 00h, 00h, 0Ch, 2Bh, 0Ch
-450F:08D6 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:08DC 00 23 44 01 27 10 db 00h, 23h, 44h, 01h, 27h, 10h
-450F:08E2 00 28 23 1E 00 21 db 00h, 28h, 23h, 1Eh, 00h, 21h
-450F:08E8 08 00 1F 28 00 23 db 08h, 00h, 1Fh, 28h, 00h, 23h
-450F:08EE 00 00 0C 2B 06 00 db 00h, 00h, 0Ch, 2Bh, 06h, 00h
-450F:08F4 23 33 00 21 08 00 db 23h, 33h, 00h, 21h, 08h, 00h
-450F:08FA 28 23 01 00 1F 02 db 28h, 23h, 01h, 00h, 1Fh, 02h
-450F:0900 00 27 1B 00 28 1F db 00h, 27h, 1Bh, 00h, 28h, 1Fh
-450F:0906 30 00 23 00 00 0A db 30h, 00h, 23h, 00h, 00h, 0Ah
-450F:090C 2B 09 00 23 06 00 db 2Bh, 09h, 00h, 23h, 06h, 00h
-450F:0912 21 08 00 2D 06 00 db 21h, 08h, 00h, 2Dh, 06h, 00h
-450F:0918 23 3C 75 27 20 00 db 23h, 3Ch, 75h, 27h, 20h, 00h
-450F:091E 28 23 3C 75 27 23 db 28h, 23h, 3Ch, 75h, 27h, 23h
-450F:0924 00 1F 02 00 23 F1 db 00h, 1Fh, 02h, 00h, 23h,0F1h
-450F:092A 03 0A 2B 06 00 23 db 03h, 0Ah, 2Bh, 06h, 00h, 23h
-450F:0930 00 00 21 30 00 28 db 00h, 00h, 21h, 30h, 00h, 28h
-450F:0936 1F 02 00 23 E9 03 db 1Fh, 02h, 00h, 23h,0E9h, 03h
-450F:093C 0A 2B 34 00 23 E9 db 0Ah, 2Bh, 34h, 00h, 23h,0E9h
-450F:0942 03 db 03h
-450F:0943 loc_2367:
-450F:0943 23 1B and bx,[bp+di]
-450F:0945 27 daa ; Decimal adjust
-450F:0946 27 daa ; Decimal adjust
-450F:0947 0A 00 or al,[bx+si]
-450F:0949 1F pop ds
-450F:094A 0A 00 or al,[bx+si]
-450F:094C 23 01 and ax,[bx+di]
-450F:094E 00 0A add [bp+si],cl
-450F:0950 2B 12 sub dx,[bp+si]
-450F:0952 00 23 add [bp+di],ah
-450F:0954 01 00 add [bx+si],ax
-450F:0956 21 30 and [bx+si],si
-450F:0958 00 23 add [bp+di],ah
-450F:095A 35 1F08 xor ax,1F08h
-450F:095D 02 00 add al,[bx+si]
-450F:095F 27 daa ; Decimal adjust
-450F:0960 13 00 adc ax,[bx+si]
-450F:0962 2D 000C sub ax,0Ch
-450F:0965 23 00 and ax,[bx+si]
-450F:0967 00 1F add [bx],bl
-450F:0969 02 00 add al,[bx+si]
-450F:096B 23 2A and bp,[bp+si]
-450F:096D 00 27 add [bx],ah
-450F:096F 24 00 and al,0
-450F:0971 2D 000C sub ax,0Ch
-450F:0974 23 00 and ax,[bx+si]
-450F:0976 00 1F add [bx],bl
-450F:0978 02 00 add al,[bx+si]
-450F:097A 23 2A and bp,[bp+si]
-450F:097C 00 27 add [bx],ah
-450F:097E 24 00 and al,0
-450F:0980 28 23 sub [bp+di],ah
-450F:0982 11 00 adc [bx+si],ax
-450F:0984 21 08 and [bx+si],cx
-450F:0986 00 1F add [bx],bl
-450F:0988 04 00 add al,0
-450F:098A 23 1B and bx,[bp+di]
-450F:098C 27 daa ; Decimal adjust
-450F:098D 0A 2B or ch,[bp+di]
-450F:098F 35 1F00 xor ax,1F00h
-450F:0992 02 00 add al,[bx+si]
-450F:0994 23 E9 and bp,cx
-450F:0996 03 0A add cx,[bp+si]
-450F:0998 2B 15 sub dx,[di]
-450F:099A 00 23 add [bp+di],ah
-450F:099C 01 00 add [bx+si],ax
-450F:099E 21 30 and [bx+si],si
-450F:09A0 00 23 add [bp+di],ah
-450F:09A2 00 00 add [bx+si],al
-450F:09A4 21 08 and [bx+si],cx
-450F:09A6 00 23 add [bp+di],ah
-450F:09A8 35 1F08 xor ax,1F08h
-450F:09AB 02 00 add al,[bx+si]
-450F:09AD 27 daa ; Decimal adjust
-450F:09AE 13 00 adc ax,[bx+si]
-450F:09B0 1F pop ds
-450F:09B1 02 00 add al,[bx+si]
-450F:09B3 23 E8 and bp,ax
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 625
-
-450F:09B5 03 0A add cx,[bp+si]
-450F:09B7 2B 0C sub cx,[si]
-450F:09B9 00 23 add [bp+di],ah
-450F:09BB 34 08 xor al,8
-450F:09BD 27 daa ; Decimal adjust
-450F:09BE 10 00 adc [bx+si],al
-450F:09C0 23 00 and ax,[bx+si]
-450F:09C2 00 21 add [bx+di],ah
-450F:09C4 08 00 or [bx+si],al
-450F:09C6 28 23 sub [bp+di],ah
-450F:09C8 01 00 add [bx+si],ax
-450F:09CA 21 08 and [bx+si],cx
-450F:09CC 00 1F add [bx],bl
-450F:09CE 32 00 xor al,[bx+si]
-450F:09D0 23 01 and ax,[bx+di]
-450F:09D2 00 0A add [bp+si],cl
-450F:09D4 2B 09 sub cx,[bx+di]
-450F:09D6 00 23 add [bp+di],ah
-450F:09D8 87 01 xchg [bx+di],ax
-450F:09DA 27 daa ; Decimal adjust
-450F:09DB 10 00 adc [bx+si],al
-450F:09DD 2D 003F sub ax,3Fh
-450F:09E0 1F pop ds
-450F:09E1 32 00 xor al,[bx+si]
-450F:09E3 23 02 and ax,[bp+si]
-450F:09E5 00 0A add [bp+si],cl
-450F:09E7 2B 09 sub cx,[bx+di]
-450F:09E9 00 23 add [bp+di],ah
-450F:09EB 86 01 xchg [bx+di],al
-450F:09ED 27 daa ; Decimal adjust
-450F:09EE 10 00 adc [bx+si],al
-450F:09F0 2D 002C sub ax,2Ch
-450F:09F3 1F pop ds
-450F:09F4 32 00 xor al,[bx+si]
-450F:09F6 23 03 and ax,[bp+di]
-450F:09F8 00 0A add [bp+si],cl
-450F:09FA 2B 09 sub cx,[bx+di]
-450F:09FC 00 23 add [bp+di],ah
-450F:09FE 89 01 mov [bx+di],ax
-450F:0A00 27 daa ; Decimal adjust
-450F:0A01 10 00 adc [bx+si],al
-450F:0A03 2D 0019 sub ax,19h
-450F:0A06 1F pop ds
-450F:0A07 32 00 xor al,[bx+si]
-450F:0A09 23 04 and ax,[si]
-450F:0A0B 00 0A add [bp+si],cl
-450F:0A0D 2B 09 sub cx,[bx+di]
-450F:0A0F 00 23 add [bp+di],ah
-450F:0A11 88 01 mov [bx+di],al
-450F:0A13 27 daa ; Decimal adjust
-450F:0A14 10 00 adc [bx+si],al
-450F:0A16 2D 0006 sub ax,6
-450F:0A19 23 00 and ax,[bx+si]
-450F:0A1B 00 21 add [bx+di],ah
-450F:0A1D 08 00 or [bx+si],al
-450F:0A1F 28 1F sub [bx],bl
-450F:0A21 34 00 xor al,0
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 626
-
-450F:0A23 23 01 and ax,[bx+di]
-450F:0A25 00 0A add [bp+si],cl
-450F:0A27 2B 0C sub cx,[si]
-450F:0A29 00 23 add [bp+di],ah
-450F:0A2B 01 00 add [bx+si],ax
-450F:0A2D 21 08 and [bx+si],cx
-450F:0A2F 00 23 add [bp+di],ah
-450F:0A31 50 push ax
-450F:0A32 08 27 or [bx],ah
-450F:0A34 10 00 adc [bx+si],al
-450F:0A36 28 23 sub [bp+di],ah
-450F:0A38 11 00 adc [bx+si],ax
-450F:0A3A 21 08 and [bx+si],cx
-450F:0A3C 00 1F add [bx],bl
-450F:0A3E 34 00 xor al,0
-450F:0A40 23 00 and ax,[bx+si]
-450F:0A42 00 0A add [bp+si],cl
-450F:0A44 2B 65 00 ;* sub sp,[di+0]
-450F:0A44 2B 65 00 db 2Bh, 65h, 00h
-450F:0A47 1F 04 00 23 1C 27 db 1Fh, 04h, 00h, 23h, 1Ch, 27h
-450F:0A4D 0A 2B 5B 00 1F 02 db 0Ah, 2Bh, 5Bh, 00h, 1Fh, 02h
-450F:0A53 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:0A59 2D 00 23 01 00 21 db 2Dh, 00h, 23h, 01h, 00h, 21h
-450F:0A5F 34 00 23 00 00 21 db 34h, 00h, 23h, 00h, 00h, 21h
-450F:0A65 08 00 23 51 08 27 db 08h, 00h, 23h, 51h, 08h, 27h
-450F:0A6B 10 00 23 01 00 23 db 10h, 00h, 23h, 01h, 00h, 23h
-450F:0A71 02 00 23 AD 0A 27 db 02h, 00h, 23h,0ADh, 0Ah, 27h
-450F:0A77 08 00 27 25 00 23 db 08h, 00h, 27h, 25h, 00h, 23h
-450F:0A7D 0C 00 23 23 04 27 db 0Ch, 00h, 23h, 23h, 04h, 27h
-450F:0A83 01 00 2D 24 00 23 db 01h, 00h, 2Dh, 24h, 00h, 23h
-450F:0A89 01 00 21 34 00 23 db 01h, 00h, 21h, 34h, 00h, 23h
-450F:0A8F 01 00 23 02 00 23 db 01h, 00h, 23h, 02h, 00h, 23h
-450F:0A95 AD 0A 27 08 00 27 db 0ADh, 0Ah, 27h, 08h, 00h, 27h
-450F:0A9B 25 00 23 0C 00 23 db 25h, 00h, 23h, 0Ch, 00h, 23h
-450F:0AA1 23 04 27 01 00 23 db 23h, 04h, 27h, 01h, 00h, 23h
-450F:0AA7 00 00 21 08 00 28 db 00h, 00h, 21h, 08h, 00h, 28h
-450F:0AAD 23 52 08 23 E9 03 db 23h, 52h, 08h, 23h,0E9h, 03h
-450F:0AB3 27 13 00 28 23 11 db 27h, 13h, 00h, 28h, 23h, 11h
-450F:0AB9 00 21 08 00 1F 04 db 00h, 21h, 08h, 00h, 1Fh, 04h
-450F:0ABF 00 23 1D 27 0A 2B db 00h, 23h, 1Dh, 27h, 0Ah, 2Bh
-450F:0AC5 3B 00 1F 32 00 23 db 3Bh, 00h, 1Fh, 32h, 00h, 23h
-450F:0ACB 00 00 0A 2B 2B 00 db 00h, 00h, 0Ah, 2Bh, 2Bh, 00h
-450F:0AD1 23 03 00 21 32 00 db 23h, 03h, 00h, 21h, 32h, 00h
-450F:0AD7 23 00 00 21 08 00 db 23h, 00h, 00h, 21h, 08h, 00h
-450F:0ADD 23 04 00 27 0D 00 db 23h, 04h, 00h, 27h, 0Dh, 00h
-450F:0AE3 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:0AE9 0A 2B 0C 00 23 AC db 0Ah, 2Bh, 0Ch, 00h, 23h,0ACh
-450F:0AEF 0C 27 10 00 23 04 db 0Ch, 27h, 10h, 00h, 23h, 04h
-450F:0AF5 00 27 15 00 2D 06 db 00h, 27h, 15h, 00h, 2Dh, 06h
-450F:0AFB 00 23 1C 00 21 08 db 00h, 23h, 1Ch, 00h, 21h, 08h
-450F:0B01 00 28 23 11 00 21 db 00h, 28h, 23h, 11h, 00h, 21h
-450F:0B07 08 00 1F 04 00 23 db 08h, 00h, 1Fh, 04h, 00h, 23h
-450F:0B0D 1D 27 0A 2B 3B 00 db 1Dh, 27h, 0Ah, 2Bh, 3Bh, 00h
-450F:0B13 1F 32 00 23 00 00 db 1Fh, 32h, 00h, 23h, 00h, 00h
-450F:0B19 0A 2B 2B 00 23 04 db 0Ah, 2Bh, 2Bh, 00h, 23h, 04h
-450F:0B1F 00 21 32 00 23 00 db 00h, 21h, 32h, 00h, 23h, 00h
-450F:0B25 00 21 08 00 23 04 db 00h, 21h, 08h, 00h, 23h, 04h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 627
-
-450F:0B2B 00 27 0D 00 1F 02 db 00h, 27h, 0Dh, 00h, 1Fh, 02h
-450F:0B31 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:0B37 0C 00 23 B0 0C 27 db 0Ch, 00h, 23h,0B0h, 0Ch, 27h
-450F:0B3D 10 00 23 04 00 27 db 10h, 00h, 23h, 04h, 00h, 27h
-450F:0B43 15 00 2D 06 00 23 db 15h, 00h, 2Dh, 06h, 00h, 23h
-450F:0B49 1C 00 21 08 00 28 db 1Ch, 00h, 21h, 08h, 00h, 28h
-450F:0B4F 23 11 00 21 08 00 db 23h, 11h, 00h, 21h, 08h, 00h
-450F:0B55 1F 04 00 23 1D 27 db 1Fh, 04h, 00h, 23h, 1Dh, 27h
-450F:0B5B 0A 2B 54 00 1F 36 db 0Ah, 2Bh, 54h, 00h, 1Fh, 36h
-450F:0B61 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:0B67 4A 00 1F 32 00 23 db 4Ah, 00h, 1Fh, 32h, 00h, 23h
-450F:0B6D 00 00 0A 2B 3A 00 db 00h, 00h, 0Ah, 2Bh, 3Ah, 00h
-450F:0B73 23 01 00 21 32 00 db 23h, 01h, 00h, 21h, 32h, 00h
-450F:0B79 23 0B 00 23 23 04 db 23h, 0Bh, 00h, 23h, 23h, 04h
-450F:0B7F 27 01 00 23 00 00 db 27h, 01h, 00h, 23h, 00h, 00h
-450F:0B85 21 08 00 23 00 00 db 21h, 08h, 00h, 23h, 00h, 00h
-450F:0B8B 21 36 00 23 04 00 db 21h, 36h, 00h, 23h, 04h, 00h
-450F:0B91 27 0D 00 1F 02 00 db 27h, 0Dh, 00h, 1Fh, 02h, 00h
-450F:0B97 23 E8 03 0A 2B 0C db 23h,0E8h, 03h, 0Ah, 2Bh, 0Ch
-450F:0B9D 00 23 53 08 27 10 db 00h, 23h, 53h, 08h, 27h, 10h
-450F:0BA3 00 23 04 00 27 15 db 00h, 23h, 04h, 00h, 27h, 15h
-450F:0BA9 00 2D 06 00 23 1C db 00h, 2Dh, 06h, 00h, 23h, 1Ch
-450F:0BAF 00 21 08 00 28 23 db 00h, 21h, 08h, 00h, 28h, 23h
-450F:0BB5 18 00 21 08 00 1F db 18h, 00h, 21h, 08h, 00h, 1Fh
-450F:0BBB 32 00 23 01 00 0A db 32h, 00h, 23h, 01h, 00h, 0Ah
-450F:0BC1 2B 48 00 23 01 00 db 2Bh, 48h, 00h, 23h, 01h, 00h
-450F:0BC7 21 08 00 1F 02 00 db 21h, 08h, 00h, 1Fh, 02h, 00h
-450F:0BCD 23 E8 03 0A 2B 22 db 23h,0E8h, 03h, 0Ah, 2Bh, 22h
-450F:0BD3 00 1F 38 00 23 00 db 00h, 1Fh, 38h, 00h, 23h, 00h
-450F:0BD9 00 0A 2B 03 00 27 db 00h, 0Ah, 2Bh, 03h, 00h, 27h
-450F:0BDF 26 00 23 02 00 21 db 26h, 00h, 23h, 02h, 00h, 21h
-450F:0BE5 3A 00 23 00 00 21 db 3Ah, 00h, 23h, 00h, 00h, 21h
-450F:0BEB 32 00 23 06 00 21 db 32h, 00h, 23h, 06h, 00h, 21h
-450F:0BF1 26 00 2D 16 00 1F db 26h, 00h, 2Dh, 16h, 00h, 1Fh
-450F:0BF7 02 00 23 E9 03 0A db 02h, 00h, 23h,0E9h, 03h, 0Ah
-450F:0BFD 2B 0C 00 23 DB 08 db 2Bh, 0Ch, 00h, 23h,0DBh, 08h
-450F:0C03 23 E8 03 23 E9 03 db 23h,0E8h, 03h, 23h,0E9h, 03h
-450F:0C09 27 1D 00 1F 32 00 db 27h, 1Dh, 00h, 1Fh, 32h, 00h
-450F:0C0F 23 02 00 0A 2B 25 db 23h, 02h, 00h, 0Ah, 2Bh, 25h
-450F:0C15 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:0C1B 00 1F 02 00 23 E8 db 00h, 1Fh, 02h, 00h, 23h,0E8h
-450F:0C21 03 0A 2B 12 00 23 db 03h, 0Ah, 2Bh, 12h, 00h, 23h
-450F:0C27 54 0B 27 10 00 23 db 54h, 0Bh, 27h, 10h, 00h, 23h
-450F:0C2D 55 0B 27 10 00 23 db 55h, 0Bh, 27h, 10h, 00h, 23h
-450F:0C33 82 0C 27 10 00 2D db 82h, 0Ch, 27h, 10h, 00h, 2Dh
-450F:0C39 7B 00 1F 32 00 23 db 7Bh, 00h, 1Fh, 32h, 00h, 23h
-450F:0C3F 03 00 0A 2B 32 00 db 03h, 00h, 0Ah, 2Bh, 32h, 00h
-450F:0C45 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:0C4B 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:0C51 0A 2B 09 00 23 56 db 0Ah, 2Bh, 09h, 00h, 23h, 56h
-450F:0C57 0B 27 10 00 2D 16 db 0Bh, 27h, 10h, 00h, 2Dh, 16h
-450F:0C5D 00 1F 02 00 23 E9 db 00h, 1Fh, 02h, 00h, 23h,0E9h
-450F:0C63 03 0A 2B 0C 00 23 db 03h, 0Ah, 2Bh, 0Ch, 00h, 23h
-450F:0C69 AD 0C 23 E8 03 23 db 0ADh, 0Ch, 23h,0E8h, 03h, 23h
-450F:0C6F E9 03 27 1D 00 2D db 0E9h, 03h, 27h, 1Dh, 00h, 2Dh
-450F:0C75 3F 00 1F 32 00 23 db 3Fh, 00h, 1Fh, 32h, 00h, 23h
-450F:0C7B 04 00 0A 2B 35 00 db 04h, 00h, 0Ah, 2Bh, 35h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 628
-
-450F:0C81 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:0C87 23 00 00 21 32 00 db 23h, 00h, 00h, 21h, 32h, 00h
-450F:0C8D 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:0C93 0A 2B 09 00 23 AE db 0Ah, 2Bh, 09h, 00h, 23h,0AEh
-450F:0C99 0C 27 10 00 2D 16 db 0Ch, 27h, 10h, 00h, 2Dh, 16h
-450F:0C9F 00 1F 02 00 23 E9 db 00h, 1Fh, 02h, 00h, 23h,0E9h
-450F:0CA5 03 0A 2B 0C 00 23 db 03h, 0Ah, 2Bh, 0Ch, 00h, 23h
-450F:0CAB AF 0C 23 E8 03 23 db 0AFh, 0Ch, 23h,0E8h, 03h, 23h
-450F:0CB1 E9 03 27 1D 00 28 db 0E9h, 03h, 27h, 1Dh, 00h, 28h
-450F:0CB7 27 26 00 23 05 00 db 27h, 26h, 00h, 23h, 05h, 00h
-450F:0CBD 21 26 00 1F 40 00 db 21h, 26h, 00h, 1Fh, 40h, 00h
-450F:0CC3 23 01 00 0A 2B 06 db 23h, 01h, 00h, 0Ah, 2Bh, 06h
-450F:0CC9 00 23 07 00 21 26 db 00h, 23h, 07h, 00h, 21h, 26h
-450F:0CCF 00 28 1F 38 00 23 db 00h, 28h, 1Fh, 38h, 00h, 23h
-450F:0CD5 00 00 0A 2B 15 00 db 00h, 00h, 0Ah, 2Bh, 15h, 00h
-450F:0CDB 23 5B 08 23 27 04 db 23h, 5Bh, 08h, 23h, 27h, 04h
-450F:0CE1 27 13 00 25 13 0D db 27h, 13h, 00h, 25h, 13h, 0Dh
-450F:0CE7 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:0CED 2D 12 00 23 C6 08 db 2Dh, 12h, 00h, 23h,0C6h, 08h
-450F:0CF3 23 27 04 27 13 00 db 23h, 27h, 04h, 27h, 13h, 00h
-450F:0CF9 23 01 00 23 27 04 db 23h, 01h, 00h, 23h, 27h, 04h
-450F:0CFF 27 1E 00 28 23 01 db 27h, 1Eh, 00h, 28h, 23h, 01h
-450F:0D05 00 23 27 04 27 1E db 00h, 23h, 27h, 04h, 27h, 1Eh
-450F:0D0B 00 23 00 00 21 42 db 00h, 23h, 00h, 00h, 21h, 42h
-450F:0D11 00 28 1F 42 00 23 db 00h, 28h, 1Fh, 42h, 00h, 23h
-450F:0D17 00 00 0A 2B 1B 00 db 00h, 00h, 0Ah, 2Bh, 1Bh, 00h
-450F:0D1D 23 00 00 23 0F 00 db 23h, 00h, 00h, 23h, 0Fh, 00h
-450F:0D23 23 03 0D 27 08 00 db 23h, 03h, 0Dh, 27h, 08h, 00h
-450F:0D29 23 00 00 23 27 04 db 23h, 00h, 00h, 23h, 27h, 04h
-450F:0D2F 27 1E 00 23 01 00 db 27h, 1Eh, 00h, 23h, 01h, 00h
-450F:0D35 21 42 00 28 1F 02 db 21h, 42h, 00h, 28h, 1Fh, 02h
-450F:0D3B 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:0D41 03 00 27 27 00 25 db 03h, 00h, 27h, 27h, 00h, 25h
-450F:0D47 13 0D 23 01 00 21 db 13h, 0Dh, 23h, 01h, 00h, 21h
-450F:0D4D 42 00 28 23 01 00 db 42h, 00h, 28h, 23h, 01h, 00h
-450F:0D53 21 08 00 1F 02 00 db 21h, 08h, 00h, 1Fh, 02h, 00h
-450F:0D59 23 E8 03 0A 2B 09 db 23h,0E8h, 03h, 0Ah, 2Bh, 09h
-450F:0D5F 00 23 75 08 27 10 db 00h, 23h, 75h, 08h, 27h, 10h
-450F:0D65 00 2D 09 00 23 76 db 00h, 2Dh, 09h, 00h, 23h, 76h
-450F:0D6B 08 1F 02 00 27 13 db 08h, 1Fh, 02h, 00h, 27h, 13h
-450F:0D71 00 28 23 44 75 27 db 00h, 28h, 23h, 44h, 75h, 27h
-450F:0D77 20 00 28 23 44 75 db 20h, 00h, 28h, 23h, 44h, 75h
-450F:0D7D 27 23 00 28 1F 02 db 27h, 23h, 00h, 28h, 1Fh, 02h
-450F:0D83 00 23 E8 03 0A 1F db 00h, 23h,0E8h, 03h, 0Ah, 1Fh
-450F:0D89 26 00 23 08 00 0E db 26h, 00h, 23h, 08h, 00h, 0Eh
-450F:0D8F 1F 26 00 23 0D 00 db 1Fh, 26h, 00h, 23h, 0Dh, 00h
-450F:0D95 10 1C 1A 2B 06 00 db 10h, 1Ch, 1Ah, 2Bh, 06h, 00h
-450F:0D9B 23 06 00 db 23h, 06h, 00h
-450F:0D9E loc_2368:
-450F:0D9E 21 08 and [bx+si],cx
-450F:0DA0 00 1F add [bx],bl
-450F:0DA2 02 00 add al,[bx+si]
-450F:0DA4 23 E9 and bp,cx
-450F:0DA6 03 0A add cx,[bp+si]
-450F:0DA8 1F pop ds
-450F:0DA9 26: 00 23 add es:[bp+di],ah
-450F:0DAC 08 00 or [bx+si],al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 629
-
-450F:0DAE 0E push cs
-450F:0DAF 1F pop ds
-450F:0DB0 26: 00 23 add es:[bp+di],ah
-450F:0DB3 0D 1000 or ax,1000h
-450F:0DB6 1C 1A sbb al,1Ah
-450F:0DB8 2B 09 sub cx,[bx+di]
-450F:0DBA 00 23 add [bp+di],ah
-450F:0DBC 06 push es
-450F:0DBD 00 21 add [bx+di],ah
-450F:0DBF 08 00 or [bx+si],al
-450F:0DC1 2D 002C sub ax,2Ch
-450F:0DC4 1F pop ds
-450F:0DC5 02 00 add al,[bx+si]
-450F:0DC7 23 E9 and bp,cx
-450F:0DC9 03 0A add cx,[bp+si]
-450F:0DCB 2B 22 sub sp,[bp+si]
-450F:0DCD 00 23 add [bp+di],ah
-450F:0DCF E9 2303 jmp $+2306h
-450F:0DD2 1B 27 27 28 00 1F db 1Bh, 27h, 27h, 28h, 00h, 1Fh
-450F:0DD8 08 00 23 01 00 0A db 08h, 00h, 23h, 01h, 00h, 0Ah
-450F:0DDE 2B 09 00 23 00 00 db 2Bh, 09h, 00h, 23h, 00h, 00h
-450F:0DE4 21 08 00 2D 06 00 db 21h, 08h, 00h, 2Dh, 06h, 00h
-450F:0DEA 23 06 00 21 08 00 db 23h, 06h, 00h, 21h, 08h, 00h
-450F:0DF0 28 23 0E 09 27 10 db 28h, 23h, 0Eh, 09h, 27h, 10h
-450F:0DF6 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:0DFC 00 28 23 8A 01 27 db 00h, 28h, 23h, 8Ah, 01h, 27h
-450F:0E02 10 00 23 8B 01 27 db 10h, 00h, 23h, 8Bh, 01h, 27h
-450F:0E08 10 00 23 8C 01 27 db 10h, 00h, 23h, 8Ch, 01h, 27h
-450F:0E0E 10 00 23 8D 01 27 db 10h, 00h, 23h, 8Dh, 01h, 27h
-450F:0E14 10 00 23 8E 01 27 db 10h, 00h, 23h, 8Eh, 01h, 27h
-450F:0E1A 10 00 23 8F 01 27 db 10h, 00h, 23h, 8Fh, 01h, 27h
-450F:0E20 10 00 23 01 00 21 db 10h, 00h, 23h, 01h, 00h, 21h
-450F:0E26 96 00 23 01 00 21 db 96h, 00h, 23h, 01h, 00h, 21h
-450F:0E2C 08 00 28 23 01 00 db 08h, 00h, 28h, 23h, 01h, 00h
-450F:0E32 21 08 00 1F 96 00 db 21h, 08h, 00h, 1Fh, 96h, 00h
-450F:0E38 23 00 00 0A 2B 09 db 23h, 00h, 00h, 0Ah, 2Bh, 09h
-450F:0E3E 00 23 55 0C 27 10 db 00h, 23h, 55h, 0Ch, 27h, 10h
-450F:0E44 00 2D 12 00 23 57 db 00h, 2Dh, 12h, 00h, 23h, 57h
-450F:0E4A 0C 27 10 00 23 24 db 0Ch, 27h, 10h, 00h, 23h, 24h
-450F:0E50 04 27 23 00 23 3D db 04h, 27h, 23h, 00h, 23h, 3Dh
-450F:0E56 75 27 23 00 28 1F db 75h, 27h, 23h, 00h, 28h, 1Fh
-450F:0E5C 02 00 23 EF 03 0A db 02h, 00h, 23h,0EFh, 03h, 0Ah
-450F:0E62 2B 09 00 23 00 00 db 2Bh, 09h, 00h, 23h, 00h, 00h
-450F:0E68 21 08 00 2D 22 00 db 21h, 08h, 00h, 2Dh, 22h, 00h
-450F:0E6E 23 22 00 23 EF 03 db 23h, 22h, 00h, 23h,0EFh, 03h
-450F:0E74 27 28 00 1F 08 00 db 27h, 28h, 00h, 1Fh, 08h, 00h
-450F:0E7A 23 01 00 0A 2B 09 db 23h, 01h, 00h, 0Ah, 2Bh, 09h
-450F:0E80 00 23 00 00 21 08 db 00h, 23h, 00h, 00h, 21h, 08h
-450F:0E86 00 2D 06 00 23 06 db 00h, 2Dh, 06h, 00h, 23h, 06h
-450F:0E8C 00 21 08 00 28 1F db 00h, 21h, 08h, 00h, 28h, 1Fh
-450F:0E92 5E 00 23 00 00 0A db 5Eh, 00h, 23h, 00h, 00h, 0Ah
-450F:0E98 2B 21 00 23 00 00 db 2Bh, 21h, 00h, 23h, 00h, 00h
-450F:0E9E 23 01 00 23 BD 0E db 23h, 01h, 00h, 23h,0BDh, 0Eh
-450F:0EA4 27 08 00 23 04 00 db 27h, 08h, 00h, 23h, 04h, 00h
-450F:0EAA 27 03 00 27 29 00 db 27h, 03h, 00h, 27h, 29h, 00h
-450F:0EB0 23 01 00 21 5E 00 db 23h, 01h, 00h, 21h, 5Eh, 00h
-450F:0EB6 23 15 00 21 26 00 db 23h, 15h, 00h, 21h, 26h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 630
-
-450F:0EBC 28 23 26 00 23 EF db 28h, 23h, 26h, 00h, 23h,0EFh
-450F:0EC2 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:0EC8 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:0ECE 0F 00 23 00 00 23 db 0Fh, 00h, 23h, 00h, 00h, 23h
-450F:0ED4 02 00 23 BD 0E 27 db 02h, 00h, 23h,0BDh, 0Eh, 27h
-450F:0EDA 08 00 2D 12 00 23 db 08h, 00h, 2Dh, 12h, 00h, 23h
-450F:0EE0 29 27 27 2A 00 23 db 29h, 27h, 27h, 2Ah, 00h, 23h
-450F:0EE6 01 00 21 62 00 23 db 01h, 00h, 21h, 62h, 00h, 23h
-450F:0EEC 01 00 21 64 00 28 db 01h, 00h, 21h, 64h, 00h, 28h
-450F:0EF2 1F 26 00 23 15 00 db 1Fh, 26h, 00h, 23h, 15h, 00h
-450F:0EF8 10 2B 10 00 23 0F db 10h, 2Bh, 10h, 00h, 23h, 0Fh
-450F:0EFE 00 23 00 40 02 23 db 00h, 23h, 00h, 40h, 02h, 23h
-450F:0F04 F4 00 23 06 01 27 db 0F4h, 00h, 23h, 06h, 01h, 27h
-450F:0F0A 19 00 28 1F 26 00 db 19h, 00h, 28h, 1Fh, 26h, 00h
-450F:0F10 23 15 00 10 2B 1E db 23h, 15h, 00h, 10h, 2Bh, 1Eh
-450F:0F16 00 23 00 00 23 04 db 00h, 23h, 00h, 00h, 23h, 04h
-450F:0F1C 00 23 36 0F 27 08 db 00h, 23h, 36h, 0Fh, 27h, 08h
-450F:0F22 00 23 02 00 27 03 db 00h, 23h, 02h, 00h, 27h, 03h
-450F:0F28 00 23 01 00 27 05 db 00h, 23h, 01h, 00h, 27h, 05h
-450F:0F2E 00 23 17 00 21 26 db 00h, 23h, 17h, 00h, 21h, 26h
-450F:0F34 00 28 23 0F 00 23 db 00h, 28h, 23h, 0Fh, 00h, 23h
-450F:0F3A EF 03 27 28 00 1F db 0EFh, 03h, 27h, 28h, 00h, 1Fh
-450F:0F40 08 00 23 00 00 0A db 08h, 00h, 23h, 00h, 00h, 0Ah
-450F:0F46 2B 0F 00 23 00 00 db 2Bh, 0Fh, 00h, 23h, 00h, 00h
-450F:0F4C 23 02 00 23 36 0F db 23h, 02h, 00h, 23h, 36h, 0Fh
-450F:0F52 27 08 00 2D 0C 00 db 27h, 08h, 00h, 2Dh, 0Ch, 00h
-450F:0F58 23 00 00 23 04 00 db 23h, 00h, 00h, 23h, 04h, 00h
-450F:0F5E 23 65 0F 27 08 00 db 23h, 65h, 0Fh, 27h, 08h, 00h
-450F:0F64 28 23 29 27 27 2A db 28h, 23h, 29h, 27h, 27h, 2Ah
-450F:0F6A 00 27 2B 00 28 1F db 00h, 27h, 2Bh, 00h, 28h, 1Fh
-450F:0F70 62 00 23 00 00 0A db 62h, 00h, 23h, 00h, 00h, 0Ah
-450F:0F76 2B 09 00 23 2D 00 db 2Bh, 09h, 00h, 23h, 2Dh, 00h
-450F:0F7C 21 08 00 2D 3C 00 db 21h, 08h, 00h, 2Dh, 3Ch, 00h
-450F:0F82 23 00 00 21 62 00 db 23h, 00h, 00h, 21h, 62h, 00h
-450F:0F88 23 01 00 21 64 00 db 23h, 01h, 00h, 21h, 64h, 00h
-450F:0F8E 23 01 00 21 66 00 db 23h, 01h, 00h, 21h, 66h, 00h
-450F:0F94 23 01 00 21 68 00 db 23h, 01h, 00h, 21h, 68h, 00h
-450F:0F9A 23 00 00 21 6A 00 db 23h, 00h, 00h, 21h, 6Ah, 00h
-450F:0FA0 23 01 00 21 6C 00 db 23h, 01h, 00h, 21h, 6Ch, 00h
-450F:0FA6 23 2C 27 27 2C 00 db 23h, 2Ch, 27h, 27h, 2Ch, 00h
-450F:0FAC 23 2A 27 27 2A 00 db 23h, 2Ah, 27h, 27h, 2Ah, 00h
-450F:0FB2 23 2E 27 27 2A 00 db 23h, 2Eh, 27h, 27h, 2Ah, 00h
-450F:0FB8 23 0D 00 27 0D 00 db 23h, 0Dh, 00h, 27h, 0Dh, 00h
-450F:0FBE 28 1F 62 00 23 01 db 28h, 1Fh, 62h, 00h, 23h, 01h
-450F:0FC4 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:0FCA 2D 00 21 08 00 2D db 2Dh, 00h, 21h, 08h, 00h, 2Dh
-450F:0FD0 12 00 23 01 00 21 db 12h, 00h, 23h, 01h, 00h, 21h
-450F:0FD6 62 00 23 2C 27 27 db 62h, 00h, 23h, 2Ch, 27h, 27h
-450F:0FDC 2A 00 23 0D 00 27 db 2Ah, 00h, 23h, 0Dh, 00h, 27h
-450F:0FE2 0D 00 28 1F 64 00 db 0Dh, 00h, 28h, 1Fh, 64h, 00h
-450F:0FE8 23 00 00 0A 2B 09 db 23h, 00h, 00h, 0Ah, 2Bh, 09h
-450F:0FEE 00 23 2D 00 21 08 db 00h, 23h, 2Dh, 00h, 21h, 08h
-450F:0FF4 00 2D 3C 00 23 01 db 00h, 2Dh, 3Ch, 00h, 23h, 01h
-450F:0FFA 00 21 62 00 23 00 db 00h, 21h, 62h, 00h, 23h, 00h
-450F:1000 00 21 64 00 23 01 db 00h, 21h, 64h, 00h, 23h, 01h
-450F:1006 00 21 6A 00 23 00 db 00h, 21h, 6Ah, 00h, 23h, 00h
-450F:100C 00 21 6C 00 23 00 db 00h, 21h, 6Ch, 00h, 23h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 631
-
-450F:1012 00 21 66 00 23 01 db 00h, 21h, 66h, 00h, 23h, 01h
-450F:1018 00 21 68 00 23 2A db 00h, 21h, 68h, 00h, 23h, 2Ah
-450F:101E 27 27 2C 00 23 2C db 27h, 27h, 2Ch, 00h, 23h, 2Ch
-450F:1024 27 27 2A 00 23 2E db 27h, 27h, 2Ah, 00h, 23h, 2Eh
-450F:102A 27 27 2A 00 23 0D db 27h, 27h, 2Ah, 00h, 23h, 0Dh
-450F:1030 00 27 0D 00 28 1F db 00h, 27h, 0Dh, 00h, 28h, 1Fh
-450F:1036 64 00 23 01 00 0A db 64h, 00h, 23h, 01h, 00h, 0Ah
-450F:103C 2B 09 00 23 2D 00 db 2Bh, 09h, 00h, 23h, 2Dh, 00h
-450F:1042 21 08 00 2D 12 00 db 21h, 08h, 00h, 2Dh, 12h, 00h
-450F:1048 23 01 00 21 64 00 db 23h, 01h, 00h, 21h, 64h, 00h
-450F:104E 23 2A 27 27 2A 00 db 23h, 2Ah, 27h, 27h, 2Ah, 00h
-450F:1054 23 0D 00 27 0D 00 db 23h, 0Dh, 00h, 27h, 0Dh, 00h
-450F:105A 28 1F 66 00 23 00 db 28h, 1Fh, 66h, 00h, 23h, 00h
-450F:1060 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:1066 2D 00 21 08 00 2D db 2Dh, 00h, 21h, 08h, 00h, 2Dh
-450F:106C 3C 00 23 01 00 21 db 3Ch, 00h, 23h, 01h, 00h, 21h
-450F:1072 62 00 23 00 00 21 db 62h, 00h, 23h, 00h, 00h, 21h
-450F:1078 64 00 23 00 00 21 db 64h, 00h, 23h, 00h, 00h, 21h
-450F:107E 66 00 23 01 00 21 db 66h, 00h, 23h, 01h, 00h, 21h
-450F:1084 68 00 23 01 00 21 db 68h, 00h, 23h, 01h, 00h, 21h
-450F:108A 6A 00 23 00 00 21 db 6Ah, 00h, 23h, 00h, 00h, 21h
-450F:1090 6C 00 23 2A 27 27 db 6Ch, 00h, 23h, 2Ah, 27h, 27h
-450F:1096 2C 00 23 2C 27 27 db 2Ch, 00h, 23h, 2Ch, 27h, 27h
-450F:109C 2A 00 23 2E 27 27 db 2Ah, 00h, 23h, 2Eh, 27h, 27h
-450F:10A2 2A 00 23 0D 00 27 db 2Ah, 00h, 23h, 0Dh, 00h, 27h
-450F:10A8 0D 00 28 1F 66 00 db 0Dh, 00h, 28h, 1Fh, 66h, 00h
-450F:10AE 23 01 00 0A 2B 09 db 23h, 01h, 00h, 0Ah, 2Bh, 09h
-450F:10B4 00 23 2D 00 21 08 db 00h, 23h, 2Dh, 00h, 21h, 08h
-450F:10BA 00 2D 12 00 23 01 db 00h, 2Dh, 12h, 00h, 23h, 01h
-450F:10C0 00 21 66 00 23 2A db 00h, 21h, 66h, 00h, 23h, 2Ah
-450F:10C6 27 27 2A 00 23 0D db 27h, 27h, 2Ah, 00h, 23h, 0Dh
-450F:10CC 00 27 0D 00 28 1F db 00h, 27h, 0Dh, 00h, 28h, 1Fh
-450F:10D2 68 00 23 00 00 0A db 68h, 00h, 23h, 00h, 00h, 0Ah
-450F:10D8 2B 09 00 23 2D 00 db 2Bh, 09h, 00h, 23h, 2Dh, 00h
-450F:10DE 21 08 00 2D 3C 00 db 21h, 08h, 00h, 2Dh, 3Ch, 00h
-450F:10E4 23 01 00 21 62 00 db 23h, 01h, 00h, 21h, 62h, 00h
-450F:10EA 23 01 00 21 64 00 db 23h, 01h, 00h, 21h, 64h, 00h
-450F:10F0 23 01 00 21 66 00 db 23h, 01h, 00h, 21h, 66h, 00h
-450F:10F6 23 00 00 21 68 00 db 23h, 00h, 00h, 21h, 68h, 00h
-450F:10FC 23 01 00 21 6A 00 db 23h, 01h, 00h, 21h, 6Ah, 00h
-450F:1102 23 01 00 21 6C 00 db 23h, 01h, 00h, 21h, 6Ch, 00h
-450F:1108 23 2E 27 27 2C 00 db 23h, 2Eh, 27h, 27h, 2Ch, 00h
-450F:110E 23 2C 27 27 2A 00 db 23h, 2Ch, 27h, 27h, 2Ah, 00h
-450F:1114 23 2A 27 27 2A 00 db 23h, 2Ah, 27h, 27h, 2Ah, 00h
-450F:111A 23 0D 00 27 0D 00 db 23h, 0Dh, 00h, 27h, 0Dh, 00h
-450F:1120 28 1F 68 00 23 01 db 28h, 1Fh, 68h, 00h, 23h, 01h
-450F:1126 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:112C 2D 00 21 08 00 2D db 2Dh, 00h, 21h, 08h, 00h, 2Dh
-450F:1132 12 00 23 01 00 21 db 12h, 00h, 23h, 01h, 00h, 21h
-450F:1138 68 00 23 2E 27 27 db 68h, 00h, 23h, 2Eh, 27h, 27h
-450F:113E 2A 00 23 0D 00 27 db 2Ah, 00h, 23h, 0Dh, 00h, 27h
-450F:1144 0D 00 28 1F 6A 00 db 0Dh, 00h, 28h, 1Fh, 6Ah, 00h
-450F:114A 23 00 00 0A 2B 09 db 23h, 00h, 00h, 0Ah, 2Bh, 09h
-450F:1150 00 23 2D 00 21 08 db 00h, 23h, 2Dh, 00h, 21h, 08h
-450F:1156 00 2D 3C 00 23 00 db 00h, 2Dh, 3Ch, 00h, 23h, 00h
-450F:115C 00 21 62 00 23 01 db 00h, 21h, 62h, 00h, 23h, 01h
-450F:1162 00 21 64 00 23 01 db 00h, 21h, 64h, 00h, 23h, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 632
-
-450F:1168 00 21 66 00 23 01 db 00h, 21h, 66h, 00h, 23h, 01h
-450F:116E 00 21 68 00 23 00 db 00h, 21h, 68h, 00h, 23h, 00h
-450F:1174 00 21 6A 00 23 01 db 00h, 21h, 6Ah, 00h, 23h, 01h
-450F:117A 00 21 6C 00 23 2C db 00h, 21h, 6Ch, 00h, 23h, 2Ch
-450F:1180 27 27 2C 00 23 2A db 27h, 27h, 2Ch, 00h, 23h, 2Ah
-450F:1186 27 27 2A 00 23 2E db 27h, 27h, 2Ah, 00h, 23h, 2Eh
-450F:118C 27 27 2A 00 23 0D db 27h, 27h, 2Ah, 00h, 23h, 0Dh
-450F:1192 00 27 0D 00 28 1F db 00h, 27h, 0Dh, 00h, 28h, 1Fh
-450F:1198 6A 00 23 01 00 0A db 6Ah, 00h, 23h, 01h, 00h, 0Ah
-450F:119E 2B 09 00 23 2D 00 db 2Bh, 09h, 00h, 23h, 2Dh, 00h
-450F:11A4 21 08 00 2D 12 00 db 21h, 08h, 00h, 2Dh, 12h, 00h
-450F:11AA 23 01 00 21 6A 00 db 23h, 01h, 00h, 21h, 6Ah, 00h
-450F:11B0 23 2C 27 27 2A 00 db 23h, 2Ch, 27h, 27h, 2Ah, 00h
-450F:11B6 23 0D 00 27 0D 00 db 23h, 0Dh, 00h, 27h, 0Dh, 00h
-450F:11BC 28 1F 6C 00 23 00 db 28h, 1Fh, 6Ch, 00h, 23h, 00h
-450F:11C2 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:11C8 2D 00 21 08 00 2D db 2Dh, 00h, 21h, 08h, 00h, 2Dh
-450F:11CE 36 00 23 01 00 21 db 36h, 00h, 23h, 01h, 00h, 21h
-450F:11D4 62 00 23 00 00 21 db 62h, 00h, 23h, 00h, 00h, 21h
-450F:11DA 66 00 23 01 00 21 db 66h, 00h, 23h, 01h, 00h, 21h
-450F:11E0 68 00 23 01 00 21 db 68h, 00h, 23h, 01h, 00h, 21h
-450F:11E6 6A 00 23 00 00 21 db 6Ah, 00h, 23h, 00h, 00h, 21h
-450F:11EC 6C 00 23 2A 27 27 db 6Ch, 00h, 23h, 2Ah, 27h, 27h
-450F:11F2 2C 00 23 2C 27 27 db 2Ch, 00h, 23h, 2Ch, 27h, 27h
-450F:11F8 2A 00 23 2E 27 27 db 2Ah, 00h, 23h, 2Eh, 27h, 27h
-450F:11FE 2A 00 23 0D 00 27 db 2Ah, 00h, 23h, 0Dh, 00h, 27h
-450F:1204 0D 00 28 1F 6C 00 db 0Dh, 00h, 28h, 1Fh, 6Ch, 00h
-450F:120A 23 01 00 0A 2B 09 db 23h, 01h, 00h, 0Ah, 2Bh, 09h
-450F:1210 00 23 2D 00 21 08 db 00h, 23h, 2Dh, 00h, 21h, 08h
-450F:1216 00 2D 12 00 23 01 db 00h, 2Dh, 12h, 00h, 23h, 01h
-450F:121C 00 21 6C 00 23 2A db 00h, 21h, 6Ch, 00h, 23h, 2Ah
-450F:1222 27 27 2A 00 23 0D db 27h, 27h, 2Ah, 00h, 23h, 0Dh
-450F:1228 00 27 0D 00 28 1F db 00h, 27h, 0Dh, 00h, 28h, 1Fh
-450F:122E 04 00 23 28 27 0A db 04h, 00h, 23h, 28h, 27h, 0Ah
-450F:1234 2B 28 00 1F 70 00 db 2Bh, 28h, 00h, 1Fh, 70h, 00h
-450F:123A 23 00 00 0A 2B 06 db 23h, 00h, 00h, 0Ah, 2Bh, 06h
-450F:1240 00 23 01 00 21 72 db 00h, 23h, 01h, 00h, 21h, 72h
-450F:1246 00 27 1C 00 23 28 db 00h, 27h, 1Ch, 00h, 23h, 28h
-450F:124C 27 27 06 00 23 FA db 27h, 27h, 06h, 00h, 23h,0FAh
-450F:1252 09 27 10 00 23 00 db 09h, 27h, 10h, 00h, 23h, 00h
-450F:1258 00 21 08 00 2D 06 db 00h, 21h, 08h, 00h, 2Dh, 06h
-450F:125E 00 23 11 00 21 08 db 00h, 23h, 11h, 00h, 21h, 08h
-450F:1264 00 28 1F 04 00 23 db 00h, 28h, 1Fh, 04h, 00h, 23h
-450F:126A 13 27 0A 2B 38 00 db 13h, 27h, 0Ah, 2Bh, 38h, 00h
-450F:1270 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:1276 0A 2B 06 00 23 5F db 0Ah, 2Bh, 06h, 00h, 23h, 5Fh
-450F:127C 01 27 10 00 23 0C db 01h, 27h, 10h, 00h, 23h, 0Ch
-450F:1282 04 27 06 00 23 2B db 04h, 27h, 06h, 00h, 23h, 2Bh
-450F:1288 01 23 12 04 27 0B db 01h, 23h, 12h, 04h, 27h, 0Bh
-450F:128E 00 1F 1E 00 23 03 db 00h, 1Fh, 1Eh, 00h, 23h, 03h
-450F:1294 00 0C 2B 0C 00 23 db 00h, 0Ch, 2Bh, 0Ch, 00h, 23h
-450F:129A 67 01 23 E8 03 23 db 67h, 01h, 23h,0E8h, 03h, 23h
-450F:12A0 12 04 27 1D 00 2D db 12h, 04h, 27h, 1Dh, 00h, 2Dh
-450F:12A6 06 00 23 11 00 db 06h, 00h, 23h, 11h, 00h
-450F:12AB 21 08 00 db '!', 8, 0
-450F:12AE 28 23 31 75 27 23 db '(#1u', 27h, '#', 0
-450F:12B4 00
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 633
-
-450F:12B5 28 23 4D 75 27 23 db '(#Mu', 27h, '#', 0
-450F:12BB 00
-450F:12BC 28 23 35 27 27 23 db '(#5', 27h, 27h, '#', 0
-450F:12C2 00
-450F:12C3 28 23 3C 75 27 23 db '(#<u', 27h, '#', 0
-450F:12C9 00
-450F:12CA 28 23 0C db '(#', 0Ch
-450F:12CD 04 27 23 00 28 1F db 04h, 27h, 23h, 00h, 28h, 1Fh
-450F:12D3 24 00 23 01 00 0A db 24h, 00h, 23h, 01h, 00h, 0Ah
-450F:12D9 2B 0C 00 23 D7 00 db 2Bh, 0Ch, 00h, 23h,0D7h, 00h
-450F:12DF 27 10 00 23 01 00 db 27h, 10h, 00h, 23h, 01h, 00h
-450F:12E5 21 08 00 28 23 70 db 21h, 08h, 00h, 28h, 23h, 70h
-450F:12EB 01 1F 02 00 27 13 db 01h, 1Fh, 02h, 00h, 27h, 13h
-450F:12F1 00 23 01 00 21 16 db 00h, 23h, 01h, 00h, 21h, 16h
-450F:12F7 00 28 23 90 0C 21 db 00h, 28h, 23h, 90h, 0Ch, 21h
-450F:12FD A0 00 1F 04 00 23 db 0A0h, 00h, 1Fh, 04h, 00h, 23h
-450F:1303 EA 03 0A 2B 06 00 db 0EAh, 03h, 0Ah, 2Bh, 06h, 00h
-450F:1309 23 6F 00 21 A0 00 db 23h, 6Fh, 00h, 21h,0A0h, 00h
-450F:130F 1F 04 00 23 EF 03 db 1Fh, 04h, 00h, 23h,0EFh, 03h
-450F:1315 0A 2B 06 00 23 91 db 0Ah, 2Bh, 06h, 00h, 23h, 91h
-450F:131B 0C 21 A0 00 1F 04 db 0Ch, 21h,0A0h, 00h, 1Fh, 04h
-450F:1321 00 23 F1 03 0A 2B db 00h, 23h,0F1h, 03h, 0Ah, 2Bh
-450F:1327 06 00 23 92 0C 21 db 06h, 00h, 23h, 92h, 0Ch, 21h
-450F:132D A0 00 1F 04 00 23 db 0A0h, 00h, 1Fh, 04h, 00h, 23h
-450F:1333 EE 03 0A 1F 04 00 db 0EEh, 03h, 0Ah, 1Fh, 04h, 00h
-450F:1339 23 F0 03 0A 1C 2B db 23h,0F0h, 03h, 0Ah, 1Ch, 2Bh
-450F:133F 06 00 23 93 0C 21 db 06h, 00h, 23h, 93h, 0Ch, 21h
-450F:1345 A0 00 1F A0 00 1F db 0A0h, 00h, 1Fh,0A0h, 00h, 1Fh
-450F:134B 04 00 1F 02 00 27 db 04h, 00h, 1Fh, 02h, 00h, 27h
-450F:1351 1F 00 28 23 83 0C db 1Fh, 00h, 28h, 23h, 83h, 0Ch
-450F:1357 21 A0 00 1F 04 00 db 21h,0A0h, 00h, 1Fh, 04h, 00h
-450F:135D 23 EF 03 0A 2B 06 db 23h,0EFh, 03h, 0Ah, 2Bh, 06h
-450F:1363 00 23 85 0C 21 A0 db 00h, 23h, 85h, 0Ch, 21h,0A0h
-450F:1369 00 1F 04 00 23 F1 db 00h, 1Fh, 04h, 00h, 23h,0F1h
-450F:136F 03 0A 2B 06 00 23 db 03h, 0Ah, 2Bh, 06h, 00h, 23h
-450F:1375 86 0C 21 A0 00 1F db 86h, 0Ch, 21h,0A0h, 00h, 1Fh
-450F:137B 04 00 23 EE 03 0A db 04h, 00h, 23h,0EEh, 03h, 0Ah
-450F:1381 1F 04 00 23 F0 03 db 1Fh, 04h, 00h, 23h,0F0h, 03h
-450F:1387 0A 1C 2B 06 00 23 db 0Ah, 1Ch, 2Bh, 06h, 00h, 23h
-450F:138D 84 0C 21 A0 00 1F db 84h, 0Ch, 21h,0A0h, 00h, 1Fh
-450F:1393 A0 00 1F 04 00 1F db 0A0h, 00h, 1Fh, 04h, 00h, 1Fh
-450F:1399 02 00 27 1F 00 28 db 02h, 00h, 27h, 1Fh, 00h, 28h
-450F:139F 23 87 0C 21 A0 00 db 23h, 87h, 0Ch, 21h,0A0h, 00h
-450F:13A5 1F 04 00 23 F1 03 db 1Fh, 04h, 00h, 23h,0F1h, 03h
-450F:13AB 0A 2B 06 00 23 89 db 0Ah, 2Bh, 06h, 00h, 23h, 89h
-450F:13B1 0C 21 A0 00 1F 04 db 0Ch, 21h,0A0h, 00h, 1Fh, 04h
-450F:13B7 00 23 EE 03 0A 1F db 00h, 23h,0EEh, 03h, 0Ah, 1Fh
-450F:13BD 04 00 23 F0 03 0A db 04h, 00h, 23h,0F0h, 03h, 0Ah
-450F:13C3 1C 2B 06 00 23 88 db 1Ch, 2Bh, 06h, 00h, 23h, 88h
-450F:13C9 0C 21 A0 00 1F A0 db 0Ch, 21h,0A0h, 00h, 1Fh,0A0h
-450F:13CF 00 1F 04 00 1F 02 db 00h, 1Fh, 04h, 00h, 1Fh, 02h
-450F:13D5 00 27 1F 00 28 23 db 00h, 27h, 1Fh, 00h, 28h, 23h
-450F:13DB 8F 0C 21 A0 00 1F db 8Fh, 0Ch, 21h,0A0h, 00h, 1Fh
-450F:13E1 04 00 23 EF 03 0A db 04h, 00h, 23h,0EFh, 03h, 0Ah
-450F:13E7 1F 04 00 1C 23 EC db 1Fh, 04h, 00h, 1Ch, 23h,0ECh
-450F:13ED 03 0A 2B 06 00 23 db 03h, 0Ah, 2Bh, 06h, 00h, 23h
-450F:13F3 8E 0C 21 A0 00 1F db 8Eh, 0Ch, 21h,0A0h, 00h, 1Fh
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 634
-
-450F:13F9 04 00 23 F1 03 0A db 04h, 00h, 23h,0F1h, 03h, 0Ah
-450F:13FF 2B 06 00 23 8D 0C db 2Bh, 06h, 00h, 23h, 8Dh, 0Ch
-450F:1405 21 A0 00 1F 04 00 db 21h,0A0h, 00h, 1Fh, 04h, 00h
-450F:140B 23 EE 03 0A 1F 04 db 23h,0EEh, 03h, 0Ah, 1Fh, 04h
-450F:1411 00 23 F0 03 0A 1C db 00h, 23h,0F0h, 03h, 0Ah, 1Ch
-450F:1417 2B 06 00 23 84 0C db 2Bh, 06h, 00h, 23h, 84h, 0Ch
-450F:141D 21 A0 00 1F A0 00 db 21h,0A0h, 00h, 1Fh,0A0h, 00h
-450F:1423 1F 04 00 1F 02 00 db 1Fh, 04h, 00h, 1Fh, 02h, 00h
-450F:1429 27 1F 00 28 23 8C db 27h, 1Fh, 00h, 28h, 23h, 8Ch
-450F:142F 0C 21 A0 00 1F 04 db 0Ch, 21h,0A0h, 00h, 1Fh, 04h
-450F:1435 00 23 EC 03 0A 2B db 00h, 23h,0ECh, 03h, 0Ah, 2Bh
-450F:143B 06 00 23 8A 0C 21 db 06h, 00h, 23h, 8Ah, 0Ch, 21h
-450F:1441 A0 00 1F 04 00 23 db 0A0h, 00h, 1Fh, 04h, 00h, 23h
-450F:1447 E8 03 0A 2B 06 00 db 0E8h, 03h, 0Ah, 2Bh, 06h, 00h
-450F:144D 23 8B 0C 21 A0 00 db 23h, 8Bh, 0Ch, 21h,0A0h, 00h
-450F:1453 1F 04 00 23 F1 03 db 1Fh, 04h, 00h, 23h,0F1h, 03h
-450F:1459 0A 2B 06 00 23 8D db 0Ah, 2Bh, 06h, 00h, 23h, 8Dh
-450F:145F 0C 21 A0 00 1F 04 db 0Ch, 21h,0A0h, 00h, 1Fh, 04h
-450F:1465 00 23 EE 03 0A 1F db 00h, 23h,0EEh, 03h, 0Ah, 1Fh
-450F:146B 04 00 23 F0 03 0A db 04h, 00h, 23h,0F0h, 03h, 0Ah
-450F:1471 1C 2B 06 00 23 84 db 1Ch, 2Bh, 06h, 00h, 23h, 84h
-450F:1477 0C 21 A0 00 1F A0 db 0Ch, 21h,0A0h, 00h, 1Fh,0A0h
-450F:147D 00 1F 04 00 1F 02 db 00h, 1Fh, 04h, 00h, 1Fh, 02h
-450F:1483 00 27 1F 00 28 23 db 00h, 27h, 1Fh, 00h, 28h, 23h
-450F:1489 F6 0F 21 A0 00 1F db 0F6h, 0Fh, 21h,0A0h, 00h, 1Fh
-450F:148F 04 00 23 E8 03 0A db 04h, 00h, 23h,0E8h, 03h, 0Ah
-450F:1495 2B 06 00 23 F4 0F db 2Bh, 06h, 00h, 23h,0F4h, 0Fh
-450F:149B 21 A0 00 1F A0 00 db 21h,0A0h, 00h, 1Fh,0A0h, 00h
-450F:14A1 1F 04 00 1F 02 00 db 1Fh, 04h, 00h, 1Fh, 02h, 00h
-450F:14A7 27 1F 00 28 1F 04 db 27h, 1Fh, 00h, 28h, 1Fh, 04h
-450F:14AD 00 23 F2 03 0A 2B db 00h, 23h,0F2h, 03h, 0Ah, 2Bh
-450F:14B3 0C 00 23 F5 0F 1F db 0Ch, 00h, 23h,0F5h, 0Fh, 1Fh
-450F:14B9 04 00 1F 02 00 27 db 04h, 00h, 1Fh, 02h, 00h, 27h
-450F:14BF 1F 00 28 1F 04 00 db 1Fh, 00h, 28h, 1Fh, 04h, 00h
-450F:14C5 23 E8 03 0C 2B 0C db 23h,0E8h, 03h, 0Ch, 2Bh, 0Ch
-450F:14CB 00 23 6E 00 1F 04 db 00h, 23h, 6Eh, 00h, 1Fh, 04h
-450F:14D1 00 1F 02 00 27 1F db 00h, 1Fh, 02h, 00h, 27h, 1Fh
-450F:14D7 00 28 1F 26 00 23 db 00h, 28h, 1Fh, 26h, 00h, 23h
-450F:14DD 06 00 0A 1F 04 00 db 06h, 00h, 0Ah, 1Fh, 04h, 00h
-450F:14E3 23 E8 03 0A 1A 2B db 23h,0E8h, 03h, 0Ah, 1Ah, 2Bh
-450F:14E9 0F 00 23 B7 0C 1F db 0Fh, 00h, 23h,0B7h, 0Ch, 1Fh
-450F:14EF 04 00 1F 02 00 27 db 04h, 00h, 1Fh, 02h, 00h, 27h
-450F:14F5 1F 00 2D 0C 00 23 db 1Fh, 00h, 2Dh, 0Ch, 00h, 23h
-450F:14FB 95 0C 1F 04 00 1F db 95h, 0Ch, 1Fh, 04h, 00h, 1Fh
-450F:1501 02 00 27 1F 00 28 db 02h, 00h, 27h, 1Fh, 00h, 28h
-450F:1507 28 23 3D 01 1F 04 db 28h, 23h, 3Dh, 01h, 1Fh, 04h
-450F:150D 00 1F 02 00 27 1F db 00h, 1Fh, 02h, 00h, 27h, 1Fh
-450F:1513 00 28 1F 26 00 23 db 00h, 28h, 1Fh, 26h, 00h, 23h
-450F:1519 18 00 0E 1F 26 00 db 18h, 00h, 0Eh, 1Fh, 26h, 00h
-450F:151F 23 06 00 0C 1A 2B db 23h, 06h, 00h, 0Ch, 1Ah, 2Bh
-450F:1525 15 00 23 01 00 21 db 15h, 00h, 23h, 01h, 00h, 21h
-450F:152B 08 00 23 A0 0A 1F db 08h, 00h, 23h,0A0h, 0Ah, 1Fh
-450F:1531 04 00 1F 02 00 27 db 04h, 00h, 1Fh, 02h, 00h, 27h
-450F:1537 1D 00 2D 06 00 1F db 1Dh, 00h, 2Dh, 06h, 00h, 1Fh
-450F:153D 02 00 27 2D 00 28 db 02h, 00h, 27h, 2Dh, 00h, 28h
-450F:1543 1F 14 00 23 00 00 db 1Fh, 14h, 00h, 23h, 00h, 00h
-450F:1549 0C 2B 06 00 23 01 db 0Ch, 2Bh, 06h, 00h, 23h, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 635
-
-450F:154F 00 21 08 00 28 1F db 00h, 21h, 08h, 00h, 28h, 1Fh
-450F:1555 02 00 27 2D 00 28 db 02h, 00h, 27h, 2Dh, 00h, 28h
-450F:155B 1F 26 00 23 13 00 db 1Fh, 26h, 00h, 23h, 13h, 00h
-450F:1561 0A 2B 0F 00 23 AB db 0Ah, 2Bh, 0Fh, 00h, 23h,0ABh
-450F:1567 09 1F 04 00 23 EC db 09h, 1Fh, 04h, 00h, 23h,0ECh
-450F:156D 03 27 1D 00 2D 06 db 03h, 27h, 1Dh, 00h, 2Dh, 06h
-450F:1573 00 1F 02 00 27 2D db 00h, 1Fh, 02h, 00h, 27h, 2Dh
-450F:1579 00 28 27 2E 00 1F db 00h, 28h, 27h, 2Eh, 00h, 1Fh
-450F:157F 26 00 23 01 00 0A db 26h, 00h, 23h, 01h, 00h, 0Ah
-450F:1585 2B 0F 00 23 D1 0F db 2Bh, 0Fh, 00h, 23h,0D1h, 0Fh
-450F:158B 1F 04 00 23 F2 03 db 1Fh, 04h, 00h, 23h,0F2h, 03h
-450F:1591 27 1D 00 2D 10 00 db 27h, 1Dh, 00h, 2Dh, 10h, 00h
-450F:1597 1F 26 00 23 04 00 db 1Fh, 26h, 00h, 23h, 04h, 00h
-450F:159D 0C 2B 06 00 1F 02 db 0Ch, 2Bh, 06h, 00h, 1Fh, 02h
-450F:15A3 00 27 2D 00 28 1F db 00h, 27h, 2Dh, 00h, 28h, 1Fh
-450F:15A9 00 00 23 24 00 0A db 00h, 00h, 23h, 24h, 00h, 0Ah
-450F:15AF 2B 09 00 1F 02 00 db 2Bh, 09h, 00h, 1Fh, 02h, 00h
-450F:15B5 27 2D 00 2D 06 00 db 27h, 2Dh, 00h, 2Dh, 06h, 00h
-450F:15BB 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:15C1 28 1F 18 00 23 01 db 28h, 1Fh, 18h, 00h, 23h, 01h
-450F:15C7 00 02 21 18 00 23 db 00h, 02h, 21h, 18h, 00h, 23h
-450F:15CD 01 00 21 08 00 1F db 01h, 00h, 21h, 08h, 00h, 1Fh
-450F:15D3 18 00 23 01 00 0A db 18h, 00h, 23h, 01h, 00h, 0Ah
-450F:15D9 2B 0F 00 23 8D 00 db 2Bh, 0Fh, 00h, 23h, 8Dh, 00h
-450F:15DF 1F 04 00 1F 02 00 db 1Fh, 04h, 00h, 1Fh, 02h, 00h
-450F:15E5 27 1D 00 2D 16 00 db 27h, 1Dh, 00h, 2Dh, 16h, 00h
-450F:15EB 1F 18 00 23 02 00 db 1Fh, 18h, 00h, 23h, 02h, 00h
-450F:15F1 0A 2B 0C 00 23 8E db 0Ah, 2Bh, 0Ch, 00h, 23h, 8Eh
-450F:15F7 00 1F 04 00 1F 02 db 00h, 1Fh, 04h, 00h, 1Fh, 02h
-450F:15FD 00 27 1D 00 28 23 db 00h, 27h, 1Dh, 00h, 28h, 23h
-450F:1603 DE 0F 1F 04 00 1F db 0DEh, 0Fh, 1Fh, 04h, 00h, 1Fh
-450F:1609 02 00 27 1D 00 23 db 02h, 00h, 27h, 1Dh, 00h, 23h
-450F:160F 01 00 21 08 00 28 db 01h, 00h, 21h, 08h, 00h, 28h
-450F:1615 1F 04 00 23 E8 03 db 1Fh, 04h, 00h, 23h,0E8h, 03h
-450F:161B 0A 2B 25 00 1F 26 db 0Ah, 2Bh, 25h, 00h, 1Fh, 26h
-450F:1621 00 23 06 00 0A 2B db 00h, 23h, 06h, 00h, 0Ah, 2Bh
-450F:1627 1B 00 23 01 00 21 db 1Bh, 00h, 23h, 01h, 00h, 21h
-450F:162D 08 00 23 E8 03 1F db 08h, 00h, 23h,0E8h, 03h, 1Fh
-450F:1633 02 00 23 2C 00 27 db 02h, 00h, 23h, 2Ch, 00h, 27h
-450F:1639 2F 00 23 ED 03 23 db 2Fh, 00h, 23h,0EDh, 03h, 23h
-450F:163F 05 00 27 30 00 1F db 05h, 00h, 27h, 30h, 00h, 1Fh
-450F:1645 08 00 23 00 00 0A db 08h, 00h, 23h, 00h, 00h, 0Ah
-450F:164B 2B 06 00 1F 02 00 db 2Bh, 06h, 00h, 1Fh, 02h, 00h
-450F:1651 27 2D 00 28 1F 4A db 27h, 2Dh, 00h, 28h, 1Fh, 4Ah
-450F:1657 00 23 01 00 0C 2B db 00h, 23h, 01h, 00h, 0Ch, 2Bh
-450F:165D 31 00 1F 26 00 23 db 31h, 00h, 1Fh, 26h, 00h, 23h
-450F:1663 06 00 0A 2B 1E 00 db 06h, 00h, 0Ah, 2Bh, 1Eh, 00h
-450F:1669 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:166F 23 E8 03 1F 02 00 db 23h,0E8h, 03h, 1Fh, 02h, 00h
-450F:1675 23 2C 00 27 2F 00 db 23h, 2Ch, 00h, 27h, 2Fh, 00h
-450F:167B 23 E9 03 23 04 00 db 23h,0E9h, 03h, 23h, 04h, 00h
-450F:1681 27 30 00 2D 06 00 db 27h, 30h, 00h, 2Dh, 06h, 00h
-450F:1687 1F 02 00 27 2D 00 db 1Fh, 02h, 00h, 27h, 2Dh, 00h
-450F:168D 2D 06 00 23 01 00 db 2Dh, 06h, 00h, 23h, 01h, 00h
-450F:1693 21 08 00 28 1F 26 db 21h, 08h, 00h, 28h, 1Fh, 26h
-450F:1699 00 23 06 00 0A 2B db 00h, 23h, 06h, 00h, 0Ah, 2Bh
-450F:169F 09 00 23 04 00 23 db 09h, 00h, 23h, 04h, 00h, 23h
-450F:16A5 E9 03 27 31 00 28 db 0E9h, 03h, 27h, 31h, 00h, 28h
-450F:16AB 1F 04 00 23 31 27 db 1Fh, 04h, 00h, 23h, 31h, 27h
-450F:16B1 0A 2B 15 00 23 11 db 0Ah, 2Bh, 15h, 00h, 23h, 11h
-450F:16B7 0C 1F 02 00 1F 06 db 0Ch, 1Fh, 02h, 00h, 1Fh, 06h
-450F:16BD 00 27 1D 00 23 01 db 00h, 27h, 1Dh, 00h, 23h, 01h
-450F:16C3 00 21 08 00 2D 06 db 00h, 21h, 08h, 00h, 2Dh, 06h
-450F:16C9 00 23 24 00 21 08 db 00h, 23h, 24h, 00h, 21h, 08h
-450F:16CF 00 28 1F 04 00 23 db 00h, 28h, 1Fh, 04h, 00h, 23h
-450F:16D5 30 27 0A 2B 15 00 db 30h, 27h, 0Ah, 2Bh, 15h, 00h
-450F:16DB 23 9E 0C 1F 02 00 db 23h, 9Eh, 0Ch, 1Fh, 02h, 00h
-450F:16E1 1F 06 00 27 1D 00 db 1Fh, 06h, 00h, 27h, 1Dh, 00h
-450F:16E7 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:16ED 2D 06 00 23 24 00 db 2Dh, 06h, 00h, 23h, 24h, 00h
-450F:16F3 21 08 00 28 1F 26 db 21h, 08h, 00h, 28h, 1Fh, 26h
-450F:16F9 00 23 06 00 0A 2B db 00h, 23h, 06h, 00h, 0Ah, 2Bh
-450F:16FF 09 00 23 31 00 21 db 09h, 00h, 23h, 31h, 00h, 21h
-450F:1705 08 00 2D 3E 00 1F db 08h, 00h, 2Dh, 3Eh, 00h, 1Fh
-450F:170B 04 00 23 31 27 0A db 04h, 00h, 23h, 31h, 27h, 0Ah
-450F:1711 2B 15 00 23 53 0B db 2Bh, 15h, 00h, 23h, 53h, 0Bh
-450F:1717 1F 02 00 1F 06 00 db 1Fh, 02h, 00h, 1Fh, 06h, 00h
-450F:171D 27 1D 00 23 01 00 db 27h, 1Dh, 00h, 23h, 01h, 00h
-450F:1723 21 08 00 2D 1F 00 db 21h, 08h, 00h, 2Dh, 1Fh, 00h
-450F:1729 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:172F 0A 2B 0F 00 23 03 db 0Ah, 2Bh, 0Fh, 00h, 23h, 03h
-450F:1735 00 21 0C 00 23 E7 db 00h, 21h, 0Ch, 00h, 23h,0E7h
-450F:173B 03 21 08 00 2D 06 db 03h, 21h, 08h, 00h, 2Dh, 06h
-450F:1741 00 23 24 00 21 08 db 00h, 23h, 24h, 00h, 21h, 08h
-450F:1747 00 28 1F 04 00 23 db 00h, 28h, 1Fh, 04h, 00h, 23h
-450F:174D 31 27 0A 2B 2E 00 db 31h, 27h, 0Ah, 2Bh, 2Eh, 00h
-450F:1753 1F 02 00 23 E8 03 db 1Fh, 02h, 00h, 23h,0E8h, 03h
-450F:1759 0A 2B 0F 00 23 00 db 0Ah, 2Bh, 0Fh, 00h, 23h, 00h
-450F:175F 00 21 0C 00 23 E7 db 00h, 21h, 0Ch, 00h, 23h,0E7h
-450F:1765 03 21 08 00 2D 12 db 03h, 21h, 08h, 00h, 2Dh, 12h
-450F:176B 00 23 43 0B 1F 02 db 00h, 23h, 43h, 0Bh, 1Fh, 02h
-450F:1771 00 23 29 04 27 1D db 00h, 23h, 29h, 04h, 27h, 1Dh
-450F:1777 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:177D 00 2D 06 00 23 24 db 00h, 2Dh, 06h, 00h, 23h, 24h
-450F:1783 00 21 08 00 28 23 db 00h, 21h, 08h, 00h, 28h, 23h
-450F:1789 24 00 21 08 00 1F db 24h, 00h, 21h, 08h, 00h, 1Fh
-450F:178F 06 00 23 27 04 0A db 06h, 00h, 23h, 27h, 04h, 0Ah
-450F:1795 1F 06 00 23 F1 03 db 1Fh, 06h, 00h, 23h,0F1h, 03h
-450F:179B 0A 1C 1F 06 00 23 db 0Ah, 1Ch, 1Fh, 06h, 00h, 23h
-450F:17A1 EC 03 0A 1C 1F 06 db 0ECh, 03h, 0Ah, 1Ch, 1Fh, 06h
-450F:17A7 00 23 36 04 0A 1C db 00h, 23h, 36h, 04h, 0Ah, 1Ch
-450F:17AD 1F 06 00 23 20 04 db 1Fh, 06h, 00h, 23h, 20h, 04h
-450F:17B3 0A 1C 1F 06 00 23 db 0Ah, 1Ch, 1Fh, 06h, 00h, 23h
-450F:17B9 1F 04 0A 1C 1F 06 db 1Fh, 04h, 0Ah, 1Ch, 1Fh, 06h
-450F:17BF 00 23 EB 03 0A 1C db 00h, 23h,0EBh, 03h, 0Ah, 1Ch
-450F:17C5 2B 10 00 1F 26 00 db 2Bh, 10h, 00h, 1Fh, 26h, 00h
-450F:17CB 23 06 00 0A 2B 06 db 23h, 06h, 00h, 0Ah, 2Bh, 06h
-450F:17D1 00 23 31 00 21 08 db 00h, 23h, 31h, 00h, 21h, 08h
-450F:17D7 00 28 23 24 00 21 db 00h, 28h, 23h, 24h, 00h, 21h
-450F:17DD 08 00 1F 26 00 23 db 08h, 00h, 1Fh, 26h, 00h, 23h
-450F:17E3 06 00 0A 2B 09 00 db 06h, 00h, 0Ah, 2Bh, 09h, 00h
-450F:17E9 23 31 00 21 08 00 db 23h, 31h, 00h, 21h, 08h, 00h
-450F:17EF 2D 40 00 1F 04 00 db 2Dh, 40h, 00h, 1Fh, 04h, 00h
-450F:17F5 23 1D 27 0A 1F 32 db 23h, 1Dh, 27h, 0Ah, 1Fh, 32h
-450F:17FB 00 23 02 00 0A 1A db 00h, 23h, 02h, 00h, 0Ah, 1Ah
-450F:1801 2B 2E 00 23 01 00 db 2Bh, 2Eh, 00h, 23h, 01h, 00h
-450F:1807 21 08 00 23 90 0B db 21h, 08h, 00h, 23h, 90h, 0Bh
-450F:180D 1F 02 00 23 EB 03 db 1Fh, 02h, 00h, 23h,0EBh, 03h
-450F:1813 27 1D 00 23 00 00 db 27h, 1Dh, 00h, 23h, 00h, 00h
-450F:1819 21 32 00 1F 02 00 db 21h, 32h, 00h, 1Fh, 02h, 00h
-450F:181F 23 E8 03 0A 2B 0C db 23h,0E8h, 03h, 0Ah, 2Bh, 0Ch
-450F:1825 00 23 02 00 21 0C db 00h, 23h, 02h, 00h, 21h, 0Ch
-450F:182B 00 23 E7 03 21 08 db 00h, 23h,0E7h, 03h, 21h, 08h
-450F:1831 00 28 1F 04 00 23 db 00h, 28h, 1Fh, 04h, 00h, 23h
-450F:1837 1D 27 0A 1F 32 00 db 1Dh, 27h, 0Ah, 1Fh, 32h, 00h
-450F:183D 23 02 00 0A 1A 2B db 23h, 02h, 00h, 0Ah, 1Ah, 2Bh
-450F:1843 0F 00 23 E7 03 21 db 0Fh, 00h, 23h,0E7h, 03h, 21h
-450F:1849 08 00 23 04 00 21 db 08h, 00h, 23h, 04h, 00h, 21h
-450F:184F 0C 00 2D 4A 00 1F db 0Ch, 00h, 2Dh, 4Ah, 00h, 1Fh
-450F:1855 04 00 23 38 27 0A db 04h, 00h, 23h, 38h, 27h, 0Ah
-450F:185B 2B 15 00 23 76 01 db 2Bh, 15h, 00h, 23h, 76h, 01h
-450F:1861 1F db 1Fh
-450F:1862 loc_2370:
-450F:1862 02 00 add al,[bx+si]
-450F:1864 23 E9 and bp,cx
-450F:1866 03 27 add sp,[bx]
-450F:1868 1D 2300 sbb ax,2300h
-450F:186B 01 00 add [bx+si],ax
-450F:186D 21 08 and [bx+si],cx
-450F:186F 00 2D add [di],ch
-450F:1871 2B 00 sub ax,[bx+si]
-450F:1873 1F pop ds
-450F:1874 04 00 add al,0
-450F:1876 23 37 and si,[bx]
-450F:1878 27 daa ; Decimal adjust
-450F:1879 0A 2B or ch,[bp+di]
-450F:187B 15 2300 adc ax,2300h
-450F:187E 78 01 js loc_2371 ; Jump if sign=1
-450F:1880 1F pop ds
-450F:1881 loc_2371: ; xref 450F:187E
-450F:1881 02 00 add al,[bx+si]
-450F:1883 23 E9 and bp,cx
-450F:1885 03 27 add sp,[bx]
-450F:1887 1D 2300 sbb ax,2300h
-450F:188A 01 00 add [bx+si],ax
-450F:188C 21 08 and [bx+si],cx
-450F:188E 00 2D add [di],ch
-450F:1890 0C 00 or al,0
-450F:1892 1F pop ds
-450F:1893 02 00 add al,[bx+si]
-450F:1895 1F pop ds
-450F:1896 06 push es
-450F:1897 00 23 add [bp+di],ah
-450F:1899 24 00 and al,0
-450F:189B 27 daa ; Decimal adjust
-450F:189C 2F das ; Decimal adjust
-450F:189D 00 28 add [bx+si],ch
-450F:189F 23 24 and sp,[si]
-450F:18A1 00 21 add [bx+di],ah
-450F:18A3 08 00 or [bx+si],al
-450F:18A5 1F pop ds
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 638
-
-450F:18A6 26: 00 23 add es:[bp+di],ah
-450F:18A9 06 push es
-450F:18AA 00 0A add [bp+si],cl
-450F:18AC 2B 09 sub cx,[bx+di]
-450F:18AE 00 23 add [bp+di],ah
-450F:18B0 31 00 xor [bx+si],ax
-450F:18B2 21 08 and [bx+si],cx
-450F:18B4 00 2D add [di],ch
-450F:18B6 4D dec bp
-450F:18B7 00 1F add [bx],bl
-450F:18B9 04 00 add al,0
-450F:18BB 23 30 and si,[bx+si]
-450F:18BD 27 daa ; Decimal adjust
-450F:18BE 0A 2B or ch,[bp+di]
-450F:18C0 43 inc bx
-450F:18C1 00 1F add [bx],bl
-450F:18C3 02 00 add al,[bx+si]
-450F:18C5 23 E8 and bp,ax
-450F:18C7 03 0A add cx,[bp+si]
-450F:18C9 2B 27 sub sp,[bx]
-450F:18CB 00 23 add [bp+di],ah
-450F:18CD E7 03 out 3,ax ; port 3, DMA-1 bas&cnt ch 1
-450F:18CF 21 08 and [bx+si],cx
-450F:18D1 00 23 add [bp+di],ah
-450F:18D3 08 00 or [bx+si],al
-450F:18D5 1F pop ds
-450F:18D6 02 00 add al,[bx+si]
-450F:18D8 27 daa ; Decimal adjust
-450F:18D9 22 00 and al,[bx+si]
-450F:18DB 23 31 and si,[bx+di]
-450F:18DD 27 daa ; Decimal adjust
-450F:18DE 27 daa ; Decimal adjust
-450F:18DF 32 00 xor al,[bx+si]
-450F:18E1 27 daa ; Decimal adjust
-450F:18E2 1C 00 sbb al,0
-450F:18E4 23 30 and si,[bx+si]
-450F:18E6 27 daa ; Decimal adjust
-450F:18E7 27 daa ; Decimal adjust
-450F:18E8 06 push es
-450F:18E9 00 23 add [bp+di],ah
-450F:18EB 05 2100 add ax,2100h
-450F:18EE 0C 00 or al,0
-450F:18F0 2D 0012 sub ax,12h
-450F:18F3 23 01 and ax,[bx+di]
-450F:18F5 00 21 add [bx+di],ah
-450F:18F7 08 00 or [bx+si],al
-450F:18F9 23 FC and di,sp
-450F:18FB 0B 1F or bx,[bx]
-450F:18FD 02 00 add al,[bx+si]
-450F:18FF 23 36 2704 and si,data_1430 ; (450F:2704=28h)
-450F:1903 1D 2800 sbb ax,2800h
-450F:1906 23 46 0B and ax,[bp+0Bh]
-450F:1909 27 daa ; Decimal adjust
-450F:190A 10 00 adc [bx+si],al
-450F:190C 23 92 2110 and dx,[bp+si+2110h]
-450F:1910 08 00 or [bx+si],al
-450F:1912 28 23 sub [bp+di],ah
-450F:1914 01 00 add [bx+si],ax
-450F:1916 21 08 and [bx+si],cx
-450F:1918 00 1F add [bx],bl
-450F:191A 04 00 add al,0
-450F:191C 23 23 and sp,[bp+di]
-450F:191E 27 daa ; Decimal adjust
-450F:191F 0C 2B or al,2Bh ; '+'
-450F:1921 79 00 jns $+2 ; delay for I/O
-450F:1923 1F pop ds
-450F:1924 04 00 add al,0
-450F:1926 23 1D and bx,[di]
-450F:1928 27 daa ; Decimal adjust
-450F:1929 0A 2B or ch,[bp+di]
-450F:192B 60 00 1F 32 00 23 db 60h, 00h, 1Fh, 32h, 00h, 23h
-450F:1931 03 00 0A 2B 15 00 db 03h, 00h, 0Ah, 2Bh, 15h, 00h
-450F:1937 23 B4 0C 1F 02 00 db 23h,0B4h, 0Ch, 1Fh, 02h, 00h
-450F:193D 1F 06 00 27 1D 00 db 1Fh, 06h, 00h, 27h, 1Dh, 00h
-450F:1943 23 00 00 21 32 00 db 23h, 00h, 00h, 21h, 32h, 00h
-450F:1949 2D 3E 00 1F 32 00 db 2Dh, 3Eh, 00h, 1Fh, 32h, 00h
-450F:194F 23 04 00 0A 2B 0F db 23h, 04h, 00h, 0Ah, 2Bh, 0Fh
-450F:1955 00 23 B5 0C 1F 02 db 00h, 23h,0B5h, 0Ch, 1Fh, 02h
-450F:195B 00 1F 06 00 27 1D db 00h, 1Fh, 06h, 00h, 27h, 1Dh
-450F:1961 00 2D 25 00 1F 32 db 00h, 2Dh, 25h, 00h, 1Fh, 32h
-450F:1967 00 23 00 00 0C 2B db 00h, 23h, 00h, 00h, 0Ch, 2Bh
-450F:196D 0F 00 23 B6 0C 1F db 0Fh, 00h, 23h,0B6h, 0Ch, 1Fh
-450F:1973 02 00 1F 06 00 27 db 02h, 00h, 1Fh, 06h, 00h, 27h
-450F:1979 1D 00 2D 0C 00 1F db 1Dh, 00h, 2Dh, 0Ch, 00h, 1Fh
-450F:197F 02 00 1F 06 00 23 db 02h, 00h, 1Fh, 06h, 00h, 23h
-450F:1985 24 00 27 2F 00 2D db 24h, 00h, 27h, 2Fh, 00h, 2Dh
-450F:198B 0C 00 1F 02 00 1F db 0Ch, 00h, 1Fh, 02h, 00h, 1Fh
-450F:1991 06 00 23 24 00 27 db 06h, 00h, 23h, 24h, 00h, 27h
-450F:1997 2F 00 2D 5A 00 1F db 2Fh, 00h, 2Dh, 5Ah, 00h, 1Fh
-450F:199D 02 00 23 E8 03 0A db 02h, 00h, 23h,0E8h, 03h, 0Ah
-450F:19A3 2B 0F 00 23 01 00 db 2Bh, 0Fh, 00h, 23h, 01h, 00h
-450F:19A9 23 03 00 23 8C 1A db 23h, 03h, 00h, 23h, 8Ch, 1Ah
-450F:19AF 27 08 00 2D 41 00 db 27h, 08h, 00h, 2Dh, 41h, 00h
-450F:19B5 1F 48 00 23 00 00 db 1Fh, 48h, 00h, 23h, 00h, 00h
-450F:19BB 0A 2B 21 00 23 0A db 0Ah, 2Bh, 21h, 00h, 23h, 0Ah
-450F:19C1 09 1F 02 00 1F 06 db 09h, 1Fh, 02h, 00h, 1Fh, 06h
-450F:19C7 00 27 1D 00 23 00 db 00h, 27h, 1Dh, 00h, 23h, 00h
-450F:19CD 00 21 08 00 23 0B db 00h, 21h, 08h, 00h, 23h, 0Bh
-450F:19D3 00 21 26 00 23 01 db 00h, 21h, 26h, 00h, 23h, 01h
-450F:19D9 00 21 48 00 2D 16 db 00h, 21h, 48h, 00h, 2Dh, 16h
-450F:19DF 00 1F 48 00 23 01 db 00h, 1Fh, 48h, 00h, 23h, 01h
-450F:19E5 00 0A 2B 0C 00 1F db 00h, 0Ah, 2Bh, 0Ch, 00h, 1Fh
-450F:19EB 02 00 1F 06 00 23 db 02h, 00h, 1Fh, 06h, 00h, 23h
-450F:19F1 24 00 27 2F 00 28 db 24h, 00h, 27h, 2Fh, 00h, 28h
-450F:19F7 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:19FD 1F 04 00 23 23 27 db 1Fh, 04h, 00h, 23h, 23h, 27h
-450F:1A03 0C 2B 0F 00 1F 02 db 0Ch, 2Bh, 0Fh, 00h, 1Fh, 02h
-450F:1A09 00 1F 06 00 23 24 db 00h, 1Fh, 06h, 00h, 23h, 24h
-450F:1A0F 00 27 2F 00 2D 24 db 00h, 27h, 2Fh, 00h, 2Dh, 24h
-450F:1A15 00 23 32 09 1F 02 db 00h, 23h, 32h, 09h, 1Fh, 02h
-450F:1A1B 00 1F 06 00 27 1D db 00h, 1Fh, 06h, 00h, 27h, 1Dh
-450F:1A21 00 23 00 00 21 08 db 00h, 23h, 00h, 00h, 21h, 08h
-450F:1A27 00 23 0C 00 21 26 db 00h, 23h, 0Ch, 00h, 21h, 26h
-450F:1A2D 00 23 01 00 23 08 db 00h, 23h, 01h, 00h, 23h, 08h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 640
-
-450F:1A33 00 23 7F 1A 27 08 db 00h, 23h, 7Fh, 1Ah, 27h, 08h
-450F:1A39 00 28 23 01 00 21 db 00h, 28h, 23h, 01h, 00h, 21h
-450F:1A3F 08 00 1F 04 00 23 db 08h, 00h, 1Fh, 04h, 00h, 23h
-450F:1A45 23 27 0C 2B 0F 00 db 23h, 27h, 0Ch, 2Bh, 0Fh, 00h
-450F:1A4B 1F 02 00 1F 06 00 db 1Fh, 02h, 00h, 1Fh, 06h, 00h
-450F:1A51 23 24 00 27 2F 00 db 23h, 24h, 00h, 27h, 2Fh, 00h
-450F:1A57 2D 24 00 23 3C 09 db 2Dh, 24h, 00h, 23h, 3Ch, 09h
-450F:1A5D 1F 02 00 1F 06 00 db 1Fh, 02h, 00h, 1Fh, 06h, 00h
-450F:1A63 27 1D 00 23 00 00 db 27h, 1Dh, 00h, 23h, 00h, 00h
-450F:1A69 21 08 00 23 0C 00 db 21h, 08h, 00h, 23h, 0Ch, 00h
-450F:1A6F 21 26 00 23 01 00 db 21h, 26h, 00h, 23h, 01h, 00h
-450F:1A75 23 08 00 23 7F 1A db 23h, 08h, 00h, 23h, 7Fh, 1Ah
-450F:1A7B 27 08 00 28 23 33 db 27h, 08h, 00h, 28h, 23h, 33h
-450F:1A81 09 27 10 00 23 27 db 09h, 27h, 10h, 00h, 23h, 27h
-450F:1A87 27 27 32 00 28 23 db 27h, 27h, 32h, 00h, 28h, 23h
-450F:1A8D F7 08 27 10 00 28 db 0F7h, 08h, 27h, 10h, 00h, 28h
-450F:1A93 1F 1C 00 23 02 00 db 1Fh, 1Ch, 00h, 23h, 02h, 00h
-450F:1A99 0A 2B 12 00 23 01 db 0Ah, 2Bh, 12h, 00h, 23h, 01h
-450F:1A9F 00 21 08 00 23 01 db 00h, 21h, 08h, 00h, 23h, 01h
-450F:1AA5 00 23 02 00 23 B0 db 00h, 23h, 02h, 00h, 23h,0B0h
-450F:1AAB 1A 27 08 00 28 23 db 1Ah, 27h, 08h, 00h, 28h, 23h
-450F:1AB1 EF 0A 27 10 00 28 db 0EFh, 0Ah, 27h, 10h, 00h, 28h
-450F:1AB7 1F 1E 00 23 03 00 db 1Fh, 1Eh, 00h, 23h, 03h, 00h
-450F:1ABD 0A 2B 12 00 23 01 db 0Ah, 2Bh, 12h, 00h, 23h, 01h
-450F:1AC3 00 21 08 00 23 01 db 00h, 21h, 08h, 00h, 23h, 01h
-450F:1AC9 00 23 02 00 23 85 db 00h, 23h, 02h, 00h, 23h, 85h
-450F:1ACF 1B 27 08 00 28 23 db 1Bh, 27h, 08h, 00h, 28h, 23h
-450F:1AD5 01 00 21 08 00 1F db 01h, 00h, 21h, 08h, 00h, 1Fh
-450F:1ADB 1E 00 23 03 00 0C db 1Eh, 00h, 23h, 03h, 00h, 0Ch
-450F:1AE1 2B 83 00 23 01 00 db 2Bh, 83h, 00h, 23h, 01h, 00h
-450F:1AE7 23 12 04 27 1E 00 db 23h, 12h, 04h, 27h, 1Eh, 00h
-450F:1AED 1F 04 00 23 10 27 db 1Fh, 04h, 00h, 23h, 10h, 27h
-450F:1AF3 0A 2B 61 00 1F 24 db 0Ah, 2Bh, 61h, 00h, 1Fh, 24h
-450F:1AF9 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:1AFF 34 00 23 01 00 21 db 34h, 00h, 23h, 01h, 00h, 21h
-450F:1B05 1E 00 23 00 00 21 db 1Eh, 00h, 23h, 00h, 00h, 21h
-450F:1B0B 24 00 1F 02 00 23 db 24h, 00h, 1Fh, 02h, 00h, 23h
-450F:1B11 E8 03 0A 2B 0F 00 db 0E8h, 03h, 0Ah, 2Bh, 0Fh, 00h
-450F:1B17 23 01 00 21 0C 00 db 23h, 01h, 00h, 21h, 0Ch, 00h
-450F:1B1D 23 E7 03 21 08 00 db 23h,0E7h, 03h, 21h, 08h, 00h
-450F:1B23 2D 0C 00 23 FA 00 db 2Dh, 0Ch, 00h, 23h,0FAh, 00h
-450F:1B29 1F 02 00 23 12 04 db 1Fh, 02h, 00h, 23h, 12h, 04h
-450F:1B2F 27 1D 00 2D 20 00 db 27h, 1Dh, 00h, 2Dh, 20h, 00h
-450F:1B35 1F 24 00 23 00 00 db 1Fh, 24h, 00h, 23h, 00h, 00h
-450F:1B3B 0A 2B 16 00 1F 02 db 0Ah, 2Bh, 16h, 00h, 1Fh, 02h
-450F:1B41 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:1B47 0C 00 23 01 00 23 db 0Ch, 00h, 23h, 01h, 00h, 23h
-450F:1B4D 02 00 23 7E 1B 27 db 02h, 00h, 23h, 7Eh, 1Bh, 27h
-450F:1B53 08 00 2D 0C 00 23 db 08h, 00h, 2Dh, 0Ch, 00h, 23h
-450F:1B59 FD 00 23 E8 03 23 db 0FDh, 00h, 23h,0E8h, 03h, 23h
-450F:1B5F 12 04 27 1D 00 2D db 12h, 04h, 27h, 1Dh, 00h, 2Dh
-450F:1B65 16 00 1F 02 00 23 db 16h, 00h, 1Fh, 02h, 00h, 23h
-450F:1B6B E8 03 0A 2B 0C 00 db 0E8h, 03h, 0Ah, 2Bh, 0Ch, 00h
-450F:1B71 23 01 00 23 03 00 db 23h, 01h, 00h, 23h, 03h, 00h
-450F:1B77 23 85 1B 27 08 00 db 23h, 85h, 1Bh, 27h, 08h, 00h
-450F:1B7D 28 23 F8 00 27 10 db 28h, 23h,0F8h, 00h, 27h, 10h
-450F:1B83 00 28 23 03 01 27 db 00h, 28h, 23h, 03h, 01h, 27h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 641
-
-450F:1B89 10 00 28 1F 06 00 db 10h, 00h, 28h, 1Fh, 06h, 00h
-450F:1B8F 1F 04 00 27 0A 00 db 1Fh, 04h, 00h, 27h, 0Ah, 00h
-450F:1B95 1F 0A 00 23 00 00 db 1Fh, 0Ah, 00h, 23h, 00h, 00h
-450F:1B9B 0A 2B 06 00 23 0A db 0Ah, 2Bh, 06h, 00h, 23h, 0Ah
-450F:1BA1 00 21 08 00 1F 06 db 00h, 21h, 08h, 00h, 1Fh, 06h
-450F:1BA7 00 23 27 04 0A 1F db 00h, 23h, 27h, 04h, 0Ah, 1Fh
-450F:1BAD 06 00 23 36 04 0A db 06h, 00h, 23h, 36h, 04h, 0Ah
-450F:1BB3 1C 1F 06 00 23 20 db 1Ch, 1Fh, 06h, 00h, 23h, 20h
-450F:1BB9 04 0A 1C 2B 10 00 db 04h, 0Ah, 1Ch, 2Bh, 10h, 00h
-450F:1BBF 1F 26 00 23 06 00 db 1Fh, 26h, 00h, 23h, 06h, 00h
-450F:1BC5 0A 2B 06 00 23 32 db 0Ah, 2Bh, 06h, 00h, 23h, 32h
-450F:1BCB 00 21 08 00 28 1F db 00h, 21h, 08h, 00h, 28h, 1Fh
-450F:1BD1 04 00 23 32 27 0A db 04h, 00h, 23h, 32h, 27h, 0Ah
-450F:1BD7 2B 15 00 23 75 0B db 2Bh, 15h, 00h, 23h, 75h, 0Bh
-450F:1BDD 1F 02 00 23 1F 04 db 1Fh, 02h, 00h, 23h, 1Fh, 04h
-450F:1BE3 27 1D 00 23 01 00 db 27h, 1Dh, 00h, 23h, 01h, 00h
-450F:1BE9 21 08 00 2D 06 00 db 21h, 08h, 00h, 2Dh, 06h, 00h
-450F:1BEF 23 0A 00 21 08 00 db 23h, 0Ah, 00h, 21h, 08h, 00h
-450F:1BF5 28 23 24 00 21 08 db 28h, 23h, 24h, 00h, 21h, 08h
-450F:1BFB 00 1F 26 00 23 06 db 00h, 1Fh, 26h, 00h, 23h, 06h
-450F:1C01 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:1C07 31 00 21 08 00 2D db 31h, 00h, 21h, 08h, 00h, 2Dh
-450F:1C0D 22 00 1F 04 00 23 db 22h, 00h, 1Fh, 04h, 00h, 23h
-450F:1C13 34 27 0A 2B 18 00 db 34h, 27h, 0Ah, 2Bh, 18h, 00h
-450F:1C19 23 76 0B 1F 02 00 db 23h, 76h, 0Bh, 1Fh, 02h, 00h
-450F:1C1F 23 1F 04 27 1D 00 db 23h, 1Fh, 04h, 27h, 1Dh, 00h
-450F:1C25 23 32 27 27 23 00 db 23h, 32h, 27h, 27h, 23h, 00h
-450F:1C2B 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:1C31 28 1F 06 00 1F 04 db 28h, 1Fh, 06h, 00h, 1Fh, 04h
-450F:1C37 00 27 0A 00 1F 0A db 00h, 27h, 0Ah, 00h, 1Fh, 0Ah
-450F:1C3D 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:1C43 09 00 23 0A 00 21 db 09h, 00h, 23h, 0Ah, 00h, 21h
-450F:1C49 08 00 2D 4E 00 1F db 08h, 00h, 2Dh, 4Eh, 00h, 1Fh
-450F:1C4F 04 00 23 10 27 0A db 04h, 00h, 23h, 10h, 27h, 0Ah
-450F:1C55 2B 44 00 1F 26 00 db 2Bh, 44h, 00h, 1Fh, 26h, 00h
-450F:1C5B 23 00 00 10 2B 3A db 23h, 00h, 00h, 10h, 2Bh, 3Ah
-450F:1C61 00 1F 8E 00 23 00 db 00h, 1Fh, 8Eh, 00h, 23h, 00h
-450F:1C67 00 0A 2B 30 00 23 db 00h, 0Ah, 2Bh, 30h, 00h, 23h
-450F:1C6D 01 00 23 02 00 23 db 01h, 00h, 23h, 02h, 00h, 23h
-450F:1C73 9D 1C 27 08 00 23 db 9Dh, 1Ch, 27h, 08h, 00h, 23h
-450F:1C79 6C 0B 23 E8 03 23 db 6Ch, 0Bh, 23h,0E8h, 03h, 23h
-450F:1C7F E9 03 27 1D 00 23 db 0E9h, 03h, 27h, 1Dh, 00h, 23h
-450F:1C85 01 00 21 08 00 23 db 01h, 00h, 21h, 08h, 00h, 23h
-450F:1C8B 10 27 27 32 00 23 db 10h, 27h, 27h, 32h, 00h, 23h
-450F:1C91 02 00 21 24 00 23 db 02h, 00h, 21h, 24h, 00h, 23h
-450F:1C97 01 00 21 8E 00 28 db 01h, 00h, 21h, 8Eh, 00h, 28h
-450F:1C9D 23 61 01 23 10 27 db 23h, 61h, 01h, 23h, 10h, 27h
-450F:1CA3 27 0B 00 23 60 01 db 27h, 0Bh, 00h, 23h, 60h, 01h
-450F:1CA9 23 10 27 27 0C 00 db 23h, 10h, 27h, 27h, 0Ch, 00h
-450F:1CAF 28 23 7D 00 1F 02 db 28h, 23h, 7Dh, 00h, 1Fh, 02h
-450F:1CB5 00 1F 04 00 27 1D db 00h, 1Fh, 04h, 00h, 27h, 1Dh
-450F:1CBB 00 28 23 EF 0F 1F db 00h, 28h, 23h,0EFh, 0Fh, 1Fh
-450F:1CC1 02 00 1F 04 00 27 db 02h, 00h, 1Fh, 04h, 00h, 27h
-450F:1CC7 1D 00 28 1F 88 00 db 1Dh, 00h, 28h, 1Fh, 88h, 00h
-450F:1CCD 21 A0 00 1F A0 00 db 21h,0A0h, 00h, 1Fh,0A0h, 00h
-450F:1CD3 23 A0 0C 02 21 A0 db 23h,0A0h, 0Ch, 02h, 21h,0A0h
-450F:1CD9 00 1F 88 00 23 01 db 00h, 1Fh, 88h, 00h, 23h, 01h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 642
-
-450F:1CDF 00 02 21 88 00 1F db 00h, 02h, 21h, 88h, 00h, 1Fh
-450F:1CE5 88 00 23 06 00 0A db 88h, 00h, 23h, 06h, 00h, 0Ah
-450F:1CEB 2B 06 00 23 00 00 db 2Bh, 06h, 00h, 23h, 00h, 00h
-450F:1CF1 21 88 00 1F A0 00 db 21h, 88h, 00h, 1Fh,0A0h, 00h
-450F:1CF7 1F 02 00 1F 04 00 db 1Fh, 02h, 00h, 1Fh, 04h, 00h
-450F:1CFD 27 1D 00 28 23 01 db 27h, 1Dh, 00h, 28h, 23h, 01h
-450F:1D03 00 1F 02 00 27 31 db 00h, 1Fh, 02h, 00h, 27h, 31h
-450F:1D09 00 28 1F 14 00 23 db 00h, 28h, 1Fh, 14h, 00h, 23h
-450F:1D0F 01 00 0A 2B 1B 00 db 01h, 00h, 0Ah, 2Bh, 1Bh, 00h
-450F:1D15 23 02 00 21 14 00 db 23h, 02h, 00h, 21h, 14h, 00h
-450F:1D1B 23 02 00 1F 02 00 db 23h, 02h, 00h, 1Fh, 02h, 00h
-450F:1D21 27 31 00 23 77 00 db 27h, 31h, 00h, 23h, 77h, 00h
-450F:1D27 23 0F 04 1F 02 00 db 23h, 0Fh, 04h, 1Fh, 02h, 00h
-450F:1D2D 27 1F 00 28 23 01 db 27h, 1Fh, 00h, 28h, 23h, 01h
-450F:1D33 00 23 E8 03 27 28 db 00h, 23h,0E8h, 03h, 27h, 28h
-450F:1D39 00 1F 08 00 23 00 db 00h, 1Fh, 08h, 00h, 23h, 00h
-450F:1D3F 00 0A 2B 13 00 1F db 00h, 0Ah, 2Bh, 13h, 00h, 1Fh
-450F:1D45 12 00 23 00 00 0A db 12h, 00h, 23h, 00h, 00h, 0Ah
-450F:1D4B 2B 09 00 23 03 00 db 2Bh, 09h, 00h, 23h, 03h, 00h
-450F:1D51 1F 02 00 27 31 00 db 1Fh, 02h, 00h, 27h, 31h, 00h
-450F:1D57 28 23 01 00 23 E8 db 28h, 23h, 01h, 00h, 23h,0E8h
-450F:1D5D 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:1D63 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:1D69 15 00 23 03 00 1F db 15h, 00h, 23h, 03h, 00h, 1Fh
-450F:1D6F 02 00 27 31 00 23 db 02h, 00h, 27h, 31h, 00h, 23h
-450F:1D75 01 00 21 14 00 23 db 01h, 00h, 21h, 14h, 00h, 23h
-450F:1D7B 01 00 21 16 00 28 db 01h, 00h, 21h, 16h, 00h, 28h
-450F:1D81 23 01 00 23 E8 03 db 23h, 01h, 00h, 23h,0E8h, 03h
-450F:1D87 27 33 00 28 23 01 db 27h, 33h, 00h, 28h, 23h, 01h
-450F:1D8D 00 21 08 00 23 01 db 00h, 21h, 08h, 00h, 23h, 01h
-450F:1D93 00 23 E8 03 27 33 db 00h, 23h,0E8h, 03h, 27h, 33h
-450F:1D99 00 23 01 00 21 2C db 00h, 23h, 01h, 00h, 21h, 2Ch
-450F:1D9F 00 1F 26 00 23 06 db 00h, 1Fh, 26h, 00h, 23h, 06h
-450F:1DA5 00 0A 2B 0F 00 23 db 00h, 0Ah, 2Bh, 0Fh, 00h, 23h
-450F:1DAB C4 0C 23 E8 03 23 db 0C4h, 0Ch, 23h,0E8h, 03h, 23h
-450F:1DB1 21 04 27 1D 00 2D db 21h, 04h, 27h, 1Dh, 00h, 2Dh
-450F:1DB7 0C 00 23 7A 08 23 db 0Ch, 00h, 23h, 7Ah, 08h, 23h
-450F:1DBD E8 03 23 21 04 27 db 0E8h, 03h, 23h, 21h, 04h, 27h
-450F:1DC3 1D 00 28 23 18 08 db 1Dh, 00h, 28h, 23h, 18h, 08h
-450F:1DC9 27 10 00 28 27 34 db 27h, 10h, 00h, 28h, 27h, 34h
-450F:1DCF 00 28 1F 26 00 23 db 00h, 28h, 1Fh, 26h, 00h, 23h
-450F:1DD5 17 00 0C 2B 06 00 db 17h, 00h, 0Ch, 2Bh, 06h, 00h
-450F:1DDB 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:1DE1 28 23 23 00 23 E8 db 28h, 23h, 23h, 00h, 23h,0E8h
-450F:1DE7 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:1DED 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:1DF3 09 00 23 23 00 23 db 09h, 00h, 23h, 23h, 00h, 23h
-450F:1DF9 EC 03 27 28 00 28 db 0ECh, 03h, 27h, 28h, 00h, 28h
-450F:1DFF 23 03 00 23 37 04 db 23h, 03h, 00h, 23h, 37h, 04h
-450F:1E05 27 01 00 23 03 00 db 27h, 01h, 00h, 23h, 03h, 00h
-450F:1E0B 21 26 00 23 01 00 db 21h, 26h, 00h, 23h, 01h, 00h
-450F:1E11 21 86 00 28 1F 02 db 21h, 86h, 00h, 28h, 1Fh, 02h
-450F:1E17 00 23 E8 03 0A 2B db 00h, 23h,0E8h, 03h, 0Ah, 2Bh
-450F:1E1D 22 00 1F 86 00 23 db 22h, 00h, 1Fh, 86h, 00h, 23h
-450F:1E23 00 00 0A 2B 18 00 db 00h, 00h, 0Ah, 2Bh, 18h, 00h
-450F:1E29 25 FF 1D 23 ED 0F db 25h,0FFh, 1Dh, 23h,0EDh, 0Fh
-450F:1E2F 23 E8 03 23 37 04 db 23h,0E8h, 03h, 23h, 37h, 04h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 643
-
-450F:1E35 27 1D 00 23 F3 03 db 27h, 1Dh, 00h, 23h,0F3h, 03h
-450F:1E3B 23 0D 00 27 31 00 db 23h, 0Dh, 00h, 27h, 31h, 00h
-450F:1E41 28 1F 02 00 27 35 db 28h, 1Fh, 02h, 00h, 27h, 35h
-450F:1E47 00 28 1F 7E 00 23 db 00h, 28h, 1Fh, 7Eh, 00h, 23h
-450F:1E4D 01 00 0A 2B 18 00 db 01h, 00h, 0Ah, 2Bh, 18h, 00h
-450F:1E53 1F 02 00 27 06 00 db 1Fh, 02h, 00h, 27h, 06h, 00h
-450F:1E59 23 39 04 27 06 00 db 23h, 39h, 04h, 27h, 06h, 00h
-450F:1E5F 23 38 04 27 00 00 db 23h, 38h, 04h, 27h, 00h, 00h
-450F:1E65 23 01 00 21 80 00 db 23h, 01h, 00h, 21h, 80h, 00h
-450F:1E6B 28 1F 4A 00 23 01 db 28h, 1Fh, 4Ah, 00h, 23h, 01h
-450F:1E71 00 0A 2B 06 00 1F db 00h, 0Ah, 2Bh, 06h, 00h, 1Fh
-450F:1E77 4A 00 21 08 00 28 db 4Ah, 00h, 21h, 08h, 00h, 28h
-450F:1E7D 23 17 27 27 16 00 db 23h, 17h, 27h, 27h, 16h, 00h
-450F:1E83 1F 0A 00 21 08 00 db 1Fh, 0Ah, 00h, 21h, 08h, 00h
-450F:1E89 28 23 1E 00 23 E8 db 28h, 23h, 1Eh, 00h, 23h,0E8h
-450F:1E8F 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:1E95 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:1E9B 3D 00 1F 26 00 23 db 3Dh, 00h, 1Fh, 26h, 00h, 23h
-450F:1EA1 06 00 0C 2B 1E 00 db 06h, 00h, 0Ch, 2Bh, 1Eh, 00h
-450F:1EA7 27 36 00 23 0E 00 db 27h, 36h, 00h, 23h, 0Eh, 00h
-450F:1EAD 1F 02 00 27 31 00 db 1Fh, 02h, 00h, 27h, 31h, 00h
-450F:1EB3 23 02 00 21 16 00 db 23h, 02h, 00h, 21h, 16h, 00h
-450F:1EB9 23 8E 0B 1F 02 00 db 23h, 8Eh, 0Bh, 1Fh, 02h, 00h
-450F:1EBF 27 13 00 2D 12 00 db 27h, 13h, 00h, 2Dh, 12h, 00h
-450F:1EC5 23 A6 0C 1F 02 00 db 23h,0A6h, 0Ch, 1Fh, 02h, 00h
-450F:1ECB 27 13 00 23 19 00 db 27h, 13h, 00h, 23h, 19h, 00h
-450F:1ED1 1F 02 00 27 31 00 db 1Fh, 02h, 00h, 27h, 31h, 00h
-450F:1ED7 2D 09 00 23 50 0B db 2Dh, 09h, 00h, 23h, 50h, 0Bh
-450F:1EDD 1F 02 00 27 13 00 db 1Fh, 02h, 00h, 27h, 13h, 00h
-450F:1EE3 28 1F 30 00 21 08 db 28h, 1Fh, 30h, 00h, 21h, 08h
-450F:1EE9 00 23 8F 0B 1F 02 db 00h, 23h, 8Fh, 0Bh, 1Fh, 02h
-450F:1EEF 00 27 13 00 28 1F db 00h, 27h, 13h, 00h, 28h, 1Fh
-450F:1EF5 90 00 23 01 00 02 db 90h, 00h, 23h, 01h, 00h, 02h
-450F:1EFB 21 90 00 1F 90 00 db 21h, 90h, 00h, 1Fh, 90h, 00h
-450F:1F01 23 03 00 0A 2B 06 db 23h, 03h, 00h, 0Ah, 2Bh, 06h
-450F:1F07 00 23 00 00 21 90 db 00h, 23h, 00h, 00h, 21h, 90h
-450F:1F0D 00 23 0F 00 1F 90 db 00h, 23h, 0Fh, 00h, 1Fh, 90h
-450F:1F13 00 02 23 F1 03 27 db 00h, 02h, 23h,0F1h, 03h, 27h
-450F:1F19 31 00 28 1F 9E 00 db 31h, 00h, 28h, 1Fh, 9Eh, 00h
-450F:1F1F 23 01 00 02 21 9E db 23h, 01h, 00h, 02h, 21h, 9Eh
-450F:1F25 00 1F 9E 00 23 03 db 00h, 1Fh, 9Eh, 00h, 23h, 03h
-450F:1F2B 00 0A 2B 06 00 23 db 00h, 0Ah, 2Bh, 06h, 00h, 23h
-450F:1F31 00 00 21 9E 00 23 db 00h, 00h, 21h, 9Eh, 00h, 23h
-450F:1F37 1B 00 1F 9E 00 02 db 1Bh, 00h, 1Fh, 9Eh, 00h, 02h
-450F:1F3D 23 EB 03 27 31 00 db 23h,0EBh, 03h, 27h, 31h, 00h
-450F:1F43 28 1F 92 00 23 01 db 28h, 1Fh, 92h, 00h, 23h, 01h
-450F:1F49 00 02 21 92 00 1F db 00h, 02h, 21h, 92h, 00h, 1Fh
-450F:1F4F 92 00 23 03 00 0A db 92h, 00h, 23h, 03h, 00h, 0Ah
-450F:1F55 2B 06 00 23 00 00 db 2Bh, 06h, 00h, 23h, 00h, 00h
-450F:1F5B 21 92 00 23 14 00 db 21h, 92h, 00h, 23h, 14h, 00h
-450F:1F61 1F 92 00 02 23 EC db 1Fh, 92h, 00h, 02h, 23h,0ECh
-450F:1F67 03 27 31 00 28 1F db 03h, 27h, 31h, 00h, 28h, 1Fh
-450F:1F6D 26 00 23 14 00 10 db 26h, 00h, 23h, 14h, 00h, 10h
-450F:1F73 2B 09 00 23 1E 00 db 2Bh, 09h, 00h, 23h, 1Eh, 00h
-450F:1F79 23 EC 03 27 31 00 db 23h,0ECh, 03h, 27h, 31h, 00h
-450F:1F7F 28 1F 26 00 23 07 db 28h, 1Fh, 26h, 00h, 23h, 07h
-450F:1F85 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 644
-
-450F:1F8B 1F 00 23 ED 03 27 db 1Fh, 00h, 23h,0EDh, 03h, 27h
-450F:1F91 31 00 28 1F 26 00 db 31h, 00h, 28h, 1Fh, 26h, 00h
-450F:1F97 23 0A 00 0A 2B 09 db 23h, 0Ah, 00h, 0Ah, 2Bh, 09h
-450F:1F9D 00 23 20 00 23 ED db 00h, 23h, 20h, 00h, 23h,0EDh
-450F:1FA3 03 27 31 00 28 1F db 03h, 27h, 31h, 00h, 28h, 1Fh
-450F:1FA9 1A 00 23 01 00 0A db 1Ah, 00h, 23h, 01h, 00h, 0Ah
-450F:1FAF 2B 09 00 23 00 00 db 2Bh, 09h, 00h, 23h, 00h, 00h
-450F:1FB5 21 08 00 2D 06 00 db 21h, 08h, 00h, 2Dh, 06h, 00h
-450F:1FBB 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:1FC1 28 23 01 00 21 1A db 28h, 23h, 01h, 00h, 21h, 1Ah
-450F:1FC7 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:1FCD 00 28 1F 1E 00 23 db 00h, 28h, 1Fh, 1Eh, 00h, 23h
-450F:1FD3 00 00 0A 2B 09 00 db 00h, 00h, 0Ah, 2Bh, 09h, 00h
-450F:1FD9 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:1FDF 2D 06 00 23 01 00 db 2Dh, 06h, 00h, 23h, 01h, 00h
-450F:1FE5 21 08 00 28 23 14 db 21h, 08h, 00h, 28h, 23h, 14h
-450F:1FEB 27 27 23 00 23 02 db 27h, 27h, 23h, 00h, 23h, 02h
-450F:1FF1 01 27 10 00 23 03 db 01h, 27h, 10h, 00h, 23h, 03h
-450F:1FF7 01 23 12 04 27 0B db 01h, 23h, 12h, 04h, 27h, 0Bh
-450F:1FFD 00 23 03 00 21 1E db 00h, 23h, 03h, 00h, 21h, 1Eh
-450F:2003 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:2009 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:200F 08 00 23 3F 01 23 db 08h, 00h, 23h, 3Fh, 01h, 23h
-450F:2015 12 04 27 0C 00 28 db 12h, 04h, 27h, 0Ch, 00h, 28h
-450F:201B 23 D6 07 21 08 00 db 23h,0D6h, 07h, 21h, 08h, 00h
-450F:2021 23 D4 07 23 EC 03 db 23h,0D4h, 07h, 23h,0ECh, 03h
-450F:2027 27 0C 00 28 1F 26 db 27h, 0Ch, 00h, 28h, 1Fh, 26h
-450F:202D 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:2033 06 00 23 01 00 21 db 06h, 00h, 23h, 01h, 00h, 21h
-450F:2039 08 00 28 1F 26 00 db 08h, 00h, 28h, 1Fh, 26h, 00h
-450F:203F 23 02 00 0A 2B 06 db 23h, 02h, 00h, 0Ah, 2Bh, 06h
-450F:2045 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:204B 00 28 23 EE 07 21 db 00h, 28h, 23h,0EEh, 07h, 21h
-450F:2051 08 00 23 4C 01 23 db 08h, 00h, 23h, 4Ch, 01h, 23h
-450F:2057 EB 03 27 0C 00 28 db 0EBh, 03h, 27h, 0Ch, 00h, 28h
-450F:205D 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:2063 1F 00 00 23 1C 00 db 1Fh, 00h, 00h, 23h, 1Ch, 00h
-450F:2069 0A 2B 06 00 23 02 db 0Ah, 2Bh, 06h, 00h, 23h, 02h
-450F:206F 00 21 08 00 1F 00 db 00h, 21h, 08h, 00h, 1Fh, 00h
-450F:2075 00 23 1D 00 0A 2B db 00h, 23h, 1Dh, 00h, 0Ah, 2Bh
-450F:207B 06 00 23 02 00 21 db 06h, 00h, 23h, 02h, 00h, 21h
-450F:2081 08 00 1F 08 00 23 db 08h, 00h, 1Fh, 08h, 00h, 23h
-450F:2087 01 00 0A 2B 09 00 db 01h, 00h, 0Ah, 2Bh, 09h, 00h
-450F:208D 23 1A 00 23 EB 03 db 23h, 1Ah, 00h, 23h,0EBh, 03h
-450F:2093 27 31 00 28 23 03 db 27h, 31h, 00h, 28h, 23h, 03h
-450F:2099 00 21 08 00 1F 00 db 00h, 21h, 08h, 00h, 1Fh, 00h
-450F:209F 00 23 1C 00 0A 2B db 00h, 23h, 1Ch, 00h, 0Ah, 2Bh
-450F:20A5 06 00 23 04 00 21 db 06h, 00h, 23h, 04h, 00h, 21h
-450F:20AB 08 00 1F 00 00 23 db 08h, 00h, 1Fh, 00h, 00h, 23h
-450F:20B1 1D 00 0A 2B 06 00 db 1Dh, 00h, 0Ah, 2Bh, 06h, 00h
-450F:20B7 23 04 00 21 08 00 db 23h, 04h, 00h, 21h, 08h, 00h
-450F:20BD 28 23 02 00 21 26 db 28h, 23h, 02h, 00h, 21h, 26h
-450F:20C3 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:20C9 00 28 23 01 08 21 db 00h, 28h, 23h, 01h, 08h, 21h
-450F:20CF 08 00 1F 2A 00 23 db 08h, 00h, 1Fh, 2Ah, 00h, 23h
-450F:20D5 00 00 0A 2B 06 00 db 00h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:20DB 23 FF 07 21 08 00 db 23h,0FFh, 07h, 21h, 08h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 645
-
-450F:20E1 28 23 04 00 21 26 db 28h, 23h, 04h, 00h, 21h, 26h
-450F:20E7 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:20ED 00 28 23 13 08 23 db 00h, 28h, 23h, 13h, 08h, 23h
-450F:20F3 21 04 27 0C 00 23 db 21h, 04h, 27h, 0Ch, 00h, 23h
-450F:20F9 0A 08 21 08 00 db 0Ah, 08h, 21h, 08h, 00h
-450F:20FE 28 23 db 28h, 23h
-450F:2100 0000 data_1426 dw 0
-450F:2102 23 01 00 23 12 21 db 23h, 01h, 00h, 23h, 12h, 21h
-450F:2108 0827 data_1427 dw 827h ; Data table (indexed access)
-450F:210A 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:2110 00 28 23 C3 08 23 db 00h, 28h, 23h,0C3h, 08h, 23h
-450F:2116 29 04 27 13 00 28 db 29h, 04h, 27h, 13h, 00h, 28h
-450F:211C 1F 2C 00 23 00 00 db 1Fh, 2Ch, 00h, 23h, 00h, 00h
-450F:2122 0C 2B 0F 00 23 02 db 0Ch, 2Bh, 0Fh, 00h, 23h, 02h
-450F:2128 00 21 08 00 23 03 db 00h, 21h, 08h, 00h, 23h, 03h
-450F:212E 00 21 26 00 2D 06 db 00h, 21h, 26h, 00h, 2Dh, 06h
-450F:2134 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:213A 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:2140 08 00 23 18 08 27 db 08h, 00h, 23h, 18h, 08h, 27h
-450F:2146 10 00 28 23 47 01 db 10h, 00h, 28h, 23h, 47h, 01h
-450F:214C 23 22 04 27 0C 00 db 23h, 22h, 04h, 27h, 0Ch, 00h
-450F:2152 23 1F 08 21 08 00 db 23h, 1Fh, 08h, 21h, 08h, 00h
-450F:2158 28 23 28 08 27 10 db 28h, 23h, 28h, 08h, 27h, 10h
-450F:215E 00 23 05 00 21 26 db 00h, 23h, 05h, 00h, 21h, 26h
-450F:2164 00 23 1B 27 27 32 db 00h, 23h, 1Bh, 27h, 27h, 32h
-450F:216A 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:2170 00 28 23 45 01 23 db 00h, 28h, 23h, 45h, 01h, 23h
-450F:2176 22 04 27 0C 00 23 db 22h, 04h, 27h, 0Ch, 00h, 23h
-450F:217C 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:2182 27 37 00 23 01 00 db 27h, 37h, 00h, 23h, 01h, 00h
-450F:2188 23 26 04 27 1E 00 db 23h, 26h, 04h, 27h, 1Eh, 00h
-450F:218E 23 01 00 23 28 04 db 23h, 01h, 00h, 23h, 28h, 04h
-450F:2194 27 1E 00 23 01 00 db 27h, 1Eh, 00h, 23h, 01h, 00h
-450F:219A 21 40 00 23 92 10 db 21h, 40h, 00h, 23h, 92h, 10h
-450F:21A0 21 08 00 28 23 94 db 21h, 08h, 00h, 28h, 23h, 94h
-450F:21A6 08 23 20 04 27 0C db 08h, 23h, 20h, 04h, 27h, 0Ch
-450F:21AC 00 23 8F 08 21 08 db 00h, 23h, 8Fh, 08h, 21h, 08h
-450F:21B2 00 28 23 01 00 21 db 00h, 28h, 23h, 01h, 00h, 21h
-450F:21B8 3E 00 27 38 00 23 db 3Eh, 00h, 27h, 38h, 00h, 23h
-450F:21BE 95 08 21 08 00 23 db 95h, 08h, 21h, 08h, 00h, 23h
-450F:21C4 00 00 23 32 00 23 db 00h, 00h, 23h, 32h, 00h, 23h
-450F:21CA D9 21 27 08 00 23 db 0D9h, 21h, 27h, 08h, 00h, 23h
-450F:21D0 01 00 23 E8 03 27 db 01h, 00h, 23h,0E8h, 03h, 27h
-450F:21D6 33 00 28 23 00 00 db 33h, 00h, 28h, 23h, 00h, 00h
-450F:21DC 21 3E 00 28 1F 3E db 21h, 3Eh, 00h, 28h, 1Fh, 3Eh
-450F:21E2 00 23 00 00 0C 2B db 00h, 23h, 00h, 00h, 0Ch, 2Bh
-450F:21E8 06 00 23 92 10 21 db 06h, 00h, 23h, 92h, 10h, 21h
-450F:21EE 08 00 28 1F 3E 00 db 08h, 00h, 28h, 1Fh, 3Eh, 00h
-450F:21F4 23 00 00 0A 2B 06 db 23h, 00h, 00h, 0Ah, 2Bh, 06h
-450F:21FA 00 23 91 08 21 08 db 00h, 23h, 91h, 08h, 21h, 08h
-450F:2200 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:2206 08 00 27 39 00 1F db 08h, 00h, 27h, 39h, 00h, 1Fh
-450F:220C 0A 00 23 00 00 0A db 0Ah, 00h, 23h, 00h, 00h, 0Ah
-450F:2212 2B 06 00 23 01 00 db 2Bh, 06h, 00h, 23h, 01h, 00h
-450F:2218 21 08 00 28 23 1D db 21h, 08h, 00h, 28h, 23h, 1Dh
-450F:221E 00 23 EB 03 27 28 db 00h, 23h,0EBh, 03h, 27h, 28h
-450F:2224 00 1F 08 00 23 00 db 00h, 1Fh, 08h, 00h, 23h, 00h
-450F:222A 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:2230 93 08 21 08 00 2D db 93h, 08h, 21h, 08h, 00h, 2Dh
-450F:2236 06 00 23 92 08 21 db 06h, 00h, 23h, 92h, 08h, 21h
-450F:223C 08 00 28 23 A7 08 db 08h, 00h, 28h, 23h,0A7h, 08h
-450F:2242 23 1F 04 27 0C 00 db 23h, 1Fh, 04h, 27h, 0Ch, 00h
-450F:2248 23 A8 08 21 08 00 db 23h,0A8h, 08h, 21h, 08h, 00h
-450F:224E 28 23 1C 00 23 EB db 28h, 23h, 1Ch, 00h, 23h,0EBh
-450F:2254 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:225A 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:2260 09 00 23 A9 08 21 db 09h, 00h, 23h,0A9h, 08h, 21h
-450F:2266 08 00 2D 06 00 23 db 08h, 00h, 2Dh, 06h, 00h, 23h
-450F:226C AA 08 21 08 00 28 db 0AAh, 08h, 21h, 08h, 00h, 28h
-450F:2272 23 B6 08 27 10 00 db 23h,0B6h, 08h, 27h, 10h, 00h
-450F:2278 23 08 00 21 26 00 db 23h, 08h, 00h, 21h, 26h, 00h
-450F:227E 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:2284 28 23 BB 08 23 29 db 28h, 23h,0BBh, 08h, 23h, 29h
-450F:228A 04 27 0C 00 23 BC db 04h, 27h, 0Ch, 00h, 23h,0BCh
-450F:2290 08 21 08 00 28 27 db 08h, 21h, 08h, 00h, 28h, 27h
-450F:2296 38 00 23 01 00 23 db 38h, 00h, 23h, 01h, 00h, 23h
-450F:229C E8 03 27 33 00 23 db 0E8h, 03h, 27h, 33h, 00h, 23h
-450F:22A2 95 08 21 08 00 28 db 95h, 08h, 21h, 08h, 00h, 28h
-450F:22A8 23 DA 08 27 10 00 db 23h,0DAh, 08h, 27h, 10h, 00h
-450F:22AE 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:22B4 28 23 4F 01 23 ED db 28h, 23h, 4Fh, 01h, 23h,0EDh
-450F:22BA 03 27 0C 00 23 DD db 03h, 27h, 0Ch, 00h, 23h,0DDh
-450F:22C0 08 21 08 00 28 23 db 08h, 21h, 08h, 00h, 28h, 23h
-450F:22C6 EB 08 21 08 00 1F db 0EBh, 08h, 21h, 08h, 00h, 1Fh
-450F:22CC 44 00 23 01 db 44h, 00h, 23h, 01h
-450F:22D0 loc_2372:
-450F:22D0 00 0A add [bp+si],cl
-450F:22D2 2B 06 2300 sub ax,word ptr ds:[2300h] ; (450F:2300=26h)
-450F:22D6 EC in al,dx ; port 0FFD0h ??I/O Non-standard
-450F:22D7 08 21 or [bx+di],ah
-450F:22D9 08 00 or [bx+si],al
-450F:22DB 1F pop ds
-450F:22DC 44 inc sp
-450F:22DD 00 23 add [bp+di],ah
-450F:22DF 01 00 add [bx+si],ax
-450F:22E1 10 2B adc [bp+di],ch
-450F:22E3 06 push es
-450F:22E4 00 23 add [bp+di],ah
-450F:22E6 ED in ax,dx ; port 0FFD0h ??I/O Non-standard
-450F:22E7 08 21 or [bx+di],ah
-450F:22E9 08 00 or [bx+si],al
-450F:22EB 1F pop ds
-450F:22EC 44 inc sp
-450F:22ED 00 23 add [bp+di],ah
-450F:22EF 01 00 add [bx+si],ax
-450F:22F1 02 21 add ah,[bx+di]
-450F:22F3 44 inc sp
-450F:22F4 00 28 add [bx+si],ch
-450F:22F6 23 92 2110 and dx,[bp+si+2110h]
-450F:22FA 08 00 or [bx+si],al
-450F:22FC 23 0A and cx,[bp+si]
-450F:22FE 00 21 add [bx+di],ah
-450F:2300 26: 00 23 add es:[bp+di],ah
-450F:2303 F0> 08 27 lock or [bx],ah
-450F:2306 10 00 adc [bx+si],al
-450F:2308 23 23 and sp,[bp+di]
-450F:230A 27 daa ; Decimal adjust
-450F:230B 27 daa ; Decimal adjust
-450F:230C 32 00 xor al,[bx+si]
-450F:230E 28 23 sub [bp+di],ah
-450F:2310 F9 stc ; Set carry flag
-450F:2311 08 21 or [bx+di],ah
-450F:2313 08 00 or [bx+si],al
-450F:2315 1F pop ds
-450F:2316 08 00 or [bx+si],al
-450F:2318 1F pop ds
-450F:2319 46 inc si
-450F:231A 00 02 add [bp+si],al
-450F:231C 21 08 and [bx+si],cx
-450F:231E 00 1F add [bx],bl
-450F:2320 46 inc si
-450F:2321 00 23 add [bp+di],ah
-450F:2323 04 00 add al,0
-450F:2325 0E push cs
-450F:2326 2B 0A sub cx,[bp+si]
-450F:2328 00 1F add [bx],bl
-450F:232A 46 inc si
-450F:232B 00 23 add [bp+di],ah
-450F:232D 01 00 add [bx+si],ax
-450F:232F 02 21 add ah,[bx+di]
-450F:2331 46 inc si
-450F:2332 00 28 add [bx+si],ch
-450F:2334 1F pop ds
-450F:2335 46 inc si
-450F:2336 00 23 add [bp+di],ah
-450F:2338 03 00 add ax,[bx+si]
-450F:233A 0A 2B or ch,[bp+di]
-450F:233C 0C 00 or al,0
-450F:233E 23 00 and ax,[bx+si]
-450F:2340 00 23 add [bp+di],ah
-450F:2342 01 00 add [bx+si],ax
-450F:2344 23 51 23 and dx,[bx+di+23h]
-450F:2347 27 daa ; Decimal adjust
-450F:2348 08 00 or [bx+si],al
-450F:234A 23 92 2110 and dx,[bp+si+2110h]
-450F:234E 08 00 or [bx+si],al
-450F:2350 28 23 sub [bp+di],ah
-450F:2352 FE 08 dec byte ptr [bx+si]
-450F:2354 23 29 and bp,[bx+di]
-450F:2356 04 27 add al,27h ; '''
-450F:2358 13 00 adc ax,[bx+si]
-450F:235A 28 27 sub [bx],ah
-450F:235C 3A 00 cmp al,[bx+si]
-450F:235E 1F pop ds
-450F:235F 08 00 or [bx+si],al
-450F:2361 1F pop ds
-450F:2362 48 dec ax
-450F:2363 00 04 add [si],al
-450F:2365 21 08 and [bx+si],cx
-450F:2367 00 28 add [bx+si],ch
-450F:2369 27 daa ; Decimal adjust
-450F:236A 3A 00 cmp al,[bx+si]
-450F:236C 28 27 sub [bx],ah
-450F:236E 3A 00 cmp al,[bx+si]
-450F:2370 1F pop ds
-450F:2371 08 00 or [bx+si],al
-450F:2373 23 01 and ax,[bx+di]
-450F:2375 00 0A add [bp+si],cl
-450F:2377 2B 09 sub cx,[bx+di]
-450F:2379 00 23 add [bp+di],ah
-450F:237B 00 00 add [bx+si],al
-450F:237D 21 08 and [bx+si],cx
-450F:237F 00 2D add [di],ch
-450F:2381 10 00 adc [bx+si],al
-450F:2383 1F pop ds
-450F:2384 08 00 or [bx+si],al
-450F:2386 23 00 and ax,[bx+si]
-450F:2388 00 0A add [bp+si],cl
-450F:238A 2B 06 2300 sub ax,ds:data_33e ; (0000:2300=1226h)
-450F:238E 01 00 add [bx+si],ax
-450F:2390 21 08 and [bx+si],cx
-450F:2392 00 28 add [bx+si],ch
-450F:2394 23 21 and sp,[bx+di]
-450F:2396 09 27 or [bx],sp
-450F:2398 10 00 adc [bx+si],al
-450F:239A 23 23 and sp,[bp+di]
-450F:239C 27 daa ; Decimal adjust
-450F:239D 27 daa ; Decimal adjust
-450F:239E 32 00 xor al,[bx+si]
-450F:23A0 23 92 2110 and dx,[bp+si+2110h]
-450F:23A4 08 00 or [bx+si],al
-450F:23A6 23 01 and ax,[bx+di]
-450F:23A8 00 21 add [bx+di],ah
-450F:23AA 4A dec dx
-450F:23AB 00 23 add [bp+di],ah
-450F:23AD 0A 00 or al,[bx+si]
-450F:23AF 21 26 2300 and ds:data_33e,sp ; (0000:2300=1226h)
-450F:23B3 01 00 add [bx+si],ax
-450F:23B5 21 48 00 ;* and [bx+si+0],cx
-450F:23B5 21 48 00 db 21h, 48h, 00h
-450F:23B8 28 23 00 00 23 E9 db 28h, 23h, 00h, 00h, 23h,0E9h
-450F:23BE 03 23 0D 00 27 24 db 03h, 23h, 0Dh, 00h, 27h, 24h
-450F:23C4 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:23CA 00 28 23 FC 08 21 db 00h, 28h, 23h,0FCh, 08h, 21h
-450F:23D0 08 00 28 1F 00 00 db 08h, 00h, 28h, 1Fh, 00h, 00h
-450F:23D6 23 E9 03 27 28 00 db 23h,0E9h, 03h, 27h, 28h, 00h
-450F:23DC 1F 08 00 23 01 00 db 1Fh, 08h, 00h, 23h, 01h, 00h
-450F:23E2 0A 2B 09 00 23 92 db 0Ah, 2Bh, 09h, 00h, 23h, 92h
-450F:23E8 10 21 08 00 2D 0C db 10h, 21h, 08h, 00h, 2Dh, 0Ch
-450F:23EE 00 23 0B 00 21 08 db 00h, 23h, 0Bh, 00h, 21h, 08h
-450F:23F4 00 23 01 00 21 4C db 00h, 23h, 01h, 00h, 21h, 4Ch
-450F:23FA 00 28 db 00h, 28h
-
-450F:23FC 23 01 00 21 startup_sequence db 23h, 01h, 00h, 21h
-450F:2400 12 00 23 E8 03 27 db 12h, 00h, 23h,0E8h, 03h, 27h
-450F:2406 00 00 23 EA 03 27 db 00h, 00h, 23h,0EAh, 03h, 27h
-450F:240C 00 00 23 12 27 27 db 00h, 00h, 23h, 12h, 27h, 27h
-450F:2412 00 00 23 14 27 27 db 00h, 00h, 23h, 14h, 27h, 27h
-450F:2418 00 00 23 00 00 23 db 00h, 00h, 23h, 00h, 00h, 23h
-450F:241E 14 00 23 C7 2A 27 db 14h, 00h, 23h,0C7h, 2Ah, 27h
-450F:2424 08 00 23 6B 04 27 db 08h, 00h, 23h, 6Bh, 04h, 27h
-450F:242A 00 00 28 23 92 10 db 00h, 00h, 28h, 23h, 92h, 10h
-450F:2430 21 08 00 1F 4C 00 db 21h, 08h, 00h, 1Fh, 4Ch, 00h
-450F:2436 23 01 00 0A 2B 22 db 23h, 01h, 00h, 0Ah, 2Bh, 22h
-450F:243C 00 1F 00 00 23 E9 db 00h, 1Fh, 00h, 00h, 23h,0E9h
-450F:2442 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:2448 00 23 01 00 0A 2B db 00h, 23h, 01h, 00h, 0Ah, 2Bh
-450F:244E 09 00 23 0D 00 21 db 09h, 00h, 23h, 0Dh, 00h, 21h
-450F:2454 08 00 2D 06 00 23 db 08h, 00h, 2Dh, 06h, 00h, 23h
-450F:245A 0C 00 21 08 00 28 db 0Ch, 00h, 21h, 08h, 00h, 28h
-450F:2460 23 0F 09 23 EE 03 db 23h, 0Fh, 09h, 23h,0EEh, 03h
-450F:2466 27 0C 00 23 28 09 db 27h, 0Ch, 00h, 23h, 28h, 09h
-450F:246C 21 08 00 28 1F 26 db 21h, 08h, 00h, 28h, 1Fh, 26h
-450F:2472 00 23 0B 00 0A 2B db 00h, 23h, 0Bh, 00h, 0Ah, 2Bh
-450F:2478 0C 00 23 2D 09 27 db 0Ch, 00h, 23h, 2Dh, 09h, 27h
-450F:247E 10 00 23 01 00 21 db 10h, 00h, 23h, 01h, 00h, 21h
-450F:2484 4E 00 23 92 10 21 db 4Eh, 00h, 23h, 92h, 10h, 21h
-450F:248A 08 00 28 1F 4E 00 db 08h, 00h, 28h, 1Fh, 4Eh, 00h
-450F:2490 21 08 00 28 23 34 db 21h, 08h, 00h, 28h, 23h, 34h
-450F:2496 09 23 F0 03 27 0C db 09h, 23h,0F0h, 03h, 27h, 0Ch
-450F:249C 00 23 35 09 21 08 db 00h, 23h, 35h, 09h, 21h, 08h
-450F:24A2 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:24A8 08 00 1F 50 00 23 db 08h, 00h, 1Fh, 50h, 00h, 23h
-450F:24AE 01 00 0A 2B 06 00 db 01h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:24B4 23 01 00 21 08 00 db 23h, 01h, 00h, 21h, 08h, 00h
-450F:24BA 28 23 92 10 21 08 db 28h, 23h, 92h, 10h, 21h, 08h
-450F:24C0 00 23 01 00 21 50 db 00h, 23h, 01h, 00h, 21h, 50h
-450F:24C6 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:24CC 08 00 1F 52 00 23 db 08h, 00h, 1Fh, 52h, 00h, 23h
-450F:24D2 01 00 0A 2B 06 00 db 01h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:24D8 23 05 00 21 08 00 db 23h, 05h, 00h, 21h, 08h, 00h
-450F:24DE 28 23 92 10 21 08 db 28h, 23h, 92h, 10h, 21h, 08h
-450F:24E4 00 23 01 00 21 52 db 00h, 23h, 01h, 00h, 21h, 52h
-450F:24EA 00 28 23 55 09 23 db 00h, 28h, 23h, 55h, 09h, 23h
-450F:24F0 2B 04 27 0C 00 23 db 2Bh, 04h, 27h, 0Ch, 00h, 23h
-450F:24F6 58 09 21 08 00 28 db 58h, 09h, 21h, 08h, 00h, 28h
-450F:24FC 23 00 00 21 56 00 db 23h, 00h, 00h, 21h, 56h, 00h
-450F:2502 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:2508 28 23 00 00 21 58 db 28h, 23h, 00h, 00h, 21h, 58h
-450F:250E 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:2514 00 28 1F 56 00 21 db 00h, 28h, 1Fh, 56h, 00h, 21h
-450F:251A 08 00 28 1F 58 00 db 08h, 00h, 28h, 1Fh, 58h, 00h
-450F:2520 21 08 00 28 23 0E db 21h, 08h, 00h, 28h, 23h, 0Eh
-450F:2526 00 21 26 00 1F 70 db 00h, 21h, 26h, 00h, 1Fh, 70h
-450F:252C 00 23 02 00 0A 2B db 00h, 23h, 02h, 00h, 0Ah, 2Bh
-450F:2532 21 00 23 01 00 21 db 21h, 00h, 23h, 01h, 00h, 21h
-450F:2538 5A 00 23 0D 00 23 db 5Ah, 00h, 23h, 0Dh, 00h, 23h
-450F:253E EF 03 27 01 00 23 db 0EFh, 03h, 27h, 01h, 00h, 23h
-450F:2544 00 00 23 28 00 23 db 00h, 00h, 23h, 28h, 00h, 23h
-450F:254A 80 26 27 08 00 23 db 80h, 26h, 27h, 08h, 00h, 23h
-450F:2550 92 10 21 08 00 1F db 92h, 10h, 21h, 08h, 00h, 1Fh
-450F:2556 70 00 23 01 00 0A db 70h, 00h, 23h, 01h, 00h, 0Ah
-450F:255C 2B 0C 00 23 0A 00 db 2Bh, 0Ch, 00h, 23h, 0Ah, 00h
-450F:2562 21 08 00 23 33 27 db 21h, 08h, 00h, 23h, 33h, 27h
-450F:2568 27 23 00 1F 70 00 db 27h, 23h, 00h, 1Fh, 70h, 00h
-450F:256E 23 00 00 0A 2B 0C db 23h, 00h, 00h, 0Ah, 2Bh, 0Ch
-450F:2574 00 23 32 27 27 23 db 00h, 23h, 32h, 27h, 27h, 23h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 650
-
-450F:257A 00 23 09 00 21 08 db 00h, 23h, 09h, 00h, 21h, 08h
-450F:2580 00 28 23 00 00 21 db 00h, 28h, 23h, 00h, 00h, 21h
-450F:2586 70 00 23 92 10 21 db 70h, 00h, 23h, 92h, 10h, 21h
-450F:258C 08 00 28 23 01 00 db 08h, 00h, 28h, 23h, 01h, 00h
-450F:2592 21 70 00 23 92 10 db 21h, 70h, 00h, 23h, 92h, 10h
-450F:2598 21 08 00 28 23 02 db 21h, 08h, 00h, 28h, 23h, 02h
-450F:259E 00 21 70 00 23 92 db 00h, 21h, 70h, 00h, 23h, 92h
-450F:25A4 10 21 08 00 28 1F db 10h, 21h, 08h, 00h, 28h, 1Fh
-450F:25AA 5A 00 23 00 00 0A db 5Ah, 00h, 23h, 00h, 00h, 0Ah
-450F:25B0 2B 06 00 23 01 00 db 2Bh, 06h, 00h, 23h, 01h, 00h
-450F:25B6 21 08 00 28 1F 5A db 21h, 08h, 00h, 28h, 1Fh, 5Ah
-450F:25BC 00 23 00 00 0C 2B db 00h, 23h, 00h, 00h, 0Ch, 2Bh
-450F:25C2 06 00 23 01 00 21 db 06h, 00h, 23h, 01h, 00h, 21h
-450F:25C8 08 00 28 23 24 00 db 08h, 00h, 28h, 23h, 24h, 00h
-450F:25CE 21 08 00 1F 02 00 db 21h, 08h, 00h, 1Fh, 02h, 00h
-450F:25D4 23 E9 03 0A 2B 06 db 23h,0E9h, 03h, 0Ah, 2Bh, 06h
-450F:25DA 00 23 34 00 21 08 db 00h, 23h, 34h, 00h, 21h, 08h
-450F:25E0 00 1F 70 00 23 01 db 00h, 1Fh, 70h, 00h, 23h, 01h
-450F:25E6 00 0A 2B 37 00 1F db 00h, 0Ah, 2Bh, 37h, 00h, 1Fh
-450F:25EC 04 00 23 33 27 0A db 04h, 00h, 23h, 33h, 27h, 0Ah
-450F:25F2 2B 2D 00 23 00 00 db 2Bh, 2Dh, 00h, 23h, 00h, 00h
-450F:25F8 21 08 00 23 01 00 db 21h, 08h, 00h, 23h, 01h, 00h
-450F:25FE 21 5A 00 23 0D 00 db 21h, 5Ah, 00h, 23h, 0Dh, 00h
-450F:2604 23 EF 03 27 01 00 db 23h,0EFh, 03h, 27h, 01h, 00h
-450F:260A 23 00 00 23 28 00 db 23h, 00h, 00h, 23h, 28h, 00h
-450F:2610 23 80 26 27 08 00 db 23h, 80h, 26h, 27h, 08h, 00h
-450F:2616 23 6A 0B 1F 02 00 db 23h, 6Ah, 0Bh, 1Fh, 02h, 00h
-450F:261C 23 EF 03 27 1D 00 db 23h,0EFh, 03h, 27h, 1Dh, 00h
-450F:2622 1F 70 00 23 00 00 db 1Fh, 70h, 00h, 23h, 00h, 00h
-450F:2628 0A 2B 37 00 1F 04 db 0Ah, 2Bh, 37h, 00h, 1Fh, 04h
-450F:262E 00 23 32 27 0A 2B db 00h, 23h, 32h, 27h, 0Ah, 2Bh
-450F:2634 2D 00 23 00 00 21 db 2Dh, 00h, 23h, 00h, 00h, 21h
-450F:263A 08 00 23 01 00 21 db 08h, 00h, 23h, 01h, 00h, 21h
-450F:2640 5A 00 23 00 00 23 db 5Ah, 00h, 23h, 00h, 00h, 23h
-450F:2646 28 00 23 80 26 27 db 28h, 00h, 23h, 80h, 26h, 27h
-450F:264C 08 00 23 0D 00 23 db 08h, 00h, 23h, 0Dh, 00h, 23h
-450F:2652 EF 03 27 01 00 23 db 0EFh, 03h, 27h, 01h, 00h, 23h
-450F:2658 69 0B 1F 02 00 23 db 69h, 0Bh, 1Fh, 02h, 00h, 23h
-450F:265E EF 03 27 1D 00 1F db 0EFh, 03h, 27h, 1Dh, 00h, 1Fh
-450F:2664 04 00 23 34 27 0A db 04h, 00h, 23h, 34h, 27h, 0Ah
-450F:266A 2B 12 00 23 01 00 db 2Bh, 12h, 00h, 23h, 01h, 00h
-450F:2670 21 08 00 23 73 0B db 21h, 08h, 00h, 23h, 73h, 0Bh
-450F:2676 1F 02 00 23 EF 03 db 1Fh, 02h, 00h, 23h,0EFh, 03h
-450F:267C 27 1D 00 28 23 02 db 27h, 1Dh, 00h, 28h, 23h, 02h
-450F:2682 00 21 5A 00 28 23 db 00h, 21h, 5Ah, 00h, 28h, 23h
-450F:2688 92 10 21 08 00 1F db 92h, 10h, 21h, 08h, 00h, 1Fh
-450F:268E 5A 00 23 02 00 0A db 5Ah, 00h, 23h, 02h, 00h, 0Ah
-450F:2694 2B 06 00 23 01 00 db 2Bh, 06h, 00h, 23h, 01h, 00h
-450F:269A 21 08 00 28 23 28 db 21h, 08h, 00h, 28h, 23h, 28h
-450F:26A0 27 27 32 00 23 92 db 27h, 27h, 32h, 00h, 23h, 92h
-450F:26A6 10 21 08 00 23 03 db 10h, 21h, 08h, 00h, 23h, 03h
-450F:26AC 00 21 5A 00 23 0F db 00h, 21h, 5Ah, 00h, 23h, 0Fh
-450F:26B2 00 21 26 00 28 23 db 00h, 21h, 26h, 00h, 28h, 23h
-450F:26B8 92 10 21 08 00 27 db 92h, 10h, 21h, 08h, 00h, 27h
-450F:26BE 3B 00 28 23 10 00 db 3Bh, 00h, 28h, 23h, 10h, 00h
-450F:26C4 21 26 00 23 92 10 db 21h, 26h, 00h, 23h, 92h, 10h
-450F:26CA 21 08 00 28 23 11 db 21h, 08h, 00h, 28h, 23h, 11h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 651
-
-450F:26D0 00 21 26 00 27 3C db 00h, 21h, 26h, 00h, 27h, 3Ch
-450F:26D6 00 23 06 00 23 EF db 00h, 23h, 06h, 00h, 23h,0EFh
-450F:26DC 03 27 31 00 23 92 db 03h, 27h, 31h, 00h, 23h, 92h
-450F:26E2 10 21 08 00 28 23 db 10h, 21h, 08h, 00h, 28h, 23h
-450F:26E8 12 00 21 26 00 23 db 12h, 00h, 21h, 26h, 00h, 23h
-450F:26EE 08 00 23 EC 03 27 db 08h, 00h, 23h,0ECh, 03h, 27h
-450F:26F4 31 00 23 92 10 21 db 31h, 00h, 23h, 92h, 10h, 21h
-450F:26FA 08 00 28 23 0F 00 db 08h, 00h, 28h, 23h, 0Fh, 00h
-450F:2700 EF23 data_1429 dw 0EF23h ; Data table (indexed access)
-450F:2702 03 27 db 03h, 27h
-450F:2704 0028 data_1430 dw 28h ; xref 450F:18FF
-450F:2706 1F 08 00 23 00 00 db 1Fh, 08h, 00h, 23h, 00h, 00h
-450F:270C 0A 2B db 0Ah, 2Bh
-450F:270E 0006 data_1431 dw 6 ; Data table (indexed access)
-450F:2710 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:2716 28 23 0F 00 23 EC db 28h, 23h, 0Fh, 00h, 23h,0ECh
-450F:271C 03 27 28 00 1F 08 db 03h, 27h, 28h, 00h, 1Fh, 08h
-450F:2722 00 23 00 00 0A 2B db 00h, 23h, 00h, 00h, 0Ah, 2Bh
-450F:2728 06 00 23 92 10 21 db 06h, 00h, 23h, 92h, 10h, 21h
-450F:272E 08 00 28 23 10 00 db 08h, 00h, 28h, 23h, 10h, 00h
-450F:2734 21 26 00 28 23 1E db 21h, 26h, 00h, 28h, 23h, 1Eh
-450F:273A 27 27 2C 00 23 00 db 27h, 27h, 2Ch, 00h, 23h, 00h
-450F:2740 00 23 1E 00 23 60 db 00h, 23h, 1Eh, 00h, 23h, 60h
-450F:2746 27 27 08 00 23 07 db 27h, 27h, 08h, 00h, 23h, 07h
-450F:274C 00 23 EF 03 27 31 db 00h, 23h,0EFh, 03h, 27h, 31h
-450F:2752 00 23 13 00 21 26 db 00h, 23h, 13h, 00h, 21h, 26h
-450F:2758 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:275E 00 28 23 26 00 23 db 00h, 28h, 23h, 26h, 00h, 23h
-450F:2764 EF 03 27 28 00 1F db 0EFh, 03h, 27h, 28h, 00h, 1Fh
-450F:276A 08 00 23 00 00 0A db 08h, 00h, 23h, 00h, 00h, 0Ah
-450F:2770 2B 0F 00 23 00 00 db 2Bh, 0Fh, 00h, 23h, 00h, 00h
-450F:2776 23 0A 00 23 60 27 db 23h, 0Ah, 00h, 23h, 60h, 27h
-450F:277C 27 08 00 2D 1C 00 db 27h, 08h, 00h, 2Dh, 1Ch, 00h
-450F:2782 1F 26 00 23 15 00 db 1Fh, 26h, 00h, 23h, 15h, 00h
-450F:2788 0C 2B 12 00 23 1E db 0Ch, 2Bh, 12h, 00h, 23h, 1Eh
-450F:278E 27 27 2A 00 23 00 db 27h, 27h, 2Ah, 00h, 23h, 00h
-450F:2794 00 23 02 00 23 9F db 00h, 23h, 02h, 00h, 23h, 9Fh
-450F:279A 27 27 08 00 28 23 db 27h, 27h, 08h, 00h, 28h, 23h
-450F:27A0 C5 09 27 10 00 23 db 0C5h, 09h, 27h, 10h, 00h, 23h
-450F:27A6 C6 09 27 10 00 23 db 0C6h, 09h, 27h, 10h, 00h, 23h
-450F:27AC C7 09 27 10 00 27 db 0C7h, 09h, 27h, 10h, 00h, 27h
-450F:27B2 3D 00 28 1F 40 00 db 3Dh, 00h, 28h, 1Fh, 40h, 00h
-450F:27B8 21 08 00 1F 08 00 db 21h, 08h, 00h, 1Fh, 08h, 00h
-450F:27BE 23 00 00 0A 2B 09 db 23h, 00h, 00h, 0Ah, 2Bh, 09h
-450F:27C4 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:27CA 00 2D 06 00 23 00 db 00h, 2Dh, 06h, 00h, 23h, 00h
-450F:27D0 00 21 08 00 28 1F db 00h, 21h, 08h, 00h, 28h, 1Fh
-450F:27D6 40 00 21 08 00 28 db 40h, 00h, 21h, 08h, 00h, 28h
-450F:27DC 1F 5C 00 21 08 00 db 1Fh, 5Ch, 00h, 21h, 08h, 00h
-450F:27E2 1F 08 00 23 00 00 db 1Fh, 08h, 00h, 23h, 00h, 00h
-450F:27E8 0A 2B 06 00 23 92 db 0Ah, 2Bh, 06h, 00h, 23h, 92h
-450F:27EE 10 21 08 00 28 23 db 10h, 21h, 08h, 00h, 28h, 23h
-450F:27F4 00 00 23 07 00 23 db 00h, 00h, 23h, 07h, 00h, 23h
-450F:27FA 1E 28 27 08 00 23 db 1Eh, 28h, 27h, 08h, 00h, 23h
-450F:2800 00 00 23 01 00 23 db 00h, 00h, 23h, 01h, 00h, 23h
-450F:2806 31 28 27 08 00 23 db 31h, 28h, 27h, 08h, 00h, 23h
-450F:280C 01 00 21 5C 00 23 db 01h, 00h, 21h, 5Ch, 00h, 23h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 652
-
-450F:2812 10 00 21 26 00 23 db 10h, 00h, 21h, 26h, 00h, 23h
-450F:2818 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:281E 23 C4 09 23 EC 03 db 23h,0C4h, 09h, 23h,0ECh, 03h
-450F:2824 27 13 00 23 09 00 db 27h, 13h, 00h, 23h, 09h, 00h
-450F:282A 23 EC 03 27 31 00 db 23h,0ECh, 03h, 27h, 31h, 00h
-450F:2830 28 23 C3 09 23 2C db 28h, 23h,0C3h, 09h, 23h, 2Ch
-450F:2836 04 27 13 00 28 23 db 04h, 27h, 13h, 00h, 28h, 23h
-450F:283C 00 00 23 01 00 23 db 00h, 00h, 23h, 01h, 00h, 23h
-450F:2842 4E 28 27 08 00 23 db 4Eh, 28h, 27h, 08h, 00h, 23h
-450F:2848 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:284E 23 EA 09 23 21 04 db 23h,0EAh, 09h, 23h, 21h, 04h
-450F:2854 27 13 00 28 23 92 db 27h, 13h, 00h, 28h, 23h, 92h
-450F:285A 10 21 08 00 23 30 db 10h, 21h, 08h, 00h, 23h, 30h
-450F:2860 27 27 32 00 23 F3 db 27h, 27h, 32h, 00h, 23h,0F3h
-450F:2866 09 27 10 00 23 00 db 09h, 27h, 10h, 00h, 23h, 00h
-450F:286C 00 21 6E 00 28 1F db 00h, 21h, 6Eh, 00h, 28h, 1Fh
-450F:2872 6E 00 21 08 00 28 db 6Eh, 00h, 21h, 08h, 00h, 28h
-450F:2878 1F 72 00 23 00 00 db 1Fh, 72h, 00h, 23h, 00h, 00h
-450F:287E 0A 2B 15 00 23 92 db 0Ah, 2Bh, 15h, 00h, 23h, 92h
-450F:2884 10 21 08 00 23 00 db 10h, 21h, 08h, 00h, 23h, 00h
-450F:288A 00 23 03 00 23 9E db 00h, 23h, 03h, 00h, 23h, 9Eh
-450F:2890 28 27 08 00 2D 06 db 28h, 27h, 08h, 00h, 2Dh, 06h
-450F:2896 00 23 01 00 21 08 db 00h, 23h, 01h, 00h, 21h, 08h
-450F:289C 00 28 23 35 04 27 db 00h, 28h, 23h, 35h, 04h, 27h
-450F:28A2 3E 00 28 23 29 27 db 3Eh, 00h, 28h, 23h, 29h, 27h
-450F:28A8 27 2C 00 23 02 00 db 27h, 2Ch, 00h, 23h, 02h, 00h
-450F:28AE 23 34 04 27 01 00 db 23h, 34h, 04h, 27h, 01h, 00h
-450F:28B4 23 37 27 27 32 00 db 23h, 37h, 27h, 27h, 32h, 00h
-450F:28BA 23 16 00 21 26 00 db 23h, 16h, 00h, 21h, 26h, 00h
-450F:28C0 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:28C6 28 1F 74 00 23 00 db 28h, 1Fh, 74h, 00h, 23h, 00h
-450F:28CC 00 0A 2B 09 00 23 db 00h, 0Ah, 2Bh, 09h, 00h, 23h
-450F:28D2 92 10 21 08 00 2D db 92h, 10h, 21h, 08h, 00h, 2Dh
-450F:28D8 06 00 23 03 00 21 db 06h, 00h, 23h, 03h, 00h, 21h
-450F:28DE 08 00 28 23 82 0A db 08h, 00h, 28h, 23h, 82h, 0Ah
-450F:28E4 23 36 04 27 0C 00 db 23h, 36h, 04h, 27h, 0Ch, 00h
-450F:28EA 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:28F0 28 23 19 00 21 26 db 28h, 23h, 19h, 00h, 21h, 26h
-450F:28F6 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:28FC 00 28 23 00 00 23 db 00h, 28h, 23h, 00h, 00h, 23h
-450F:2902 02 00 23 11 29 27 db 02h, 00h, 23h, 11h, 29h, 27h
-450F:2908 08 00 23 92 10 21 db 08h, 00h, 23h, 92h, 10h, 21h
-450F:290E 08 00 28 23 E8 03 db 08h, 00h, 28h, 23h,0E8h, 03h
-450F:2914 21 02 00 23 2A 00 db 21h, 02h, 00h, 23h, 2Ah, 00h
-450F:291A 23 00 40 02 23 E7 db 23h, 00h, 40h, 02h, 23h,0E7h
-450F:2920 00 23 1C 01 27 19 db 00h, 23h, 1Ch, 01h, 27h, 19h
-450F:2926 00 23 02 00 21 98 db 00h, 23h, 02h, 00h, 21h, 98h
-450F:292C 00 28 23 92 10 21 db 00h, 28h, 23h, 92h, 10h, 21h
-450F:2932 08 00 23 00 00 23 db 08h, 00h, 23h, 00h, 00h, 23h
-450F:2938 02 00 23 41 29 27 db 02h, 00h, 23h, 41h, 29h, 27h
-450F:293E 08 00 28 23 E2 0A db 08h, 00h, 28h, 23h,0E2h, 0Ah
-450F:2944 23 21 04 23 29 04 db 23h, 21h, 04h, 23h, 29h, 04h
-450F:294A 27 1D 00 28 1F 4A db 27h, 1Dh, 00h, 28h, 1Fh, 4Ah
-450F:2950 00 21 08 00 28 23 db 00h, 21h, 08h, 00h, 28h, 23h
-450F:2956 46 0B 27 10 00 23 db 46h, 0Bh, 27h, 10h, 00h, 23h
-450F:295C 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:2962 23 4C 0B 27 10 00 db 23h, 4Ch, 0Bh, 27h, 10h, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 653
-
-450F:2968 23 31 27 27 32 00 db 23h, 31h, 27h, 27h, 32h, 00h
-450F:296E 23 05 00 23 E8 03 db 23h, 05h, 00h, 23h,0E8h, 03h
-450F:2974 27 22 00 23 92 10 db 27h, 22h, 00h, 23h, 92h, 10h
-450F:297A 21 08 00 28 27 1C db 21h, 08h, 00h, 28h, 27h, 1Ch
-450F:2980 00 23 42 0B 27 10 db 00h, 23h, 42h, 0Bh, 27h, 10h
-450F:2986 00 23 31 27 27 06 db 00h, 23h, 31h, 27h, 27h, 06h
-450F:298C 00 23 1D 27 27 32 db 00h, 23h, 1Dh, 27h, 27h, 32h
-450F:2992 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:2998 00 28 23 A3 0F 23 db 00h, 28h, 23h,0A3h, 0Fh, 23h
-450F:299E F2 03 27 0C 00 23 db 0F2h, 03h, 27h, 0Ch, 00h, 23h
-450F:29A4 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:29AA 23 01 00 21 26 00 db 23h, 01h, 00h, 21h, 26h, 00h
-450F:29B0 23 0A 00 23 F2 03 db 23h, 0Ah, 00h, 23h,0F2h, 03h
-450F:29B6 27 31 00 23 92 10 db 27h, 31h, 00h, 23h, 92h, 10h
-450F:29BC 21 08 00 28 23 01 db 21h, 08h, 00h, 28h, 23h, 01h
-450F:29C2 00 21 26 00 23 0B db 00h, 21h, 26h, 00h, 23h, 0Bh
-450F:29C8 00 23 F2 03 27 31 db 00h, 23h,0F2h, 03h, 27h, 31h
-450F:29CE 00 23 92 10 21 08 db 00h, 23h, 92h, 10h, 21h, 08h
-450F:29D4 00 28 23 01 00 21 db 00h, 28h, 23h, 01h, 00h, 21h
-450F:29DA 26 00 23 0C 00 23 db 26h, 00h, 23h, 0Ch, 00h, 23h
-450F:29E0 F2 03 27 31 00 23 db 0F2h, 03h, 27h, 31h, 00h, 23h
-450F:29E6 92 10 21 08 00 28 db 92h, 10h, 21h, 08h, 00h, 28h
-450F:29EC 23 0A 00 23 F2 03 db 23h, 0Ah, 00h, 23h,0F2h, 03h
-450F:29F2 27 31 00 23 04 00 db 27h, 31h, 00h, 23h, 04h, 00h
-450F:29F8 21 26 00 23 92 10 db 21h, 26h, 00h, 23h, 92h, 10h
-450F:29FE 21 08 00 28 1F 7E db 21h, 08h, 00h, 28h, 1Fh, 7Eh
-450F:2A04 00 21 08 00 28 23 db 00h, 21h, 08h, 00h, 28h, 23h
-450F:2A0A 05 00 21 26 00 23 db 05h, 00h, 21h, 26h, 00h, 23h
-450F:2A10 00 10 23 F2 03 27 db 00h, 10h, 23h,0F2h, 03h, 27h
-450F:2A16 3F 00 23 92 10 21 db 3Fh, 00h, 23h, 92h, 10h, 21h
-450F:2A1C 08 00 28 23 03 00 db 08h, 00h, 28h, 23h, 03h, 00h
-450F:2A22 23 37 04 27 01 00 db 23h, 37h, 04h, 27h, 01h, 00h
-450F:2A28 23 92 10 21 08 00 db 23h, 92h, 10h, 21h, 08h, 00h
-450F:2A2E 28 23 71 0B 27 10 db 28h, 23h, 71h, 0Bh, 27h, 10h
-450F:2A34 00 23 34 27 27 32 db 00h, 23h, 34h, 27h, 27h, 32h
-450F:2A3A 00 23 92 db 00h, 23h, 92h
-450F:2A3D loc_2373:
-450F:2A3D 10 21 adc [bx+di],ah
-450F:2A3F 08 00 or [bx+si],al
-450F:2A41 28 23 sub [bp+di],ah
-450F:2A43 0D 2100 or ax,2100h
-450F:2A46 26: 00 23 add es:[bp+di],ah
-450F:2A49 92 xchg dx,ax
-450F:2A4A 10 21 adc [bx+di],ah
-450F:2A4C 08 00 or [bx+si],al
-450F:2A4E 28 1F sub [bx],bl
-450F:2A50 4A dec dx
-450F:2A51 00 23 add [bp+di],ah
-450F:2A53 02 00 add al,[bx+si]
-450F:2A55 0A 2B or ch,[bp+di]
-450F:2A57 06 push es
-450F:2A58 00 23 add [bp+di],ah
-450F:2A5A 01 00 add [bx+si],ax
-450F:2A5C 21 08 and [bx+si],cx
-450F:2A5E 00 28 add [bx+si],ch
-450F:2A60 23 91 270B and dx,ds:data_36e[bx+di] ; (0000:270B=113h)
-450F:2A64 10 00 adc [bx+si],al
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 654
-
-450F:2A66 23 92 270B and dx,[bp+si+270Bh]
-450F:2A6A 10 00 adc [bx+si],al
-450F:2A6C 23 92 2110 and dx,[bp+si+2110h]
-450F:2A70 08 00 or [bx+si],al
-450F:2A72 28 23 sub [bp+di],ah
-450F:2A74 92 xchg dx,ax
-450F:2A75 10 21 adc [bx+di],ah
-450F:2A77 08 00 or [bx+si],al
-450F:2A79 23 4D 01 and cx,[di+1]
-450F:2A7C 23 42 04 and ax,[bp+si+4]
-450F:2A7F 27 daa ; Decimal adjust
-450F:2A80 0C 00 or al,0
-450F:2A82 28 23 sub [bp+di],ah
-450F:2A84 24 27 and al,27h ; '''
-450F:2A86 27 daa ; Decimal adjust
-450F:2A87 32 00 xor al,[bx+si]
-450F:2A89 23 4C 0C and cx,[si+0Ch]
-450F:2A8C 27 daa ; Decimal adjust
-450F:2A8D 10 00 adc [bx+si],al
-450F:2A8F 23 92 2110 and dx,[bp+si+2110h]
-450F:2A93 08 00 or [bx+si],al
-450F:2A95 28 23 sub [bp+di],ah
-450F:2A97 92 xchg dx,ax
-450F:2A98 10 21 adc [bx+di],ah
-450F:2A9A 08 00 or [bx+si],al
-450F:2A9C 23 56 0C and dx,[bp+0Ch]
-450F:2A9F 27 daa ; Decimal adjust
-450F:2AA0 10 00 adc [bx+si],al
-450F:2AA2 23 01 and ax,[bx+di]
-450F:2AA4 00 21 add [bx+di],ah
-450F:2AA6 94 xchg sp,ax
-450F:2AA7 00 28 add [bx+si],ch
-450F:2AA9 23 71 01 and si,[bx+di+1]
-450F:2AAC 23 27 and sp,[bx]
-450F:2AAE 04 27 add al,27h ; '''
-450F:2AB0 0C 00 or al,0
-450F:2AB2 23 92 2110 and dx,[bp+si+2110h]
-450F:2AB6 08 00 or [bx+si],al
-450F:2AB8 28 23 sub [bp+di],ah
-450F:2ABA 01 00 add [bx+si],ax
-450F:2ABC 21 A2 2800 and [bp+si+2800h],sp
-450F:2AC0 23 00 and ax,[bx+si]
-450F:2AC2 00 21 add [bx+di],ah
-450F:2AC4 A2 2800 mov ds:data_37e,al ; (0000:2800=12h)
-450F:2AC7 1F pop ds
-450F:2AC8 A4 movsb ; Mov [si] to es:[di]
-450F:2AC9 00 23 add [bp+di],ah
-450F:2ACB 00 00 add [bx+si],al
-450F:2ACD 0A 2B or ch,[bp+di]
-450F:2ACF 18 00 sbb [bx+si],al
-450F:2AD1 23 2C and bp,[si]
-450F:2AD3 00 23 add [bp+di],ah
-450F:2AD5 32 00 xor al,[bx+si]
-450F:2AD7 27 daa ; Decimal adjust
-450F:2AD8 40 inc ax
-450F:2AD9 00 1F add [bx],bl
-450F:2ADB 0A 00 or al,[bx+si]
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 655
-
-450F:2ADD 27 daa ; Decimal adjust
-450F:2ADE 0D 2300 or ax,2300h
-450F:2AE1 0C 00 or al,0
-450F:2AE3 21 A6 2D00 and [bp+2D00h],sp
-450F:2AE7 3C 00 cmp al,0
-450F:2AE9 1F pop ds
-450F:2AEA A4 movsb ; Mov [si] to es:[di]
-450F:2AEB 00 23 add [bp+di],ah
-450F:2AED 01 00 add [bx+si],ax
-450F:2AEF 0A 2B or ch,[bp+di]
-450F:2AF1 09 00 or [bx+si],ax
-450F:2AF3 23 01 and ax,[bx+di]
-450F:2AF5 00 27 add [bx],ah
-450F:2AF7 0D 2D00 or ax,2D00h
-450F:2AFA 29 00 sub [bx+si],ax
-450F:2AFC 1F pop ds
-450F:2AFD A4 movsb ; Mov [si] to es:[di]
-450F:2AFE 00 23 add [bp+di],ah
-450F:2B00 02 00 add al,[bx+si]
-450F:2B02 0A 2B or ch,[bp+di]
-450F:2B04 09 00 or [bx+si],ax
-450F:2B06 23 0B and cx,[bp+di]
-450F:2B08 00 27 add [bx],ah
-450F:2B0A 0D 2D00 or ax,2D00h
-450F:2B0D 16 push ss
-450F:2B0E 00 1F add [bx],bl
-450F:2B10 A4 movsb ; Mov [si] to es:[di]
-450F:2B11 00 23 add [bp+di],ah
-450F:2B13 03 00 add ax,[bx+si]
-450F:2B15 0A 2B or ch,[bp+di]
-450F:2B17 0C 00 or al,0
-450F:2B19 23 21 and sp,[bx+di]
-450F:2B1B 00 27 add [bx],ah
-450F:2B1D 0D 2300 or ax,2300h
-450F:2B20 0C 00 or al,0
-450F:2B22 21 A6 1F00 and [bp+1F00h],sp
-450F:2B26 A6 cmpsb ; Cmp [si] to es:[di]
-450F:2B27 00 23 add [bp+di],ah
-450F:2B29 0C 00 or al,0
-450F:2B2B 0E push cs
-450F:2B2C 2B 0F sub cx,[bx]
-450F:2B2E 00 23 add [bp+di],ah
-450F:2B30 00 00 add [bx+si],al
-450F:2B32 23 03 and ax,[bp+di]
-450F:2B34 00 23 add [bp+di],ah
-450F:2B36 C7 2A 27 08 00 2D db 0C7h, 2Ah, 27h, 08h, 00h, 2Dh
-450F:2B3C 1B 00 23 00 00 21 db 1Bh, 00h, 23h, 00h, 00h, 21h
-450F:2B42 A6 00 23 3C 00 23 db 0A6h, 00h, 23h, 3Ch, 00h, 23h
-450F:2B48 C8 00 27 40 00 23 db 0C8h, 00h, 27h, 40h, 00h, 23h
-450F:2B4E 00 00 1F 0A 00 23 db 00h, 00h, 1Fh, 0Ah, 00h, 23h
-450F:2B54 C7 2A 27 08 00 28 db 0C7h, 2Ah, 27h, 08h, 00h, 28h
-450F:2B5A 1F A4 00 23 01 00 db 1Fh,0A4h, 00h, 23h, 01h, 00h
-450F:2B60 0A 2B 06 00 23 03 db 0Ah, 2Bh, 06h, 00h, 23h, 03h
-450F:2B66 00 27 02 00 1F A8 db 00h, 27h, 02h, 00h, 1Fh,0A8h
-450F:2B6C 00 23 01 00 02 21 db 00h, 23h, 01h, 00h, 02h, 21h
-450F:2B72 A8 00 1F A8 00 23 db 0A8h, 00h, 1Fh,0A8h, 00h, 23h
-450F:2B78 04 00 0A 2B 0F 00 db 04h, 00h, 0Ah, 2Bh, 0Fh, 00h
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 656
-
-450F:2B7E 23 00 00 23 02 00 db 23h, 00h, 00h, 23h, 02h, 00h
-450F:2B84 23 5A 2B 27 08 00 db 23h, 5Ah, 2Bh, 27h, 08h, 00h
-450F:2B8A 2D 34 00 1F A8 00 db 2Dh, 34h, 00h, 1Fh,0A8h, 00h
-450F:2B90 23 07 00 0E 2B 0F db 23h, 07h, 00h, 0Eh, 2Bh, 0Fh
-450F:2B96 00 23 00 00 23 01 db 00h, 23h, 00h, 00h, 23h, 01h
-450F:2B9C 00 23 5A 2B 27 08 db 00h, 23h, 5Ah, 2Bh, 27h, 08h
-450F:2BA2 00 2D 1B 00 23 00 db 00h, 2Dh, 1Bh, 00h, 23h, 00h
-450F:2BA8 00 21 A8 00 23 3C db 00h, 21h,0A8h, 00h, 23h, 3Ch
-450F:2BAE 00 23 C8 00 27 40 db 00h, 23h,0C8h, 00h, 27h, 40h
-450F:2BB4 00 23 00 00 1F 0A db 00h, 23h, 00h, 00h, 1Fh, 0Ah
-450F:2BBA 00 23 5A 2B 27 08 db 00h, 23h, 5Ah, 2Bh, 27h, 08h
-450F:2BC0 00 28 1F A4 00 23 db 00h, 28h, 1Fh,0A4h, 00h, 23h
-450F:2BC6 01 00 0A 2B 06 00 db 01h, 00h, 0Ah, 2Bh, 06h, 00h
-450F:2BCC 23 18 00 27 02 00 db 23h, 18h, 00h, 27h, 02h, 00h
-450F:2BD2 23 14 00 23 96 00 db 23h, 14h, 00h, 23h, 96h, 00h
-450F:2BD8 27 40 00 23 00 00 db 27h, 40h, 00h, 23h, 00h, 00h
-450F:2BDE 1F 0A 00 23 C2 2B db 1Fh, 0Ah, 00h, 23h,0C2h, 2Bh
-450F:2BE4 27 08 00 28 27 41 db 27h, 08h, 00h, 28h, 27h, 41h
-450F:2BEA 00 28 23 12 00 27 db 00h, 28h, 23h, 12h, 00h, 27h
-450F:2BF0 0D 00 28 23 15 00 db 0Dh, 00h, 28h, 23h, 15h, 00h
-450F:2BF6 27 0D 00 28 23 0C db 27h, 0Dh, 00h, 28h, 23h, 0Ch
-450F:2BFC 00 27 0D 00 28 23 db 00h, 27h, 0Dh, 00h, 28h, 23h
-450F:2C02 0C 00 27 0D 00 28 db 0Ch, 00h, 27h, 0Dh, 00h, 28h
-450F:2C08 23 15 00 27 0D 00 db 23h, 15h, 00h, 27h, 0Dh, 00h
-450F:2C0E 28 23 0F 00 27 0D db 28h, 23h, 0Fh, 00h, 27h, 0Dh
-450F:2C14 00 28 23 0E 00 27 db 00h, 28h, 23h, 0Eh, 00h, 27h
-450F:2C1A 0D 00 28 23 15 00 db 0Dh, 00h, 28h, 23h, 15h, 00h
-450F:2C20 27 42 00 1F 0A 00 db 27h, 42h, 00h, 1Fh, 0Ah, 00h
-450F:2C26 21 08 00 1F 08 00 db 21h, 08h, 00h, 1Fh, 08h, 00h
-450F:2C2C 23 00 00 0A 2B 06 db 23h, 00h, 00h, 0Ah, 2Bh, 06h
-450F:2C32 00 23 19 00 27 0D db 00h, 23h, 19h, 00h, 27h, 0Dh
-450F:2C38 00 28 23 19 00 27 db 00h, 28h, 23h, 19h, 00h, 27h
-450F:2C3E 0D 00 28 23 04 00 db 0Dh, 00h, 28h, 23h, 04h, 00h
-450F:2C44 27 0D 00 db 27h, 0Dh, 00h
-450F:2C47 loc_2374:
-450F:2C47 23 16 2701 and dx,ds:data_35e ; (0000:2701=2EE4h)
-450F:2C4B 10 00 adc [bx+si],al
-450F:2C4D 23 01 and ax,[bx+di]
-450F:2C4F 00 21 add [bx+di],ah
-450F:2C51 08 00 or [bx+si],al
-450F:2C53 28 00 sub [bx+si],al
-450F:2C55 000B[00] db 11 dup (0)
-
- scripts_seg ends
-
-
-
- ;-------------------------------------------------- messages_seg ----------
-
- messages_seg segment byte public
- assume cs:messages_seg, ds:messages_seg, ss:stack_seg_k
-
-47D5:0000 E8 data_1437 db 0E8h ; xref 273F:63CC
-47D5:0001 03 5C 00 E9 03 EE db 03h, 5Ch, 00h,0E9h, 03h,0EEh
-47D5:0007 00 11 04 EE 00 EA db 00h, 11h, 04h,0EEh, 00h,0EAh
-47D5:000D 03 A0 01 12 04 EE db 03h,0A0h, 01h, 12h, 04h,0EEh
-47D5:0013 00 EB 03 B6 01 F2 db 00h,0EBh, 03h,0B6h, 01h,0F2h
-47D5:0019 03 E8 01 EC 03 F2 db 03h,0E8h, 01h,0ECh, 03h,0F2h
-47D5:001F 03 ED 03 12 03 F1 db 03h,0EDh, 03h, 12h, 03h,0F1h
-47D5:0025 03 DC 02 EE 03 76 db 03h,0DCh, 02h,0EEh, 03h, 76h
-47D5:002B 03 F0 03 44 03 EF db 03h,0F0h, 03h, 44h, 03h,0EFh
-47D5:0031 03 A8 03 29 04 46 db 03h,0A8h, 03h, 29h, 04h, 46h
-47D5:0037 04 20 04 60 04 1F db 04h, 20h, 04h, 60h, 04h, 1Fh
-47D5:003D 04 40 02 21 04 5E db 04h, 40h, 02h, 21h, 04h, 5Eh
-47D5:0043 02 2B 04 78 02 36 db 02h, 2Bh, 04h, 78h, 02h, 36h
-47D5:0049 04 B6 02 22 04 2C db 04h,0B6h, 02h, 22h, 04h, 2Ch
-47D5:004F 04 27 04 12 02 42 db 04h, 27h, 04h, 12h, 02h, 42h
-47D5:0055 04 92 02 34 04 AC db 04h, 92h, 02h, 34h, 04h,0ACh
-47D5:005B 02 80 00 00 00 A1 db 02h, 80h, 00h, 00h, 00h,0A1h
-47D5:0061 80 0B 00 EC 80 10 db 80h, 0Bh, 00h,0ECh, 80h, 10h
-47D5:0067 00 68 80 11 00 0F db 00h, 68h, 80h, 11h, 00h, 0Fh
-47D5:006D 8A 2D 00 08 81 12 db 8Ah, 2Dh, 00h, 08h, 81h, 12h
-47D5:0073 00 1E 81 19 00 1F db 00h, 1Eh, 81h, 19h, 00h, 1Fh
-47D5:0079 81 1A 00 82 80 02 db 81h, 1Ah, 00h, 82h, 80h, 02h
-47D5:007F 00 89 80 06 00 83 db 00h, 89h, 80h, 06h, 00h, 83h
-47D5:0085 80 03 00 88 80 04 db 80h, 03h, 00h, 88h, 80h, 04h
-47D5:008B 00 A4 80 33 00 75 db 00h,0A4h, 80h, 33h, 00h, 75h
-47D5:0091 00 05 00 9E 00 07 db 00h, 05h, 00h, 9Eh, 00h, 07h
-47D5:0097 00 9F 00 08 00 A0 db 00h, 9Fh, 00h, 08h, 00h,0A0h
-47D5:009D 00 09 00 76 00 0D db 00h, 09h, 00h, 76h, 00h, 0Dh
-47D5:00A3 00 00 00 0E 00 09 db 00h, 00h, 00h, 0Eh, 00h, 09h
-47D5:00A9 81 13 00 0A 81 14 db 81h, 13h, 00h, 0Ah, 81h, 14h
-47D5:00AF 00 18 81 16 00 14 db 00h, 18h, 81h, 16h, 00h, 14h
-47D5:00B5 81 17 00 13 81 18 db 81h, 17h, 00h, 13h, 81h, 18h
-47D5:00BB 00 15 88 28 00 16 db 00h, 15h, 88h, 28h, 00h, 16h
-47D5:00C1 81 1B 00 26 81 1C db 81h, 1Bh, 00h, 26h, 81h, 1Ch
-47D5:00C7 00 2D 81 1D 00 2E db 00h, 2Dh, 81h, 1Dh, 00h, 2Eh
-47D5:00CD 81 1E 00 2F 81 1F db 81h, 1Eh, 00h, 2Fh, 81h, 1Fh
-47D5:00D3 00 73 80 21 00 37 db 00h, 73h, 80h, 21h, 00h, 37h
-47D5:00D9 81 23 00 B1 8C 2F db 81h, 23h, 00h,0B1h, 8Ch, 2Fh
-47D5:00DF 00 00 00 29 00 4A db 00h, 00h, 00h, 29h, 00h, 4Ah
-47D5:00E5 81 2A 00 6D 81 2E db 81h, 2Ah, 00h, 6Dh, 81h, 2Eh
-47D5:00EB 00 FF FF 80 00 00 db 00h,0FFh,0FFh, 80h, 00h, 00h
-47D5:00F1 00 A1 00 0B 00 EC db 00h,0A1h, 00h, 0Bh, 00h,0ECh
-47D5:00F7 00 10 00 08 01 12 db 00h, 10h, 00h, 08h, 01h, 12h
-47D5:00FD 00 20 01 19 00 20 db 00h, 20h, 01h, 19h, 00h, 20h
-47D5:0103 01 1A 00 6A 00 0F db 01h, 1Ah, 00h, 6Ah, 00h, 0Fh
-47D5:0109 00 76 00 0D 00 82 db 00h, 76h, 00h, 0Dh, 00h, 82h
-47D5:010F 00 02 00 83 00 03 db 00h, 02h, 00h, 83h, 00h, 03h
-47D5:0115 00 88 00 04 00 A4 db 00h, 88h, 00h, 04h, 00h,0A4h
-47D5:011B 00 33 00 72 01 06 db 00h, 33h, 00h, 72h, 01h, 06h
-47D5:0121 00 75 00 05 00 9E db 00h, 75h, 00h, 05h, 00h, 9Eh
-47D5:0127 00 07 00 9F 00 08 db 00h, 07h, 00h, 9Fh, 00h, 08h
-47D5:012D 00 A0 00 09 00 7E db 00h,0A0h, 00h, 09h, 00h, 7Eh
-47D5:0133 00 0A 00 7F 00 20 db 00h, 0Ah, 00h, 7Fh, 00h, 20h
-47D5:0139 00 7B 00 24 00 76 db 00h, 7Bh, 00h, 24h, 00h, 76h
-47D5:013F 00 01 00 76 00 0C db 00h, 01h, 00h, 76h, 00h, 0Ch
-47D5:0145 00 76 00 2B 00 00 db 00h, 76h, 00h, 2Bh, 00h, 00h
-47D5:014B 00 0E 00 E9 08 2C db 00h, 0Eh, 00h,0E9h, 08h, 2Ch
-47D5:0151 00 68 00 11 00 18 db 00h, 68h, 00h, 11h, 00h, 18h
-47D5:0157 01 16 00 17 01 17 db 01h, 16h, 00h, 17h, 01h, 17h
-47D5:015D 00 76 00 18 00 76 db 00h, 76h, 00h, 18h, 00h, 76h
-47D5:0163 00 1C 00 14 08 28 db 00h, 1Ch, 00h, 14h, 08h, 28h
-47D5:0169 00 74 00 22 00 20 db 00h, 74h, 00h, 22h, 00h, 20h
-47D5:016F 01 23 00 76 00 2F db 01h, 23h, 00h, 76h, 00h, 2Fh
-47D5:0175 00 C8 08 29 00 77 db 00h,0C8h, 08h, 29h, 00h, 77h
-47D5:017B 01 2A 00 20 01 1B db 01h, 2Ah, 00h, 20h, 01h, 1Bh
-47D5:0181 00 20 01 1D 00 76 db 00h, 20h, 01h, 1Dh, 00h, 76h
-47D5:0187 00 1E 00 76 00 1F db 00h, 1Eh, 00h, 76h, 00h, 1Fh
-47D5:018D 00 20 01 21 00 68 db 00h, 20h, 01h, 21h, 00h, 68h
-47D5:0193 00 13 00 34 01 14 db 00h, 13h, 00h, 34h, 01h, 14h
-47D5:0199 00 6E 01 2E 00 FF db 00h, 6Eh, 01h, 2Eh, 00h,0FFh
-47D5:019F FF 76 00 02 00 76 db 0FFh, 76h, 00h, 02h, 00h, 76h
-47D5:01A5 00 06 00 76 00 0D db 00h, 06h, 00h, 76h, 00h, 0Dh
-47D5:01AB 00 9B 00 0C 00 76 db 00h, 9Bh, 00h, 0Ch, 00h, 76h
-47D5:01B1 00 2B 00 FF FF 82 db 00h, 2Bh, 00h,0FFh,0FFh, 82h
-47D5:01B7 00 02 00 76 00 0D db 00h, 02h, 00h, 76h, 00h, 0Dh
-47D5:01BD 00 00 00 03 00 00 db 00h, 00h, 00h, 03h, 00h, 00h
-47D5:01C3 00 04 00 AE 0B 0A db 00h, 04h, 00h,0AEh, 0Bh, 0Ah
-47D5:01C9 00 C0 0B 24 00 C3 db 00h,0C0h, 0Bh, 24h, 00h,0C3h
-47D5:01CF 0C 31 00 76 00 01 db 0Ch, 31h, 00h, 76h, 00h, 01h
-47D5:01D5 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:01DB 00 2B 00 D3 08 29 db 00h, 2Bh, 00h,0D3h, 08h, 29h
-47D5:01E1 00 C3 0C 30 00 FF db 00h,0C3h, 0Ch, 30h, 00h,0FFh
-47D5:01E7 FF 76 00 00 00 76 db 0FFh, 76h, 00h, 00h, 00h, 76h
-47D5:01ED 00 11 00 76 00 0D db 00h, 11h, 00h, 76h, 00h, 0Dh
-47D5:01F3 00 91 01 0A 00 90 db 00h, 91h, 01h, 0Ah, 00h, 90h
-47D5:01F9 01 24 00 1C 10 20 db 01h, 24h, 00h, 1Ch, 10h, 20h
-47D5:01FF 00 76 00 01 00 76 db 00h, 76h, 00h, 01h, 00h, 76h
-47D5:0205 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:020B 00 92 01 29 00 FF db 00h, 92h, 01h, 29h, 00h,0FFh
-47D5:0211 FF 76 00 01 00 82 db 0FFh, 76h, 00h, 01h, 00h, 82h
-47D5:0217 00 02 00 B6 0B 0A db 00h, 02h, 00h,0B6h, 0Bh, 0Ah
-47D5:021D 00 BA 0C 32 00 C7 db 00h,0BAh, 0Ch, 32h, 00h,0C7h
-47D5:0223 0B 24 00 BD 0C 31 db 0Bh, 24h, 00h,0BDh, 0Ch, 31h
-47D5:0229 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:022F 00 2B 00 76 00 0D db 00h, 2Bh, 00h, 76h, 00h, 0Dh
-47D5:0235 00 8B 08 29 00 C5 db 00h, 8Bh, 08h, 29h, 00h,0C5h
-47D5:023B 0C 30 00 FF FF B3 db 0Ch, 30h, 00h,0FFh,0FFh,0B3h
-47D5:0241 0B 0A 00 C5 0B 24 db 0Bh, 0Ah, 00h,0C5h, 0Bh, 24h
-47D5:0247 00 C2 0C 31 00 76 db 00h,0C2h, 0Ch, 31h, 00h, 76h
-47D5:024D 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:0253 00 C5 08 29 00 C5 db 00h,0C5h, 08h, 29h, 00h,0C5h
-47D5:0259 08 30 00 FF FF 76 db 08h, 30h, 00h,0FFh,0FFh, 76h
-47D5:025F 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:0265 00 7A 08 29 00 01 db 00h, 7Ah, 08h, 29h, 00h, 01h
-47D5:026B 09 24 00 B1 0B 0A db 09h, 24h, 00h,0B1h, 0Bh, 0Ah
-47D5:0271 00 C3 0B 24 00 FF db 00h,0C3h, 0Bh, 24h, 00h,0FFh
-47D5:0277 FF B5 0B 0A 00 76 db 0FFh,0B5h, 0Bh, 0Ah, 00h, 76h
-47D5:027D 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:0283 00 57 09 29 00 57 db 00h, 57h, 09h, 29h, 00h, 57h
-47D5:0289 09 30 00 4F 0B 24 db 09h, 30h, 00h, 4Fh, 0Bh, 24h
-47D5:028F 00 FF FF 0B 0C 0A db 00h,0FFh,0FFh, 0Bh, 0Ch, 0Ah
-47D5:0295 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:029B 00 2B 00 0E 0C 29 db 00h, 2Bh, 00h, 0Eh, 0Ch, 29h
-47D5:02A1 00 C6 0C 30 00 0C db 00h,0C6h, 0Ch, 30h, 00h, 0Ch
-47D5:02A7 0C 24 00 FF FF 76 db 0Ch, 24h, 00h,0FFh,0FFh, 76h
-47D5:02AD 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:02B3 00 FF FF 76 00 0C db 00h,0FFh,0FFh, 76h, 00h, 0Ch
-47D5:02B9 00 76 00 2B 00 35 db 00h, 76h, 00h, 2Bh, 00h, 35h
-47D5:02BF 0B 29 00 01 09 24 db 0Bh, 29h, 00h, 01h, 09h, 24h
-47D5:02C5 00 A9 0B 0A 00 BB db 00h,0A9h, 0Bh, 0Ah, 00h,0BBh
-47D5:02CB 0C 32 00 B9 0B 24 db 0Ch, 32h, 00h,0B9h, 0Bh, 24h
-47D5:02D1 00 C0 0C 31 00 C0 db 00h,0C0h, 0Ch, 31h, 00h,0C0h
-47D5:02D7 0C 30 00 FF FF B7 db 0Ch, 30h, 00h,0FFh,0FFh,0B7h
-47D5:02DD 0B 0A 00 C8 0B 24 db 0Bh, 0Ah, 00h,0C8h, 0Bh, 24h
-47D5:02E3 00 BE 0C 31 00 76 db 00h,0BEh, 0Ch, 31h, 00h, 76h
-47D5:02E9 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:02EF 00 76 00 01 00 82 db 00h, 76h, 00h, 01h, 00h, 82h
-47D5:02F5 00 02 00 00 00 03 db 00h, 02h, 00h, 00h, 00h, 03h
-47D5:02FB 00 00 00 04 00 76 db 00h, 00h, 00h, 04h, 00h, 76h
-47D5:0301 00 0D 00 E9 0B 29 db 00h, 0Dh, 00h,0E9h, 0Bh, 29h
-47D5:0307 00 C7 0C 30 00 E8 db 00h,0C7h, 0Ch, 30h, 00h,0E8h
-47D5:030D 08 2C 00 FF FF AF db 08h, 2Ch, 00h,0FFh,0FFh,0AFh
-47D5:0313 0B 0A 00 C1 0B 24 db 0Bh, 0Ah, 00h,0C1h, 0Bh, 24h
-47D5:0319 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:031F 00 2B 00 76 00 01 db 00h, 2Bh, 00h, 76h, 00h, 01h
-47D5:0325 00 82 00 02 00 00 db 00h, 82h, 00h, 02h, 00h, 00h
-47D5:032B 00 03 00 00 00 04 db 00h, 03h, 00h, 00h, 00h, 04h
-47D5:0331 00 76 00 0D 00 16 db 00h, 76h, 00h, 0Dh, 00h, 16h
-47D5:0337 0B 29 00 16 0B 30 db 0Bh, 29h, 00h, 16h, 0Bh, 30h
-47D5:033D 00 E8 08 2C 00 FF db 00h,0E8h, 08h, 2Ch, 00h,0FFh
-47D5:0343 FF B4 0B 0A 00 C6 db 0FFh,0B4h, 0Bh, 0Ah, 00h,0C6h
-47D5:0349 0B 24 00 76 00 0C db 0Bh, 24h, 00h, 76h, 00h, 0Ch
-47D5:034F 00 76 00 2B 00 76 db 00h, 76h, 00h, 2Bh, 00h, 76h
-47D5:0355 00 01 00 82 00 02 db 00h, 01h, 00h, 82h, 00h, 02h
-47D5:035B 00 00 00 03 00 00 db 00h, 00h, 00h, 03h, 00h, 00h
-47D5:0361 00 04 00 76 00 0D db 00h, 04h, 00h, 76h, 00h, 0Dh
-47D5:0367 00 E8 0B 29 00 CA db 00h,0E8h, 0Bh, 29h, 00h,0CAh
-47D5:036D 0C 30 00 E8 08 2C db 0Ch, 30h, 00h,0E8h, 08h, 2Ch
-47D5:0373 00 FF FF B8 0B 0A db 00h,0FFh,0FFh,0B8h, 0Bh, 0Ah
-47D5:0379 00 C9 0B 24 00 76 db 00h,0C9h, 0Bh, 24h, 00h, 76h
-47D5:037F 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:0385 00 76 00 01 00 82 db 00h, 76h, 00h, 01h, 00h, 82h
-47D5:038B 00 02 00 00 00 03 db 00h, 02h, 00h, 00h, 00h, 03h
-47D5:0391 00 00 00 04 00 76 db 00h, 00h, 00h, 04h, 00h, 76h
-47D5:0397 00 0D 00 EA 0B 29 db 00h, 0Dh, 00h,0EAh, 0Bh, 29h
-47D5:039D 00 EA 0B 30 00 E8 db 00h,0EAh, 0Bh, 30h, 00h,0E8h
-47D5:03A3 08 2C 00 FF FF AB db 08h, 2Ch, 00h,0FFh,0FFh,0ABh
-47D5:03A9 0B 0A 00 BB 0B 24 db 0Bh, 0Ah, 00h,0BBh, 0Bh, 24h
-47D5:03AF 00 0E 0A 2D 00 76 db 00h, 0Eh, 0Ah, 2Dh, 00h, 76h
-47D5:03B5 00 0C 00 76 00 2B db 00h, 0Ch, 00h, 76h, 00h, 2Bh
-47D5:03BB 00 76 00 01 00 82 db 00h, 76h, 00h, 01h, 00h, 82h
-47D5:03C1 00 02 00 00 00 03 db 00h, 02h, 00h, 00h, 00h, 03h
-47D5:03C7 00 00 00 04 00 76 db 00h, 00h, 00h, 04h, 00h, 76h
-47D5:03CD 00 06 00 76 00 0D db 00h, 06h, 00h, 76h, 00h, 0Dh
-47D5:03D3 00 76 09 29 00 76 db 00h, 76h, 09h, 29h, 00h, 76h
-47D5:03D9 09 30 00 E8 08 2C db 09h, 30h, 00h,0E8h, 08h, 2Ch
-47D5:03DF 00 80 00 00 00 A1 db 00h, 80h, 00h, 00h, 00h,0A1h
-47D5:03E5 00 0B 00 9D 0C 10 db 00h, 0Bh, 00h, 9Dh, 0Ch, 10h
-47D5:03EB 00 CB 0C 34 00 FF db 00h,0CBh, 0Ch, 34h, 00h,0FFh
-47D5:03F1 FF AD 0B 0A 00 BD db 0FFh,0ADh, 0Bh, 0Ah, 00h,0BDh
-47D5:03F7 0B 24 00 BF 0C 31 db 0Bh, 24h, 00h,0BFh, 0Ch, 31h
-47D5:03FD 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:0403 00 2B 00 76 00 01 db 00h, 2Bh, 00h, 76h, 00h, 01h
-47D5:0409 00 82 00 02 00 00 db 00h, 82h, 00h, 02h, 00h, 00h
-47D5:040F 00 03 00 00 00 04 db 00h, 03h, 00h, 00h, 00h, 04h
-47D5:0415 00 76 00 0D 00 71 db 00h, 76h, 00h, 0Dh, 00h, 71h
-47D5:041B 09 29 00 BF 0C 30 db 09h, 29h, 00h,0BFh, 0Ch, 30h
-47D5:0421 00 E8 08 2C 00 75 db 00h,0E8h, 08h, 2Ch, 00h, 75h
-47D5:0427 00 05 00 FF FF AC db 00h, 05h, 00h,0FFh,0FFh,0ACh
-47D5:042D 0B 0A 00 BC 0B 24 db 0Bh, 0Ah, 00h,0BCh, 0Bh, 24h
-47D5:0433 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:0439 00 2B 00 D5 08 29 db 00h, 2Bh, 00h,0D5h, 08h, 29h
-47D5:043F 00 D5 08 30 00 FF db 00h,0D5h, 08h, 30h, 00h,0FFh
-47D5:0445 FF B2 0B 0A 00 C4 db 0FFh,0B2h, 0Bh, 0Ah, 00h,0C4h
-47D5:044B 0B 24 00 76 00 0C db 0Bh, 24h, 00h, 76h, 00h, 0Ch
-47D5:0451 00 76 00 2B 00 D2 db 00h, 76h, 00h, 2Bh, 00h,0D2h
-47D5:0457 08 29 00 C8 0C 30 db 08h, 29h, 00h,0C8h, 0Ch, 30h
-47D5:045D 00 FF FF AA 0B 0A db 00h,0FFh,0FFh,0AAh, 0Bh, 0Ah
-47D5:0463 00 BC 0C 32 00 BA db 00h,0BCh, 0Ch, 32h, 00h,0BAh
-47D5:0469 0B 24 00 C1 0C 31 db 0Bh, 24h, 00h,0C1h, 0Ch, 31h
-47D5:046F 00 76 00 0C 00 76 db 00h, 76h, 00h, 0Ch, 00h, 76h
-47D5:0475 00 2B 00 D7 08 29 db 00h, 2Bh, 00h,0D7h, 08h, 29h
-47D5:047B 00 C9 0C 30 00 FF db 00h,0C9h, 0Ch, 30h, 00h,0FFh
-47D5:0481 FF 00 db 0FFh, 00h
-47D5:0483 000D[00] db 13 dup (0)
-
- messages_seg ends
-
-
-
- ;------------------------------------------------------ stack_seg_k ----
-
- stack_seg_k segment word stack 'STACK'
-
-481E:0000 03E8[00] db 1000 dup (0)
-481E:03E8 33 33 db 33h, 33h
-481E:03EA 0190[00] db 400 dup (0)
-481E:057A 55 55 db 55h, 55h
-481E:057C 0190[00] db 400 dup (0)
-
- stack_seg_k ends
-
-
-
- end start
-
- ±±±±±±±±±±±±±±±±±±±± CROSS REFERENCE - KEY ENTRY POINTS ±±±±±±±±±±±±±±±±±±±
-
- seg:off type label
- ---- ---- ---- --------------------------------
- 273F:0000 far start
- 273F:0944 far critical_handler
- 273F:48C6 far timer_handler
- 273F:94DB far keyboard_handler
-
- ±±±±±±±±±±±±±±±±±± Interrupt Usage Synopsis ±±±±±±±±±±±±±±±±±±
-
- Interrupt 10h : Video display ah=functn xxh
- Interrupt 10h : ah=00h set display mode in al
- Interrupt 10h : ah=05h set display page al
- Interrupt 10h : ah=0Fh get state, al=mode, bh=page
- Interrupt 10h : ax=1002h set palette regs from es:dx
- Interrupt 10h : ax=1012h set cx color registers from
- Interrupt 10h : ah=12h EGA/VGA special, bl=function
- Interrupt 10h : ax=1A00h get display type in bx
- Interrupt 11h : Put equipment bits in ax
- Interrupt 21h : DOS Services ah=function xxh
- Interrupt 21h : ah=06h special char i/o, dl=subfunc
- Interrupt 21h : ah=09h display char string at ds:dx
- Interrupt 21h : ah=0Eh set default drive dl (0=a:)
- Interrupt 21h : ah=19h get default drive al (0=a:)
- Interrupt 21h : ah=25h set intrpt vector al to ds:dx
- Interrupt 21h : ah=30h get DOS version number ax
- Interrupt 21h : ax=3300h get ctrl-break flag in dl
- Interrupt 21h : ax=3301h set ctrl-break flag dl=off/on
- Interrupt 21h : ah=35h get intrpt vector al in es:bx
- Interrupt 21h : ah=3Ch create/truncate file @ ds:dx
- Interrupt 21h : ah=3Dh open file, al=mode,name@ds:dx
- Interrupt 21h : ah=3Eh close file, bx=file handle
- Interrupt 21h : ah=3Fh read file, bx=file handle
- Interrupt 21h : ah=40h write file bx=file handle
- Interrupt 21h : ah=42h move file ptr, bx=file handle
- Interrupt 21h : ah=48h allocate memory, bx=bytes/16
- Interrupt 21h : ah=4Ah change memory allocation
- Interrupt 21h : ah=4Ch terminate with al=return code
- Interrupt 21h : ah=62h get Program Segment Prefix bx
- Interrupt 33h : Mouse driver ax=func xxxxh
- Interrupt 33h : ax=0000h installed?, ax=0 no, =-1 yes
- Interrupt 33h : ax=0003h get position, cx=horz,dx=vert
- Interrupt 33h : ax=0004h set position, cx=horz,dx=vert
- Interrupt 33h : ax=0007h set horz range, cx=min,dx=max
- Interrupt 33h : ax=0008h set vert range, cx=min,dx=max
- Interrupt 33h : ax=000Bh read motion counters, cx & dx
- Interrupt 33h : ax=000Ch set user handler at es:dx
-
- ±±±±±±±±±±±±±±±±±± I/O Port Usage Synopsis ±±±±±±±±±±±±±±±±±±
-
- Port 0 : DMA-1 bas&add ch 0
- Port 3 : DMA-1 bas&cnt ch 1
- Port 20h : 8259-1 int command
- Port 20h : al = 20h, end of interrupt
- Port 40h : 8253 timer 0 clock
- Port 42h : 8253 timer 2 spkr
- Port 43h : 8253 timer control
- Port 82h : DMA page reg ch 3
- Port 3C4h : EGA sequencr index
- Port 3C4h : al = 2, map mask register
- Port 3C8h : VGA pel address
- Port 3C9h : VGA pel data reg
- Port 3CEh : EGA graphic index
- Port 3CEh : al = 3, data rotate
- Port 3CEh : al = 4, read map select
- Port 3CEh : al = 5, mode
- Port 3CEh : al = 7, ignore color bits
- Port 3CEh : al = 8, data bit mask
- Port 3DAh : CGA/EGA vid status
- 29 Ocurrences of non-standard I/O ports used (search for ??).
-
diff --git a/engines/lure/disassembly/Lure_notes.txt b/engines/lure/disassembly/Lure_notes.txt
deleted file mode 100644
index 0b95e8583c..0000000000
--- a/engines/lure/disassembly/Lure_notes.txt
+++ /dev/null
@@ -1,1473 +0,0 @@
-Methods
-=======
-action_dispatch - Dispatches an action for being handled
- Input: si = Hotspot record
- bx = ???
-
-add_sequence_delay - Adds in a sequence to be executed after a given delay
- of tick procs
- Input: bx = Sequence offset
- cx = Number of ticks delay
- dl = ???
-
-animation_draw - Wrapper for the [add_animation_proc] lookup method for
- drawing an animation onto the screen
- Input: ax = Animation index in animation table
- bx = Frame number
-
-animation_decode - Decodes the data for an animation into compressed nibble
- format
- Input: bx = Pointer to data: [bx] = animation disk resource id
-
-animation_decode_inner - Handles the decoding of an animation disk resource
- Input: dx:si = Start of data following header
- es = Output for decoded resource
- Output: di = size of decoded data
-
-animation_find_slot - Finds the first free animation slot in memory. If no slots
- are free, the returned pointer points to the last slot
- Output: di = Returns a pointer to the free slto
-
-animation_load/animation_load_2 - Makes a hotspot 'active' by loading it into
- the active hotspot list (aka. the animation list).
- Input: load => bx = resource Id
- load_2 => si = offset of hotspot record
-
-animation_load_entry - Not sure if this method is just for loading animations; it
- does some checks, and if passed, then takes the word at offset
- 9h in the resource and jumps to that location. In calls I've
- seen so far, this is 7167h, which then calls animation_load
- Input: bx = Resource Id for animation entry
-
-animation_load_entry_2 - Alternate form of the animation load
- Input: si = Animation resource
-
-animation_resolve_segment - Resolves the segment at which an animation begins,
- taking care of preparing the data for the animation
- Input: bx = pointer to animation entry
- Output: ax = segment
- CF = If set, skip the animation
-
-animation_set_entry - Sets the details for an animation slot entry
- Input: ax = Decoded animation segment
- bx = Offset of animation record
- dl = Colour offset for animation
-
-animation_tick - Every frame calls the defined handler proc for any active
- hotspots (ie. that are loaded into the animation list)
-
-animation_unload/animation_unload_2 - Removes a hotspot from the active hotspot
- list. Both are almost the same except animation_unload additionally
- sets field 0Bh of the hotspot (the offset in the animation list where
- a hotspot is loaded) to zero.
-
-animations_preload - Decodes any animations ilsted for the current room, based
- on a system list. This is likely intended to improve performance on
- low end systems, as it means the bulk of animations are already decoded
- before a new screen is faded in
-
-animations_preload_ticks - Handles repeatably calling the animation tick method
- for hotspots in a room several times before the room is displayed
-
-char_face_up/char_face_down/char_face_left/char_face_right - Faces the character
- represented by a given hotspot in the given direction
- Input: si = Hotspot record
- di = Animation slot
-
-character_change_room - Changes the current room for a given character
- Input: current_hotspot = Character hotspot Id
- dx = New room number
- cx = New X position
- bx = New Y position
-
-character_change_room_check_bumped - Called as part of character_change_room
- to check whether there is any bump occurring
-
-character_check_room_change - Checks whether the given character is within the
- bounds of a room exit, and if so, handles moving the player to
- the new room
- Input: si = Character hotspot Id
- di = Chracter animation slot
-
-character_face_hotspot - Makes a given character face a given hotspot
- Input: di = Character animation slot
- si = Hotspot record being used
-
-character_face_hotspot_2 - Makes a given character face a given hotspot
- Input: ax = Character Id
- bx = Hotspot Id of object being used
-
-character_find_impinging_chars - Scans through the animation list for any
- characters whose position is impinging that of the given character
- Input: di = Character animation slot
-
-character_pathfind_clear - Checks the pathfinding set flag for the given hotspot,
- and if it set (ie. the hotspot has it's covering cells in the
- pathfinding layer for the room set), then clears the flag and
- clears the accompanying pathfinding cells
- Input: ax = Character Id
- bx = Destination X
- cx = Destination Y
-
-
-character_pathfind - Handles pathfinding a segment of a walking path to a
- given destination
- Input: ax = character Id
- bx = Dest X Pos
- cx = Dest Y Pos
- dl = Hotspot[4Ch]
- Output: bx = Pointer to list of walking segments that gets built
- ax = 0 => pathfinding still needed
- 1 => end of pathfinding reached (destination clear)
- 2 => end of pathfinding reached (destination blocked)
- 3 => end of pathfinding reached (no path to dest)
- 4 => end of pathfinding reached (no walking possible)
-
-character_paused_list_check - Checks a list of impinging characters for
- characters, and if there isn't an entry in the paused list,
- adds a new one
- Input: di = Animation slot
-
-character_paused_list_countdown - Decrements by one any current entries in the
- list of characters that currently need to be paused
-
-character_paused_list_reset - Resets any current entries in the paused
- characters list for the specified hotspot to a countdown value
- of 1 so they will expire in the next frame
- Input: di = Animation slot
-
-character_paused_list_scan - Scans the paused list for any entry for the
- specified hotspot, and if found, resets it back to a wait
- counter of 15
- Input: di = Animation slot
-
-character_reset_direction - Rounds off the given character's position, and sets
- their current frame to the default frame for the character's
- current direction
- Input: si = Character hotspot record
- di = Character animation slot
-
-character_set_random_dest - Chooses a random destination for a given character,
- within a rectangle specified in the room data
- Input: si = Character hotspot record
- di = Character animation slot
- bx = Offset to a current action record within the character hotspot
-
-character_start_walking - Starts the character walking towards a given position
- Input: si = Character hotspot record
- cx = Destination X
- dx = Destination Y
-
-character_translate_movements - Translates a set of instructions of movement
- instructions into a set of offsets to movement records
- (containing frame number sequence and position changes) for each
- direction, followed by the number of steps to go in that direction
- Input: si = Hotspot offset
- dx = Offset to a sequence of source movement data to process,
- which consist of a repeating set of number of steps followed
- by a direction number. It ends with a step count of 0ffffh
- Output: Hotspot[HS_MOVEMENT_SRC_OFFSET] => translated movement data
-
-character_update_frame - Handles updating a character's current frame in a
- movement sequence each tick.
- Output: ax = 1 => for end of the path finding list (ie. at destination),
- 0 => Some walking still remaining
-
-character_walking_check - Scans through a list for X/Y proximity for different
- hotspots, and if the character is not within proximity, starts
- the character walking to it
- Input: si = character hotspot record
- di = character animation slot,
- bx = Pointer to current action record (
- Output: ax => 1 = No movement was required, 0 = Wakling has started
-
-characters_impinging_check - Checks to see if the given character is close enough
- to the player
- Input: bx = First character hotspot record
- si = Second character hotspot record
- Output: ax = 1 -> Characters are close together, 0 -> Characters are not
-
-check_for_impinging_characters - Scans through the animation list for any
- animations that are impinging the specified character
- Input: si = Character hotspot record
- Output: ZF = Set => Character found, Clear => No character found
- bx = animation slot of found character
-
-check_keypress - Non-blocking method to return the next pending keypress, if any
- Output: zero-flag = if set, indicates no key was pending
- al = character
-
-clear_layer_rects - Clears the data structure storing the status of each 32x32
- rect in each layer of a room
-
-confirm_quit - Displays a dialog asking the user whether they want to quit
- Output: ZF = If set, indicates the user wants to quit
-
-copy_rectangle - Copys a 32x32 rectangular area from a source buffer to a
- destination buffer
- Input: ds:si = Position of rectangle in source screen buffer
- es:di = Position to place rectangle in destination screen buffer
- Output: dx = If non-zero, indicates that at least one pixel was non-zero
-
-copy_protection_check - Performs the copy protection check. Note that in the
- English version of the game supplied by Revolution, this has been cracked.
- This is
-
-decode_character - Decodes a character from a compressed bit-stream of text
- Input: DL = current bit position for read is set
- DS:SI = current byte to read data from
- Output: AL = output byte
-
-decode_character_and_hotspot_names - Decodes the names of both the current
- talking character as well as the active hotspot. Note that the
- input and output fields/buffers are hardcoded, and not passed
- to the method
- Input: al = A value of zero suppresses adding the prefix
-
-decode_file_entry - Decodes a file resource, normally a graphics screen
- Input: dx = source data segment
- es = destination segment (for example, A000h for direct to screen)
-
- Output: es:0 holds decoded data
- dx = first segment beyond the end of the decoded data
-
-decode_string - Decodes a string resource from a compressed bit-stream
- Input: es:di = output buffer for string
- ax = Id for string
-
-decode_string_init - Initialises a source pointer for decoding a compressed
- bit-stream string
- Input: ax = Id for string
- Output: ds:si = address of compressed string
- dl = Starting bit position for reading string
-
-
-decode_hotspot_name - Decodes the name of a hotspot, prefixing with the
- correct article of 'a', 'an', or 'the'
-
-decode_and_fade_in_display - Decodes the data for a given screen, and then fades it into
- view by using the defined fade in proc for the given video mode
- Input: [buffer_segment1] = Loaded entry data
-
-display_dialog - Displays a dialog with a given String Id's text
- Input: bx = String resource Id
-
-display_message - Displays a message to the user
- ax = messagae index in table of messages
- dh = 0=>non fatal error, 1=>fatal error
- If a fatal error, function does not return
-
-display_message_dialog - Uses the message segment data to look up the
- specific response to an action for a specific character
- Input: cx = character Id
- ??
-
-display_message_dialog_3 - Uses the message segment data to look up the
- specific response to an action for a specific character
- Input: ax = Message Id. Commonly stored in the sequence field for
- hotspot actions, and identified by the high bit being set
- si = Character hotspot record
- di = Player animation slot
-
-door_close_check - Checks the passed hotspot, which is one half of a doorway,
- to make sure there's no character within it, preventing closing
- Input: bx = Hotspot offset
- Output: al = 1 => Door can close, 0 => Door can't close
-
-draw_dialog_frame - Draws the frame for a dialog in an off-screen buffer
- Input: es:di = Destination buffer
- bx = Horizontal size of dialog - 16
- dx = Vertical size of dialog - 18
-
-flag_covered_cells - Marks any of the 32x32 rectangles making up the screen
- that are covered by the given hotspot as being enabled. This
- is used for optmisation that extra layers only add for areas
- that may need to cover hotspots
- Input: di = animation slot
-
-
-floating_dialog_mouse_check - Checks to see if a floating talk dialog is present,
- the text has completed, and the mouse is inside it.
- Output: floating_dialog_close_flag: 1=conditions met, 0=not met
- al=1, ZF=clear -> conditions not met, al=0, ZF=set -> not met
-
-get_entry_size - Returns the size of the specified resource in paragraphs.
- Input: ax = Resource Id
- Output: dx = number of paragraphs
-
-get_room_resource_pointer/2 - Gets a pointer to a data block of information for
- a given hotspot or room
- Input: bx = Id for _pointer, ax = Id for _pointer2
- Output: si = pointer to data block
-
-get_room_resource_pointer3/4 - Gets a pointer to the header entry for a given
- hotspot or room
- Input: bx = Id for _pointer3, ax = Id for _pointer4
- Output: si = pointer to header entry
-
-hotspot_action_precheck - Does the common prechecking for hotspot actions,
- such as whether the player needs to walk to it or not
- Input: ax = Hotspot Id to be used
- si = Character hotspot record
- di = Character animation slot
- Output: al = 3 => Player is starting to walk to hotspot
-
-hotspot_get_action_sequence - Returns a script offset for the given action on
- a hotspot
- Input: bx = Hotspot record
- Output: ax = Sequence offset if found, or 0 otherwise
- zf = clear if a sequence offset was found
-
-hotscript_script_execute - Executes a given hotspot's script
- Input: si = pointer to hotspot resource
- di = pointer to animation slot
-
-hotspot_disable - Disables a hotspot from being highlightable
- Input: bx = Hotspot Id
-
-hotspot_enable - Enables a hotspot that was previously disabled
- Input: bx = Hotspot Id
-
-hotspots_load - Loads any hotspots registered for the current room into the
- animation list, automatically checking to prevent duplicates from
- being added.
-
-hotspots_unload - Unloads all hotspots from the animation list that don't have
- the special hotspot Id of 0ffffh
-
-increment_action_offset - Moves the current action offset for the given
- character to the next record position
- Input: si = Character hotspot record
-
-install_palette - Installs a sub-palette of 64 entries from a set of palettes,
- each of which is 64*3 bytes long
- Input: ax = index of sub-palette in list of sub-palettes
- palette_segment = Segment set of palettes was loaded into
-
-is_roomexit_hotspot - Checks whether the given hotspot Id is in the list of
- of room exit hotspots
- Input: si = Pointer to list of hotspots
- ax = 0 if hotspot found, 1 if not
-
-load_pic_with_animation - Loads up a picture that has animation data after it,
- as well as the following resource, which contains the animation
- line segment offsets and lengths
- Input: AX = Id of the resource
-
-menu_create_popmenu - Creates a popup menu in an off-screen buffer
-
-menu_make_selections - Shows a dialog with an arbitrary list of selections.
- Returns the selectd item index, or ffffh for no selection made
- Input: dx/ax = bitset for actions to display
- Output: ax = selected item Id
-
-menu_make_selections_select - Does the actual display of a right-click menu
- and make the selection
- Output: ax = selected Id
-
-menubar_copy_to_screen - Copies the data from an off-screen buffer onto
- the secreen
-
-menubar_clear_menu - Clears the data segment occupied by the menubar
-
-menubar_create_menu - Creates a drop down menu for display
- Input: SI = Pointer to data table describing menu
-
-menuitem_show_credits - Shows the game credits
-
-mouse_wait - Goes in a loop of resetting the game palette until a held down
- mouse button is released
-
-open_file - opens up a .vga data file (if not already open), validates that
- it's file number is correct, and loads the entry table into memory
- Input: [file_handle]
-
-open_file2 - sets the default drive to the specified drive and then calls
- the open_file method
- Input: al=drive number
-
-pathfind_reset - Resets the pathfinder for the specified character
- Input: ax = Character hotspot Id
-
-pathfind_clear_covered_cells - Clears the cells covered by the base of a given
- animation from being occupied in the path finding data block. This
- prevents characters from walking through each other
- Input: di = Animation slot
-
-pathfind_flag_covered_cells - Flags the cells covered by the base of a given
- animation as occupied in the path finding data block. This
- prevents characters from walking through each other
- Input: di = Animation slot
-
-pathfind_get_cell - Returns the byte and bit index for the given animation's
- position in the pathfinding data block for the room
- Input: di = Animation slot
- Output: bx = Byte offset in path finding data block
- ax = Bit mask indicating which bit
- cx = Number of bits covering the width of the animation
- ZF = If set, animation is not onscreen
-
-pathfind_populate_cells - Helper method used by character_pathfind to populate
- a decompressed array indicating which areas of a room are walkable
- with incrementing numbers emnating from the destination. This is
- later used to figure out a walkable path by going from cell to
- cell in order of decrementing index to get from source to dest
-
-pathfind_scan_line - Support method for the character_pathfind, and is used to
- scan in a given direction
- Input: bp = Starting position
- bx = Destination position
- cx = Number of loops
- di = Change amount for each loop
- dl = max value for comparison
- Output: bx = New destination position
- dl = New maximum
-
-pathfind_return_to_sp - Creates a breaking point during processing of the
- character_pathfind method such that the next time character_pathfind
- is called, it will pick up after the call to pathfind_return_to_sp
-
-pause_for_input - Waits until either a key or a mouse button is pressed
-
-player_inc_inventory_items - Checks if the specified hotspot is the player,
- and if so, increments the counter for the number of inventory
- items the player currently has
- Input: si = Character hotspot record
-
-popmenu_populate_list - Populates the contents of the list used to define
- what is displayed in the right-click popup menu
- Input: dx:ax = Bitset indicating which actions should be displayed, in
- order of their placement in the action list
-
-prepare_ask_item_list - Creates a list of menuitems for the things a character
- can be asked for
- Input: ax = Action index whose context to generate the list for
-
-protection_cycle_characters - Cycles through a single frame in the list of
- possible characters in the copy protection check and displays them
- on screen.
-
-protection_draw_characters - A wrapper method for drawing both of the
- current characters to the screen
- Input: ax = frame number for left card animation
- bx = frame number for right card animation
-
-random - Returns a pseudo-random number
- Output: ax = Random value
-
-read_and_validate_header - Reads in the header of the .vga file and validates
- that it's valid
-
-read_bit - Reads in a specified bit from ds:si, and shifts the bit mask one bit
- to the right, resetting it back to 80h (and incrementing SI) if the
- set bit was 1h
- Input: dl = Current bitmask
- ds:si = data source
- Output: dl = New bitmask position
- al = and'ed value from ds:si
- ZF = Set if the bit was turned on in the value
- SI = If dl was 1h at input, then SI = SI+1 else SI=SI
-
-read_screen - Reads in the specified screen resource, and optionally a palette
- if the screen is the first layer to be processed for a given room
- Input: ax = Screen Id
-
-read_entry - Outer method for reading an entry - finds and reads in the entry
- with the specified Id
- Input: ax = Id of entry (bits 15-16 are file # 0 - 3), rest are Id bits
- cx:dx = buffer for entry
- Output: dx = first segment following end of read in data
-
-read_entry_into_buffer - Another outer method for reading an entry - reads the
- specified entry into [buffer_segment]:80h
- Input: ax = Id of entry
- Output: dx = first segment following end of read in data
-
-read_file_entry - Reads in an entry from the file
- Input: es:dx - Output buffer to store data in
- bx = File start position in 20h block increments
- cx = Size of entry to read in
- bp = If bp=1, file size is actually 8000h plus the size in CX
-
-read_into_buffer/read_into_buffer_2 - reads entry into the buffer space, and
- then increments the pointer so future reads will be read at a
- point beyond the loaded entry
- Output: ax = segment of loaded entry
- dx = segment following end of loaded entry
-
-read_palette - Reads in the palette from the specified Id resource
- Input: ax = Id of entry (which is passed onto read_entry)
-
-read_screen - Reads and decodes a screen into data_segment2. It may also
- be taking care of adding in any animations
- Input: ax = room/id number
-
-replace_vga_palette - Replaces two sections of the loaded palette with a
- preset alternate set: 60 entries starting at palette index #129,
- and 8 entries at palette index #220
-
-room_add_animations - Adds the player and any room animations to the off-screen
- buffer data_segment2
-
-room_check_cursors - Checks the position of the mouse within the current room
- to see whether the cursor needs to change (such as for moving over
- a hotspot) or on the menubar area
-
-room_check_hotspots - Compares the mouse position against given hotspot lists?
- Input: dx = room number
- di = offset of info table
- bp = Starting offset number for table
-
-room_check_x_extents - Checks whether a given hotspot's position is within
- the clipping x range for the room
- Input: si = Hotspot
- Output: ax = 0 = Hotspot within valid range, 1 = otherwise
-
-room_exit_get_coordinates - Gets the walking coordinates for the exit from
- a given room into a secondary room
- Input: ax = Starting room
- bx = Destination room
- Output: cx = X-coordinate
- dx = Y-coordinate
- ax = Next room number
-
-room_exit_hs_get_pointer - Scans through a list of room exit hotspots that
- connect to each other.
- Input: ax = Hotspot Id
- Output: si = Record Id for room exit hotspot join
- bx = 2 or 8, representing whether the hotspot was #1 or #2 in the record
-
-room_exit_play_sound - Plays a sound for a room exit opening or closing if the
- player is in the same room
- Input: si = Room exit join record
- bx = Index of active hotspot in join record
- cx = 1 for door closing, 0 for door opening
-
-room_handle_click - Checks to see if the mouse has been clicked, and if so,
- handles the various things that can be done, such as closing floating
- dialogs, showing the right-click menu, etc.
-
-room_load_layers - Reads in the layers associated with a room
-
-room_show_rightclick_menu - Shows the right-click menu. If the mouse is over a
- hotspot, it gives that item's action menu. Otherwise, it gives the
- default room Look/Status menu. The method returns when an item is
- selected
- Output: ????
-
-screen_fade_in - Fades in an already loaded screen, by using the defined fade in
- routine in the video methods lookup table
-
-screen_fade_out - Fades out the screen, by using the defined fade out routine
- in the video methods lookup table
-
-screen_set_palette - Sets the default game palette, using the defined lookup method
-
-set_upper_vga_palette - Sets the last 16 palette entries of the VGA palette to a
- predefined set of colours
-
-sequence_execute - Outer execution method for handling a sequence of script instructions.
- Input: ax = Pointer to script set. See tables section for instruction formats
- Output: ax = sequence result value
- zf = set if the result value is zero
-
-sequence_execute_inner - Inner handling method for script instructions
- Input: si = Pointer to script set
-
-show_introduction - Shows the introduction sequence
-
-show_arrow_cursor - Shows the arrow cursor
-
-show_disk_cursor - Shows the disk cursor
-
-show_startup - Shows the starting screens of the game, and then calls the
- show_introduction method to show the animated introduction sequence
-
-skorl_knockout - Runs the animation sequence of a Skorl knocking out the player
-
-sleep - Sleeps for a given number of clock cycles (each being 1/18th of a second)
- Input: ax = number of cycles [Note: I think it's from the start of the
- game or the last time the method was called]
-
-sleep_with_kbd_mouse_break - Pause with breakout by keypress and mouse
- Input: ax = timeout in cy cles
- Output: carry = breakout occurred
- zero = if set, indicates Escape was pressed
-
-start_talk_noone - Starts a character talking with no designated destination
- character (ie. they're talking to themselves)
- Input: bx = Chacter Id
- cx = String Id
-
-talk_add_voice_animation - Adds an animation entry of a talk bubble, which
- gets displayed above a designated character
- Input: di = Hotspot slot
-
-talk_clear_line - Clears the talk line at a specified index. Each talk line
- occupies 8 lines
- Input: ax = Index of talk line to clear
-
-talk_countdown_handler - Handles the counting down of conversation dialogs
- Input: si = Character hotspot
- bx = Pointer to a current action record for character
-
-talk_dialog_init - Initialises a talk dialog for display
- Input: si = Name of character speaking
- di = Speaking text
- data_433 = Character hotspot Id
-
-talk_setup_3 - Sets the necessary flags to display a talk dialog
- Input: al = 1 (??? blocking talk dialog [you can't move until it's closed])
- cx = Hotspot Id of character talking to
- dx = Talk text string Id
- si = Hotspot record for character doing talking
-
-talk_toggle_line_highlight - Toggles the highlight on a line being displayed
- to allow the user to select a talk option
- Input: ax = Index of talk line
-
-toggle_menu_highlight - Toggles the highlighting of a menu name in the
- off-screen copy of a menu
- Input: DI = X Pixel start position on screen
- BX = Width in pixels of area
- data_segment2 = segment of off-screen menubar copy
-
-validate_header - Validates the header of the loaded file
- ah = bits 6-7 is file number
-
-vga_fade_in - Fades in a given graphic screen by cycling each palette index
- from black to the destination RGB value in increments of one
-
-wait_for_video_port - Pauses until the video port indicates that it's ready
- to rceeive data
-
-word_wrap_string - Word wraps the passed string to a given maximum width
- by
- Input: di = Text to process
-
-
-Lookup Method Table
-===================
-This is a set of procs lookup list that is set to different methods for EGA
-and VGA methods
-
-add_animation_proc - Adds an animation or character frame onto the screen.
- Input: es:si = source pixel data location
- bx = Offset of data for animation (see tables later for animation format)
-
-copy_screen_proc - Copys a screen from [misc_segment]:0 to the screen. Also sets
- up bp:si and dx:bx in preparation for an animation. Coupled with
- load_pic_with_animation that loads a resource with animation data
- Input: misc_segment - Specifies the segment holding the screen data
- Output: bp:si - Address of the first byte following the end of the data
- dx:bx - Address of first byte following decoded data segment data
-
-display_character_proc - Copys a specified character to a graphic buffer
- Input: al = ASCII character
- es:di = Position within screen of character start
- bp = segment of font, which starts at the space character (32), and
- each character takes up 8 bytes. Each byte represents one line,
- with each bit representing whether a pixel is on or off
- dh = Colour to create character as
-
-draw_talk_dialog_proc - Draws the frame for a talk dialog
- Input: es:di = Buffer to store drawn dialog in
-
-
-menu_items_proc - Haven't investigated this method yet. It does get used by
- the right-click popup menu to display the items
-
-pic_decode_proc - Handles the RLE decoding of a picture onto the screen
- Input: dx:bx = Set of copy slice lengths and screen inc amounts in a repeating
- sequence. Each value can be 1 non-zero byte, or a zero byte
- followed by a two byte length
- bp:si = Raw data for transfer to the screen. The data block pointed
- to by dx:bx tells how wide each line slice will be
- Output: dx:bx = First byte after end of length/inc data
- bp:si = First byte after end of transfer data block
-
-read_screen - Reads in a screen with the given Id, decodes it, and also loads
- in a palette with the given Id - 1
- Input: ax = resource Id of the screen
-
-read_screen_alt - Reads in a screen with the given Id, decodes it, and also
- loads in a palette with the given Id - 1
- Input: ax = resource Id of the screen
-
-remove_area_proc - Restores the area of screen previously hidden by a menu
- Input: di = x start position
- bx = width
-
-segment_screen_proc - Segments the screen into 32x32 rectangles, and sets up
- an array of incrementing rectangle numbers for rectangles that
- have pixels in them
- Input: es:di = pointer to decoded screen
- bx = buffer to store status of each screen rectangle
- cl = layer number (0 to 3) [Note: layer is only used to see if it's
- layer 0 background.. for the background all rectangles are
- considered "filled in"]
-
-set_palette_proc - Sets the palette to the default palette
-
-show_screen_proc - Responsible for displaying a screen from data_segment2 to the
- screen specified in [screen_start_seg]. It uses an array specified
- by display_mask to specify 10x6 sets of 32x32 rectangles for whether
- to display each rectangle on the screen.
-
-toggle_menu_highlight_proc - Toggles the highlighting of a menu header
- Input: DI = X Pixel start position on screen
- BX = Width in pixels of area
- data_segment2 = segment of off-screen menubar copy
-
-word_wrap_string - Applies carriage returns in-sequence to a passed string to
- ensure it fits into a given dialog area
- Input:
-
-NPC Script Methods
-==================
-NPC schedules are set up by having a single ACTION_DISPATCH current action in
-the NPC's hotspot record (at offset 63h), with a support record pointer
-pointing to the start of a sequence of instructions using action numbers
-greater than that of all standard actions. As part of the handling of these
-"high number" instructions is an incrementing of the offset for the support
-data so that the NPC instructions are handled sequentially.
-
-The table below lists the special methods list. Each entry is represented in
-the support data table by a word for the action's value, followed by any
-support data as indicated by the method.
-
-Index Method
-===== =======
- 28 npc_set_hotspot5e(uint16 roomNumber, uint16 hs5e)
- Sets both the current room number on the hotspot's current action entry,
- as well as word offset 5eh in the character's hotspot record
- 29 npc_unknown_1()
- ???
- 30 npc_execute_script_proc(uint16 offset)
- Causes the execution of the script at the given offset
- 31 npc_unknown_2()
- Sets the currently unknown words at hs[42h] and hs[44h], and calls a
- method to scan for an entry for the hotspot in the hotspot action list
- 32 npc_set_random_dest()
- Sets the character's destination position randomly within the area
- rectangle specified for the room
- 33 npc_walking_check(uint16 hotspotId)
- Ensures that the given hotspot is in the same room as the character,
- and if so, makes a walking check which starts the character walking if
- the hotspot is not within reach proximity
- 34 npc_set_support_offset(uint16 offsetId)
- Sets the offset for support data in the current action. So it can, for
- example, reset an NPC back to the start of it's script
- 35 npc_set_support_offset_conditional(uint16 sequenceOffset, uint16 offsetId)
- Executes the given script, and if the return is non-zero, then sets the
- current action's support data offset to the given offset. If not, the
- support data offset, moves on to the following record
- 36 npc_dispatch_action(uint16 hotspotId, uint16 offsetId)
- Handles the execution of an action, including standard action prechecks
- 37 npc_unknown_3(uint16 v1, uint16 v2, uint16 v3, uint16 v4)
- ???
- 38 npc_unknown_4(uint16 unused, uint16 v)
- Sets hs[42h] = v
- 39 npc_start_talking(uint16 messageId, uint16 destCharId???)
- This method, I think, causes the character to say the specified message
- to the given destination character
- 40 npc_jump_to_address(uint16 offset)
- Jumps execution to the specified address in the game's code segment
-
-
-Misc Notes
-============
-VGA Files
----------
-* Entries with a length of 294h are palettes
-* At least entry Id #48, #49 are MIDI music with a MThd block
-* Entry Id #10, #15 are code blocks for playing music
-* Entry Id #50 is a set of sub-palettes.. a sub palette contains palette entries
- for the first 64 palette entries (each 3 bytes). This entry contains 5 sub-palettes
-
-VGA File Mapping
-================
-This isn't complete; just some resource Ids I noted down for future reference:
-
-$0001 - Set of 26 16x16 cursors, each taking up 256 bytes
-$0004 - Font set: starting with space character, each character taking 8 bytes
-$0005 - Menubar
-$000A - Music handler code block
-$0010 - Strings resource (compressed - see decode_string & decode_string_init)
-$0018 - Revolution title screen
-$0019 - Revolution title palette
-$001A - Virgin games title screen
-$001B - Virgin games title palette
-$001C - Lure of the Temptress title screen
-$001D - Lure of the Temptress title palette
-$001E - Virtual Threatre title screen
-$001F - Virtual Threatre title palette
-$0021 - Palette for final introduction screen
-$0022 - Animation for final screen
-$0032 - Another copy of the menubar
-
-$0040 - Animation for introduction sequence
-$0041 - Animation for introduction sequence
-$0042 - Animation for introduction sequence
-$0043 - Animation for introduction sequence
-$0044 - Animation for introduction sequence
-$0045 - Animation for introduction sequence
-$0046 - Animation for introduction sequence
-$0047 - Animation for introduction sequence
-$0048 - Animation for introduction sequence
-$0049 - Animation for introduction sequence
-
-$4100 - First screen, first layer
-$7900 - Restart/Restore screen
-
-
-
-Data Structure Notes
-====================
-There are four main lists embedded in the executable, each of which
-represents a different range of Ids. Each entry consists of 9 bytes
-[see get_room_resource_pointer]. The first two bytes represents an
-offset to the specific data for the room.
-
- Resource data:
- Offset Size Meaning
- ------ ---- -------
- 0h 2 Offset for the resource entry - either room or hotspot data
- An entry of 0ffffh means the end of the list
- 2h 2 For the room list, it's the room number, for the hotspot
- lists, it's the string Id for the hotspot name
- 4h 2 For rooms, the string Id for room description, for
- hotspots it's the look at description Id
- 6h 2 Alternate look at description for hotspots. I think
- this only comes into player for takable items to give
- the description when it hasn't yet been picked up
- 8h 1 ???
-
-For the room list, the format of the room records pointed to are as below:
-
- Room data:
- Offset Size Meaning
- ------ ---- -------
- 6h 2 Offset for a list of offsets to pixel blocks for the
- room
- 8h 1 Number of layers in room
- 9h 8 List of resource Id's for room. Either equal to number
- of layers, or # layers + 1 for rooms with extra overlay
- (such as image of cell bars when looking through into cell)
- 11h 2 Sequence offset for room, or ffffh for none
- 13h 2 The current tick time counter is stored here when a
- room is exited
- 17h 1 ???
- 18h 1 Index into table of 8 byte entries starting at ds:2EB1h
- 19h 2 X start for defining valid horizontal areas where hotspots
- can be highlighted
- 1Bh 2 X end, or 0 to indicate no end
- 1Dh ?? Start of room change script. See below:
-
-The room data record is ended by zero or more room change records, followed by
-an ending ffffh value. The format of each record is as follows:
-
- Offset Size Meaning
- ------ ---- -------
- 0 2 X start
- 2 2 X end
- 4 2 Y start
- 6 2 Y end
- 8 2 Sequence offset. If the value is ffffh, then the following
- four fields come into play. Note that this means that
- the record can be one of two sizes, dependant on the
- value of this field
- Ah 1 New room character direction:
- 80h=up, 40h=down, 20h=left, 10h=right
- Bh 1 New room number
- Ch 2 New room X position
- Eh 2 New room Y position
-
-The format of hotspots are as follows:
-
- Hotspot tables:
- Offset Size Meaning
- ------ ---- -------
- 0h 4 Bitset for available actions
- 3h 1 Flags: Meaning unknown, but the following actions apply:
- bit 7 = skip checking bit 6
- bit 6 = Skip over entry
- bit 5 = Skip over entry
- 4h 2 Offset for actions table
- 6h 2 Room number for hotspot. For hotspots that can be
- inventory items, this can also be the Hotspot Id of
- the character holdign the item.
- 8h 1 Script flag - a non-zero value indicates that the value
- at offset 9h is a script offset to execute. Otherwise,
- the offset is treated as a code subroutine, and jumped to
- Also used by non-visual hotspots to indicate the direction
- to face the character in when an action is performed on
- the hotspot
- 9h 2 Script sequence to execute, or offset for loading
- routine for hotspot. So far I'm aware of two code routines:
- 7167h = stub method that calls animation_load
- 3afeh = copy protection check
- Bh 2 Stores offset of animation slot entry the resouce has
- been loaded into
- Dh 2 X start position + 80h
- Fh 2 Y start position + 80h
- 11h 2 Width of hotspot
- 13h 2 Height of hotspot
- 15h 1 Animation's layer. Animations are added in to a scene in
- order of layer 3, layer 1, then layer 2. Animations in
- layer 1 are added in order of the hotspot's bottom row
- 16h 1 ??? Flags byte?
- 17h 2 Tick handler proc offset
- 19h 2 Copy of hotspot width
- 1Bh 2 Copy of hotspot height
- 1Dh 2 Y correction. Currently only known use is as a Y
- correction factor when checking if a character is in
- an exit region
- 1fh 2 Timeout decrement value for frame change
- 21h 2 Pointer to memory containing disk resource Id for the
- pixel data for the hotspot's animation (or possibly
- static image)
- 23h 1 Colour offset start for source pixel data
- 24h 2 Offset for data in scripts2_seg, used in
- hotspot_script_execute. Also seems to be used by
- characters (including the player) as a table offset
- containing data for movement sequence
- 26h 2 Step counter - used as in incrementor when a character
- is moving in a direction to determine when they have
- reached the requisite number of steps required before
- moving to the next direction in a path-finding sequence
- 28h 2 Frame offset - used as a pointer within the movement
- frames for a given direction to quickly retrieve the
- position change and frame number in a walking sequence -
- used along with offset 26h to handling walking
- 2Ah 1 A counter used to determine the number of times the
- action precheck method has been called within the
- handling of an action
- 2Bh 2 ???
- 2Dh 2 Script Id of a hotspot the character is to use
- 2Fh 2 Hotspot Id of a hotspot the character is to use
- 33h 2 ??? Talk data record
- 35h 1 x offset within character for speech bubble
- 36h 1 y offset within character for speech bubble
- 37h 2 ???
- 39h 2 Stores the hotspot Id of the character being talked to
- 3Ch 2 Stores the String Id of a response
- 42h 2 ??? Copy of selected hotspot
- 44h 1 ??? 0 or 2 for further actions in player_tick_proc
- ??? Copy of low byte of selected hotspot
- 45h 2 Hotspot Script Id to execute each tick for NPCs
- 47h 2 Hotspot Id to use.
- 49h 1 Flags whether the hotspot has currently got the cells
- of the pathfinding (walkable areas) layer that it's
- base occupies as covered
- 4Ch 1 Only known use so far is in character pathfinding, where
- if 0, introduces a jz $+2 delay at one point, that is not
- even inside of a loop. This flag may thus be an artefact
- of early code that was no longer used in the final build
- 50h 2 Character direction: 80h=up, 40h=down, 20h=left, 10h=right
- 52h 2 Hotspot Id for selected hotspot
- 54h 2 X ending position for character + 80h - 10h
- 56h 2 Y ending position for character + 80h
- 5Ah 2 For player and other characters indicates the
- assigned offset in the data segment to load the
- details of movement frames. Note that this gets copied
- to offset 24h for use at runtime.
- 60h 1 ???
- 61h 2 Index into the table starting at 63h of the hotspot
- 63h 3*? First slot for pending player actions. Each slot
- consists of three bytes: a single byte command Id, and
- an offset to a support data record.
-
-Movement sequence
-=================
-When a character has to move, sub_90 is
-
-
-Character actions
-=================
-Character hotspots have a buffer for a set of current actions. Each record
-of this list consists of 5 bytes, with the following format:
-
- Offset Size Meaning
- ------ ---- -------
- 0 1 Currenat atcion
- 1 2 Pointer to support data structure
- 3 2 ?? May be room number action occurs in
-
-The possible commands are listed below:
-
- Command
- -------
- 01 = Start walking
- Support data:
- word value = 0
-
- 02 = Dispatch action*
- Support data:
- word value = action to perform
- word value = hotspot Id of selected hotspot
- word value = used hotspot Id
- [03] = Room Number
-
- 03 = Execute Script
-
- 04 = Processing walking path
-
- 05 = Walking in progress
-
-
-* Note that actions (both looking at a hotspot and all other actions) are
-handled by doing an initial dispatch of the action, then a standard walk sequence,
-and finally dispatching the action again when the player is at the appropriate
-proximity to the hotspot
-
-
-Actions Table
-=============
-The actions table offset points to a list that indicates any actions for the
-hotspot that have script sequences attached to them. The table has the following
-format:
-
- Offset Size Meaning
- ------ ---- -------
- 0 2 Number of items in the list
- --------- repeated:
- 2 1 Action number
- 3 2 Sequence offset
- ---------
-
-Animation Resources
-===================
-The raw data for animations is stored in disk resources. They have the following
-format:
-
- - A single word containing the number of header entries
- - A table of words of the previously given number, each representing
- the number of nibbles in the uncompressed data (ie. number of bytes * 2).
- Note that the pixel data starts at offset 40h of the uncompressed data,
- as the first 40h bytes are used by the decompression process.
-
-
-In addition to the four hotspot lists, there is a master hotspot list, which
-contains co-ordinate overrides for some of the hotspots:
-
- Hotspot data:
- Offset Size Meaning
- ------ ---- -------
- 0 2 Id for hotspot to override
- 2 2 X start
- 4 2 X end
- 6 2 Y start
- 8 2 Y end
-
-
-The animation list is made up of a set of animation entry slots, of which there
-are 45 entries, each 29h bytes big, and can be loaded dynamically at runtime
-from hotspot entries. FURTHER NOTE: Animation list may be a bit of a misnaming
-of it - a better name may be "active hotspots" list, since entries in the list
-aren't necessarily animated.
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 X start position + 80h
- 2h 2 Y start position + 80h
- 4h 2 Width of animation
- 6h 2 Height of animation
- 8h 2 Pointer to the start of the current frame for the animation.
- Ah 2 Storage for caching of animation start segment. This is
- filled out at runtime the first time the animation is to
- be displayed at runtime
- Ch 1 Animation's layer. Animations are added in to a scene in
- order of layer 3, layer 1, then layer 2. Animations in
- layer 1 are added in order of the hotspot's bottom row
- Dh 1 ??? Flags byte?
- Eh 2 Room number for animation
- 10h 1 ?? Flag for whether to keep animation active between rooms?
- Loader defaults it to 1, but loads using 7167h afterwards
- sets this back to zero
- 11h 2 Tick handler proc offset - called every frame for hotspots
- loaded into the animation table where [0Ch] is non-zero
- 13h 2 Copy of the animation width - this and the height copy are
- used in some areas to, for example, vary the strict
- Y ordering of objects in a scene (for example, Ratpouch
- has a larger height copy to make him appear on top of
- the rack rather than behind it).
- 15h 2 Copy of the animation height
- 17h 2 Y correction. Currently only known use is as a Y
- correction factor when checking if a character is in
- an exit region
- 19h 2 Offset of the original resource record used to load this
- animation entry.
- 1Bh 2 Hotspot Id of the entry. Can also be 0ffffh, which seems
- to be a special code for the player (don't know yet if
- it's used elsewhere as well)
- 1Dh 1 If non-zero, hotspots in layer 1 will be skipped
- 1Eh 2 So far it's only known use is to store the hotspot Id
- of the character the special 'voice' animation is
- associated with
- 22h 2 Related to direction handling: 0 for up/down,
- 4 for left/right
- 24h 2 So far it's only known use is as a countdown timer
- for closing the special "voice" animation shown on
- top of characters when they're speaking
- 26h 1 Character direction: 0=up, 1=down, 2=left, 3=right
- 27h 1 ??? Set to 1 by animation loader 1
- 28h 1 Colour offset start for source pixel data
- 4Ah 2 ??? Countdown of some form; changed by the action
- countdown list
-
-The animation list is built up at runtime one entry at a time from hotspot
-resources specified in an instruction sequence. The first sequence executed is
-at 23FCh, and is part of the game startup, and the initial resoruce Id is #3e8,
-which equates to 6cefh.
-
-
-Animation disk resource records
--------------------------------
-The animation disk resource record has the following format:
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 Disk resoucre Id of the animation pixels to use
- 2h 1 Flags. Known values:
- Bit Description
- --- -----------
- 2 If set, takes the first word of the decoded data
- as the frame offset. I think this used elsewhere
- as well - this flag may indicate an animation that
- contains an offset table for the frames, rather than
- the standard form, where all frames are the same size
- 3h 2 Cached copy of loaded pixel data segment
- 7h 2 Frame size for decoded animation data
- 9h 2 Offset for -Y movement records
- Bh 2 Offset for +Y movement records
- Dh 2 Offset for -X movement records
- Fh 2 Offset for +X movement records
- 11h 1 Starting up direction frame number
- 12h 1 Starting down direction frame number
- 13h 1 Starting left direction frame number
- 14h 1 Starting right direction frame number
-
-A movement record represents data needed for a single frame of a character's
-movement. It is represented as a set of 6 byte records of the format listed
-below. The end of the set of the set of records is represented by 0ffffh.
-
- Offset Size Meaning
- ------ ---- -------
- 0 2 Frame number to display
- 2 2 16-bit signed integer representing the change in the
- X position
- 4 2 16-bit signed integer representing the change in the
- Y position
-
-
-W2 description
--- -----------
- 1 * Store offset from PIXEL+0Dh, then word (W1+3)>>2
- 2 * Store offset from PIXEL+0Fh, then word (W1+3)>>2
- 3 * Store offset from PIXEL+0Bh, then word (W1+1)>>1
- 4 * Store offset from PIXEL+09h, then word (W1+1)>>1
-
-
-
-
-Room Exits
-----------
-A table of the offsets of the room exit records for each room is stored at
-room_exits_table. An offset of zero for a particular room indicates there are
-no exits.
-
-The exits for a given room are a series of one or more records of 14 bytes each,
-with a word value of 0 following the final entry. The structure of a record is
-described below. Note that all co-ordinates are expressed with an offset of 80h.
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 X start of exit area rectangle
- 2h 2 X end of exit area rectangle
- 4h 2 Y start of exit area rectangle
- 6h 2 Y end of exit area rectangle
- 8h 2 Cursor number to use
- Ah 2 Hotspot Id associated with exit. This can be, for example,
- 2711h for the hotspot Id of the Cell Door in the first room.
- For exits which are always unblocked, the Id will be 0.
- Ch 2 Destination room number
-
-There is also a table of room exit hotspots. This contains records containing
-all room exit hospots, with the table set up with the hotspots that are joined
-together (such as either side of the cell door in room #1 and #2) appearing in
-the same record. Each record is 17 bytes long, and the format is as follows:
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 First hotspot Id of the pair
- 2h 1 Current frame number for hotspot #1
- 3h 1 Ending frame number for hotspot #1
- 4h 1 Sound for hotspot #1 opening
- 5h 1 Sound for hotspot #1 closing
- 6h 2 Second hotspot Id of the pair
- 8h 1 Current frame number for hotspot #2
- 9h 1 Ending frame number for hotspot #1
- Ah 1 Sound for hotspot #1 opening
- Bh 1 Sound for hotspot #2 closing
- Ch 1 If zero, then exit is currently active. Non-zero
- indicates that the exit is blocked
- Dh 2 Pointer to first hotspot's record
- Fh 2 Pointer to second hotspot's record
-
-
-Sequence Table
-==============
-Lure of the Temptress uses a simple scripting set for performing various operations.
-A set of instructions consist of a starting byte that contains the 'opcode' number
-in bits 1 to 7, whilst bit 0, if set, indicates whether the following two bytes
-should be loaded into dx (used as a general purpose register).
-
-Note that logical operations treat 0 as true, and 1 as false as far as the
-interpreter is concerned for calls to conditional jumps after a logical test.
-Because of this non-typical logical state representation, I'm still in the
-process of validating that all the test opcodes are correct.
-
-The following commands are available (the values represent the value in bits 1-7):
-
-Opcode Description
------- -----------
- 00h Restore SP - Restores SP to what it was when the sequence started
- (ie. useful for breaking out of any subsequences that were being executed)
- 01h Add - Pops two values off the stack, adds them, and pushes the result
- 02h Subtract - Pops two values off the stack, subtracts the most recently
- pushed value from the second most recent value, and then pushes
- the result back onto the stack
- 03h Multiply - Pops two values off the stack, multiplies them, and pushes
- the result back onto the stack. Any overflow is also stored in DX
- 04h Divide - Pops two values off the stack and divides the second most
- recently pushed value by the most recent value, and pushes the
- result back on the stack. DX stores any remainder
- 05h Not equals - Pops two values off the stack, and if they're not equal
- pushes 0 back onto the stack. If equal, pushes 1
- 06h Equals - Pops two values off the stack, and if they're equal pushes
- 0 back onto the stack. If not equal, pushes 1
- 07h Greater - Checks to see if the most recently pushed value is greater
- than the second most recent pushed value, and if so pops both of
- them off the stack and pushes a 1 back onto the stack
- 08h Smaller - Checks to see if the most recently pushed value is less
- than the second most recent pushed value, and if so pops both of
- them off the stack and pushes a 1 back onto the stack
- 09h Smaller2 - Identical to Smaller, but uses 'Js' check instead of 'Jc'
- 0Ah Greater2 - Identical to Greater, but uses 'Js' check instead of 'Jc'
- 0Bh And - Pops two values off the stack, ANDs them, and pushes the result
- 0Ch Or - Pops two values off the stack, ORs them, and pushes the result
- 0Dh Logical And - Pops the two top values off the stack, and pushes back
- 1 if both of them are non-zero, otherwise 0
- 0Eh Logical Or - Pops the two top values off the stack, and pushes back
- 1 if either of them are non-zero, otherwise 0
- 0Fh Get Field - Gets a field within the data segment. DX specifies field
- offset from the room_number_2 field, and the value is
- pushed onto the stack
- 10h Set Field - Sets a field within the data segment. DX specifies field
- offset from the room_number_2 field, and the top value
- on the stack is popped to set the field value
- 11h Push value - Pushes the value of DX onto the stack
- 12h Subroutine - Treats the value in DX as a pointer to a subroutine of
- sequence instructions. The subroutine is processed, and when done,
- the outer sequence resumes execution again.
- 13h Call Method - Calls a method number DX in the sequence method list.
- If there any any values on the stack, they get popped
- into bx, cx, and dx respectively.
- 14h Sequence end - ends the script sequence
- 15h Conditional Jump - Pops the top value off the stack, and if it's
- zero, adds the value in DX to the current sequence instructor pointer.
- Note that DX is 16-bit signed, allowing for both negative and
- postivie jumps
- 16h Jump - Adds the value in DX to the current sequence instructor pointer.
- Note that DX is 16-bit signed, allowing for both negative and
- postivie jumps
- 17h Restore SP - Restores SP to what it was when the sequence started
- 18h Restore SP - Restores SP to what it was when the sequence started
- 19h Random - Places a random number between 0 to 255 in DX
-
-Method List
------------
-The Call Method opcode (13h) can call methods, popping up to three values from
-the stack if available, storing them in bx, cx, and dx respectively.
-
-Sequence Delay Table
---------------------
-The sequence_delay_table has 40 slots of 7 bytes each that can contain a
-sequence that shouldn't be exceed until a ceratin time has been exceeded.
-Each slot consists of the following data:
-
- Offset Size Meaning
- ------ ---- -------
- 2 4 Timer counter value at which point sequence should be
- executed. When an entry is initially added to the list,
- the delay amount is added to the current timer value
- 4 2 Sequence offset to execute
- 6 1 ???
-
-
-Hotspot Scripts
-===============
-Sub_37 is a handler method called by the tick handler code for many animations.
-The word at offset 24h of a hotspot entry specifies an offset into seg_c of the
-executable. Starting at the given offset in the segment, data is read in one
-word at a time.
-
-Value Description
------ -----------
-fff6h Set bitset actions based on next 2 words
-fff7h Reads bx=next word, then calls sub_258
-fff8h Reads bx=next word, cx=next word. If cx is either 0 or equal to the
- current room number, then calls sub_247
-fff9h Sets the pixel data record for the hotspot
-fffah Jump to executing the sequence at the offset given by the following word
-fffbh Sets the dimensions of the animation. The next word is shifted left
- by 4 bits and stored as the width. The following word is stored as
- the height (both values are only set in the animation slot)
-fffch Ends the execution and deactivates the animation
-fffdh
-fffeh Sets the start position of the hotspot - the next following word
- specifies the X start, and the one after that is the Y start
-ffffh Reads in the next word and sets the timeout counter of the hotspot.
- The offset 24h entry of the hotspot is also updated to point to the
- next following word
-
-others Set animation frame. If the animation disk resource flags byte has
- bit 2 clear, the frame is calculated by multiplying the opcode word's
- value by the frame size (at offset 7 of the pixel resource record).
- If bit 2 is set, the frame is set by getting the offset from the
- decoded data's offset table. In either case, once the offset is set,
- execution of the script stops.
-
-
-Room List
-=========
- 1 = THE CELL
- 2 = THE OUTER CELL
- 3 = THE GUARD ROOM
- 4 = THE TORTURE ROOM
- 7 = THE SEWER OUTLET
- 8 = Alley
- 9 = CASTLE GATE
-10 = APOTHECARY LANE
-11 = Alley
-12 = MAPIE COURTYARD
-13 = CASTLE WALL
-14 = MIDDLE STREET
-15 = WEREGATE
-17 = WEST STREET
-18 = SMITHY STREET
-19 = THE MARKET PLACE
-20 = BLACKFRIARS ROW
-21 = Alley
-22 = Alley
-23 = Alley
-24 = Alley
-25 = Alley
-27 = Alley
-28 = THE FORGE
-29 = THE SEVERED ARMS
-30 = TAIDGH'S HOUSE
-31 = THE TOWN HALL
-32 = MAGPIE TAVERN
-34 = APOTHECARY WORKSHOP
-35 = THE VILLAGE SHOP
-36 = MONK'S LODGE
-38 = Cave
-39 = Cave
-40 = Cave
-41 = Cavern
-42 = ?
-43 = ?
-44 = ?
-45 = ?
-46 = ?
-47 = ?
-48 = ?
-3081 = Cave
-
-
-393Ch - loading character movement list
----------------------------------------
-30h, 1, 0, 6feh, a18h, 0
-
-Handling:
-
-If next word (W1) is 0, end decoding. Otherwise, read following word (W2)
-and handle as per table below (PIXEL represents the pixel data record):
-
-Talking records
-===============
-A character can specify a current talking record at offset 33h of it's hotspot
-record. If the field is empty, then the main talk list talk_table is used to
-get the starting talking record for a given character. The table consists of
-a series of four byte entries: the first word gives the hotspot Id, the second
-gives the offset of the talking record list for that character.
-
-The actual talking record contains a set of further offsets for talking records;
-the current value of talk_record_index specifies which entry is loaded. There
-is also a check to see if the hotspot name of the character being talked to is
-17Ah "Stranger", in which case the first entry in the list is used.
-
-The talk data record set pointed to by the above offset has the following
-format:
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 Offset for a list of sequence Ids for handling results
- ----- following is a set of 6 byte records for talk lines -----
- 0h 2 Precheck sequence offset - and with 3fffh to get actual
- offset - if the result of execution is 0, then the talk
- entry isn't added to the list.
- High bit of word, if set, will cause the looping of
- talk entry lines to end after processing the record.
- Additionally, a value of 0ffffh ends the set of records
- 2h 2 String resource for talk question, anded with 0x3fffh.
- The two high bits are flags described in the next entry
- 3h 1 Flags - If both bit 7 and bit 6 are set, then the
- entry is skipped
- 4h 2 Post sequence offset - when the high bit is set, the
- sequence number in the remaining bits is executed, and
- the result number used as a lookup (discussed below).
- Otherwise, the value is directly used as a lookup index
-
-Once an entry has been clicked on, the result index (either from running the
-post sequence Id or directly from the field value itself) is used as an index
-into the results. The results structure is a set of 6 byte entries with the
-following structure:
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 Pre sequence offset - If it is non-zero, then the sequence
- is executed. If the result is not the special value 1092h,
- then the result is treated as a new response index,
- which is used instead of the current one
- 2h 2 Response String Id - specifies the response spoken by
- the character to the player
- 4h 2 Post sequence offset - A value of 0ffffh indicates the
- conversation is ended. If the high bit is set, then
- the conversation continues. Otherwise, the given script
- offset is executed, and the conversation ended if the
- result is 0ffffh.
- The remaining bits can specify a starting offset in the
- talk entry list to start from next time.
-
-
-
-Hotspot Action List
--------------------
-The hotspot action list provides a list of hotspots in a "countdown" state..
-every cycle a countdown variable is decremented for each hotspot entry in
-the list, and is used to set offset 4Ah of a given hotspot record. When a
-countdown counter reaches zero, the entry is removed from the list.
-
-I currently know that it's got something to do with talking to characters,
-but I haven't yet figured out what precisely word 4Ah of a hotspot record
-controls.
-
- Offset Size Meaning
- ------ ---- -------
- 0h 2 Hotspot Id of the source talker
- 2h 2 Hotspot Id of the destination talker
- 4h 2 Countdown counter
- 6h 2 Hotspot record offset for destination talker
diff --git a/engines/lure/events.cpp b/engines/lure/events.cpp
index dd96123256..055bfac49c 100644
--- a/engines/lure/events.cpp
+++ b/engines/lure/events.cpp
@@ -44,10 +44,10 @@ Mouse::Mouse() {
_lButton = false;
_rButton = false;
- _cursorNum = 0;
+ _cursorNum = CURSOR_ARROW;
_x = 0;
_y = 0;
- setCursorNum(0);
+ setCursorNum(CURSOR_ARROW);
}
Mouse::~Mouse() {
@@ -84,7 +84,7 @@ void Mouse::cursorOff() {
CursorMan.showMouse(false);
}
-void Mouse::setCursorNum(uint8 cursorNum) {
+void Mouse::setCursorNum(CursorType cursorNum) {
int hotspotX = 7, hotspotY = 7;
if ((cursorNum == CURSOR_ARROW) || (cursorNum == CURSOR_MENUBAR)) {
hotspotX = 0;
@@ -94,7 +94,7 @@ void Mouse::setCursorNum(uint8 cursorNum) {
setCursorNum(cursorNum, hotspotX, hotspotY);
}
-void Mouse::setCursorNum(uint8 cursorNum, int hotspotX, int hotspotY) {
+void Mouse::setCursorNum(CursorType cursorNum, int hotspotX, int hotspotY) {
Resources &res = Resources::getReference();
_cursorNum = cursorNum;
@@ -102,7 +102,7 @@ void Mouse::setCursorNum(uint8 cursorNum, int hotspotX, int hotspotY) {
CursorMan.replaceCursor(cursorAddr, CURSOR_WIDTH, CURSOR_HEIGHT, hotspotX, hotspotY, 0);
}
-void Mouse::pushCursorNum(uint8 cursorNum) {
+void Mouse::pushCursorNum(CursorType cursorNum) {
int hotspotX = 7, hotspotY = 7;
if ((cursorNum == CURSOR_ARROW) || (cursorNum == CURSOR_MENUBAR)) {
hotspotX = 0;
@@ -112,7 +112,7 @@ void Mouse::pushCursorNum(uint8 cursorNum) {
pushCursorNum(cursorNum, hotspotX, hotspotY);
}
-void Mouse::pushCursorNum(uint8 cursorNum, int hotspotX, int hotspotY) {
+void Mouse::pushCursorNum(CursorType cursorNum, int hotspotX, int hotspotY) {
Resources &res = Resources::getReference();
_cursorNum = cursorNum;
@@ -193,4 +193,29 @@ void Events::waitForPress() {
}
}
+// interruptableDelay
+// Delays for a given number of milliseconds. If it returns true, it indicates that
+// the Escape has been pressed to abort whatever sequence is being displayed
+
+bool Events::interruptableDelay(uint32 milliseconds) {
+ Events &events = Events::getReference();
+ uint32 delayCtr = g_system->getMillis() + milliseconds;
+
+ while (g_system->getMillis() < delayCtr) {
+ if (events.quitFlag) return true;
+
+ if (events.pollEvent()) {
+ if (events.type() == Common::EVENT_KEYDOWN)
+ return events.event().kbd.keycode == 27;
+ else if (events.type() == Common::EVENT_LBUTTONDOWN)
+ return false;
+ }
+
+ uint32 delayAmount = delayCtr - g_system->getMillis();
+ if (delayAmount > 10) delayAmount = 10;
+ g_system->delayMillis(delayAmount);
+ }
+ return false;
+}
+
} // end of namespace Lure
diff --git a/engines/lure/events.h b/engines/lure/events.h
index fcdfc343d7..1205ebe158 100644
--- a/engines/lure/events.h
+++ b/engines/lure/events.h
@@ -36,7 +36,7 @@ namespace Lure {
class Mouse {
private:
- uint8 _cursorNum;
+ CursorType _cursorNum;
int16 _x, _y;
bool _lButton, _rButton;
public:
@@ -47,17 +47,17 @@ public:
void cursorOn();
void cursorOff();
- void setCursorNum(uint8 cursorNum);
- void setCursorNum(uint8 cursorNum, int hotspotX, int hotspotY);
- uint8 getCursorNum() { return _cursorNum; }
+ void setCursorNum(CursorType cursorNum);
+ void setCursorNum(CursorType cursorNum, int hotspotX, int hotspotY);
+ CursorType getCursorNum() { return _cursorNum; }
void setPosition(int x, int y);
int16 x() { return _x; }
int16 y() { return _y; }
bool lButton() { return _lButton; }
bool rButton() { return _rButton; }
void waitForRelease();
- void pushCursorNum(uint8 cursorNum);
- void pushCursorNum(uint8 cursorNum, int hotspotX, int hotspotY);
+ void pushCursorNum(CursorType cursorNum);
+ void pushCursorNum(CursorType cursorNum, int hotspotX, int hotspotY);
void popCursor();
};
@@ -72,6 +72,8 @@ public:
bool pollEvent();
void waitForPress();
+ bool interruptableDelay(uint32 milliseconds);
+
Common::Event event() { return _event; }
Common::EventType type() { return _event.type; }
};
diff --git a/engines/lure/game.cpp b/engines/lure/game.cpp
index 26d9c71edd..3ac25f83b8 100644
--- a/engines/lure/game.cpp
+++ b/engines/lure/game.cpp
@@ -29,6 +29,7 @@
#include "lure/scripts.h"
#include "lure/res_struct.h"
#include "lure/animseq.h"
+#include "lure/fights.h"
#include "common/config-manager.h"
@@ -51,20 +52,14 @@ Game::~Game() {
delete _debugger;
}
-void Game::nextFrame() {
- Resources &res = Resources::getReference();
- ValueTableData &fields = res.fieldList();
- Room &room = Room::getReference();
- HotspotList::iterator i;
-
- res.pausedList().countdown();
- room.checkCursor();
- room.update();
-
+void Game::tick() {
// Call the tick method for each hotspot - this is somewaht complicated
// by the fact that a tick proc can unload both itself and/or others,
// so we first get a list of the Ids, and call the tick proc for each
// id in sequence if it's still active
+ Resources &res = Resources::getReference();
+ ValueTableData &fields = res.fieldList();
+ HotspotList::iterator i;
uint16 *idList = new uint16[res.activeHotspots().size()];
int idSize = 0;
@@ -84,6 +79,20 @@ void Game::nextFrame() {
debugC(ERROR_DETAILED, kLureDebugAnimations, "Hotspot ticks end");
delete[] idList;
+}
+
+void Game::nextFrame() {
+ Resources &res = Resources::getReference();
+ Room &room = Room::getReference();
+
+ if (Fights.isFighting())
+ Fights.fightLoop();
+
+ res.pausedList().countdown();
+ room.update();
+ room.checkCursor();
+ tick();
+
Screen::getReference().update();
}
@@ -131,14 +140,32 @@ void Game::execute() {
uint16 roomNum = room.roomNumber();
if ((events.event().kbd.flags == Common::KBD_CTRL) &&
- (events.event().kbd.keycode == 'd')) {
+ (events.event().kbd.keycode == Common::KEYCODE_d)) {
// Activate the debugger
_debugger->attach();
break;
}
- switch (events.event().kbd.ascii) {
- case 27:
+ // Handle special keys
+ bool handled = true;
+ switch (events.event().kbd.keycode) {
+ case Common::KEYCODE_F5:
+ SaveRestoreDialog::show(true);
+ break;
+
+ case Common::KEYCODE_F7:
+ SaveRestoreDialog::show(false);
+ break;
+
+ default:
+ handled = false;
+ }
+ if (handled)
+ continue;
+
+ // Handle any remaining standard keys
+ switch (events.event().kbd.keycode) {
+ case Common::KEYCODE_ESCAPE:
events.quitFlag = true;
break;
@@ -164,8 +191,8 @@ void Game::execute() {
room.roomNumber());
break;
- case 267: // keypad '/'
- case '/':
+ case Common::KEYCODE_KP_DIVIDE:
+ case Common::KEYCODE_SLASH:
room.setShowInfo(!room.showInfo());
break;
@@ -443,7 +470,7 @@ void Game::handleRightClickMenu() {
strcat(statusLine, stringList.getString(S_FOR));
statusLine += strlen(statusLine);
- itemId = PopupMenu::ShowItems(GET);
+ itemId = PopupMenu::ShowItems(GET, player->roomNumber());
breakFlag = ((itemId != 0xffff) && (itemId != 0xfffe));
break;
@@ -570,6 +597,10 @@ bool Game::GetTellActions() {
_tellCommands[0] = room.hotspotId();
_numTellCommands = 0;
+ // Set up a room transfer list
+ Common::List<uint16> roomList;
+ roomList.push_front(room.roomNumber());
+
// Loop for getting tell commands
while ((_numTellCommands >= 0) && (_numTellCommands < MAX_TELL_COMMANDS)) {
@@ -618,9 +649,9 @@ bool Game::GetTellActions() {
if (action != RETURN) {
// Prompt for selection
if ((action != USE) && (action != DRINK) && (action != GIVE))
- selectionId = PopupMenu::ShowItems(action);
+ selectionId = PopupMenu::ShowItems(action, *roomList.begin());
else
- selectionId = PopupMenu::ShowItems(GET);
+ selectionId = PopupMenu::ShowItems(GET, *roomList.begin());
if ((selectionId == 0xffff) || (selectionId == 0xfffe)) {
// Move back to prompting for action
@@ -633,6 +664,7 @@ bool Game::GetTellActions() {
if (selectionId < NOONE_ID) {
// Must be a room selection
strings.getString(selectionId, selectionName);
+ roomList.push_front(selectionId);
} else {
hotspot = res.getHotspot(selectionId);
assert(hotspot);
@@ -663,7 +695,7 @@ bool Game::GetTellActions() {
}
// Get the second parameter
- selectionId = PopupMenu::ShowItems(GET);
+ selectionId = PopupMenu::ShowItems(GET, *roomList.begin());
if ((selectionId == 0xfffe) || (selectionId == 0xffff)) {
--paramIndex;
statusLine = statusLinePos[_numTellCommands][paramIndex];
@@ -712,9 +744,13 @@ bool Game::GetTellActions() {
paramIndex = 0;
else if ((action == ASK) || (action == GIVE) || (action == USE))
paramIndex = 2;
- else
+ else {
paramIndex = 1;
-
+ if (action == GO_TO)
+ // Remove top of the cached room change list
+ roomList.erase(roomList.begin());
+ }
+
statusLine = statusLinePos[_numTellCommands][paramIndex];
*statusLine = '\0';
}
@@ -789,17 +825,18 @@ void Game::doQuit() {
s->centerOnScreen();
delete s;
- char key = '\0';
+ Common::KeyCode key = Common::KEYCODE_INVALID;
do {
if (events.pollEvent()) {
if (events.event().type == Common::EVENT_KEYDOWN) {
- key = events.event().kbd.ascii;
- if ((key >= 'A') && (key <= 'Z')) key += 'a' - 'A';
+ key = events.event().kbd.keycode;
}
}
- } while (((uint8) key != 27) && (key != 'y') && (key != 'n'));
+ } while ((key != Common::KEYCODE_ESCAPE) &&
+ (key != Common::KEYCODE_y) &&
+ (key != Common::KEYCODE_n));
- events.quitFlag = key == 'y';
+ events.quitFlag = (key == Common::KEYCODE_n);
if (!events.quitFlag) {
screen.update();
mouse.cursorOn();
@@ -864,10 +901,6 @@ void Game::handleBootParam(int value) {
room.setRoomNumber(2);
break;
-
- default:
- room.setRoomNumber(value);
- break;
}
}
diff --git a/engines/lure/game.h b/engines/lure/game.h
index 43a146f2be..b1d1f8d21a 100644
--- a/engines/lure/game.h
+++ b/engines/lure/game.h
@@ -39,7 +39,7 @@
namespace Lure {
-enum GameState {GS_RESTORE_RESTART = 1, GS_CAUGHT = 2};
+enum GameState {GS_RESTORE_RESTART = 1, GS_CAUGHT = 2, GS_EXIT = 3};
class Game {
private:
@@ -66,6 +66,7 @@ public:
static Game &getReference();
+ void tick();
void nextFrame();
void execute();
void setState(uint8 flags) { _state = flags; }
diff --git a/engines/lure/hotspots.cpp b/engines/lure/hotspots.cpp
index 6cc863469a..82b4725a70 100644
--- a/engines/lure/hotspots.cpp
+++ b/engines/lure/hotspots.cpp
@@ -34,6 +34,7 @@
#include "lure/res_struct.h"
#include "lure/events.h"
#include "lure/game.h"
+#include "lure/fights.h"
#include "common/endian.h"
namespace Lure {
@@ -108,6 +109,7 @@ Hotspot::Hotspot(Hotspot *character, uint16 objType): _pathFinder(this) {
_exitCtr = 0;
_voiceCtr = 0;
_walkFlag = false;
+ _skipFlag = false;
switch (objType) {
case VOICE_ANIM_ID:
@@ -171,6 +173,9 @@ void Hotspot::setAnimation(uint16 newAnimId) {
Resources &r = Resources::getReference();
HotspotAnimData *tempAnim;
_animId = newAnimId;
+ if (_data)
+ _data->animRecordId = newAnimId;
+
if (newAnimId == 0)
tempAnim = NULL;
else {
@@ -217,30 +222,29 @@ void Hotspot::setAnimation(HotspotAnimData *newRecord) {
_anim = newRecord;
MemoryBlock *src = Disk::getReference().getEntry(_anim->animId);
- uint16 *numEntries = (uint16 *) src->data();
+ uint16 numEntries = READ_LE_UINT16(src->data());
uint16 *headerEntry = (uint16 *) (src->data() + 2);
- assert((*numEntries >= 1) && (*numEntries < 100));
+ assert((numEntries >= 1) && (numEntries < 100));
// Calculate total needed size for output and create memory block to hold it
uint32 totalSize = 0;
- for (uint16 ctr = 0; ctr < *numEntries; ++ctr, ++headerEntry) {
- totalSize += (*headerEntry + 31) / 32;
+ for (uint16 ctr = 0; ctr < numEntries; ++ctr, ++headerEntry) {
+ totalSize += (READ_LE_UINT16(headerEntry) + 31) / 32;
}
totalSize = (totalSize + 0x81) << 4;
MemoryBlock *dest = Memory::allocate(totalSize);
- uint32 srcStart = (*numEntries + 1) * sizeof(uint16) + 6;
+ uint32 srcStart = (numEntries + 1) * sizeof(uint16) + 6;
AnimationDecoder::decode_data(src, dest, srcStart);
- _numFrames = *numEntries;
+ _numFrames = numEntries;
_frameNumber = 0;
// Special handling need
if (newRecord->animRecordId == SERF_ANIM_ID) {
_frameStartsUsed = true;
_frames = new Surface(416, 27);
- }
- else {
+ } else {
_frames = new Surface(_width * _numFrames, _height);
_frameStartsUsed = false;
}
@@ -350,7 +354,7 @@ void Hotspot::copyTo(Surface *dest) {
return;
// Reduce the source rectangle to only the on-screen portion
- r.top += -(yPos + MENUBAR_Y_SIZE);
+ r.top += -yPos + MENUBAR_Y_SIZE;
yPos = MENUBAR_Y_SIZE;
}
else if (yPos >= FULL_SCREEN_HEIGHT)
@@ -414,9 +418,10 @@ bool Hotspot::executeScript() {
}
void Hotspot::tick() {
- debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick begin", _hotspotId);
+ uint16 id = _hotspotId;
+ debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick begin", id);
_tickHandler(*this);
- debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick end", _hotspotId);
+ debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick end", id);
}
void Hotspot::setTickProc(uint16 newVal) {
@@ -828,7 +833,7 @@ HotspotPrecheckResult Hotspot::actionPrecheck(HotspotData *hotspot) {
} else if (hotspot->roomNumber != roomNumber()) {
// loc_884
if (actionCtr() == 0)
- converse(0, hotspotId());
+ converse(NOONE_ID, 0);
setActionCtr(0);
return PC_NOT_IN_ROOM;
} else if (actionCtr() != 0) {
@@ -992,7 +997,6 @@ bool Hotspot::characterWalkingCheck(HotspotData *hotspot) {
}
// Default walking handling
- // TODO: ANIM[27h] = 1 if hotspot has walk co-ordinates
if ((ABS(x() - xp) >= 8) ||
(ABS(y() + heightCopy() - yp - 1) >= 19)) {
walkTo(xp, yp);
@@ -1242,7 +1246,8 @@ void Hotspot::doOpen(HotspotData *hotspot) {
joinRec->blocked = 0;
if (hotspotId() != PLAYER_ID) {
- // TODO: HS[44h]=3, HS[42h]W = 4
+ setCharacterMode(CHARMODE_PAUSED);
+ setDelayCtr(4);
}
}
}
@@ -1465,8 +1470,8 @@ void Hotspot::doTell(HotspotData *hotspot) {
character->setBlockedFlag(false);
for (int index = 1; index < cmdData.numParams(); index += 3) {
- character->currentActions().addBack((Action) cmdData.param(index),
- character->roomNumber(), cmdData.param(index + 1), cmdData.param(index + 2));
+ character->currentActions().addBack((Action) cmdData.param(index), 0,
+ cmdData.param(index + 1), cmdData.param(index + 2));
}
}
}
@@ -1966,8 +1971,8 @@ void Hotspot::npcJumpAddress(HotspotData *hotspot) {
Resources &res = Resources::getReference();
ValueTableData &fields = res.fieldList();
int procIndex = _currentActions.top().supportData().param(0);
- HotspotData *player;
- CharacterScheduleEntry *newEntry;
+ Hotspot *player;
+ CharacterScheduleEntry *entry;
endAction();
switch (procIndex) {
@@ -1980,9 +1985,14 @@ void Hotspot::npcJumpAddress(HotspotData *hotspot) {
break;
case 1:
- player = res.getHotspot(PLAYER_ID);
- newEntry = res.charSchedules().getEntry(JUMP_ADDR_2_SUPPORT_ID, NULL);
- _currentActions.top().setSupportData(newEntry);
+ player = res.getActiveHotspot(PLAYER_ID);
+ if (player->y() < 52) {
+ entry = res.charSchedules().getEntry(JUMP_ADDR_2_SUPPORT_ID, NULL);
+ assert(entry);
+
+ _currentActions.clear();
+ _currentActions.addFront(DISPATCH_ACTION, entry, ROOMNUM_CELLAR);
+ }
break;
default:
@@ -2131,9 +2141,11 @@ HandlerMethodPtr HotspotTickHandlers::getHandler(uint16 procOffset) {
case PLAYER_TICK_PROC_ID:
return playerAnimHandler;
case 0x7C14:
+ case FOLLOWER_TICK_PROC_2:
return followerAnimHandler;
- case 0x7EFA:
- return skorlAnimHandler;
+ case JAILOR_TICK_PROC_ID:
+ case 0x7F02:
+ return jailorAnimHandler;
case STANDARD_ANIM_2_TICK_PROC:
return standardAnimHandler2;
case STANDARD_ANIM_TICK_PROC:
@@ -2163,16 +2175,30 @@ HandlerMethodPtr HotspotTickHandlers::getHandler(uint16 procOffset) {
case 0x82A0:
return barmanAnimHandler;
case 0x85ce:
- return skorlGaurdAnimHandler;
+ return skorlAnimHandler;
case 0x862D:
return gargoyleAnimHandler;
+ case GOEWIN_SHOP_TICK_PROC:
+ return goewinShopAnimHandler;
case 0x86FA:
case 0x86FF:
+ case 0x871E:
+ case 0x873D:
+ case 0x8742:
+ case 0x8747:
return skullAnimHandler;
+ case 0x87B3:
+ return dragonFireAnimHandler;
+ case 0x87EC:
+ return castleSkorlAnimHandler;
case 0x882A:
return rackSerfAnimHandler;
case TALK_TICK_PROC_ID:
return talkAnimHandler;
+ case 0x982D:
+ return fighterAnimHandler;
+ case PLAYER_FIGHT_TICK_PROC_ID:
+ return playerFightAnimHandler;
default:
error("Unknown tick proc %xh for hotspot", procOffset);
// return defaultHandler;
@@ -2493,25 +2519,25 @@ void HotspotTickHandlers::voiceBubbleAnimHandler(Hotspot &h) {
debugC(ERROR_DETAILED, kLureDebugAnimations,
"Voice Bubble anim handler: char = %xh, ctr = %d, char speaking ctr = %d",
h.hotspotId(), h.voiceCtr(),
- res.getActiveHotspot(res.getTalkingCharacter())->resource()->talkCountdown);
+ res.getHotspot(res.getTalkingCharacter())->talkCountdown);
if (h.voiceCtr() != 0)
h.setVoiceCtr(h.voiceCtr() - 1);
if (h.voiceCtr() != 0) {
// Countdown not yet ended
- Hotspot *charHotspot = res.getActiveHotspot(res.getTalkingCharacter());
- if (charHotspot->roomNumber() == h.roomNumber()) {
+ HotspotData *charHotspot = res.getHotspot(res.getTalkingCharacter());
+ if (charHotspot->roomNumber == h.roomNumber()) {
// Character is still in the same room as when it began speaking
- if (charHotspot->resource()->talkCountdown != 0) {
+ if (charHotspot->talkCountdown != 0) {
// Character still talking
- if (!res.checkHotspotExtent(charHotspot->resource())) {
+ if (!res.checkHotspotExtent(charHotspot)) {
// Set voice bubble off screen to hide it
h.setPosition(h.x(), -100);
} else {
// Keep voice bubble in track with character
- h.setPosition(charHotspot->x() + charHotspot->talkX() + 12,
- charHotspot->y() + charHotspot->talkY() - 18);
+ h.setPosition(charHotspot->startX + charHotspot->talkX + 12,
+ charHotspot->startY + charHotspot->talkY - 18);
}
return;
}
@@ -2796,8 +2822,8 @@ void HotspotTickHandlers::followerAnimHandler(Hotspot &h) {
ValueTableData &fields = res.fieldList();
Hotspot *player = res.getActiveHotspot(PLAYER_ID);
- if ((fields.getField(37) == 0) && h.currentActions().isEmpty()) {
- if (h.roomNumber() != player->roomNumber()) {
+ if ((h.resource()->tickProcOffset == FOLLOWER_TICK_PROC_2) || (fields.getField(37) == 0)) {
+ if (h.currentActions().isEmpty() && (h.roomNumber() != player->roomNumber())) {
// Character in different room than player
if (h.hotspotId() == GOEWIN_ID)
h.currentActions().addFront(DISPATCH_ACTION, player->roomNumber());
@@ -2872,18 +2898,17 @@ void HotspotTickHandlers::followerAnimHandler(Hotspot &h) {
standardCharacterAnimHandler(h);
}
-void HotspotTickHandlers::skorlAnimHandler(Hotspot &h) {
+void HotspotTickHandlers::jailorAnimHandler(Hotspot &h) {
Resources &res = Resources::getReference();
ValueTableData &fields = res.fieldList();
HotspotData *player = res.getHotspot(PLAYER_ID);
- if ((fields.getField(11) != 0) && !h.skipFlag() &&
- (h.roomNumber() == player->roomNumber)) {
- // TODO: Need extra check on data_669
-
- if (Support::charactersIntersecting(h.resource(), player)) {
- // Skorl has caught the player
- Game::getReference().setState(GS_RESTORE_RESTART | GS_CAUGHT);
+ if ((fields.getField(11) != 0) || (h.hotspotId() == CASTLE_SKORL_ID)) {
+ if (!h.skipFlag() && (h.roomNumber() == player->roomNumber)) {
+ if (Support::charactersIntersecting(h.resource(), player)) {
+ // Skorl has caught the player
+ Game::getReference().setState(GS_RESTORE_RESTART | GS_CAUGHT);
+ }
}
}
@@ -3290,6 +3315,14 @@ void HotspotTickHandlers::talkAnimHandler(Hotspot &h) {
}
}
+void HotspotTickHandlers::fighterAnimHandler(Hotspot &h) {
+ Fights.fighterAnimHandler(h);
+}
+
+void HotspotTickHandlers::playerFightAnimHandler(Hotspot &h) {
+ Fights.playerAnimHandler(h);
+}
+
void HotspotTickHandlers::grubAnimHandler(Hotspot &h) {
Resources &res = Resources::getReference();
h.handleTalkDialog();
@@ -3521,10 +3554,8 @@ void HotspotTickHandlers::barmanAnimHandler(Hotspot &h) {
h.setFrameNumber(h.actionCtr());
}
-void HotspotTickHandlers::skorlGaurdAnimHandler(Hotspot &h) {
+void HotspotTickHandlers::skorlAnimHandler(Hotspot &h) {
h.handleTalkDialog();
-
- // Set the frame number
h.setFrameNumber(h.actionCtr());
}
@@ -3532,12 +3563,80 @@ void HotspotTickHandlers::gargoyleAnimHandler(Hotspot &h) {
h.handleTalkDialog();
}
+void HotspotTickHandlers::goewinShopAnimHandler(Hotspot &h) {
+ Resources &res = Resources::getReference();
+ ValueTableData &fields = res.fieldList();
+
+ h.setDirection(UP);
+ h.setCharacterMode(CHARMODE_WAIT_FOR_INTERACT);
+
+ h.handleTalkDialog();
+ if (h.frameCtr() > 0) {
+ h.decrFrameCtr();
+ return;
+ }
+
+ h.executeScript();
+
+ if (h.delayCtr() > 0) {
+ h.setDelayCtr(h.delayCtr() - 1);
+
+ if (h.delayCtr() == 0) {
+ Hotspot *playerHotspot = res.getActiveHotspot(PLAYER_ID);
+ uint16 talkIndex = fields.getField(TALK_INDEX);
+
+ if ((talkIndex == 12) || (talkIndex == 13) || (talkIndex == 14) ||
+ (playerHotspot->roomNumber() == 34))
+ h.setDelayCtr(1500);
+ else
+ Script::normalGoewin(0, 0, 0);
+ }
+ }
+}
+
void HotspotTickHandlers::skullAnimHandler(Hotspot &h) {
Resources &res = Resources::getReference();
- RoomExitJoinData *joinRec = res.getExitJoin(
- (h.hotspotId() == 0x42f) ? 0x272A : 0x272C);
+ uint16 doorId = 0x272E;
+ if ((h.hotspotId() == 0x42E) || (h.hotspotId() == 0x431) || (h.hotspotId() == 0x432))
+ doorId = 0x272A;
+ else if ((h.hotspotId() == 0x42f) || (h.hotspotId() == 0x433))
+ doorId = 0x272C;
+
+ RoomExitJoinData *joinRec = res.getExitJoin(doorId);
+ if ((h.hotspotId() == 0x42E) || (h.hotspotId() == 0x42F)) {
+ h.setFrameNumber(joinRec->blocked ? 0 : 1);
+ } else {
+ h.setFrameNumber(joinRec->blocked ? 1 : 0);
+ }
+}
+
+void HotspotTickHandlers::dragonFireAnimHandler(Hotspot &h) {
+ if (h.executeScript())
+ // Script is finished - player is dead
+ Game::getReference().setState(GS_RESTORE_RESTART);
+}
+
+void HotspotTickHandlers::castleSkorlAnimHandler(Hotspot &h) {
+ Resources &res = Resources::getReference();
+
+ h.handleTalkDialog();
+ if (h.frameCtr() > 0) {
+ h.decrFrameCtr();
+ return;
+ }
- h.setFrameNumber(joinRec->blocked ? 0 : 1);
+ if (h.executeScript()) {
+ HotspotData *hotspot = res.getHotspot(h.hotspotId());
+ assert(hotspot);
+ res.deactivateHotspot(hotspot->hotspotId);
+ hotspot->layer = 255;
+ hotspot->talkCountdown = 0;
+ hotspot->flags |= HOTSPOTFLAG_MENU_EXCLUSION;
+
+ hotspot = res.getHotspot(CASTLE_SKORL_ID);
+ hotspot->roomNumber = 45;
+ res.activateHotspot(CASTLE_SKORL_ID);
+ }
}
void HotspotTickHandlers::rackSerfAnimHandler(Hotspot &h) {
diff --git a/engines/lure/hotspots.h b/engines/lure/hotspots.h
index 970f05414c..3f8bc544f6 100644
--- a/engines/lure/hotspots.h
+++ b/engines/lure/hotspots.h
@@ -67,7 +67,7 @@ private:
static void roomExitAnimHandler(Hotspot &h);
static void playerAnimHandler(Hotspot &h);
static void followerAnimHandler(Hotspot &h);
- static void skorlAnimHandler(Hotspot &h);
+ static void jailorAnimHandler(Hotspot &h);
static void sonicRatAnimHandler(Hotspot &h);
static void droppingTorchAnimHandler(Hotspot &h);
static void playerSewerExitAnimHandler(Hotspot &h);
@@ -81,11 +81,15 @@ private:
static void talkAnimHandler(Hotspot &h);
static void grubAnimHandler(Hotspot &h);
static void barmanAnimHandler(Hotspot &h);
- static void skorlGaurdAnimHandler(Hotspot &h);
+ static void skorlAnimHandler(Hotspot &h);
static void gargoyleAnimHandler(Hotspot &h);
+ static void goewinShopAnimHandler(Hotspot &h);
static void skullAnimHandler(Hotspot &h);
+ static void dragonFireAnimHandler(Hotspot &h);
+ static void castleSkorlAnimHandler(Hotspot &h);
static void rackSerfAnimHandler(Hotspot &h);
-
+ static void fighterAnimHandler(Hotspot &h);
+ static void playerFightAnimHandler(Hotspot &h);
public:
static HandlerMethodPtr getHandler(uint16 procOffset);
};
@@ -129,6 +133,10 @@ public:
class CurrentActionStack {
private:
ManagedList<CurrentActionEntry *> _actions;
+ void validateStack() {
+ if (_actions.size() > 20)
+ error("NPC character got an excessive number of pending actions");
+ }
public:
CurrentActionStack() { _actions.clear(); }
@@ -143,21 +151,27 @@ public:
void addBack(CurrentAction newAction, uint16 roomNum) {
_actions.push_back(new CurrentActionEntry(newAction, roomNum));
+ validateStack();
}
void addBack(CurrentAction newAction, CharacterScheduleEntry *rec, uint16 roomNum) {
_actions.push_back(new CurrentActionEntry(newAction, rec, roomNum));
+ validateStack();
}
void addBack(Action newAction, uint16 roomNum, uint16 param1, uint16 param2) {
_actions.push_back(new CurrentActionEntry(newAction, roomNum, param1, param2));
+ validateStack();
}
void addFront(CurrentAction newAction, uint16 roomNum) {
_actions.push_front(new CurrentActionEntry(newAction, roomNum));
+ validateStack();
}
void addFront(CurrentAction newAction, CharacterScheduleEntry *rec, uint16 roomNum) {
_actions.push_front(new CurrentActionEntry(newAction, rec, roomNum));
+ validateStack();
}
void addFront(Action newAction, uint16 roomNum, uint16 param1, uint16 param2) {
_actions.push_front(new CurrentActionEntry(newAction, roomNum, param1, param2));
+ validateStack();
}
void saveToStream(WriteStream *stream);
@@ -373,6 +387,8 @@ public:
void setTickProc(uint16 newVal);
bool persistant() { return _persistant; }
void setPersistant(bool value) { _persistant = value; }
+ uint8 colourOffset() { return _colourOffset; }
+ void setColourOffset(uint8 value) { _colourOffset = value; }
void setRoomNumber(uint16 roomNum) {
_roomNumber = roomNum;
if (_data) _data->roomNumber = roomNum;
diff --git a/engines/lure/intro.cpp b/engines/lure/intro.cpp
index e8107e2f1a..3f939c6389 100644
--- a/engines/lure/intro.cpp
+++ b/engines/lure/intro.cpp
@@ -47,47 +47,24 @@ static const AnimRecord anim_screens[] = {{0x40, 0, true, true}, {0x42, 1, false
// should be aborted
bool Introduction::showScreen(uint16 screenId, uint16 paletteId, uint16 delaySize) {
+ Events &events = Events::getReference();
_screen.screen().loadScreen(screenId);
_screen.update();
Palette p(paletteId);
_screen.paletteFadeIn(&p);
- bool result = delay(delaySize);
- if (Events::getReference().quitFlag) return true;
+ bool result = events.interruptableDelay(delaySize);
+ if (events.quitFlag) return true;
_screen.paletteFadeOut();
return result;
}
-// delay
-// Delays for a given number of milliseconds. If it returns true, it indicates that
-// Escape has been pressed, and the introduction should be aborted.
-
-bool Introduction::delay(uint32 milliseconds) {
- Events &events = Events::getReference();
- uint32 delayCtr = _system.getMillis() + milliseconds;
-
- while (_system.getMillis() < delayCtr) {
- if (events.quitFlag) return true;
-
- if (events.pollEvent()) {
- if (events.type() == Common::EVENT_KEYDOWN)
- return events.event().kbd.keycode == 27;
- else if (events.type() == Common::EVENT_LBUTTONDOWN)
- return false;
- }
-
- uint32 delayAmount = delayCtr - _system.getMillis();
- if (delayAmount > 10) delayAmount = 10;
- _system.delayMillis(delayAmount);
- }
- return false;
-}
-
// show
// Main method for the introduction sequence
bool Introduction::show() {
+ Events &events = Events::getReference();
_screen.setPaletteEmpty();
// Initial game company and then game screen
@@ -109,13 +86,13 @@ bool Introduction::show() {
anim = new AnimationSequence(_screen, _system, curr_anim->resourceId,
coll.getPalette(curr_anim->paletteIndex), fadeIn);
if (curr_anim->initialPause)
- if (delay(12000)) return true;
+ if (events.interruptableDelay(12000)) return true;
result = false;
switch (anim->show()) {
case ABORT_NONE:
if (curr_anim->endingPause) {
- result = delay(12000);
+ result = events.interruptableDelay(12000);
}
break;
@@ -136,9 +113,9 @@ bool Introduction::show() {
result = false;
anim = new AnimationSequence(_screen, _system, 0x48, coll.getPalette(4), false);
do {
- result = delay(2000);
+ result = events.interruptableDelay(2000);
_screen.paletteFadeOut();
- if (!result) result = delay(500);
+ if (!result) result = events.interruptableDelay(500);
if (result) break;
} while (anim->step());
delete anim;
diff --git a/engines/lure/intro.h b/engines/lure/intro.h
index 769081fdda..14c733e16b 100644
--- a/engines/lure/intro.h
+++ b/engines/lure/intro.h
@@ -36,7 +36,6 @@ private:
OSystem &_system;
bool showScreen(uint16 screenId, uint16 paletteId, uint16 delaySize);
- bool delay(uint32 milliseconds);
public:
Introduction(Screen &screen, OSystem &system): _screen(screen), _system(system) {}
diff --git a/engines/lure/lure.cpp b/engines/lure/lure.cpp
index 6b28753fd1..f7c4272f0e 100644
--- a/engines/lure/lure.cpp
+++ b/engines/lure/lure.cpp
@@ -44,6 +44,8 @@ LureEngine::LureEngine(OSystem *system): Engine(system) {
Common::addSpecialDebugLevel(kLureDebugScripts, "scripts", "Scripts debugging");
Common::addSpecialDebugLevel(kLureDebugAnimations, "animations", "Animations debugging");
Common::addSpecialDebugLevel(kLureDebugHotspots, "hotspots", "Hotspots debugging");
+ Common::addSpecialDebugLevel(kLureDebugFights, "fights", "Fights debugging");
+
// Setup mixer
/*
if (!_mixer->isReady()) {
@@ -75,6 +77,7 @@ int LureEngine::init() {
_menu = new Menu();
Surface::initialise();
_room = new Room();
+ _fights = new FightsManager();
int_engine = this;
return 0;
}
@@ -85,6 +88,7 @@ LureEngine::~LureEngine() {
// Delete and deinitialise subsystems
Surface::deinitialise();
+ delete _fights;
delete _room;
delete _menu;
delete _events;
@@ -146,6 +150,7 @@ bool LureEngine::saveGame(uint8 slotNumber, Common::String &caption) {
Resources::getReference().saveToStream(f);
Room::getReference().saveToStream(f);
+ Fights.saveToStream(f);
delete f;
return true;
@@ -187,6 +192,7 @@ bool LureEngine::loadGame(uint8 slotNumber) {
// Load in the data
Resources::getReference().loadFromStream(f);
Room::getReference().loadFromStream(f);
+ Fights.loadFromStream(f);
delete f;
return true;
diff --git a/engines/lure/lure.h b/engines/lure/lure.h
index 010361573a..aa7f0ae93a 100644
--- a/engines/lure/lure.h
+++ b/engines/lure/lure.h
@@ -38,6 +38,7 @@
#include "lure/menu.h"
#include "lure/strings.h"
#include "lure/room.h"
+#include "lure/fights.h"
namespace Lure {
@@ -54,6 +55,7 @@ private:
Menu *_menu;
StringData *_strings;
Room *_room;
+ FightsManager *_fights;
void detectGame();
const char *generateSaveName(int slotNumber);
diff --git a/engines/lure/luredefs.h b/engines/lure/luredefs.h
index 62c5490c8c..a715c4a1e7 100644
--- a/engines/lure/luredefs.h
+++ b/engines/lure/luredefs.h
@@ -34,7 +34,7 @@ namespace Lure {
#define SUPPORT_FILENAME "lure.dat"
#define LURE_DAT_MAJOR 1
-#define LURE_DAT_MINOR 19
+#define LURE_DAT_MINOR 20
#define LURE_DEBUG 1
@@ -44,7 +44,8 @@ namespace Lure {
enum {
kLureDebugScripts = 1 << 0,
kLureDebugAnimations = 1 << 1,
- kLureDebugHotspots = 1 << 2
+ kLureDebugHotspots = 1 << 2,
+ kLureDebugFights = 1 << 3
};
#define ERROR_BASIC 1
@@ -126,6 +127,9 @@ enum Action {
// Palette and animation for hiding in barrel
#define BARREL_PALETTE_ID 0xE9F0
#define BARREL_ANIM_ID 0xE9F1
+// Endgame animation constants
+#define ENDGAME_PALETTE_ID 0xFF00
+#define ENDGAME_ANIM_ID 0xFF01
// Specifies the maximum buffer sized allocated for decoding animation data
#define MAX_ANIM_DECODER_BUFFER_SIZE 300000
@@ -142,14 +146,12 @@ enum Action {
#define CURSOR_HEIGHT 16
#define CURSOR_SIZE 256
#define CURSOR_RESOURCE_ID 1
-#define CURSOR_ARROW 0
-#define CURSOR_DISK 1
-#define CURSOR_TIME_START 2
-#define CURSOR_TIME_END 9
-#define CURSOR_CROSS 10
-#define CURSOR_CAMERA 15
-#define CURSOR_TALK 16
-#define CURSOR_MENUBAR 17
+
+enum CursorType {CURSOR_ARROW = 0, CURSOR_DISK = 1, CURSOR_TIME_START = 2,
+ CURSOR_TIME_END = 9, CURSOR_CROSS = 10, CURSOR_UP_ARROW = 11, CURSOR_DOWN_ARROW = 12,
+ CURSOR_LEFT_ARROW = 13, CURSOR_RIGHT_ARROW = 14, CURSOR_CAMERA = 15, CURSOR_TALK = 16,
+ CURSOR_MENUBAR = 17, CURSOR_FIGHT_UPPER = 23, CURSOR_FIGHT_MIDDLE = 24,
+ CURSOR_FIGHT_LOWER = 25};
// Font details
#define FONT_RESOURCE_ID 4
@@ -216,7 +218,8 @@ enum Action {
#define ROOM_PATHS_RESOURCE_ID 0x3f13
#define EXIT_COORDINATES_RESOURCE_ID 0x3f14
#define EXIT_HOTSPOT_ID_LIST 0x3f15
-#define STRING_LIST_RESOURCE_ID 0x3f16
+#define FIGHT_DATA_RESOURCE_ID 0x3f16
+#define STRING_LIST_RESOURCE_ID 0x3f17
// Script constants
#define STARTUP_SCRIPT 0x23FC
@@ -230,6 +233,8 @@ enum Action {
#define SKORL_ID 0x3EA
#define BLACKSMITH_ID 0x3EB
#define GOEWIN_ID 0x3EF
+#define WAYNE_ID 0x3f1
+#define CASTLE_SKORL_ID 0x3F3
#define FIRST_NONCHARACTER_ID 0x408
#define SACK_ID 0x40D
#define PRISONER_ID 0x412
@@ -238,10 +243,12 @@ enum Action {
#define TRANSFORM_ID 0x425
#define NELLIE_ID 0x429
#define EWAN_ID 0x436
-#define WAYNE_ID 0x3f1
+#define PIG_ID 0x43F
+#define SKORL_FIGHTER_ID 0x444
#define START_EXIT_ID 0x2710
#define BOTTLE_HOTSPOT_ID 0x2710
#define BRICKS_ID 0x2714
+#define BOOK_ID 0x2723
#define START_NONVISUAL_HOTSPOT_ID 0x7530
// Milliseconds delay between game frames
@@ -252,9 +259,13 @@ enum Action {
#define PLAYER_TICK_PROC_ID 0x5E44
#define VOICE_TICK_PROC_ID 0x625E
#define PUZZLED_TICK_PROC_ID 0x6571
+#define FOLLOWER_TICK_PROC_2 0x7C24
+#define JAILOR_TICK_PROC_ID 0x7efa
#define STANDARD_ANIM_2_TICK_PROC 0x7F37
#define STANDARD_ANIM_TICK_PROC 0x7f3a
+#define GOEWIN_SHOP_TICK_PROC 0x865A
#define TALK_TICK_PROC_ID 0x8ABD
+#define PLAYER_FIGHT_TICK_PROC_ID 0x98B6
// String constants
#define STRANGER_ID 0x17A
@@ -263,6 +274,7 @@ enum Action {
// Misc constants
#define GENERAL_MAGIC_ID 42
+#define PLAYER_FIGHT_ANIM_ID 0x55F6
#define VOICE_ANIM_ID 0x5810
#define PUZZLED_ANIM_ID 0x8001
#define EXCLAMATION_ANIM_ID 0x8002
@@ -279,6 +291,10 @@ enum Action {
#define MAX_TELL_COMMANDS 8
#define MAX_SAVEGAME_SLOTS 10
+#define ROOMNUM_CAVE 38
+#define ROOMNUM_CELLAR 42
+#define ROOMNUM_DINING_HALL 45
+
// Countdown for # operations in path finder before breaking until next
// tick - set it to 0 if you'd like all pathfinding to be done at once
//#define PATHFIND_COUNTDOWN 4000
@@ -290,12 +306,15 @@ enum Action {
// Hotspot flags
#define HOTSPOTFLAG_FOUND 0x80
#define HOTSPOTFLAG_SKIP 0x40
-#define HOTSPOTFLAG_20 0x20
+#define HOTSPOTFLAG_MENU_EXCLUSION 0x20
+#define HOTSPOTFLAG_ROOM_SPECIFIC 0x10
// Constants used to reference entries in the reworked support data entry lists
#define RETURN_SUPPORT_ID 0x400
#define EXIT_BLOCKED_SUPPORT_ID 0x800
#define JUMP_ADDR_2_SUPPORT_ID 0x1403
+#define GOEWIN_CAVE_SUPPORT_ID 0x1800
+#define GOEWIN_STANDARD_SUPPORT_ID 0x1C00
// Constants used in animation Serf on the rack
#define RACK_SERF_SCRIPT_ID_1 0x35C
diff --git a/engines/lure/menu.cpp b/engines/lure/menu.cpp
index 9c8a26a3f2..3bb6769ff7 100644
--- a/engines/lure/menu.cpp
+++ b/engines/lure/menu.cpp
@@ -257,7 +257,7 @@ uint16 PopupMenu::ShowInventory() {
#define MAX_NUM_DISPLAY_ITEMS 20
-uint16 PopupMenu::ShowItems(Action contextAction) {
+uint16 PopupMenu::ShowItems(Action contextAction, uint16 roomNumber) {
Resources &res = Resources::getReference();
ValueTableData &fields = res.fieldList();
RoomDataList &rooms = res.roomData();
@@ -273,7 +273,6 @@ uint16 PopupMenu::ShowItems(Action contextAction) {
char *entryNames[MAX_NUM_DISPLAY_ITEMS];
int numItems = 0;
int itemCtr;
- Hotspot *player = res.getActiveHotspot(PLAYER_ID);
uint32 contextBitflag = 1 << (contextAction - 1);
// Loop for rooms
@@ -282,7 +281,7 @@ uint16 PopupMenu::ShowItems(Action contextAction) {
// Pre-condition checks for whether to skip room
if ((roomData->hdrFlags != 15) && ((roomData->hdrFlags & fields.hdrFlagMask()) == 0))
continue;
- if (((roomData->flags & HOTSPOTFLAG_20) != 0) || ((roomData->flags & HOTSPOTFLAG_FOUND) == 0))
+ if (((roomData->flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((roomData->flags & HOTSPOTFLAG_FOUND) == 0))
continue;
if ((roomData->actions & contextBitflag) == 0)
continue;
@@ -304,20 +303,21 @@ uint16 PopupMenu::ShowItems(Action contextAction) {
((hotspot->headerFlags & fields.hdrFlagMask()) == 0))
continue;
- if (((hotspot->flags & HOTSPOTFLAG_20) != 0) || ((hotspot->flags & HOTSPOTFLAG_FOUND) == 0))
+ if (((hotspot->flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((hotspot->flags & HOTSPOTFLAG_FOUND) == 0))
// Skip the current hotspot
continue;
- // Following checks are done for room list - still need to include check against [3350h]
- if (((hotspot->flags & 0x10) != 0) && (hotspot->roomNumber != player->roomNumber()))
+ // If the hotspot is room specific, skip if the character will not be in the specified room
+ if (((hotspot->flags & HOTSPOTFLAG_ROOM_SPECIFIC) != 0) &&
+ (hotspot->roomNumber != roomNumber))
continue;
+ // If hotspot does not allow action, then skip it
if ((hotspot->actions & contextBitflag) == 0)
- // If hotspot does not allow action, then skip it
continue;
+ // If a special hotspot Id, then skip displaying
if ((hotspot->nameId == 0x17A) || (hotspot->nameId == 0x147))
- // Special hotspot names to skip
continue;
// Check if the hotspot's name is already used in an already set item
@@ -475,19 +475,18 @@ uint16 PopupMenu::Show(int numEntries, const char *actions[]) {
}
else if (e.type() == Common::EVENT_KEYDOWN) {
- byte ch = e.event().kbd.ascii;
uint16 keycode = e.event().kbd.keycode;
- if (((keycode == 0x108) || (keycode == 0x111)) && (selectedIndex > 0)) {
+ if (((keycode == Common::KEYCODE_KP8) || (keycode == Common::KEYCODE_UP)) && (selectedIndex > 0)) {
--selectedIndex;
refreshFlag = true;
- } else if (((keycode == 0x102) || (keycode == 0x112)) &&
+ } else if (((keycode == Common::KEYCODE_KP2) || (keycode == Common::KEYCODE_DOWN)) &&
(selectedIndex < numEntries-1)) {
++selectedIndex;
refreshFlag = true;
- } else if ((ch == '\xd') || (keycode == 0x10f)) {
+ } else if ((keycode == Common::KEYCODE_RETURN) || (keycode == Common::KEYCODE_KP_ENTER)) {
goto bail_out;
- } else if (ch == '\x1b') {
+ } else if (keycode == Common::KEYCODE_ESCAPE) {
selectedIndex = 0xffff;
goto bail_out;
}
diff --git a/engines/lure/menu.h b/engines/lure/menu.h
index 6a639f7ec5..587074e8af 100644
--- a/engines/lure/menu.h
+++ b/engines/lure/menu.h
@@ -83,7 +83,7 @@ public:
static Action Show(int numEntries, Action *actions);
static uint16 Show(int numEntries, const char *actions[]);
static uint16 ShowInventory();
- static uint16 ShowItems(Action contextAction);
+ static uint16 ShowItems(Action contextAction, uint16 roomNumber);
};
} // End of namespace Lure
diff --git a/engines/lure/module.mk b/engines/lure/module.mk
index a54eddd4cd..e508684344 100644
--- a/engines/lure/module.mk
+++ b/engines/lure/module.mk
@@ -7,6 +7,7 @@ MODULE_OBJS := \
detection.o \
disk.o \
events.o \
+ fights.o \
game.o \
hotspots.o \
intro.o \
@@ -19,6 +20,7 @@ MODULE_OBJS := \
room.o \
screen.o \
scripts.o \
+ sound.o \
strings.o \
surface.o
diff --git a/engines/lure/res.cpp b/engines/lure/res.cpp
index 3c183ebafc..4da38eddc7 100644
--- a/engines/lure/res.cpp
+++ b/engines/lure/res.cpp
@@ -268,7 +268,7 @@ void Resources::reloadData() {
// Load in the list of room exit coordinates
mb = d.getEntry(EXIT_COORDINATES_RESOURCE_ID);
RoomExitCoordinateEntryResource *coordRec = (RoomExitCoordinateEntryResource *) mb->data();
- while (*((uint16 *) coordRec) != 0xffff) {
+ while (READ_LE_UINT16(coordRec) != 0xffff) {
RoomExitCoordinates *newEntry = new RoomExitCoordinates(coordRec);
_coordinateList.push_back(newEntry);
++coordRec;
diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp
index 1ca4394ad3..79bf0dfe6e 100644
--- a/engines/lure/res_struct.cpp
+++ b/engines/lure/res_struct.cpp
@@ -94,6 +94,8 @@ RoomData::RoomData(RoomResource *rec, MemoryBlock *pathData) {
clippingXStart = FROM_LE_16(rec->clippingXStart);
clippingXEnd = FROM_LE_16(rec->clippingXEnd);
+ exitTime = FROM_LE_32(rec->exitTime);
+ areaFlag = rec->areaFlag;
walkBounds.left = FROM_LE_16(rec->walkBounds.xs);
walkBounds.right = FROM_LE_16(rec->walkBounds.xe);
walkBounds.top = FROM_LE_16(rec->walkBounds.ys);
@@ -285,6 +287,7 @@ void RoomDataList::saveToStream(WriteStream *stream) {
for (i = begin(); i != end(); ++i) {
RoomData *rec = *i;
+ stream->writeByte(rec->flags);
const byte *pathData = rec->paths.data();
stream->write(pathData, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
}
@@ -296,6 +299,7 @@ void RoomDataList::loadFromStream(ReadStream *stream) {
for (i = begin(); i != end(); ++i) {
RoomData *rec = *i;
+ rec->flags = stream->readByte();
stream->read(data, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
rec->paths.load(data);
}
@@ -730,6 +734,7 @@ void SequenceDelayList::add(uint16 delay, uint16 seqOffset, bool canClear) {
}
void SequenceDelayList::tick() {
+ Resources &res = Resources::getReference();
uint32 currTime = g_system->getMillis();
SequenceDelayList::iterator i;
@@ -738,6 +743,15 @@ void SequenceDelayList::tick() {
if (currTime >= entry->timeoutCtr) {
// Timeout reached - delete entry from list and execute the sequence
uint16 seqOffset = entry->sequenceOffset;
+
+ // FIXME: At current speed the player can enter the cave a bit too quickly ahead of Goewin.
+ // Use a hard-coded check to make sure Goewin is in the room
+ if (seqOffset == 0xebd) {
+ Hotspot *goewinHotspot = res.getActiveHotspot(GOEWIN_ID);
+ if (goewinHotspot->roomNumber() != 38)
+ return;
+ }
+
erase(i);
Script::execute(seqOffset);
return;
diff --git a/engines/lure/res_struct.h b/engines/lure/res_struct.h
index 55907e4c12..59581b9c7d 100644
--- a/engines/lure/res_struct.h
+++ b/engines/lure/res_struct.h
@@ -129,6 +129,8 @@ struct RoomResource {
uint16 sequenceOffset;
int16 clippingXStart;
int16 clippingXEnd;
+ uint32 exitTime;
+ uint8 areaFlag;
RoomRect walkBounds;
uint16 numExits;
};
@@ -206,8 +208,8 @@ struct RoomExitCoordinateResource {
#define ROOM_EXIT_COORDINATES_NUM_ROOMS 52
struct RoomExitCoordinateEntryResource {
- RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES];
uint8 roomIndex[ROOM_EXIT_COORDINATES_NUM_ROOMS];
+ RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES];
};
#define MAX_SCHEDULE_ENTRY_PARAMS 5
@@ -337,6 +339,8 @@ public:
uint16 sequenceOffset;
int16 clippingXStart;
int16 clippingXEnd;
+ uint8 areaFlag;
+ uint32 exitTime;
Common::Rect walkBounds;
RoomExitHotspotList exitHotspots;
RoomExitList exits;
diff --git a/engines/lure/room.cpp b/engines/lure/room.cpp
index a2abd3565d..016432dfac 100644
--- a/engines/lure/room.cpp
+++ b/engines/lure/room.cpp
@@ -1,8 +1,5 @@
-/* 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.
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -171,7 +168,7 @@ void Room::checkRoomHotspots() {
if (!skipFlag) {
skipFlag = (((entry->flags & HOTSPOTFLAG_FOUND) == 0) &&
((entry->flags & HOTSPOTFLAG_SKIP) != 0)) ||
- ((entry->flags & HOTSPOTFLAG_20) != 0);
+ ((entry->flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0);
}
if ((!skipFlag) && (entry->hotspotId < 0x409))
@@ -225,7 +222,7 @@ void Room::checkRoomHotspots() {
}
}
-uint8 Room::checkRoomExits() {
+CursorType Room::checkRoomExits() {
Mouse &m = Mouse::getReference();
Resources &res = Resources::getReference();
_destRoomNumber = 0;
@@ -249,7 +246,7 @@ uint8 Room::checkRoomExits() {
if (!skipFlag && (m.x() >= rec->xs) && (m.x() <= rec->xe) &&
(m.y() >= rec->ys) && (m.y() <= rec->ye)) {
// Cursor is within exit area
- uint8 cursorNum = rec->cursorNum;
+ CursorType cursorNum = (CursorType)rec->cursorNum;
_destRoomNumber = rec->destRoomNumber;
// If it's a hotspotted exit, change arrow to the + arrow
@@ -258,7 +255,7 @@ uint8 Room::checkRoomExits() {
_hotspot = res.getHotspot(_hotspotId);
_hotspotNameId = _hotspot->nameId;
_isExit = true;
- cursorNum += 7;
+ cursorNum = (CursorType)((int)cursorNum + 7);
}
return cursorNum;
@@ -315,6 +312,9 @@ void Room::addLayers(Hotspot &h) {
int16 yEnd = (hsY + h.heightCopy() - 1) / RECT_SIZE;
int16 numY = yEnd - yStart + 1;
+ if ((xStart < 0) || (yEnd < 0))
+ return;
+
for (int16 xCtr = 0; xCtr < numX; ++xCtr, ++xStart) {
int16 xs = xStart - 4;
if (xs < 0) continue;
@@ -457,6 +457,11 @@ void Room::update() {
Memory::dealloc(statusLineCopy);
}
+ // Debug - if the bottle object is on layer 0FEh, then display it's surface
+ Hotspot *displayHotspot = res.getActiveHotspot(BOTTLE_HOTSPOT_ID);
+ if ((displayHotspot != NULL) && (displayHotspot->layer() == 0xfe))
+ displayHotspot->frames().copyTo(&s);
+
// If show information is turned on, show extra debugging information
if (_showInfo) {
char buffer[64];
@@ -490,6 +495,7 @@ void Room::setRoomNumber(uint16 newRoomNumber, bool showOverlay) {
_roomData = r.getRoom(newRoomNumber);
if (!_roomData)
error("Tried to change to non-existant room: %d", newRoomNumber);
+ bool leaveFlag = (_layers[0] && (newRoomNumber != _roomNumber));
_roomNumber = _roomData->roomNumber;
_descId = _roomData->descId;
@@ -497,7 +503,7 @@ void Room::setRoomNumber(uint16 newRoomNumber, bool showOverlay) {
_screen.empty();
_screen.resetPalette();
- if (_layers[0]) leaveRoom();
+ if (leaveFlag) leaveRoom();
_numLayers = _roomData->numLayers;
if (showOverlay) ++_numLayers;
@@ -532,15 +538,15 @@ void Room::checkCursor() {
Mouse &mouse = Mouse::getReference();
Resources &res = Resources::getReference();
uint16 oldHotspotId = _hotspotId;
- uint16 currentCursor = mouse.getCursorNum();
- uint16 newCursor = currentCursor;
+ CursorType currentCursor = mouse.getCursorNum();
+ CursorType newCursor = currentCursor;
CurrentAction playerAction = res.getActiveHotspot(PLAYER_ID)->currentActions().action();
uint16 oldRoomNumber = res.fieldList().getField(OLD_ROOM_NUMBER);
if ((currentCursor >= CURSOR_TIME_START) && (currentCursor <= CURSOR_TIME_END) &&
((playerAction == START_WALKING) || (playerAction == PROCESSING_PATH))) {
// Animate the clock when processing the player path
- ++newCursor;
+ newCursor = (CursorType)((int)newCursor + 1);
if (newCursor == CURSOR_CROSS) newCursor = CURSOR_TIME_START;
} else if (checkInTalkDialog() && (oldRoomNumber == 0)) {
newCursor = CURSOR_TALK;
@@ -628,8 +634,8 @@ void Room::saveToStream(Common::WriteStream *stream) {
}
void Room::loadFromStream(Common::ReadStream *stream) {
- int roomNum = stream->readUint16LE();
- setRoomNumber(roomNum, false);
+ _roomNumber = stream->readUint16LE();
+ setRoomNumber(_roomNumber, false);
_destRoomNumber = stream->readUint16LE();
_showInfo = stream->readByte() != 0;
diff --git a/engines/lure/room.h b/engines/lure/room.h
index d991f36c92..6c5dfc6747 100644
--- a/engines/lure/room.h
+++ b/engines/lure/room.h
@@ -78,7 +78,7 @@ private:
CursorState _cursorState;
void checkRoomHotspots();
- uint8 checkRoomExits();
+ CursorType checkRoomExits();
void loadRoomHotspots();
bool sub_112() { return false; } // not yet implemented
void flagCoveredCells(Hotspot &h);
diff --git a/engines/lure/scripts.cpp b/engines/lure/scripts.cpp
index b3856e5ce3..3ce1b916b3 100644
--- a/engines/lure/scripts.cpp
+++ b/engines/lure/scripts.cpp
@@ -23,10 +23,14 @@
*
*/
-#include "lure/scripts.h"
-#include "lure/res.h"
+#include "lure/animseq.h"
+#include "lure/fights.h"
#include "lure/game.h"
+#include "lure/res.h"
#include "lure/room.h"
+#include "lure/screen.h"
+#include "lure/scripts.h"
+#include "lure/sound.h"
#include "common/stack.h"
#include "common/endian.h"
@@ -71,8 +75,8 @@ void Script::setHotspotScript(uint16 hotspotId, uint16 scriptIndex, uint16 v3) {
}
}
-void Script::method2(uint16 v1, uint16 v2, uint16 v3) {
- // Not yet implemented
+void Script::addSound2(uint16 soundId, uint16 v2, uint16 v3) {
+ // TODO: Not yet implemented
}
// Sets the bitmask indicating what group of rooms/hotspots to display when the
@@ -92,7 +96,7 @@ void Script::clearSequenceDelayList(uint16 v1, uint16 scriptIndex, uint16 v3) {
// Deactivates a set of predefined of hotspots in a given list index
void Script::deactivateHotspotSet(uint16 listIndex, uint16 v2, uint16 v3) {
- if (listIndex >= 3)
+ if (listIndex > 3)
error("Script::deactiveHotspotSet - Invalid list index");
Resources &res = Resources::getReference();
uint16 *hotspotId = hotspot_dealloc_set[listIndex];
@@ -145,6 +149,12 @@ void Script::addDelayedSequence(uint16 seqOffset, uint16 delay, uint16 canClear)
list.add(delay, seqOffset, canClear != 0);
}
+// Stops the specified sound
+
+void Script::killSound(uint16 soundId, uint16 v2, uint16 v3) {
+ // TODO
+}
+
// Checks whether the given character is in the specified room, and stores
// the result in the general value field
@@ -169,8 +179,43 @@ void Script::setHotspotName(uint16 hotspotId, uint16 nameId, uint16 v3) {
// Unsure about this method, but at the moment I think it plays a sound
-void Script::playSound(uint16 v1, uint16 v2, uint16 v3) {
- // No implementation currently
+void Script::addSound(uint16 v1, uint16 v2, uint16 v3) {
+ // TODO: No implementation currently
+}
+
+void Script::endgameSequence(uint16 v1, uint16 v2, uint16 v3) {
+ Screen &screen = Screen::getReference();
+ Mouse &mouse = Mouse::getReference();
+ Events &events = Events::getReference();
+ AnimationSequence *anim;
+
+// screen.paletteFadeOut();
+ Sound.killSounds();
+ mouse.cursorOff();
+
+ Palette p(ENDGAME_PALETTE_ID);
+ anim = new AnimationSequence(screen, *g_system, ENDGAME_ANIM_ID, p, false);
+ anim->show();
+ delete anim;
+
+ anim = new AnimationSequence(screen, *g_system, ENDGAME_ANIM_ID + 2, p, false);
+ anim->show();
+ events.interruptableDelay(8000);
+ delete anim;
+
+ anim = new AnimationSequence(screen, *g_system, ENDGAME_ANIM_ID + 4, p, false);
+ anim->show();
+ events.interruptableDelay(30000);
+ delete anim;
+
+ events.quitFlag = true;
+}
+
+// Setup the pig fight in the cave
+
+void Script::setupPigFight(uint16 v1, uint16 v2, uint16 v3) {
+ debugC(ERROR_BASIC, kLureDebugFights, "Beginning fight with cave pig");
+ Fights.setupPigFight();
}
// Displays the given string resource Id in a dialog
@@ -179,6 +224,13 @@ void Script::displayDialog(uint16 stringId, uint16 v2, uint16 v3) {
Dialog::show(stringId);
}
+// Setup the Skorl fight
+
+void Script::setupSkorlFight(uint16 v1, uint16 v2, uint16 v3) {
+ debugC(ERROR_BASIC, kLureDebugFights, "Beginning fight with Skorl");
+ Fights.setupSkorlFight();
+}
+
// Flags for remotely viewing a room
void Script::remoteRoomViewSetup(uint16 v1, uint16 v2, uint16 v3) {
@@ -382,13 +434,30 @@ void Script::jailClose(uint16 v1, uint16 v2, uint16 v3) {
// hotspot is empty (for inventory items, this gives the description before
// the item is initially picked up)
-void Script::checkDroppedDesc(uint16 hotspotId, uint16 v2, uint16 v3) {
+void Script::checkRoomNumber(uint16 hotspotId, uint16 roomNumber, uint16 v3) {
Resources &res = Resources::getReference();
HotspotData *hotspot = res.getHotspot(hotspotId);
- uint16 seqResult = (hotspot->descId2 == 0) ? 1 : 0;
+ assert(hotspot);
+ uint16 seqResult = (hotspot->roomNumber == roomNumber) ? 1 : 0;
res.fieldList().setField(SEQUENCE_RESULT, seqResult);
}
+// Makes Goewin a follower
+
+void Script::makeGoewinFollow(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ Hotspot *hotspot = res.getActiveHotspot(GOEWIN_ID);
+ hotspot->setTickProc(FOLLOWER_TICK_PROC_2);
+ hotspot->currentActions().clear();
+ CharacterScheduleEntry *entry = res.charSchedules().getEntry(GOEWIN_CAVE_SUPPORT_ID);
+ hotspot->currentActions().addFront(DISPATCH_ACTION, entry, ROOMNUM_CAVE);
+
+ hotspot->setActions(hotspot->resource()->actions | (1 << (TELL - 1)));
+ hotspot->setActionCtr(0);
+ hotspot->setDelayCtr(0);
+ hotspot->setCharacterMode(CHARMODE_NONE);
+}
+
// Marks the given door hotspot for closing
void Script::doorClose(uint16 hotspotId, uint16 v2, uint16 v3) {
@@ -397,6 +466,25 @@ void Script::doorClose(uint16 hotspotId, uint16 v2, uint16 v3) {
joinRec->blocked = 1;
}
+// Fixes Goewin back to standard operation
+
+void Script::fixGoewin(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ Hotspot *hotspot = res.getActiveHotspot(GOEWIN_ID);
+ assert(hotspot);
+ hotspot->setTickProc(STANDARD_CHARACTER_TICK_PROC);
+
+ CharacterScheduleEntry *entry = res.charSchedules().getEntry(GOEWIN_STANDARD_SUPPORT_ID);
+ assert(entry);
+ hotspot->currentActions().clear();
+ hotspot->currentActions().addFront(DISPATCH_ACTION, entry, hotspot->roomNumber());
+
+ hotspot->setActions(hotspot->resource()->actions & !(1 << (TELL - 1)));
+ hotspot->setActionCtr(0);
+ hotspot->setDelayCtr(0);
+ hotspot->setCharacterMode(CHARMODE_NONE);
+}
+
// Marks the given door hotspot for opening
void Script::doorOpen(uint16 hotspotId, uint16 v2, uint16 v3) {
@@ -414,6 +502,20 @@ void Script::npcWait(uint16 hotspotId, uint16 v2, uint16 v3) {
hotspot->setDelayCtr(130);
}
+// Called during talking to Minnow to see whether the Skorl "Brenda" should be alerted
+
+void Script::checkWakeBrenda(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ ValueTableData &fields = res.fieldList();
+ Room &room = Room::getReference();
+
+ if ((fields.getField(TALK_INDEX) < 3) &&
+ (room.roomNumber() == ROOMNUM_DINING_HALL) &&
+ (fields.getField(67) == 0))
+ // Wake up Brenda
+ Script::execute(0x1E15);
+}
+
// Lookup the given message Id for the specified character and display in a dialog
void Script::displayMessage(uint16 messageId, uint16 characterId, uint16 unknownVal) {
@@ -439,14 +541,18 @@ void Script::setNewSupportData(uint16 hotspotId, uint16 index, uint16 v3) {
void Script::setSupportData(uint16 hotspotId, uint16 index, uint16 v3) {
Resources &res = Resources::getReference();
- uint16 dataId = res.getCharOffset(index);
+
+ // WORKAROUND: In room #45, the script for the Skorl noticing you gets
+ // the parameters back to front. If this the case, just ignore it
+ if (index == CASTLE_SKORL_ID) return;
+ uint16 dataId = res.getCharOffset(index);
CharacterScheduleEntry *entry = res.charSchedules().getEntry(dataId);
assert(entry != NULL);
+
Hotspot *h = res.getActiveHotspot(hotspotId);
- assert(h != NULL);
+ assert(h);
assert(!h->currentActions().isEmpty());
-
h->currentActions().pop();
h->currentActions().addFront(DISPATCH_ACTION, entry, h->roomNumber());
}
@@ -466,6 +572,19 @@ void Script::decreaseNumGroats(uint16 characterId, uint16 numGroats, uint16 v3)
fields.numGroats() -= numGroats;
}
+// Makes Goewin work
+
+void Script::makeGoewinWork(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ Hotspot *goewin = res.getActiveHotspot(GOEWIN_ID);
+ assert(goewin);
+ goewin->updateMovement();
+ goewin->currentActions().addBack(EXEC_HOTSPOT_SCRIPT, 34);
+ goewin->setHotspotScript(0x616);
+ goewin->setDelayCtr(1500);
+ goewin->setTickProc(GOEWIN_SHOP_TICK_PROC);
+}
+
// Sets a character moving to the player's room (if they're not already there)
void Script::moveCharacterToPlayer(uint16 characterId, uint16 v2, uint16 v3) {
@@ -497,8 +616,10 @@ void Script::moveCharacterToPlayer(uint16 characterId, uint16 v2, uint16 v3) {
// Sets the tick handler for the village Skorl to an alternate handler
void Script::setVillageSkorlTickProc(uint16 v1, uint16 v2, uint16 v3) {
- HotspotData *hotspot = Resources::getReference().getHotspot(0x3F1);
- hotspot->tickProcOffset = 0x7efa;
+ Resources &res = Resources::getReference();
+ Hotspot *skorlHotspot = res.getActiveHotspot(WAYNE_ID);
+ assert(skorlHotspot);
+ skorlHotspot->setTickProc(JAILOR_TICK_PROC_ID);
}
// Free Goewin from captivity
@@ -531,6 +652,12 @@ void Script::getNumGroats(uint16 v1, uint16 v2, uint16 v3) {
fields.setField(GENERAL, fields.numGroats());
}
+void Script::checkHasBook(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ HotspotData *bookHotspot = res.getHotspot(BOOK_ID);
+ res.fieldList().setField(SEQUENCE_RESULT, (bookHotspot->roomNumber == PLAYER_ID) ? 1 : 0);
+}
+
// Enables the talk action on the two gargoyles
void Script::enableGargoylesTalk(uint16 v1, uint16 v2, uint16 v3) {
@@ -541,6 +668,20 @@ void Script::enableGargoylesTalk(uint16 v1, uint16 v2, uint16 v3) {
g2->actions = 1 << (TALK_TO - 1);
}
+// Normal handling for Goewin
+
+void Script::normalGoewin(uint16 v1, uint16 v2, uint16 v3) {
+ Resources &res = Resources::getReference();
+ Hotspot *hotspot = res.getActiveHotspot(GOEWIN_ID);
+ assert(hotspot);
+
+ if (!hotspot->currentActions().isEmpty())
+ hotspot->currentActions().top().setAction(DISPATCH_ACTION);
+ hotspot->setCharacterMode(CHARMODE_NONE);
+ hotspot->setDirection(UP);
+ hotspot->setTickProc(STANDARD_CHARACTER_TICK_PROC);
+}
+
// Flags the player as dead
void Script::killPlayer(uint16 v1, uint16 v2, uint16 v3) {
@@ -578,9 +719,9 @@ void Script::checkCellDoor(uint16 v1, uint16 v2, uint16 v3) {
// TODO: Implement starting music if cell door is open
}
-// Has something to do with music handling
+// Checks if a sound is running
-void Script::method66(uint16 hotspotId, uint16 actions, uint16 v3) {
+void Script::checkSound(uint16 hotspotId, uint16 actions, uint16 v3) {
// For now, simply set the general value field so that the Skorl schedule
// will work properly
Resources::getReference().fieldList().setField(GENERAL, 0);
@@ -596,17 +737,22 @@ struct SequenceMethodRecord {
SequenceMethodRecord scriptMethods[] = {
{0, Script::activateHotspot},
{1, Script::setHotspotScript},
+ {2, Script::addSound2},
{3, Script::setHotspotFlagMask},
{4, Script::clearSequenceDelayList},
{5, Script::deactivateHotspotSet},
{6, Script::deactivateHotspot},
{7, Script::resetPathfinder},
{8, Script::addDelayedSequence},
+ {9, Script::killSound},
{10, Script::characterInRoom},
{11, Script::setDesc},
{12, Script::setHotspotName},
- {13, Script::playSound},
+ {13, Script::addSound},
+ {14, Script::endgameSequence},
+ {15, Script::setupPigFight},
{16, Script::displayDialog},
+ {17, Script::setupSkorlFight},
{18, Script::remoteRoomViewSetup},
{19, Script::startSpeakingToNoone},
{20, Script::checkCellDoor},
@@ -629,27 +775,33 @@ SequenceMethodRecord scriptMethods[] = {
{37, Script::startOilBurner},
{38, Script::transformPlayer},
{39, Script::jailClose},
- {40, Script::checkDroppedDesc},
+ {40, Script::checkRoomNumber},
+ {41, Script::makeGoewinFollow},
{42, Script::doorClose},
+ {43, Script::fixGoewin},
{44, Script::doorOpen},
{45, Script::npcWait},
+ {46, Script::checkWakeBrenda},
{47, Script::displayMessage},
{48, Script::setNewSupportData},
{49, Script::setSupportData},
{50, Script::givePlayerItem},
{51, Script::decreaseNumGroats},
+ {52, Script::makeGoewinWork},
{53, Script::moveCharacterToPlayer},
{54, Script::setVillageSkorlTickProc},
{55, Script::freeGoewin},
{56, Script::barmanServe},
{57, Script::getNumGroats},
+ {58, Script::checkHasBook},
{59, Script::enableGargoylesTalk},
+ {60, Script::normalGoewin},
{61, Script::killPlayer},
{62, Script::animationLoad},
{63, Script::addActions},
{64, Script::randomToGeneral},
{65, Script::checkCellDoor},
- {66, Script::method66},
+ {66, Script::checkSound},
{0xff, NULL}};
const char *scriptOpcodes[] = {
@@ -660,30 +812,31 @@ const char *scriptOpcodes[] = {
};
const char *scriptMethodNames[67] = {
- "ACTIVATE HOTSPOT", "SET HOTSPOT SCRIPT", NULL, "SET HOTSPOT FLAG MASK",
+ "ACTIVATE HOTSPOT", "SET HOTSPOT SCRIPT", "ADD SOUND 2", "SET HOTSPOT FLAG MASK",
"CLEAR SEQUENCE DELAY LIST", "DEACTIVATE HOTSPOT SET", "DEACTIVATE HOTSPOT",
- "RESET PATHFINDER", "ADD DELAYED SCRIPT", NULL,
+ "RESET PATHFINDER", "ADD DELAYED SCRIPT", "KILL SOUND",
"IS CHARACTER IN ROOM", "SET HOTSPOT DESC", "SET HOTSPOT NAME",
- "PLAY SOUND", NULL, NULL, "DISPLAY DIALOG", NULL, "REMOTE ROOM VIEW SETUP",
- "SET CHAR SPEAKING TO ITSELF",
+ "ADD SOUND", "ENDGAME SEQUENCE", "SETUP PIG FIGHT", "DISPLAY DIALOG", "SETUP SKORL FIGHT",
+ "REMOTE ROOM VIEW SETUP", "SET CHAR SPEAKING TO ITSELF",
"CHECK CELL DOOR", "PLAY MUSIC", "IS DOOR BLOCKED", "IS SKORL IN CELL",
"PUSH BRICKS", "CHARACTER CHANGE ROOM", "PAUSE RATPOUCH", "SET BLOCKING HOTSPOT SCRIPT",
"DECREMENT # INVENTORY ITEMS", "SET TALKING",
"SET ACTION CTR", "START SPEAKING", "DISABLE HOTSPOT", "CUT SACK",
- "INCREASE # GROATS", "ENABLE HOTSPOT", "DISPLAY MESSAGE 2", "START OIL BURNER"
+ "INCREASE # GROATS", "ENABLE HOTSPOT", "DISPLAY MESSAGE 2", "START OIL BURNER",
"TRANSFORM PLAYER", "JAIL CLOSE",
- "CHECK DROPPED DESC", NULL, "CLOSE DOOR", NULL, "OPEN DOOR", "NPC WAIT", NULL,
- "DISPLAY MESSAGE", "SET NEW ACTION SUPPORT DATA", "SET ACTION SUPPORT DATA",
+ "CHECK DROPPED DESC", "MAKE GOEWIN FOLLOW", "CLOSE DOOR", "FIX GOEWIN", "OPEN DOOR",
+ "NPC WAIT", "BRENDA BODGE", "DISPLAY MESSAGE", "SET NEW ACTION SUPPORT DATA",
+ "SET ACTION SUPPORT DATA",
- "GIVE PLAYER ITEM", "DECREASE # GROATS", NULL, NULL,
+ "GIVE PLAYER ITEM", "DECREASE # GROATS", "MAKE GOEWIN WORK", "MOVE CHAR TO PLAYER",
"SET VILLAGE SKORL TICK PROC", "FREE GOEWIN", "BARMAN SERVE", "GET # GROATS",
- NULL, "ENABLE GARGOYLE TALK",
+ "CHECK HAS BOOK", "ENABLE GARGOYLE TALK",
- NULL, "KILL PLAYER", "ANIMATION LOAD", "ADD ACTIONS", "RANDOM TO GENERAL",
+ "NORMAL GOEWIN", "KILL PLAYER", "ANIMATION LOAD", "ADD ACTIONS", "RANDOM TO GENERAL",
"CHECK CELL DOOR", "METHOD 66"
};
diff --git a/engines/lure/scripts.h b/engines/lure/scripts.h
index b0cda0b74b..1191017d11 100644
--- a/engines/lure/scripts.h
+++ b/engines/lure/scripts.h
@@ -79,18 +79,22 @@ public:
static void activateHotspot(uint16 hotspotId, uint16 v2, uint16 v3);
static void setHotspotScript(uint16 hotspotId, uint16 scriptIndex, uint16 v3);
- static void method2(uint16 v1, uint16 v2, uint16 v3);
+ static void addSound2(uint16 v1, uint16 v2, uint16 v3);
static void setHotspotFlagMask(uint16 maskVal, uint16 v2, uint16 v3);
static void clearSequenceDelayList(uint16 v1, uint16 scriptIndex, uint16 v3);
static void deactivateHotspotSet(uint16 listIndex, uint16 v2, uint16 v3);
static void deactivateHotspot(uint16 hotspotId, uint16 v2, uint16 v3);
static void resetPathfinder(uint16 v1, uint16 v2, uint16 v3);
static void addDelayedSequence(uint16 seqOffset, uint16 delay, uint16 canClear);
+ static void killSound(uint16 soundId, uint16 v2, uint16 v3);
static void characterInRoom(uint16 characterId, uint16 roomNumber, uint16 v3);
static void setDesc(uint16 hotspotId, uint16 descId, uint16 v3);
static void setHotspotName(uint16 hotspotId, uint16 nameId, uint16 v3);
- static void playSound(uint16 v1, uint16 v2, uint16 v3);
+ static void addSound(uint16 soundId, uint16 v2, uint16 v3);
+ static void endgameSequence(uint16 v1, uint16 v2, uint16 v3);
+ static void setupPigFight(uint16 v1, uint16 v2, uint16 v3);
static void displayDialog(uint16 stringId, uint16 v2, uint16 v3);
+ static void setupSkorlFight(uint16 v1, uint16 v2, uint16 v3);
static void remoteRoomViewSetup(uint16 v1, uint16 v2, uint16 v3);
static void startSpeakingToNoone(uint16 characterId, uint16 stringId, uint16 v3);
static void playMusic(uint16 musicNum, uint16 v2, uint16 v3);
@@ -112,27 +116,33 @@ public:
static void startOilBurner(uint16 v1, uint16 v2, uint16 v3);
static void transformPlayer(uint16 v1, uint16 v2, uint16 v3);
static void jailClose(uint16 v1, uint16 v2, uint16 v3);
- static void checkDroppedDesc(uint16 hotspotId, uint16 v2, uint16 v3);
+ static void checkRoomNumber(uint16 hotspotId, uint16 roomNumber, uint16 v3);
+ static void makeGoewinFollow(uint16 v1, uint16 v2, uint16 v3);
static void doorClose(uint16 hotspotId, uint16 v2, uint16 v3);
+ static void fixGoewin(uint16 v1, uint16 v2, uint16 v3);
static void displayMessage(uint16 messageId, uint16 characterId, uint16 unknownVal);
static void doorOpen(uint16 hotspotId, uint16 v2, uint16 v3);
static void npcWait(uint16 hotspotId, uint16 v2, uint16 v3);
+ static void checkWakeBrenda(uint16 v1, uint16 v2, uint16 v3);
static void setNewSupportData(uint16 hotspotId, uint16 index, uint16 v3);
static void setSupportData(uint16 hotspotId, uint16 index, uint16 v3);
static void givePlayerItem(uint16 hotspotId, uint16 v2, uint16 v3);
static void decreaseNumGroats(uint16 characterId, uint16 numGroats, uint16 v3);
+ static void makeGoewinWork(uint16 v1, uint16 v2, uint16 v3);
static void moveCharacterToPlayer(uint16 characterId, uint16 v2, uint16 v3);
static void setVillageSkorlTickProc(uint16 v1, uint16 v2, uint16 v3);
static void freeGoewin(uint16 v1, uint16 v2, uint16 v3);
static void barmanServe(uint16 v1, uint16 v2, uint16 v3);
static void getNumGroats(uint16 v1, uint16 v2, uint16 v3);
+ static void checkHasBook(uint16 v1, uint16 v2, uint16 v3);
static void enableGargoylesTalk(uint16 v1, uint16 v2, uint16 v3);
static void killPlayer(uint16 v1, uint16 v2, uint16 v3);
+ static void normalGoewin(uint16 v1, uint16 v2, uint16 v3);
static void animationLoad(uint16 hotspotId, uint16 v2, uint16 v3);
static void addActions(uint16 hotspotId, uint16 actions, uint16 v3);
static void randomToGeneral(uint16 maxVal, uint16 minVal, uint16 v3);
static void checkCellDoor(uint16 v1, uint16 v2, uint16 v3);
- static void method66(uint16 v1, uint16 v2, uint16 v3);
+ static void checkSound(uint16 v1, uint16 v2, uint16 v3);
};
class HotspotScript {
diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp
index b7baf53a76..3486a5abb9 100644
--- a/engines/lure/surface.cpp
+++ b/engines/lure/surface.cpp
@@ -420,7 +420,7 @@ bool Surface::getString(Common::String &line, int maxSize, bool isNumeric, bool
char ch = events.event().kbd.ascii;
uint16 keycode = events.event().kbd.keycode;
- if ((ch == 13) || (keycode == 0x10f)) {
+ if ((keycode == Common::KEYCODE_RETURN) || (keycode == Common::KEYCODE_KP_ENTER)) {
// Return character
screen.screen().fillRect(
Rect(x, y, x + maxSize - 1, y + FONT_HEIGHT), bgColour);
@@ -430,13 +430,13 @@ bool Surface::getString(Common::String &line, int maxSize, bool isNumeric, bool
mouse.cursorOn();
return true;
}
- else if (ch == 27) {
+ else if (keycode == Common::KEYCODE_ESCAPE) {
// Escape character
screen.screen().fillRect(
Rect(x, y, x + maxSize - 1, y + FONT_HEIGHT), bgColour);
screen.update();
abortFlag = true;
- } else if (ch == 8) {
+ } else if (keycode == Common::KEYCODE_BACKSPACE) {
// Delete the last character
if (newLine.size() == 1) continue;
@@ -690,7 +690,7 @@ bool SaveRestoreDialog::show(bool saveDialog) {
if (events.pollEvent()) {
if ((events.type() == Common::EVENT_KEYDOWN) &&
- (events.event().kbd.ascii == 27)) {
+ (events.event().kbd.keycode == Common::KEYCODE_ESCAPE)) {
abortFlag = true;
break;
}
diff --git a/engines/parallaction/archive.cpp b/engines/parallaction/archive.cpp
index c534fea207..b678b6df3c 100644
--- a/engines/parallaction/archive.cpp
+++ b/engines/parallaction/archive.cpp
@@ -22,7 +22,9 @@
* $Id$
*
*/
+#include "common/stdafx.h"
+#include "common/endian.h"
#include "common/file.h"
#include "parallaction/disk.h"
@@ -31,10 +33,15 @@
namespace Parallaction {
-// HACK: one archive ('fr') in Nippon Safes Demo for Amiga uses different
-// internal offsets than all the other archives. When an archive is opened
-// its size if checked against SIZEOF_SMALL_ARCHIVE ('fr' size) so Archive
-// can behave properly.
+// HACK: Several archives ('de', 'en', 'fr' and 'disk0') in the multi-lingual
+// Amiga version of Nippon Safes, and one archive ('fr') in the Amiga Demo of
+// Nippon Safes used different internal offsets than all the other archives.
+//
+// When an archive is opened in the Amiga demo, its size is checked against
+// SIZEOF_SMALL_ARCHIVE to detect when the smaller archive is used.
+//
+// When an archive is opened in Amiga multi-lingual version, the header is
+// checked again NDOS to detect when a smaller archive is used.
//
#define SIZEOF_SMALL_ARCHIVE 12778
@@ -54,7 +61,7 @@ Archive::Archive() {
}
void Archive::open(const char *file) {
- debugC(3, kDebugDisk, "Archive::open(%s)", file);
+ debugC(1, kDebugDisk, "Archive::open(%s)", file);
if (_archive.isOpen())
close();
@@ -65,7 +72,14 @@ void Archive::open(const char *file) {
if (!_archive.open(path))
error("archive '%s' not found", path);
- bool isSmallArchive = _archive.size() == SIZEOF_SMALL_ARCHIVE;
+ bool isSmallArchive = false;
+ if (_vm->getPlatform() == Common::kPlatformAmiga) {
+ if (_vm->getFeatures() & GF_DEMO) {
+ isSmallArchive = _archive.size() == SIZEOF_SMALL_ARCHIVE;
+ } else if (_vm->getFeatures() & GF_LANG_MULT) {
+ isSmallArchive = (_archive.readUint32BE() != MKID_BE('NDOS'));
+ }
+ }
_numFiles = (isSmallArchive) ? SMALL_ARCHIVE_FILES_NUM : NORMAL_ARCHIVE_FILES_NUM;
@@ -95,6 +109,8 @@ void Archive::close() {
bool Archive::openArchivedFile(const char *filename) {
+ debugC(3, kDebugDisk, "Archive::openArchivedFile(%s)", filename);
+
resetArchivedFile();
debugC(3, kDebugDisk, "Archive::openArchivedFile(%s)", filename);
diff --git a/engines/parallaction/callables.cpp b/engines/parallaction/callables.cpp
index e78c1ef594..1154250ffa 100644
--- a/engines/parallaction/callables.cpp
+++ b/engines/parallaction/callables.cpp
@@ -68,12 +68,12 @@ void _c_score(void *parm) {
}
void _c_fade(void *parm) {
-
+
_vm->_gfx->setBlackPalette();
Gfx::Palette pal;
memset(pal, 0, sizeof(Gfx::Palette));
-
+
for (uint16 _di = 0; _di < 64; _di++) {
_vm->_gfx->fadePalette(pal);
_vm->_gfx->setPalette(pal);
@@ -187,14 +187,14 @@ void _c_trasformata(void *parm) {
}
void _c_offMouse(void *parm) {
- _mouseHidden = 1;
- _engineFlags |= kEngineMouse;
+ _vm->showCursor(false);
+ _engineFlags |= kEngineBlockInput;
return;
}
void _c_onMouse(void *parm) {
- _engineFlags &= ~kEngineMouse;
- _mouseHidden = 0;
+ _engineFlags &= ~kEngineBlockInput;
+ _vm->showCursor(true);
return;
}
@@ -260,7 +260,7 @@ void _c_endComment(void *param) {
for (di = 0; di < PALETTE_COLORS; di++) {
for (si = 0; si <= 93; si +=3) {
- char al;
+ int8 al;
if (_enginePal[si] != pal[si]) {
al = _enginePal[si];
@@ -300,7 +300,7 @@ void _c_endComment(void *param) {
}
void _c_frankenstein(void *parm) {
-
+
Gfx::Palette pal0;
Gfx::Palette pal1;
@@ -308,7 +308,7 @@ void _c_frankenstein(void *parm) {
pal0[(i+FIRST_BASE_COLOR)] = _vm->_gfx->_palette[i];
pal0[(i+FIRST_BASE_COLOR)*3+1] = 0;
pal0[(i+FIRST_BASE_COLOR)*3+2] = 0;
-
+
pal1[(i+FIRST_BASE_COLOR)*3+1] = 0;
pal1[(i+FIRST_BASE_COLOR)*3+2] = 0;
}
@@ -427,6 +427,8 @@ void _c_ridux(void *parm) {
void _c_testResult(void *parm) {
_vm->_gfx->swapBuffers();
+
+ _vm->_disk->selectArchive("disk1");
_vm->parseLocation("common");
_vm->_gfx->setFont(kFontMenu);
diff --git a/engines/parallaction/detection.cpp b/engines/parallaction/detection.cpp
index 63ab893641..8e069c5f08 100644
--- a/engines/parallaction/detection.cpp
+++ b/engines/parallaction/detection.cpp
@@ -58,7 +58,7 @@ static const PARALLACTIONGameDescription gameDescriptions[] = {
{
{
"nippon",
- "",
+ "Multi-lingual",
{
{ "disk1", 0, "610363308258e926dbabd5a9e7bb769f", 1060142},
{ "disk2", 0, "bfdd7bcfbc226f4acf3f67fa9efa2826", 907205},
@@ -70,19 +70,41 @@ static const PARALLACTIONGameDescription gameDescriptions[] = {
{ "it", 0, "89964aef04d2c53a615ee8983caf2775", 410624},
{ NULL, 0, NULL, 0}
},
- Common::EN_ANY,
+ Common::UNK_LANG,
Common::kPlatformPC,
Common::ADGF_NO_FLAGS
},
GType_Nippon,
- 0,
+ GF_LANG_EN | GF_LANG_FR | GF_LANG_DE | GF_LANG_IT | GF_LANG_MULT,
},
+ {
+ {
+ "nippon",
+ "Multi-lingual",
+ {
+ { "disk0", 0, "16cca8724fdf4ec8234385497a0c728a", 208437},
+ { "disk1", 0, "6b29987cfe2298d3745b6d99a0080c44", 901120},
+ { "disk2", 0, "2db40bf8198a57d18e4471a6deaab970", 901120},
+ { "disk3", 0, "0486972962b2bfc230e789b9f88f9ec8", 901120},
+ { "disk4", 0, "6f625e7f05da4a2f57d6b62d57013614", 901120},
+ { "en", 0, "c9ec4f2267d736eef4877c5133e1c6e1", 174074},
+ { "ge", 0, "42d6f10a4ebdadb25a6161d53ea4f450", 182298},
+ { "fr", 0, "cf17defc24f143d1a9acb52eaa5c2406", 179958},
+ { NULL, 0, NULL, 0}
+ },
+ Common::UNK_LANG,
+ Common::kPlatformAmiga,
+ Common::ADGF_NO_FLAGS
+ },
+ GType_Nippon,
+ GF_LANG_EN | GF_LANG_FR | GF_LANG_DE | GF_LANG_MULT,
+ },
{
{
"nippon",
- "",
+ "Demo",
{
{ "disk0", 0, "6fed2e18a6bfe5e8bb49144fcc95fd11", 624640},
{ "fr", 0, "72f04be4320dfac719431419ec2b9a0d", 12778},
@@ -93,10 +115,31 @@ static const PARALLACTIONGameDescription gameDescriptions[] = {
Common::ADGF_DEMO
},
GType_Nippon,
- GF_DEMO,
+ GF_LANG_EN | GF_DEMO,
},
+ {
+ {
+ "nippon",
+ "",
+ {
+ {"disk0", 0, "bfee75d8015f1fb97e75dbe08df4bef7", 354304},
+ {"disk1", 0, "f339dd108c1a1f5cd4853d9966e5d01f", 901120},
+ {"disk2", 0, "2db40bf8198a57d18e4471a6deaab970", 901120},
+ {"disk3", 0, "0486972962b2bfc230e789b9f88f9ec8", 901120},
+ {"disk4", 0, "6f625e7f05da4a2f57d6b62d57013614", 901120},
+ {"it", 0, "746088eb8de2b2713685d243a4e4678f", 185344},
+ { NULL, 0, NULL, 0}
+ },
+ Common::IT_ITA,
+ Common::kPlatformAmiga,
+ Common::ADGF_NO_FLAGS
+ },
+ GType_Nippon,
+ GF_LANG_IT,
+ },
+
{ AD_TABLE_END_MARKER, 0, 0 }
};
@@ -131,7 +174,9 @@ REGISTER_PLUGIN(PARALLACTION, "Parallaction engine", "Nippon Safes Inc. (C) Dyna
namespace Parallaction {
bool Parallaction::detectGame() {
- _gameDescription = (const PARALLACTIONGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const PARALLACTIONGameDescription *)(encapsulatedDesc.realDesc);
+
return (_gameDescription != 0);
}
diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp
index ba7ada3acd..b3de3e5da3 100644
--- a/engines/parallaction/dialogue.cpp
+++ b/engines/parallaction/dialogue.cpp
@@ -210,7 +210,7 @@ uint16 Parallaction::askDialoguePassword(Dialogue *q, StaticCnv *face) {
_gfx->displayBalloonString(_answerBalloonX[0] + 5, _answerBalloonY[0] + _answerBalloonH[0] - 15, "> ", 0);
Common::Event e;
- while (e.kbd.ascii != 0xD && passwordLen < MAX_PASSWORD_LENGTH) {
+ while (e.kbd.ascii != Common::KEYCODE_RETURN && passwordLen < MAX_PASSWORD_LENGTH) {
// FIXME: see comment for updateInput()
if (!g_system->getEventManager()->pollEvent(e)) continue;
@@ -478,6 +478,8 @@ int16 getHoverAnswer(int16 x, int16 y, Question *q) {
void Parallaction::enterDialogue() {
+ showCursor(false);
+
return;
}
@@ -487,6 +489,8 @@ void Parallaction::exitDialogue() {
refreshInventory(_characterName);
+ showCursor(true);
+
return;
}
diff --git a/engines/parallaction/disk.cpp b/engines/parallaction/disk.cpp
index 0119dfce82..7b11fbbbed 100644
--- a/engines/parallaction/disk.cpp
+++ b/engines/parallaction/disk.cpp
@@ -95,6 +95,7 @@ void Disk::selectArchive(const char *name) {
}
void Disk::setLanguage(uint16 language) {
+ debugC(1, kDebugDisk, "setLanguage(%i)", language);
switch (language) {
case 0:
@@ -775,10 +776,14 @@ Cnv* AmigaDisk::makeCnv(Common::SeekableReadStream &stream) {
#undef NUM_PLANES
Script* AmigaDisk::loadLocation(const char *name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadLocation '%s'", name);
+ debugC(1, kDebugDisk, "AmigaDisk()::loadLocation '%s'", name);
char path[PATH_LEN];
- sprintf(path, "%s%s%s.loc.pp", _vm->_characterName, _languageDir, name);
+ if (IS_MINI_CHARACTER(_vm->_characterName)) {
+ sprintf(path, "%s%s%s.loc.pp", _vm->_characterName+4, _languageDir, name);
+ } else
+ sprintf(path, "%s%s%s.loc.pp", _vm->_characterName, _languageDir, name);
+
if (!_locArchive.openArchivedFile(path)) {
sprintf(path, "%s%s.loc.pp", _languageDir, name);
if (!_locArchive.openArchivedFile(path)) {
@@ -786,6 +791,8 @@ Script* AmigaDisk::loadLocation(const char *name) {
}
}
+ debugC(3, kDebugDisk, "location file found: %s", path);
+
return new Script(new PowerPackerStream(_locArchive), true);
}
@@ -802,38 +809,6 @@ Script* AmigaDisk::loadScript(const char* name) {
return new Script(new DummyArchiveStream(_resArchive), true);
}
-Cnv* AmigaDisk::loadTalk(const char *name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadTalk '%s'", name);
-
- Common::SeekableReadStream *s;
-
- char path[PATH_LEN];
- sprintf(path, "%s.talk", name);
- s = openArchivedFile(path, false);
- if (s == NULL) {
- s = openArchivedFile(name, true);
- }
-
- Cnv *cnv = makeCnv(*s);
- delete s;
-
- return cnv;
-}
-
-Cnv* AmigaDisk::loadObjects(const char *name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadObjects");
-
- char path[PATH_LEN];
- sprintf(path, "%s.objs", name);
- Common::SeekableReadStream *s = openArchivedFile(path, true);
-
- Cnv *cnv = makeCnv(*s);
- delete s;
-
- return cnv;
-}
-
-
StaticCnv* AmigaDisk::loadPointer() {
debugC(1, kDebugDisk, "AmigaDisk::loadPointer");
@@ -844,32 +819,6 @@ StaticCnv* AmigaDisk::loadPointer() {
return makeStaticCnv(stream);
}
-StaticCnv* AmigaDisk::loadHead(const char* name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadHead '%s'", name);
-
- char path[PATH_LEN];
- sprintf(path, "%s.head", name);
-
- Common::SeekableReadStream *s = openArchivedFile(path, true);
- StaticCnv *cnv = makeStaticCnv(*s);
-
- delete s;
-
- return cnv;
-}
-
-Font* AmigaDisk::loadFont(const char* name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadFont '%s'", name);
-
- char path[PATH_LEN];
- sprintf(path, "%sfont", name);
-
- if (!_resArchive.openArchivedFile(path))
- errorFileNotFound(path);
-
- return createFont(name, _resArchive);
-}
-
StaticCnv* AmigaDisk::loadStatic(const char* name) {
debugC(1, kDebugDisk, "AmigaDisk::loadStatic '%s'", name);
@@ -882,6 +831,7 @@ StaticCnv* AmigaDisk::loadStatic(const char* name) {
}
Common::SeekableReadStream *AmigaDisk::openArchivedFile(const char* name, bool errorOnFileNotFound) {
+ debugC(3, kDebugDisk, "AmigaDisk::openArchivedFile(%s)", name);
if (_resArchive.openArchivedFile(name)) {
return new DummyArchiveStream(_resArchive);
@@ -905,25 +855,6 @@ Common::SeekableReadStream *AmigaDisk::openArchivedFile(const char* name, bool e
return NULL;
}
-Cnv* AmigaDisk::loadFrames(const char* name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadFrames '%s'", name);
-
- if (IS_MINI_CHARACTER(name))
- return NULL;
-
- Common::SeekableReadStream *s = openArchivedFile(name, true);
- Cnv *cnv = makeCnv(*s);
- delete s;
-
- return cnv;
-}
-
-void AmigaDisk::loadSlide(const char *name) {
- debugC(1, kDebugDisk, "AmigaDisk::loadSlide '%s'", name);
- loadBackground(name);
- return;
-}
-
// FIXME: mask values are not computed correctly for level 1 and 2
void buildMask(byte* buf) {
@@ -1022,7 +953,10 @@ void AmigaDisk::loadMask(const char *name) {
char path[PATH_LEN];
sprintf(path, "%s.mask", name);
- Common::SeekableReadStream *s = openArchivedFile(path, true);
+ Common::SeekableReadStream *s = openArchivedFile(path, false);
+ if (s == NULL)
+ return; // no errors if missing mask files: not every location has one
+
s->seek(0x30, SEEK_SET);
byte r, g, b;
@@ -1085,6 +1019,93 @@ void AmigaDisk::loadScenery(const char* background, const char* mask) {
return;
}
+void AmigaDisk::loadSlide(const char *name) {
+ debugC(1, kDebugDisk, "AmigaDisk::loadSlide '%s'", name);
+
+ char path[PATH_LEN];
+ sprintf(path, "slides/%s", name);
+ Common::SeekableReadStream *s = openArchivedFile(path, false);
+ if (s)
+ loadBackground(path);
+ else
+ loadBackground(name);
+
+ return;
+}
+
+Cnv* AmigaDisk::loadFrames(const char* name) {
+ debugC(1, kDebugDisk, "AmigaDisk::loadFrames '%s'", name);
+
+ Common::SeekableReadStream *s;
+
+ char path[PATH_LEN];
+ sprintf(path, "anims/%s", name);
+
+ s = openArchivedFile(path, false);
+ if (!s)
+ s = openArchivedFile(name, true);
+
+ Cnv *cnv = makeCnv(*s);
+ delete s;
+
+ return cnv;
+}
+
+StaticCnv* AmigaDisk::loadHead(const char* name) {
+ debugC(1, kDebugDisk, "AmigaDisk::loadHead '%s'", name);
+
+ char path[PATH_LEN];
+ sprintf(path, "%s.head", name);
+
+ Common::SeekableReadStream *s = openArchivedFile(path, true);
+ StaticCnv *cnv = makeStaticCnv(*s);
+
+ delete s;
+
+ return cnv;
+}
+
+
+Cnv* AmigaDisk::loadObjects(const char *name) {
+ debugC(1, kDebugDisk, "AmigaDisk::loadObjects");
+
+ char path[PATH_LEN];
+ if (_vm->getFeatures() & GF_DEMO)
+ sprintf(path, "%s.objs", name);
+ else
+ sprintf(path, "objs/%s.objs", name);
+
+ Common::SeekableReadStream *s = openArchivedFile(path, true);
+
+ Cnv *cnv = makeCnv(*s);
+ delete s;
+
+ return cnv;
+}
+
+
+Cnv* AmigaDisk::loadTalk(const char *name) {
+ debugC(1, kDebugDisk, "AmigaDisk::loadTalk '%s'", name);
+
+ Common::SeekableReadStream *s;
+
+ char path[PATH_LEN];
+ if (_vm->getFeatures() & GF_DEMO)
+ sprintf(path, "%s.talk", name);
+ else
+ sprintf(path, "talk/%s.talk", name);
+
+ s = openArchivedFile(path, false);
+ if (s == NULL) {
+ s = openArchivedFile(name, true);
+ }
+
+ Cnv *cnv = makeCnv(*s);
+ delete s;
+
+ return cnv;
+}
+
Table* AmigaDisk::loadTable(const char* name) {
debugC(1, kDebugDisk, "AmigaDisk::loadTable '%s'", name);
@@ -1103,6 +1124,8 @@ Table* AmigaDisk::loadTable(const char* name) {
dispose = true;
stream = s;
} else {
+ if (!(_vm->getFeatures() & GF_DEMO))
+ sprintf(path, "objs/%s.table", name);
if (!_resArchive.openArchivedFile(path))
errorFileNotFound(path);
@@ -1123,6 +1146,28 @@ Table* AmigaDisk::loadTable(const char* name) {
return t;
}
+Font* AmigaDisk::loadFont(const char* name) {
+ debugC(1, kDebugDisk, "AmigaFullDisk::loadFont '%s'", name);
+
+ char path[PATH_LEN];
+ sprintf(path, "%sfont", name);
+
+ if (_vm->getFeatures() & GF_LANG_IT) {
+ // Italian version has separate font files
+ Common::File stream;
+ if (!stream.open(path))
+ errorFileNotFound(path);
+
+ return createFont(name, stream);
+ } else {
+ if (!_resArchive.openArchivedFile(path))
+ errorFileNotFound(path);
+
+ return createFont(name, _resArchive);
+ }
+}
+
+
Common::ReadStream* AmigaDisk::loadMusic(const char* name) {
return openArchivedFile(name);
}
@@ -1136,5 +1181,4 @@ Common::ReadStream* AmigaDisk::loadSound(const char* name) {
return new DummyArchiveStream(_resArchive);
}
-
} // namespace Parallaction
diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp
index 420ca6b681..aab35f8562 100644
--- a/engines/parallaction/graphics.cpp
+++ b/engines/parallaction/graphics.cpp
@@ -857,7 +857,7 @@ Gfx::~Gfx() {
freeStaticCnv(_mouseComposedArrow);
delete _mouseComposedArrow;
-
+
return;
}
diff --git a/engines/parallaction/intro.cpp b/engines/parallaction/intro.cpp
index 7dd3dbc848..96a072b28d 100644
--- a/engines/parallaction/intro.cpp
+++ b/engines/parallaction/intro.cpp
@@ -134,7 +134,7 @@ void _c_startIntro(void *parm) {
_vm->_soundMan->playMusic();
}
- _engineFlags |= kEngineMouse;
+ _engineFlags |= kEngineBlockInput;
return;
}
@@ -170,7 +170,7 @@ void _c_endIntro(void *parm) {
waitUntilLeftClick();
- _engineFlags &= ~kEngineMouse;
+ _engineFlags &= ~kEngineBlockInput;
_vm->_menu->selectCharacter();
} else {
waitUntilLeftClick();
diff --git a/engines/parallaction/inventory.cpp b/engines/parallaction/inventory.cpp
index 0486dcfe63..3581b956a6 100644
--- a/engines/parallaction/inventory.cpp
+++ b/engines/parallaction/inventory.cpp
@@ -286,13 +286,13 @@ void jobHideInventory(void *parm, Job *j) {
static uint16 count = 0;
- _engineFlags |= kEngineMouse;
+ _engineFlags |= kEngineBlockInput;
count++;
if (count == 2) {
count = 0;
j->_finished = 1;
- _engineFlags &= ~kEngineMouse;
+ _engineFlags &= ~kEngineBlockInput;
}
Common::Rect r(INVENTORY_WIDTH, _numInvLines * INVENTORYITEM_HEIGHT);
diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp
index ce5a16ce89..4d8efa3255 100644
--- a/engines/parallaction/location.cpp
+++ b/engines/parallaction/location.cpp
@@ -316,7 +316,7 @@ void Parallaction::changeLocation(char *location) {
_hoverZone = NULL;
- if (_engineFlags & kEngineMouse) {
+ if (_engineFlags & kEngineBlockInput) {
changeCursor( kCursorArrow );
}
diff --git a/engines/parallaction/menu.cpp b/engines/parallaction/menu.cpp
index c11c6216c5..b1b6fb44c8 100644
--- a/engines/parallaction/menu.cpp
+++ b/engines/parallaction/menu.cpp
@@ -88,9 +88,13 @@ const char *loadGameMsg[] = {
#define SLOT_WIDTH (BLOCK_WIDTH+2)
-static uint16 _dinoKey[] = { 5, 3, 6, 1, 4, 7 }; //
-static uint16 _donnaKey[] = { 0, 2, 8, 5, 5, 1 };
-static uint16 _doughKey[] = { 1, 7 ,7, 2, 2, 6 };
+static uint16 _amigaDinoKey[] = { 5, 3, 6, 2, 2, 7 };
+static uint16 _amigaDonnaKey[] = { 0, 3, 6, 2, 2, 6 };
+static uint16 _amigaDoughKey[] = { 1, 3 ,7, 2, 4, 6 };
+
+static uint16 _pcDinoKey[] = { 5, 3, 6, 1, 4, 7 };
+static uint16 _pcDonnaKey[] = { 0, 2, 8, 5, 5, 1 };
+static uint16 _pcDoughKey[] = { 1, 7 ,7, 2, 2, 6 };
Menu::Menu(Parallaction *vm) {
@@ -105,10 +109,12 @@ Menu::~Menu() {
void Menu::start() {
- _vm->_disk->selectArchive((_vm->getPlatform() == Common::kPlatformPC) ? "disk1" : "disk0");
+ _vm->_disk->selectArchive((_vm->getFeatures() & GF_LANG_MULT) ? "disk1" : "disk0");
splash();
+ _vm->_gfx->setFont(kFontMenu);
+
_language = chooseLanguage();
_vm->_disk->setLanguage(_language);
@@ -144,6 +150,8 @@ void Menu::newGame() {
const char **v14 = introMsg3;
+ _vm->_disk->selectArchive("disk1");
+
_vm->_disk->loadScenery("test", NULL);
_vm->_gfx->setPalette(_vm->_gfx->_palette);
_vm->_gfx->swapBuffers();
@@ -179,15 +187,16 @@ void Menu::newGame() {
uint16 Menu::chooseLanguage() {
if (_vm->getPlatform() == Common::kPlatformAmiga) {
- // TODO: should return the language ID supported by this version
- // this can be done with some flags in the detection structures
- return 1;
+ if (!(_vm->getFeatures() & GF_LANG_MULT)) {
+ if (_vm->getFeatures() & GF_DEMO)
+ return 1; // Amiga Demo supports English
+ else
+ return 0; // The only other non multi-lingual version just supports Italian
+ }
}
// user can choose language in dos version
- _vm->_gfx->setFont(kFontMenu);
-
_vm->_disk->loadSlide("lingua");
_vm->_gfx->setPalette(_vm->_gfx->_palette);
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
@@ -206,13 +215,29 @@ uint16 Menu::chooseLanguage() {
if (_mouseButtons == kMouseLeftUp) {
for (uint16 _si = 0; _si < 4; _si++) {
- if (80 + _si*49 >= _vm->_mousePos.x) continue;
- if (110 - _si*25 >= _vm->_mousePos.y) continue;
+ if (80 + _si * 49 >= _vm->_mousePos.x) continue;
+ if (110 - _si * 25 >= _vm->_mousePos.y) continue;
- if (128 + _si*49 <= _vm->_mousePos.x) continue;
- if (180 - _si*25 <=_vm->_mousePos.y) continue;
+ if (128 + _si * 49 <= _vm->_mousePos.x) continue;
+ if (180 - _si * 25 <= _vm->_mousePos.y) continue;
// beep();
+
+ switch (_si) {
+ case 0:
+ if (!(_vm->getFeatures() & GF_LANG_IT))
+ continue;
+ case 1:
+ if (!(_vm->getFeatures() & GF_LANG_FR))
+ continue;
+ case 2:
+ if (!(_vm->getFeatures() & GF_LANG_EN))
+ continue;
+ case 3:
+ if (!(_vm->getFeatures() & GF_LANG_DE))
+ continue;
+ }
+
return _si;
}
}
@@ -315,7 +340,7 @@ void Menu::selectCharacter() {
_vm->_gfx->setFont(kFontMenu);
- _vm->_disk->selectArchive((_vm->getPlatform() == Common::kPlatformPC) ? "disk1" : "disk0");
+ _vm->_disk->selectArchive((_vm->getFeatures() & GF_LANG_MULT) ? "disk1" : "disk0");
_vm->_disk->loadSlide("password"); // loads background into kBitBack buffer
@@ -331,6 +356,10 @@ void Menu::selectCharacter() {
_vm->_gfx->displayString(60, 30, introMsg1[_language]); // displays message
_vm->_gfx->copyScreen(Gfx::kBitFront, Gfx::kBitBack);
+ _donna_points = 0;
+ _dino_points = 0;
+ _dough_points = 0;
+
while (_di < 6) {
_mouseButtons = kMouseNone;
@@ -361,12 +390,21 @@ void Menu::selectCharacter() {
// beep();
- if (_dinoKey[_di] == _si)
- _dino_points++; // dino
- if (_donnaKey[_di] == _si)
- _donna_points++; // donna
- if (_doughKey[_di] == _si)
- _dough_points++; // dough
+ if (_vm->getPlatform() == Common::kPlatformAmiga && (_vm->getFeatures() & GF_LANG_MULT)) {
+ if (_amigaDinoKey[_di] == _si)
+ _dino_points++; // dino
+ if (_amigaDonnaKey[_di] == _si)
+ _donna_points++; // donna
+ if (_amigaDoughKey[_di] == _si)
+ _dough_points++; // dough
+ } else {
+ if (_pcDinoKey[_di] == _si)
+ _dino_points++; // dino
+ if (_pcDonnaKey[_di] == _si)
+ _donna_points++; // donna
+ if (_pcDoughKey[_di] == _si)
+ _dough_points++; // dough
+ }
_di++;
}
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index ba97a43c6b..e0291c5a2a 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -86,8 +86,6 @@ char _forwardedAnimationNames[20][20];
uint16 _numForwards = 0;
char _soundFile[20];
-byte _mouseHidden = 0;
-
uint32 _commandFlags = 0;
uint16 _introSarcData3 = 200;
uint16 _introSarcData2 = 1;
@@ -107,7 +105,7 @@ Parallaction::Parallaction(OSystem *syst) :
// FIXME
_vm = this;
-
+ _mouseHidden = false;
Common::File::addDefaultDirectory( _gameDataPath );
@@ -126,27 +124,24 @@ Parallaction::Parallaction(OSystem *syst) :
Parallaction::~Parallaction() {
delete _debugger;
- delete _soundMan;
- delete _disk;
delete _globalTable;
- if (_objectsNames)
- delete _objectsNames;
-
delete _callableNames;
delete _commandsNames;
delete _instructionNames;
delete _zoneTypeNames;
delete _zoneFlagNames;
- if (_localFlagNames)
- delete _localFlagNames;
-
- delete _gfx;
+ _animations.remove(&_char._ani);
freeLocation();
+
freeCharacter();
destroyInventory();
+
+ delete _gfx;
+ delete _soundMan;
+ delete _disk;
}
@@ -178,11 +173,14 @@ int Parallaction::init() {
_baseTime = 0;
- if (getPlatform() == Common::kPlatformPC)
+ if (getPlatform() == Common::kPlatformPC) {
_disk = new DosDisk(this);
- else {
+ } else {
+ if (getFeatures() & GF_DEMO) {
+ strcpy(_location._name, "fognedemo");
+ }
_disk = new AmigaDisk(this);
- _disk->selectArchive("disk0");
+ _disk->selectArchive((_vm->getFeatures() & GF_DEMO) ? "disk0" : "disk1");
}
_engineFlags = 0;
@@ -284,10 +282,11 @@ uint16 Parallaction::updateInput() {
switch (e.type) {
case Common::EVENT_KEYDOWN:
- if (e.kbd.ascii == 'l') KeyDown = kEvLoadGame;
- if (e.kbd.ascii == 's') KeyDown = kEvSaveGame;
if (e.kbd.flags == Common::KBD_CTRL && e.kbd.keycode == 'd')
_debugger->attach();
+ if (getFeatures() & GF_DEMO) break;
+ if (e.kbd.keycode == Common::KEYCODE_l) KeyDown = kEvLoadGame;
+ if (e.kbd.keycode == Common::KEYCODE_s) KeyDown = kEvSaveGame;
break;
case Common::EVENT_LBUTTONDOWN:
@@ -312,6 +311,7 @@ uint16 Parallaction::updateInput() {
case Common::EVENT_QUIT:
_engineFlags |= kEngineQuit;
+ g_system->quit();
break;
default:
@@ -378,8 +378,8 @@ void Parallaction::runGame() {
_keyDown = updateInput();
debugC(3, kDebugInput, "runGame: input flags (%i, %i, %i, %i)",
- _mouseHidden == 0,
- (_engineFlags & kEngineMouse) == 0,
+ !_mouseHidden,
+ (_engineFlags & kEngineBlockInput) == 0,
(_engineFlags & kEngineWalking) == 0,
(_engineFlags & kEngineChangeLocation) == 0
);
@@ -390,7 +390,7 @@ void Parallaction::runGame() {
// Skipping input processing when kEngineChangeLocation is set solves the issue. It's
// noteworthy that the programmers added this very check in Big Red Adventure's engine,
// so it should be ok here in Nippon Safes too.
- if ((_mouseHidden == 0) && ((_engineFlags & kEngineMouse) == 0) && ((_engineFlags & kEngineWalking) == 0) && ((_engineFlags & kEngineChangeLocation) == 0)) {
+ if ((!_mouseHidden) && ((_engineFlags & kEngineBlockInput) == 0) && ((_engineFlags & kEngineWalking) == 0) && ((_engineFlags & kEngineChangeLocation) == 0)) {
InputData *v8 = translateInput();
if (v8) processInput(v8);
}
@@ -508,14 +508,14 @@ void Parallaction::processInput(InputData *data) {
case kEvSaveGame:
_hoverZone = NULL;
- changeCursor(kCursorArrow);
saveGame();
+ changeCursor(kCursorArrow);
break;
case kEvLoadGame:
_hoverZone = NULL;
- changeCursor(kCursorArrow);
loadGame();
+ changeCursor(kCursorArrow);
break;
}
@@ -675,7 +675,10 @@ void Parallaction::waitTime(uint32 t) {
}
-
+void Parallaction::showCursor(bool visible) {
+ _mouseHidden = !visible;
+ g_system->showMouse(visible);
+}
// changes the mouse pointer
// index 0 means standard pointer (from pointer.cnv)
@@ -756,7 +759,7 @@ void Parallaction::changeCharacter(const char *name) {
// character for sanity before memory is freed
freeCharacter();
- _disk->selectArchive((_vm->getPlatform() == Common::kPlatformPC) ? "disk1" : "disk0");
+ _disk->selectArchive((_vm->getPlatform() == Common::kPlatformAmiga) ? "disk0" : "disk1");
_vm->_char._ani._cnv = _disk->loadFrames(fullName);
if (!IS_DUMMY_CHARACTER(name)) {
@@ -768,7 +771,7 @@ void Parallaction::changeCharacter(const char *name) {
_soundMan->playCharacterMusic(name);
- if ((getFeatures() & GF_DEMO) == 0)
+ if (!(getFeatures() & GF_DEMO))
parseLocation("common");
}
}
@@ -858,13 +861,13 @@ void jobWaitRemoveJob(void *parm, Job *j) {
debugC(3, kDebugJobs, "jobWaitRemoveJob: count = %i", count);
- _engineFlags |= kEngineMouse;
+ _engineFlags |= kEngineBlockInput;
count++;
if (count == 2) {
count = 0;
_vm->removeJob(arg);
- _engineFlags &= ~kEngineMouse;
+ _engineFlags &= ~kEngineBlockInput;
j->_finished = 1;
}
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index d632c57c6d..38db16ce99 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -60,7 +60,12 @@ enum {
};
enum {
- GF_DEMO = 1 << 0
+ GF_DEMO = 1 << 0,
+ GF_LANG_EN = 1 << 1,
+ GF_LANG_FR = 1 << 2,
+ GF_LANG_DE = 1 << 3,
+ GF_LANG_IT = 1 << 4,
+ GF_LANG_MULT = 1 << 5
};
@@ -105,7 +110,7 @@ enum EngineFlags {
kEngineInventory = (1 << 2),
kEngineWalking = (1 << 3),
kEngineChangeLocation = (1 << 4),
- kEngineMouse = (1 << 5),
+ kEngineBlockInput = (1 << 5),
kEngineDragging = (1 << 6),
kEngineTransformedDonna = (1 << 7)
};
@@ -177,7 +182,6 @@ extern char _slideText[][40];
extern uint16 _introSarcData3; // sarcophagus stuff to be saved
extern uint16 _introSarcData2; // sarcophagus stuff to be saved
extern char _saveData1[];
-extern byte _mouseHidden;
extern uint32 _commandFlags;
extern const char *_instructionNamesRes[];
extern const char *_commandsNamesRes[];
@@ -306,6 +310,7 @@ public:
void parseLocation(const char *filename);
void changeCursor(int32 index);
+ void showCursor(bool visible);
void changeCharacter(const char *name);
char *parseComment(Script &script);
@@ -392,6 +397,8 @@ protected: // data
bool _skipMenu;
+ bool _mouseHidden;
+
// input-only
InputData _input;
bool _actionAfterWalk; // actived when the character needs to move before taking an action
diff --git a/engines/queen/input.cpp b/engines/queen/input.cpp
index 5154b04dbe..10a8664c0e 100644
--- a/engines/queen/input.cpp
+++ b/engines/queen/input.cpp
@@ -55,7 +55,7 @@ Input::Input(Common::Language language, OSystem *system) :
_system(system), _eventMan(system->getEventManager()), _fastMode(false),
_keyVerb(VERB_NONE), _cutawayRunning(false), _canQuit(false),
_cutawayQuit(false), _dialogueRunning(false), _talkQuit(false),
- _quickSave(false), _quickLoad(false), _debugger(false), _inKey(0),
+ _quickSave(false), _quickLoad(false), _debugger(false), _inKey(Common::KEYCODE_INVALID),
_mouseButton(0), _idleTime(0) {
switch (language) {
@@ -135,34 +135,34 @@ void Input::delay(uint amount) {
} while (_system->getMillis() < end);
}
-int Input::checkKeys() {
+void Input::checkKeys() {
if (_inKey)
debug(6, "[Input::checkKeys] _inKey = %i", _inKey);
switch (_inKey) {
- case KEY_SPACE:
+ case Common::KEYCODE_SPACE:
_keyVerb = VERB_SKIP_TEXT;
break;
- case KEY_COMMA:
+ case Common::KEYCODE_COMMA:
_keyVerb = VERB_SCROLL_UP;
break;
- case KEY_DOT:
+ case Common::KEYCODE_PERIOD:
_keyVerb = VERB_SCROLL_DOWN;
break;
- case KEY_DIGIT_1:
+ case Common::KEYCODE_1:
_keyVerb = VERB_DIGIT_1;
break;
- case KEY_DIGIT_2:
+ case Common::KEYCODE_2:
_keyVerb = VERB_DIGIT_2;
break;
- case KEY_DIGIT_3:
+ case Common::KEYCODE_3:
_keyVerb = VERB_DIGIT_3;
break;
- case KEY_DIGIT_4:
+ case Common::KEYCODE_4:
_keyVerb = VERB_DIGIT_4;
break;
- case KEY_ESCAPE: // skip cutaway / dialogue
+ case Common::KEYCODE_ESCAPE: // skip cutaway / dialogue
if (_canQuit) {
if (_cutawayRunning) {
debug(6, "[Input::checkKeys] Setting _cutawayQuit to true");
@@ -172,8 +172,8 @@ int Input::checkKeys() {
_talkQuit = true;
}
break;
- case KEY_F1: // use Journal
- case KEY_F5:
+ case Common::KEYCODE_F1: // use Journal
+ case Common::KEYCODE_F5:
if (_cutawayRunning) {
if (_canQuit) {
_keyVerb = VERB_USE_JOURNAL;
@@ -185,10 +185,10 @@ int Input::checkKeys() {
_talkQuit = true;
}
break;
- case KEY_F11: // quicksave
+ case Common::KEYCODE_F11: // quicksave
_quickSave = true;
break;
- case KEY_F12: // quickload
+ case Common::KEYCODE_F12: // quickload
_quickLoad = true;
break;
default:
@@ -201,9 +201,7 @@ int Input::checkKeys() {
break;
}
- int inKey = _inKey;
- _inKey = 0; // reset
- return inKey;
+ _inKey = Common::KEYCODE_INVALID; // reset
}
Common::Point Input::getMousePos() const {
diff --git a/engines/queen/input.h b/engines/queen/input.h
index 9afb7472b1..86092aeed6 100644
--- a/engines/queen/input.h
+++ b/engines/queen/input.h
@@ -28,14 +28,11 @@
#include "common/util.h"
#include "common/rect.h"
+#include "common/events.h"
#include "queen/defs.h"
class OSystem;
-namespace Common {
- class EventManager;
-}
-
namespace Queen {
class Input {
@@ -57,7 +54,7 @@ public:
void delay(uint amount);
//! convert input to verb
- int checkKeys();
+ void checkKeys();
//! use instead of KEYVERB=0
void clearKeyVerb() { _keyVerb = VERB_NONE; }
@@ -97,26 +94,6 @@ public:
private:
- enum KeyCode {
- KEY_SPACE = ' ',
- KEY_COMMA = ',',
- KEY_DOT = '.',
-
- KEY_DIGIT_1 = '1',
- KEY_DIGIT_2 = '2',
- KEY_DIGIT_3 = '3',
- KEY_DIGIT_4 = '4',
-
- KEY_ESCAPE = 27,
- KEY_RETURN = 13,
- KEY_BACKSPACE = 8,
-
- KEY_F1 = 282,
- KEY_F11 = KEY_F1 + 10,
- KEY_F5 = KEY_F1 + 4,
- KEY_F12
- };
-
//! used to get keyboard and mouse events
OSystem *_system;
@@ -153,7 +130,7 @@ private:
bool _debugger;
//! set by delay();
- int _inKey;
+ Common::KeyCode _inKey;
//! set by delay();
int _mouseButton;
diff --git a/engines/queen/journal.cpp b/engines/queen/journal.cpp
index 3db7ce82f0..c75b03a5c0 100644
--- a/engines/queen/journal.cpp
+++ b/engines/queen/journal.cpp
@@ -515,15 +515,15 @@ void Journal::initTextField(const char *desc) {
void Journal::updateTextField(uint16 ascii, int keycode) {
bool dirty = false;
switch (keycode) {
- case 8: // backspace
+ case Common::KEYCODE_BACKSPACE:
if (_textField.textCharsCount > 0) {
--_textField.textCharsCount;
_textField.text[_textField.textCharsCount] = '\0';
dirty = true;
}
break;
- case '\n':
- case '\r':
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
if (_textField.text[0]) {
closeTextField();
int currentSlot = _currentSavePage * 10 + _currentSaveSlot;
diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp
index 6ea8674e8e..e0e9415cab 100644
--- a/engines/saga/actor.cpp
+++ b/engines/saga/actor.cpp
@@ -93,9 +93,9 @@ inline int16 int16Compare(int16 i1, int16 i2) {
return ((i1) > (i2) ? 1 : ((i1) < (i2) ? -1 : 0));
}
-inline int16 quickDistance(const Point &point1, const Point &point2) {
+inline int16 quickDistance(const Point &point1, const Point &point2, int16 compressX) {
Point delta;
- delta.x = ABS(point1.x - point2.x) / 2;
+ delta.x = ABS(point1.x - point2.x) / compressX;
delta.y = ABS(point1.y - point2.y);
return ((delta.x < delta.y) ? (delta.y + delta.x / 2) : (delta.x + delta.y / 2));
}
@@ -243,7 +243,7 @@ Actor::Actor(SagaEngine *vm) : _vm(vm) {
_debugPointsAlloced = _debugPointsCount = 0;
#endif
- _protagStates = 0;
+ _protagStates = NULL;
_protagStatesCount = 0;
_pathNodeList = _newPathNodeList = NULL;
@@ -356,56 +356,70 @@ Actor::~Actor() {
free(_pathCell);
_actorsStrings.freeMem();
//release resources
+ freeProtagStates();
freeActorList();
freeObjList();
}
-bool Actor::loadActorResources(ActorData *actor) {
+void Actor::freeProtagStates() {
+ int i;
+ for (i = 0; i < _protagStatesCount; i++) {
+ free(_protagStates[i]._frames);
+ }
+ free(_protagStates);
+ _protagStates = NULL;
+ _protagStatesCount = 0;
+}
+
+void Actor::loadFrameList(int frameListResourceId, ActorFrameSequence *&framesPointer, int &framesCount) {
byte *resourcePointer;
size_t resourceLength;
- int framesCount;
- ActorFrameSequence *framesPointer;
- bool gotSomething = false;
- if (actor->_frameListResourceId) {
- debug(9, "Loading frame resource id %d", actor->_frameListResourceId);
- _vm->_resource->loadResource(_actorContext, actor->_frameListResourceId, resourcePointer, resourceLength);
+ debug(9, "Loading frame resource id %d", frameListResourceId);
+ _vm->_resource->loadResource(_actorContext, frameListResourceId, resourcePointer, resourceLength);
- framesCount = resourceLength / 16;
- debug(9, "Frame resource contains %d frames (res length is %d)", framesCount, (int)resourceLength);
+ framesCount = resourceLength / 16;
+ debug(9, "Frame resource contains %d frames (res length is %d)", framesCount, (int)resourceLength);
- framesPointer = (ActorFrameSequence *)malloc(sizeof(ActorFrameSequence) * framesCount);
- if (framesPointer == NULL && framesCount != 0) {
- memoryError("Actor::loadActorResources");
- }
+ framesPointer = (ActorFrameSequence *)malloc(sizeof(ActorFrameSequence) * framesCount);
+ if (framesPointer == NULL && framesCount != 0) {
+ memoryError("Actor::loadFrameList");
+ }
- MemoryReadStreamEndian readS(resourcePointer, resourceLength, _actorContext->isBigEndian);
+ MemoryReadStreamEndian readS(resourcePointer, resourceLength, _actorContext->isBigEndian);
- for (int i = 0; i < framesCount; i++) {
- debug(9, "frameType %d", i);
- for (int orient = 0; orient < ACTOR_DIRECTIONS_COUNT; orient++) {
- // Load all four orientations
- framesPointer[i].directions[orient].frameIndex = readS.readUint16();
- if (_vm->getGameType() == GType_ITE) {
- framesPointer[i].directions[orient].frameCount = readS.readSint16();
- } else {
- framesPointer[i].directions[orient].frameCount = readS.readByte();
- readS.readByte();
- }
- if (framesPointer[i].directions[orient].frameCount < 0)
- warning("frameCount < 0 (%d)", framesPointer[i].directions[orient].frameCount);
- debug(9, "frameIndex %d frameCount %d", framesPointer[i].directions[orient].frameIndex, framesPointer[i].directions[orient].frameCount);
+ for (int i = 0; i < framesCount; i++) {
+ debug(9, "frameType %d", i);
+ for (int orient = 0; orient < ACTOR_DIRECTIONS_COUNT; orient++) {
+ // Load all four orientations
+ framesPointer[i].directions[orient].frameIndex = readS.readUint16();
+ if (_vm->getGameType() == GType_ITE) {
+ framesPointer[i].directions[orient].frameCount = readS.readSint16();
+ } else {
+ framesPointer[i].directions[orient].frameCount = readS.readByte();
+ readS.readByte();
}
+ if (framesPointer[i].directions[orient].frameCount < 0)
+ warning("frameCount < 0 (%d)", framesPointer[i].directions[orient].frameCount);
+ debug(9, "frameIndex %d frameCount %d", framesPointer[i].directions[orient].frameIndex, framesPointer[i].directions[orient].frameCount);
}
+ }
- free(resourcePointer);
+ free(resourcePointer);
+}
- actor->_frames = framesPointer;
- actor->_framesCount = framesCount;
+bool Actor::loadActorResources(ActorData *actor) {
+ bool gotSomething = false;
+
+ if (actor->_frameListResourceId) {
+ loadFrameList(actor->_frameListResourceId, actor->_frames, actor->_framesCount);
+
+ actor->_shareFrames = false;
gotSomething = true;
} else {
- warning("Frame List ID = 0 for actor index %d", actor->_index);
+ // It's normal for some actors to have no frames
+ //warning("Frame List ID = 0 for actor index %d", actor->_index);
//if (_vm->getGameType() == GType_ITE)
return true;
@@ -469,6 +483,7 @@ void Actor::loadActorList(int protagonistIdx, int actorCount, int actorsResource
int movementSpeed;
int walkStepIndex;
int walkStepCount;
+ int stateResourceId;
freeActorList();
@@ -566,28 +581,34 @@ void Actor::loadActorList(int protagonistIdx, int actorCount, int actorsResource
_protagState = 0;
if (protagStatesResourceID) {
- free(_protagStates);
+ if (!_protagonist->_shareFrames)
+ free(_protagonist->_frames);
+ freeProtagStates();
- _protagStates = (ActorFrameSequence *)malloc(sizeof(ActorFrameSequence) * protagStatesCount);
+ _protagStates = (ProtagStateData *)malloc(sizeof(ProtagStateData) * protagStatesCount);
- byte *resourcePointer;
- size_t resourceLength;
+ byte *idsResourcePointer;
+ size_t idsResourceLength;
_vm->_resource->loadResource(_actorContext, protagStatesResourceID,
- resourcePointer, resourceLength);
+ idsResourcePointer, idsResourceLength);
+ if (idsResourceLength < (size_t)protagStatesCount * 4) {
+ error("Wrong protagonist states resource");
+ }
- MemoryReadStream statesS(resourcePointer, resourceLength);
+ MemoryReadStream statesIds(idsResourcePointer, idsResourceLength);
for (i = 0; i < protagStatesCount; i++) {
- for (j = 0; j < ACTOR_DIRECTIONS_COUNT; j++) {
- _protagStates[i].directions[j].frameIndex = statesS.readUint16LE();
- _protagStates[i].directions[j].frameCount = statesS.readUint16LE();
- }
+ stateResourceId = statesIds.readUint32LE();
+
+ loadFrameList(stateResourceId, _protagStates[i]._frames, _protagStates[i]._framesCount);
}
- free(resourcePointer);
+ free(idsResourcePointer);
- _protagonist->_frames = &_protagStates[_protagState];
+ _protagonist->_frames = _protagStates[_protagState]._frames;
+ _protagonist->_framesCount = _protagStates[_protagState]._framesCount;
+ _protagonist->_shareFrames = true;
}
_protagStatesCount = protagStatesCount;
@@ -822,8 +843,14 @@ bool Actor::validFollowerLocation(const Location &location) {
void Actor::setProtagState(int state) {
_protagState = state;
- if (_vm->getGameType() == GType_IHNM)
- _protagonist->_frames = &_protagStates[state];
+ if (_vm->getGameType() == GType_IHNM) {
+ if (!_protagonist->_shareFrames)
+ free(_protagonist->_frames);
+
+ _protagonist->_frames = _protagStates[state]._frames;
+ _protagonist->_framesCount = _protagStates[state]._framesCount;
+ _protagonist->_shareFrames = true;
+ }
}
void Actor::updateActorsScene(int actorsEntrance) {
@@ -1023,7 +1050,7 @@ ActorFrameRange *Actor::getActorFrameRange(uint16 actorId, int frameType) {
if ((actor->_facingDirection < kDirUp) || (actor->_facingDirection > kDirUpLeft))
error("Actor::getActorFrameRange Wrong direction 0x%X actorId 0x%X", actor->_facingDirection, actorId);
- //if (_vm->getGameType() == GType_ITE) {
+ if (_vm->getGameType() == GType_ITE) {
if (frameType >= actor->_framesCount) {
warning("Actor::getActorFrameRange Wrong frameType 0x%X (%d) actorId 0x%X", frameType, actor->_framesCount, actorId);
return &def;
@@ -1032,21 +1059,18 @@ ActorFrameRange *Actor::getActorFrameRange(uint16 actorId, int frameType) {
fourDirection = actorDirectectionsLUT[actor->_facingDirection];
return &actor->_frames[frameType].directions[fourDirection];
-/*
- } else {
+ }
+
+ if (_vm->getGameType() == GType_IHNM) {
+ // It is normal for some actors to have no frames for a given frameType
+ // These are mainly actors with no frames at all (e.g. narrators or immovable actors)
+ // Examples are AM and the boy when he is talking to Benny via the computer screen.
+ // Both of them are invisible and immovable
+ // There is no point to keep throwing warnings about this, the original checks for
+ // a valid framecount too
if (0 == actor->_framesCount) {
return &def;
}
-
- //TEST
- if (actor->_id == 0x2000) {
- if (actor->_framesCount <= _currentFrameIndex) {
- _currentFrameIndex = 0;
- }
- fr = actor->_frames[_currentFrameIndex].directions;
- return fr;
- }
- //TEST
if (frameType >= actor->_framesCount) {
frameType = actor->_framesCount - 1;
}
@@ -1054,63 +1078,10 @@ ActorFrameRange *Actor::getActorFrameRange(uint16 actorId, int frameType) {
frameType = 0;
}
- if (frameType == kFrameIHNMWalk ) {
- switch (actor->_facingDirection) {
- case kDirUpRight:
- if (frameType > 0)
- fr = &actor->_frames[frameType - 1].directions[ACTOR_DIRECTION_RIGHT];
- else
- fr = &def;
- if (!fr->frameCount)
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_RIGHT];
- break;
- case kDirDownRight:
- if (frameType > 0)
- fr = &actor->_frames[frameType - 1].directions[ACTOR_DIRECTION_FORWARD];
- else
- fr = &def;
- if (!fr->frameCount)
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_RIGHT];
- break;
- case kDirUpLeft:
- if (frameType > 0)
- fr = &actor->_frames[frameType - 1].directions[ACTOR_DIRECTION_LEFT];
- else
- fr = &def;
- if (!fr->frameCount)
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_LEFT];
- break;
- case kDirDownLeft:
- if (frameType > 0)
- fr = &actor->_frames[frameType - 1].directions[ACTOR_DIRECTION_BACK];
- else
- fr = &def;
- if (!fr->frameCount)
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_LEFT];
- break;
- case kDirRight:
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_RIGHT];
- break;
- case kDirLeft:
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_LEFT];
- break;
- case kDirUp:
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_BACK];
- break;
- case kDirDown:
- fr = &actor->_frames[frameType].directions[ACTOR_DIRECTION_FORWARD];
- break;
- }
- return fr;
- }
- else {
- if (frameType >= actor->_framesCount) {
- error("Actor::getActorFrameRange Wrong frameType 0x%X (%d) actorId 0x%X", frameType, actor->_framesCount, actorId);
- }
- fourDirection = actorDirectectionsLUT[actor->_facingDirection];
- return &actor->_frames[frameType].directions[fourDirection];
- }
- }*/
+ fourDirection = actorDirectectionsLUT[actor->_facingDirection];
+ return &actor->_frames[frameType].directions[fourDirection];
+ }
+ return NULL;
}
void Actor::handleSpeech(int msec) {
@@ -1135,6 +1106,8 @@ void Actor::handleSpeech(int msec) {
removeFirst = true;
}
_activeSpeech.playing = false;
+ if (_activeSpeech.speechFlags & kSpeakForceText)
+ _activeSpeech.speechFlags = 0;
if (_activeSpeech.actorIds[0] != 0) {
actor = getActor(_activeSpeech.actorIds[0]);
if (!(_activeSpeech.speechFlags & kSpeakNoAnimate)) {
@@ -1242,7 +1215,10 @@ void Actor::handleSpeech(int msec) {
}
height2 = actor->_screenPosition.y - 50;
- _activeSpeech.speechBox.top = _activeSpeech.drawRect.top = MAX(10, (height2 - height) / 2);
+ if (height2 > _vm->_scene->getHeight())
+ _activeSpeech.speechBox.top = _activeSpeech.drawRect.top = _vm->_scene->getHeight() - 1 - height - 10;
+ else
+ _activeSpeech.speechBox.top = _activeSpeech.drawRect.top = MAX(10, (height2 - height) / 2);
} else {
_activeSpeech.drawRect.left = _activeSpeech.speechBox.left;
_activeSpeech.drawRect.top = _activeSpeech.speechBox.top + (_activeSpeech.speechBox.height() - height) / 2;
@@ -1472,8 +1448,14 @@ void Actor::handleActions(int msec, bool setup) {
actor->cycleWrap(frameRange->frameCount);
actor->_frameNumber = frameRange->frameIndex + actor->_actionCycle;
} else {
- actor->_location.x += directionLUT[actor->_actionDirection][0] * 2;
- actor->_location.y += directionLUT[actor->_actionDirection][1] * 2;
+ if (_vm->getGameType() == GType_ITE) {
+ actor->_location.x += directionLUT[actor->_actionDirection][0] * 2;
+ actor->_location.y += directionLUT[actor->_actionDirection][1] * 2;
+ } else {
+ // FIXME: The original does not multiply by 8 here, but we do
+ actor->_location.x += (directionLUT[actor->_actionDirection][0] * 8 * actor->_screenScale + 128) >> 8;
+ actor->_location.y += (directionLUT[actor->_actionDirection][1] * 8 * actor->_screenScale + 128) >> 8;
+ }
frameRange = getActorFrameRange(actor->_id, actor->_walkFrameSequence);
actor->_actionCycle++;
@@ -1626,6 +1608,8 @@ void Actor::handleActions(int msec, bool setup) {
}
}
}
+ // Update frameCount for sfWaitFrames in IHNM
+ _vm->_frameCount++;
}
void Actor::direct(int msec) {
@@ -1667,6 +1651,10 @@ bool Actor::calcScreenPosition(CommonObjectData *commonObjectData) {
if (middle <= beginSlope) {
commonObjectData->_screenScale = 256;
+ } else if (_vm->getGameType() == GType_IHNM && (objectTypeId(commonObjectData->_id) & kGameObjectObject)) {
+ commonObjectData->_screenScale = 256;
+ } else if (_vm->getGameType() == GType_IHNM && (commonObjectData->_flags & kNoScale)) {
+ commonObjectData->_screenScale = 256;
} else if (middle >= endSlope) {
commonObjectData->_screenScale = 1;
} else {
@@ -1694,6 +1682,20 @@ uint16 Actor::hitTest(const Point &testPoint, bool skipProtagonist) {
// fine to interact with. For example, the door entrance at the glass
// makers's house in ITE's ferret village.
+ // Note that in IHNM, there are some items that overlap on other items
+ // Since we're checking the draw list from the FIRST item drawn to the
+ // LAST one, sometimes the object drawn first is incorrectly returned.
+ // An example is the chalk on the magic circle in Ted's chapter, which
+ // is drawn AFTER the circle, but HitTest incorrectly returns the circle
+ // id in this case, even though the chalk was drawn after the circle.
+ // Therefore, for IHNM, we iterate through the whole draw list and
+ // return the last match found, not the first one.
+ // Unfortunately, it is only possible to search items in the sorted draw
+ // list from start to end, not reverse, so it's necessary to search
+ // through the whole list to get the item drawn last
+
+ uint16 result = ID_NOTHING;
+
if (!_vm->_scene->getSceneClip().contains(testPoint))
return ID_NOTHING;
@@ -1713,10 +1715,12 @@ uint16 Actor::hitTest(const Point &testPoint, bool skipProtagonist) {
continue;
}
if (_vm->_sprite->hitTest(*spriteList, frameNumber, drawObject->_screenPosition, drawObject->_screenScale, testPoint)) {
- return drawObject->_id;
+ result = drawObject->_id;
+ if (_vm->getGameType() == GType_ITE)
+ return result; // in ITE, return the first result found (read above)
}
}
- return ID_NOTHING;
+ return result; // in IHNM, return the last result found (read above)
}
void Actor::createDrawOrderList() {
@@ -1777,6 +1781,10 @@ bool Actor::getSpriteParams(CommonObjectData *commonObjectData, int &frameNumber
frameNumber = commonObjectData->_spriteListResourceId;
}
+ if (spriteList->spriteCount == 0) {
+ return false;
+ }
+
if ((frameNumber < 0) || (spriteList->spriteCount <= frameNumber)) {
debug(1, "Actor::getSpriteParams frameNumber invalid for %s id 0x%X (%d)",
validObjId(commonObjectData->_id) ? "object" : "actor",
@@ -1830,7 +1838,8 @@ void Actor::drawActors() {
void Actor::drawSpeech(void) {
if (!isSpeaking() || !_activeSpeech.playing || _vm->_script->_skipSpeeches
- || (!_vm->_subtitlesEnabled && (_vm->getFeatures() & GF_CD_FX)))
+ || (!_vm->_subtitlesEnabled && (_vm->getFeatures() & GF_CD_FX))
+ || (!_vm->_subtitlesEnabled && (_vm->getGameType() == GType_IHNM)))
return;
int i;
@@ -2003,9 +2012,12 @@ bool Actor::actorEndWalk(uint16 actorId, bool recurse) {
actor = getActor(actorId);
actor->_actorFlags &= ~kActorBackwards;
- if (actor->_location.distance(actor->_finalTarget) > 8 && (actor->_flags & kProtagonist) && recurse && !(actor->_actorFlags & kActorNoCollide)) {
- actor->_actorFlags |= kActorNoCollide;
- return actorWalkTo(actorId, actor->_finalTarget);
+ if (_vm->getGameType() == GType_ITE) {
+
+ if (actor->_location.distance(actor->_finalTarget) > 8 && (actor->_flags & kProtagonist) && recurse && !(actor->_actorFlags & kActorNoCollide)) {
+ actor->_actorFlags |= kActorNoCollide;
+ return actorWalkTo(actorId, actor->_finalTarget);
+ }
}
actor->_currentAction = kActionWait;
@@ -2256,7 +2268,7 @@ void Actor::actorSpeech(uint16 actorId, const char **strings, int stringsCount,
_activeSpeech.actorsCount = 1;
_activeSpeech.actorIds[0] = actorId;
_activeSpeech.speechColor[0] = actor->_speechColor;
- _activeSpeech.outlineColor[0] = (_vm->getGameType() == GType_ITE ? kITEColorBlack : kIHNMColorBlack);
+ _activeSpeech.outlineColor[0] = _vm->KnownColor2ColorId(kKnownColorBlack);
_activeSpeech.sampleResourceId = sampleResourceId;
_activeSpeech.playing = false;
_activeSpeech.slowModeCharIndex = 0;
@@ -2275,6 +2287,22 @@ void Actor::actorSpeech(uint16 actorId, const char **strings, int stringsCount,
_activeSpeech.speechBox.left -= _activeSpeech.speechBox.right - _vm->getDisplayWidth() - 10;
_activeSpeech.speechBox.right = _vm->getDisplayWidth() - 10;
}
+
+ // WORKAROUND for the compact disk in Ellen's chapter
+ // Once Ellen starts saying that "Something is different", bring the compact disk in the
+ // scene. After speaking with AM, the compact disk is visible. She always says this line
+ // when entering room 59, after speaking with AM, if the compact disk is not picked up yet
+ // Check Script::sfDropObject for the other part of this workaround
+ if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 3 &&
+ _vm->_scene->currentSceneNumber() == 59 && _activeSpeech.sampleResourceId == 286) {
+ for (i = 0; i < _objsCount; i++) {
+ if (_objs[i]->_id == 16385) { // the compact disk
+ _objs[i]->_sceneNumber = 59;
+ break;
+ }
+ }
+ }
+
}
void Actor::nonActorSpeech(const Common::Rect &box, const char **strings, int stringsCount, int sampleResourceId, int speechFlags) {
@@ -2719,10 +2747,11 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be
const PathDirectionData *samplePathDirection;
Point nextPoint;
int directionCount;
+ int16 compressX = (_vm->getGameType() == GType_ITE) ? 2 : 1;
_pathDirectionListCount = 0;
pointCounter = 0;
- bestRating = quickDistance(fromPoint, toPoint);
+ bestRating = quickDistance(fromPoint, toPoint, compressX);
bestPath = fromPoint;
for (startDirection = 0; startDirection < 4; startDirection++) {
@@ -2770,7 +2799,7 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be
bestPoint = toPoint;
return pointCounter;
}
- currentRating = quickDistance(nextPoint, toPoint);
+ currentRating = quickDistance(nextPoint, toPoint, compressX);
if (currentRating < bestRating) {
bestRating = currentRating;
bestPath = nextPoint;
@@ -3106,7 +3135,9 @@ void Actor::saveState(Common::OutSaveFile *out) {
void Actor::loadState(Common::InSaveFile *in) {
int32 i;
- setProtagState(in->readSint16LE());
+ int16 protagState = in->readSint16LE();
+ if (protagState != 0)
+ setProtagState(protagState);
for (i = 0; i < _actorsCount; i++) {
ActorData *a = _actors[i];
diff --git a/engines/saga/actor.h b/engines/saga/actor.h
index d4d7a0957d..1557abffb9 100644
--- a/engines/saga/actor.h
+++ b/engines/saga/actor.h
@@ -41,7 +41,7 @@ namespace Saga {
class HitZone;
-//#define ACTOR_DEBUG //only for actor pathfinding debug!
+// #define ACTOR_DEBUG 1 //only for actor pathfinding debug!
#define ACTOR_BARRIERS_MAX 16
@@ -97,7 +97,8 @@ enum ActorActions {
enum SpeechFlags {
kSpeakNoAnimate = 1,
kSpeakAsync = 2,
- kSpeakSlow = 4
+ kSpeakSlow = 4,
+ kSpeakForceText = 8
};
enum ActorFrameTypes {
@@ -303,6 +304,7 @@ public:
//constant
SpriteList _spriteList; // sprite list data
+ bool _shareFrames;
ActorFrameSequence *_frames; // Actor's frames
int _framesCount; // Actor's frames count
int _frameListResourceId; // Actor's frame list resource id
@@ -474,13 +476,18 @@ public:
memset(this, 0, sizeof(*this));
}
~ActorData() {
- free(_frames);
+ if (!_shareFrames)
+ free(_frames);
free(_tileDirections);
free(_walkStepsPoints);
freeSpriteList();
}
};
+struct ProtagStateData {
+ ActorFrameSequence *_frames; // Actor's frames
+ int _framesCount; // Actor's frames count
+};
struct SpeechData {
@@ -528,6 +535,7 @@ public:
int actorIdToIndex(uint16 id) { return (id == ID_PROTAG ) ? 0 : objectIdToIndex(id); }
uint16 actorIndexToId(int index) { return (index == 0 ) ? ID_PROTAG : objectIndexToId(kGameObjectActor, index); }
ActorData *getActor(uint16 actorId);
+ ActorData *getFirstActor() { return _actors[0]; }
// clarification: Obj - means game object, such Hat, Spoon etc, Object - means Actor,Obj,HitZone,StepZone
@@ -586,12 +594,18 @@ public:
return _activeSpeech.stringsCount > 0;
}
+ int isForcedTextShown() {
+ return _activeSpeech.speechFlags & kSpeakForceText;
+ }
+
void saveState(Common::OutSaveFile *out);
void loadState(Common::InSaveFile *in);
void setProtagState(int state);
int getProtagState() { return _protagState; }
+ void freeProtagStates();
+
void freeActorList();
void loadActorList(int protagonistIdx, int actorCount, int actorsResourceID,
int protagStatesCount, int protagStatesResourceID);
@@ -606,7 +620,7 @@ public:
protected:
friend class Script;
bool loadActorResources(ActorData *actor);
-
+ void loadFrameList(int frameListResourceId, ActorFrameSequence *&framesPointer, int &framesCount);
private:
void stepZoneAction(ActorData *actor, const HitZone *hitZone, bool exit, bool stopped);
void loadActorSpriteList(ActorData *actor);
@@ -682,7 +696,7 @@ protected:
bool _dragonHunt;
private:
- ActorFrameSequence *_protagStates;
+ ProtagStateData *_protagStates;
int _protagStatesCount;
//path stuff
diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp
index 3ea6b112f0..59c3339c9b 100644
--- a/engines/saga/animation.cpp
+++ b/engines/saga/animation.cpp
@@ -80,21 +80,54 @@ void Anim::freeCutawayList(void) {
void Anim::playCutaway(int cut, bool fade) {
debug(0, "playCutaway(%d, %d)", cut, fade);
+ bool startImmediately = false;
+
+ _cutAwayFade = fade;
+
+ // Chained cutaway, clean up the previous cutaway
+ if (_cutawayActive) {
+ clearCutaway();
+
+ // This is used because when AM is zapping the child's mother in Benny's chapter,
+ // there is a cutaway followed by a video. The video needs to start immediately after
+ // the cutaway so that it looks like the original
+ startImmediately = true;
+ }
+
+ _vm->_gfx->savePalette();
+
if (fade) {
- // TODO: Fade down. Is this blocking or non-blocking?
+ _vm->_gfx->getCurrentPal(saved_pal);
+ // TODO
+ /*
+ Event event;
+ static PalEntry cur_pal[PAL_ENTRIES];
+
+ _vm->_gfx->getCurrentPal(cur_pal);
+
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventPalToBlack;
+ event.time = 0;
+ event.duration = kNormalFadeDuration;
+ event.data = cur_pal;
+
+ _vm->_events->queue(&event);
+ */
}
- if (!_cutawayActive) {
- _vm->_gfx->showCursor(false);
- _vm->_interface->setStatusText("");
- _vm->_interface->setSaveReminderState(0);
- _vm->_interface->rememberMode();
+ // Prepare cutaway
+ _vm->_gfx->showCursor(false);
+ _vm->_interface->setStatusText("");
+ _vm->_interface->setSaveReminderState(0);
+ _vm->_interface->rememberMode();
+ if (_cutAwayMode == kPanelVideo)
+ _vm->_interface->setMode(kPanelVideo);
+ else
_vm->_interface->setMode(kPanelCutaway);
- _cutawayActive = true;
- }
+ _cutawayActive = true;
// Set the initial background and palette for the cutaway
-
ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
byte *resourceData;
@@ -115,6 +148,8 @@ void Anim::playCutaway(int cut, bool fade) {
const Rect rect(width, height);
bgSurface->blit(rect, buf);
+ _vm->_frameCount++;
+
_vm->_gfx->setPalette(palette);
free(buf);
@@ -140,6 +175,14 @@ void Anim::playCutaway(int cut, bool fade) {
warning("Could not allocate cutaway animation slot");
return;
}
+
+ // Some cutaways in IHNM have animResourceId equal to 0, which means that they only have
+ // a background frame and no animation. Those animations are actually game scripts.
+ // An example is the "nightfall" animation in Ben's chapter (fadein-fadeout), the animation
+ // for the second from the left monitor in Ellen's chapter etc
+ // Therefore, skip the animation bit if animResourceId is 0 and only show the background
+ if (_cutawayList[cut].animResourceId == 0)
+ return;
_vm->_resource->loadResource(context, _cutawayList[cut].animResourceId, resourceData, resourceDataLength);
@@ -149,7 +192,19 @@ void Anim::playCutaway(int cut, bool fade) {
setCycles(MAX_ANIMATIONS + cutawaySlot, _cutawayList[cut].cycles);
setFrameTime(MAX_ANIMATIONS + cutawaySlot, 1000 / _cutawayList[cut].frameRate);
- play(MAX_ANIMATIONS + cutawaySlot, 0);
+
+ if (_cutAwayMode != kPanelVideo || startImmediately)
+ play(MAX_ANIMATIONS + cutawaySlot, 0);
+ else {
+ Event event;
+ event.type = kEvTOneshot;
+ event.code = kAnimEvent;
+ event.op = kEventPlay;
+ event.param = MAX_ANIMATIONS + cutawaySlot;
+ event.time = (40 / 3) * 1000 / _cutawayList[cut].frameRate;
+
+ _vm->_events->queue(&event);
+ }
}
void Anim::endCutaway(void) {
@@ -167,27 +222,82 @@ void Anim::returnFromCutaway(void) {
debug(0, "returnFromCutaway()");
+
if (_cutawayActive) {
- // Note that clearCutaway() sets _cutawayActive to false.
- clearCutaway();
+ Event event;
+ Event *q_event = NULL;
- // TODO: Handle fade up, if we previously faded down
+ if (_cutAwayFade) {
+ static PalEntry cur_pal[PAL_ENTRIES];
- // TODO: Restore the scene
+ _vm->_gfx->getCurrentPal(cur_pal);
- // TODO: Restore the animations
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventPalToBlack;
+ event.time = 0;
+ event.duration = kNormalFadeDuration;
+ event.data = cur_pal;
- for (int i = 0; i < MAX_ANIMATIONS; i++) {
- if (_animations[i] && _animations[i]->state == ANIM_PLAYING) {
- resume(i, 0);
- }
+ q_event = _vm->_events->queue(&event);
}
+
+ // Clear the cutaway. Note that this sets _cutawayActive to false
+ event.type = kEvTImmediate;
+ event.code = kCutawayEvent;
+ event.op = kEventClear;
+ event.time = 0;
+ event.duration = 0;
+
+ if (_cutAwayFade)
+ q_event = _vm->_events->chain(q_event, &event); // chain with the other events
+ else
+ q_event = _vm->_events->queue(&event);
+
+ _vm->_scene->restoreScene();
+
+ // Restore the animations
+ event.type = kEvTImmediate;
+ event.code = kAnimEvent;
+ event.op = kEventResumeAll;
+ event.time = 0;
+ event.duration = 0;
+
+ q_event = _vm->_events->chain(q_event, &event); // chain with the other events
+
+ // Draw the scene
+ event.type = kEvTImmediate;
+ event.code = kSceneEvent;
+ event.op = kEventDraw;
+ event.time = 0;
+ event.duration = 0;
+
+ q_event = _vm->_events->chain(q_event, &event); // chain with the other events
+
+ // Handle fade up, if we previously faded down
+ if (_cutAwayFade) {
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventBlackToPal;
+ event.time = 0;
+ event.duration = kNormalFadeDuration;
+ event.data = saved_pal;
+
+ q_event = _vm->_events->chain(q_event, &event);
+
+ }
+
+ event.type = kEvTOneshot;
+ event.code = kScriptEvent;
+ event.op = kEventThreadWake;
+ event.param = kWaitTypeWakeUp;
+
+ q_event = _vm->_events->chain(q_event, &event);
}
}
void Anim::clearCutaway(void) {
- debug(0, "clearCutaway()");
-
+ debug(1, "clearCutaway()");
if (_cutawayActive) {
_cutawayActive = false;
@@ -201,6 +311,27 @@ void Anim::clearCutaway(void) {
}
}
+void Anim::startVideo(int vid, bool fade) {
+ debug(0, "startVideo(%d, %d)", vid, fade);
+
+ _vm->_interface->setStatusText("");
+ _vm->_frameCount = 0;
+
+ playCutaway(vid, fade);
+}
+
+void Anim::endVideo(void) {
+ debug(0, "endVideo()");
+
+ clearCutaway();
+}
+
+void Anim::returnFromVideo(void) {
+ debug(0, "returnFromVideo()");
+
+ returnFromCutaway();
+}
+
void Anim::load(uint16 animId, const byte *animResourceData, size_t animResourceLength) {
AnimationData *anim;
uint16 temp;
@@ -316,20 +447,23 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
frame = anim->currentFrame;
// FIXME: if start > 0, then this works incorrectly
decodeFrame(anim, anim->frameOffsets[frame], displayBuffer, _vm->getDisplayWidth() * _vm->getDisplayHeight());
-
+ _vm->_frameCount++;
anim->currentFrame++;
if (anim->completed != 65535) {
anim->completed++;
}
if (anim->currentFrame > anim->maxFrame) {
+
anim->currentFrame = anim->loopFrame;
+ _vm->_frameCount++;
if (anim->state == ANIM_STOPPING || anim->currentFrame == -1) {
anim->state = ANIM_PAUSE;
}
}
} else {
+ _vm->_frameCount += 100; // make sure the waiting thread stops waiting
// Animation done playing
anim->state = ANIM_PAUSE;
if (anim->linkId == -1) {
@@ -487,7 +621,7 @@ void Anim::decodeFrame(AnimationData *anim, size_t frameOffset, byte *buf, size_
// Begin RLE decompression to output buffer
- do {
+ do {
markByte = readS.readByte();
switch (markByte) {
case SAGA_FRAME_START:
@@ -718,4 +852,25 @@ void Anim::animInfo() {
}
}
+void Anim::cutawayInfo() {
+ uint16 i;
+
+ _vm->_console->DebugPrintf("There are %d cutaways loaded:\n", _cutawayListLength);
+
+ for (i = 0; i < _cutawayListLength; i++) {
+ _vm->_console->DebugPrintf("%02d: Bg res: %u Anim res: %u Cycles: %u Framerate: %u\n", i,
+ _cutawayList[i].backgroundResourceId, _cutawayList[i].animResourceId,
+ _cutawayList[i].cycles, _cutawayList[i].frameRate);
+ }
+}
+
+void Anim::resumeAll() {
+ // Restore the animations
+ for (int i = 0; i < MAX_ANIMATIONS; i++) {
+ if (_animations[i] && _animations[i]->state == ANIM_PLAYING) {
+ resume(i, 0);
+ }
+ }
+}
+
} // End of namespace Saga
diff --git a/engines/saga/animation.h b/engines/saga/animation.h
index c850fdec83..89a1e77807 100644
--- a/engines/saga/animation.h
+++ b/engines/saga/animation.h
@@ -120,6 +120,10 @@ public:
void returnFromCutaway(void);
void clearCutaway(void);
+ void startVideo(int vid, bool fade);
+ void endVideo(void);
+ void returnFromVideo(void);
+
void load(uint16 animId, const byte *animResourceData, size_t animResourceLength);
void freeId(uint16 animId);
void play(uint16 animId, int vectorTime, bool playing = true);
@@ -129,14 +133,19 @@ public:
void setFrameTime(uint16 animId, int time);
void reset(void);
void animInfo(void);
+ void cutawayInfo(void);
void setCycles(uint16 animId, int cycles);
void stop(uint16 animId);
void finish(uint16 animId);
void resume(uint16 animId, int cycles);
+ void resumeAll();
int16 getCurrentFrame(uint16 animId);
bool hasCutaway(void) {
return _cutawayActive;
}
+ void setCutAwayMode(int mode) {
+ _cutAwayMode = mode;
+ }
bool hasAnimation(uint16 animId) {
if (animId >= MAX_ANIMATIONS) {
if (animId < MAX_ANIMATIONS + ARRAYSIZE(_cutawayAnimations))
@@ -190,8 +199,11 @@ private:
AnimationData *_animations[MAX_ANIMATIONS];
AnimationData *_cutawayAnimations[2];
Cutaway *_cutawayList;
+ PalEntry saved_pal[PAL_ENTRIES];
int _cutawayListLength;
bool _cutawayActive;
+ int _cutAwayMode;
+ bool _cutAwayFade;
};
} // End of namespace Saga
diff --git a/engines/saga/console.cpp b/engines/saga/console.cpp
index 69e73d771b..421245ab30 100644
--- a/engines/saga/console.cpp
+++ b/engines/saga/console.cpp
@@ -38,16 +38,18 @@ namespace Saga {
Console::Console(SagaEngine *vm) : GUI::Debugger() {
_vm = vm;
- DCmd_Register("continue", WRAP_METHOD(Console, Cmd_Exit));
+ DCmd_Register("continue", WRAP_METHOD(Console, Cmd_Exit));
// CVAR_Register_I(&_soundEnabled, "sound", NULL, CVAR_CFG, 0, 1);
// CVAR_Register_I(&_musicEnabled, "music", NULL, CVAR_CFG, 0, 1);
// Actor commands
- DCmd_Register("actor_walk_to", WRAP_METHOD(Console, cmdActorWalkTo));
+ DCmd_Register("actor_walk_to", WRAP_METHOD(Console, cmdActorWalkTo));
// Animation commands
- DCmd_Register("anim_info", WRAP_METHOD(Console, Cmd_AnimInfo));
+ DCmd_Register("anim_info", WRAP_METHOD(Console, cmdAnimInfo));
+ DCmd_Register("cutaway_info", WRAP_METHOD(Console, cmdCutawayInfo));
+ DCmd_Register("play_cutaway", WRAP_METHOD(Console, cmdPlayCutaway));
// Game stuff
@@ -62,9 +64,17 @@ Console::Console(SagaEngine *vm) : GUI::Debugger() {
#endif
// Scene commands
- DCmd_Register("scene_change", WRAP_METHOD(Console, cmdSceneChange));
- DCmd_Register("action_map_info", WRAP_METHOD(Console, cmdActionMapInfo));
- DCmd_Register("object_map_info", WRAP_METHOD(Console, cmdObjectMapInfo));
+ DCmd_Register("current_scene", WRAP_METHOD(Console, cmdCurrentScene));
+ DCmd_Register("current_chapter", WRAP_METHOD(Console, cmdCurrentChapter));
+ DCmd_Register("scene_change", WRAP_METHOD(Console, cmdSceneChange));
+ DCmd_Register("chapter_change", WRAP_METHOD(Console, cmdChapterChange));
+
+ DCmd_Register("action_map_info", WRAP_METHOD(Console, cmdActionMapInfo));
+ DCmd_Register("object_map_info", WRAP_METHOD(Console, cmdObjectMapInfo));
+
+ // Panel commands
+ DCmd_Register("current_panel_mode", WRAP_METHOD(Console, cmdCurrentPanelMode));
+ DCmd_Register("set_panel_mode", WRAP_METHOD(Console, cmdSetPanelMode));
}
Console::~Console() {
@@ -78,12 +88,35 @@ bool Console::cmdActorWalkTo(int argc, const char **argv) {
return true;
}
-
-bool Console::Cmd_AnimInfo(int argc, const char **argv) {
+bool Console::cmdAnimInfo(int argc, const char **argv) {
_vm->_anim->animInfo();
return true;
}
+bool Console::cmdCutawayInfo(int argc, const char **argv) {
+ _vm->_anim->cutawayInfo();
+ return true;
+}
+
+bool Console::cmdPlayCutaway(int argc, const char **argv) {
+ if (argc != 2)
+ DebugPrintf("Usage: %s <Cutaway number>\n", argv[0]);
+ else
+ _vm->_anim->playCutaway(atoi(argv[1]), false);
+ return true;
+}
+
+bool Console::cmdCurrentScene(int argc, const char **argv) {
+ DebugPrintf("Current Scene is: %i, scene resource id: %i\n",
+ _vm->_scene->currentSceneNumber(), _vm->_scene->currentSceneResourceId());
+ return true;
+}
+
+bool Console::cmdCurrentChapter(int argc, const char **argv) {
+ DebugPrintf("Current Chapter is: %i\n", _vm->_scene->currentChapterNumber());
+ return true;
+}
+
bool Console::cmdSceneChange(int argc, const char **argv) {
if (argc != 2)
DebugPrintf("Usage: %s <Scene number>\n", argv[0]);
@@ -92,6 +125,16 @@ bool Console::cmdSceneChange(int argc, const char **argv) {
return true;
}
+bool Console::cmdChapterChange(int argc, const char **argv) {
+ if (argc != 3)
+ DebugPrintf("Usage: %s <Chapter number> <Scene number>\n", argv[0]);
+ else {
+ _vm->_scene->setChapterNumber(atoi(argv[2]));
+ _vm->_scene->cmdSceneChange(argc, argv);
+ }
+ return true;
+}
+
bool Console::cmdActionMapInfo(int argc, const char **argv) {
_vm->_scene->cmdActionMapInfo();
return true;
@@ -102,4 +145,17 @@ bool Console::cmdObjectMapInfo(int argc, const char **argv) {
return true;
}
+bool Console::cmdCurrentPanelMode(int argc, const char **argv) {
+ DebugPrintf("Current Panel Mode is: %i\n", _vm->_interface->getMode());
+ return true;
+}
+
+bool Console::cmdSetPanelMode(int argc, const char **argv) {
+ if (argc != 2)
+ DebugPrintf("Usage: %s <Panel mode number>\n", argv[0]);
+ else
+ _vm->_interface->setMode(atoi(argv[1]));
+ return true;
+}
+
} // End of namespace Saga
diff --git a/engines/saga/console.h b/engines/saga/console.h
index 3a730e0815..3db9833f22 100644
--- a/engines/saga/console.h
+++ b/engines/saga/console.h
@@ -40,12 +40,20 @@ public:
private:
bool cmdActorWalkTo(int argc, const char **argv);
- bool Cmd_AnimInfo(int argc, const char **argv);
+ bool cmdAnimInfo(int argc, const char **argv);
+ bool cmdCutawayInfo(int argc, const char **argv);
+ bool cmdPlayCutaway(int argc, const char **argv);
+ bool cmdCurrentScene(int argc, const char **argv);
+ bool cmdCurrentChapter(int argc, const char **argv);
bool cmdSceneChange(int argc, const char **argv);
+ bool cmdChapterChange(int argc, const char **argv);
+
bool cmdActionMapInfo(int argc, const char **argv);
bool cmdObjectMapInfo(int argc, const char **argv);
+ bool cmdCurrentPanelMode(int argc, const char **argv);
+ bool cmdSetPanelMode(int argc, const char **argv);
private:
SagaEngine *_vm;
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index 60d8a59d3b..9b9a0ca872 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -124,7 +124,9 @@ REGISTER_PLUGIN(SAGA, "SAGA Engine", "Inherit the Earth (C) Wyrmkeep Entertainme
namespace Saga {
bool SagaEngine::initGame() {
- _gameDescription = (const SAGAGameDescription *)Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ _gameDescription = (const SAGAGameDescription *)(encapsulatedDesc.realDesc);
+
if (_gameDescription == 0)
return false;
diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index dc531f5798..631a1a4e83 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -31,8 +31,10 @@ static const GameResourceDescription ITE_Resources = {
RID_ITE_MAIN_PANEL,
RID_ITE_CONVERSE_PANEL,
RID_ITE_OPTION_PANEL,
+ 0, // Warning panel (IHNM only)
RID_ITE_MAIN_SPRITES,
RID_ITE_MAIN_PANEL_SPRITES,
+ 0, // Option panel sprites (IHNM only)
RID_ITE_DEFAULT_PORTRAITS,
RID_ITE_MAIN_STRINGS,
RID_ITE_ACTOR_NAMES
@@ -44,8 +46,10 @@ static const GameResourceDescription ITEDemo_Resources = {
RID_ITEDEMO_MAIN_PANEL,
RID_ITEDEMO_CONVERSE_PANEL,
RID_ITEDEMO_OPTION_PANEL,
+ 0, // Warning panel (IHNM only)
RID_ITEDEMO_MAIN_SPRITES,
RID_ITEDEMO_MAIN_PANEL_SPRITES,
+ 0, // Option panel sprites (IHNM only)
RID_ITEDEMO_DEFAULT_PORTRAITS,
RID_ITEDEMO_MAIN_STRINGS,
RID_ITEDEMO_ACTOR_NAMES
@@ -287,11 +291,13 @@ static const GameResourceDescription IHNM_Resources = {
RID_IHNM_MAIN_PANEL,
RID_IHNM_CONVERSE_PANEL,
RID_IHNM_OPTION_PANEL,
+ RID_IHNM_WARNING_PANEL,
RID_IHNM_MAIN_SPRITES,
RID_IHNM_MAIN_PANEL_SPRITES,
- 0,
+ RID_IHNM_OPTION_PANEL_SPRITES,
+ 0, // Default portraits (ITE only)
RID_IHNM_MAIN_STRINGS,
- 0
+ 0 // Actors strings (ITE only)
};
static const GameFontDescription IHNMDEMO_GameFonts[] = {
diff --git a/engines/saga/displayinfo.h b/engines/saga/displayinfo.h
index ac691c0549..83bc536959 100644
--- a/engines/saga/displayinfo.h
+++ b/engines/saga/displayinfo.h
@@ -279,9 +279,9 @@ static const GameDisplayInfo ITE_DisplayInfo = {
//TODO: ihnm
-#define IHNM_CONVERSE_MAX_TEXT_WIDTH (256 - 60)
+#define IHNM_CONVERSE_MAX_TEXT_WIDTH (485 - 8)
#define IHNM_CONVERSE_TEXT_HEIGHT 10
-#define IHNM_CONVERSE_TEXT_LINES 10
+#define IHNM_CONVERSE_TEXT_LINES 11
static PanelButton IHNM_MainPanelButtons[] = {
{kPanelButtonVerb, 106,12, 114,30, kVerbIHNMWalk,'w',0, 0,1,0},
@@ -292,8 +292,8 @@ static PanelButton IHNM_MainPanelButtons[] = {
{kPanelButtonVerb, 223,44, 114,30, kVerbIHNMSwallow,'s',0, 10,11,0},
{kPanelButtonVerb, 223,76, 114,30, kVerbIHNMGive,'g',0, 12,13,0},
{kPanelButtonVerb, 223,108, 114,30, kVerbIHNMPush,'p',0, 14,15,0},
- {kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 0,0,0}, //TODO: arrow Sprite Numbers
- {kPanelButtonArrow, 606,108, 20,25, 1,']',0, 0,0,0},
+ {kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 2,3,4}, // TODO: IHNM needs more states hre
+ {kPanelButtonArrow, 606,108, 20,25, 1,']',0, 6,7,8},
{kPanelButtonInventory, 357 + 64*0,18, 54,54, 0,'-',0, 0,0,0},
{kPanelButtonInventory, 357 + 64*1,18, 54,54, 1,'-',0, 0,0,0},
@@ -307,50 +307,60 @@ static PanelButton IHNM_MainPanelButtons[] = {
};
static PanelButton IHNM_ConversePanelButtons[] = {
- {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 0, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 0,'1',0, 0,0,0},
- {kPanelButtonConverseText, 52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 1, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 1,'2',0, 0,0,0},
- {kPanelButtonConverseText, 52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 2, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 2,'3',0, 0,0,0},
- {kPanelButtonConverseText, 52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 3, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 3,'4',0, 0,0,0},
- //.....
- {kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 0,0,0}, //TODO: arrow Sprite Numbers
- {kPanelButtonArrow, 606,108, 20,25, 1,']',0, 0,0,0}
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 0, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 0,'1',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 1, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 1,'2',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 2, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 2,'3',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 3, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 3,'4',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 4, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 4,'5',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 5, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 5,'6',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 6, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 6,'7',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 7, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 7,'8',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 8, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 8,'9',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 9, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 9,'10',0, 0,0,0},
+ {kPanelButtonConverseText, 117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 10, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT, 10,'11',0, 0,0,0},
+ {kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 2,3,4}, // TODO: IHNM needs more states hre
+ {kPanelButtonArrow, 606,108, 20,25, 1,']',0, 6,7,8},
};
static PanelButton IHNM_OptionPanelButtons[] = {
- //TODO: Add the rest of the buttons
+ {kPanelButtonOptionSlider, 421,16, 16,138, 0,'-',0, 0,0,0}, //slider-scroller
{kPanelButtonOptionText,28,36, 0,0, kTextReadingSpeed,'-',0, 0,0,0}, // text: read speed
{kPanelButtonOptionText,60,61, 0,0, kTextMusic,'-',0, 0,0,0}, // text: music
{kPanelButtonOptionText,60,86, 0,0, kTextSound,'-',0, 0,0,0}, // text: noise
- // TODO: Add Voices text here
- {kPanelButtonOption, 154,30, 79,23, kTextReadingSpeed,'r',0, 0,0,0}, //read speed
- {kPanelButtonOption, 154,55, 79,23, kTextMusic,'m',0, 0,0,0}, //music
- {kPanelButtonOption, 154,80, 79,23, kTextSound,'n',0, 0,0,0}, //sound-noise
- // TODO: Add Voices widget here
+ {kPanelButtonOptionText,56,111, 0,0, kTextVoices,'-',0, 0,0,0}, // text: voices
+ {kPanelButtonOption, 153,29, 79,23, kTextReadingSpeed,'r',0, 0,0,0}, //read speed
+ {kPanelButtonOption, 153,54, 79,23, kTextMusic,'m',0, 0,0,0}, //music
+ {kPanelButtonOption, 153,79, 79,23, kTextSound,'n',0, 0,0,0}, //sound-noise
+ {kPanelButtonOption, 153,104,79,23, kTextVoices,'v',0, 0,0,0}, //voices
{kPanelButtonOption, 19,149, 200,25, kTextQuitGame,'q',0, 0,0,0}, //quit
{kPanelButtonOption, 19,177, 200,25, kTextContinuePlaying,'c',0, 0,0,0}, //continue
- // TODO: Implement load/save
- {kPanelButtonOption, 244,164, 79,23, kTextLoad,'l',0, 0,0,0}, //load
- {kPanelButtonOption, 335,164, 79,23, kTextSave,'s',0, 0,0,0}, //save
+ {kPanelButtonOptionSaveFiles, 244,18, 170,138, 0,'-',0, 0,0,0}, //savefiles
+ {kPanelButtonOption, 242,162, 79,23, kTextLoad,'l',0, 0,0,0}, //load
+ {kPanelButtonOption, 333,162, 79,23, kTextSave,'s',0, 0,0,0}, //save
};
static PanelButton IHNM_QuitPanelButtons[] = {
- //FIXME: Show the correct quit dialog background
- //TODO: Those coordinates might not be pixel perfect, check with the original interpreter
- {kPanelButtonQuit, 25,80, 80,25, kTextQuit,'q',0, 0,0,0},
- {kPanelButtonQuit, 155,80, 80,25, kTextCancel,'c',0, 0,0,0},
- {kPanelButtonQuitText, -1,5, 0,0, kTextQuitTheGameQuestion,'-',0, 0,0,0},
+ {kPanelButtonQuit, 25,79, 80,25, kTextQuit,'q',0, 0,0,0},
+ {kPanelButtonQuit, 155,79, 80,25, kTextCancel,'c',0, 0,0,0},
+ {kPanelButtonQuitText, 75,30, 0,0, kTextQuitTheGameQuestion,'-',0, 0,0,0},
};
static PanelButton IHNM_LoadPanelButtons[] = {
- {kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+ // TODO
+ {kPanelButtonLoad, 101,19, 60,16, kTextOK,'o',0, 0,0,0},
+ {kPanelButtonLoadText, -1,5, 0,0, kTextLoadSuccessful,'-',0, 0,0,0},
};
static PanelButton IHNM_SavePanelButtons[] = {
- {kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+ // TODO
+ {kPanelButtonSave, 25,79, 80,25, kTextSave,'s',0, 0,0,0},
+ {kPanelButtonSave, 155,79, 80,25, kTextCancel,'c',0, 0,0,0},
+ {kPanelButtonSaveEdit, 26,57, 209,17, 0,'-',0, 0,0,0},
+ {kPanelButtonSaveText, 75,30, 0,0, kTextEnterSaveGameName,'-',0, 0,0,0},
};
-static const GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
+static const GameDisplayInfo IHNM_DisplayInfo = {
640, 480, // logical width&height
0, // scene path y offset
@@ -370,41 +380,40 @@ static const GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
11, 12, // left portrait x, y offset
-1, -1, // right portrait x, y offset
- -1, -1, // inventory Up & Down button indexies
+ 8, 9, // inventory Up & Down button indexies
2, 4, // inventory rows, columns
0, 328, // main panel offsets
ARRAYSIZE(IHNM_MainPanelButtons),
IHNM_MainPanelButtons,
- -1, -1, // converse Up & Down button indexies
-
IHNM_CONVERSE_MAX_TEXT_WIDTH,
IHNM_CONVERSE_TEXT_HEIGHT,
IHNM_CONVERSE_TEXT_LINES,
+ 11, 12, // converse Up & Down button indexies
0, 328, // converse panel offsets
ARRAYSIZE(IHNM_ConversePanelButtons),
IHNM_ConversePanelButtons,
- -1, -1, // save file index
- 0, // optionSaveFileVisible
+ 11, 0, // save file index
+ 15, // optionSaveFileVisible
92, 46, // option panel offsets
ARRAYSIZE(IHNM_OptionPanelButtons),
IHNM_OptionPanelButtons,
- 190,180, // quit panel offsets
+ 190,94, // quit panel offsets
260,115, // quit panel width & height
ARRAYSIZE(IHNM_QuitPanelButtons),
IHNM_QuitPanelButtons,
- 0, 0, // load panel offsets
- 0, 0, // load panel width & height
+ 190, 94, // load panel offsets
+ 260, 115, // load panel width & height
ARRAYSIZE(IHNM_LoadPanelButtons),
IHNM_LoadPanelButtons,
- -1, // save edit index
- 0, 0, // save panel offsets
- 0, 0, // save panel width & height
+ 2, // save edit index
+ 190, 94, // save panel offsets
+ 260, 115, // save panel width & height
ARRAYSIZE(IHNM_SavePanelButtons),
IHNM_SavePanelButtons,
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index 0c5830c583..191ea4ed61 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -247,10 +247,14 @@ int Events::handleImmediate(Event *event) {
case kScriptEvent:
case kBgEvent:
case kInterfaceEvent:
+ case kSceneEvent:
+ case kAnimEvent:
+ case kCutawayEvent:
handleOneShot(event);
event_done = true;
break;
default:
+ warning("Unhandled Immediate event type (%d)", event->code & EVENT_MASK);
break;
}
@@ -356,12 +360,28 @@ int Events::handleOneShot(Event *event) {
case kEventClearFlag:
_vm->_anim->clearFlag(event->param, event->param2);
break;
+ case kEventResumeAll:
+ _vm->_anim->resumeAll();
+ break;
default:
break;
}
break;
case kSceneEvent:
switch (event->op) {
+ case kEventDraw:
+ {
+ Surface *backGroundSurface;
+ BGInfo bgInfo;
+
+ backBuffer = _vm->_gfx->getBackBuffer();
+ backGroundSurface = _vm->_render->getBackGroundSurface();
+ _vm->_scene->getBGInfo(bgInfo);
+ backGroundSurface->blit(bgInfo.bounds, bgInfo.buffer);
+
+ _vm->_scene->draw();
+ }
+ break;
case kEventEnd:
_vm->_scene->nextScene();
return kEvStBreak;
@@ -469,6 +489,14 @@ int Events::handleOneShot(Event *event) {
default:
break;
}
+ case kCutawayEvent:
+ switch (event->op) {
+ case kEventClear:
+ _vm->_anim->clearCutaway();
+ break;
+ default:
+ break;
+ }
default:
break;
}
diff --git a/engines/saga/events.h b/engines/saga/events.h
index dbd2382a27..d0af1fe916 100644
--- a/engines/saga/events.h
+++ b/engines/saga/events.h
@@ -59,7 +59,8 @@ enum EventCodes {
kActorEvent,
kScriptEvent,
kCursorEvent,
- kGraphicsEvent
+ kGraphicsEvent,
+ kCutawayEvent
};
enum EventOps {
@@ -72,10 +73,12 @@ enum EventOps {
kEventFrame = 3,
kEventSetFlag = 4,
kEventClearFlag = 5,
+ kEventResumeAll = 6,
// MUISC & SOUND events
kEventPlay = 1,
kEventStop = 2,
// SCENE events
+ kEventDraw = 1,
kEventEnd = 2,
// TEXT events
kEventHide = 2,
@@ -111,7 +114,9 @@ enum EventOps {
kEventBlackToPal = 2,
// TRANSITION events
kEventDissolve = 1,
- kEventDissolveBGMask = 2
+ kEventDissolveBGMask = 2,
+ // CUTAWAY events
+ kEventClear = 1
};
enum EventParams {
diff --git a/engines/saga/gfx.h b/engines/saga/gfx.h
index 4751589330..8658e6d992 100644
--- a/engines/saga/gfx.h
+++ b/engines/saga/gfx.h
@@ -146,6 +146,8 @@ public:
void setPalette(const PalEntry *pal, bool full = false);
void setPaletteColor(int n, int r, int g, int b);
void getCurrentPal(PalEntry *src_pal);
+ void savePalette() { getCurrentPal(_savedPalette); }
+ void restorePalette() { setPalette(_savedPalette, true); }
void palToBlack(PalEntry *src_pal, double percent);
void blackToPal(PalEntry *src_pal, double percent);
void showCursor(bool state);
@@ -159,6 +161,7 @@ private:
SagaEngine *_vm;
PalEntry _globalPalette[PAL_ENTRIES];
+ PalEntry _savedPalette[PAL_ENTRIES];
};
} // End of namespace Saga
diff --git a/engines/saga/ihnm_introproc.cpp b/engines/saga/ihnm_introproc.cpp
index 69ffa2620e..e122082322 100644
--- a/engines/saga/ihnm_introproc.cpp
+++ b/engines/saga/ihnm_introproc.cpp
@@ -97,6 +97,7 @@ int Scene::IHNMStartProc() {
// The original used the "play video" mechanism for the first part of
// the intro. We just use that panel mode.
+ _vm->_anim->setCutAwayMode(kPanelVideo);
_vm->_interface->setMode(kPanelVideo);
n_introscenes = ARRAYSIZE(IHNM_IntroList);
@@ -312,9 +313,7 @@ int Scene::IHNMIntroMovieProc3(int param) {
q_event = _vm->_events->chain(q_event, &event);
// Queue end of scene after a while
- // TODO: I've increased the delay so the speech won't start
- // until the music has ended. Could someone verify if that's
- // the correct behaviour?
+ // The delay has been increased so the speech won't start until the music has ended
event.type = kEvTOneshot;
event.code = kSceneEvent;
event.op = kEventEnd;
diff --git a/engines/saga/input.cpp b/engines/saga/input.cpp
index 64bb222efb..358a225efa 100644
--- a/engines/saga/input.cpp
+++ b/engines/saga/input.cpp
@@ -45,7 +45,7 @@ int SagaEngine::processInput() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
if (event.kbd.flags == Common::KBD_CTRL) {
- if (event.kbd.keycode == 'd')
+ if (event.kbd.keycode == Common::KEYCODE_d)
_console->attach();
}
if (_interface->_textInput || _interface->_statusTextInput) {
@@ -54,64 +54,64 @@ int SagaEngine::processInput() {
}
switch (event.kbd.keycode) {
- case '#':
- case '`':
- case '~':
+ case Common::KEYCODE_HASH:
+ case Common::KEYCODE_BACKQUOTE:
+ case Common::KEYCODE_QUOTE: // tilde ("~")
_console->attach();
break;
- case 'r':
+ case Common::KEYCODE_r:
_interface->draw();
break;
#if 0
- case 269:
- case 270:
- case 273:
- case 274:
- case 275:
- case 276:
+ case Common::KEYCODE_KP_MINUS:
+ case Common::KEYCODE_KP_PLUS:
+ case Common::KEYCODE_UP:
+ case Common::KEYCODE_DOWN:
+ case Common::KEYCODE_RIGHT:
+ case Common::KEYCODE_LEFT:
if (_vm->_scene->getFlags() & kSceneFlagISO) {
- _vm->_isoMap->_viewDiff += (event.kbd.keycode == 270) - (event.kbd.keycode == 269);
- _vm->_isoMap->_viewScroll.y += (_vm->_isoMap->_viewDiff * (event.kbd.keycode == 274) - _vm->_isoMap->_viewDiff * (event.kbd.keycode == 273));
- _vm->_isoMap->_viewScroll.x += (_vm->_isoMap->_viewDiff * (event.kbd.keycode == 275) - _vm->_isoMap->_viewDiff * (event.kbd.keycode == 276));
+ _vm->_isoMap->_viewDiff += (event.kbd.keycode == Common::KEYCODE_KP_PLUS) - (event.kbd.keycode == Common::KEYCODE_KP_MINUS);
+ _vm->_isoMap->_viewScroll.y += (_vm->_isoMap->_viewDiff * (event.kbd.keycode == Common::KEYCODE_DOWN) - _vm->_isoMap->_viewDiff * (event.kbd.keycode == Common::KEYCODE_UP));
+ _vm->_isoMap->_viewScroll.x += (_vm->_isoMap->_viewDiff * (event.kbd.keycode == Common::KEYCODE_RIGHT) - _vm->_isoMap->_viewDiff * (event.kbd.keycode == Common::KEYCODE_LEFT));
}
break;
#endif
- case 282: // F1
+ case Common::KEYCODE_F1:
_render->toggleFlag(RF_SHOW_FPS);
_actor->_handleActionDiv = (_actor->_handleActionDiv == 15) ? 50 : 15;
break;
- case 283: // F2
+ case Common::KEYCODE_F2:
_render->toggleFlag(RF_PALETTE_TEST);
break;
- case 284: // F3
+ case Common::KEYCODE_F3:
_render->toggleFlag(RF_TEXT_TEST);
break;
- case 285: // F4
+ case Common::KEYCODE_F4:
_render->toggleFlag(RF_OBJECTMAP_TEST);
break;
- case 286: // F5
+ case Common::KEYCODE_F5:
if (_interface->getSaveReminderState() > 0)
_interface->setMode(kPanelOption);
break;
- case 287: // F6
+ case Common::KEYCODE_F6:
_render->toggleFlag(RF_ACTOR_PATH_TEST);
break;
- case 288: // F7
+ case Common::KEYCODE_F7:
//_actor->frameTest();
break;
- case 289: // F8
+ case Common::KEYCODE_F8:
break;
- case 290: // F9
+ case Common::KEYCODE_F9:
_interface->keyBoss();
break;
// Actual game keys
- case 32: // space
+ case Common::KEYCODE_SPACE:
_actor->abortSpeech();
break;
- case 19: // pause
- case 'z':
+ case Common::KEYCODE_PAUSE:
+ case Common::KEYCODE_z:
_render->toggleFlag(RF_RENDERPAUSE);
break;
default:
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index f9f22161ec..03fc0beb7a 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -80,6 +80,69 @@ static int verbTypeToTextStringsIdLUT[2][kVerbTypeIdsMax] = {
kVerbIHNMPush}
};
+// This maps the internally used string ITE IDs to the LUT strings loaded in IHNM
+// i.e. id 12 (quit game button) maps to string 14 (Quit game)
+// The comments are what the actual IHNM string is
+// For the text string IDs, refer to saga.h, enum TextStringIds
+static int IHNMTextStringIdsLUT[56] = {
+ -1, // (Empty)
+ -1, // (Empty)
+ 4, // Take
+ 6, // Talk to
+ -1,
+ -1,
+ 5, // Use
+ 8, // Give
+ 10, // Options
+ 11, // Test
+ 12, //
+ 13, // Help
+ 14, // Quit Game
+ 16, // Fast
+ 18, // Slow
+ 20, // On
+ 21, // Off
+ 15, // Continue Playing
+ 22, // Load
+ 23, // Save
+ 24, // Game Options
+ 25, // Reading Speed
+ 26, // Music
+ 27, // Sound
+ 32, // Cancel
+ 33, // Quit
+ 34, // OK
+ 17, // Mid
+ 19, // Click
+ 36, // 10%
+ 37, // 20%
+ 38, // 30%
+ 39, // 40%
+ 40, // 50%
+ 41, // 60%
+ 42, // 70%
+ 43, // 80%
+ 44, // 90%
+ 45, // Max
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 28, // Voices
+ 29, // Text
+ 30, // Audio
+ 31 // Both
+};
+
Interface::Interface(SagaEngine *vm) : _vm(vm) {
byte *resource;
size_t resourceLength;
@@ -91,6 +154,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
error("Interface::Interface() resource context not found");
}
+ // Main panel
_mainPanel.buttons = _vm->getDisplayInfo().mainPanelButtons;
_mainPanel.buttonsCount = _vm->getDisplayInfo().mainPanelButtonsCount;
@@ -110,6 +174,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
free(resource);
+ // Converse panel
_conversePanel.buttons = _vm->getDisplayInfo().conversePanelButtons;
_conversePanel.buttonsCount = _vm->getDisplayInfo().conversePanelButtonsCount;
@@ -118,6 +183,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
&_conversePanel.imageLength, &_conversePanel.imageWidth, &_conversePanel.imageHeight);
free(resource);
+ // Option panel
_optionPanel.buttons = _vm->getDisplayInfo().optionPanelButtons;
_optionPanel.buttonsCount = _vm->getDisplayInfo().optionPanelButtonsCount;
@@ -126,7 +192,43 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
&_optionPanel.imageLength, &_optionPanel.imageWidth, &_optionPanel.imageHeight);
free(resource);
+ // Quit panel
+ if (_vm->getGameType() == GType_IHNM) {
+ _quitPanel.buttons = _vm->getDisplayInfo().quitPanelButtons;
+ _quitPanel.buttonsCount = _vm->getDisplayInfo().quitPanelButtonsCount;
+
+ _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->warningPanelResourceId, resource, resourceLength);
+ _vm->decodeBGImage(resource, resourceLength, &_quitPanel.image,
+ &_quitPanel.imageLength, &_quitPanel.imageWidth, &_quitPanel.imageHeight);
+ free(resource);
+ }
+
+ // Save panel
+ if (_vm->getGameType() == GType_IHNM) {
+ _savePanel.buttons = _vm->getDisplayInfo().savePanelButtons;
+ _savePanel.buttonsCount = _vm->getDisplayInfo().savePanelButtonsCount;
+
+ _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->warningPanelResourceId, resource, resourceLength);
+ _vm->decodeBGImage(resource, resourceLength, &_savePanel.image,
+ &_savePanel.imageLength, &_savePanel.imageWidth, &_savePanel.imageHeight);
+ free(resource);
+ }
+
+ // Load panel
+ if (_vm->getGameType() == GType_IHNM) {
+ _loadPanel.buttons = _vm->getDisplayInfo().loadPanelButtons;
+ _loadPanel.buttonsCount = _vm->getDisplayInfo().loadPanelButtonsCount;
+
+ _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->warningPanelResourceId, resource, resourceLength);
+ _vm->decodeBGImage(resource, resourceLength, &_loadPanel.image,
+ &_loadPanel.imageLength, &_loadPanel.imageWidth, &_loadPanel.imageHeight);
+ free(resource);
+ }
+
+ // Main panel sprites
_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites);
+ // Option panel sprites
+ _vm->_sprite->loadList(_vm->getResourceDescription()->optionPanelSpritesResourceId, _optionPanel.sprites);
if (_vm->getGameType() == GType_ITE) {
_vm->_sprite->loadList(_vm->getResourceDescription()->defaultPortraitsResourceId, _defPortraits);
@@ -235,7 +337,7 @@ int Interface::activate() {
_vm->_script->_skipSpeeches = false;
_vm->_actor->_protagonist->_targetObject = ID_NOTHING;
unlockMode();
- if (_panelMode == kPanelMain){
+ if (_panelMode == kPanelMain || _panelMode == kPanelChapterSelection){
_saveReminderState = 1;
}
draw();
@@ -260,15 +362,20 @@ void Interface::rememberMode() {
assert (_savedMode == -1);
_savedMode = _panelMode;
+
+ debug(1, "rememberMode(%d)", _savedMode);
}
-void Interface::restoreMode() {
+void Interface::restoreMode(bool draw_) {
assert (_savedMode != -1);
+ debug(1, "restoreMode(%d)", _savedMode);
+
_panelMode = _savedMode;
_savedMode = -1;
- draw();
+ if (draw_)
+ draw();
}
void Interface::setMode(int mode) {
@@ -277,6 +384,8 @@ void Interface::setMode(int mode) {
if (mode == kPanelMain) {
_inMainMode = true;
_saveReminderState = 1; //TODO: blinking timeout
+ } else if (mode == kPanelChapterSelection) {
+ _saveReminderState = 1;
} else {
if (mode == kPanelConverse) {
_inMainMode = false;
@@ -495,6 +604,14 @@ bool Interface::processAscii(uint16 ascii) {
case '4':
converseSetPos(ascii);
break;
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (_vm->getGameType() == GType_IHNM)
+ converseSetPos(ascii);
+ break;
}
break;
case kPanelMap:
@@ -534,13 +651,14 @@ bool Interface::processAscii(uint16 ascii) {
}
void Interface::setStatusText(const char *text, int statusColor) {
- assert(text != NULL);
- assert(strlen(text) < STATUS_TEXT_LEN);
// Disable the status text in IHNM when the chapter is 8
if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 8)
return;
+ assert(text != NULL);
+ assert(strlen(text) < STATUS_TEXT_LEN);
+
if (_vm->_render->getFlags() & (RF_PLACARD | RF_MAP))
return;
@@ -654,7 +772,6 @@ void Interface::draw() {
void Interface::calcOptionSaveSlider() {
int totalFiles = _vm->getSaveFilesCount();
int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible;
- if (_optionSaveFileSlider == NULL) return; //TODO:REMOVE
int height = _optionSaveFileSlider->height;
int sliderHeight;
int pos;
@@ -692,6 +809,8 @@ void Interface::drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *p
int textWidth;
Rect rect;
Point textPoint;
+ KnownColor textShadowKnownColor = kKnownColorVerbTextShadow;
+ KnownFont textFont = kKnownFontMedium;
// Button differs for CD version
if (panelButton->id == kTextReadingSpeed && _vm->getFeatures() & GF_CD_FX)
@@ -699,7 +818,23 @@ void Interface::drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *p
if (panelButton->id == kTextShowDialog && !(_vm->getFeatures() & GF_CD_FX))
return;
- text = _vm->getTextString(panelButton->id);
+ if (_vm->getGameType() == GType_ITE) {
+ text = _vm->getTextString(panelButton->id);
+ textFont = kKnownFontMedium;
+ textShadowKnownColor = kKnownColorVerbTextShadow;
+ } else {
+ if (panelButton->id < 39 || panelButton->id > 50) {
+ // Read non-hardcoded strings from the LUT string table, loaded from the game
+ // data files
+ text = _vm->_script->_mainStrings.getString(IHNMTextStringIdsLUT[panelButton->id]);
+ } else {
+ // Hardcoded strings in IHNM are read from the ITE hardcoded strings
+ text = _vm->getTextString(panelButton->id);
+ }
+ textFont = kKnownFontVerb;
+ textShadowKnownColor = kKnownColorTransparent;
+ }
+
panel->calcPanelButtonRect(panelButton, rect);
if (panelButton->xOffset < 0) {
if (_vm->getGameType() == GType_ITE)
@@ -712,10 +847,7 @@ void Interface::drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *p
textPoint.x = rect.left;
textPoint.y = rect.top + 1;
- if (_vm->getGameType() == GType_ITE)
- _vm->_font->textDraw(kKnownFontMedium, ds, text, textPoint, _vm->KnownColor2ColorId(kKnownColorVerbText), _vm->KnownColor2ColorId(kKnownColorVerbTextShadow), kFontShadow);
- else
- _vm->_font->textDraw(kKnownFontVerb, ds, text, textPoint, _vm->KnownColor2ColorId(kKnownColorVerbText), _vm->KnownColor2ColorId(kKnownColorVerbTextShadow), kFontShadow);
+ _vm->_font->textDraw(textFont, ds, text, textPoint, _vm->KnownColor2ColorId(kKnownColorVerbText), _vm->KnownColor2ColorId(textShadowKnownColor), kFontShadow);
}
void Interface::drawOption() {
@@ -731,7 +863,8 @@ void Interface::drawOption() {
PanelButton *panelButton;
Point textPoint;
Point point;
-
+ int spritenum = 0;
+
backBuffer = _vm->_gfx->getBackBuffer();
_optionPanel.getRect(rect);
@@ -740,16 +873,13 @@ void Interface::drawOption() {
for (i = 0; i < _optionPanel.buttonsCount; i++) {
panelButton = &_optionPanel.buttons[i];
- // TODO: This probably works for the button background, but the resources are still not loeaded
- // (_optionPanel.sprites)
- /*
- point.x = _optionPanel.x + panelButton->xOffset;
- point.y = _optionPanel.y + panelButton->yOffset;
- _vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _optionPanel.sprites, i, point, 256);
- */
-
if (panelButton->type == kPanelButtonOption) {
- drawPanelButtonText(backBuffer, &_optionPanel, panelButton);
+ if (_vm->getGameType() == GType_ITE) {
+ drawPanelButtonText(backBuffer, &_optionPanel, panelButton);
+ } else {
+ drawPanelButtonText(backBuffer, &_optionPanel, panelButton, spritenum);
+ spritenum += 2; // 2 sprites per button (lit and unlit)
+ }
}
if (panelButton->type == kPanelButtonOptionText) {
drawPanelText(backBuffer, &_optionPanel, panelButton);
@@ -757,17 +887,10 @@ void Interface::drawOption() {
}
if (_optionSaveRectTop.height() > 0) {
- if (_vm->getGameType() == GType_ITE) {
+ if (_vm->getGameType() == GType_ITE)
backBuffer->drawRect(_optionSaveRectTop, kITEColorDarkGrey);
- } else {
- // TODO: Draw the button graphic properly for IHNM
- }
}
- // FIXME: The _optionSaveFileSlider checks exist for IHNM, where
- // _optionSaveFileSlider is not initialized correctly yet
- if (_optionSaveFileSlider == NULL) return; //TODO:REMOVE
-
drawButtonBox(backBuffer, _optionSaveRectSlider, kSlider, _optionSaveFileSlider->state > 0);
if (_optionSaveRectBottom.height() > 0) {
@@ -793,7 +916,10 @@ void Interface::drawOption() {
text = _vm->getSaveFile(idx)->name;
textPoint.x = rect.left + 1;
textPoint.y = rect2.top;
- _vm->_font->textDraw(kKnownFontSmall, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_font->textDraw(kKnownFontSmall, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
+ else
+ _vm->_font->textDraw(kKnownFontVerb, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
}
}
@@ -808,7 +934,11 @@ void Interface::drawQuit() {
backBuffer = _vm->_gfx->getBackBuffer();
_quitPanel.getRect(rect);
- drawButtonBox(backBuffer, rect, kButton, false);
+ if (_vm->getGameType() == GType_ITE)
+ drawButtonBox(backBuffer, rect, kButton, false);
+ else
+ backBuffer->blit(rect, _quitPanel.image);
+
for (i = 0; i < _quitPanel.buttonsCount; i++) {
panelButton = &_quitPanel.buttons[i];
if (panelButton->type == kPanelButtonQuit) {
@@ -868,7 +998,11 @@ void Interface::drawLoad() {
backBuffer = _vm->_gfx->getBackBuffer();
_loadPanel.getRect(rect);
- drawButtonBox(backBuffer, rect, kButton, false);
+ if (_vm->getGameType() == GType_ITE)
+ drawButtonBox(backBuffer, rect, kButton, false);
+ else
+ backBuffer->blit(rect, _loadPanel.image);
+
for (i = 0; i < _loadPanel.buttonsCount; i++) {
panelButton = &_loadPanel.buttons[i];
if (panelButton->type == kPanelButtonLoad) {
@@ -1068,7 +1202,11 @@ void Interface::drawSave() {
backBuffer = _vm->_gfx->getBackBuffer();
_savePanel.getRect(rect);
- drawButtonBox(backBuffer, rect, kButton, false);
+ if (_vm->getGameType() == GType_ITE)
+ drawButtonBox(backBuffer, rect, kButton, false);
+ else
+ backBuffer->blit(rect, _savePanel.image);
+
for (i = 0; i < _savePanel.buttonsCount; i++) {
panelButton = &_savePanel.buttons[i];
if (panelButton->type == kPanelButtonSave) {
@@ -1181,7 +1319,6 @@ void Interface::handleOptionUpdate(const Point& mousePoint) {
bool releasedButton;
if (_vm->mouseButtonPressed()) {
- if (_optionSaveFileSlider != NULL) //TODO:REMOVE
if (_optionSaveFileSlider->state > 0) {
_optionPanel.calcPanelButtonRect(_optionSaveFileSlider, rect);
@@ -1288,6 +1425,10 @@ void Interface::handleChapterSelectionClick(const Point& mousePoint) {
switch (objectTypeId(obj)) {
case kGameObjectHitZone:
hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(obj));
+
+ if (hitZone == NULL)
+ return;
+
if (hitZone->getFlags() & kHitZoneExit)
script = hitZone->getScriptNumber();
break;
@@ -1326,7 +1467,10 @@ void Interface::setOption(PanelButton *panelButton) {
switch (panelButton->id) {
case kTextContinuePlaying:
ConfMan.flushToDisk();
- setMode(kPanelMain);
+ if (!(_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 8))
+ setMode(kPanelMain);
+ else
+ setMode(kPanelChapterSelection);
break;
case kTextQuitGame:
setMode(kPanelQuit);
@@ -1367,6 +1511,21 @@ void Interface::setOption(PanelButton *panelButton) {
_vm->_sound->setVolume(_vm->_soundVolume == 10 ? 255 : _vm->_soundVolume * 25);
ConfMan.setInt("sfx_volume", _vm->_soundVolume * 25);
break;
+ case kTextVoices:
+ if (_vm->_subtitlesEnabled && _vm->_voicesEnabled) { // Both
+ _vm->_subtitlesEnabled = false; // Set it to "Audio"
+ _vm->_voicesEnabled = true; // Not necessary, just for completeness
+ } else if (!_vm->_subtitlesEnabled && _vm->_voicesEnabled) {
+ _vm->_subtitlesEnabled = true; // Set it to "Text"
+ _vm->_voicesEnabled = false;
+ } else if (_vm->_subtitlesEnabled && !_vm->_voicesEnabled) {
+ _vm->_subtitlesEnabled = true; // Set it to "Both"
+ _vm->_voicesEnabled = true;
+ }
+
+ ConfMan.setBool("subtitles", _vm->_subtitlesEnabled);
+ ConfMan.setBool("voices", _vm->_voicesEnabled);
+ break;
}
}
@@ -1500,12 +1659,21 @@ void Interface::update(const Point& mousePoint, int updateFlag) {
break;
case kPanelChapterSelection:
- // TODO: panel has silent button
if (updateFlag & UPDATE_MOUSEMOVE) {
handleChapterSelectionUpdate(mousePoint);
} else {
- if (updateFlag & UPDATE_MOUSECLICK)
- handleChapterSelectionClick(mousePoint);
+ if (updateFlag & UPDATE_MOUSECLICK) {
+ Rect rect;
+ rect.left = _vm->getDisplayInfo().saveReminderXOffset;
+ rect.top = _vm->getDisplayInfo().saveReminderYOffset;
+
+ rect.right = rect.left + _vm->getDisplayInfo().saveReminderWidth;
+ rect.bottom = rect.top + _vm->getDisplayInfo().saveReminderHeight;
+ if (rect.contains(mousePoint))
+ setMode(kPanelOption);
+ else
+ handleChapterSelectionClick(mousePoint);
+ }
}
break;
@@ -1548,7 +1716,10 @@ void Interface::drawStatusBar() {
textPoint.x = _vm->getDisplayInfo().statusXOffset + (_vm->getDisplayInfo().statusWidth - stringWidth) / 2;
textPoint.y = _vm->getDisplayInfo().statusYOffset + _vm->getDisplayInfo().statusTextY;
- _vm->_font->textDraw(kKnownFontSmall, backBuffer, _statusText, textPoint, color, 0, kFontNormal);
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_font->textDraw(kKnownFontSmall, backBuffer, _statusText, textPoint, color, 0, kFontNormal);
+ else
+ _vm->_font->textDraw(kKnownFontVerb, backBuffer, _statusText, textPoint, color, 0, kFontNormal);
if (_saveReminderState > 0) {
rect.left = _vm->getDisplayInfo().saveReminderXOffset;
@@ -1762,8 +1933,10 @@ void Interface::drawInventory(Surface *backBuffer) {
}
_mainPanel.calcPanelButtonRect(&_mainPanel.buttons[i], rect);
- // TODO: Different colour for IHNM, probably.
- backBuffer->drawRect(rect, kITEColorDarkGrey);
+ if (_vm->getGameType() == GType_ITE)
+ backBuffer->drawRect(rect, kITEColorDarkGrey);
+ else
+ backBuffer->drawRect(rect, kIHNMColorBlack);
if (ci < _inventoryCount) {
obj = _vm->_actor->getObj(_inventory[ci]);
@@ -1794,7 +1967,7 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo
switch (kind ) {
case kSlider:
cornerColor = 0x8b;
- frameColor = kITEColorBlack;
+ frameColor = _vm->KnownColor2ColorId(kKnownColorBlack);
fillColor = kITEColorLightBlue96;
odl = kITEColorDarkBlue8a;
our = kITEColorLightBlue92;
@@ -1818,7 +1991,7 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo
break;
default:
cornerColor = 0x8b;
- frameColor = kITEColorBlack;
+ frameColor = (_vm->getGameType() == GType_ITE) ? kITEColorBlack : kIHNMColorBlack;
solidColor = fillColor = kITEColorLightBlue96;
odl = kITEColorDarkBlue8a;
our = kITEColorLightBlue94;
@@ -1880,14 +2053,18 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo
static const int readingSpeeds[] = { kTextClick, kTextSlow, kTextMid, kTextFast };
-void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) {
+void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton, int spritenum) {
const char *text;
int textId;
int textWidth;
int textHeight;
Point point;
+ Point texturePoint;
KnownColor textColor;
Rect rect;
+ int litButton = 0;
+ KnownColor textShadowKnownColor = kKnownColorVerbTextShadow;
+ KnownFont textFont = kKnownFontMedium;
textId = panelButton->id;
switch (panelButton->id) {
@@ -1913,13 +2090,33 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut
else
textId = kTextOff;
break;
+ case kTextVoices:
+ if (_vm->_subtitlesEnabled && _vm->_voicesEnabled)
+ textId = kTextBoth;
+ else if (_vm->_subtitlesEnabled && !_vm->_voicesEnabled)
+ textId = kTextText;
+ else if (!_vm->_subtitlesEnabled && _vm->_voicesEnabled)
+ textId = kTextAudio;
+ break;
}
- text = _vm->getTextString(textId);
-
if (_vm->getGameType() == GType_ITE) {
+ text = _vm->getTextString(textId);
+ textFont = kKnownFontMedium;
+ textShadowKnownColor = kKnownColorVerbTextShadow;
textWidth = _vm->_font->getStringWidth(kKnownFontMedium, text, 0, kFontNormal);
textHeight = _vm->_font->getHeight(kKnownFontMedium);
} else {
+ if (textId < 39 || textId > 50) {
+ // Read non-hardcoded strings from the LUT string table, loaded from the game
+ // data files
+ text = _vm->_script->_mainStrings.getString(IHNMTextStringIdsLUT[textId]);
+ } else {
+ // Hardcoded strings in IHNM are read from the ITE hardcoded strings
+ text = _vm->getTextString(textId);
+ }
+
+ textFont = kKnownFontVerb;
+ textShadowKnownColor = kKnownColorTransparent;
textWidth = _vm->_font->getStringWidth(kKnownFontVerb, text, 0, kFontNormal);
textHeight = _vm->_font->getHeight(kKnownFontVerb);
}
@@ -1934,14 +2131,35 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut
}
panel->calcPanelButtonRect(panelButton, rect);
- drawButtonBox(ds, rect, kButton, panelButton->state > 0);
+ if (_vm->getGameType() == GType_ITE) {
+ drawButtonBox(ds, rect, kButton, panelButton->state > 0);
+ } else {
+ litButton = panelButton->state > 0;
+
+ if (panel == &_optionPanel) {
+ texturePoint.x = _optionPanel.x + panelButton->xOffset;
+ texturePoint.y = _optionPanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, spritenum + 2 + litButton, texturePoint, 256);
+ } else if (panel == &_quitPanel) {
+ texturePoint.x = _quitPanel.x + panelButton->xOffset;
+ texturePoint.y = _quitPanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
+ } else if (panel == &_savePanel) {
+ texturePoint.x = _savePanel.x + panelButton->xOffset;
+ texturePoint.y = _savePanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
+ } else if (panel == &_loadPanel) {
+ texturePoint.x = _loadPanel.x + panelButton->xOffset;
+ texturePoint.y = _loadPanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
+ } else {
+ // revert to default behavior
+ drawButtonBox(ds, rect, kButton, panelButton->state > 0);
+ }
+ }
- if (_vm->getGameType() == GType_ITE)
- _vm->_font->textDraw(kKnownFontMedium, ds, text, point,
- _vm->KnownColor2ColorId(textColor), _vm->KnownColor2ColorId(kKnownColorVerbTextShadow), kFontShadow);
- else
- _vm->_font->textDraw(kKnownFontVerb, ds, text, point,
- _vm->KnownColor2ColorId(textColor), _vm->KnownColor2ColorId(kKnownColorVerbTextShadow), kFontShadow);
+ _vm->_font->textDraw(textFont, ds, text, point,
+ _vm->KnownColor2ColorId(textColor), _vm->KnownColor2ColorId(textShadowKnownColor), kFontShadow);
}
void Interface::drawPanelButtonArrow(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) {
@@ -1961,7 +2179,10 @@ void Interface::drawPanelButtonArrow(Surface *ds, InterfacePanel *panel, PanelBu
point.x = panel->x + panelButton->xOffset;
point.y = panel->y + panelButton->yOffset;
- _vm->_sprite->draw(ds, _vm->getDisplayClip(), _vm->_sprite->_mainSprites, spriteNumber, point, 256);
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _vm->_sprite->_mainSprites, spriteNumber, point, 256);
+ else
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _vm->_sprite->_arrowSprites, spriteNumber, point, 256);
}
void Interface::drawVerbPanelText(Surface *ds, PanelButton *panelButton, KnownColor textKnownColor, KnownColor textShadowKnownColor) {
@@ -2019,7 +2240,7 @@ void Interface::converseClear(void) {
_conversePos = -1;
}
-bool Interface::converseAddText(const char *text, int replyId, byte replyFlags, int replyBit) {
+bool Interface::converseAddText(const char *text, int strId, int replyId, byte replyFlags, int replyBit) {
int count = 0; // count how many pieces of text per string
int i;
int len;
@@ -2034,9 +2255,13 @@ bool Interface::converseAddText(const char *text, int replyId, byte replyFlags,
for (i = len; i >= 0; i--) {
c = _converseWorkString[i];
-
- if ((c == ' ' || c == '\0') && (_vm->_font->getStringWidth(kKnownFontSmall, _converseWorkString, i, kFontNormal) <= _vm->getDisplayInfo().converseMaxTextWidth)) {
- break;
+
+ if (_vm->getGameType() == GType_ITE) {
+ if ((c == ' ' || c == '\0') && (_vm->_font->getStringWidth(kKnownFontSmall, _converseWorkString, i, kFontNormal) <= _vm->getDisplayInfo().converseMaxTextWidth))
+ break;
+ } else {
+ if ((c == ' ' || c == '\0') && (_vm->_font->getStringWidth(kKnownFontVerb, _converseWorkString, i, kFontNormal) <= _vm->getDisplayInfo().converseMaxTextWidth))
+ break;
}
}
if (i < 0) {
@@ -2050,6 +2275,7 @@ bool Interface::converseAddText(const char *text, int replyId, byte replyFlags,
_converseText[_converseTextCount].text = (char *)malloc(i + 1);
strncpy(_converseText[_converseTextCount].text, _converseWorkString, i);
+ _converseText[_converseTextCount].strId = strId;
_converseText[_converseTextCount].text[i] = 0;
_converseText[_converseTextCount].textNum = count;
_converseText[_converseTextCount].stringNum = _converseStrCount;
@@ -2111,13 +2337,22 @@ void Interface::converseDisplayTextLines(Surface *ds) {
assert(_conversePanel.buttonsCount >= 6);
- bulletForegnd = kITEColorGreen;
- bulletBackgnd = kITEColorBlack;
+ if (_vm->getGameType() == GType_ITE) {
+ bulletForegnd = kITEColorGreen;
+ bulletBackgnd = kITEColorBlack;
+ } else {
+ bulletForegnd = kITEColorBrightWhite;
+ bulletBackgnd = kIHNMColorBlack;
+ bullet[0] = '>'; // different bullet in IHNM
+ }
rect.moveTo(_conversePanel.x + _conversePanel.buttons[0].xOffset,
_conversePanel.y + _conversePanel.buttons[0].yOffset);
- ds->drawRect(rect, kITEColorDarkGrey); //fill bullet place
+ if (_vm->getGameType() == GType_ITE)
+ ds->drawRect(rect, kITEColorDarkGrey); //fill bullet place
+ else
+ ds->drawRect(rect, kIHNMColorBlack); //fill bullet place
for (int i = 0; i < _vm->getDisplayInfo().converseTextLines; i++) {
relPos = _converseStartPos + i;
@@ -2127,11 +2362,21 @@ void Interface::converseDisplayTextLines(Surface *ds) {
}
if (_conversePos >= 0 && _converseText[_conversePos].stringNum == _converseText[relPos].stringNum) {
- foregnd = kITEColorBrightWhite;
- backgnd = (!_vm->leftMouseButtonPressed()) ? kITEColorDarkGrey : kITEColorGrey;
+ if (_vm->getGameType() == GType_ITE) {
+ foregnd = kITEColorBrightWhite;
+ backgnd = (!_vm->leftMouseButtonPressed()) ? kITEColorDarkGrey : kITEColorGrey;
+ } else {
+ foregnd = kIHNMColorRed;
+ backgnd = (!_vm->leftMouseButtonPressed()) ? kIHNMColorRed : kIHNMColorRed;
+ }
} else {
- foregnd = kITEColorBlue;
- backgnd = kITEColorDarkGrey;
+ if (_vm->getGameType() == GType_ITE) {
+ foregnd = kITEColorBlue;
+ backgnd = kITEColorDarkGrey;
+ } else {
+ foregnd = kITEColorBrightWhite;
+ backgnd = kIHNMColorBlack;
+ }
}
_conversePanel.calcPanelButtonRect(&_conversePanel.buttons[i], rect);
@@ -2144,11 +2389,17 @@ void Interface::converseDisplayTextLines(Surface *ds) {
textPoint.x = rect.left - 6;
textPoint.y = rect.top;
- _vm->_font->textDraw(kKnownFontSmall, ds, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap));
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_font->textDraw(kKnownFontSmall, ds, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap));
+ else
+ _vm->_font->textDraw(kKnownFontVerb, ds, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap));
}
textPoint.x = rect.left + 1;
textPoint.y = rect.top;
- _vm->_font->textDraw(kKnownFontSmall, ds, str, textPoint, foregnd, kITEColorBlack, kFontShadow);
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_font->textDraw(kKnownFontSmall, ds, str, textPoint, foregnd, kITEColorBlack, kFontShadow);
+ else
+ _vm->_font->textDraw(kKnownFontVerb, ds, str, textPoint, foregnd, kIHNMColorBlack, kFontShadow);
}
if (_converseStartPos != 0) {
@@ -2179,7 +2430,7 @@ void Interface::converseSetPos(int key) {
ct = &_converseText[_conversePos];
- _vm->_script->finishDialog(ct->replyId, ct->replyFlags, ct->replyBit);
+ _vm->_script->finishDialog(ct->strId, ct->replyId, ct->replyFlags, ct->replyBit);
if (_vm->_puzzle->isActive())
_vm->_puzzle->handleReply(ct->replyId);
diff --git a/engines/saga/interface.h b/engines/saga/interface.h
index b537d49424..7ae225219a 100644
--- a/engines/saga/interface.h
+++ b/engines/saga/interface.h
@@ -157,6 +157,7 @@ struct InterfacePanel {
struct Converse {
char *text;
+ int strId;
int stringNum;
int textNum;
int replyId;
@@ -196,7 +197,7 @@ public:
return _fadeMode;
}
void rememberMode();
- void restoreMode();
+ void restoreMode(bool draw_ = true);
bool isInMainMode() { return _inMainMode; }
void setStatusText(const char *text, int statusColor = -1);
void loadScenePortraits(int resourceId);
@@ -329,7 +330,7 @@ private:
void drawTextInput(Surface *ds, InterfacePanel *panel, PanelButton *panelButton);
void drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton);
- void drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton);
+ void drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton, int spritenum = 0);
enum ButtonKind {
kButton,
kSlider,
@@ -346,7 +347,7 @@ private:
public:
void converseInit(void);
void converseClear(void);
- bool converseAddText(const char *text, int replyId, byte replyFlags, int replyBit);
+ bool converseAddText(const char *text, int strId, int replyId, byte replyFlags, int replyBit);
void converseDisplayText();
void converseSetTextLines(int row);
void converseChangePos(int chg);
diff --git a/engines/saga/itedata.h b/engines/saga/itedata.h
index dc36e0e89b..d9bd59adc4 100644
--- a/engines/saga/itedata.h
+++ b/engines/saga/itedata.h
@@ -31,12 +31,14 @@
namespace Saga {
enum ActorFlags {
- kProtagonist = 0x01, // Actor is protagonist
- kFollower = 0x02, // Actor is follower
- kCycle = 0x04, // Actor stand has a cycle
- kFaster = 0x08, // Actor is fast
- kFastest = 0x10, // Actor is faster
- kExtended = 0x20 // Actor uses extended sprites
+ kProtagonist = 0x01, // (1<<0) Actor is protagonist
+ kFollower = 0x02, // (1<<1) Actor is follower
+ kCycle = 0x04, // (1<<2) Actor stand has a cycle
+ kFaster = 0x08, // (1<<3) Actor is fast
+ kFastest = 0x10, // (1<<4) Actor is faster
+ kExtended = 0x20, // (1<<5) Actor uses extended sprites
+ kUsable = 0x40, // (1<<6) Actor can be used
+ kNoScale = 0x80 // (1<<7) Actor is not scaled
};
// TODO: This doesn't quite correspond to the original Actor struct, so I'm not
diff --git a/engines/saga/objectmap.cpp b/engines/saga/objectmap.cpp
index fd9e7197b7..52f2e89be7 100644
--- a/engines/saga/objectmap.cpp
+++ b/engines/saga/objectmap.cpp
@@ -146,6 +146,8 @@ void HitZone::draw(SagaEngine *vm, Surface *ds, int color) {
Location location;
HitZone::ClickArea *clickArea;
Point *points;
+ Point specialPoint1;
+ Point specialPoint2;
for (i = 0; i < _clickAreasCount; i++) {
clickArea = &_clickAreas[i];
pointsCount = clickArea->pointsCount;
@@ -175,6 +177,14 @@ void HitZone::draw(SagaEngine *vm, Surface *ds, int color) {
}
}
+ if (getSpecialPoint(specialPoint1)) {
+ specialPoint2 = specialPoint1;
+ specialPoint1.x--;
+ specialPoint1.y--;
+ specialPoint2.x++;
+ specialPoint2.y++;
+ ds->drawFrame(specialPoint1, specialPoint2, color);
+ }
}
diff --git a/engines/saga/objectmap.h b/engines/saga/objectmap.h
index e65edb9ccf..c3b50c7497 100644
--- a/engines/saga/objectmap.h
+++ b/engines/saga/objectmap.h
@@ -110,7 +110,7 @@ public:
int hitTest(const Point& testPoint);
HitZone *getHitZone(int16 index) {
if ((index < 0) || (index >= _hitZoneListCount)) {
- error("ObjectMap::getHitZone wrong index 0x%X", index);
+ return NULL;
}
return _hitZoneList[index];
}
diff --git a/engines/saga/puzzle.cpp b/engines/saga/puzzle.cpp
index c2bfec4ebd..6ac7b64fb7 100644
--- a/engines/saga/puzzle.cpp
+++ b/engines/saga/puzzle.cpp
@@ -439,9 +439,9 @@ void Puzzle::solicitHint(void) {
_vm->_timer->installTimerProc(&hintTimerCallback, 50000, this);
_vm->_interface->converseClear();
- _vm->_interface->converseAddText(optionsStr[_lang][kROAccept], 1, 0, 0 );
- _vm->_interface->converseAddText(optionsStr[_lang][kRODecline], 2, 0, 0 );
- _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0 );
+ _vm->_interface->converseAddText(optionsStr[_lang][kROAccept], 0, 1, 0, 0 );
+ _vm->_interface->converseAddText(optionsStr[_lang][kRODecline], 0, 2, 0, 0 );
+ _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0, 0 );
_vm->_interface->converseDisplayText();
break;
@@ -458,9 +458,9 @@ void Puzzle::solicitHint(void) {
case kRQSakkaDenies:
_vm->_interface->converseClear();
- _vm->_interface->converseAddText(optionsStr[_lang][kROAccept], 1, 0, 0);
- _vm->_interface->converseAddText(optionsStr[_lang][kRODecline], 2, 0, 0);
- _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0);
+ _vm->_interface->converseAddText(optionsStr[_lang][kROAccept], 0, 1, 0, 0);
+ _vm->_interface->converseAddText(optionsStr[_lang][kRODecline], 0, 2, 0, 0);
+ _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0, 0);
_vm->_interface->converseDisplayText();
_vm->_timer->installTimerProc(&hintTimerCallback, kPuzzleHintTime, this);
@@ -546,7 +546,7 @@ void Puzzle::giveHint(void) {
_hintRqState = kRQNoHint;
- _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0);
+ _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0, 0);
_vm->_interface->converseDisplayText();
_vm->_timer->removeTimerProc(&hintTimerCallback);
@@ -555,7 +555,7 @@ void Puzzle::giveHint(void) {
void Puzzle::clearHint(void) {
_vm->_interface->converseClear();
- _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0);
+ _vm->_interface->converseAddText(optionsStr[_lang][kROLater], 0, 0, 0, 0);
_vm->_interface->converseDisplayText();
_vm->_interface->setStatusText(" ");
}
diff --git a/engines/saga/saga.cpp b/engines/saga/saga.cpp
index 3ce0e08d9c..99462c5583 100644
--- a/engines/saga/saga.cpp
+++ b/engines/saga/saga.cpp
@@ -87,6 +87,7 @@ SagaEngine::SagaEngine(OSystem *syst)
_frameCount = 0;
_globalFlags = 0;
+ _mouseClickCount = 0;
memset(_ethicsPoints, 0, sizeof(_ethicsPoints));
// The Linux version of Inherit the Earth puts all data files in an
@@ -220,6 +221,17 @@ int SagaEngine::init() {
_gfx->initPalette();
+ if (getGameType() == GType_IHNM) {
+ if (!ConfMan.hasKey("voices")) {
+ _voicesEnabled = true;
+ ConfMan.setBool("voices", true);
+ } else {
+ _voicesEnabled = ConfMan.getBool("voices");
+ }
+ } else {
+ _voicesEnabled = true;
+ }
+
// FIXME: This is the ugly way of reducing redraw overhead. It works
// well for 320x200 but it's unclear how well it will work for
// 640x480.
@@ -277,8 +289,8 @@ int SagaEngine::go() {
msec = MAX_TIME_DELTA;
}
- // Since Puzzle is actorless, we do it here
- if (_puzzle->isActive()) {
+ // Since Puzzle and forced text are actorless, we do them here
+ if (_puzzle->isActive() || _actor->isForcedTextShown()) {
_actor->handleSpeech(msec);
} else if (!_scene->isInIntro()) {
if (_interface->getMode() == kPanelMain ||
@@ -341,6 +353,11 @@ const char *SagaEngine::getObjectName(uint16 objectId) {
ActorData *actor;
ObjectData *obj;
const HitZone *hitZone;
+
+ // Disable the object names in IHNM when the chapter is 8
+ if (getGameType() == GType_IHNM && _scene->currentChapterNumber() == 8)
+ return "";
+
switch (objectTypeId(objectId)) {
case kGameObjectObject:
obj = _actor->getObj(objectId);
@@ -352,6 +369,10 @@ const char *SagaEngine::getObjectName(uint16 objectId) {
return _actor->_actorsStrings.getString(actor->_nameIndex);
case kGameObjectHitZone:
hitZone = _scene->_objectMap->getHitZone(objectIdToIndex(objectId));
+
+ if (hitZone == NULL)
+ return "";
+
return _scene->_sceneStrings.getString(hitZone->getNameIndex());
}
warning("SagaEngine::getObjectName name not found for 0x%X", objectId);
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 1a8da5533a..9532d2fd56 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -279,18 +279,23 @@ enum TextStringIds {
kTextNoOpening,
kTextDontKnow,
kTextShowDialog,
- kTextEnterProtectAnswer
+ kTextEnterProtectAnswer,
+ kTextVoices,
+ kTextText,
+ kTextAudio,
+ kTextBoth
};
-
struct GameResourceDescription {
uint32 sceneLUTResourceId;
uint32 moduleLUTResourceId;
uint32 mainPanelResourceId;
uint32 conversePanelResourceId;
uint32 optionPanelResourceId;
+ uint32 warningPanelResourceId;
uint32 mainSpritesResourceId;
uint32 mainPanelSpritesResourceId;
+ uint32 optionPanelSpritesResourceId;
uint32 defaultPortraitsResourceId;
uint32 mainStringsResourceId;
uint32 actorsStringsResourceId;
@@ -422,7 +427,9 @@ enum ColorId {
kITEColorGreen = 0xba,
kIHNMColorBlack = 0xfa,
- kIHNMColorPortrait = 0xfe
+ kIHNMColorPortrait = 0xfe,
+ kIHNMColorWhite = 0x20,
+ kIHNMColorRed = 0x11
};
enum KnownColor {
@@ -515,6 +522,7 @@ public:
int _soundVolume;
int _musicVolume;
bool _subtitlesEnabled;
+ bool _voicesEnabled;
int _readingSpeed;
bool _copyProtection;
@@ -559,6 +567,18 @@ public:
int processInput(void);
Point mousePos() const;
+ int getMouseClickCount() {
+ return _mouseClickCount;
+ }
+
+ void incrementMouseClickCount() {
+ _mouseClickCount++;
+ }
+
+ void resetMouseClickCount() {
+ _mouseClickCount = 0;
+ }
+
const bool leftMouseButtonPressed() const {
return _leftMouseButtonPressed;
}
@@ -580,6 +600,7 @@ public:
bool _leftMouseButtonPressed;
bool _rightMouseButtonPressed;
+ int _mouseClickCount;
bool _quit;
diff --git a/engines/saga/sagaresnames.h b/engines/saga/sagaresnames.h
index 6527510910..94f97635c1 100644
--- a/engines/saga/sagaresnames.h
+++ b/engines/saga/sagaresnames.h
@@ -104,6 +104,7 @@ namespace Saga {
#define RID_IHNM_ARROW_SPRITES 13
#define RID_IHNM_SAVEREMINDER_SPRITES 14
#define RID_IHNM_OPTION_PANEL 15
+#define RID_IHNM_OPTION_PANEL_SPRITES 16
#define RID_IHNM_WARNING_PANEL 17
#define RID_IHNM_BOSS_SCREEN 19
#define RID_IHNM_PROFILE_BG 20
diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp
index cf493a7c84..c93ace81b3 100644
--- a/engines/saga/saveload.cpp
+++ b/engines/saga/saveload.cpp
@@ -191,6 +191,13 @@ void SagaEngine::save(const char *fileName, const char *saveName) {
// Surrounding scene
out->writeSint32LE(_scene->getOutsetSceneNumber());
+ if (getGameType() != GType_ITE) {
+ out->writeSint32LE(_scene->currentChapterNumber());
+ // Protagonist
+ out->writeSint32LE(_scene->currentProtag());
+ out->writeSint32LE(_scene->getCurrentMusicTrack());
+ out->writeSint32LE(_scene->getCurrentMusicRepeat());
+ }
// Inset scene
out->writeSint32LE(_scene->currentSceneNumber());
@@ -259,6 +266,18 @@ void SagaEngine::load(const char *fileName) {
// Surrounding scene
sceneNumber = in->readSint32LE();
+ // Protagonist
+ if (getGameType() != GType_ITE) {
+ int currentChapter = _scene->currentChapterNumber();
+ _scene->setChapterNumber(in->readSint32LE());
+ _scene->setProtag(in->readSint32LE());
+ if (_scene->currentChapterNumber() != currentChapter)
+ _scene->changeScene(-2, 0, kTransitionFade, _scene->currentChapterNumber());
+ _scene->setCurrentMusicTrack(in->readSint32LE());
+ _scene->setCurrentMusicRepeat(in->readSint32LE());
+ _music->stop();
+ _music->play(_music->_songTable[_scene->getCurrentMusicTrack()], _scene->getCurrentMusicRepeat() ? MUSIC_LOOP : MUSIC_NORMAL);
+ }
// Inset scene
insetSceneNumber = in->readSint32LE();
@@ -287,6 +306,25 @@ void SagaEngine::load(const char *fileName) {
_isoMap->setMapPosition(mapx, mapy);
+ // Protagonist swapping
+ if (getGameType() != GType_ITE) {
+ if (_scene->currentProtag() != 0 && _scene->currentChapterNumber() != 6) {
+ ActorData *actor1 = _actor->getFirstActor();
+ // Original stores the current protagonist ID from sfSwapActors:
+ //ActorData *actor2 = _actor->getActor(_scene->currentProtag());
+ // However, we already store the protagonist, so merely getting the saved
+ // protagonist is easier and safer, and works without glitches
+ ActorData *actor2 = _actor->_protagonist;
+
+ SWAP(actor1->_location, actor2->_location);
+
+ actor2->_flags &= ~kProtagonist;
+ actor1->_flags |= kProtagonist;
+ _actor->_protagonist = _actor->_centerActor = actor1;
+ _scene->setProtag(actor1->_id);
+ }
+ }
+
_scene->clearSceneQueue();
_scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp
index 9b7e7fb331..84d1b45114 100644
--- a/engines/saga/scene.cpp
+++ b/engines/saga/scene.cpp
@@ -477,6 +477,7 @@ void Scene::changeScene(int16 sceneNumber, int actorsEntrance, SceneTransitionTy
if (sceneNumber != -2) {
endScene();
}
+
loadScene(&sceneParams);
}
@@ -567,6 +568,8 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.time = 0;
_vm->_events->queue(&event);
+ _chapterPointsChanged = false;
+
if ((_vm->getGameType() == GType_IHNM) && (loadSceneParams->chapter != NO_CHAPTER_CHANGE)) {
if (loadSceneParams->loadFlag != kLoadBySceneNumber) {
error("loadScene wrong usage");
@@ -1209,6 +1212,26 @@ void Scene::endScene() {
}
+void Scene::restoreScene() {
+ // There is no implementation for tiled scenes, since this function is only used
+ // in IHNM, which has no tiled scenes
+
+ Event event;
+
+ _vm->_gfx->showCursor(false);
+ _vm->_gfx->restorePalette();
+
+ event.type = kEvTImmediate;
+ event.code = kBgEvent;
+ event.op = kEventDisplay;
+ event.param = kEvPNoSetPalette;
+ event.time = 0;
+ event.duration = 0;
+ _vm->_events->queue(&event);
+
+ _vm->_gfx->showCursor(true);
+}
+
void Scene::cmdSceneChange(int argc, const char **argv) {
int scene_num = 0;
diff --git a/engines/saga/scene.h b/engines/saga/scene.h
index 5b19e5d654..5fa4569949 100644
--- a/engines/saga/scene.h
+++ b/engines/saga/scene.h
@@ -224,6 +224,7 @@ class Scene {
void nextScene();
void skipScene();
void endScene();
+ void restoreScene();
void queueScene(LoadSceneParams *sceneQueue) {
_sceneQueue.push_back(*sceneQueue);
}
@@ -309,11 +310,20 @@ class Scene {
#endif
return _sceneLUT[sceneNumber];
}
+ int currentProtag() const { return _currentProtag; }
+ void setProtag(int pr) { _currentProtag = pr; }
int currentSceneNumber() const { return _sceneNumber; }
int currentChapterNumber() const { return _chapterNumber; }
void setChapterNumber(int ch) { _chapterNumber = ch; }
int getOutsetSceneNumber() const { return _outsetSceneNumber; }
int currentSceneResourceId() const { return _sceneResourceId; }
+ int getCurrentMusicTrack() const { return _currentMusicTrack; }
+ void setCurrentMusicTrack(int tr) { _currentMusicTrack = tr; }
+ int getCurrentMusicRepeat() const { return _currentMusicRepeat; }
+ void setCurrentMusicRepeat(int rp) { _currentMusicRepeat = rp; }
+ bool haveChapterPointsChanged() const { return _chapterPointsChanged; }
+ void setChapterPointsChanged(bool cp) { _chapterPointsChanged = cp; }
+
void cutawaySkip() {
if (_vm->_scene->isInIntro())
_vm->_framesEsc = 2;
@@ -324,7 +334,7 @@ class Scene {
void drawTextList(Surface *ds);
int getHeight() const {
- if (_vm->_interface->getMode() == kPanelChapterSelection)
+ if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 8)
return _vm->getDisplayInfo().logicalHeight;
else
return _vm->getDisplayInfo().sceneHeight;
@@ -346,10 +356,14 @@ class Scene {
int _sceneCount;
SceneQueueList _sceneQueue;
bool _sceneLoaded;
+ int _currentProtag;
int _sceneNumber;
int _chapterNumber;
int _outsetSceneNumber;
int _sceneResourceId;
+ int _currentMusicTrack;
+ int _currentMusicRepeat;
+ bool _chapterPointsChanged;
bool _inGame;
bool _loadDescription;
SceneDescription _sceneDescription;
diff --git a/engines/saga/script.cpp b/engines/saga/script.cpp
index 2df5c4da14..262d63c51f 100644
--- a/engines/saga/script.cpp
+++ b/engines/saga/script.cpp
@@ -456,6 +456,9 @@ void Script::doVerb() {
} else {
scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
}
+ // IHNM never sets scriptModuleNumber to 0
+ if (_vm->getGameType() == GType_IHNM)
+ scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
} else {
if (_pendingVerb == getVerbType(kVerbUse)) {
if ((objectTypeId(_pendingObject[1]) > kGameObjectNone) && (objectType < objectTypeId(_pendingObject[1]))) {
@@ -464,9 +467,15 @@ void Script::doVerb() {
}
}
- if (objectType == kGameObjectHitZone) {
+ if (objectType == 0)
+ return;
+ else if (objectType == kGameObjectHitZone) {
scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[0]));
+
+ if (hitZone == NULL)
+ return;
+
if ((hitZone->getFlags() & kHitZoneExit) == 0) {
scriptEntrypointNumber = hitZone->getScriptNumber();
}
@@ -479,27 +488,27 @@ void Script::doVerb() {
} else {
scriptModuleNumber = 0;
}
+ // IHNM never sets scriptModuleNumber to 0
+ if (_vm->getGameType() == GType_IHNM)
+ scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
}
}
}
if (scriptEntrypointNumber > 0) {
- // WORKAROUND: Fixes bug #1690045 "ITE: Item description missing / ScummVM crash"
- if (!(_vm->_scene->currentSceneNumber() == 278 && (_pendingObject[0] == 16419 || _pendingObject[1] == 16419) && _vm->getGameType() == GType_ITE)) {
- event.type = kEvTOneshot;
- event.code = kScriptEvent;
- event.op = kEventExecNonBlocking;
- event.time = 0;
- event.param = scriptModuleNumber;
- event.param2 = scriptEntrypointNumber;
- event.param3 = _pendingVerb; // Action
- event.param4 = _pendingObject[0]; // Object
- event.param5 = _pendingObject[1]; // With Object
- event.param6 = (objectType == kGameObjectActor) ? _pendingObject[0] : ID_PROTAG; // Actor
-
- _vm->_events->queue(&event);
- }
+ event.type = kEvTOneshot;
+ event.code = kScriptEvent;
+ event.op = kEventExecNonBlocking;
+ event.time = 0;
+ event.param = scriptModuleNumber;
+ event.param2 = scriptEntrypointNumber;
+ event.param3 = _pendingVerb; // Action
+ event.param4 = _pendingObject[0]; // Object
+ event.param5 = _pendingObject[1]; // With Object
+ event.param6 = (objectType == kGameObjectActor) ? _pendingObject[0] : ID_PROTAG; // Actor
+
+ _vm->_events->queue(&event);
} else {
_vm->getExcuseInfo(_pendingVerb, excuseText, excuseSampleResourceId);
@@ -589,6 +598,7 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
const HitZone *hitZone;
Point specialPoint;
+ _vm->incrementMouseClickCount();
_vm->_actor->abortSpeech();
if ((_vm->_actor->_protagonist->_currentAction != kActionWait) &&
@@ -629,10 +639,19 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
}
if (hitZone != NULL) {
- if (hitZone->getFlags() & kHitZoneNoWalk) {
- _vm->_actor->actorFaceTowardsPoint(ID_PROTAG, pickLocation);
- doVerb();
- return;
+ if (_vm->getGameType() == GType_ITE) {
+ if (hitZone->getFlags() & kHitZoneNoWalk) {
+ _vm->_actor->actorFaceTowardsPoint(ID_PROTAG, pickLocation);
+ doVerb();
+ return;
+ }
+ } else {
+ if (_vm->getGameType() == GType_IHNM) {
+ if ((hitZone->getFlags() & kHitZoneNoWalk) && (_pendingVerb != getVerbType(kVerbWalkTo))) {
+ doVerb();
+ return;
+ }
+ }
}
if (hitZone->getFlags() & kHitZoneProject) {
@@ -653,26 +672,64 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
}
}
- if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
- (_pendingVerb == getVerbType(kVerbPickUp)) ||
- (_pendingVerb == getVerbType(kVerbOpen)) ||
- (_pendingVerb == getVerbType(kVerbClose)) ||
- (_pendingVerb == getVerbType(kVerbUse))) {
- _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
- } else {
- if (_pendingVerb == getVerbType(kVerbLookAt)) {
- if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
+ if (_vm->getGameType() == GType_ITE) {
+ if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbPickUp)) ||
+ (_pendingVerb == getVerbType(kVerbOpen)) ||
+ (_pendingVerb == getVerbType(kVerbClose)) ||
+ (_pendingVerb == getVerbType(kVerbUse))) {
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ if (_pendingVerb == getVerbType(kVerbLookAt)) {
+ if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ doVerb();
+ }
} else {
- doVerb();
+ if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbGive))) {
+ doVerb();
+ }
}
+ }
+ }
+
+ if (_vm->getGameType() == GType_IHNM) {
+
+ if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbPickUp)) ||
+ (_pendingVerb == getVerbType(kVerbOpen)) ||
+ (_pendingVerb == getVerbType(kVerbClose)) ||
+ (_pendingVerb == getVerbType(kVerbUse))) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+
+ // Auto-use no-walk hitzones in IHNM, needed for Benny's chapter
+ if (_pendingVerb == getVerbType(kVerbWalkTo) &&
+ hitZone != NULL && (hitZone->getFlags() & kHitZoneNoWalk)) {
+ _pendingVerb = getVerbType(kVerbUse);
+ if (objectTypeId(_pendingObject[0]) == kGameObjectActor) {
+ _vm->_actor->actorFaceTowardsObject(ID_PROTAG, _pendingObject[0]);
+ doVerb();
+ }
+ }
} else {
- if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
- (_pendingVerb == getVerbType(kVerbGive))) {
+ if (_pendingVerb == getVerbType(kVerbLookAt)) {
+ if (objectTypeId(_pendingObject[0]) != kGameObjectActor) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ _vm->_actor->actorFaceTowardsObject(ID_PROTAG, _pendingObject[0]);
doVerb();
+ }
+ } else {
+ if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbGive))) {
+ doVerb();
+ }
}
}
}
+
}
void Script::whichObject(const Point& mousePoint) {
@@ -710,7 +767,8 @@ void Script::whichObject(const Point& mousePoint) {
} else {
actor = _vm->_actor->getActor(newObjectId);
objectId = newObjectId;
- objectFlags = kObjUseWith;
+ if (_vm->getGameType() == GType_ITE)
+ objectFlags = kObjUseWith;
newRightButtonVerb = getVerbType(kVerbTalkTo);
if ((_currentVerb == getVerbType(kVerbPickUp)) ||
@@ -718,8 +776,10 @@ void Script::whichObject(const Point& mousePoint) {
(_currentVerb == getVerbType(kVerbClose)) ||
((_currentVerb == getVerbType(kVerbGive)) && !_firstObjectSet) ||
((_currentVerb == getVerbType(kVerbUse)) && !(actor->_flags & kFollower))) {
- objectId = ID_NOTHING;
- newObjectId = ID_NOTHING;
+ if (_vm->getGameType() == GType_ITE) {
+ objectId = ID_NOTHING;
+ newObjectId = ID_NOTHING;
+ }
}
}
}
diff --git a/engines/saga/script.h b/engines/saga/script.h
index a8a0cd762b..ec3a7e1cf4 100644
--- a/engines/saga/script.h
+++ b/engines/saga/script.h
@@ -105,7 +105,8 @@ enum ThreadWaitTypes {
kWaitTypePause = 7,
kWaitTypePlacard = 8,
kWaitTypeStatusTextInput = 9,
- kWaitTypeWaitFrames = 10 // IHNM. waiting for a frame count
+ kWaitTypeWaitFrames = 10, // IHNM. waiting for a frame count
+ kWaitTypeWakeUp = 11 // IHNM. wait until get waken up
};
enum OpCodes {
@@ -326,6 +327,11 @@ public:
_sleepTime = sleepTime;
}
+ void waitFrames(int frames) {
+ wait(kWaitTypeWaitFrames);
+ _frameWait = frames;
+ }
+
ScriptThread() {
memset(this, 0xFE, sizeof(*this));
_stackBuf = NULL;
@@ -469,7 +475,7 @@ private:
void setThreadEntrypoint(ScriptThread *thread, int entrypointNumber);
public:
- void finishDialog(int replyID, int flags, int bitOffset);
+ void finishDialog(int strID, int replyID, int flags, int bitOffset);
private:
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index d759c9c2e7..e713326661 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -148,7 +148,7 @@ static const ScriptFunctionDescription IHNMscriptFunctionsList[IHNM_SCRIPT_FUNCT
OPCODE(sfSetActorFacing),
OPCODE(sfStartBgdAnim),
OPCODE(sfStopBgdAnim),
- OPCODE(sfNull),
+ OPCODE(sfLockUser),
OPCODE(sfPreDialog),
OPCODE(sfKillActorThreads),
OPCODE(sfFaceTowards),
@@ -386,11 +386,14 @@ void Script::sfScriptDoAction(SCRIPTFUNC_PARAMS) {
break;
case kGameObjectHitZone:
case kGameObjectStepZone:
- if (objectTypeId(objectId) == kGameObjectHitZone) {
+ if (objectTypeId(objectId) == kGameObjectHitZone)
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(objectId));
- } else {
+ else
hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(objectId));
- }
+
+ if (hitZone == NULL)
+ return;
+
scriptEntryPointNumber = hitZone->getScriptNumber();
moduleNumber = _vm->_scene->getScriptModuleNumber();
break;
@@ -541,12 +544,18 @@ void Script::sfSetFollower(SCRIPTFUNC_PARAMS) {
void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) {
int16 sceneNumber;
int16 entrance;
+ int16 transition = 0; // IHNM
sceneNumber = thread->pop();
entrance = thread->pop();
+ if (_vm->getGameType() == GType_IHNM)
+ transition = thread->pop();
+
if (sceneNumber < 0) {
- _vm->shutDown();
- return;
+ if (_vm->getGameType() == GType_ITE) {
+ _vm->shutDown();
+ return;
+ }
}
if (_vm->getGameType() == GType_IHNM) {
@@ -565,7 +574,14 @@ void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) {
_vm->_interface->setMode(kPanelMain);
}
- _vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == ITE_SCENE_ENDCREDIT1) ? kTransitionFade : kTransitionNoFade);
+ if (sceneNumber == -1 && _vm->getGameType() == GType_IHNM) {
+ // TODO: This is used to return back to the character selection screen in IHNM.
+ // However, it seems more than this is needed, AM's speech is wrong and no actors
+ // are shown
+ _vm->_scene->changeScene(154, entrance, kTransitionFade, 8);
+ } else {
+ _vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == ITE_SCENE_ENDCREDIT1) ? kTransitionFade : kTransitionNoFade);
+ }
//TODO: placard stuff
_pendingVerb = _vm->_script->getVerbType(kVerbNone);
@@ -729,11 +745,15 @@ void Script::sfEnableZone(SCRIPTFUNC_PARAMS) {
int16 flag = thread->pop();
HitZone *hitZone;
- if (objectTypeId(objectId) == kGameObjectHitZone) {
+ if (objectTypeId(objectId) == 0)
+ return;
+ else if (objectTypeId(objectId) == kGameObjectHitZone)
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(objectId));
- } else {
+ else
hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(objectId));
- }
+
+ if (hitZone == NULL)
+ return;
if (flag) {
hitZone->setFlag(kHitZoneEnabled);
@@ -823,6 +843,14 @@ void Script::sfDropObject(SCRIPTFUNC_PARAMS) {
obj->_sceneNumber = _vm->_scene->currentSceneNumber();
+ // WORKAROUND for the compact disk in Ellen's chapter
+ // Change the scene number of the compact disk so that it's not shown. It will be shown
+ // once Ellen says that there's something different (i.e. after speaking with AM)
+ // See Actor::actorSpeech for the other part of this workaround
+ if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 3 &&
+ _vm->_scene->currentSceneNumber() == 59 && obj->_id == 16385)
+ obj->_sceneNumber = -1;
+
if (_vm->getGameType() == GType_IHNM)
obj->_spriteListResourceId = spriteId;
else
@@ -862,15 +890,15 @@ void Script::sfSwapActors(SCRIPTFUNC_PARAMS) {
actor1->_flags &= ~kProtagonist;
actor2->_flags |= kProtagonist;
_vm->_actor->_protagonist = _vm->_actor->_centerActor = actor2;
+ if (_vm->getGameType() == GType_IHNM)
+ _vm->_scene->setProtag(actorId2);
} else if (actor2->_flags & kProtagonist) {
actor2->_flags &= ~kProtagonist;
actor1->_flags |= kProtagonist;
_vm->_actor->_protagonist = _vm->_actor->_centerActor = actor1;
+ if (_vm->getGameType() == GType_IHNM)
+ _vm->_scene->setProtag(actorId1);
}
-
- // Here non-protagonist ID gets saved in variable
- if (_vm->getGameType() == GType_IHNM)
- warning("sfSwapActors: incomplete implementation");
}
// Script function #35 (0x23)
@@ -1663,6 +1691,13 @@ void Script::sfPlayMusic(SCRIPTFUNC_PARAMS) {
} else {
_vm->_music->setVolume(-1, 1);
_vm->_music->play(_vm->_music->_songTable[param1], param2 ? MUSIC_LOOP : MUSIC_NORMAL);
+ if (!_vm->_scene->haveChapterPointsChanged()) {
+ _vm->_scene->setCurrentMusicTrack(param1);
+ _vm->_scene->setCurrentMusicRepeat(param2);
+ } else {
+ // Don't save this music track when saving in IHNM
+ _vm->_scene->setChapterPointsChanged(false);
+ }
}
}
}
@@ -1823,12 +1858,25 @@ void Script::sfPlayVoice(SCRIPTFUNC_PARAMS) {
}
}
-void Script::finishDialog(int replyID, int flags, int bitOffset) {
+void Script::finishDialog(int strID, int replyID, int flags, int bitOffset) {
byte *addr;
+ const char *str;
if (_conversingThread) {
_vm->_interface->setMode(kPanelNull);
+ if (_vm->getGameType() == GType_IHNM) {
+ str = _conversingThread->_strings->getString(strID);
+ if (*str != '[') {
+ int sampleResourceId = -1;
+ sampleResourceId = _conversingThread->_voiceLUT->voices[strID];
+ if (sampleResourceId < 0 || sampleResourceId > 4000)
+ sampleResourceId = -1;
+
+ _vm->_actor->actorSpeech(_vm->_actor->_protagonist->_id, &str, 1, sampleResourceId, 0);
+ }
+ }
+
_conversingThread->_flags &= ~kTFlagWaiting;
_conversingThread->push(replyID);
@@ -1850,6 +1898,7 @@ void Script::sfSetChapterPoints(SCRIPTFUNC_PARAMS) {
_vm->_ethicsPoints[chapter] = ethics;
_vm->_spiritualBarometer = ethics * 256 / barometer;
+ _vm->_scene->setChapterPointsChanged(true); // don't save this music when saving in IHNM
}
void Script::sfSetPortraitBgColor(SCRIPTFUNC_PARAMS) {
@@ -1868,11 +1917,13 @@ void Script::sfScriptStartCutAway(SCRIPTFUNC_PARAMS) {
thread->pop(); // Not used
fade = thread->pop();
+ _vm->_anim->setCutAwayMode(kPanelCutaway);
_vm->_anim->playCutaway(cut, fade != 0);
}
void Script::sfReturnFromCutAway(SCRIPTFUNC_PARAMS) {
_vm->_anim->returnFromCutaway();
+ thread->wait(kWaitTypeWakeUp);
}
void Script::sfEndCutAway(SCRIPTFUNC_PARAMS) {
@@ -1880,31 +1931,82 @@ void Script::sfEndCutAway(SCRIPTFUNC_PARAMS) {
}
void Script::sfGetMouseClicks(SCRIPTFUNC_PARAMS) {
- SF_stub("sfGetMouseClicks", thread, nArgs);
+ thread->_returnValue = _vm->getMouseClickCount();
}
void Script::sfResetMouseClicks(SCRIPTFUNC_PARAMS) {
- SF_stub("sfResetMouseClicks", thread, nArgs);
+ _vm->resetMouseClickCount();
}
+// Used in IHNM only
+// Param1: frames
void Script::sfWaitFrames(SCRIPTFUNC_PARAMS) {
- SF_stub("sfWaitFrames", thread, nArgs);
+ int16 frames;
+ frames = thread->pop();
+
+ // HACK for the nightfall scene in Benny's chapter
+ // sfWaitFrames is supposed to wait for fadein and fadeout during that cutaway, but we
+ // don't support it yet (function sfScriptFade). This is a temporary hack to avoid
+ // having ScummVM wait for ever in that cutaway
+ // FIXME: Remove this hack once the palette fading is properly handled
+ if (_vm->_scene->currentChapterNumber() == 2 && _vm->_scene->currentSceneNumber() == 41 && _vm->_anim->hasCutaway())
+ return;
+
+ if (!_skipSpeeches)
+ thread->waitFrames(_vm->_frameCount + frames);
}
void Script::sfScriptFade(SCRIPTFUNC_PARAMS) {
- SF_stub("sfScriptFade", thread, nArgs);
+ thread->pop(); // first pal entry, ignored (already handled by Gfx::palToBlack)
+ thread->pop(); // last pal entry, ignored (already handled by Gfx::palToBlack)
+ int16 startingBrightness = thread->pop();
+ int16 endingBrightness = thread->pop();
+ // delay between pal changes is always 10 (not used)
+ static PalEntry cur_pal[PAL_ENTRIES];
+ Event event;
+ short delta = (startingBrightness < endingBrightness) ? +1 : -1;
+
+ _vm->_gfx->getCurrentPal(cur_pal);
+
+ // TODO: This is still wrong, probably a new event type needs to be added (kEventPalFade)
+ warning("TODO: sfScriptFade");
+ return;
+
+ if (startingBrightness > 255)
+ startingBrightness = 255;
+ if (startingBrightness < 0 )
+ startingBrightness = 0;
+ if (endingBrightness > 255)
+ endingBrightness = 255;
+ if (endingBrightness < 0)
+ endingBrightness = 0;
+
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventPalToBlack;
+ event.time = 0;
+ event.duration = kNormalFadeDuration - ((endingBrightness - startingBrightness) * delta);
+ event.data = cur_pal;
+
+ _vm->_events->queue(&event);
}
void Script::sfScriptStartVideo(SCRIPTFUNC_PARAMS) {
- SF_stub("sfScriptStartVideo", thread, nArgs);
+ int16 vid;
+ int16 fade;
+ vid = thread->pop();
+ fade = thread->pop();
+
+ _vm->_anim->setCutAwayMode(kPanelVideo);
+ _vm->_anim->startVideo(vid, fade != 0);
}
void Script::sfScriptReturnFromVideo(SCRIPTFUNC_PARAMS) {
- SF_stub("sfScriptReturnFromVideo", thread, nArgs);
+ _vm->_anim->returnFromVideo();
}
void Script::sfScriptEndVideo(SCRIPTFUNC_PARAMS) {
- SF_stub("sfScriptEndVideo", thread, nArgs);
+ _vm->_anim->endVideo();
}
void Script::sf87(SCRIPTFUNC_PARAMS) {
@@ -1989,8 +2091,8 @@ void Script::sfSetSpeechBox(SCRIPTFUNC_PARAMS) {
_vm->_actor->_speechBoxScript.left = param1;
_vm->_actor->_speechBoxScript.top = param2;
- _vm->_actor->_speechBoxScript.setWidth(param3);
- _vm->_actor->_speechBoxScript.setHeight(param4);
+ _vm->_actor->_speechBoxScript.setWidth(param3 - param1);
+ _vm->_actor->_speechBoxScript.setHeight(param4 - param2);
}
void Script::sfDebugShowData(SCRIPTFUNC_PARAMS) {
diff --git a/engines/saga/sndres.cpp b/engines/saga/sndres.cpp
index 0e3db65898..c0442c75de 100644
--- a/engines/saga/sndres.cpp
+++ b/engines/saga/sndres.cpp
@@ -126,6 +126,9 @@ void SndRes::playSound(uint32 resourceId, int volume, bool loop) {
void SndRes::playVoice(uint32 resourceId) {
SoundBuffer buffer;
+ if (_vm->getGameType() == GType_IHNM && !(_vm->_voicesEnabled))
+ return;
+
debug(4, "SndRes::playVoice %i", resourceId);
if (!load(_voiceContext, resourceId, buffer, false)) {
diff --git a/engines/saga/sthread.cpp b/engines/saga/sthread.cpp
index 4249584941..0749488aca 100644
--- a/engines/saga/sthread.cpp
+++ b/engines/saga/sthread.cpp
@@ -700,6 +700,7 @@ bool Script::runThread(ScriptThread *thread, uint instructionLimit) {
replyNum = scriptS.readByte();
flags = scriptS.readByte();
iparam1 = 0;
+ int strID = thread->pop();
if (flags & kReplyOnce) {
iparam1 = scriptS.readSint16LE();
@@ -709,8 +710,8 @@ bool Script::runThread(ScriptThread *thread, uint instructionLimit) {
}
}
- str = thread->_strings->getString(thread->pop());
- if (_vm->_interface->converseAddText(str, replyNum, flags, iparam1))
+ str = thread->_strings->getString(strID);
+ if (_vm->_interface->converseAddText(str, strID, replyNum, flags, iparam1))
warning("Error adding ConverseText (%s, %d, %d, %d)", str, replyNum, flags, iparam1);
}
break;
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 217b257e5e..8624f80fe7 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -49,17 +49,6 @@ enum {
#pragma mark --- Miscellaneous ---
#pragma mark -
-static const char *findDescriptionFromGameID(const char *gameid) {
- const PlainGameDescriptor *g = gameDescriptions;
- while (g->gameid) {
- if (!scumm_stricmp(g->gameid, gameid)) {
- return g->description;
- }
- g++;
- }
- error("Unknown gameid '%s' encountered in findDescriptionFromGameID", gameid);
-}
-
static int compareMD5Table(const void *a, const void *b) {
const char *key = (const char *)a;
const MD5Table *elem = (const MD5Table *)b;
@@ -673,37 +662,11 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
using namespace Scumm;
GameList Engine_SCUMM_gameIDList() {
- const PlainGameDescriptor *g = gameDescriptions;
- GameList games;
- while (g->gameid) {
- games.push_back(GameDescriptor(g->gameid, g->description));
- g++;
- }
- return games;
+ return GameList(gameDescriptions);
}
GameDescriptor Engine_SCUMM_findGameID(const char *gameid) {
- // First search the list of supported game IDs.
- const PlainGameDescriptor *g = gameDescriptions;
- while (g->gameid) {
- if (0 == scumm_stricmp(gameid, g->gameid))
- return GameDescriptor(g->gameid, g->description);
- g++;
- }
-
- // If we didn't find the gameid in the main list, check if it
- // is an obsolete game id.
- GameDescriptor gs;
- const ObsoleteGameID *o = obsoleteGameIDsTable;
- while (o->from) {
- if (0 == scumm_stricmp(gameid, o->from)) {
- gs["gameid"] = gameid;
- gs["description"] = "Obsolete game ID";
- return gs;
- }
- o++;
- }
- return gs;
+ return Common::AdvancedDetector::findGameID(gameid, gameDescriptions, obsoleteGameIDsTable);
}
@@ -717,8 +680,9 @@ GameList Engine_SCUMM_detectGames(const FSList &fslist) {
// In particular, they are detected as ZakTowns, which is bad.
for (Common::List<DetectorResult>::iterator x = results.begin(); x != results.end(); ++x) {
- GameDescriptor dg(x->game.gameid, findDescriptionFromGameID(x->game.gameid),
- x->language, x->game.platform);
+ const PlainGameDescriptor *g = findPlainGameDescriptor(x->game.gameid, gameDescriptions);
+ assert(g);
+ GameDescriptor dg(x->game.gameid, g->description, x->language, x->game.platform);
dg.updateDesc(x->extra); // Append additional information, if set, to the description.
// Compute and set the preferred target name for this game.
@@ -766,7 +730,7 @@ PluginError Engine_SCUMM_create(OSystem *syst, Engine **engine) {
// We start by checking whether the specified game ID is obsolete.
// If that is the case, we automatically upgrade the target to use
// the correct new game ID (and platform, if specified).
- for (const ObsoleteGameID *o = obsoleteGameIDsTable; o->from; ++o) {
+ for (const Common::ADObsoleteGameID *o = obsoleteGameIDsTable; o->from; ++o) {
if (!scumm_stricmp(gameid, o->from)) {
// Match found, perform upgrade
gameid = o->to;
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index c59c790229..246126611e 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -28,6 +28,7 @@
#include "common/stdafx.h"
+#include "common/advancedDetector.h"
#include "common/rect.h"
#include "common/util.h"
@@ -49,12 +50,6 @@ namespace Scumm {
#pragma mark --- Data types & constants ---
#pragma mark -
-struct ObsoleteGameID {
- const char *from;
- const char *to;
- Common::Platform platform;
-};
-
#define UNK Common::kPlatformUnknown
#pragma mark -
@@ -146,7 +141,7 @@ static const PlainGameDescriptor gameDescriptions[] = {
* Conversion table mapping old obsolete game IDs to the
* corresponding new game ID and platform combination.
*/
-static const ObsoleteGameID obsoleteGameIDsTable[] = {
+static const Common::ADObsoleteGameID obsoleteGameIDsTable[] = {
{"bluesabctimedemo", "bluesabctime", UNK},
{"BluesBirthdayDemo", "BluesBirthday", UNK},
{"comidemo", "comi", UNK},
@@ -571,6 +566,7 @@ static const GameFilenamePattern gameFilenamesTable[] = {
{ "freddi3", "F3-Mdemo", kGenHEMac, UNK_LANG, Common::kPlatformMacintosh, 0 },
{ "freddi3", "f3-mdemo", kGenHEPC, UNK_LANG, UNK, 0 },
{ "freddi3", "FF3-DEMO", kGenHEPC, UNK_LANG, UNK, 0 },
+ { "freddi3", "FF3DEMO", kGenHEPC, Common::HB_ISR, UNK, 0 },
{ "freddi3", "Freddi 3", kGenHEMac, Common::NL_NLD, Common::kPlatformMacintosh, 0 },
{ "freddi3", "Freddi Fish 3", kGenHEMac, UNK_LANG, Common::kPlatformMacintosh, 0 },
{ "freddi3", "FreddiFGT", kGenHEPC, Common::DE_DEU, UNK, 0 },
@@ -660,6 +656,7 @@ static const GameFilenamePattern gameFilenamesTable[] = {
{ "pajama2", "pj2demo", kGenHEPC, UNK_LANG, UNK, 0 },
{ "pajama2", "Pjs2demo", kGenHEPC, UNK_LANG, UNK, 0 },
{ "pajama2", "PJ2 Demo", kGenHEMac, Common::NL_NLD, Common::kPlatformMacintosh, 0 },
+ { "pajama2", "PS2DEMO", kGenHEPC, Common::HB_ISR, UNK, 0 },
{ "pajama3", "pajama3", kGenHEPC, UNK_LANG, UNK, 0 },
{ "pajama3", "FPJ3Demo", kGenHEPC, Common::FR_FRA, UNK, 0 },
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 15c22c2bed..85a7a4b675 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -27,6 +27,7 @@
#include "common/config-manager.h"
#include "common/savefile.h"
#include "common/system.h"
+#include "common/events.h"
#include "graphics/scaler.h"
@@ -618,14 +619,6 @@ ConfigDialog::~ConfigDialog() {
#endif
}
-void ConfigDialog::open() {
- GUI_OptionsDialog::open();
-}
-
-void ConfigDialog::close() {
- GUI_OptionsDialog::close();
-}
-
void ConfigDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
switch (cmd) {
case kKeysCmd:
@@ -749,21 +742,28 @@ void HelpDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
InfoDialog::InfoDialog(ScummEngine *scumm, int res)
: ScummDialog("scummDummyDialog"), _vm(scumm) { // dummy x and w
- setInfoText(queryResString(res));
+
+ _message = queryResString(res);
+
+ // Width and height are dummy
+ _text = new StaticTextWidget(this, 4, 4, 10, 10, _message, kTextAlignCenter);
}
InfoDialog::InfoDialog(ScummEngine *scumm, const String& message)
: ScummDialog("scummDummyDialog"), _vm(scumm) { // dummy x and w
- setInfoText(message);
-}
-void InfoDialog::setInfoText(const String& message) {
_message = message;
// Width and height are dummy
_text = new StaticTextWidget(this, 4, 4, 10, 10, _message, kTextAlignCenter);
}
+void InfoDialog::setInfoText(const String& message) {
+ _message = message;
+ _text->setLabel(_message);
+ //reflowLayout(); // FIXME: Should we call this here? Depends on the usage patterns, I guess...
+}
+
void InfoDialog::reflowLayout() {
const int screenW = g_system->getOverlayWidth();
const int screenH = g_system->getOverlayHeight();
@@ -913,6 +913,48 @@ void ValueDisplayDialog::open() {
_timer = getMillis() + kDisplayDelay;
}
+SubtitleSettingsDialog::SubtitleSettingsDialog(ScummEngine *scumm, int value)
+ : InfoDialog(scumm, ""), _value(value) {
+
+}
+
+void SubtitleSettingsDialog::handleTickle() {
+ InfoDialog::handleTickle();
+ if (getMillis() > _timer)
+ close();
+}
+
+void SubtitleSettingsDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
+ if (keycode == 't' && modifiers == Common::KBD_CTRL) {
+ cycleValue();
+
+ reflowLayout();
+ draw();
+ } else {
+ close();
+ }
+}
+
+void SubtitleSettingsDialog::open() {
+ cycleValue();
+ InfoDialog::open();
+}
+
+void SubtitleSettingsDialog::cycleValue() {
+ static const char* subtitleDesc[] = {
+ "Speech Only",
+ "Speech and Subtitles",
+ "Subtitles Only"
+ };
+
+ _value = (_value + 1) % 3;
+
+ setInfoText(subtitleDesc[_value]);
+
+ setResult(_value);
+ _timer = getMillis() + 1500;
+}
+
Indy3IQPointsDialog::Indy3IQPointsDialog(ScummEngine *scumm, char* text)
: InfoDialog(scumm, text) {
}
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index d3ee9dbc18..b69e989f8a 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -142,8 +142,6 @@ public:
ConfigDialog();
~ConfigDialog();
- virtual void open();
- virtual void close();
virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
};
@@ -165,6 +163,8 @@ public:
// from resources
InfoDialog(ScummEngine *scumm, int res);
+ void setInfoText(const String& message);
+
virtual void handleMouseDown(int x, int y, int button, int clickCount) {
setResult(0);
close();
@@ -177,7 +177,6 @@ public:
virtual void reflowLayout();
protected:
- void setInfoText (const String& message);
// Query a string from the resources
const String queryResString(int stringno);
@@ -235,6 +234,26 @@ protected:
uint32 _timer;
};
+/**
+ * A dialog used to display and cycle subtitle settings.
+ * Automatically closes after a brief time has passed.
+ */
+class SubtitleSettingsDialog : public InfoDialog {
+public:
+ SubtitleSettingsDialog(ScummEngine *scumm, int value);
+
+ virtual void open();
+ virtual void handleTickle();
+ virtual void handleMouseDown(int x, int y, int button, int clickCount) {
+ close();
+ }
+ virtual void handleKeyDown(uint16 ascii, int keycode, int modifiers);
+protected:
+ int _value;
+ uint32 _timer;
+
+ void cycleValue();
+};
//The Indy IQ dialog
class Indy3IQPointsDialog : public InfoDialog {
diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp
index dd7a23d0cf..3547986ce3 100644
--- a/engines/scumm/gfx.cpp
+++ b/engines/scumm/gfx.cpp
@@ -1146,12 +1146,11 @@ void ScummEngine::moveScreen(int dx, int dy, int height) {
if ((dx == 0 && dy == 0) || height <= 0)
return;
- Graphics::Surface screen;
- assert(_system->grabRawScreen(&screen));
-
- screen.move(dx, dy, height);
- _system->copyRectToScreen((byte *)screen.pixels, screen.pitch, 0, 0, screen.w, screen.h);
- screen.free();
+ Graphics::Surface *screen = _system->lockScreen();
+ if (!screen)
+ return;
+ screen->move(dx, dy, height);
+ _system->unlockScreen();
}
void ScummEngine_v5::clearFlashlight() {
diff --git a/engines/scumm/he/animation_he.cpp b/engines/scumm/he/animation_he.cpp
index da0855e1a3..3bc2f3e5d7 100644
--- a/engines/scumm/he/animation_he.cpp
+++ b/engines/scumm/he/animation_he.cpp
@@ -40,7 +40,7 @@ MoviePlayer::MoviePlayer(ScummEngine_v90he *vm, Audio::Mixer *mixer)
}
int MoviePlayer::getImageNum() {
- if (!_fd.isOpen())
+ if (!_fd)
return 0;
return _wizResNum;
}
@@ -48,7 +48,7 @@ int MoviePlayer::getImageNum() {
int MoviePlayer::load(const char *filename, int flags, int image) {
char videoName[100];
- if (_fd.isOpen()) {
+ if (_fd) {
closeFile();
}
@@ -66,7 +66,7 @@ int MoviePlayer::load(const char *filename, int flags, int image) {
debug(1, "Playing video %s", videoName);
// Skip sound tag
- _fd.readUint32BE();
+ _fd->readUint32BE();
if (flags & 2) {
_vm->_wiz->createWizEmptyImage(image, 0, 0, _width, _height);
@@ -85,7 +85,7 @@ int MoviePlayer::load(const char *filename, int flags, int image) {
}
void MoviePlayer::handleNextFrame() {
- if (_fd.isOpen() == false) {
+ if (_fd == false) {
return;
}
diff --git a/engines/scumm/he/script_v60he.cpp b/engines/scumm/he/script_v60he.cpp
index 29226cd939..baee2f3e49 100644
--- a/engines/scumm/he/script_v60he.cpp
+++ b/engines/scumm/he/script_v60he.cpp
@@ -1090,7 +1090,7 @@ void ScummEngine_v60he::o60_readFile() {
int val;
// Fatty Bear uses positive values
- if ((_game.platform == Common::kPlatformPC) && (_game.id == GID_FBEAR))
+ if (_game.platform == Common::kPlatformPC && _game.id == GID_FBEAR)
size = -size;
assert(_hInFileTable[slot]);
@@ -1120,7 +1120,7 @@ void ScummEngine_v60he::o60_writeFile() {
int slot = pop();
// Fatty Bear uses positive values
- if ((_game.platform == Common::kPlatformPC) && (_game.id == GID_FBEAR))
+ if (_game.platform == Common::kPlatformPC && _game.id == GID_FBEAR)
size = -size;
assert(_hOutFileTable[slot]);
@@ -1138,13 +1138,15 @@ void ScummEngine_v60he::o60_soundOps() {
int arg = pop();
switch (subOp) {
- case 0xde:
- _imuse->setMusicVolume(arg);
+ case 222:
+ if (_imuse) {
+ _imuse->setMusicVolume(arg);
+ }
break;
- case 0xdf:
- // Used in fbear introduction
+ case 223:
+ // WORKAROUND: For error in room script 228 (room 2) of fbear.
break;
- case 0xe0:
+ case 224:
// Fatty Bear's Birthday surprise uses this when playing the
// piano, but only when using one of the digitized instruments.
// See also o6_startSound().
diff --git a/engines/scumm/he/script_v70he.cpp b/engines/scumm/he/script_v70he.cpp
index 6b1f670e15..1ced349225 100644
--- a/engines/scumm/he/script_v70he.cpp
+++ b/engines/scumm/he/script_v70he.cpp
@@ -461,6 +461,9 @@ void ScummEngine_v70he::o70_startSound() {
case 164:
_heSndFlags |= 2;
break;
+ case 222:
+ // WORKAROUND: For errors in room script 240 (room 4) of maze
+ break;
case 224:
_heSndSoundFreq = pop();
break;
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index bee1a56b82..0221657966 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -39,7 +39,7 @@
namespace Scumm {
IMuseDigital::Track::Track()
- : soundId(-1), used(false), stream(NULL), stream2(NULL) {
+ : soundId(-1), used(false), stream(NULL), streamSou(NULL) {
}
void IMuseDigital::timer_handler(void *refCon) {
@@ -128,9 +128,9 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKARRAY(Track, soundName[0], sleByte, 15, VER(31)),
MKLINE(Track, used, sleByte, VER(31)),
MKLINE(Track, toBeRemoved, sleByte, VER(31)),
- MKLINE(Track, souStream, sleByte, VER(31)),
- MKLINE(Track, started, sleByte, VER(31)),
- MKLINE(Track, priority, sleInt32, VER(31)),
+ MKLINE(Track, souStreamUsed, sleByte, VER(31)),
+ MKLINE(Track, mixerStreamRunning, sleByte, VER(31)),
+ MKLINE(Track, soundPriority, sleInt32, VER(31)),
MKLINE(Track, regionOffset, sleInt32, VER(31)),
MK_OBSOLETE(Track, trackOffset, sleInt32, VER(31), VER(31)),
MKLINE(Track, dataOffset, sleInt32, VER(31)),
@@ -138,12 +138,12 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKLINE(Track, curHookId, sleInt32, VER(31)),
MKLINE(Track, volGroupId, sleInt32, VER(31)),
MKLINE(Track, soundType, sleInt32, VER(31)),
- MKLINE(Track, iteration, sleInt32, VER(31)),
- MKLINE(Track, mod, sleInt32, VER(31)),
- MKLINE(Track, flags, sleInt32, VER(31)),
+ MKLINE(Track, feedSize, sleInt32, VER(31)),
+ MKLINE(Track, dataMod12Bit, sleInt32, VER(31)),
+ MKLINE(Track, mixerFlags, sleInt32, VER(31)),
MK_OBSOLETE(Track, mixerVol, sleInt32, VER(31), VER(42)),
MK_OBSOLETE(Track, mixerPan, sleInt32, VER(31), VER(42)),
- MKLINE(Track, compressed, sleByte, VER(45)),
+ MKLINE(Track, sndDataExtComp, sleByte, VER(45)),
MKEND()
};
@@ -152,15 +152,15 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
Track *track = _track[l];
if (!ser->isSaving()) {
- track->compressed = false;
+ track->sndDataExtComp = false;
}
ser->saveLoadEntries(track, trackEntries);
if (!ser->isSaving()) {
if (!track->used)
continue;
track->readyToRemove = false;
- if ((track->toBeRemoved) || (track->souStream) || (track->curRegion == -1)) {
- track->stream2 = NULL;
+ if ((track->toBeRemoved) || (track->souStreamUsed) || (track->curRegion == -1)) {
+ track->streamSou= NULL;
track->stream = NULL;
track->used = false;
continue;
@@ -171,43 +171,43 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
track->volGroupId, -1);
if (!track->soundHandle) {
warning("IMuseDigital::saveOrLoad: Can't open sound so will not be resumed, propably on diffrent CD");
- track->stream2 = NULL;
+ track->streamSou = NULL;
track->stream = NULL;
track->used = false;
continue;
}
- if (track->compressed) {
+ if (track->sndDataExtComp) {
track->regionOffset = 0;
}
- track->compressed = _sound->isCompressed(track->soundHandle);
- if (track->compressed) {
+ track->sndDataExtComp = _sound->isSndDataExtComp(track->soundHandle);
+ if (track->sndDataExtComp) {
track->regionOffset = 0;
}
track->dataOffset = _sound->getRegionOffset(track->soundHandle, track->curRegion);
int bits = _sound->getBits(track->soundHandle);
int channels = _sound->getChannels(track->soundHandle);
int freq = _sound->getFreq(track->soundHandle);
- track->iteration = freq * channels;
- track->flags = 0;
+ track->feedSize = freq * channels;
+ track->mixerFlags = 0;
if (channels == 2)
- track->flags = kFlagStereo | kFlagReverseStereo;
+ track->mixerFlags = kFlagStereo | kFlagReverseStereo;
if ((bits == 12) || (bits == 16)) {
- track->flags |= kFlag16Bits;
- track->iteration *= 2;
+ track->mixerFlags |= kFlag16Bits;
+ track->feedSize *= 2;
} else if (bits == 8) {
- track->flags |= kFlagUnsigned;
+ track->mixerFlags |= kFlagUnsigned;
} else
error("IMuseDigital::saveOrLoad(): Can't handle %d bit samples", bits);
#ifdef SCUMM_LITTLE_ENDIAN
- if (track->compressed)
- track->flags |= kFlagLittleEndian;
+ if (track->sndDataExtComp)
+ track->mixerFlags |= kFlagLittleEndian;
#endif
- track->stream2 = NULL;
- track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
+ track->streamSou = NULL;
+ track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
const int vol = track->vol / 1000;
@@ -220,7 +220,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
if (track->volGroupId == 3)
type = Audio::Mixer::kMusicSoundType;
- _mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false);
+ _mixer->playInputStream(type, &track->mixChanHandle, track->stream, -1, vol, pan, false);
}
}
}
@@ -275,8 +275,8 @@ void IMuseDigital::callback() {
type = Audio::Mixer::kMusicSoundType;
if (track->stream) {
- byte *data = NULL;
- int32 result = 0;
+ byte *tmpSndBufferPtr = NULL;
+ int32 curFeedSize = 0;
if (track->curRegion == -1) {
switchToNextRegion(track);
@@ -287,81 +287,81 @@ void IMuseDigital::callback() {
int bits = _sound->getBits(track->soundHandle);
int channels = _sound->getChannels(track->soundHandle);
- int32 mixer_size = track->iteration / _callbackFps;
+ int32 feedSize = track->feedSize / _callbackFps;
if (track->stream->endOfData()) {
- mixer_size *= 2;
+ feedSize *= 2;
}
if ((bits == 12) || (bits == 16)) {
if (channels == 1)
- mixer_size &= ~1;
+ feedSize &= ~1;
if (channels == 2)
- mixer_size &= ~3;
+ feedSize &= ~3;
} else {
if (channels == 2)
- mixer_size &= ~1;
+ feedSize &= ~1;
}
- if (mixer_size == 0)
+ if (feedSize == 0)
continue;
do {
if (bits == 12) {
- byte *ptr = NULL;
+ byte *tmpPtr = NULL;
- mixer_size += track->mod;
- int mixer_size_12 = (mixer_size * 3) / 4;
- int length = (mixer_size_12 / 3) * 4;
- track->mod = mixer_size - length;
+ feedSize += track->dataMod12Bit;
+ int tmpFeedSize12Bits = (feedSize * 3) / 4;
+ int tmpLength12Bits = (tmpFeedSize12Bits / 3) * 4;
+ track->dataMod12Bit = feedSize - tmpLength12Bits;
- int32 offset = (track->regionOffset * 3) / 4;
- int result2 = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &ptr, offset, mixer_size_12);
- result = BundleCodecs::decode12BitsSample(ptr, &data, result2);
+ int32 tmpOffset = (track->regionOffset * 3) / 4;
+ int tmpFeedSize = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &tmpPtr, tmpOffset, tmpFeedSize12Bits);
+ curFeedSize = BundleCodecs::decode12BitsSample(tmpPtr, &tmpSndBufferPtr, tmpFeedSize);
- free(ptr);
+ free(tmpPtr);
} else if (bits == 16) {
- result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
+ curFeedSize = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &tmpSndBufferPtr, track->regionOffset, feedSize);
if (channels == 1) {
- result &= ~1;
+ curFeedSize &= ~1;
}
if (channels == 2) {
- result &= ~3;
+ curFeedSize &= ~3;
}
} else if (bits == 8) {
- result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
+ curFeedSize = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &tmpSndBufferPtr, track->regionOffset, feedSize);
if (channels == 2) {
- result &= ~1;
+ curFeedSize &= ~1;
}
}
- if (result > mixer_size)
- result = mixer_size;
+ if (curFeedSize > feedSize)
+ curFeedSize = feedSize;
if (_mixer->isReady()) {
- _mixer->setChannelVolume(track->handle, vol);
- _mixer->setChannelBalance(track->handle, pan);
- track->stream->queueBuffer(data, result);
- track->regionOffset += result;
+ _mixer->setChannelVolume(track->mixChanHandle, vol);
+ _mixer->setChannelBalance(track->mixChanHandle, pan);
+ track->stream->queueBuffer(tmpSndBufferPtr, curFeedSize);
+ track->regionOffset += curFeedSize;
} else
- delete[] data;
+ delete[] tmpSndBufferPtr;
if (_sound->isEndOfRegion(track->soundHandle, track->curRegion)) {
switchToNextRegion(track);
if (track->toBeRemoved)
break;
}
- mixer_size -= result;
- assert(mixer_size >= 0);
- } while (mixer_size != 0);
- } else if (track->stream2) {
+ feedSize -= curFeedSize;
+ assert(feedSize >= 0);
+ } while (feedSize != 0);
+ } else if (track->streamSou) {
if (_mixer->isReady()) {
- if (!track->started) {
- track->started = true;
- _mixer->playInputStream(type, &track->handle, track->stream2, -1, vol, pan, false);
+ if (!track->mixerStreamRunning) {
+ track->mixerStreamRunning = true;
+ _mixer->playInputStream(type, &track->mixChanHandle, track->streamSou, -1, vol, pan, false);
} else {
- _mixer->setChannelVolume(track->handle, vol);
- _mixer->setChannelBalance(track->handle, pan);
+ _mixer->setChannelVolume(track->mixChanHandle, vol);
+ _mixer->setChannelBalance(track->mixChanHandle, pan);
}
}
}
diff --git a/engines/scumm/imuse_digi/dimuse.h b/engines/scumm/imuse_digi/dimuse.h
index 8cfe0f8542..1b088298df 100644
--- a/engines/scumm/imuse_digi/dimuse.h
+++ b/engines/scumm/imuse_digi/dimuse.h
@@ -67,41 +67,41 @@ enum {
class IMuseDigital : public MusicEngine {
private:
- int _callbackFps;
+ int _callbackFps; // value how many times callback needs to be called per second
struct Track {
- int trackId;
-
- int8 pan; // pan
- int32 vol; // volume
- int32 volFadeDest; //
- int32 volFadeStep; //
- int32 volFadeDelay; //
- bool volFadeUsed; //
-
- int32 soundId;
- char soundName[15];
- bool used;
- bool toBeRemoved;
- bool readyToRemove;
- bool started;
- bool souStream;
- bool compressed;
- int32 priority;
- int32 regionOffset;
- int32 dataOffset;
- int32 curRegion;
- int32 curHookId;
- int32 volGroupId;
- int32 soundType;
- int32 iteration;
- int32 mod;
- int32 flags;
-
- ImuseDigiSndMgr::soundStruct *soundHandle;
- Audio::SoundHandle handle;
- Audio::AppendableAudioStream *stream;
- Audio::AudioStream *stream2;
+ int trackId; // used to identify track by value (0-15)
+
+ int8 pan; // panning value of sound
+ int32 vol; // volume level (values 0-127 * 1000)
+ int32 volFadeDest; // volume level which fading target (values 0-127 * 1000)
+ int32 volFadeStep; // delta of step while changing volume at each imuse callback
+ int32 volFadeDelay; // time in ms how long fading volume must be
+ bool volFadeUsed; // flag if fading is in progress
+
+ int32 soundId; // sound id used by scumm script
+ char soundName[15]; // sound name but also filename of sound in bundle data
+ bool used; // flag mean that track is used
+ bool toBeRemoved; // flag mean that track need to be free
+ bool readyToRemove; // flag mean that track is ready to stop
+ bool mixerStreamRunning; // flag mean sound mixer's stream is running
+ bool souStreamUsed; // flag mean that track use stream from sou file
+ bool sndDataExtComp;// flag mean that sound data is compressed by scummvm tools
+ int32 soundPriority;// priority level of played sound (0-127)
+ int32 regionOffset; // offset to sound data relative to begining of current region
+ int32 dataOffset; // offset to sound data relative to begining of 'DATA' chunk
+ int32 curRegion; // id of current used region
+ int32 curHookId; // id of current used hook id
+ int32 volGroupId; // id of volume group (IMUSE_VOLGRP_VOICE, IMUSE_VOLGRP_SFX, IMUSE_VOLGRP_MUSIC)
+ int32 soundType; // type of sound data (kSpeechSoundType, kSFXSoundType, kMusicSoundType)
+ int32 feedSize; // size of sound data needed to be filled at each callback iteration
+ int32 dataMod12Bit; // value used between all callback to align 12 bit source of data
+ int32 mixerFlags; // flags for sound mixer's channel (kFlagStereo, kFlag16Bits, kFlagReverseStereo, kFlagUnsigned, kFlagLittleEndian)
+
+ ImuseDigiSndMgr::soundStruct *soundHandle; // sound handle used by iMuse sound manager
+ Audio::SoundHandle mixChanHandle; // sound mixer's channel handle
+ Audio::AppendableAudioStream *stream; // sound mixer's audio stream handle for *.la1 and *.bun
+ Audio::AudioStream *streamSou; // sound mixer's audio stream handle for *.sou
Track();
};
@@ -113,16 +113,16 @@ private:
Audio::Mixer *_mixer;
ImuseDigiSndMgr *_sound;
- char *_audioNames;
- int32 _numAudioNames;
+ char *_audioNames; // filenames of sound SFX used in FT
+ int32 _numAudioNames; // number of above filenames
- bool _pause;
+ bool _pause; // flag mean that iMuse callback should be idle
- int32 _attributes[188];
- int32 _nextSeqToPlay;
- int32 _curMusicState;
- int32 _curMusicSeq;
- int32 _curMusicCue;
+ int32 _attributes[188]; // internal atributes for each music file to store and check later
+ int32 _nextSeqToPlay; // id of sequence type of music needed played
+ int32 _curMusicState; // current or previous id of music
+ int32 _curMusicSeq; // current or previous id of sequence music
+ int32 _curMusicCue; // current cue for current music. used in FT
int32 makeMixerFlags(int32 flags);
static void timer_handler(void *refConf);
@@ -201,7 +201,7 @@ struct imuseRoomMap {
};
struct imuseDigTable {
- byte opcode;
+ byte transitionType;
int16 soundId;
char name[20];
byte atribPos;
@@ -210,7 +210,7 @@ struct imuseDigTable {
};
struct imuseComiTable {
- byte opcode;
+ byte transitionType;
int16 soundId;
char name[20];
byte atribPos;
@@ -226,14 +226,14 @@ struct imuseFtNames {
struct imuseFtStateTable {
char audioName[9];
- byte opcode;
+ byte transitionType;
byte volume;
char name[21];
};
struct imuseFtSeqTable {
char audioName[9];
- byte opcode;
+ byte transitionType;
byte volume;
};
diff --git a/engines/scumm/imuse_digi/dimuse_bndmgr.cpp b/engines/scumm/imuse_digi/dimuse_bndmgr.cpp
index 6592be8848..03b3e4e74a 100644
--- a/engines/scumm/imuse_digi/dimuse_bndmgr.cpp
+++ b/engines/scumm/imuse_digi/dimuse_bndmgr.cpp
@@ -36,7 +36,7 @@ BundleDirCache::BundleDirCache() {
_budleDirCache[fileId].bundleTable = NULL;
_budleDirCache[fileId].fileName[0] = 0;
_budleDirCache[fileId].numFiles = 0;
- _budleDirCache[fileId].compressedBun = false;
+ _budleDirCache[fileId].isCompressed = false;
_budleDirCache[fileId].indexTable = NULL;
}
}
@@ -60,8 +60,8 @@ BundleDirCache::IndexNode *BundleDirCache::getIndexTable(int slot) {
return _budleDirCache[slot].indexTable;
}
-bool BundleDirCache::isCompressed(int slot) {
- return _budleDirCache[slot].compressedBun;
+bool BundleDirCache::isSndDataExtComp(int slot) {
+ return _budleDirCache[slot].isCompressed;
}
int BundleDirCache::matchFile(const char *filename) {
@@ -93,7 +93,7 @@ int BundleDirCache::matchFile(const char *filename) {
tag = file.readUint32BE();
if (tag == MKID_BE('LB23'))
- _budleDirCache[freeSlot].compressedBun = true;
+ _budleDirCache[freeSlot].isCompressed = true;
offset = file.readUint32BE();
strcpy(_budleDirCache[freeSlot].fileName, filename);
@@ -146,10 +146,10 @@ BundleMgr::BundleMgr(BundleDirCache *cache) {
_compTable = NULL;
_numFiles = 0;
_numCompItems = 0;
- _curSample = -1;
+ _curSampleId = -1;
_fileBundleId = -1;
_file = new ScummFile();
- _compInput = NULL;
+ _compInputBuff = NULL;
}
BundleMgr::~BundleMgr() {
@@ -187,7 +187,7 @@ bool BundleMgr::open(const char *filename, bool &compressed, bool errorFlag) {
int slot = _cache->matchFile(filename);
assert(slot != -1);
- compressed = _cache->isCompressed(slot);
+ compressed = _cache->isSndDataExtComp(slot);
_numFiles = _cache->getNumFiles(slot);
assert(_numFiles);
_bundleTable = _cache->getTable(slot);
@@ -209,11 +209,11 @@ void BundleMgr::close() {
_compTableLoaded = false;
_lastBlock = -1;
_outputSize = 0;
- _curSample = -1;
+ _curSampleId = -1;
free(_compTable);
_compTable = NULL;
- free(_compInput);
- _compInput = NULL;
+ free(_compInputBuff);
+ _compInputBuff = NULL;
}
}
@@ -241,19 +241,19 @@ bool BundleMgr::loadCompTable(int32 index) {
maxSize = _compTable[i].size;
}
// CMI hack: one more byte at the end of input buffer
- _compInput = (byte *)malloc(maxSize + 1);
- assert(_compInput);
+ _compInputBuff = (byte *)malloc(maxSize + 1);
+ assert(_compInputBuff);
return true;
}
-int32 BundleMgr::decompressSampleByCurIndex(int32 offset, int32 size, byte **comp_final, int header_size, bool header_outside) {
- return decompressSampleByIndex(_curSample, offset, size, comp_final, header_size, header_outside);
+int32 BundleMgr::decompressSampleByCurIndex(int32 offset, int32 size, byte **compFinal, int headerSize, bool headerOutside) {
+ return decompressSampleByIndex(_curSampleId, offset, size, compFinal, headerSize, headerOutside);
}
-int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size, byte **comp_final, int header_size, bool header_outside) {
- int32 i, final_size, output_size;
- int skip, first_block, last_block;
+int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size, byte **compFinal, int headerSize, bool headerOutside) {
+ int32 i, finalSize, outputSize;
+ int skip, firstBlock, lastBlock;
assert(0 <= index && index < _numFiles);
@@ -262,10 +262,10 @@ int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size,
return 0;
}
- if (_curSample == -1)
- _curSample = index;
+ if (_curSampleId == -1)
+ _curSampleId = index;
- assert(_curSample == index);
+ assert(_curSampleId == index);
if (!_compTableLoaded) {
_compTableLoaded = loadCompTable(index);
@@ -273,54 +273,54 @@ int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size,
return 0;
}
- first_block = (offset + header_size) / 0x2000;
- last_block = (offset + header_size + size - 1) / 0x2000;
+ firstBlock = (offset + headerSize) / 0x2000;
+ lastBlock = (offset + headerSize + size - 1) / 0x2000;
// Clip last_block by the total number of blocks (= "comp items")
- if ((last_block >= _numCompItems) && (_numCompItems > 0))
- last_block = _numCompItems - 1;
+ if ((lastBlock >= _numCompItems) && (_numCompItems > 0))
+ lastBlock = _numCompItems - 1;
- int32 blocks_final_size = 0x2000 * (1 + last_block - first_block);
- *comp_final = (byte *)malloc(blocks_final_size);
- assert(*comp_final);
- final_size = 0;
+ int32 blocksFinalSize = 0x2000 * (1 + lastBlock - firstBlock);
+ *compFinal = (byte *)malloc(blocksFinalSize);
+ assert(*compFinal);
+ finalSize = 0;
- skip = (offset + header_size) % 0x2000;
+ skip = (offset + headerSize) % 0x2000;
- for (i = first_block; i <= last_block; i++) {
+ for (i = firstBlock; i <= lastBlock; i++) {
if (_lastBlock != i) {
// CMI hack: one more zero byte at the end of input buffer
- _compInput[_compTable[i].size] = 0;
+ _compInputBuff[_compTable[i].size] = 0;
_file->seek(_bundleTable[index].offset + _compTable[i].offset, SEEK_SET);
- _file->read(_compInput, _compTable[i].size);
- _outputSize = BundleCodecs::decompressCodec(_compTable[i].codec, _compInput, _compOutput, _compTable[i].size);
+ _file->read(_compInputBuff, _compTable[i].size);
+ _outputSize = BundleCodecs::decompressCodec(_compTable[i].codec, _compInputBuff, _compOutputBuff, _compTable[i].size);
if (_outputSize > 0x2000) {
error("_outputSize: %d", _outputSize);
}
_lastBlock = i;
}
- output_size = _outputSize;
+ outputSize = _outputSize;
- if (header_outside) {
- output_size -= skip;
+ if (headerOutside) {
+ outputSize -= skip;
} else {
- if ((header_size != 0) && (skip >= header_size))
- output_size -= skip;
+ if ((headerSize != 0) && (skip >= headerSize))
+ outputSize -= skip;
}
- if ((output_size + skip) > 0x2000) // workaround
- output_size -= (output_size + skip) - 0x2000;
+ if ((outputSize + skip) > 0x2000) // workaround
+ outputSize -= (outputSize + skip) - 0x2000;
- if (output_size > size)
- output_size = size;
+ if (outputSize > size)
+ outputSize = size;
- assert(final_size + output_size <= blocks_final_size);
+ assert(finalSize + outputSize <= blocksFinalSize);
- memcpy(*comp_final + final_size, _compOutput + skip, output_size);
- final_size += output_size;
+ memcpy(*compFinal + finalSize, _compOutputBuff + skip, outputSize);
+ finalSize += outputSize;
- size -= output_size;
+ size -= outputSize;
assert(size >= 0);
if (size == 0)
break;
@@ -328,7 +328,7 @@ int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size,
skip = 0;
}
- return final_size;
+ return finalSize;
}
int32 BundleMgr::decompressSampleByName(const char *name, int32 offset, int32 size, byte **comp_final, bool header_outside) {
diff --git a/engines/scumm/imuse_digi/dimuse_bndmgr.h b/engines/scumm/imuse_digi/dimuse_bndmgr.h
index ba044a24ed..65360d8ba4 100644
--- a/engines/scumm/imuse_digi/dimuse_bndmgr.h
+++ b/engines/scumm/imuse_digi/dimuse_bndmgr.h
@@ -51,7 +51,7 @@ private:
char fileName[20];
AudioTable *bundleTable;
int32 numFiles;
- bool compressedBun;
+ bool isCompressed;
IndexNode *indexTable;
} _budleDirCache[4];
@@ -63,7 +63,7 @@ public:
AudioTable *getTable(int slot);
IndexNode *getIndexTable(int slot);
int32 getNumFiles(int slot);
- bool isCompressed(int slot);
+ bool isSndDataExtComp(int slot);
};
class BundleMgr {
@@ -80,14 +80,15 @@ private:
BundleDirCache::AudioTable *_bundleTable;
BundleDirCache::IndexNode *_indexTable;
CompTable *_compTable;
+
int _numFiles;
int _numCompItems;
- int _curSample;
+ int _curSampleId;
BaseScummFile *_file;
bool _compTableLoaded;
int _fileBundleId;
- byte _compOutput[0x2000];
- byte *_compInput;
+ byte _compOutputBuff[0x2000];
+ byte *_compInputBuff;
int _outputSize;
int _lastBlock;
@@ -98,19 +99,19 @@ public:
BundleMgr(BundleDirCache *_cache);
~BundleMgr();
- bool open(const char *filename, bool &compressed, bool errorFlag=false);
+ bool open(const char *filename, bool &compressed, bool errorFlag = false);
void close();
Common::File *getFile(const char *filename, int32 &offset, int32 &size);
- int32 decompressSampleByName(const char *name, int32 offset, int32 size, byte **comp_final, bool header_outside);
- int32 decompressSampleByIndex(int32 index, int32 offset, int32 size, byte **comp_final, int header_size, bool header_outside);
- int32 decompressSampleByCurIndex(int32 offset, int32 size, byte **comp_final, int header_size, bool header_outside);
+ int32 decompressSampleByName(const char *name, int32 offset, int32 size, byte **compFinal, bool headerOutside);
+ int32 decompressSampleByIndex(int32 index, int32 offset, int32 size, byte **compFinal, int header_size, bool headerOutside);
+ int32 decompressSampleByCurIndex(int32 offset, int32 size, byte **compFinal, int headerSize, bool headerOutside);
};
namespace BundleCodecs {
uint32 decode12BitsSample(const byte *src, byte **dst, uint32 size);
void initializeImcTables();
-int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 input_size);
+int32 decompressCodec(int32 codec, byte *compInput, byte *compOutput, int32 inputSize);
} // End of namespace BundleCodecs
diff --git a/engines/scumm/imuse_digi/dimuse_codecs.cpp b/engines/scumm/imuse_digi/dimuse_codecs.cpp
index 601bfddbe9..17082f5256 100644
--- a/engines/scumm/imuse_digi/dimuse_codecs.cpp
+++ b/engines/scumm/imuse_digi/dimuse_codecs.cpp
@@ -188,51 +188,51 @@ static int32 compDecode(byte *src, byte *dst) {
}
#undef NextBit
-int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 input_size) {
- int32 output_size, channels;
+int32 decompressCodec(int32 codec, byte *compInput, byte *compOutput, int32 inputSize) {
+ int32 outputSize, channels;
int32 offset1, offset2, offset3, length, k, c, s, j, r, t, z;
byte *src, *t_table, *p, *ptr;
byte t_tmp1, t_tmp2;
switch (codec) {
case 0:
- memcpy(comp_output, comp_input, input_size);
- output_size = input_size;
+ memcpy(compOutput, compInput, inputSize);
+ outputSize = inputSize;
break;
case 1:
- output_size = compDecode(comp_input, comp_output);
+ outputSize = compDecode(compInput, compOutput);
break;
case 2:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 1; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
break;
case 3:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
break;
case 4:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 0;
if (length > 0) {
c = -12;
@@ -258,23 +258,23 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
}
offset1 = ((length - 1) * 3) >> 1;
t_table[offset1 + 1] = (t_table[offset1 + 1]) | (src[length - 1] & 0xf0);
- memcpy(src, t_table, output_size);
+ memcpy(src, t_table, outputSize);
free(t_table);
break;
case 5:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 1;
c = 0;
s = 12;
@@ -300,29 +300,29 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
j++;
} while (k < t);
}
- memcpy(src, t_table, output_size);
+ memcpy(src, t_table, outputSize);
free(t_table);
break;
case 6:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 0;
c = 0;
j = 0;
s = -12;
- t_table[0] = src[output_size - 1];
- t_table[output_size - 1] = src[length - 1];
+ t_table[0] = src[outputSize - 1];
+ t_table[outputSize - 1] = src[length - 1];
t = length - 1;
if (t > 0) {
do {
@@ -343,26 +343,26 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
j++;
} while (k < t);
}
- memcpy(src, t_table, output_size);
+ memcpy(src, t_table, outputSize);
free(t_table);
break;
case 10:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- memcpy(t_table, p, output_size);
+ memcpy(t_table, p, outputSize);
- offset1 = output_size / 3;
+ offset1 = outputSize / 3;
offset2 = offset1 << 1;
offset3 = offset2;
- src = comp_output;
+ src = compOutput;
while (offset1--) {
offset2 -= 2;
@@ -371,8 +371,8 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
t_table[offset2 + 1] = src[offset3];
}
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 0;
if (length > 0) {
c = -12;
@@ -402,21 +402,21 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
break;
case 11:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- memcpy(t_table, p, output_size);
+ memcpy(t_table, p, outputSize);
- offset1 = output_size / 3;
+ offset1 = outputSize / 3;
offset2 = offset1 << 1;
offset3 = offset2;
- src = comp_output;
+ src = compOutput;
while (offset1--) {
offset2 -= 2;
@@ -425,8 +425,8 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
t_table[offset2 + 1] = src[offset3];
}
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 1;
c = 0;
s = 12;
@@ -456,21 +456,21 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
break;
case 12:
- output_size = compDecode(comp_input, comp_output);
- p = comp_output;
- for (z = 2; z < output_size; z++)
+ outputSize = compDecode(compInput, compOutput);
+ p = compOutput;
+ for (z = 2; z < outputSize; z++)
p[z] += p[z - 1];
- for (z = 1; z < output_size; z++)
+ for (z = 1; z < outputSize; z++)
p[z] += p[z - 1];
- t_table = (byte *)malloc(output_size);
+ t_table = (byte *)malloc(outputSize);
assert(t_table);
- memcpy(t_table, p, output_size);
+ memcpy(t_table, p, outputSize);
- offset1 = output_size / 3;
+ offset1 = outputSize / 3;
offset2 = offset1 << 1;
offset3 = offset2;
- src = comp_output;
+ src = compOutput;
while (offset1--) {
offset2 -= 2;
@@ -479,13 +479,13 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
t_table[offset2 + 1] = src[offset3];
}
- src = comp_output;
- length = (output_size << 3) / 12;
+ src = compOutput;
+ length = (outputSize << 3) / 12;
k = 0;
c = 0;
s = -12;
- src[0] = t_table[output_size - 1];
- src[output_size - 1] = t_table[length - 1];
+ src[0] = t_table[outputSize - 1];
+ src[outputSize - 1] = t_table[length - 1];
t = length - 1;
if (t > 0) {
do {
@@ -536,9 +536,9 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
// We only support mono and stereo
assert(channels == 1 || channels == 2);
- src = comp_input;
- dst = comp_output;
- output_size = 0x2000;
+ src = compInput;
+ dst = compOutput;
+ outputSize = 0x2000;
outputSamplesLeft = 0x1000;
// Every data packet contains 0x2000 bytes of audio data
@@ -641,11 +641,11 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in
default:
error("BundleCodecs::decompressCodec() Unknown codec %d!", (int)codec);
- output_size = 0;
+ outputSize = 0;
break;
}
- return output_size;
+ return outputSize;
}
} // End of namespace BundleCodecs
diff --git a/engines/scumm/imuse_digi/dimuse_music.cpp b/engines/scumm/imuse_digi/dimuse_music.cpp
index ad734c7311..bdfc4bf4fa 100644
--- a/engines/scumm/imuse_digi/dimuse_music.cpp
+++ b/engines/scumm/imuse_digi/dimuse_music.cpp
@@ -110,7 +110,7 @@ void IMuseDigital::setDigMusicSequence(int seqId) {
_nextSeqToPlay = 0;
_attributes[DIG_SEQ_OFFSET + num] = 1;
} else {
- if ((_digSeqMusicTable[_curMusicSeq].opcode == 4) || (_digSeqMusicTable[_curMusicSeq].opcode == 6)) {
+ if ((_digSeqMusicTable[_curMusicSeq].transitionType == 4) || (_digSeqMusicTable[_curMusicSeq].transitionType == 6)) {
_nextSeqToPlay = num;
return;
} else {
@@ -174,7 +174,7 @@ void IMuseDigital::playDigMusic(const char *songName, const imuseDigTable *table
fadeOutMusic(120);
- switch (table->opcode) {
+ switch (table->transitionType) {
case 0:
case 5:
case 6:
@@ -252,7 +252,7 @@ void IMuseDigital::setComiMusicSequence(int seqId) {
playComiMusic(_comiSeqMusicTable[num].name, &_comiSeqMusicTable[num], 0, true);
_nextSeqToPlay = 0;
} else {
- if ((_comiSeqMusicTable[_curMusicSeq].opcode == 4) || (_comiSeqMusicTable[_curMusicSeq].opcode == 6)) {
+ if ((_comiSeqMusicTable[_curMusicSeq].transitionType == 4) || (_comiSeqMusicTable[_curMusicSeq].transitionType == 6)) {
_nextSeqToPlay = num;
return;
} else {
@@ -295,7 +295,7 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
}
}
- switch (table->opcode) {
+ switch (table->transitionType) {
case 0:
fadeOutMusic(120);
break;
@@ -333,7 +333,7 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
startMusic(table->filename, table->soundId, 0, 127);
return;
}
- if (table->opcode == 12) {
+ if (table->transitionType == 12) {
startMusic(table->filename, table->soundId, table->hookId, 127);
} else {
startMusic(table->filename, table->soundId, hookId, 127);
@@ -355,7 +355,7 @@ void IMuseDigital::setFtMusicState(int stateId) {
if (stateId == 0)
playFtMusic(NULL, 0, 0);
else
- playFtMusic(_ftStateMusicTable[stateId].audioName, _ftStateMusicTable[stateId].opcode, _ftStateMusicTable[stateId].volume);
+ playFtMusic(_ftStateMusicTable[stateId].audioName, _ftStateMusicTable[stateId].transitionType, _ftStateMusicTable[stateId].volume);
}
_curMusicState = stateId;
@@ -374,11 +374,11 @@ void IMuseDigital::setFtMusicSequence(int seqId) {
if (_curMusicState == 0)
playFtMusic(NULL, 0, 0);
else {
- playFtMusic(_ftStateMusicTable[_curMusicState].audioName, _ftStateMusicTable[_curMusicState].opcode, _ftStateMusicTable[_curMusicState].volume);
+ playFtMusic(_ftStateMusicTable[_curMusicState].audioName, _ftStateMusicTable[_curMusicState].transitionType, _ftStateMusicTable[_curMusicState].volume);
}
} else {
int seq = (seqId - 1) * 4;
- playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].transitionType, _ftSeqMusicTable[seq].volume);
}
_curMusicSeq = seqId;
@@ -401,7 +401,7 @@ void IMuseDigital::setFtMusicCuePoint(int cueId) {
playFtMusic(NULL, 0, 0);
else {
int seq = ((_curMusicSeq - 1) * 4) + cueId;
- playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].transitionType, _ftSeqMusicTable[seq].volume);
}
_curMusicCue = cueId;
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index a61fbcfb24..186d04483e 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -176,17 +176,17 @@ void IMuseDigital::flushTracks() {
// appendable stream. We play it nice and wait till all of it
// played.
if (track->stream->endOfStream()) {
- _mixer->stopHandle(track->handle);
+ _mixer->stopHandle(track->mixChanHandle);
delete track->stream;
track->stream = NULL;
_sound->closeSound(track->soundHandle);
track->soundHandle = NULL;
track->used = false;
}
- } else if (track->stream2) {
- _mixer->stopHandle(track->handle);
- delete track->stream2;
- track->stream2 = NULL;
+ } else if (track->streamSou) {
+ _mixer->stopHandle(track->mixChanHandle);
+ delete track->streamSou;
+ track->streamSou = NULL;
track->used = false;
}
}
@@ -273,7 +273,7 @@ int32 IMuseDigital::getPosInMs(int soundId) {
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
- int32 pos = (5 * (track->dataOffset + track->regionOffset)) / (track->iteration / 200);
+ int32 pos = (5 * (track->dataOffset + track->regionOffset)) / (track->feedSize / 200);
return pos;
}
}
@@ -287,7 +287,7 @@ int IMuseDigital::getSoundStatus(int sound) const {
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if (track->soundId == sound) {
- if ((track->stream2 && _mixer->isSoundHandleActive(track->handle)) ||
+ if ((track->streamSou && _mixer->isSoundHandleActive(track->mixChanHandle)) ||
(track->stream && track->used && !track->readyToRemove)) {
return 1;
}
@@ -393,15 +393,15 @@ void IMuseDigital::stopAllSounds() {
// as we are protected by a mutex, and this method is never called
// from IMuseDigital::callback either.
if (track->stream) {
- _mixer->stopHandle(track->handle);
+ _mixer->stopHandle(track->mixChanHandle);
delete track->stream;
track->stream = NULL;
_sound->closeSound(track->soundHandle);
track->soundHandle = NULL;
- } else if (track->stream2) {
- _mixer->stopHandle(track->handle);
- delete track->stream2;
- track->stream2 = NULL;
+ } else if (track->streamSou) {
+ _mixer->stopHandle(track->mixChanHandle);
+ delete track->streamSou;
+ track->streamSou = NULL;
}
// Mark the track as unused
diff --git a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
index 61c5fece2a..ce963eaeea 100644
--- a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
+++ b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
@@ -465,7 +465,7 @@ bool ImuseDigiSndMgr::checkForProperHandle(soundStruct *soundHandle) {
return false;
}
-bool ImuseDigiSndMgr::isCompressed(soundStruct *soundHandle) {
+bool ImuseDigiSndMgr::isSndDataExtComp(soundStruct *soundHandle) {
assert(checkForProperHandle(soundHandle));
return soundHandle->compressed;
}
diff --git a/engines/scumm/imuse_digi/dimuse_sndmgr.h b/engines/scumm/imuse_digi/dimuse_sndmgr.h
index 2bdaed446b..5d2f8c88ba 100644
--- a/engines/scumm/imuse_digi/dimuse_sndmgr.h
+++ b/engines/scumm/imuse_digi/dimuse_sndmgr.h
@@ -120,7 +120,7 @@ public:
void closeSound(soundStruct *soundHandle);
soundStruct *cloneSound(soundStruct *soundHandle);
- bool isCompressed(soundStruct *soundHandle);
+ bool isSndDataExtComp(soundStruct *soundHandle);
int getFreq(soundStruct *soundHandle);
int getBits(soundStruct *soundHandle);
int getChannels(soundStruct *soundHandle);
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 6277cfdf01..75dde5e60f 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -52,8 +52,8 @@ int IMuseDigital::allocSlot(int priority) {
for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if (track->used && !track->toBeRemoved &&
- (lowest_priority > track->priority) && !track->stream2) {
- lowest_priority = track->priority;
+ (lowest_priority > track->soundPriority) && !track->streamSou) {
+ lowest_priority = track->soundPriority;
trackId = l;
}
}
@@ -98,15 +98,15 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
track->volFadeDelay = 0;
track->volFadeUsed = false;
track->soundId = soundId;
- track->started = false;
+ track->mixerStreamRunning = false;
track->volGroupId = volGroupId;
track->curHookId = hookId;
- track->priority = priority;
+ track->soundPriority = priority;
track->curRegion = -1;
track->dataOffset = 0;
track->regionOffset = 0;
- track->mod = 0;
- track->flags = 0;
+ track->dataMod12Bit = 0;
+ track->mixerFlags = 0;
track->toBeRemoved = false;
track->readyToRemove = false;
track->soundType = soundType;
@@ -114,19 +114,19 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
int bits = 0, freq = 0, channels = 0;
if (input) {
- track->iteration = 0;
- track->souStream = true;
+ track->feedSize = 0;
+ track->souStreamUsed = true;
track->soundName[0] = 0;
track->soundHandle = NULL;
} else {
- track->souStream = false;
+ track->souStreamUsed = false;
strcpy(track->soundName, soundName);
track->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId, -1);
if (track->soundHandle == NULL)
return;
- track->compressed = _sound->isCompressed(track->soundHandle);
+ track->sndDataExtComp = _sound->isSndDataExtComp(track->soundHandle);
bits = _sound->getBits(track->soundHandle);
channels = _sound->getChannels(track->soundHandle);
@@ -145,28 +145,28 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
assert(channels == 1 || channels == 2);
assert(0 < freq && freq <= 65535);
- track->iteration = freq * channels;
+ track->feedSize = freq * channels;
if (channels == 2)
- track->flags = kFlagStereo | kFlagReverseStereo;
+ track->mixerFlags = kFlagStereo | kFlagReverseStereo;
if ((bits == 12) || (bits == 16)) {
- track->flags |= kFlag16Bits;
- track->iteration *= 2;
+ track->mixerFlags |= kFlag16Bits;
+ track->feedSize *= 2;
} else if (bits == 8) {
- track->flags |= kFlagUnsigned;
+ track->mixerFlags |= kFlagUnsigned;
} else
error("IMuseDigital::startSound(): Can't handle %d bit samples", bits);
#ifdef SCUMM_LITTLE_ENDIAN
- if (track->compressed)
- track->flags |= kFlagLittleEndian;
+ if (track->sndDataExtComp)
+ track->mixerFlags |= kFlagLittleEndian;
#endif
}
if (input) {
- track->stream2 = input;
+ track->streamSou = input;
track->stream = NULL;
- track->started = false;
+ track->mixerStreamRunning = false;
} else {
const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
const int vol = track->vol / 1000;
@@ -179,11 +179,10 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
if (track->volGroupId == 3)
type = Audio::Mixer::kMusicSoundType;
- // setup 1 second stream wrapped buffer
- track->stream2 = NULL;
- track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
- _mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false);
- track->started = true;
+ track->streamSou = NULL;
+ track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
+ _mixer->playInputStream(type, &track->mixChanHandle, track->stream, -1, vol, pan, false);
+ track->mixerStreamRunning = true;
}
track->used = true;
@@ -197,7 +196,7 @@ void IMuseDigital::setPriority(int soundId, int priority) {
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
- track->priority = priority;
+ track->soundPriority = priority;
}
}
}
@@ -358,11 +357,10 @@ IMuseDigital::Track *IMuseDigital::cloneToFadeOutTrack(const Track *track, int f
type = Audio::Mixer::kPlainSoundType;
break;
}
- fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), makeMixerFlags(fadeTrack->flags));
- _mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false);
+ fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), makeMixerFlags(fadeTrack->mixerFlags));
+ _mixer->playInputStream(type, &fadeTrack->mixChanHandle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false);
- // Mark the track as, uhh, used & started (surprise, surprise :)
- fadeTrack->started = true;
+ fadeTrack->mixerStreamRunning = true;
fadeTrack->used = true;
return fadeTrack;
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index 50307ebc57..2d7401fe57 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -85,29 +85,32 @@ void ScummEngine::parseEvents() {
else if (event.kbd.keycode == 's')
_res->resourceStats();
else
- _keyPressed = event.kbd.ascii; // Normal key press, pass on to the game.
+ _keyPressed = event.kbd; // Normal key press, pass on to the game.
} else if (event.kbd.flags & Common::KBD_ALT) {
- // The result must be 273 for Alt-W
- // because that's what MI2 looks for in
- // its "instant win" cheat.
- _keyPressed = event.kbd.keycode + 154;
- } else if (event.kbd.ascii == 315 && (_game.id == GID_CMI && !(_game.features & GF_DEMO))) {
- // FIXME: support in-game menu screen. For now, this remaps F1 to F5 in COMI
- _keyPressed = 319;
- } else if (event.kbd.ascii < 273 || event.kbd.ascii > 276 || _game.version >= 7) {
- // don't let game have arrow keys as we currently steal them
- // for keyboard cursor control
- // this fixes bug with up arrow (273) corresponding to
- // "instant win" cheat in MI2 mentioned above
- //
- // This is not applicable to Full Throttle as it processes keyboard
- // cursor control by itself. Also it fixes derby scene
- _keyPressed = event.kbd.ascii; // Normal key press, pass on to the game.
+ // Handle KBD_ALT combos. We know that the result must be 273 for Alt-W
+ // because that's what MI2 looks for in its "instant win" cheat.
+
+ // FIXME: Handle this specific property of MI2 inside processKeyboard ?
+ _keyPressed = event.kbd;
+ _keyPressed.ascii = event.kbd.keycode + 154;
+ } else {
+ // Normal key press, pass on to the game.
+ _keyPressed = event.kbd;
}
- if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD) {
- if (event.kbd.ascii >= 273 && event.kbd.ascii <= 276) {
- _keyPressed = event.kbd.ascii - 273 + 54;
+ if (event.kbd.keycode >= Common::KEYCODE_UP && event.kbd.keycode <= Common::KEYCODE_LEFT) {
+ if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD) {
+ _keyPressed = event.kbd;
+ _keyPressed.ascii = event.kbd.ascii - Common::KEYCODE_UP + 54;
+ } else if (_game.version < 7) {
+ // FIXME: Handle this specific property inside processKeyboard ?
+
+ // Don't let game see arrow keys. This fixes bug with up arrow (273)
+ // corresponding to the "instant win" cheat in MI2 mentioned above.
+ //
+ // This is not applicable to V7+ games, which need to see the arrow keys,
+ // too, else certain things (derby scene, asterorid lander) won't work.
+ _keyPressed.reset();
}
}
@@ -115,16 +118,16 @@ void ScummEngine::parseEvents() {
// Keyboard is controlled via variable
int _keyState = 0;
- if (event.kbd.ascii == 276) // Left
+ if (event.kbd.keycode == Common::KEYCODE_LEFT) // Left
_keyState = 1;
- if (event.kbd.ascii == 275) // Right
+ if (event.kbd.keycode == Common::KEYCODE_RIGHT) // Right
_keyState |= 2;
- if (event.kbd.ascii == 273) // Up
+ if (event.kbd.keycode == Common::KEYCODE_UP) // Up
_keyState |= 4;
- if (event.kbd.ascii == 274) // Down
+ if (event.kbd.keycode == Common::KEYCODE_DOWN) // Down
_keyState |= 8;
if (event.kbd.flags == Common::KBD_SHIFT)
@@ -136,10 +139,23 @@ void ScummEngine::parseEvents() {
VAR(VAR_KEY_STATE) = _keyState;
}
- if (_keyPressed >= 512)
- debugC(DEBUG_GENERAL, "_keyPressed > 512 (%d)", _keyPressed);
+ // FIXME: There is a discrepancy between EVENT_KEYDOWN and EVENT_KEYUP here:
+ // For EVENT_KEYDOWN, we use _keyPressed.keycode, which has potentially been
+ // modified, while for EVENT_KEYUP we use the unfiltered event.kbd.keycode.
+ // This could lead problems (like a key becoming 'stuck').
+
+ // FIXME #2: We are mixing ascii and keycode values here. We probably should
+ // be using keycodes, but at least INSANE checks for "Shift-V" by looking for
+ // the 'V' key being pressed. It would be easy to solve that by also storing the
+ // the modifier flags. However, since getKeyState() is also called by scripts,
+ // we have to be very careful with semantic changes.
+ // Nevertheless, it's bad to rely on "ascii" holdoing keycode values for special
+ // keys (like the function keys), so this should be fixed.
+
+ if (_keyPressed.ascii >= 512)
+ debugC(DEBUG_GENERAL, "_keyPressed > 512 (%d)", _keyPressed.ascii);
else
- _keyDownMap[_keyPressed] = true;
+ _keyDownMap[_keyPressed.ascii] = true;
break;
case Common::EVENT_KEYUP:
@@ -194,11 +210,11 @@ void ScummEngine::parseEvents() {
// checking the gameid. Values are taken from script-14.
case Common::EVENT_WHEELDOWN:
- _keyPressed = 55;
+ _keyPressed = Common::KeyState(Common::KEYCODE_7, 55); // '7'
break;
case Common::EVENT_WHEELUP:
- _keyPressed = 54;
+ _keyPressed = Common::KeyState(Common::KEYCODE_6, 54); // '6'
break;
case Common::EVENT_QUIT:
@@ -218,20 +234,20 @@ void ScummEngine::parseEvents() {
void ScummEngine_v90he::clearClickedStatus() {
ScummEngine::clearClickedStatus();
if (_game.heversion >= 98) {
- _logicHE->processKeyStroke(_keyPressed);
+ _logicHE->processKeyStroke(_keyPressed.ascii);
}
}
void ScummEngine_v90he::processInput() {
if (_game.heversion >= 98) {
- _logicHE->processKeyStroke(_keyPressed);
+ _logicHE->processKeyStroke(_keyPressed.ascii);
}
ScummEngine::processInput();
}
#endif
void ScummEngine::clearClickedStatus() {
- _keyPressed = 0;
+ _keyPressed.reset();
_mouseAndKeyboardStat = 0;
_leftBtnPressed &= ~msClicked;
@@ -240,15 +256,16 @@ void ScummEngine::clearClickedStatus() {
void ScummEngine_v0::processInput() {
// F1 - F3
- if (_keyPressed >= 315 && _keyPressed <= 317) {
- switchActor(_keyPressed - 315);
+ if (_keyPressed.keycode >= Common::KEYCODE_F1 && _keyPressed.keycode <= Common::KEYCODE_F3) {
+ switchActor(_keyPressed.keycode - Common::KEYCODE_F1);
}
ScummEngine::processInput();
}
+
void ScummEngine::processInput() {
- int lastKeyHit = _keyPressed;
- _keyPressed = 0;
+ Common::KeyState lastKeyHit = _keyPressed;
+ _keyPressed.reset();
//
// Clip the mouse coordinates, and compute _virtualMouse.x (and clip it, too)
@@ -278,30 +295,30 @@ void ScummEngine::processInput() {
_mouseAndKeyboardStat = 0;
// Interpret 'return' as left click and 'tab' as right click
- if (lastKeyHit && _cursor.state > 0) {
- if (lastKeyHit == 9) {
+ if (lastKeyHit.keycode && _cursor.state > 0) {
+ if (lastKeyHit.keycode == Common::KEYCODE_TAB) {
_mouseAndKeyboardStat = MBS_RIGHT_CLICK;
- lastKeyHit = 0;
- } else if (lastKeyHit == 13) {
+ lastKeyHit.reset();
+ } else if (lastKeyHit.keycode == Common::KEYCODE_RETURN) {
_mouseAndKeyboardStat = MBS_LEFT_CLICK;
- lastKeyHit = 0;
+ lastKeyHit.reset();
}
}
- if (_leftBtnPressed & msClicked && _rightBtnPressed & msClicked && _game.version >= 4) {
+ if ((_leftBtnPressed & msClicked) && (_rightBtnPressed & msClicked) && _game.version >= 4) {
// Pressing both mouse buttons is treated as if you pressed
- // the cutscene exit key (i.e. ESC in most games). That mimicks
+ // the cutscene exit key (ESC) in V4+ games. That mimicks
// the behaviour of the original engine where pressing both
// mouse buttons also skips the current cutscene.
_mouseAndKeyboardStat = 0;
- lastKeyHit = (uint)VAR(VAR_CUTSCENEEXIT_KEY);
- } else if (_rightBtnPressed & msClicked && (_game.version <= 3 && _game.id != GID_LOOM)) {
+ lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE);
+ } else if ((_rightBtnPressed & msClicked) && (_game.version <= 3 && _game.id != GID_LOOM)) {
// Pressing right mouse button is treated as if you pressed
- // the cutscene exit key (i.e. ESC in most games). That mimicks
+ // the cutscene exit key (ESC) in V0-V3 games. That mimicks
// the behaviour of the original engine where pressing right
// mouse button also skips the current cutscene.
_mouseAndKeyboardStat = 0;
- lastKeyHit = (VAR_CUTSCENEEXIT_KEY != 0xFF) ? (uint)VAR(VAR_CUTSCENEEXIT_KEY) : 27;
+ lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE);
} else if (_leftBtnPressed & msClicked) {
_mouseAndKeyboardStat = MBS_LEFT_CLICK;
} else if (_rightBtnPressed & msClicked) {
@@ -322,33 +339,40 @@ void ScummEngine::processInput() {
_rightBtnPressed &= ~msClicked;
#ifdef _WIN32_WCE
- if (lastKeyHit == KEY_ALL_SKIP) {
+ if (lastKeyHit.ascii == KEY_ALL_SKIP) {
// Skip talk
- if (VAR_TALKSTOP_KEY != 0xFF && _talkDelay > 0)
- lastKeyHit = (uint)VAR(VAR_TALKSTOP_KEY);
- else
- // Escape
- lastKeyHit = 27;
+ if (VAR_TALKSTOP_KEY != 0xFF && _talkDelay > 0) {
+ lastKeyHit = Common::KeyState(Common::KEYCODE_PERIOD);
+ } else {
+ lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE);
+ }
}
#endif
- if (!lastKeyHit)
+ if (!lastKeyHit.ascii)
return;
processKeyboard(lastKeyHit);
}
#ifndef DISABLE_SCUMM_7_8
-void ScummEngine_v8::processKeyboard(int lastKeyHit) {
- // Alt-F5 brings up the original save/load dialog
+void ScummEngine_v8::processKeyboard(Common::KeyState lastKeyHit) {
- if (lastKeyHit == 440 && !(_game.features & GF_DEMO)) {
- lastKeyHit = 315;
+ if (!(_game.features & GF_DEMO)) {
+ // F1 (the trigger for the original save/load dialog) is mapped to F5
+ if (lastKeyHit.keycode == Common::KEYCODE_F1 && lastKeyHit.flags == 0) {
+ lastKeyHit = Common::KeyState(Common::KEYCODE_F5, 319);
+ }
+
+ // Alt-F5 should bring up the original save/load dialog, so map it to F1.
+ if (lastKeyHit.keycode == Common::KEYCODE_F5 && lastKeyHit.flags == Common::KBD_ALT) {
+ lastKeyHit = Common::KeyState(Common::KEYCODE_F1, 315);
+ }
}
// If a key script was specified (a V8 feature), and it's trigger
- // key was pressed, run it.
- if (_keyScriptNo && (_keyScriptKey == lastKeyHit)) {
+ // key was pressed, run it. Usually used to display the built-in menu.
+ if (_keyScriptNo && (_keyScriptKey == lastKeyHit.ascii)) {
runScript(_keyScriptNo, 0, 0, 0);
return;
}
@@ -357,18 +381,18 @@ void ScummEngine_v8::processKeyboard(int lastKeyHit) {
ScummEngine_v7::processKeyboard(lastKeyHit);
}
-void ScummEngine_v7::processKeyboard(int lastKeyHit) {
+void ScummEngine_v7::processKeyboard(Common::KeyState lastKeyHit) {
+ const bool cutsceneExitKeyEnabled = (VAR_CUTSCENEEXIT_KEY == 0xFF || VAR(VAR_CUTSCENEEXIT_KEY) != 0);
- // COMI version string is hard coded in the engine, hence we don't
- // invoke versionDialog here (it would only show nonsense).
- // Dig/FT version strings are partly hard coded, too.
- if (_game.version == 7 && lastKeyHit == VAR(VAR_VERSION_KEY)) {
+ // VAR_VERSION_KEY (usually ctrl-v) is used in COMI, Dig and FT to trigger
+ // a version dialog, unless VAR_VERSION_KEY is set to 0. However, the COMI
+ // version string is hard coded in the engine, hence we don't invoke
+ // versionDialog for it. Dig/FT version strings are partly hard coded, too.
+ if (_game.id != GID_CMI && 0 != VAR(VAR_VERSION_KEY) &&
+ lastKeyHit.keycode == Common::KEYCODE_v && lastKeyHit.flags == Common::KBD_CTRL) {
versionDialog();
- return;
- }
-#ifndef _WIN32_WCE
- if (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY)) {
+ } else if (cutsceneExitKeyEnabled && lastKeyHit.keycode == Common::KEYCODE_ESCAPE) {
// Skip cutscene (or active SMUSH video).
if (_smushActive) {
if (_game.id == GID_FT)
@@ -379,62 +403,30 @@ void ScummEngine_v7::processKeyboard(int lastKeyHit) {
if (!_smushActive || _smushVideoShouldFinish)
abortCutscene();
- _mouseAndKeyboardStat = lastKeyHit;
- return;
- }
-#else
- // On WinCE we've also got one special for skipping cutscenes or dialog, whatever is appropriate
- // Since _smushActive is not a member of the base case class ScummEngine::, we detect here if we're
- // playing a cutscene and skip it; else we forward the keystroke through to ScummEngine::processInput.
- if (lastKeyHit == KEY_ALL_SKIP || (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY))) {
- int bail = 1;
- if (_smushActive) {
- if (_game.id == GID_FT) {
- _insane->escapeKeyHandler();
- bail = 0;
- } else
- _smushVideoShouldFinish = true;
- }
- if ((!_smushActive && vm.cutScenePtr[vm.cutSceneStackPointer]) || _smushVideoShouldFinish) {
- abortCutscene();
- bail = 0;
- }
- if (!bail) {
- _mouseAndKeyboardStat = (VAR_CUTSCENEEXIT_KEY != 0xFF) ? (uint)VAR(VAR_CUTSCENEEXIT_KEY) : 27;
- return;
- }
-
- }
-#endif
+ _mouseAndKeyboardStat = Common::ASCII_ESCAPE;
- // Fall back to V6 behavior
- ScummEngine_v6::processKeyboard(lastKeyHit);
+ } else {
+ // Fall back to V6 behavior
+ ScummEngine_v6::processKeyboard(lastKeyHit);
+ }
}
#endif
-void ScummEngine_v6::processKeyboard(int lastKeyHit) {
- if (lastKeyHit == 20) {
- // FIXME: What key is '20' supposed to indicate? I can't trigger
- // it with my keyboard, it seems...
- char buf[256];
-
- _voiceMode++;
- if (_voiceMode == 3)
- _voiceMode = 0;
+void ScummEngine_v6::processKeyboard(Common::KeyState lastKeyHit) {
+ if (lastKeyHit.keycode == Common::KEYCODE_t && lastKeyHit.flags == Common::KBD_CTRL) {
+ SubtitleSettingsDialog dialog(this, _voiceMode);
+ _voiceMode = runDialog(dialog);
switch (_voiceMode) {
case 0:
- sprintf(buf, "Speech Only");
ConfMan.setBool("speech_mute", false);
ConfMan.setBool("subtitles", false);
break;
case 1:
- sprintf(buf, "Speech and Subtitles");
ConfMan.setBool("speech_mute", false);
ConfMan.setBool("subtitles", true);
break;
case 2:
- sprintf(buf, "Subtitles Only");
ConfMan.setBool("speech_mute", true);
ConfMan.setBool("subtitles", true);
break;
@@ -443,8 +435,6 @@ void ScummEngine_v6::processKeyboard(int lastKeyHit) {
if (VAR_VOICE_MODE != 0xFF)
VAR(VAR_VOICE_MODE) = _voiceMode;
- GUI::TimedMessageDialog dialog(buf, 1500);
- runDialog(dialog);
return;
}
@@ -452,56 +442,31 @@ void ScummEngine_v6::processKeyboard(int lastKeyHit) {
ScummEngine::processKeyboard(lastKeyHit);
}
-void ScummEngine_v2::processKeyboard(int lastKeyHit) {
- if (lastKeyHit == ' ') { // space
- pauseGame();
- } else if (lastKeyHit == 314+5) { // F5
- mainMenuDialog();
- } else if (lastKeyHit == 314+8) { // F8
- confirmRestartDialog();
- } else {
-
- if ((_game.version == 0 && lastKeyHit == 27) ||
- (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == 314+VAR(VAR_CUTSCENEEXIT_KEY))) {
- abortCutscene();
- } else {
- // Fall back to default behavior
- ScummEngine::processKeyboard(lastKeyHit);
- }
+void ScummEngine_v2::processKeyboard(Common::KeyState lastKeyHit) {
+ // Fall back to default behavior
+ ScummEngine::processKeyboard(lastKeyHit);
- // Alt-F5 brings up the original save/load dialog
+ // Store the input type. So far we can't distinguish
+ // between 1, 3 and 5.
+ // 1) Verb 2) Scene 3) Inv. 4) Key
+ // 5) Sentence Bar
- if (lastKeyHit == 440) {
- lastKeyHit = 314+5;
- }
-
- // Store the input type. So far we can't distinguish
- // between 1, 3 and 5.
- // 1) Verb 2) Scene 3) Inv. 4) Key
- // 5) Sentence Bar
-
- if (VAR_KEYPRESS != 0xFF && lastKeyHit) { // Key Input
- if (315 <= lastKeyHit && lastKeyHit < 315+12) {
- // Convert F-Keys for V1/V2 games (they start at 1 instead of at 315)
- VAR(VAR_KEYPRESS) = lastKeyHit - 314;
- } else {
- VAR(VAR_KEYPRESS) = lastKeyHit;
- }
+ if (VAR_KEYPRESS != 0xFF && _mouseAndKeyboardStat) { // Key Input
+ if (315 <= _mouseAndKeyboardStat && _mouseAndKeyboardStat <= 323) {
+ // Convert F-Keys for V1/V2 games (they start at 1)
+ VAR(VAR_KEYPRESS) = _mouseAndKeyboardStat - 314;
+ } else {
+ VAR(VAR_KEYPRESS) = _mouseAndKeyboardStat;
}
}
}
-void ScummEngine_v3::processKeyboard(int lastKeyHit) {
- if (_game.platform == Common::kPlatformFMTowns && lastKeyHit == 314+8) { // F8
- confirmRestartDialog();
- } else {
- // Fall back to default behavior
- ScummEngine::processKeyboard(lastKeyHit);
- }
-
- // i brings up an IQ dialog in Indy3
+void ScummEngine_v3::processKeyboard(Common::KeyState lastKeyHit) {
+ // Fall back to default behavior
+ ScummEngine::processKeyboard(lastKeyHit);
- if (lastKeyHit == 'i' && _game.id == GID_INDY3) {
+ // 'i' brings up an IQ dialog in Indy3
+ if (lastKeyHit.ascii == 'i' && _game.id == GID_INDY3) {
// SCUMM var 244 is the episode score
// and var 245 is the series score
char text[50];
@@ -520,22 +485,31 @@ void ScummEngine_v3::processKeyboard(int lastKeyHit) {
}
}
-void ScummEngine::processKeyboard(int lastKeyHit) {
- int saveloadkey;
-
+void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
+ // Enable the following five special keys conditionally:
+ bool restartKeyEnabled = (VAR_RESTART_KEY == 0xFF || VAR(VAR_RESTART_KEY) != 0);
+ bool pauseKeyEnabled = (VAR_PAUSE_KEY == 0xFF || VAR(VAR_PAUSE_KEY) != 0);
+ bool talkstopKeyEnabled = (VAR_TALKSTOP_KEY == 0xFF || VAR(VAR_TALKSTOP_KEY) != 0);
+ bool cutsceneExitKeyEnabled = (VAR_CUTSCENEEXIT_KEY == 0xFF || VAR(VAR_CUTSCENEEXIT_KEY) != 0);
+ bool mainmenuKeyEnabled = (VAR_MAINMENU_KEY == 0xFF || VAR(VAR_MAINMENU_KEY) != 0);
+
+ // In FM-TOWNS games F8 / restart is always enabled
+ if (_game.platform == Common::kPlatformFMTowns)
+ restartKeyEnabled = true;
+
+ // For games which use VAR_MAINMENU_KEY, disable the mainmenu key if
+ // requested by the scripts. We make an exception for COMI (i.e.
+ // forcefully always enable it there), as that always disables it.
+ if (_game.id == GID_CMI)
+ mainmenuKeyEnabled = true;
+
+/*
+ FIXME: We also used to force-enable F5 in Sam&Max and HE >= 72 games -- why?
if ((_game.version <= 3) || (_game.id == GID_SAMNMAX) || (_game.id == GID_CMI) || (_game.heversion >= 72))
- saveloadkey = 319; // F5
- else
- saveloadkey = VAR(VAR_MAINMENU_KEY);
-
- // Alt-F5 brings up the original save/load dialog.
+ mainmenuKeyEnabled = true;
+*/
- if (lastKeyHit == 440 && _game.version > 2 && _game.version < 8) {
- lastKeyHit = saveloadkey;
- saveloadkey = -1;
- }
-
- if (lastKeyHit == saveloadkey) {
+ if (mainmenuKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_F5 && lastKeyHit.flags == 0)) {
if (VAR_SAVELOAD_SCRIPT != 0xFF && _currentRoom != 0)
runScript(VAR(VAR_SAVELOAD_SCRIPT), 0, 0, 0);
@@ -544,57 +518,66 @@ void ScummEngine::processKeyboard(int lastKeyHit) {
if (VAR_SAVELOAD_SCRIPT != 0xFF && _currentRoom != 0)
runScript(VAR(VAR_SAVELOAD_SCRIPT2), 0, 0, 0);
- } else if (VAR_RESTART_KEY != 0xFF && lastKeyHit == VAR(VAR_RESTART_KEY)) {
+ } else if (restartKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_F8 && lastKeyHit.flags == 0)) {
confirmRestartDialog();
- } else if (VAR_PAUSE_KEY != 0xFF && lastKeyHit == VAR(VAR_PAUSE_KEY)) {
+ } else if (pauseKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_SPACE && lastKeyHit.flags == 0)) {
pauseGame();
- } else if (VAR_TALKSTOP_KEY != 0xFF && lastKeyHit == VAR(VAR_TALKSTOP_KEY)) {
+ } else if (talkstopKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_PERIOD && lastKeyHit.flags == 0)) {
_talkDelay = 0;
if (_sound->_sfxMode & 2)
stopTalk();
+ } else if (cutsceneExitKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_ESCAPE && lastKeyHit.flags == 0)) {
+ abortCutscene();
+
+ // FIXME: Is the following line really necessary?
+ _mouseAndKeyboardStat = VAR(VAR_CUTSCENEEXIT_KEY);
+
+ } else if (lastKeyHit.ascii == '[' || lastKeyHit.ascii == ']') { // Change music volume
+ int vol = ConfMan.getInt("music_volume") / 16;
+ if (lastKeyHit.ascii == ']' && vol < 16)
+ vol++;
+ else if (lastKeyHit.ascii == '[' && vol > 0)
+ vol--;
+
+ // Display the music volume
+ ValueDisplayDialog dlg("Music volume: ", 0, 16, vol, ']', '[');
+ vol = runDialog(dlg);
+
+ vol *= 16;
+ if (vol > Audio::Mixer::kMaxMixerVolume)
+ vol = Audio::Mixer::kMaxMixerVolume;
+
+ ConfMan.setInt("music_volume", vol);
+ updateSoundSettings();
+
+ } else if (lastKeyHit.ascii == '-' || lastKeyHit.ascii == '+') { // Change text speed
+ if (lastKeyHit.ascii == '+' && _defaultTalkDelay > 0)
+ _defaultTalkDelay--;
+ else if (lastKeyHit.ascii == '-' && _defaultTalkDelay < 9)
+ _defaultTalkDelay++;
+
+ // Display the talk speed
+ ValueDisplayDialog dlg("Subtitle speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-');
+ _defaultTalkDelay = 9 - runDialog(dlg);
+
+ // Save the new talkspeed value to ConfMan
+ setTalkspeed(_defaultTalkDelay);
+
+ if (VAR_CHARINC != 0xFF)
+ VAR(VAR_CHARINC) = _defaultTalkDelay;
+
+ } else if (lastKeyHit.ascii == '~' || lastKeyHit.ascii == '#') { // Debug console
+ _debugger->attach();
+
} else {
- if (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY)) {
- abortCutscene();
- } else if (lastKeyHit == '[' || lastKeyHit == ']') { // Change music volume
- int vol = ConfMan.getInt("music_volume") / 16;
- if (lastKeyHit == ']' && vol < 16)
- vol++;
- else if (lastKeyHit == '[' && vol > 0)
- vol--;
-
- // Display the music volume
- ValueDisplayDialog dlg("Music volume: ", 0, 16, vol, ']', '[');
- vol = runDialog(dlg);
-
- vol *= 16;
- if (vol > Audio::Mixer::kMaxMixerVolume)
- vol = Audio::Mixer::kMaxMixerVolume;
-
- ConfMan.setInt("music_volume", vol);
- updateSoundSettings();
- } else if (lastKeyHit == '-' || lastKeyHit == '+') { // Change text speed
- if (lastKeyHit == '+' && _defaultTalkDelay > 0)
- _defaultTalkDelay--;
- else if (lastKeyHit == '-' && _defaultTalkDelay < 9)
- _defaultTalkDelay++;
-
- // Display the talk speed
- ValueDisplayDialog dlg("Subtitle speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-');
- _defaultTalkDelay = 9 - runDialog(dlg);
-
- // Save the new talkspeed value to ConfMan
- setTalkspeed(_defaultTalkDelay);
-
- if (VAR_CHARINC != 0xFF)
- VAR(VAR_CHARINC) = _defaultTalkDelay;
- } else if (lastKeyHit == '~' || lastKeyHit == '#') { // Debug console
- _debugger->attach();
- }
-
- _mouseAndKeyboardStat = lastKeyHit;
+ // FIXME: Possibly convert even more keycode/ascii pairs to their SCUMM counterparts?
+ if (lastKeyHit.keycode >= Common::KEYCODE_F1 && lastKeyHit.keycode <= Common::KEYCODE_F9)
+ _mouseAndKeyboardStat = lastKeyHit.keycode - Common::KEYCODE_F1 + 315;
+ else
+ _mouseAndKeyboardStat = lastKeyHit.ascii;
}
}
diff --git a/engines/scumm/insane/insane.cpp b/engines/scumm/insane/insane.cpp
index f445fe490c..252407913e 100644
--- a/engines/scumm/insane/insane.cpp
+++ b/engines/scumm/insane/insane.cpp
@@ -580,10 +580,10 @@ int32 Insane::processKeyboard(void) {
_enemyState[EN_BEN][1] += tmpy;
}
- if (_vm->getKeyState(0x0d))
+ if (_vm->getKeyState(Common::KEYCODE_RETURN))
retval |= 1;
- if (_vm->getKeyState(0x09))
+ if (_vm->getKeyState(Common::KEYCODE_TAB))
retval |= 2;
return retval;
diff --git a/engines/scumm/insane/insane_enemy.cpp b/engines/scumm/insane/insane_enemy.cpp
index 36568a635c..3866cf230d 100644
--- a/engines/scumm/insane/insane_enemy.cpp
+++ b/engines/scumm/insane/insane_enemy.cpp
@@ -230,7 +230,7 @@ int32 Insane::enemy0handler(int32 actor1, int32 actor2, int32 probability) {
_actor[actor1].cursorX = -160;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -375,7 +375,7 @@ int32 Insane::enemy1handler(int32 actor1, int32 actor2, int32 probability) {
_actor[actor1].cursorX = -160;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -524,7 +524,7 @@ int32 Insane::enemy2handler(int32 actor1, int32 actor2, int32 probability) {
_actor[actor1].cursorX = -160;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -681,7 +681,7 @@ int32 Insane::enemy3handler(int32 actor1, int32 actor2, int32 probability) {
_actor[actor1].cursorX = -160;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -851,7 +851,7 @@ int32 Insane::enemy4handler(int32 actor1, int32 actor2, int32 probability) {
_actor[actor1].cursorX = -160;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -995,7 +995,7 @@ int32 Insane::enemy5handler(int32 actor1, int32 actor2, int32 probability) {
_enHdlVar[EN_VULTF2][0]++;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
@@ -1123,7 +1123,7 @@ int32 Insane::enemy6handler(int32 actor1, int32 actor2, int32 probability) {
retval = 2;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[0].act[2].state = 97;
@@ -1213,7 +1213,7 @@ int32 Insane::enemy7handler(int32 actor1, int32 actor2, int32 probability) {
_enHdlVar[EN_CAVEFISH][0] = act1damage;
// Shift+V cheat to win the battle
- if (_vm->getKeyState(0x56) && !_beenCheated &&
+ if (_vm->getKeyState('V') && !_beenCheated &&
!_actor[0].lost && !_actor[1].lost) {
_beenCheated = 1;
_actor[1].damage = _actor[1].maxdamage + 10;
diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h
index 3c16f78a68..008c2995e5 100644
--- a/engines/scumm/intern.h
+++ b/engines/scumm/intern.h
@@ -241,7 +241,7 @@ protected:
virtual void readRoomsOffsets();
virtual void loadCharset(int no);
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
};
/**
@@ -305,7 +305,7 @@ protected:
virtual void resetScummVars();
virtual void decodeParseString();
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
virtual void readIndexFile();
void readClassicIndexFile(); // V1
@@ -611,7 +611,7 @@ protected:
virtual const char *getOpcodeDesc(byte i);
virtual void scummLoop_handleActors();
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
virtual void setupScummVars();
virtual void decodeParseString(int a, int b);
@@ -912,7 +912,7 @@ protected:
virtual void scummLoop_handleSound();
virtual void scummLoop_handleDrawing();
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
virtual void setupScumm();
@@ -994,7 +994,7 @@ protected:
virtual int getObjectIdFromOBIM(const byte *obim);
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
void desaturatePalette(int hueScale, int satScale, int lightScale, int startColor, int endColor);
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index a408616942..7e0d705377 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -2803,25 +2803,34 @@ void ScummEngine_v6::o6_kernelGetFunctions() {
int ScummEngine::getKeyState(int key) {
switch (key) {
case 0x147: // Home
- return (_keyDownMap[0x107] || _keyDownMap[0x115]) ? 1 : 0;
+ // FIXME: There seems to be a mistake in the code here ("insert" vs. "home")
+ return (_keyDownMap[Common::KEYCODE_KP7] ||
+ _keyDownMap[Common::KEYCODE_INSERT]) ? 1 : 0;
case 0x148: // Up
- return (_keyDownMap[0x108] || _keyDownMap[0x111] ||
- _keyDownMap[0x38]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP8] ||
+ _keyDownMap[Common::KEYCODE_UP] ||
+ _keyDownMap[Common::KEYCODE_8]) ? 1 : 0;
case 0x149: // PgUp
- return (_keyDownMap[0x109] || _keyDownMap[0x118]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP9] ||
+ _keyDownMap[Common::KEYCODE_PAGEUP]) ? 1 : 0;
case 0x14B: // Left
- return (_keyDownMap[0x104] || _keyDownMap[0x114] ||
- _keyDownMap[0x34]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP4] ||
+ _keyDownMap[Common::KEYCODE_LEFT] ||
+ _keyDownMap[Common::KEYCODE_4]) ? 1 : 0;
case 0x14D: // Right
- return (_keyDownMap[0x106] || _keyDownMap[0x113] ||
- _keyDownMap[0x36]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP6] ||
+ _keyDownMap[Common::KEYCODE_RIGHT] ||
+ _keyDownMap[Common::KEYCODE_6]) ? 1 : 0;
case 0x14F: // End
- return (_keyDownMap[0x101] || _keyDownMap[0x117]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP1] ||
+ _keyDownMap[Common::KEYCODE_END]) ? 1 : 0;
case 0x150: // Down
- return (_keyDownMap[0x102] || _keyDownMap[0x112] ||
- _keyDownMap[0x32]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP2] ||
+ _keyDownMap[Common::KEYCODE_DOWN] ||
+ _keyDownMap[Common::KEYCODE_2]) ? 1 : 0;
case 0x151: // PgDn
- return (_keyDownMap[0x103] || _keyDownMap[0x119]) ? 1 : 0;
+ return (_keyDownMap[Common::KEYCODE_KP3] ||
+ _keyDownMap[Common::KEYCODE_PAGEDOWN]) ? 1 : 0;
default:
return (_keyDownMap[key]) ? 1 : 0;
}
diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h
index 05d18f8a90..840940caa3 100644
--- a/engines/scumm/scumm-md5.h
+++ b/engines/scumm/scumm-md5.h
@@ -1,5 +1,5 @@
/*
- This file was generated by the md5table tool on Sun May 13 00:46:42 2007
+ This file was generated by the md5table tool on Fri Jun 08 10:51:50 2007
DO NOT EDIT MANUALLY!
*/
@@ -113,6 +113,7 @@ static const MD5Table md5table[] = {
{ "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformPC },
{ "2a41b53cf1a90b6e6f26c10cc6041084", "tentacle", "", "Demo", 2439158, Common::EN_ANY, Common::kPlatformMacintosh },
{ "2a446817ffcabfef8716e0c456ecaf81", "puttzoo", "", "Demo", -1, Common::DE_DEU, Common::kPlatformWindows },
+ { "2a8658dbd13d84d1bce64a71a35995eb", "pajama2", "HE 99", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
{ "2c04aacffb8428f30ccf4f734fbe3adc", "activity", "", "", -1, Common::EN_ANY, Common::kPlatformPC },
{ "2ccd8891ce4d3f1a334d21bff6a88ca2", "monkey", "CD", "", 9455, Common::EN_ANY, Common::kPlatformMacintosh },
{ "2d1e891fe52df707c30185e52c50cd92", "monkey", "CD", "CD", 8955, Common::EN_ANY, Common::kPlatformPC },
@@ -154,6 +155,7 @@ static const MD5Table md5table[] = {
{ "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3", "FM-TOWNS", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
{ "3a5d13675e9a23aedac0bac7730f0ac1", "samnmax", "", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
{ "3a5ec90d556d4920976c5578bfbfaf79", "maniac", "NES", "extracted", -1, Common::DE_DEU, Common::kPlatformNES },
+ { "3af61c5edf8e15b43dbafd285b2e9777", "puttcircus", "", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
{ "3b301b7892f883ce42ab4be6a274fea6", "samnmax", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformPC },
{ "3b832f4a90740bf22e9b8ed42ca0128c", "freddi4", "HE 99", "", -1, Common::EN_GRB, Common::kPlatformWindows },
{ "3cce1913a3bc586b51a75c3892ff18dd", "indy3", "VGA", "VGA", -1, Common::RU_RUS, Common::kPlatformPC },
@@ -475,6 +477,7 @@ static const MD5Table md5table[] = {
{ "d62d248c3df6ec177405e2cb23d923b2", "indy3", "EGA", "EGA", -1, Common::IT_ITA, Common::kPlatformPC },
{ "d6334a5a9b61afe18c368540fdf522ca", "airport", "", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "d6dd0646404768a63e963891a96daadd", "atlantis", "", "Floppy", 12035, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "d73c851b942af44deb9b6d5f416a0972", "freddi3", "HE 99", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
{ "d74122362a77ec24525fdd50297dfd82", "freddi4", "", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },
{ "d7ab7cd6105546016e6a0d46fb36b964", "pajama", "HE 100", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "d7b247c26bf1f01f8f7daf142be84de3", "balloon", "HE 99", "Updated", -1, Common::EN_ANY, Common::kPlatformWindows },
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 8abfd006a5..4b3a365394 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -180,7 +180,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
_curPalIndex = 0;
_currentRoom = 0;
_egoPositioned = false;
- _keyPressed = 0;
_mouseAndKeyboardStat = 0;
_leftBtnPressed = 0;
_rightBtnPressed = 0;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 59c5923e3b..8c8124714d 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -29,6 +29,7 @@
#include "engines/engine.h"
#include "common/endian.h"
#include "common/file.h"
+#include "common/keyboard.h"
#include "common/rect.h"
#include "common/str.h"
#include "graphics/surface.h"
@@ -482,7 +483,7 @@ public:
protected:
void waitForTimer(int msec_delay);
virtual void processInput();
- virtual void processKeyboard(int lastKeyHit);
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
virtual void clearClickedStatus();
// Cursor/palette
@@ -584,7 +585,7 @@ public:
Common::String generateFilename(const int room) const;
protected:
- int _keyPressed;
+ Common::KeyState _keyPressed;
bool _keyDownMap[512]; // FIXME - 512 is a guess. it's max(kbd.ascii)
Common::Point _mouse;
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index 4a468d151c..e5720a013f 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -643,7 +643,7 @@ void Sound::startTalkSound(uint32 offset, uint32 b, int mode, Audio::SoundHandle
_vm->_imuseDigital->startVoice(kTalkSoundID, input);
#endif
} else {
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, input, id);
+ _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, handle, input, id);
}
}
}
diff --git a/engines/sky/control.cpp b/engines/sky/control.cpp
index 04f6800aab..c03cf9688b 100644
--- a/engines/sky/control.cpp
+++ b/engines/sky/control.cpp
@@ -497,7 +497,7 @@ void Control::doControlPanel(void) {
_system->updateScreen();
_mouseClicked = false;
delay(50);
- if (_keyPressed == 27) { // escape pressed
+ if (_keyPressed.keycode == Common::KEYCODE_ESCAPE) { // escape pressed
_mouseClicked = false;
quitPanel = true;
}
@@ -841,7 +841,7 @@ bool Control::autoSaveExists(void) {
uint16 Control::saveRestorePanel(bool allowSave) {
- _keyPressed = 0;
+ _keyPressed.reset();
_mouseWheel = 0;
buttonControl(NULL);
_text->drawToScreen(WITH_MASK); // flush text restore buffer
@@ -898,21 +898,21 @@ uint16 Control::saveRestorePanel(bool allowSave) {
_system->updateScreen();
_mouseClicked = false;
delay(50);
- if (_keyPressed == 27) { // escape pressed
+ if (_keyPressed.keycode == Common::KEYCODE_ESCAPE) { // escape pressed
_mouseClicked = false;
clickRes = CANCEL_PRESSED;
quitPanel = true;
- } else if ((_keyPressed == 13) || (_keyPressed == 15)) {
+ } else if ((_keyPressed.keycode == Common::KEYCODE_RETURN) || (_keyPressed.keycode == Common::KEYCODE_KP_ENTER)) {
clickRes = handleClick(lookList[0]);
if (clickRes == GAME_SAVED)
saveDescriptions(saveGameTexts);
quitPanel = true;
_mouseClicked = false;
- _keyPressed = 0;
- } if (allowSave && _keyPressed) {
+ _keyPressed.reset();
+ } if (allowSave && _keyPressed.keycode) {
handleKeyPress(_keyPressed, _selectedGame * MAX_TEXT_LEN + saveGameTexts);
refreshNames = true;
- _keyPressed = 0;
+ _keyPressed.reset();
}
if (_mouseWheel) {
@@ -991,9 +991,9 @@ bool Control::checkKeyList(uint8 key) {
return false;
}
-void Control::handleKeyPress(uint8 key, uint8 *textBuf) {
+void Control::handleKeyPress(Common::KeyState kbd, uint8 *textBuf) {
- if (key == 8) { // backspace
+ if (kbd.keycode == Common::KEYCODE_BACKSPACE) { // backspace
for (uint8 cnt = 0; cnt < 6; cnt++)
if (!textBuf[cnt])
return;
@@ -1004,15 +1004,15 @@ void Control::handleKeyPress(uint8 key, uint8 *textBuf) {
} else {
if (_enteredTextWidth >= PAN_LINE_WIDTH - 10)
return;
- if (((key >= 'A') && (key <= 'Z')) || ((key >= 'a') && (key <= 'z')) ||
- ((key >= '0') && (key <= '9')) || checkKeyList(key)) {
+ if (((kbd.ascii >= 'A') && (kbd.ascii <= 'Z')) || ((kbd.ascii >= 'a') && (kbd.ascii <= 'z')) ||
+ ((kbd.ascii >= '0') && (kbd.ascii <= '9')) || checkKeyList(kbd.ascii)) {
uint8 strLen = 0;
while (textBuf[0]) {
textBuf++;
strLen++;
}
if (strLen < MAX_TEXT_LEN) {
- textBuf[0] = key;
+ textBuf[0] = kbd.ascii;
textBuf[1] = 0;
}
}
@@ -1556,18 +1556,14 @@ void Control::delay(unsigned int amount) {
uint32 start = _system->getMillis();
uint32 cur = start;
- _keyPressed = 0; //reset
+ _keyPressed.reset();
do {
Common::EventManager *eventMan = _system->getEventManager();
while (eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- // Make sure backspace works right (this fixes a small issue on OS X)
- if (event.kbd.keycode == 8)
- _keyPressed = 8;
- else
- _keyPressed = (byte)event.kbd.ascii;
+ _keyPressed = event.kbd;
break;
case Common::EVENT_MOUSEMOVE:
if (!(SkyEngine::_systemVars.systemFlags & SF_MOUSE_LOCKED))
diff --git a/engines/sky/control.h b/engines/sky/control.h
index ebf66a9e16..217ab5714a 100644
--- a/engines/sky/control.h
+++ b/engines/sky/control.h
@@ -27,6 +27,7 @@
#define SKY_CONTROL_H
#include "common/stdafx.h"
+#include "common/events.h"
#include "common/scummsys.h"
class OSystem;
@@ -220,7 +221,7 @@ private:
void setUpGameSprites(uint8 *nameBuf, dataFileHeader **nameSprites, uint16 firstNum, uint16 selectedGame);
void showSprites(dataFileHeader **nameSprites, bool allowSave);
bool checkKeyList(uint8 key);
- void handleKeyPress(uint8 key, uint8 *textBuf);
+ void handleKeyPress(Common::KeyState kbd, uint8 *textBuf);
uint16 _selectedGame;
uint16 saveGameToFile(void);
@@ -243,7 +244,7 @@ private:
Sound *_skySound;
OSystem *_system;
bool _mouseClicked;
- byte _keyPressed;
+ Common::KeyState _keyPressed;
int _mouseWheel;
struct {
diff --git a/engines/sky/intro.cpp b/engines/sky/intro.cpp
index 482dc623cc..6d841495af 100644
--- a/engines/sky/intro.cpp
+++ b/engines/sky/intro.cpp
@@ -917,7 +917,7 @@ bool Intro::escDelay(uint32 msecs) {
do {
while (eventMan->pollEvent(event)) {
if (event.type == Common::EVENT_KEYDOWN) {
- if (event.kbd.keycode == 27)
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE)
return false;
} else if (event.type == Common::EVENT_QUIT) {
_quitProg = true;
diff --git a/engines/sky/mouse.cpp b/engines/sky/mouse.cpp
index c18eb6d901..524005b7e3 100644
--- a/engines/sky/mouse.cpp
+++ b/engines/sky/mouse.cpp
@@ -191,7 +191,7 @@ void Mouse::waitMouseNotPressed(int minDelay) {
while (eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- if (event.kbd.ascii == 27) {
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
minDelay = 0;
mousePressed = false;
}
diff --git a/engines/sky/sky.cpp b/engines/sky/sky.cpp
index d8e642d717..1ff23dbd07 100644
--- a/engines/sky/sky.cpp
+++ b/engines/sky/sky.cpp
@@ -217,57 +217,54 @@ void SkyEngine::initVirgin() {
void SkyEngine::handleKey(void) {
- if (_keyPressed && _systemVars.paused) {
+ if (_keyPressed.keycode && _systemVars.paused) {
_skySound->fnUnPauseFx();
_systemVars.paused = false;
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
- _keyFlags = _keyPressed = 0;
- return;
- }
-
- if (_keyFlags == Common::KBD_CTRL) {
- if (_keyPressed == 'f')
+ } else if (_keyPressed.flags == Common::KBD_CTRL) {
+ if (_keyPressed.keycode == 'f')
_fastMode ^= 1;
- else if (_keyPressed == 'g')
+ else if (_keyPressed.keycode == 'g')
_fastMode ^= 2;
- else if (_keyPressed == 'd')
+ else if (_keyPressed.keycode == 'd')
_debugger->attach();
- } else {
- switch (_keyPressed) {
- case '`':
- case '~':
- case '#':
+ } else if (_keyPressed.keycode) {
+ switch (_keyPressed.keycode) {
+ case Common::KEYCODE_BACKQUOTE:
+ case Common::KEYCODE_HASH:
_debugger->attach();
break;
- case 63:
+ case Common::KEYCODE_F5:
_skyControl->doControlPanel();
break;
- case 27:
+ case Common::KEYCODE_ESCAPE:
if (!_systemVars.pastIntro)
_skyControl->restartGame();
break;
- case '.':
+ case Common::KEYCODE_PERIOD:
_skyMouse->logicClick();
break;
- case 'p':
+ case Common::KEYCODE_p:
_skyScreen->halvePalette();
_skySound->fnPauseFx();
_systemVars.paused = true;
break;
+ default:
+ break;
}
}
- _keyFlags = _keyPressed = 0;
+ _keyPressed.reset();
}
int SkyEngine::go() {
_systemVars.quitGame = false;
- _keyFlags = _keyPressed = 0;
+ _keyPressed.reset();
uint16 result = 0;
if (ConfMan.hasKey("save_slot") && ConfMan.getInt("save_slot") >= 0)
@@ -517,7 +514,7 @@ void SkyEngine::delay(int32 amount) {
Common::Event event;
uint32 start = _system->getMillis();
- _keyFlags = _keyPressed = 0; //reset
+ _keyPressed.reset();
if (amount < 0)
amount = 0;
@@ -526,11 +523,7 @@ void SkyEngine::delay(int32 amount) {
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- _keyFlags = event.kbd.flags;
- if (_keyFlags == Common::KBD_CTRL)
- _keyPressed = event.kbd.keycode;
- else
- _keyPressed = (byte)event.kbd.ascii;
+ _keyPressed = event.kbd;
break;
case Common::EVENT_MOUSEMOVE:
if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
diff --git a/engines/sky/sky.h b/engines/sky/sky.h
index bc76e37eef..002964d6bb 100644
--- a/engines/sky/sky.h
+++ b/engines/sky/sky.h
@@ -27,6 +27,7 @@
#define SKY_H
#include "common/stdafx.h"
+#include "common/events.h"
#include "engines/engine.h"
namespace Sky {
@@ -60,7 +61,7 @@ class SkyCompact;
class SkyEngine : public Engine {
GUI::Debugger *getDebugger();
protected:
- byte _keyPressed, _keyFlags;
+ Common::KeyState _keyPressed;
bool _floppyIntro;
Sound *_skySound;
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp
index d66db9347d..d54968daeb 100644
--- a/engines/sword1/animation.cpp
+++ b/engines/sword1/animation.cpp
@@ -295,7 +295,7 @@ void MoviePlayer::play(void) {
handleScreenChanged();
break;
case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == 27) {
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
_snd->stopHandle(_bgSoundHandle);
terminated = true;
}
@@ -410,7 +410,7 @@ bool MoviePlayerDXA::load(uint32 id) {
snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]);
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd.readUint32BE() != MKID_BE('NULL'))
+ if (_fd->readUint32BE() != MKID_BE('NULL'))
return false;
_frameWidth = getWidth();
_frameHeight = getHeight();
diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp
index e40db20f37..1ebfaedb2e 100644
--- a/engines/sword1/control.cpp
+++ b/engines/sword1/control.cpp
@@ -204,7 +204,7 @@ void Control::askForCd(void) {
_system->copyRectToScreen(_screenBuf, 640, 0, 0, 640, 480);
}
delay(300);
- if (_keyPressed) {
+ if (_keyPressed.keycode) {
if (!Common::File::exists(fName)) {
memset(_screenBuf, 0, 640 * 480);
renderText(_lStrings[STR_INCORRECT_CD], 320, 230, TEXT_CENTER);
@@ -224,7 +224,8 @@ void Control::askForCd(void) {
uint8 Control::runPanel(void) {
_mouseDown = false;
_restoreBuf = NULL;
- _keyPressed = _numButtons = 0;
+ _keyPressed.reset();
+ _numButtons = 0;
_screenBuf = (uint8*)malloc(640 * 480);
memset(_screenBuf, 0, 640 * 480);
_system->copyRectToScreen(_screenBuf, 640, 0, 0, 640, 480);
@@ -283,7 +284,7 @@ uint8 Control::runPanel(void) {
_cursorVisible = false;
_cursorTick = 0;
}
- if (_keyPressed)
+ if (_keyPressed.keycode)
handleSaveKey(_keyPressed);
else if (_cursorVisible != visible)
showSavegameNames();
@@ -328,10 +329,9 @@ uint8 Control::getClicks(uint8 mode, uint8 *retVal) {
}
uint8 flag = 0;
- if (_keyPressed == 27)
+ if (_keyPressed.keycode == Common::KEYCODE_ESCAPE)
flag = kButtonCancel;
- // 3 is num keypad Enter on Macs. See FR #1273746
- else if (_keyPressed == '\r' || _keyPressed == '\n' || _keyPressed == 3)
+ else if (_keyPressed.keycode == Common::KEYCODE_RETURN || _keyPressed.keycode == Common::KEYCODE_KP_ENTER)
flag = kButtonOk;
if (flag) {
@@ -622,9 +622,9 @@ bool Control::getConfirm(const uint8 *title) {
buttons[0]->draw();
buttons[1]->draw();
delay(1000 / 12);
- if (_keyPressed == 27)
+ if (_keyPressed.keycode == Common::KEYCODE_ESCAPE)
retVal = 2;
- else if (_keyPressed == '\r' || _keyPressed == '\n')
+ else if (_keyPressed.keycode == Common::KEYCODE_RETURN || _keyPressed.keycode == Common::KEYCODE_KP_ENTER)
retVal = 1;
if (_mouseState & BS1L_BUTTON_DOWN) {
if (buttons[0]->wasClicked(_mouseX, _mouseY))
@@ -649,7 +649,7 @@ bool Control::getConfirm(const uint8 *title) {
return retVal == 1;
}
-bool Control::keyAccepted(uint8 key) {
+bool Control::keyAccepted(uint16 ascii) {
// this routine needs changes for Czech keys... No idea how to do that, though.
// FIXME: It is not a good idea to put non-ASCII chars into a C source file,
// since there is no way to specify which encoding you are using.
@@ -658,22 +658,22 @@ bool Control::keyAccepted(uint8 key) {
// do not at all specify which encoding keyboard events use, so this
// check here is probably not portable anyway...
static const char allowedSpecials[] = "éèáàúùäöüÄÖÜß,.:-()?! \"\'";
- if (((key >= 'A') && (key <= 'Z')) ||
- ((key >= 'a') && (key <= 'z')) ||
- ((key >= '0') && (key <= '9')) ||
- strchr(allowedSpecials, key))
+ if (((ascii >= 'A') && (ascii <= 'Z')) ||
+ ((ascii >= 'a') && (ascii <= 'z')) ||
+ ((ascii >= '0') && (ascii <= '9')) ||
+ strchr(allowedSpecials, ascii))
return true;
else
return false;
}
-void Control::handleSaveKey(uint8 key) {
+void Control::handleSaveKey(Common::KeyState kbd) {
if (_selectedSavegame < 255) {
uint8 len = strlen((char*)_saveNames[_selectedSavegame]);
- if ((key == 8) && len) // backspace
+ if ((kbd.keycode == Common::KEYCODE_BACKSPACE) && len) // backspace
_saveNames[_selectedSavegame][len - 1] = '\0';
- else if (keyAccepted(key) && (len < 31)) {
- _saveNames[_selectedSavegame][len] = key;
+ else if (keyAccepted(kbd.ascii) && (len < 31)) {
+ _saveNames[_selectedSavegame][len] = kbd.ascii;
_saveNames[_selectedSavegame][len + 1] = '\0';
}
showSavegameNames();
@@ -700,6 +700,9 @@ void Control::readSavegameDescriptions(void) {
inf = _saveFileMan->openForLoading("SAVEGAME.INF");
_saveScrollPos = _saveFiles = 0;
_selectedSavegame = 255;
+ for (uint8 cnt = 0; cnt < 64; cnt++) {
+ memset(_saveNames[cnt], 0, sizeof(_saveNames[cnt]));
+ }
if (inf) {
uint8 curFileNum = 0;
uint8 ch;
@@ -707,20 +710,18 @@ void Control::readSavegameDescriptions(void) {
uint8 pos = 0;
do {
ch = inf->readByte();
- if ((ch == 10) || (ch == 255))
- _saveNames[curFileNum][pos] = '\0';
- else
- _saveNames[curFileNum][pos] = ch;
- pos++;
- } while ((ch != 10) && (ch != 255));
- curFileNum++;
- } while (ch != 255);
+ if (pos < sizeof(_saveNames[curFileNum]) - 1) {
+ if ((ch == 10) || (ch == 255) || (inf->eos()))
+ _saveNames[curFileNum][pos++] = '\0';
+ else if (ch >= 32)
+ _saveNames[curFileNum][pos++] = ch;
+ }
+ } while ((ch != 10) && (ch != 255) && (!inf->eos()));
+ if (_saveNames[curFileNum][0] != 0)
+ curFileNum++;
+ } while ((ch != 255) && (!inf->eos()));
_saveFiles = curFileNum;
- for (uint8 cnt = _saveFiles; cnt < 64; cnt++)
- _saveNames[cnt][0] = '\0';
- } else
- for (uint8 cnt = 0; cnt < 64; cnt++)
- _saveNames[cnt][0] = '\0';
+ }
delete inf;
}
@@ -1036,7 +1037,7 @@ void Control::delay(uint32 msecs) {
uint32 now = _system->getMillis();
uint32 endTime = now + msecs;
- _keyPressed = 0; //reset
+ _keyPressed.reset();
_mouseState = 0;
do {
@@ -1044,12 +1045,7 @@ void Control::delay(uint32 msecs) {
while (eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
-
- // Make sure backspace works right (this fixes a small issue on OS X)
- if (event.kbd.keycode == 8)
- _keyPressed = 8;
- else
- _keyPressed = (byte)event.kbd.ascii;
+ _keyPressed = event.kbd;
// we skip the rest of the delay and return immediately
// to handle keyboard input
return;
diff --git a/engines/sword1/control.h b/engines/sword1/control.h
index 89ea7199b6..1825350170 100644
--- a/engines/sword1/control.h
+++ b/engines/sword1/control.h
@@ -27,6 +27,7 @@
#define SWORD1_CONTROL_H
#include "common/scummsys.h"
+#include "common/events.h"
#include "sword1/sworddefs.h"
class OSystem;
@@ -118,8 +119,8 @@ private:
void saveNameSelect(uint8 id, bool saving);
bool saveToFile(void);
bool restoreFromFile(void);
- bool keyAccepted(uint8 key);
- void handleSaveKey(uint8 key);
+ bool keyAccepted(uint16 ascii);
+ void handleSaveKey(Common::KeyState kbd);
void renderVolumeBar(uint8 id, uint8 volL, uint8 volR);
uint16 getTextWidth(const uint8 *str);
@@ -141,7 +142,7 @@ private:
Sound *_sound;
uint8 *_font, *_redFont;
uint8 *_screenBuf;
- uint8 _keyPressed;
+ Common::KeyState _keyPressed;
void delay(uint32 msecs);
uint16 _mouseX, _mouseY, _mouseState;
bool _mouseDown;
diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp
index 67a390802b..ebff7f9929 100644
--- a/engines/sword1/music.cpp
+++ b/engines/sword1/music.cpp
@@ -31,6 +31,7 @@
#include "sword1/music.h"
#include "sound/aiff.h"
+#include "sound/flac.h"
#include "sound/mixer.h"
#include "sound/mp3.h"
#include "sound/vorbis.h"
@@ -201,7 +202,19 @@ int AiffAudioStream::readBuffer(int16 *buffer, const int numSamples) {
bool MusicHandle::play(const char *fileBase, bool loop) {
char fileName[30];
stop();
-
+
+#ifdef USE_FLAC
+ if (!_audioSource) {
+ sprintf(fileName, "%s.flac", fileBase);
+ if (_file.open(fileName))
+ _audioSource = Audio::makeFlacStream(&_file, false, 0, 0, loop ? 0 : 1);
+ }
+ if (!_audioSource) {
+ sprintf(fileName, "%s.fla", fileBase);
+ if (_file.open(fileName))
+ _audioSource = Audio::makeFlacStream(&_file, false, 0, 0, loop ? 0 : 1);
+ }
+#endif
#ifdef USE_VORBIS
if (!_audioSource) {
sprintf(fileName, "%s.ogg", fileBase);
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index db978cd33e..d899d25df5 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -635,7 +635,7 @@ void SwordEngine::checkCd(void) {
uint8 SwordEngine::mainLoop(void) {
uint8 retCode = 0;
- _keyPressed = 0;
+ _keyPressed.reset();
while ((retCode == 0) && (!_systemVars.engineQuit)) {
// do we need the section45-hack from sword.c here?
@@ -678,12 +678,14 @@ uint8 SwordEngine::mainLoop(void) {
// The control panel is triggered by F5 or ESC.
// FIXME: This is a very strange way of detecting F5...
- else if (((_keyPressed == 63 || _keyPressed == 27) && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) {
+ else if (((_keyPressed.keycode == Common::KEYCODE_F5 || _keyPressed.keycode == Common::KEYCODE_ESCAPE)
+ && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) {
retCode = _control->runPanel();
if (!retCode)
_screen->fullRefresh();
}
- _mouseState = _keyPressed = 0;
+ _mouseState = 0;
+ _keyPressed.reset();
} while ((Logic::_scriptVars[SCREEN] == Logic::_scriptVars[NEW_SCREEN]) && (retCode == 0) && (!_systemVars.engineQuit));
if ((retCode == 0) && (Logic::_scriptVars[SCREEN] != 53) && _systemVars.wantFade && (!_systemVars.engineQuit)) {
@@ -712,11 +714,7 @@ void SwordEngine::delay(int32 amount) { //copied and mutilated from sky.cpp
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- // Make sure backspace works right (this fixes a small issue on OS X)
- if (event.kbd.keycode == 8)
- _keyPressed = 8;
- else
- _keyPressed = (uint8)event.kbd.ascii;
+ _keyPressed = event.kbd;
break;
case Common::EVENT_MOUSEMOVE:
_mouseX = event.mouse.x;
diff --git a/engines/sword1/sword1.h b/engines/sword1/sword1.h
index 1ced01d6ef..7065b5498a 100644
--- a/engines/sword1/sword1.h
+++ b/engines/sword1/sword1.h
@@ -27,6 +27,7 @@
#define SWORD1_H
#include "engines/engine.h"
+#include "common/events.h"
#include "common/util.h"
#include "sword1/sworddefs.h"
@@ -92,7 +93,7 @@ private:
uint8 mainLoop(void);
uint16 _mouseX, _mouseY, _mouseState;
- uint8 _keyPressed;
+ Common::KeyState _keyPressed;
ResMan *_resMan;
ObjectMan *_objectMan;
diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp
index 2eb24430c7..12998e5e6d 100644
--- a/engines/sword2/animation.cpp
+++ b/engines/sword2/animation.cpp
@@ -429,7 +429,7 @@ void MoviePlayer::play(SequenceTextInfo *textList, uint32 numLines, int32 leadIn
terminate = true;
break;
case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == 27)
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE)
terminate = true;
break;
default:
@@ -518,7 +518,7 @@ bool MoviePlayerDXA::load() {
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd.readUint32BE() != MKID_BE('NULL'))
+ if (_fd->readUint32BE() != MKID_BE('NULL'))
return false;
_frameBuffer = _vm->_screen->getScreen();
diff --git a/engines/sword2/controls.cpp b/engines/sword2/controls.cpp
index 277ea108d9..84580c7520 100644
--- a/engines/sword2/controls.cpp
+++ b/engines/sword2/controls.cpp
@@ -26,6 +26,7 @@
*/
#include "common/stdafx.h"
+#include "common/events.h"
#include "common/rect.h"
#include "common/config-manager.h"
#include "common/system.h"
@@ -317,9 +318,9 @@ int Dialog::runModal() {
KeyboardEvent *ke = _vm->keyboardEvent();
if (ke) {
- if (ke->keycode == 27)
+ if (ke->kbd.keycode == Common::KEYCODE_ESCAPE)
setResult(0);
- else if (ke->keycode == '\n' || ke->keycode == '\r')
+ else if (ke->kbd.keycode == Common::KEYCODE_RETURN || ke->kbd.keycode == Common::KEYCODE_KP_ENTER)
setResult(1);
}
@@ -1130,13 +1131,13 @@ public:
virtual void onKey(KeyboardEvent *ke) {
if (_editable) {
- if (ke->keycode == 8)
- _parent->onAction(this, 8);
- else if (ke->ascii >= ' ' && ke->ascii <= 255) {
+ if (ke->kbd.keycode == Common::KEYCODE_BACKSPACE)
+ _parent->onAction(this, Common::KEYCODE_BACKSPACE);
+ else if (ke->kbd.ascii >= ' ' && ke->kbd.ascii <= 255) {
// Accept the character if the font renderer
// has what looks like a valid glyph for it.
- if (_fr->getCharWidth(ke->ascii))
- _parent->onAction(this, ke->ascii);
+ if (_fr->getCharWidth(ke->kbd.ascii))
+ _parent->onAction(this, ke->kbd.ascii);
}
}
}
@@ -1354,7 +1355,7 @@ void SaveRestoreDialog::onAction(Widget *widget, int result) {
drawEditBuffer(slot);
}
break;
- case 8:
+ case Common::KEYCODE_BACKSPACE:
if (_editPos > _firstPos) {
_editBuffer[_editPos - 1] = _editBuffer[_editPos];
_editBuffer[_editPos--] = 0;
diff --git a/engines/sword2/screen.cpp b/engines/sword2/screen.cpp
index a31d2a46c9..0a1b45d2de 100644
--- a/engines/sword2/screen.cpp
+++ b/engines/sword2/screen.cpp
@@ -31,6 +31,7 @@
#include "common/stdafx.h"
#include "common/system.h"
+#include "common/events.h"
#include "sword2/sword2.h"
#include "sword2/defs.h"
@@ -1091,7 +1092,7 @@ void Screen::rollCredits() {
KeyboardEvent *ke = _vm->keyboardEvent();
- if (ke && ke->keycode == 27) {
+ if (ke && ke->kbd.keycode == Common::KEYCODE_ESCAPE) {
if (!abortCredits) {
abortCredits = true;
fadeDown();
diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index be240e5956..6bbd58ff3c 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -381,17 +381,17 @@ int Sword2Engine::go() {
KeyboardEvent *ke = keyboardEvent();
if (ke) {
- if ((ke->modifiers == Common::KBD_CTRL && ke->keycode == 'd') || ke->ascii == '#' || ke->ascii == '~') {
+ if ((ke->kbd.flags == Common::KBD_CTRL && ke->kbd.keycode == Common::KEYCODE_d) || ke->kbd.ascii == '#' || ke->kbd.ascii == '~') {
_debugger->attach();
- } else if (ke->modifiers == 0 || ke->modifiers == Common::KBD_SHIFT) {
- switch (ke->keycode) {
- case 'p':
+ } else if (ke->kbd.flags == 0 || ke->kbd.flags == Common::KBD_SHIFT) {
+ switch (ke->kbd.keycode) {
+ case Common::KEYCODE_p:
if (_gamePaused)
unpauseGame();
else
pauseGame();
break;
- case 'c':
+ case Common::KEYCODE_c:
if (!_logic->readVar(DEMO) && !_mouse->isChoosing()) {
ScreenInfo *screenInfo = _screen->getScreenInfo();
_logic->fnPlayCredits(NULL);
@@ -399,13 +399,13 @@ int Sword2Engine::go() {
}
break;
#ifdef SWORD2_DEBUG
- case ' ':
+ case Common::KEYCODE_SPACE:
if (_gamePaused) {
_stepOneCycle = true;
unpauseGame();
}
break;
- case 's':
+ case Common::KEYCODE_s:
_renderSkip = !_renderSkip;
break;
#endif
@@ -553,9 +553,7 @@ void Sword2Engine::parseInputEvents() {
}
if (!(_inputEventFilter & RD_KEYDOWN)) {
_keyboardEvent.pending = true;
- _keyboardEvent.ascii = event.kbd.ascii;
- _keyboardEvent.keycode = event.kbd.keycode;
- _keyboardEvent.modifiers = event.kbd.flags;
+ _keyboardEvent.kbd = event.kbd;
}
break;
case Common::EVENT_LBUTTONDOWN:
diff --git a/engines/sword2/sword2.h b/engines/sword2/sword2.h
index b6d6c331f9..a9a1e21875 100644
--- a/engines/sword2/sword2.h
+++ b/engines/sword2/sword2.h
@@ -39,6 +39,7 @@
#include "engines/engine.h"
+#include "common/events.h"
#include "common/util.h"
#define MAX_starts 100
@@ -79,9 +80,7 @@ struct MouseEvent {
struct KeyboardEvent {
bool pending;
- uint16 ascii;
- int keycode;
- int modifiers;
+ Common::KeyState kbd;
};
struct StartUp {
diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp
index fd390a5d10..2860d832dd 100644
--- a/engines/touche/detection.cpp
+++ b/engines/touche/detection.cpp
@@ -124,7 +124,9 @@ REGISTER_PLUGIN(TOUCHE, "Touche Engine", "Touche: The Adventures of the 5th Musk
namespace Touche {
bool ToucheEngine::detectGame() {
- const Common::ADGameDescription *gd = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ Common::EncapsulatedADGameDesc encapsulatedDesc = Common::AdvancedDetector::detectBestMatchingGame(detectionParams);
+ const Common::ADGameDescription *gd = encapsulatedDesc.realDesc;
+
if (gd == 0)
return false;
diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp
index 3bbb01e095..18d2ac5359 100644
--- a/engines/touche/touche.cpp
+++ b/engines/touche/touche.cpp
@@ -298,24 +298,24 @@ void ToucheEngine::processEvents(bool handleKeyEvents) {
break;
}
_flagsTable[600] = event.kbd.keycode;
- if (event.kbd.keycode == 27) { // ESC
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
if (_displayQuitDialog) {
_flagsTable[611] = displayQuitDialog();
}
- } else if (event.kbd.keycode == 286) { // F5
+ } else if (event.kbd.keycode == Common::KEYCODE_F5) {
if (_flagsTable[618] == 0 && !_hideInventoryTexts) {
handleOptions(0);
}
- } else if (event.kbd.keycode == 290) { // F9
+ } else if (event.kbd.keycode == Common::KEYCODE_F9) {
_fastWalkMode = true;
- } else if (event.kbd.keycode == 291) { // F10
+ } else if (event.kbd.keycode == Common::KEYCODE_F10) {
_fastWalkMode = false;
}
if (event.kbd.flags == Common::KBD_CTRL) {
- if (event.kbd.keycode == 'd') {
+ if (event.kbd.keycode == Common::KEYCODE_d) {
// enable debugging stuff ?
_flagsTable[777] = 1;
- } else if (event.kbd.keycode == 'f') {
+ } else if (event.kbd.keycode == Common::KEYCODE_f) {
_fastMode = !_fastMode;
}
} else {
diff --git a/engines/touche/ui.cpp b/engines/touche/ui.cpp
index bf2fb747ab..ef8f5a0d7d 100644
--- a/engines/touche/ui.cpp
+++ b/engines/touche/ui.cpp
@@ -399,7 +399,7 @@ void ToucheEngine::handleOptions(int forceDisplay) {
break;
case Common::EVENT_KEYDOWN:
if (menuData.mode == kMenuSaveStateMode) {
- if (event.kbd.keycode == 8) {
+ if (event.kbd.keycode == Common::KEYCODE_BACKSPACE) {
menuData.removeLastCharFromDescription(_saveLoadCurrentSlot);
} else {
menuData.addCharToDescription(_saveLoadCurrentSlot, (char)event.kbd.ascii);
diff --git a/graphics/dxa_player.cpp b/graphics/dxa_player.cpp
index 5edf526b8f..6f2bca111e 100644
--- a/graphics/dxa_player.cpp
+++ b/graphics/dxa_player.cpp
@@ -35,6 +35,8 @@
namespace Graphics {
DXAPlayer::DXAPlayer() {
+ _fd = 0;
+
_frameBuffer1 = 0;
_frameBuffer2 = 0;
_scaledBuffer = 0;
@@ -57,25 +59,25 @@ DXAPlayer::~DXAPlayer() {
}
int DXAPlayer::getWidth() {
- if (!_fd.isOpen())
+ if (!_fd)
return 0;
return _width;
}
int DXAPlayer::getHeight() {
- if (!_fd.isOpen())
+ if (!_fd)
return 0;
return _height;
}
int DXAPlayer::getCurFrame() {
- if (!_fd.isOpen())
+ if (!_fd)
return -1;
return _frameNum;
}
int DXAPlayer::getFrameCount() {
- if (!_fd.isOpen())
+ if (!_fd)
return 0;
return _framesCount;
}
@@ -84,16 +86,19 @@ bool DXAPlayer::loadFile(const char *filename) {
uint32 tag;
int32 frameRate;
- if (!_fd.open(filename)) {
+ Common::File *file = new Common::File();
+ if (!file->open(filename)) {
return 0;
}
- tag = _fd.readUint32BE();
+ _fd = file;
+
+ tag = _fd->readUint32BE();
assert(tag == MKID_BE('DEXA'));
- uint8 flags = _fd.readByte();
- _framesCount = _fd.readUint16BE();
- frameRate = _fd.readUint32BE();
+ uint8 flags = _fd->readByte();
+ _framesCount = _fd->readUint16BE();
+ frameRate = _fd->readUint32BE();
if (frameRate > 0)
_framesPerSec = 1000 / frameRate;
@@ -107,8 +112,8 @@ bool DXAPlayer::loadFile(const char *filename) {
else
_frameTicks = frameRate;
- _width = _fd.readUint16BE();
- _height = _fd.readUint16BE();
+ _width = _fd->readUint16BE();
+ _height = _fd->readUint16BE();
if (flags & 0x80) {
_scaleMode = S_INTERLACED;
@@ -143,10 +148,10 @@ bool DXAPlayer::loadFile(const char *filename) {
}
void DXAPlayer::closeFile() {
- if (!_fd.isOpen())
+ if (!_fd)
return;
- _fd.close();
+ delete _fd;
free(_frameBuffer1);
free(_frameBuffer2);
free(_scaledBuffer);
@@ -478,20 +483,20 @@ void DXAPlayer::decode13(byte *data, int size, int totalSize) {
void DXAPlayer::decodeNextFrame() {
uint32 tag;
- tag = _fd.readUint32BE();
+ tag = _fd->readUint32BE();
if (tag == MKID_BE('CMAP')) {
byte rgb[768];
- _fd.read(rgb, ARRAYSIZE(rgb));
+ _fd->read(rgb, ARRAYSIZE(rgb));
setPalette(rgb);
}
- tag = _fd.readUint32BE();
+ tag = _fd->readUint32BE();
if (tag == MKID_BE('FRAM')) {
- byte type = _fd.readByte();
- uint32 size = _fd.readUint32BE();
+ byte type = _fd->readByte();
+ uint32 size = _fd->readUint32BE();
- _fd.read(_frameBuffer2, size);
+ _fd->read(_frameBuffer2, size);
switch (type) {
case 2:
diff --git a/graphics/dxa_player.h b/graphics/dxa_player.h
index 2b9d5f1228..b8155153c9 100644
--- a/graphics/dxa_player.h
+++ b/graphics/dxa_player.h
@@ -43,8 +43,6 @@ enum ScaleMode {
class DXAPlayer {
protected:
- Common::File _fd;
-
byte *_frameBuffer1;
byte *_frameBuffer2;
byte *_scaledBuffer;
@@ -63,6 +61,8 @@ public:
DXAPlayer();
virtual ~DXAPlayer();
+ Common::SeekableReadStream *_fd;
+
/**
* Returns the width of the video
* @return the width of the video
diff --git a/graphics/scaler/thumbnail.cpp b/graphics/scaler/thumbnail.cpp
index a6575f3ea3..40d0cba156 100644
--- a/graphics/scaler/thumbnail.cpp
+++ b/graphics/scaler/thumbnail.cpp
@@ -97,32 +97,32 @@ void createThumbnail(const uint8* src, uint32 srcPitch, uint8* dstPtr, uint32 ds
* Copies the current screen contents to a new surface, using RGB565 format.
* WARNING: surf->free() must be called by the user to avoid leaking.
*
- * @param surf the surfce to store the data in it
+ * @param surf the surface to store the data in it
*/
static bool grabScreen565(Graphics::Surface *surf) {
- Graphics::Surface screen;
- if (!g_system->grabRawScreen(&screen))
+ Graphics::Surface *screen = g_system->lockScreen();
+ if (!screen)
return false;
- assert(screen.bytesPerPixel == 1 && screen.pixels != 0);
+ assert(screen->bytesPerPixel == 1 && screen->pixels != 0);
byte palette[256 * 4];
g_system->grabPalette(&palette[0], 0, 256);
- surf->create(screen.w, screen.h, 2);
+ surf->create(screen->w, screen->h, 2);
- for (uint y = 0; y < screen.h; ++y) {
- for (uint x = 0; x < screen.w; ++x) {
+ for (uint y = 0; y < screen->h; ++y) {
+ for (uint x = 0; x < screen->w; ++x) {
byte r, g, b;
- r = palette[((uint8*)screen.pixels)[y * screen.pitch + x] * 4];
- g = palette[((uint8*)screen.pixels)[y * screen.pitch + x] * 4 + 1];
- b = palette[((uint8*)screen.pixels)[y * screen.pitch + x] * 4 + 2];
+ r = palette[((uint8*)screen->pixels)[y * screen->pitch + x] * 4];
+ g = palette[((uint8*)screen->pixels)[y * screen->pitch + x] * 4 + 1];
+ b = palette[((uint8*)screen->pixels)[y * screen->pitch + x] * 4 + 2];
((uint16*)surf->pixels)[y * surf->w + x] = (((r >> 3) & 0x1F) << 11) | (((g >> 2) & 0x3F) << 5) | ((b >> 3) & 0x1F);
}
}
- screen.free();
+ g_system->unlockScreen();
return true;
}
diff --git a/gui/Key.cpp b/gui/Key.cpp
index 3d6fe9f05b..92c703ef09 100644
--- a/gui/Key.cpp
+++ b/gui/Key.cpp
@@ -32,34 +32,40 @@ Key::Key() :
_ascii(0), _keycode(0), _flags(0) {
}
+Key::Key(int ascii) :
+_ascii(ascii), _keycode(ascii), _flags(0) {
+}
+
Key::Key(int ascii, int keycode, int flags) :
_ascii(ascii), _keycode(keycode), _flags(flags) {
}
-int Key::ascii() {
- return _ascii;
+void Key::setKey(int ascii) {
+ _ascii = ascii;
+ _keycode = ascii;
}
-int Key::keycode() {
- return _keycode;
+void Key::setKey(int ascii, int keycode) {
+ _ascii = ascii;
+ _keycode = keycode;
}
-int Key::flags() {
- return _flags;
+void Key::setKey(int ascii, int keycode, int flags) {
+ _ascii = ascii;
+ _keycode = keycode;
+ _flags = flags;
}
-
-void Key::setAscii(int ascii) {
- _ascii = ascii;
- _keycode = ascii; // default
+int Key::ascii() {
+ return _ascii;
}
-void Key::setKeycode(int keycode) {
- _keycode = keycode;
+int Key::keycode() {
+ return _keycode;
}
-void Key::setFlags(int flags) {
- _flags = flags;
+int Key::flags() {
+ return _flags;
}
} // namespace GUI
diff --git a/gui/Key.h b/gui/Key.h
index 5b7db903ba..663293886b 100644
--- a/gui/Key.h
+++ b/gui/Key.h
@@ -32,13 +32,22 @@
namespace GUI {
+// TODO/FIXME: Make use of Common::KeyState from common/keyboard.h,
+// or even better, just completely replace this by it.
+// To be able to do that, though, the code using GUI::Key would need to
+// be adopted -- right now it uses SDL keycodes, and uses SDL_PushEvent
+// to generated fake events.
+
class Key {
public:
- Key(int ascii, int keycode = 0, int flags = 0);
+ Key(int ascii);
+ Key(int ascii, int keycode, int flags = 0);
Key();
- void setAscii(int ascii);
- void setKeycode(int keycode);
- void setFlags(int flags);
+
+ void setKey(int ascii);
+ void setKey(int ascii, int keycode);
+ void setKey(int ascii, int keycode, int flags);
+
int ascii();
int keycode();
int flags();
diff --git a/gui/KeysDialog.cpp b/gui/KeysDialog.cpp
index 6093af684d..33d09e4e69 100644
--- a/gui/KeysDialog.cpp
+++ b/gui/KeysDialog.cpp
@@ -77,8 +77,8 @@ void KeysDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
uint16 key = Actions::Instance()->getMapping(_actionsList->getSelected());
#ifdef __SYMBIAN32__
// ScummVM mappings for F1-F9 are different from SDL so remap back to sdl
- if (key >= 315 && key <= 323)
- key = key - 315 + SDLK_F1;
+ if (key >= Common::ASCII_F1 && key <= Common::ASCII_F9)
+ key = key - Common::ASCII_F1 + SDLK_F1;
#endif
if (key != 0)
sprintf(selection, "Associated key : %s", SDL_GetKeyName((SDLKey)key));
@@ -92,16 +92,15 @@ void KeysDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
case kMapCmd:
if (_actionsList->getSelected() < 0) {
_actionTitle->setLabel("Please select an action");
- }
- else {
+ } else {
char selection[100];
_actionSelected = _actionsList->getSelected();
uint16 key = Actions::Instance()->getMapping(_actionSelected);
#ifdef __SYMBIAN32__
// ScummVM mappings for F1-F9 are different from SDL so remap back to sdl
- if (key >= 315 && key <= 323)
- key = key - 315 + SDLK_F1;
+ if (key >= Common::ASCII_F1 && key <= Common::ASCII_F9)
+ key = key - Common::ASCII_F1 + SDLK_F1;
#endif
if (key != 0)
sprintf(selection, "Associated key : %s", SDL_GetKeyName((SDLKey)key));
diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp
index 9d7494115b..271cbccd94 100644
--- a/gui/ListWidget.cpp
+++ b/gui/ListWidget.cpp
@@ -24,6 +24,7 @@
#include "common/stdafx.h"
#include "common/system.h"
+#include "common/events.h"
#include "gui/ListWidget.h"
#include "gui/ScrollBarWidget.h"
#include "gui/dialog.h"
@@ -231,39 +232,39 @@ bool ListWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
// not editmode
switch (keycode) {
- case '\n': // enter/return
- case '\r':
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
if (_selectedItem >= 0) {
// override continuous enter keydown
- if (_editable && (_currentKeyDown != '\n' && _currentKeyDown != '\r')) {
+ if (_editable && (_currentKeyDown != Common::KEYCODE_RETURN && _currentKeyDown != Common::KEYCODE_KP_ENTER)) {
dirty = true;
startEditMode();
} else
sendCommand(kListItemActivatedCmd, _selectedItem);
}
break;
- case 256+17: // up arrow
+ case Common::KEYCODE_UP:
if (_selectedItem > 0)
_selectedItem--;
break;
- case 256+18: // down arrow
+ case Common::KEYCODE_DOWN:
if (_selectedItem < (int)_list.size() - 1)
_selectedItem++;
break;
- case 256+24: // pageup
+ case Common::KEYCODE_PAGEUP:
_selectedItem -= _entriesPerPage - 1;
if (_selectedItem < 0)
_selectedItem = 0;
break;
- case 256+25: // pagedown
+ case Common::KEYCODE_PAGEDOWN:
_selectedItem += _entriesPerPage - 1;
if (_selectedItem >= (int)_list.size() )
_selectedItem = _list.size() - 1;
break;
- case 256+22: // home
+ case Common::KEYCODE_HOME:
_selectedItem = 0;
break;
- case 256+23: // end
+ case Common::KEYCODE_END:
_selectedItem = _list.size() - 1;
break;
default:
diff --git a/gui/PopUpWidget.cpp b/gui/PopUpWidget.cpp
index 1bdce8a24e..d40a01c981 100644
--- a/gui/PopUpWidget.cpp
+++ b/gui/PopUpWidget.cpp
@@ -24,6 +24,7 @@
#include "common/stdafx.h"
#include "common/system.h"
+#include "common/events.h"
#include "gui/dialog.h"
#include "gui/eval.h"
#include "gui/newgui.h"
@@ -210,7 +211,7 @@ void PopUpDialog::handleMouseMoved(int x, int y, int button) {
}
void PopUpDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
- if (keycode == 27) { // escape
+ if (keycode == Common::KEYCODE_ESCAPE) {
// Don't change the previous selection
setResult(-1);
close();
@@ -221,21 +222,21 @@ void PopUpDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
return;
switch (keycode) {
- case '\n': // enter/return
- case '\r':
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
setResult(_selection);
close();
break;
- case 256+17: // up arrow
+ case Common::KEYCODE_UP:
moveUp();
break;
- case 256+18: // down arrow
+ case Common::KEYCODE_DOWN:
moveDown();
break;
- case 256+22: // home
+ case Common::KEYCODE_HOME:
setSelection(0);
break;
- case 256+23: // end
+ case Common::KEYCODE_END:
setSelection(_popUpBoss->_entries.size()-1);
break;
}
diff --git a/gui/TabWidget.cpp b/gui/TabWidget.cpp
index 8159147c83..38ea6229ec 100644
--- a/gui/TabWidget.cpp
+++ b/gui/TabWidget.cpp
@@ -114,6 +114,38 @@ int TabWidget::addTab(const String &title) {
return _activeTab;
}
+void TabWidget::removeTab(int tabID) {
+ assert(0 <= tabID && tabID < (int)_tabs.size());
+
+ // Deactive the tab if it's currently the active one
+ if (tabID == _activeTab) {
+ _tabs[tabID].firstWidget = _firstWidget;
+ releaseFocus();
+ _firstWidget = 0;
+ }
+
+ // Dispose the widgets in that tab and then the tab itself
+ delete _tabs[tabID].firstWidget;
+ _tabs.remove_at(tabID);
+
+ // Adjust _firstVisibleTab if necessary
+ if (_firstVisibleTab >= (int)_tabs.size()) {
+ _firstVisibleTab = MAX(0, (int)_tabs.size() - 1);
+ }
+
+ // The active tab was removed, so select a new active one (if any remains)
+ if (tabID == _activeTab) {
+ _activeTab = -1;
+ if (tabID >= (int)_tabs.size())
+ tabID = _tabs.size() - 1;
+ if (tabID >= 0)
+ setActiveTab(tabID);
+ }
+
+ // Finally trigger a redraw
+ _boss->draw();
+}
+
void TabWidget::setActiveTab(int tabID) {
assert(0 <= tabID && tabID < (int)_tabs.size());
if (_activeTab != tabID) {
diff --git a/gui/TabWidget.h b/gui/TabWidget.h
index bb836e0999..928f7916b6 100644
--- a/gui/TabWidget.h
+++ b/gui/TabWidget.h
@@ -62,18 +62,25 @@ public:
void init();
- virtual int16 getChildY() const;
-
- // Problem: how to add items to a tab?
- // First off, widget should allow non-dialog bosses, (i.e. also other widgets)
- // Could add a common base class for Widgets and Dialogs.
- // Then you add tabs using the following method, which returns a unique ID
+ /**
+ * Add a new tab with the given title. Returns a unique ID which can be used
+ * to identify the tab (to remove it / activate it etc.).
+ */
int addTab(const String &title);
- // Maybe we need to remove tabs again? Hm
- //void removeTab(int tabID);
+ /**
+ * Remove the tab with the given tab ID. Disposes all child widgets of that tab.
+ * TODO: This code is *unfinished*. In particular, it changes the
+ * tabIDs, so that they are not unique anymore! This is bad.
+ * If we need to, we could fix this by changing the tab IDs from being an index
+ * into the _tabs array to a real "unique" ID, which gets stored in the Tab struct.
+ * It won't be difficult to implement this, but since currently no code seems to make
+ * use of the feature...
+ */
+ void removeTab(int tabID);
- /** Set the active tab by specifying a valid tab ID.
+ /**
+ * Set the active tab by specifying a valid tab ID.
* setActiveTab changes the value of _firstWidget. This means new
* Widgets are always added to the active tab.
*/
@@ -88,6 +95,10 @@ public:
virtual void draw();
protected:
+ // We overload getChildY to make sure child widgets are positioned correctly.
+ // Essentially this compensates for the space taken up by the tab title header.
+ virtual int16 getChildY() const;
+
virtual void drawWidget(bool hilite);
virtual Widget *findWidget(int x, int y);
diff --git a/gui/about.cpp b/gui/about.cpp
index 2098d91aae..31381cadd5 100644
--- a/gui/about.cpp
+++ b/gui/about.cpp
@@ -55,13 +55,24 @@ enum {
//
// TODO: Add different font sizes (for bigger headlines)
// TODO: Allow color change in the middle of a line...
+
+static const char *copyright_text[] = {
+"\\C""",
+"\\C""Copyright (C) 2002-2007 The ScummVM project",
+"\\C""http://www.scummvm.org",
+"\\C""",
+"\\C""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 binary.",
+"\\C""",
+};
+
static const char *gpl_text[] = {
+"\\C""",
"\\C""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.",
"\\C""",
"\\C""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.",
"\\C""",
"\\C""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.",
-"\\C"""
+"\\C""",
};
#include "gui/credits.h"
@@ -107,11 +118,8 @@ AboutDialog::AboutDialog()
date += ')';
_lines.push_back(date);
-
- addLine("");
- addLine("\\C""Copyright (C) 2002-2006 The ScummVM project");
- addLine("\\C""http://www.scummvm.org");
- addLine("");
+ for (i = 0; i < ARRAYSIZE(copyright_text); i++)
+ addLine(copyright_text[i]);
addLine("\\C\\c1""Features compiled in:");
Common::String features("\\C");
@@ -136,16 +144,14 @@ AboutDialog::AboutDialog()
//addLine("");
}
+ for (i = 0; i < ARRAYSIZE(gpl_text); i++)
+ addLine(gpl_text[i]);
+
_lines.push_back("");
for (i = 0; i < ARRAYSIZE(credits); i++)
addLine(credits[i]);
- _lines.push_back("");
-
- for (i = 0; i < ARRAYSIZE(gpl_text); i++)
- addLine(gpl_text[i]);
-
// Center the dialog
_x = (screenW - _w) / 2;
_y = (screenH - _h) / 2;
diff --git a/gui/console.cpp b/gui/console.cpp
index 9186c7b405..b7c257d3ce 100644
--- a/gui/console.cpp
+++ b/gui/console.cpp
@@ -265,8 +265,8 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
return;
switch (keycode) {
- case '\n': // enter/return
- case '\r': {
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER: {
if (_caretVisible)
drawCaret(true);
@@ -307,10 +307,10 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
slideUpAndClose();
break;
}
- case 27: // escape
+ case Common::KEYCODE_ESCAPE:
slideUpAndClose();
break;
- case 8: // backspace
+ case Common::KEYCODE_BACKSPACE:
if (_caretVisible)
drawCaret(true);
@@ -321,7 +321,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
scrollToCurrent();
drawLine(pos2line(_currentPos));
break;
- case 9: // tab
+ case Common::KEYCODE_TAB:
{
if (_completionCallbackProc) {
int len = _currentPos - _promptStartPos;
@@ -346,11 +346,11 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
}
break;
}
- case 127:
+ case Common::KEYCODE_DELETE:
killChar();
drawLine(pos2line(_currentPos));
break;
- case 256 + 24: // pageup
+ case Common::KEYCODE_PAGEUP:
if (modifiers == Common::KBD_SHIFT) {
_scrollLine -= _linesPerPage - 1;
if (_scrollLine < _firstLineInBuffer + _linesPerPage - 1)
@@ -359,7 +359,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
draw();
}
break;
- case 256 + 25: // pagedown
+ case Common::KEYCODE_PAGEDOWN:
if (modifiers == Common::KBD_SHIFT) {
_scrollLine += _linesPerPage - 1;
if (_scrollLine > _promptEndPos / kCharsPerLine) {
@@ -371,7 +371,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
draw();
}
break;
- case 256 + 22: // home
+ case Common::KEYCODE_HOME:
if (modifiers == Common::KBD_SHIFT) {
_scrollLine = _firstLineInBuffer + _linesPerPage - 1;
updateScrollBuffer();
@@ -380,7 +380,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
}
draw();
break;
- case 256 + 23: // end
+ case Common::KEYCODE_END:
if (modifiers == Common::KBD_SHIFT) {
_scrollLine = _promptEndPos / kCharsPerLine;
if (_scrollLine < _linesPerPage - 1)
@@ -391,18 +391,18 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
}
draw();
break;
- case 273: // cursor up
+ case Common::KEYCODE_UP:
historyScroll(+1);
break;
- case 274: // cursor down
+ case Common::KEYCODE_DOWN:
historyScroll(-1);
break;
- case 275: // cursor right
+ case Common::KEYCODE_RIGHT:
if (_currentPos < _promptEndPos)
_currentPos++;
drawLine(pos2line(_currentPos));
break;
- case 276: // cursor left
+ case Common::KEYCODE_LEFT:
if (_currentPos > _promptStartPos)
_currentPos--;
drawLine(pos2line(_currentPos));
@@ -446,25 +446,25 @@ void ConsoleDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
void ConsoleDialog::specialKeys(int keycode) {
switch (keycode) {
- case 'a':
+ case Common::KEYCODE_a:
_currentPos = _promptStartPos;
draw();
break;
- case 'd':
+ case Common::KEYCODE_d:
if (_currentPos < _promptEndPos) {
killChar();
draw();
}
break;
- case 'e':
+ case Common::KEYCODE_e:
_currentPos = _promptEndPos;
draw();
break;
- case 'k':
+ case Common::KEYCODE_k:
killLine();
draw();
break;
- case 'w':
+ case Common::KEYCODE_w:
killLastWord();
draw();
break;
diff --git a/gui/credits.h b/gui/credits.h
index 3fb6396b78..5babeb1faa 100644
--- a/gui/credits.h
+++ b/gui/credits.h
@@ -274,6 +274,8 @@ static const char *credits[] = {
"\\C\\c2""MI1 VGA floppy patches",
"\\C\\c0""Nicolas Noble",
"\\C\\c2""Config file and ALSA support",
+"\\C\\c0""Tim Phillips",
+"\\C\\c2""Initial MI1 CD music support",
"\\C\\c0""Quietust",
"\\C\\c2""Sound support for Amiga SCUMM V2/V3 games, MM NES support",
"\\C\\c0""Andreas R\366ver",
@@ -284,8 +286,6 @@ static const char *credits[] = {
"\\C\\c2""Final MI1 CD music support, initial Ogg Vorbis support",
"\\C\\c0""Andr\351 Souza",
"\\C\\c2""SDL-based OpenGL renderer",
-"\\C\\c0""Tim Phillips",
-"\\C\\c2""Initial MI1 CD music support",
"\\C\\c0""Robin Watts",
"\\C\\c2""ARM assembly routines for the Windows CE port",
"\\C\\c0""",
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 3bcf770ff3..1afd18ec52 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -23,6 +23,7 @@
*/
#include "common/stdafx.h"
+#include "common/events.h"
#include "gui/newgui.h"
#include "gui/dialog.h"
@@ -233,7 +234,7 @@ void Dialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
}
// ESC closes all dialogs by default
- if (keycode == 27) {
+ if (keycode == Common::KEYCODE_ESCAPE) {
setResult(-1);
close();
}
diff --git a/gui/editable.cpp b/gui/editable.cpp
index 6199ea67fa..a8638b8b48 100644
--- a/gui/editable.cpp
+++ b/gui/editable.cpp
@@ -23,6 +23,7 @@
*/
#include "common/stdafx.h"
+#include "common/events.h"
#include "gui/editable.h"
#include "gui/newgui.h"
@@ -94,17 +95,17 @@ bool EditableWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
drawCaret(true);
switch (keycode) {
- case '\n': // enter/return
- case '\r':
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_KP_ENTER:
// confirm edit and exit editmode
endEditMode();
dirty = true;
break;
- case 27: // escape
+ case Common::KEYCODE_ESCAPE:
abortEditMode();
dirty = true;
break;
- case 8: // backspace
+ case Common::KEYCODE_BACKSPACE:
if (_caretPos > 0) {
_caretPos--;
_editString.deleteChar(_caretPos);
@@ -112,32 +113,32 @@ bool EditableWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
}
forcecaret = true;
break;
- case 127: // delete
+ case Common::KEYCODE_DELETE:
if (_caretPos < (int)_editString.size()) {
_editString.deleteChar(_caretPos);
dirty = true;
}
forcecaret = true;
break;
- case 256 + 20: // left arrow
+ case Common::KEYCODE_LEFT:
if (_caretPos > 0) {
dirty = setCaretPos(_caretPos - 1);
}
forcecaret = true;
dirty = true;
break;
- case 256 + 19: // right arrow
+ case Common::KEYCODE_RIGHT:
if (_caretPos < (int)_editString.size()) {
dirty = setCaretPos(_caretPos + 1);
}
forcecaret = true;
dirty = true;
break;
- case 256 + 22: // home
+ case Common::KEYCODE_HOME:
dirty = setCaretPos(0);
forcecaret = true;
break;
- case 256 + 23: // end
+ case Common::KEYCODE_END:
dirty = setCaretPos(_editString.size());
forcecaret = true;
break;
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 4a92de1101..995a0cf78a 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -218,15 +218,9 @@ EditGameDialog::EditGameDialog(const String &domain, const String &desc)
//
// 5) The volume tab
//
- int volControlPos = g_gui.evaluator()->getVar("volumeControlsInAudio", true);
+ tab->addTab("Volume");
- if (!volControlPos) {
- tab->addTab("Volume");
-
- _globalVolumeOverride = new CheckboxWidget(tab, "gameoptions_volumeCheckbox", "Override global volume settings", kCmdGlobalVolumeOverride, 0);
- } else {
- _globalVolumeOverride = NULL;
- }
+ _globalVolumeOverride = new CheckboxWidget(tab, "gameoptions_volumeCheckbox", "Override global volume settings", kCmdGlobalVolumeOverride, 0);
addVolumeControls(tab, "gameoptions_");
@@ -288,7 +282,7 @@ void EditGameDialog::open() {
OptionsDialog::open();
int sel, i;
- bool e, f;
+ bool e;
// En-/disable dialog items depending on whether overrides are active or not.
@@ -302,17 +296,12 @@ void EditGameDialog::open() {
ConfMan.hasKey("output_rate", _domain) ||
ConfMan.hasKey("subtitles", _domain) ||
ConfMan.hasKey("talkspeed", _domain);
+ _globalAudioOverride->setState(e);
- f = ConfMan.hasKey("music_volume", _domain) ||
+ e = ConfMan.hasKey("music_volume", _domain) ||
ConfMan.hasKey("sfx_volume", _domain) ||
ConfMan.hasKey("speech_volume", _domain);
-
- if (_globalVolumeOverride) {
- _globalAudioOverride->setState(e);
- _globalVolumeOverride->setState(f);
- } else {
- _globalAudioOverride->setState(e || f);
- }
+ _globalVolumeOverride->setState(e);
e = ConfMan.hasKey("soundfont", _domain) ||
ConfMan.hasKey("multi_midi", _domain) ||
@@ -599,6 +588,8 @@ void LauncherDialog::updateListing() {
if (g.contains("description"))
description = g.description();
}
+ if (description.empty())
+ description = "Unknown (target " + iter->_key + ", gameid " + gameid + ")";
if (!gameid.empty() && !description.empty()) {
// Insert the game into the launcher list
diff --git a/gui/massadd.cpp b/gui/massadd.cpp
index c12e60ea8b..987a92efb5 100644
--- a/gui/massadd.cpp
+++ b/gui/massadd.cpp
@@ -27,6 +27,7 @@
#include "engines/engine.h"
#include "base/game.h"
#include "base/plugins.h"
+#include "common/events.h"
#include "gui/launcher.h" // For addGameToConf()
#include "gui/massadd.h"
@@ -85,10 +86,10 @@ MassAddDialog::MassAddDialog(const FilesystemNode &startDir)
_gameProgressText = new StaticTextWidget(this, "massadddialog_gameprogress",
"... progress ...");
- _okButton = new ButtonWidget(this, "massadddialog_ok", "OK", kOkCmd, '\n');
+ _okButton = new ButtonWidget(this, "massadddialog_ok", "OK", kOkCmd, Common::ASCII_RETURN);
_okButton->setEnabled(false);
- new ButtonWidget(this, "massadddialog_cancel", "Cancel", kCancelCmd, '\27');
+ new ButtonWidget(this, "massadddialog_cancel", "Cancel", kCancelCmd, Common::ASCII_ESCAPE);
}
diff --git a/gui/message.cpp b/gui/message.cpp
index 114d4f38c5..958d8e3dc8 100644
--- a/gui/message.cpp
+++ b/gui/message.cpp
@@ -23,6 +23,7 @@
*/
#include "common/stdafx.h"
+#include "common/events.h"
#include "common/str.h"
#include "common/system.h"
#include "gui/message.h"
@@ -96,10 +97,10 @@ MessageDialog::MessageDialog(const Common::String &message, const char *defaultB
}
if (defaultButton)
- addButton(this, okButtonPos, _h - buttonHeight - 8, defaultButton, kOkCmd, '\n'); // Confirm dialog
+ addButton(this, okButtonPos, _h - buttonHeight - 8, defaultButton, kOkCmd, Common::ASCII_RETURN); // Confirm dialog
if (altButton)
- addButton(this, cancelButtonPos, _h - buttonHeight - 8, altButton, kCancelCmd, '\27'); // Cancel dialog
+ addButton(this, cancelButtonPos, _h - buttonHeight - 8, altButton, kCancelCmd, Common::ASCII_ESCAPE); // Cancel dialog
}
void MessageDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
diff --git a/gui/newgui.cpp b/gui/newgui.cpp
index eefb3e2f64..ad1933863a 100644
--- a/gui/newgui.cpp
+++ b/gui/newgui.cpp
@@ -139,7 +139,8 @@ bool NewGui::loadNewTheme(const Common::String &style) {
delete _theme;
_theme = 0;
- if (style.compareToIgnoreCase("classic (builtin)") == 0) {
+ if (style.compareToIgnoreCase("classic (builtin)") == 0 ||
+ style.compareToIgnoreCase("classic") == 0) {
_theme = new ThemeClassic(_system, style);
} else {
if (Theme::themeConfigUseable(style, "", &styleType, &cfg)) {
diff --git a/gui/options.cpp b/gui/options.cpp
index 76bec036ad..6d588b6b44 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -239,7 +239,7 @@ void OptionsDialog::open() {
int speed;
int sliderMaxValue = _subSpeedSlider->getMaxValue();
- _subMode = getSubtitleMode(ConfMan.getBool("subtitles", _domain), ConfMan.getBool("speech_mute"));
+ _subMode = getSubtitleMode(ConfMan.getBool("subtitles", _domain), ConfMan.getBool("speech_mute", _domain));
_subToggleButton->setLabel(_subModeDesc[_subMode]);
// Engines that reuse the subtitle speed widget set their own max value.
@@ -676,18 +676,10 @@ GlobalOptionsDialog::GlobalOptionsDialog()
//
tab->addTab("Audio");
addAudioControls(tab, "globaloptions_");
-
- int volControlPos = g_gui.evaluator()->getVar("volumeControlsInAudio", true);
-
- if (volControlPos)
- addVolumeControls(tab, "globaloptions_");
-
addSubtitleControls(tab, "globaloptions_");
- if (!volControlPos) {
- tab->addTab("Volume");
- addVolumeControls(tab, "globaloptions_");
- }
+ tab->addTab("Volume");
+ addVolumeControls(tab, "globaloptions_");
// TODO: cd drive setting
diff --git a/gui/theme-config.cpp b/gui/theme-config.cpp
index 55a9ca9600..c12ca009da 100644
--- a/gui/theme-config.cpp
+++ b/gui/theme-config.cpp
@@ -193,9 +193,12 @@ const char *Theme::_defaultConfigINI =
"# audio tab\n"
"opYoffset=vBorder\n"
"useWithPrefix=audioControls globaloptions_\n"
-"useWithPrefix=volumeControls globaloptions_\n"
"useWithPrefix=subtitleControls globaloptions_\n"
"\n"
+"# volume tab\n"
+"opYoffset=vBorder\n"
+"useWithPrefix=volumeControls globaloptions_\n"
+"\n"
"# MIDI tab\n"
"opYoffset=vBorder\n"
"useWithPrefix=midiControls globaloptions_\n"
@@ -274,9 +277,14 @@ const char *Theme::_defaultConfigINI =
"gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight\n"
"opYoffset=(opYoffset + buttonHeight)\n"
"useWithPrefix=audioControls gameoptions_\n"
-"useWithPrefix=volumeControls gameoptions_\n"
"useWithPrefix=subtitleControls gameoptions_\n"
"\n"
+"# volume tab\n"
+"opYoffset=vBorder\n"
+"gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 190) buttonHeight\n"
+"opYoffset=(opYoffset + buttonHeight)\n"
+"useWithPrefix=volumeControls gameoptions_\n"
+"\n"
"# midi tab\n"
"opYoffset=vBorder\n"
"gameoptions_midiCheckbox=gox opYoffset (kFontHeight + 10 + 174) buttonHeight\n"
@@ -480,7 +488,6 @@ const char *Theme::_defaultConfigINI =
"def_insetH=(h - 13 - insetY)\n"
"def_launcherVersionX=50\n"
"def_launcherVersionY=5\n"
-"def_volumeControlsInAudio=false\n"
"def_midiControlsSpacing=2\n"
"def_gameOptionsOverrideVPad=10\n"
"def_aboutXOff=3\n"
@@ -488,32 +495,6 @@ const char *Theme::_defaultConfigINI =
"def_aboutOuterBorder=10\n"
"\n"
"use=XxY\n"
-"\n"
-"# Override audio tab\n"
-"set_parent=gameoptions\n"
-"vBorder=5\n"
-"\n"
-"# audio tab\n"
-"opYoffset=vBorder\n"
-"useWithPrefix=audioControls globaloptions_\n"
-"useWithPrefix=subtitleControls globaloptions_\n"
-"\n"
-"# volume tab\n"
-"opYoffset=vBorder\n"
-"useWithPrefix=volumeControls globaloptions_\n"
-"\n"
-"# audio tab\n"
-"opYoffset=vBorder\n"
-"gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight\n"
-"opYoffset=(opYoffset + buttonHeight + 6)\n"
-"useWithPrefix=audioControls gameoptions_\n"
-"useWithPrefix=subtitleControls gameoptions_\n"
-"\n"
-"# volume tab\n"
-"opYoffset=vBorder\n"
-"gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 190) buttonHeight\n"
-"opYoffset=(opYoffset + buttonHeight + 6)\n"
-"useWithPrefix=volumeControls gameoptions_\n"
"";
using Common::String;
diff --git a/gui/theme.h b/gui/theme.h
index e64b65645c..b3286d3d48 100644
--- a/gui/theme.h
+++ b/gui/theme.h
@@ -35,7 +35,7 @@
#include "graphics/surface.h"
#include "graphics/fontman.h"
-#define THEME_VERSION 21
+#define THEME_VERSION 22
namespace GUI {
diff --git a/gui/themes/classic080.ini b/gui/themes/classic080.ini
index bb1db62979..481d00c27a 100644
--- a/gui/themes/classic080.ini
+++ b/gui/themes/classic080.ini
@@ -1,7 +1,7 @@
# $URL$
# $Id$
[theme]
-version=19
+version=22
type=classic
name=Classic (ScummVM 0.8.0)
@@ -16,53 +16,6 @@ textcolorhi=0 255 0
font="builtin"
blending=true
-# Define our classic greenish theme here
-[320xY]
-def_widgetSize=kNormalWidgetSize
-def_buttonWidth=kButtonWidth
-def_buttonHeight=kButtonHeight
-def_sliderWidth=kSliderWidth
-def_sliderHeight=kSliderHeight
-def_kLineHeight=12
-def_kFontHeight=10
-def_insetX=10
-def_insetY=10
-def_insetW=(w - 2 * 10)
-def_insetH=(h - 30)
-def_gameOptionsLabelWidth=60
-def_tabPopupsLabelW=100
-def_aboutXOff=3
-def_aboutYOff=2
-def_aboutOuterBorder=10
-def_scummmainHOffset=8
-def_scummmainVSpace=5
-def_scummmainVAddOff=2
-def_scummmainButtonWidth=90
-def_scummmainButtonHeight=16
-def_scummhelpX=5
-def_scummhelpW=(w - 2 * 5)
-def_midiControlsSpacing=1
-def_vcAudioTabIndent=0
-def_vcAudioTabSpacing=2
-use=XxY
-
-TabWidget.tabWidth=0
-TabWidget.tabHeight=16
-TabWidget.titleVPad=2
-# Scumm Saveload dialog
-scummsaveload=8 8 (w - 2 * 8) (h - 16)
-set_parent=scummsaveload
-scummsaveload_title=10 2 (parent.w - 2 * 10) kLineHeight
-scummsaveload_list=10 18 prev.w (parent.h - 17 - buttonHeight - 8 - self.y)
-scummsaveload_thumbnail=(parent.w - (kThumbnailWidth + 22)) 18
-scummsaveload_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
-scummsaveload_choose=(prev.x2 + 10) prev.y prev.w prev.h
-scummsaveload_extinfo.visible=false
-
-# MM NES resolution
-[256x240]
-useAsIs=320xY
-
[XxY]
def_widgetSize=kBigWidgetSize
def_buttonWidth=kBigButtonWidth
@@ -159,9 +112,12 @@ useWithPrefix=graphicsControls globaloptions_
# audio tab
opYoffset=vBorder
useWithPrefix=audioControls globaloptions_
-useWithPrefix=volumeControls globaloptions_
useWithPrefix=subtitleControls globaloptions_
+# volume tab
+opYoffset=vBorder
+useWithPrefix=volumeControls globaloptions_
+
# MIDI tab
opYoffset=vBorder
useWithPrefix=midiControls globaloptions_
@@ -185,6 +141,8 @@ yoffset=vBorder
glOff=((buttonHeight - kLineHeight) / 2 + 2)
globaloptions_themebutton2=10 yoffset buttonWidth buttonHeight
globaloptions_curtheme=(prev.x2 + 20) (yoffset + glOff) (parent.w - (prev.w + 20) - 10) kLineHeight
+yoffset=(yoffset + buttonHeight + 12)
+globaloptions_autosaveperiod=10 yoffset (parent.w - 10 - 25) (kLineHeight + 2)
globaloptions_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
globaloptions_ok=(prev.x2 + 10) prev.y prev.w prev.h
@@ -238,9 +196,14 @@ opYoffset=vBorder
gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
opYoffset=(opYoffset + buttonHeight)
useWithPrefix=audioControls gameoptions_
-useWithPrefix=volumeControls gameoptions_
useWithPrefix=subtitleControls gameoptions_
+# volume tab
+opYoffset=vBorder
+gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 190) buttonHeight
+opYoffset=(opYoffset + buttonHeight)
+useWithPrefix=volumeControls gameoptions_
+
# midi tab
opYoffset=vBorder
gameoptions_midiCheckbox=gox opYoffset (kFontHeight + 10 + 174) buttonHeight
@@ -260,6 +223,17 @@ keysdialog_list=10 10 (prev.x - 20) (parent.h - kLineHeight * 4 - self.y)
keysdialog_action=prev.x (parent.h - kLineHeight * 3) (parent.w - self.x * 2) kLineHeight
keysdialog_mapping=prev.x (prev.y + kLineHeight) prev.w prev.h
+### mass add dialog
+massadddialog=10 20 300 174
+set_parent=massadddialog
+massadddialog_caption=10 (10 + 1 * kLineHeight) (parent.w - 2*10) kLineHeight
+massadddialog_caption.align=kTextAlignCenter
+massadddialog_dirprogress=10 (10 + 3 * kLineHeight) prev.w prev.h
+massadddialog_dirprogress.align=kTextAlignCenter
+massadddialog_gameprogress=10 (10 + 4 * kLineHeight) prev.w prev.h
+massadddialog_gameprogress.align=kTextAlignCenter
+massadddialog_ok=((parent.w - (buttonWidth * 2)) / 2) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
+massadddialog_cancel=(prev.x2 + 10) prev.y prev.w prev.h
##### SCUMM dialogs
@@ -341,6 +315,8 @@ aux=10
auw=(parent.w - 2 * 10)
auMidiPopup=(aux - 5) (opYoffset - 1) (auw + 5) (kLineHeight + 2)
opYoffset=(opYoffset + buttonHeight + 4)
+auSampleRatePopup=(aux - 5) (opYoffset - 1) (auw + 5) (kLineHeight + 2)
+opYoffset=(opYoffset + buttonHeight + 4)
[volumeControls]
vctextw=(95 + vcAudioTabIndent)
@@ -365,7 +341,8 @@ opYoffset=(opYoffset + sliderHeight + vcAudioTabSpacing)
[midiControls]
mcx=10
mcFontButton=mcx opYoffset buttonWidth buttonHeight
-mcFontPath=(prev.x2 + 20) (opYoffset + 3) (parent.w - (buttonWidth + 20) - 15) kLineHeight
+mcFontPath=(prev.x2 + 20) (opYoffset + 3) (parent.w - (buttonWidth + 20) - mcx - kLineHeight - 20) kLineHeight
+mcFontClearButton=(prev.x2 + 10) (opYoffset + 3) kLineHeight kLineHeight
opYoffset=(opYoffset + buttonHeight + 2 * midiControlsSpacing)
mcMixedCheckbox=mcx opYoffset (kFontHeight + 10 + 135) buttonHeight
opYoffset=(opYoffset + buttonHeight + midiControlsSpacing)
@@ -419,6 +396,53 @@ smW=(scummmainButtonWidth + 2 * scummmainHOffset)
smH=(smY + scummmainVSpace)
scummmain=((w - smW) / 2) ((h - smH) / 2) smW smH
+# Define our classic greenish theme here
+[320xY]
+def_widgetSize=kNormalWidgetSize
+def_buttonWidth=kButtonWidth
+def_buttonHeight=kButtonHeight
+def_sliderWidth=kSliderWidth
+def_sliderHeight=kSliderHeight
+def_kLineHeight=12
+def_kFontHeight=10
+def_insetX=10
+def_insetY=10
+def_insetW=(w - 2 * 10)
+def_insetH=(h - 30)
+def_gameOptionsLabelWidth=60
+def_tabPopupsLabelW=100
+def_aboutXOff=3
+def_aboutYOff=2
+def_aboutOuterBorder=10
+def_scummmainHOffset=8
+def_scummmainVSpace=5
+def_scummmainVAddOff=2
+def_scummmainButtonWidth=90
+def_scummmainButtonHeight=16
+def_scummhelpX=5
+def_scummhelpW=(w - 2 * 5)
+def_midiControlsSpacing=1
+def_vcAudioTabIndent=0
+def_vcAudioTabSpacing=2
+use=XxY
+
+TabWidget.tabWidth=0
+TabWidget.tabHeight=16
+TabWidget.titleVPad=2
+# Scumm Saveload dialog
+scummsaveload=8 8 (w - 2 * 8) (h - 16)
+set_parent=scummsaveload
+scummsaveload_title=10 2 (parent.w - 2 * 10) kLineHeight
+scummsaveload_list=10 18 prev.w (parent.h - 17 - buttonHeight - 8 - self.y)
+scummsaveload_thumbnail=(parent.w - (kThumbnailWidth + 22)) 18
+scummsaveload_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
+scummsaveload_choose=(prev.x2 + 10) prev.y prev.w prev.h
+scummsaveload_extinfo.visible=false
+
+# MM NES resolution
+[256x240]
+useAsIs=320xY
+
# PSP GUI
[480x272]
def_buttonWidth=100
@@ -429,7 +453,6 @@ def_insetW=(w - 2 * insetX)
def_insetH=(h - 13 - insetY)
def_launcherVersionX=50
def_launcherVersionY=5
-def_volumeControlsInAudio=false
def_midiControlsSpacing=2
def_gameOptionsOverrideVPad=10
def_aboutXOff=3
@@ -437,30 +460,3 @@ def_aboutYOff=2
def_aboutOuterBorder=10
use=XxY
-
-# Override audio tab
-set_parent=gameoptions
-vBorder=5
-
-# audio tab
-opYoffset=vBorder
-useWithPrefix=audioControls globaloptions_
-useWithPrefix=subtitleControls globaloptions_
-
-# volume tab
-opYoffset=vBorder
-useWithPrefix=volumeControls globaloptions_
-
-# audio tab
-opYoffset=vBorder
-gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
-opYoffset=(opYoffset + buttonHeight + 6)
-useWithPrefix=audioControls gameoptions_
-useWithPrefix=subtitleControls gameoptions_
-
-# volume tab
-opYoffset=vBorder
-gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 190) buttonHeight
-opYoffset=(opYoffset + buttonHeight + 6)
-useWithPrefix=volumeControls gameoptions_
-
diff --git a/gui/themes/modern.ini b/gui/themes/modern.ini
index c5c8d8c46c..25fd8da01d 100644
--- a/gui/themes/modern.ini
+++ b/gui/themes/modern.ini
@@ -1,7 +1,7 @@
# $URL$
# $Id$
[theme]
-version=21
+version=22
type=modern
name=Modern Style
@@ -223,7 +223,7 @@ Console.leftPadding=7
Console.rightPadding=5
Console.topPadding=5
Console.bottomPadding=5
-TabWidget.tabWidth=85
+TabWidget.tabWidth=75
TabWidget.tabHeight=27
TabWidget.titleVPad=8
TabWidget.navButtonRightPad=3
@@ -236,15 +236,7 @@ opHeight=insetH
useWithPrefix=chooser defaultChooser_
##### browser
-browser=insetX insetY insetW insetH
-set_parent=browser
-browser_headline=10 5 (parent.w - 2 * 10) kLineHeight
-browser_headline.align=kTextAlignCenter
-browser_path=10 (prev.y2 + 5) prev.w prev.h
-browser_list=10 prev.y2 prev.w (parent.h - 3 * kLineHeight - buttonHeight - 14)
-browser_up=10 (parent.h - buttonHeight - 8) buttonWidth buttonHeight
-browser_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
-browser_choose=(prev.x2 + 10) prev.y prev.w prev.h
+use=browser
##### launcher
launcher_version=launcherVersionX launcherVersionY 247 kLineHeight
@@ -278,9 +270,12 @@ useWithPrefix=graphicsControls globaloptions_
# audio tab
opYoffset=vBorder
useWithPrefix=audioControls globaloptions_
-useWithPrefix=volumeControls globaloptions_
useWithPrefix=subtitleControls globaloptions_
+# volume tab
+opYoffset=vBorder
+useWithPrefix=volumeControls globaloptions_
+
# MIDI tab
opYoffset=vBorder
useWithPrefix=midiControls globaloptions_
@@ -359,9 +354,14 @@ opYoffset=vBorder
gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
opYoffset=(opYoffset + buttonHeight + 6)
useWithPrefix=audioControls gameoptions_
-useWithPrefix=volumeControls gameoptions_
useWithPrefix=subtitleControls gameoptions_
+# volume tab
+opYoffset=vBorder
+gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
+opYoffset=(opYoffset + buttonHeight + 6)
+useWithPrefix=volumeControls gameoptions_
+
# midi tab
opYoffset=vBorder
gameoptions_midiCheckbox=gox opYoffset (kFontHeight + 10 + 174) buttonHeight
@@ -460,6 +460,17 @@ chooser_list=10 (6 + kLineHeight + 2) prev.w (opHeight - self.y - buttonHeight -
chooser_cancel=(chooserW - 2 * (buttonWidth + 10)) (opHeight - buttonHeight - 8) buttonWidth buttonHeight
chooser_ok=(prev.x2 + 10) prev.y prev.w prev.h
+[browser]
+browser=insetX insetY insetW insetH
+set_parent=browser
+browser_headline=10 5 (parent.w - 2 * 10) kLineHeight
+browser_headline.align=kTextAlignCenter
+browser_path=10 (prev.y2 + 5) prev.w prev.h
+browser_list=10 prev.y2 prev.w (parent.h - 3 * kLineHeight - buttonHeight - 14)
+browser_up=10 (parent.h - buttonHeight - 8) buttonWidth buttonHeight
+browser_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight
+browser_choose=(prev.x2 + 10) prev.y prev.w prev.h
+
[graphicsControls]
gcx=(opXoffset + 10)
gcw=(parent.w - gcx - 25)
@@ -566,7 +577,6 @@ use=extra
pix_checkbox_empty="checkbox_empty320.bmp"
pix_checkbox_checked="checkbox_checked320.bmp"
pix_cursor_image="cursor320.bmp"
-def_volumeControlsInAudio=false
# NES resoltuion
[256x240]
@@ -582,7 +592,6 @@ def_insetW=(w - buttonWidth - 17 * 2 - insetX)
def_insetH=(h - 13 - insetY)
def_launcherVersionX=50
def_launcherVersionY=5
-def_volumeControlsInAudio=false
def_midiControlsSpacing=2
def_gameOptionsOverrideVPad=10
def_aboutXOff=3
@@ -603,28 +612,6 @@ launcher_logo.visible=true
# Override extras
inactive_dialog_shading=kShadingNone
-# Override audio tab
-set_parent=gameoptions
-vBorder=10
-
-# audio tab
-opYoffset=vBorder
-useWithPrefix=audioControls globaloptions_
-useWithPrefix=subtitleControls globaloptions_
-
-# volume tab
-opYoffset=vBorder
-useWithPrefix=volumeControls globaloptions_
-
-# audio tab
-opYoffset=vBorder
-gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
-opYoffset=(opYoffset + buttonHeight + 6)
-useWithPrefix=audioControls gameoptions_
-useWithPrefix=subtitleControls gameoptions_
-
-# volume tab
-opYoffset=vBorder
-gameoptions_volumeCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
-opYoffset=(opYoffset + buttonHeight + 6)
-useWithPrefix=volumeControls gameoptions_
+# Override browser
+def_buttonWidth=90
+use=browser
diff --git a/sound/mixer.cpp b/sound/mixer.cpp
index d942c575ac..cc353d58b4 100644
--- a/sound/mixer.cpp
+++ b/sound/mixer.cpp
@@ -65,8 +65,6 @@ protected:
AudioStream *_input;
public:
-
- Channel(Mixer *mixer, Mixer::SoundType type, int id = -1);
Channel(Mixer *mixer, Mixer::SoundType type, AudioStream *input, bool autofreeStream, bool reverseStereo = false, int id = -1, bool permanent = false);
virtual ~Channel();
@@ -374,13 +372,6 @@ int Mixer::getVolumeForSoundType(SoundType type) const {
#pragma mark -
-Channel::Channel(Mixer *mixer, Mixer::SoundType type, int id)
- : _type(type), _mixer(mixer), _autofreeStream(true),
- _volume(Mixer::kMaxChannelVolume), _balance(0), _paused(false), _id(id), _samplesConsumed(0),
- _samplesDecoded(0), _mixerTimeStamp(0), _converter(0), _input(0) {
- assert(mixer);
-}
-
Channel::Channel(Mixer *mixer, Mixer::SoundType type, AudioStream *input,
bool autofreeStream, bool reverseStereo, int id, bool permanent)
: _type(type), _mixer(mixer), _autofreeStream(autofreeStream),
diff --git a/sound/module.mk b/sound/module.mk
index a204dbadb9..bcb822b86d 100644
--- a/sound/module.mk
+++ b/sound/module.mk
@@ -16,7 +16,6 @@ MODULE_OBJS := \
mp3.o \
mpu401.o \
null.o \
- rate.o \
voc.o \
vorbis.o \
wave.o \
@@ -31,5 +30,14 @@ MODULE_OBJS := \
softsynth/fluidsynth.o \
softsynth/mt32.o \
+ifndef USE_ARM_SOUND_ASM
+MODULE_OBJS += \
+ rate.o
+else
+MODULE_OBJS += \
+ rate_arm.o \
+ rate_arm_asm.o
+endif
+
# Include common rules
include $(srcdir)/rules.mk
diff --git a/sound/rate.cpp b/sound/rate.cpp
index 7d1a7b51cf..6a51f3d5d5 100644
--- a/sound/rate.cpp
+++ b/sound/rate.cpp
@@ -55,6 +55,107 @@ namespace Audio {
/**
+ * Audio rate converter based on simple resampling. Used when no
+ * interpolation is required.
+ *
+ * Limited to sampling frequency <= 65535 Hz.
+ */
+template<bool stereo, bool reverseStereo>
+class SimpleRateConverter : public RateConverter {
+protected:
+ st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
+ const st_sample_t *inPtr;
+ int inLen;
+
+ /** position of how far output is ahead of input */
+ /** Holds what would have been opos-ipos */
+ long opos;
+
+ /** fractional position increment in the output stream */
+ long opos_inc;
+
+public:
+ SimpleRateConverter(st_rate_t inrate, st_rate_t outrate);
+ int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
+ int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
+ return ST_SUCCESS;
+ }
+};
+
+
+/*
+ * Prepare processing.
+ */
+template<bool stereo, bool reverseStereo>
+SimpleRateConverter<stereo, reverseStereo>::SimpleRateConverter(st_rate_t inrate, st_rate_t outrate) {
+ if (inrate == outrate) {
+ error("Input and Output rates must be different to use rate effect");
+ }
+
+ if ((inrate % outrate) != 0) {
+ error("Input rate must be a multiple of Output rate to use rate effect");
+ }
+
+ if (inrate >= 65536 || outrate >= 65536) {
+ error("rate effect can only handle rates < 65536");
+ }
+
+ opos = 1;
+
+ /* increment */
+ opos_inc = inrate / outrate;
+
+ inLen = 0;
+}
+
+/*
+ * Processed signed long samples from ibuf to obuf.
+ * Return number of samples processed.
+ */
+template<bool stereo, bool reverseStereo>
+int SimpleRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
+ st_sample_t *ostart, *oend;
+
+ ostart = obuf;
+ oend = obuf + osamp * 2;
+
+ while (obuf < oend) {
+
+ // read enough input samples so that opos >= 0
+ do {
+ // Check if we have to refill the buffer
+ if (inLen == 0) {
+ inPtr = inBuf;
+ inLen = input.readBuffer(inBuf, ARRAYSIZE(inBuf));
+ if (inLen <= 0)
+ return ST_EOF;
+ }
+ inLen -= (stereo ? 2 : 1);
+ opos--;
+ if (opos >= 0) {
+ inPtr += (stereo ? 2 : 1);
+ }
+ } while (opos >= 0);
+
+ st_sample_t out0, out1;
+ out0 = *inPtr++;
+ out1 = (stereo ? *inPtr++ : out0);
+
+ // Increment output position
+ opos += opos_inc;
+
+ // output left channel
+ clampedAdd(obuf[reverseStereo ], (out0 * (int)vol_l) / Audio::Mixer::kMaxMixerVolume);
+
+ // output right channel
+ clampedAdd(obuf[reverseStereo ^ 1], (out1 * (int)vol_r) / Audio::Mixer::kMaxMixerVolume);
+
+ obuf += 2;
+ }
+ return ST_SUCCESS;
+}
+
+/**
* Audio rate converter based on simple linear Interpolation.
*
* The use of fractional increment allows us to use no buffer. It
@@ -73,24 +174,21 @@ protected:
int inLen;
/** fractional position of the output stream in input stream unit */
- unsigned long opos, opos_frac;
+ long opos, opos_frac;
/** fractional position increment in the output stream */
- unsigned long opos_inc, opos_inc_frac;
-
- /** position in the input stream (integer) */
- unsigned long ipos;
+ long opos_inc, opos_inc_frac;
/** last sample(s) in the input stream (left/right channel) */
- st_sample_t ilast[2];
+ st_sample_t ilast0, ilast1;
/** current sample(s) in the input stream (left/right channel) */
- st_sample_t icur[2];
+ st_sample_t icur0, icur1;
public:
LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
+ return ST_SUCCESS;
}
};
@@ -119,10 +217,8 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate
opos_inc_frac = incr & ((1UL << FRAC_BITS) - 1);
opos_inc = incr >> FRAC_BITS;
- ipos = 0;
-
- ilast[0] = ilast[1] = 0;
- icur[0] = icur[1] = 0;
+ ilast0 = ilast1 = 0;
+ icur0 = icur1 = 0;
inLen = 0;
}
@@ -134,64 +230,56 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate
template<bool stereo, bool reverseStereo>
int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
st_sample_t *ostart, *oend;
- st_sample_t out[2];
-
- const int numChannels = stereo ? 2 : 1;
- int i;
ostart = obuf;
oend = obuf + osamp * 2;
while (obuf < oend) {
- // read enough input samples so that ipos > opos
- while (ipos <= opos) {
+ // read enough input samples so that opos <= 0
+ while (0 <= opos) {
// Check if we have to refill the buffer
if (inLen == 0) {
inPtr = inBuf;
inLen = input.readBuffer(inBuf, ARRAYSIZE(inBuf));
if (inLen <= 0)
- goto the_end;
+ return ST_EOF;
}
- for (i = 0; i < numChannels; i++) {
- ilast[i] = icur[i];
- icur[i] = *inPtr++;
- inLen--;
+ inLen -= (stereo ? 2 : 1);
+ ilast0 = icur0;
+ icur0 = *inPtr++;
+ if (stereo) {
+ ilast1 = icur1;
+ icur1 = *inPtr++;
}
- ipos++;
+ opos--;
}
// Loop as long as the outpos trails behind, and as long as there is
// still space in the output buffer.
- while (ipos > opos) {
-
+ while (0 > opos && obuf < oend) {
// interpolate
- out[0] = out[1] = (st_sample_t)(ilast[0] + (((icur[0] - ilast[0]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
-
- if (stereo) {
- // interpolate
- out[reverseStereo ? 0 : 1] = (st_sample_t)(ilast[1] + (((icur[1] - ilast[1]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
- }
+ st_sample_t out0, out1;
+ out0 = (st_sample_t)(ilast0 + (((icur0 - ilast0) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
+ out1 = (stereo ?
+ (st_sample_t)(ilast1 + (((icur1 - ilast1) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS)) :
+ out0);
// output left channel
- clampedAdd(*obuf++, (out[0] * (int)vol_l) / Audio::Mixer::kMaxMixerVolume);
+ clampedAdd(obuf[reverseStereo ], (out0 * (int)vol_l) / Audio::Mixer::kMaxMixerVolume);
// output right channel
- clampedAdd(*obuf++, (out[1] * (int)vol_r) / Audio::Mixer::kMaxMixerVolume);
+ clampedAdd(obuf[reverseStereo ^ 1], (out1 * (int)vol_r) / Audio::Mixer::kMaxMixerVolume);
+
+ obuf += 2;
// Increment output position
- unsigned long tmp = opos_frac + opos_inc_frac;
+ long tmp = opos_frac + opos_inc_frac;
opos += opos_inc + (tmp >> FRAC_BITS);
opos_frac = tmp & ((1UL << FRAC_BITS) - 1);
-
- // Abort if we reached the end of the output buffer
- if (obuf >= oend)
- goto the_end;
}
}
-
-the_end:
- return (ST_SUCCESS);
+ return ST_SUCCESS;
}
@@ -232,27 +320,24 @@ public:
// Mix the data into the output buffer
ptr = _buffer;
- while (len-- > 0) {
- st_sample_t tmp0, tmp1;
- tmp0 = tmp1 = *ptr++;
- if (stereo) {
- if (reverseStereo)
- tmp0 = *ptr++;
- else
- tmp1 = *ptr++;
- len--;
- }
+ for (; len > 0; len -= (stereo ? 2 : 1)) {
+ st_sample_t out0, out1;
+ out0 = *ptr++;
+ out1 = (stereo ? *ptr++ : out0);
// output left channel
- clampedAdd(*obuf++, (tmp0 * (int)vol_l) / Audio::Mixer::kMaxMixerVolume);
+ clampedAdd(obuf[reverseStereo ], (out0 * (int)vol_l) / Audio::Mixer::kMaxMixerVolume);
// output right channel
- clampedAdd(*obuf++, (tmp1 * (int)vol_r) / Audio::Mixer::kMaxMixerVolume);
+ clampedAdd(obuf[reverseStereo ^ 1], (out1 * (int)vol_r) / Audio::Mixer::kMaxMixerVolume);
+
+ obuf += 2;
}
- return (ST_SUCCESS);
+ return ST_SUCCESS;
}
+
virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
+ return ST_SUCCESS;
}
};
@@ -265,14 +350,23 @@ public:
*/
RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
if (inrate != outrate) {
- if (stereo) {
- if (reverseStereo)
- return new LinearRateConverter<true, true>(inrate, outrate);
- else
- return new LinearRateConverter<true, false>(inrate, outrate);
- } else
- return new LinearRateConverter<false, false>(inrate, outrate);
- //return new ResampleRateConverter(inrate, outrate, 1);
+ if ((inrate % outrate) == 0) {
+ if (stereo) {
+ if (reverseStereo)
+ return new SimpleRateConverter<true, true>(inrate, outrate);
+ else
+ return new SimpleRateConverter<true, false>(inrate, outrate);
+ } else
+ return new SimpleRateConverter<false, false>(inrate, outrate);
+ } else {
+ if (stereo) {
+ if (reverseStereo)
+ return new LinearRateConverter<true, true>(inrate, outrate);
+ else
+ return new LinearRateConverter<true, false>(inrate, outrate);
+ } else
+ return new LinearRateConverter<false, false>(inrate, outrate);
+ }
} else {
if (stereo) {
if (reverseStereo)
diff --git a/sound/rate.h b/sound/rate.h
index b130153b75..a45601549c 100644
--- a/sound/rate.h
+++ b/sound/rate.h
@@ -40,11 +40,15 @@ typedef uint32 st_size_t;
typedef uint32 st_rate_t;
/* Minimum and maximum values a sample can hold. */
-#define ST_SAMPLE_MAX 0x7fffL
-#define ST_SAMPLE_MIN (-ST_SAMPLE_MAX - 1L)
+enum {
+ ST_SAMPLE_MAX = 0x7fffL,
+ ST_SAMPLE_MIN = (-ST_SAMPLE_MAX - 1L)
+};
-#define ST_EOF (-1)
-#define ST_SUCCESS (0)
+enum {
+ ST_EOF = -1,
+ ST_SUCCESS = 0
+};
static inline void clampedAdd(int16& a, int b) {
register int val;
@@ -66,12 +70,6 @@ static inline void clampedAdd(int16& a, int b) {
#endif
}
-// Q&D hack to get this SOX stuff to work
-#define st_report warning
-#define st_warn warning
-#define st_fail error
-
-
class RateConverter {
public:
RateConverter() {}
diff --git a/tools/create_lure/create_lure_dat.cpp b/tools/create_lure/create_lure_dat.cpp
index 89a12be8e9..13f7c97964 100644
--- a/tools/create_lure/create_lure_dat.cpp
+++ b/tools/create_lure/create_lure_dat.cpp
@@ -121,7 +121,6 @@ void read_room_data(byte *&data, uint16 &totalSize)
if ((FROM_LE_16(headerEntry.offset) != 0) &&
(FROM_LE_16(headerEntry.offset) != 0xffff) &&
- (FROM_LE_16(headerEntry.roomNumber) != 0xc09) &&
(FROM_LE_16(headerEntry.roomNumber) != 0)) {
// Store offset of room entry
*offsetPtr++ = TO_LE_16(offset);
@@ -129,11 +128,10 @@ void read_room_data(byte *&data, uint16 &totalSize)
// Copy over basic room details
lure_exe.seek(DATA_SEGMENT + headerEntry.offset);
lure_exe.read(&buffer, sizeof(RoomResource));
-
RoomResourceOutput *rec = (RoomResourceOutput *) (data + offset);
rec->hdrFlags = headerEntry.hdrFlags;
rec->actions = FROM_LE_32(buffer.actions);
- rec->roomNumber = headerEntry.roomNumber;
+ rec->roomNumber = index;
rec->descId = headerEntry.descId;
rec->numLayers = buffer.numLayers;
memcpy(rec->layers, buffer.layers, 8);
@@ -141,6 +139,8 @@ void read_room_data(byte *&data, uint16 &totalSize)
rec->clippingXStart = TO_LE_16(FROM_LE_16(buffer.clippingXStart) - 0x80);
rec->clippingXEnd = (FROM_LE_16(buffer.clippingXEnd) == 0) ? 0 :
TO_LE_16(FROM_LE_16(buffer.clippingXEnd) - 0x80);
+ rec->exitTime = FROM_LE_32(buffer.exitTime);
+ rec->areaFlag = buffer.areaFlag;
rec->numExits = 0;
offset += sizeof(RoomResourceOutput);
@@ -283,10 +283,15 @@ void read_hotspot_data(byte *&data, uint16 &totalSize)
r->roomNumber = TO_LE_16(28);
// Find the walk-to coordinates for the hotspot
+ uint16 findId = FROM_LE_16(r->hotspotId);
walkCtr = 0;
- while ((walkCtr < walkNumEntries) &&
- (FROM_LE_16(walkList[walkCtr].hotspotId) != FROM_LE_16(r->hotspotId)))
+ while (walkCtr < walkNumEntries) {
+ uint16 id = FROM_LE_16(walkList[walkCtr].hotspotId);
+ if ((id == findId) || ((findId == 1007) && (id == 0xffff)))
+ break;
++walkCtr;
+ }
+
if (walkCtr == walkNumEntries) {
r->walkX = 0;
r->walkY = 0;
@@ -473,11 +478,33 @@ void read_room_exit_joins(byte *&data, uint16 &totalSize) {
void read_anim_data(byte *&data, uint16 &totalSize) {
// Add special pixel records
- add_anim_record(0x5c95);
- add_anim_record(0x5ce9); // Blacksmith in bar?
+ add_anim_record(0x55C0); // Player midswing animation
+ add_anim_record(0x55C9); // Player mid-level defend
+ add_anim_record(0x55D2); // Player high-level strike
+ add_anim_record(0x55DB); // Player high-level defend
+ add_anim_record(0x55E4); // Player low-level strike
+ add_anim_record(0x55ED); // Player low-level defend
+ add_anim_record(0x55F6); // Player fight animation
+ add_anim_record(0x55FF); // Pig fight animation
+ add_anim_record(0x5611); // Player mid-level strike
+ add_anim_record(0x5623); // Pig fight animation
+ add_anim_record(0x562C); // Misc fight animation
+ add_anim_record(0x5635); // Pig fight animation
+ add_anim_record(0x563E); // Player recoiling from hit
+ add_anim_record(0x5647); // Pig recoiling from hit
+ add_anim_record(0x5650); // Pig dies
add_anim_record(0x5915); // Blacksmith hammering
add_anim_record(0x59ED); // Ewan's alternate animation
+ add_anim_record(0x59FF); // Dragon breathing fire
+ add_anim_record(0x5A08); // Dragon breathing fire 2
+ add_anim_record(0x5A11); // Dragon breathing fire 3
+ add_anim_record(0x5A1A); // Player turning winch in room #48
+ add_anim_record(0x5A59); // Player pulling lever in room #48
+ add_anim_record(0x5A62); // Minnow pulling lever in room #48
+ add_anim_record(0x5AAA); // Goewin mixing potion
+ add_anim_record(0x5C95);
add_anim_record(0x5CAA); // Selena animation
+ add_anim_record(0x5CE9); // Blacksmith in bar?
add_anim_record(0x5D28); // Goewin animation
// Get the animation data records
@@ -881,32 +908,40 @@ void read_room_exit_coordinate_data(byte *&data, uint16 &totalSize)
{
// Read in the exit coordinates list
int roomNum, entryNum;
+ uint16 x, y;
+ RoomExitCoordinateEntryInputResource dataIn;
- totalSize = EXIT_COORDINATES_NUM_ROOMS * sizeof(RoomExitCoordinateEntryResource) + 2;
+ totalSize = EXIT_COORDINATES_NUM_ROOMS * sizeof(RoomExitCoordinateEntryOutputResource) + 2;
data = (byte *) malloc(totalSize);
lure_exe.seek(DATA_SEGMENT + EXIT_COORDINATES_OFFSET);
- lure_exe.read(data, totalSize - 2);
WRITE_LE_UINT16(data + totalSize - 2, 0xffff);
// Post process the list to adjust data
- RoomExitCoordinateEntryResource *rec = (RoomExitCoordinateEntryResource *) data;
+ RoomExitCoordinateEntryOutputResource *rec = (RoomExitCoordinateEntryOutputResource *) data;
for (roomNum = 1; roomNum <= EXIT_COORDINATES_NUM_ROOMS; ++roomNum, ++rec) {
+ lure_exe.read(&dataIn, sizeof(RoomExitCoordinateEntryInputResource));
+
for (entryNum = 0; entryNum < ROOM_EXIT_COORDINATES_NUM_ENTRIES; ++entryNum) {
- if ((rec->entries[entryNum].x != 0) || (rec->entries[entryNum].y != 0)) {
- rec->entries[entryNum].x = TO_LE_16(FROM_LE_16(rec->entries[entryNum].x) - 0x80);
- uint16 tempY = FROM_LE_16(rec->entries[entryNum].y);
- rec->entries[entryNum].y = TO_LE_16(
- ((tempY & 0xfff) - 0x80) | (tempY & 0xf000));
+ x = FROM_LE_16(dataIn.entries[entryNum].x);
+ y = FROM_LE_16(dataIn.entries[entryNum].y);
+ if ((x != 0) || (y != 0)) {
+ x -= 0x80;
+ y = ((y & 0xfff) - 0x80) | (y & 0xf000);
}
+
+ RoomExitCoordinateResource *p = &rec->entries[entryNum];
+ p->x = TO_LE_16(x);
+ p->y = TO_LE_16(y);
+ p->roomNumber = dataIn.entries[entryNum].roomNumber;
}
for (entryNum = 0; entryNum < ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS; ++entryNum) {
- rec->roomIndex[entryNum] = TO_LE_16(FROM_LE_16(rec->roomIndex[entryNum]) / 6);
+ rec->roomIndex[entryNum] = TO_LE_16(FROM_LE_16(dataIn.roomIndex[entryNum]) / 6);
}
- // Bugfix for the original game data to get to room #27 via rooms #10 or #11
+ // WORKAROUND: Bugfix for the original game data to get to room #27 via rooms #10 or #11
if ((roomNum == 10) || (roomNum == 11))
- rec->roomIndex[26] = 1;
+ rec->roomIndex[26] = TO_LE_16(1);
}
}
@@ -928,6 +963,14 @@ void read_room_exit_hotspots_data(byte *&data, uint16 &totalSize) {
totalSize += sizeof(uint16);
}
+void save_fight_segment(byte *&data, uint16 &totalSize) {
+ lure_exe.seek(FIGHT_SEGMENT);
+
+ totalSize = FIGHT_SEGMENT_SIZE;
+ data = (byte *) malloc(totalSize);
+ lure_exe.read(data, totalSize);
+}
+
#define NUM_TEXT_ENTRIES 40
const char *text_strings[NUM_TEXT_ENTRIES] = {
"Get", NULL, "Push", "Pull", "Operate", "Open", "Close", "Lock", "Unlock", "Use",
@@ -1075,6 +1118,11 @@ void getEntry(uint8 entryIndex, uint16 &resourceId, byte *&data, uint16 &size)
break;
case 21:
+ // Save the fight segment data
+ save_fight_segment(data, size);
+ break;
+
+ case 22:
// Set up the list of text strings used by the game
save_text_strings(data, size);
break;
diff --git a/tools/create_lure/create_lure_dat.h b/tools/create_lure/create_lure_dat.h
index ed66909cd8..4429baf8bb 100644
--- a/tools/create_lure/create_lure_dat.h
+++ b/tools/create_lure/create_lure_dat.h
@@ -30,7 +30,7 @@
#include "common/endian.h"
#define VERSION_MAJOR 1
-#define VERSION_MINOR 19
+#define VERSION_MINOR 20
#define ENGLISH_LURE
#define DATA_SEGMENT 0xac50
@@ -53,6 +53,8 @@
#define SCRIPT_SEGMENT_SIZE 0x2c57
#define SCRIPT2_SEGMENT 0x19c70
#define SCRIPT2_SEGMENT_SIZE 0x2800
+#define FIGHT_SEGMENT 0x1C400
+#define FIGHT_SEGMENT_SIZE 0x1850
#define HOTSPOT_SCRIPT_LIST 0x57e0
#define HOTSPOT_SCRIPT_SIZE 0x30
@@ -200,7 +202,8 @@ struct RoomResource {
byte numLayers;
uint16 layers[4];
uint16 sequenceOffset;
- byte unknown2[5];
+ uint32 exitTime;
+ uint8 areaFlag;
uint8 walkBoundsIndex;
int16 clippingXStart;
int16 clippingXEnd;
@@ -227,6 +230,8 @@ struct RoomResourceOutput {
uint16 sequenceOffset;
int16 clippingXStart;
int16 clippingXEnd;
+ uint32 exitTime;
+ uint8 areaFlag;
RoomRectOut walkBounds;
uint16 numExits;
};
@@ -343,11 +348,17 @@ struct RoomExitIndexedHotspotResource {
#define ROOM_EXIT_COORDINATES_NUM_ENTRIES 6
#define ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS 52
-struct RoomExitCoordinateEntryResource {
+struct RoomExitCoordinateEntryInputResource {
RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES];
uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS];
};
+struct RoomExitCoordinateEntryOutputResource {
+ uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS];
+ RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES];
+};
+
+
enum CurrentAction {NO_ACTION, START_WALKING, DISPATCH_ACTION, EXEC_HOTSPOT_SCRIPT,
PROCESSING_PATH, WALKING};
diff --git a/tools/create_lure/process_actions.cpp b/tools/create_lure/process_actions.cpp
index 8a194f2ac5..1521ce442d 100644
--- a/tools/create_lure/process_actions.cpp
+++ b/tools/create_lure/process_actions.cpp
@@ -33,9 +33,9 @@ enum Action {
LOOK = 15, LOOK_AT = 16, LOOK_THROUGH = 17, ASK = 18, DRINK = 20,
STATUS = 21, GO_TO = 22, RETURN = 23, BRIBE = 24, EXAMINE = 25,
NPC_SET_ROOM_AND_BLOCKED_OFFSET = 28, NPC_HEY_SIR = 29, NPC_EXEC_SCRIPT = 30,
- NPC_UNKNOWN2 = 31, NPC_SET_RAND_DEST = 32, NPC_WALKING_CHECK = 33,
+ NPC_RESET_PAUSED_LIST = 31, NPC_SET_RAND_DEST = 32, NPC_WALKING_CHECK = 33,
NPC_SET_SUPPORT_OFFSET = 34, NPC_SUPPORT_OFFSET_COND = 35,
- NPC_DISPATCH_ACTION = 36, NPC_UNKNOWN3 = 37, NPC_UNKNOWN4 = 38,
+ NPC_DISPATCH_ACTION = 36, NPC_TALK_NPC_TO_NPC = 37, NPC_PAUSE = 38,
NPC_START_TALKING = 39, NPC_JUMP_ADDRESS = 40,
NONE = 0
};
@@ -365,11 +365,13 @@ void read_action_sequence(byte *&data, uint16 &totalSize)
// Handle required initial entries - the Lure engine refers to them directly by
// index, so they need to be first, and in that order
#ifdef ENGLISH_LURE
- process_entry(0x13c2, data, totalSize);
- process_entry(0xbb95, data, totalSize);
- process_entry(0x7060, data, totalSize);
- process_entry(0x728a, data, totalSize);
- process_entry(0x76ec, data, totalSize);
+ process_entry(0x13c2, data, totalSize); // RETURN sequence
+ process_entry(0xbb95, data, totalSize); // Exit blocked sequence
+ process_entry(0x7060, data, totalSize); // Jump proc #2 - go to castle basement
+ process_entry(0x728a, data, totalSize);
+ process_entry(0x76ec, data, totalSize);
+ process_entry(0x4ebb, data, totalSize); // Goewin as a follower in cave
+ process_entry(0x7D9D, data, totalSize); // Goewin standard handler
#endif
// Process the script engine list
diff --git a/tools/credits.pl b/tools/credits.pl
index 00a19944fa..acdbe03797 100755
--- a/tools/credits.pl
+++ b/tools/credits.pl
@@ -689,7 +689,7 @@ begin_credits("Credits");
end_section();
begin_section("MorphOS");
- add_person("Fabien Coeurjoly", "", "");
+ add_person("Fabien Coeurjoly", "fab1", "");
end_section();
begin_section("OS/2");
@@ -735,24 +735,24 @@ begin_credits("Credits");
add_person("Paolo Costabel", "", "PSP port contributions");
add_person("Thierry Crozat", "criezy", "Support for Broken Sword 1 Macintosh version");
add_person("Thomas Fach-Pedersen", "madmoose", "ProTracker module player");
- add_person("Benjamin Haisch", "", "Heavily improved de-/encoder for DXA videos");
+ add_person("Benjamin Haisch", "john_doe", "Heavily improved de-/encoder for DXA videos");
add_person("Janne Huttunen", "", "V3 actor mask support, Dig/FT SMUSH audio");
add_person("Kov&aacute;cs Endre J&aacute;nos", "", "Several fixes for Simon1");
- add_person("Jeroen Janssen", "", "Numerous readability and bugfix patches");
+ add_person("Jeroen Janssen", "japj", "Numerous readability and bugfix patches");
add_person("Florian Kagerer", "athrxx", "Various Kyrandia 1 FM-Towns code contributions");
add_person("Andreas Karlsson", "Sprawl", "Initial port for EPOC/SymbianOS");
add_person("Claudio Matsuoka", "", "Daily Linux builds");
add_person("Thomas Mayer", "", "PSP port contributions");
add_person("", "n0p", "Windows CE port aspect ratio correction scaler and right click input method");
- add_person("Mikesch Nepomuk", "", "MI1 VGA floppy patches");
+ add_person("Mikesch Nepomuk", "mnepomuk", "MI1 VGA floppy patches");
add_person("Nicolas Noble", "pixels", "Config file and ALSA support");
+ add_person("Tim Phillips", "realmz", "Initial MI1 CD music support");
add_person("", "Quietust", "Sound support for Amiga SCUMM V2/V3 games, MM NES support");
add_person("Andreas R&ouml;ver", "", "Broken Sword 1/2 MPEG2 cutscene support");
- add_person("Edward Rudd", "", "Fixes for playing MP3 versions of MI1/Loom audio");
- add_person("Daniel Schepler", "", "Final MI1 CD music support, initial Ogg Vorbis support");
- add_person("Andr&eacute; Souza", "", "SDL-based OpenGL renderer");
- add_person("Tim Phillips", "realmz", "Initial MI1 CD music support");
- add_person("Robin Watts", "", "ARM assembly routines for the Windows CE port");
+ add_person("Edward Rudd", "urkle", "Fixes for playing MP3 versions of MI1/Loom audio");
+ add_person("Daniel Schepler", "dschepler", "Final MI1 CD music support, initial Ogg Vorbis support");
+ add_person("Andr&eacute; Souza", "luke_br", "SDL-based OpenGL renderer");
+ add_person("Robin Watts", "robinwatts", "ARM assembly routines for the Windows CE port");
end_persons();
end_section();
diff --git a/tools/scumm-md5.txt b/tools/scumm-md5.txt
index 711b59dc87..468bb6b6ce 100644
--- a/tools/scumm-md5.txt
+++ b/tools/scumm-md5.txt
@@ -477,6 +477,7 @@ freddi3 Freddi Fish 3: The Case of the Stolen Conch Shell
bbadf7309c4a2c2763e4bbba3c3be634 -1 fr All - Demo - Kirben
754feb59d3bf86b8a00840df74fd7b26 -1 nl Windows - Demo - adutchguy
ed2b074bc3166087a747acb2a3c6abb0 -1 de All HE 98.5 Demo - Joachim Eberhard
+ d73c851b942af44deb9b6d5f416a0972 -1 hb Windows HE 99 Demo - Ori Avtalion
freddi4 Freddi Fish 4: The Case of the Hogfish Rustlers of Briny Gulch
4f580a021eee026f3b4589e17d130d78 -1 All All - - - Kirben, sev
@@ -577,6 +578,7 @@ pajama2 Pajama Sam 2: Thunder and Lightning Aren't so Frightening
36a6750e03fb505fc19fc2bf3e4dbe91 58749 en All - Demo - sev
30ba1e825d4ad2b448143ae8df18482a -1 nl All HE 98.5 Demo - Kirben
4521138d15d1fd7649c31fb981746231 -1 de All HE 98.5 Demo - Joachim Eberhard
+ 2a8658dbd13d84d1bce64a71a35995eb -1 hb Windows HE 99 Demo - Ori Avtalion
pajama3 Pajama Sam 3: You Are What You Eat From Your Head to Your Feet
f7711f9264d4d43c2a1518ec7c10a607 79382 us All - - - Kirben
@@ -654,6 +656,7 @@ puttcircus Putt-Putt Joins the Circus
a7cacad9c40c4dc9e1812abf6c8af9d5 -1 en All - Demo - Kirben, sev
1387d16aa620dc1c2d1fd87f8a9e7a09 -1 fr Windows - Demo - Mevi
+ 3af61c5edf8e15b43dbafd285b2e9777 -1 hb Windows - Demo - Ori Avtalion
puttputt Putt-Putt Joins the Parade
0b3222aaa7efcf283eb621e0cefd26cc -1 ru DOS HE 60 - - sev
diff --git a/tools/update-version.pl b/tools/update-version.pl
index 7787fb905b..4a93582d13 100755
--- a/tools/update-version.pl
+++ b/tools/update-version.pl
@@ -31,10 +31,12 @@ print "Setting version to '$VERSION'\n";
# List of the files in which we need to perform substitution.
my @subs_files = qw(
+ backends/platform/ds/arm9/makefile
base/internal_version.h
dists/macosx/Info.plist
dists/redhat/scummvm.spec
dists/scummvm.rc
+ dists/slackware/scummvm.SlackBuild
);
# The following files also contain version data and should possible be modified