diff options
Diffstat (limited to 'engines/dreamweb/dreamgen.cpp')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 22821 |
1 files changed, 22821 insertions, 0 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp new file mode 100644 index 0000000000..a183c7c798 --- /dev/null +++ b/engines/dreamweb/dreamgen.cpp @@ -0,0 +1,22821 @@ +/* PLEASE DO NOT MODIFY THIS FILE. ALL CHANGES WILL BE LOST! LOOK FOR README FOR DETAILS */ + +#include "dreamgen.h" + +namespace DreamGen { + +void DreamGenContext::alleybarksound() { + STACK_CHECK; + ax = es.word(bx+3); + _dec(ax); + _cmp(ax, 0); + if (!flags.z()) + goto nobark; + push(bx); + push(es); + al = 14; + playchannel1(); + es = pop(); + bx = pop(); + ax = 1000; +nobark: + es.word(bx+3) = ax; +} + +void DreamGenContext::intromusic() { + STACK_CHECK; +} + +void DreamGenContext::foghornsound() { + STACK_CHECK; + randomnumber(); + _cmp(al, 198); + if (!flags.z()) + return /* (nofog) */; + al = 13; + playchannel1(); +} + +void DreamGenContext::receptionist() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotrecep; + _cmp(data.byte(kCardpassflag), 1); + if (!flags.z()) + goto notsetcard; + _inc(data.byte(kCardpassflag)); + es.byte(bx+7) = 1; + es.word(bx+3) = 64; +notsetcard: + _cmp(es.word(bx+3), 58); + if (!flags.z()) + goto notdes1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto notdes2; + es.word(bx+3) = 55; + goto gotrecep; +notdes1: + _cmp(es.word(bx+3), 60); + if (!flags.z()) + goto notdes2; + randomnumber(); + _cmp(al, 240); + if (flags.c()) + goto gotrecep; + es.word(bx+3) = 53; + goto gotrecep; +notdes2: + _cmp(es.word(bx+3), 88); + if (!flags.z()) + goto notendcard; + es.word(bx+3) = 53; + goto gotrecep; +notendcard: + _inc(es.word(bx+3)); +gotrecep: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedrecep) */; + data.byte(kTalkedtorecep) = 1; +} + +void DreamGenContext::smokebloke() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (!flags.z()) + goto notspokento; + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + goto notspokento; + push(es); + push(bx); + al = 5; + setlocation(); + bx = pop(); + es = pop(); +notspokento: + checkspeed(); + if (!flags.z()) + goto gotsmokeb; + _cmp(es.word(bx+3), 100); + if (!flags.z()) + goto notsmokeb1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto notsmokeb2; + es.word(bx+3) = 96; + goto gotsmokeb; +notsmokeb1: + _cmp(es.word(bx+3), 117); + if (!flags.z()) + goto notsmokeb2; + es.word(bx+3) = 96; + goto gotsmokeb; +notsmokeb2: + _inc(es.word(bx+3)); +gotsmokeb: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::attendant() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalked) */; + data.byte(kTalkedtoattendant) = 1; +} + +void DreamGenContext::manasleep() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::eden() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (!flags.z()) + return /* (notinbed) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::edeninbath() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (flags.z()) + return /* (notinbath) */; + _cmp(data.byte(kSartaindead), 0); + if (!flags.z()) + return /* (notinbath) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::malefan() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::femalefan() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::louis() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (!flags.z()) + return /* (notlouis1) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::louischair() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (flags.z()) + return /* (notlouis2) */; + checkspeed(); + if (!flags.z()) + goto notlouisanim; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 191); + if (flags.z()) + goto restartlouis; + _cmp(ax, 185); + if (flags.z()) + goto randomlouis; + es.word(bx+3) = ax; + goto notlouisanim; +randomlouis: + es.word(bx+3) = ax; + randomnumber(); + _cmp(al, 245); + if (!flags.c()) + goto notlouisanim; +restartlouis: + ax = 182; + es.word(bx+3) = ax; +notlouisanim: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::manasleep2() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::mansatstill() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::tattooman() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::drinker() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotdrinker; + _inc(es.word(bx+3)); + _cmp(es.word(bx+3), 115); + if (!flags.z()) + goto notdrinker1; + es.word(bx+3) = 105; + goto gotdrinker; +notdrinker1: + _cmp(es.word(bx+3), 106); + if (!flags.z()) + goto gotdrinker; + randomnumber(); + _cmp(al, 3); + if (flags.c()) + goto gotdrinker; + es.word(bx+3) = 105; +gotdrinker: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::bartender() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotsmoket; + _cmp(es.word(bx+3), 86); + if (!flags.z()) + goto notsmoket1; + randomnumber(); + _cmp(al, 18); + if (flags.c()) + goto notsmoket2; + es.word(bx+3) = 81; + goto gotsmoket; +notsmoket1: + _cmp(es.word(bx+3), 103); + if (!flags.z()) + goto notsmoket2; + es.word(bx+3) = 81; + goto gotsmoket; +notsmoket2: + _inc(es.word(bx+3)); +gotsmoket: + showgamereel(); + _cmp(data.byte(kGunpassflag), 1); + if (!flags.z()) + goto notgotgun; + es.byte(bx+7) = 9; +notgotgun: + addtopeoplelist(); +} + +void DreamGenContext::othersmoker() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::barwoman() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::interviewer() { + STACK_CHECK; + _cmp(data.word(kReeltowatch), 68); + if (!flags.z()) + goto notgeneralstart; + _inc(es.word(bx+3)); +notgeneralstart: + _cmp(es.word(bx+3), 250); + if (flags.z()) + goto talking; + checkspeed(); + if (!flags.z()) + goto talking; + _cmp(es.word(bx+3), 259); + if (flags.z()) + goto talking; + _inc(es.word(bx+3)); +talking: + showgamereel(); +} + +void DreamGenContext::soldier1() { + STACK_CHECK; + _cmp(es.word(bx+3), 0); + if (flags.z()) + goto soldierwait; + data.word(kWatchingtime) = 10; + _cmp(es.word(bx+3), 30); + if (!flags.z()) + goto notaftersshot; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotsoldframe; + data.byte(kMandead) = 2; + goto gotsoldframe; +notaftersshot: + checkspeed(); + if (!flags.z()) + goto gotsoldframe; + _inc(es.word(bx+3)); + goto gotsoldframe; +soldierwait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotsoldframe; + data.word(kWatchingtime) = 10; + _cmp(data.byte(kManspath), 2); + if (!flags.z()) + goto gotsoldframe; + _cmp(data.byte(kFacing), 4); + if (!flags.z()) + goto gotsoldframe; + _inc(es.word(bx+3)); + data.byte(kLastweapon) = -1; + data.byte(kCombatcount) = 0; +gotsoldframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::rockstar() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 303); + if (flags.z()) + goto rockcombatend; + _cmp(ax, 118); + if (flags.z()) + goto rockcombatend; + checkspeed(); + if (!flags.z()) + goto rockspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 118); + if (!flags.z()) + goto notbeforedead; + data.byte(kMandead) = 2; + goto gotrockframe; +notbeforedead: + _cmp(ax, 79); + if (!flags.z()) + goto gotrockframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonrock; + data.byte(kLastweapon) = -1; + ax = 123; + goto gotrockframe; +notgunonrock: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotrockframe; + data.byte(kCombatcount) = 0; + ax = 79; +gotrockframe: + es.word(bx+3) = ax; +rockspeed: + showgamereel(); + _cmp(es.word(bx+3), 78); + if (!flags.z()) + goto notalkrock; + addtopeoplelist(); + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +notalkrock: + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + al = data.byte(kMapy); + es.byte(bx+2) = al; + return; +rockcombatend: + data.byte(kNewlocation) = 45; + showgamereel(); +} + +void DreamGenContext::helicopter() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 203); + if (flags.z()) + goto heliwon; + checkspeed(); + if (!flags.z()) + goto helispeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 53); + if (!flags.z()) + goto notbeforehdead; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 8); + if (flags.c()) + goto waitabit; + data.byte(kMandead) = 2; +waitabit: + ax = 49; + goto gotheliframe; +notbeforehdead: + _cmp(ax, 9); + if (!flags.z()) + goto gotheliframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonheli; + data.byte(kLastweapon) = -1; + ax = 55; + goto gotheliframe; +notgunonheli: + ax = 5; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 20); + if (!flags.z()) + goto gotheliframe; + data.byte(kCombatcount) = 0; + ax = 9; +gotheliframe: + es.word(bx+3) = ax; +helispeed: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + ax = es.word(bx+3); + _cmp(ax, 9); + if (!flags.c()) + goto notwaitingheli; + _cmp(data.byte(kCombatcount), 7); + if (flags.c()) + goto notwaitingheli; + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +notwaitingheli: + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + return; +heliwon: + data.byte(kPointermode) = 0; +} + +void DreamGenContext::mugger() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 138); + if (flags.z()) + goto endmugger1; + _cmp(ax, 176); + if (flags.z()) + return /* (endmugger2) */; + _cmp(ax, 2); + if (!flags.z()) + goto havesetwatch; + data.word(kWatchingtime) = 175*2; +havesetwatch: + checkspeed(); + if (!flags.z()) + goto notmugger; + _inc(es.word(bx+3)); +notmugger: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + return; +endmugger1: + push(es); + push(bx); + createpanel2(); + showicon(); + al = 41; + findpuztext(); + di = 33+20; + bx = 104; + dl = 241; + ah = 0; + printdirect(); + worktoscreen(); + cx = 300; + hangon(); + bx = pop(); + es = pop(); + push(es); + push(bx); + es.word(bx+3) = 140; + data.byte(kManspath) = 2; + data.byte(kFinaldest) = 2; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'A'; + findexobject(); + data.byte(kCommand) = al; + data.byte(kObjecttype) = 4; + removeobfrominv(); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'B'; + findexobject(); + data.byte(kCommand) = al; + data.byte(kObjecttype) = 4; + removeobfrominv(); + makemainscreen(); + al = 48; + bl = 68-32; + bh = 54+64; + cx = 70; + dx = 10; + setuptimeduse(); + data.byte(kBeenmugged) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::aide() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::businessman() { + STACK_CHECK; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + ax = es.word(bx+3); + _cmp(ax, 2); + if (!flags.z()) + goto notfirstbiz; + push(ax); + push(bx); + push(es); + al = 49; + cx = 30; + dx = 1; + bl = 68; + bh = 174; + setuptimeduse(); + es = pop(); + bx = pop(); + ax = pop(); +notfirstbiz: + _cmp(ax, 95); + if (flags.z()) + goto buscombatwonend; + _cmp(ax, 49); + if (flags.z()) + return /* (buscombatend) */; + checkspeed(); + if (!flags.z()) + goto busspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 48); + if (!flags.z()) + goto notbeforedeadb; + data.byte(kMandead) = 2; + goto gotbusframe; +notbeforedeadb: + _cmp(ax, 15); + if (!flags.z()) + goto buscombatwon; + _dec(ax); + _cmp(data.byte(kLastweapon), 3); + if (!flags.z()) + goto notshieldonbus; + data.byte(kLastweapon) = -1; + data.byte(kCombatcount) = 0; + ax = 51; + goto gotbusframe; +notshieldonbus: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 20); + if (!flags.z()) + goto gotbusframe; + data.byte(kCombatcount) = 0; + ax = 15; + goto gotbusframe; +buscombatwon: + _cmp(ax, 91); + if (!flags.z()) + goto gotbusframe; + push(bx); + push(es); + al = 0; + turnpathon(); + al = 1; + turnpathon(); + al = 2; + turnpathon(); + al = 3; + turnpathoff(); + data.byte(kManspath) = 5; + data.byte(kFinaldest) = 5; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + es = pop(); + bx = pop(); + ax = 92; + goto gotbusframe; +gotbusframe: + es.word(bx+3) = ax; +busspeed: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; + ax = es.word(bx+3); + _cmp(ax, 14); + if (!flags.z()) + return /* (buscombatend) */; + data.word(kWatchingtime) = 0; + data.byte(kPointermode) = 2; + return; +buscombatwonend: + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 0; +} + +void DreamGenContext::poolguard() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 214); + if (flags.z()) + goto combatover2; + _cmp(ax, 258); + if (flags.z()) + goto combatover2; + _cmp(ax, 185); + if (flags.z()) + goto combatover1; + _cmp(ax, 0); + if (!flags.z()) + goto notfirstpool; + al = 0; + turnpathon(); +notfirstpool: + checkspeed(); + if (!flags.z()) + goto guardspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 122); + if (!flags.z()) + goto notendguard1; + _dec(ax); + _cmp(data.byte(kLastweapon), 2); + if (!flags.z()) + goto notaxeonpool; + data.byte(kLastweapon) = -1; + ax = 122; + goto gotguardframe; +notaxeonpool: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotguardframe; + data.byte(kCombatcount) = 0; + ax = 195; + goto gotguardframe; +notendguard1: + _cmp(ax, 147); + if (!flags.z()) + goto gotguardframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonpool; + data.byte(kLastweapon) = -1; + ax = 147; + goto gotguardframe; +notgunonpool: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotguardframe; + data.byte(kCombatcount) = 0; + ax = 220; +gotguardframe: + es.word(bx+3) = ax; +guardspeed: + showgamereel(); + ax = es.word(bx+3); + _cmp(ax, 121); + if (flags.z()) + goto iswaitingpool; + _cmp(ax, 146); + if (flags.z()) + goto iswaitingpool; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + return; +iswaitingpool: + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +combatover1: + data.word(kWatchingtime) = 0; + data.byte(kPointermode) = 0; + al = 0; + turnpathon(); + al = 1; + turnpathoff(); + return; +combatover2: + showgamereel(); + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 100); + if (flags.c()) + return /* (doneover2) */; + data.word(kWatchingtime) = 0; + data.byte(kMandead) = 2; +} + +void DreamGenContext::security() { + STACK_CHECK; + _cmp(es.word(bx+3), 32); + if (flags.z()) + goto securwait; + _cmp(es.word(bx+3), 69); + if (!flags.z()) + goto notaftersec; + return; +notaftersec: + data.word(kWatchingtime) = 10; + checkspeed(); + if (!flags.z()) + goto gotsecurframe; + _inc(es.word(bx+3)); + goto gotsecurframe; +securwait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotsecurframe; + data.word(kWatchingtime) = 10; + _cmp(data.byte(kManspath), 9); + if (!flags.z()) + goto gotsecurframe; + _cmp(data.byte(kFacing), 0); + if (!flags.z()) + goto gotsecurframe; + data.byte(kLastweapon) = -1; + _inc(es.word(bx+3)); +gotsecurframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::heavy() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + _cmp(es.word(bx+3), 43); + if (flags.z()) + goto heavywait; + data.word(kWatchingtime) = 10; + _cmp(es.word(bx+3), 70); + if (!flags.z()) + goto notafterhshot; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 80); + if (!flags.z()) + goto gotheavyframe; + data.byte(kMandead) = 2; + goto gotheavyframe; +notafterhshot: + checkspeed(); + if (!flags.z()) + goto gotheavyframe; + _inc(es.word(bx+3)); + goto gotheavyframe; +heavywait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotheavyframe; + _cmp(data.byte(kManspath), 5); + if (!flags.z()) + goto gotheavyframe; + _cmp(data.byte(kFacing), 4); + if (!flags.z()) + goto gotheavyframe; + data.byte(kLastweapon) = -1; + _inc(es.word(bx+3)); + data.byte(kCombatcount) = 0; +gotheavyframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::bossman() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notboss; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 4); + if (flags.z()) + goto firstdes; + _cmp(ax, 20); + if (flags.z()) + goto secdes; + _cmp(ax, 41); + if (!flags.z()) + goto gotallboss; + ax = 0; + _inc(data.byte(kGunpassflag)); + es.byte(bx+7) = 10; + goto gotallboss; +firstdes: + _cmp(data.byte(kGunpassflag), 1); + if (flags.z()) + goto gotallboss; + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 10); + if (flags.c()) + goto gotallboss; + ax = 0; + goto gotallboss; +secdes: + _cmp(data.byte(kGunpassflag), 1); + if (flags.z()) + goto gotallboss; + ax = 0; +gotallboss: + es.word(bx+3) = ax; +notboss: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedboss) */; + data.byte(kTalkedtoboss) = 1; +} + +void DreamGenContext::gamer() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gamerfin; +gameragain: + randomnum1(); + _and(al, 7); + _cmp(al, 5); + if (!flags.c()) + goto gameragain; + _add(al, 20); + _cmp(al, es.byte(bx+3)); + if (flags.z()) + goto gameragain; + ah = 0; + es.word(bx+3) = ax; +gamerfin: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::sparkydrip() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + return /* (cantdrip) */; + al = 14; + ah = 0; + playchannel0(); +} + +void DreamGenContext::carparkdrip() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + return /* (cantdrip2) */; + al = 14; + playchannel1(); +} + +void DreamGenContext::keeper() { + STACK_CHECK; + _cmp(data.byte(kKeeperflag), 0); + if (!flags.z()) + goto notwaiting; + _cmp(data.word(kReeltowatch), 190); + if (flags.c()) + return /* (waiting) */; + _inc(data.byte(kKeeperflag)); + ah = es.byte(bx+7); + _and(ah, 127); + _cmp(ah, data.byte(kDreamnumber)); + if (flags.z()) + return /* (notdiff) */; + al = data.byte(kDreamnumber); + es.byte(bx+7) = al; + return; +notwaiting: + addtopeoplelist(); + showgamereel(); +} + +void DreamGenContext::candles1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candle1; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 44); + if (!flags.z()) + goto notendcandle1; + ax = 39; +notendcandle1: + es.word(bx+3) = ax; +candle1: + showgamereel(); +} + +void DreamGenContext::smallcandle() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto smallcandlef; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 37); + if (!flags.z()) + goto notendsmallcandle; + ax = 25; +notendsmallcandle: + es.word(bx+3) = ax; +smallcandlef: + showgamereel(); +} + +void DreamGenContext::intromagic1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm1fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 145); + if (!flags.z()) + goto gotintrom1; + ax = 121; +gotintrom1: + es.word(bx+3) = ax; + _cmp(ax, 121); + if (!flags.z()) + goto introm1fin; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + intro1text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 8); + if (!flags.z()) + goto introm1fin; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; +introm1fin: + showgamereel(); +} + +void DreamGenContext::candles() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candlesfin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 167); + if (!flags.z()) + goto gotcandles; + ax = 162; +gotcandles: + es.word(bx+3) = ax; +candlesfin: + showgamereel(); +} + +void DreamGenContext::candles2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candles2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 238); + if (!flags.z()) + goto gotcandles2; + ax = 233; +gotcandles2: + es.word(bx+3) = ax; +candles2fin: + showgamereel(); +} + +void DreamGenContext::gates() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gatesfin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 116); + if (!flags.z()) + goto notbang; + push(ax); + push(bx); + push(es); + al = 17; + playchannel1(); + es = pop(); + bx = pop(); + ax = pop(); +notbang: + _cmp(ax, 110); + if (flags.c()) + goto slowgates; + es.byte(bx+5) = 2; +slowgates: + _cmp(ax, 120); + if (!flags.z()) + goto gotgates; + data.byte(kGetback) = 1; + ax = 119; +gotgates: + es.word(bx+3) = ax; + push(es); + push(bx); + intro3text(); + bx = pop(); + es = pop(); +gatesfin: + showgamereel(); +} + +void DreamGenContext::intromagic2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 216); + if (!flags.z()) + goto gotintrom2; + ax = 192; +gotintrom2: + es.word(bx+3) = ax; +introm2fin: + showgamereel(); +} + +void DreamGenContext::intromagic3() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm3fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 218); + if (!flags.z()) + goto gotintrom3; + data.byte(kGetback) = 1; +gotintrom3: + es.word(bx+3) = ax; +introm3fin: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; +} + +void DreamGenContext::intromonks1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto intromonk1fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 80); + if (!flags.z()) + goto notendmonk1; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + showgamereel(); + return; +notendmonk1: + _cmp(ax, 30); + if (!flags.z()) + goto gotintromonk1; + _sub(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + ax = 51; +gotintromonk1: + es.word(bx+3) = ax; + _cmp(ax, 5); + if (flags.z()) + goto waitstep; + _cmp(ax, 15); + if (flags.z()) + goto waitstep; + _cmp(ax, 25); + if (flags.z()) + goto waitstep; + _cmp(ax, 61); + if (flags.z()) + goto waitstep; + _cmp(ax, 71); + if (flags.z()) + goto waitstep; + goto intromonk1fin; +waitstep: + push(es); + push(bx); + intro2text(); + bx = pop(); + es = pop(); + es.byte(bx+6) = -20; +intromonk1fin: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; +} + +void DreamGenContext::intromonks2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto intromonk2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 87); + if (!flags.z()) + goto nottalk1; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + monks2text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 19); + if (!flags.z()) + goto notlasttalk1; + ax = 87; + goto gotintromonk2; +notlasttalk1: + ax = 74; + goto gotintromonk2; +nottalk1: + _cmp(ax, 110); + if (!flags.z()) + goto notraisearm; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + monks2text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 35); + if (!flags.z()) + goto notlastraise; + ax = 111; + goto gotintromonk2; +notlastraise: + ax = 98; + goto gotintromonk2; +notraisearm: + _cmp(ax, 176); + if (!flags.z()) + goto notendmonk2; + data.byte(kGetback) = 1; + goto gotintromonk2; +notendmonk2: + _cmp(ax, 125); + if (!flags.z()) + goto gotintromonk2; + ax = 140; +gotintromonk2: + es.word(bx+3) = ax; +intromonk2fin: + showgamereel(); +} + +void DreamGenContext::handclap() { + STACK_CHECK; +} + +void DreamGenContext::monks2text() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 1); + if (!flags.z()) + goto notmonk2text1; + al = 8; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text1: + _cmp(data.byte(kIntrocount), 4); + if (!flags.z()) + goto notmonk2text2; + al = 9; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text2: + _cmp(data.byte(kIntrocount), 7); + if (!flags.z()) + goto notmonk2text3; + al = 10; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text3: + _cmp(data.byte(kIntrocount), 10); + if (!flags.z()) + goto notmonk2text4; + data.byte(kIntrocount) = 12; + al = 11; + bl = 0; + bh = 105; + cx = 100; + goto gotmonks2text; +notmonk2text4: + _cmp(data.byte(kIntrocount), 13); + if (!flags.z()) + goto notmonk2text5; + data.byte(kIntrocount) = 17; + return; + al = 12; + bl = 0; + bh = 120; + cx = 100; + goto gotmonks2text; +notmonk2text5: + _cmp(data.byte(kIntrocount), 16); + if (!flags.z()) + goto notmonk2text6; + al = 13; + bl = 0; + bh = 135; + cx = 100; + goto gotmonks2text; +notmonk2text6: + _cmp(data.byte(kIntrocount), 19); + if (!flags.z()) + goto notmonk2text7; + al = 14; + bl = 36; + bh = 160; + cx = 100; + dx = 1; + ah = 82; + { setuptimedtemp(); return; }; +notmonk2text7: + _cmp(data.byte(kIntrocount), 22); + if (!flags.z()) + goto notmonk2text8; + al = 15; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text8: + _cmp(data.byte(kIntrocount), 25); + if (!flags.z()) + goto notmonk2text9; + al = 16; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text9: + _cmp(data.byte(kIntrocount), 27); + if (!flags.z()) + goto notmonk2text10; + al = 17; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text10: + _cmp(data.byte(kIntrocount), 31); + if (!flags.z()) + return /* (notmonk2text11) */; + al = 18; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; + return; +gotmonks2text: + dx = 1; + cx = 120; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::intro1text() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 2); + if (!flags.z()) + goto notintro1text1; + al = 40; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; +notintro1text1: + _cmp(data.byte(kIntrocount), 4); + if (!flags.z()) + goto notintro1text2; + al = 41; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; +notintro1text2: + _cmp(data.byte(kIntrocount), 6); + if (!flags.z()) + return /* (notintro1text3) */; + al = 42; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; + return; +gotintro1text: + dx = 1; + ah = 82; + _cmp(data.byte(kCh1playing), 255); + if (flags.z()) + goto oktalk2; + _dec(data.byte(kIntrocount)); + return; +oktalk2: + setuptimedtemp(); +} + +void DreamGenContext::intro2text() { + STACK_CHECK; + _cmp(ax, 5); + if (!flags.z()) + goto notintro2text1; + al = 43; + bl = 34; + bh = 40; + cx = 90; + goto gotintro2text; +notintro2text1: + _cmp(ax, 15); + if (!flags.z()) + return /* (notintro2text2) */; + al = 44; + bl = 34; + bh = 40; + cx = 90; + goto gotintro2text; + return; +gotintro2text: + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::intro3text() { + STACK_CHECK; + _cmp(ax, 107); + if (!flags.z()) + goto notintro3text1; + al = 45; + bl = 36; + bh = 56; + cx = 100; + goto gotintro3text; +notintro3text1: + _cmp(ax, 108); + if (!flags.z()) + return /* (notintro3text2) */; + al = 46; + bl = 36; + bh = 56; + cx = 100; + goto gotintro3text; + return; +gotintro3text: + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::monkandryan() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notmonkryan; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 83); + if (!flags.z()) + goto gotmonkryan; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + textformonk(); + bx = pop(); + es = pop(); + ax = 77; + _cmp(data.byte(kIntrocount), 57); + if (!flags.z()) + goto gotmonkryan; + data.byte(kGetback) = 1; + return; +gotmonkryan: + es.word(bx+3) = ax; +notmonkryan: + showgamereel(); +} + +void DreamGenContext::endgameseq() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notendseq; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 51); + if (!flags.z()) + goto gotendseq; + _cmp(data.byte(kIntrocount), 140); + if (flags.z()) + goto gotendseq; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + textforend(); + bx = pop(); + es = pop(); + ax = 50; +gotendseq: + es.word(bx+3) = ax; + _cmp(ax, 134); + if (!flags.z()) + goto notfadedown; + push(es); + push(bx); + push(ax); + fadescreendownhalf(); + ax = pop(); + bx = pop(); + es = pop(); + goto notendseq; +notfadedown: + _cmp(ax, 324); + if (!flags.z()) + goto notfadeend; + push(es); + push(bx); + push(ax); + fadescreendowns(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + ax = pop(); + bx = pop(); + es = pop(); +notfadeend: + _cmp(ax, 340); + if (!flags.z()) + goto notendseq; + data.byte(kGetback) = 1; +notendseq: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; + ax = es.word(bx+3); + _cmp(ax, 145); + if (!flags.z()) + return /* (notendcreds) */; + es.word(bx+3) = 146; + rollendcredits(); +} + +void DreamGenContext::rollendcredits() { + STACK_CHECK; + al = 16; + ah = 255; + playchannel0(); + data.byte(kVolume) = 7; + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + cl = 160; + ch = 160; + di = 75; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiget(); + es = data.word(kTextfile1); + si = 3*2; + ax = es.word(si); + si = ax; + _add(si, (66*2)); + cx = 254; +endcredits1: + push(cx); + bx = 10; + cx = data.word(kLinespacing); +endcredits2: + push(cx); + push(si); + push(di); + push(es); + push(bx); + vsync(); + cl = 160; + ch = 160; + di = 75; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiput(); + vsync(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + push(si); + push(di); + push(es); + push(bx); + cx = 18; +onelot: + push(cx); + di = 75; + dx = 161; + ax = 0; + printdirect(); + _add(bx, data.word(kLinespacing)); + cx = pop(); + if (--cx) + goto onelot; + vsync(); + cl = 160; + ch = 160; + di = 75; + bx = 20; + multidump(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + cx = pop(); + _dec(bx); + if (--cx) + goto endcredits2; + cx = pop(); +looknext: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto gotnext; + _cmp(al, 0); + if (flags.z()) + goto gotnext; + goto looknext; +gotnext: + if (--cx) + goto endcredits1; + cx = 100; + hangon(); + paneltomap(); + fadescreenuphalf(); +} + +void DreamGenContext::priest() { + STACK_CHECK; + _cmp(es.word(bx+3), 8); + if (flags.z()) + return /* (priestspoken) */; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + checkspeed(); + if (!flags.z()) + return /* (priestwait) */; + _inc(es.word(bx+3)); + push(es); + push(bx); + priesttext(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::madmanstelly() { + STACK_CHECK; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 307); + if (!flags.z()) + goto notendtelly; + ax = 300; +notendtelly: + es.word(bx+3) = ax; + showgamereel(); +} + +void DreamGenContext::madman() { + STACK_CHECK; + data.word(kWatchingtime) = 2; + checkspeed(); + if (!flags.z()) + goto nomadspeed; + ax = es.word(bx+3); + _cmp(ax, 364); + if (!flags.c()) + goto ryansded; + _cmp(ax, 10); + if (!flags.z()) + goto notfirstmad; + push(es); + push(bx); + push(ax); + dx = 2247; + loadtemptext(); + ax = pop(); + bx = pop(); + es = pop(); + data.byte(kCombatcount) = -1; + data.byte(kSpeechcount) = 0; +notfirstmad: + _inc(ax); + _cmp(ax, 294); + if (flags.z()) + goto madmanspoken; + _cmp(ax, 66); + if (!flags.z()) + goto nomadspeak; + _inc(data.byte(kCombatcount)); + push(es); + push(bx); + madmantext(); + bx = pop(); + es = pop(); + ax = 53; + _cmp(data.byte(kCombatcount), 64); + if (flags.c()) + goto nomadspeak; + _cmp(data.byte(kCombatcount), 70); + if (flags.z()) + goto killryan; + _cmp(data.byte(kLastweapon), 8); + if (!flags.z()) + goto nomadspeak; + data.byte(kCombatcount) = 72; + data.byte(kLastweapon) = -1; + data.byte(kMadmanflag) = 1; + ax = 67; + goto nomadspeak; +killryan: + ax = 310; +nomadspeak: + es.word(bx+3) = ax; +nomadspeed: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + madmode(); + return; +madmanspoken: + _cmp(data.byte(kWongame), 1); + if (flags.z()) + return /* (alreadywon) */; + data.byte(kWongame) = 1; + push(es); + push(bx); + getridoftemptext(); + bx = pop(); + es = pop(); + return; +ryansded: + data.byte(kMandead) = 2; + showgamereel(); +} + +void DreamGenContext::madmantext() { + STACK_CHECK; + _cmp(data.byte(kSpeechcount), 63); + if (!flags.c()) + return /* (nomadtext) */; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + return /* (nomadtext) */; + al = data.byte(kSpeechcount); + _inc(data.byte(kSpeechcount)); + _add(al, 47); + bl = 72; + bh = 80; + cx = 90; + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::madmode() { + STACK_CHECK; + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + _cmp(data.byte(kCombatcount), 65); + if (flags.c()) + return /* (iswatchmad) */; + _cmp(data.byte(kCombatcount), 70); + if (!flags.c()) + return /* (iswatchmad) */; + data.byte(kPointermode) = 2; +} + +void DreamGenContext::priesttext() { + STACK_CHECK; + _cmp(es.word(bx+3), 2); + if (flags.c()) + return /* (nopriesttext) */; + _cmp(es.word(bx+3), 7); + if (!flags.c()) + return /* (nopriesttext) */; + al = es.byte(bx+3); + _and(al, 1); + if (!flags.z()) + return /* (nopriesttext) */; + al = es.byte(bx+3); + _shr(al, 1); + _add(al, 50); + bl = 72; + bh = 80; + cx = 54; + dx = 1; + setuptimeduse(); +} + +void DreamGenContext::textforend() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 20); + if (!flags.z()) + goto notendtext1; + al = 0; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; +notendtext1: + _cmp(data.byte(kIntrocount), 50); + if (!flags.z()) + goto notendtext2; + al = 1; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; +notendtext2: + _cmp(data.byte(kIntrocount), 85); + if (!flags.z()) + return /* (notendtext3) */; + al = 2; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; + return; +gotendtext: + dx = 1; + ah = 83; + setuptimedtemp(); +} + +void DreamGenContext::textformonk() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 1); + if (!flags.z()) + goto notmonktext1; + al = 19; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext1: + _cmp(data.byte(kIntrocount), 5); + if (!flags.z()) + goto notmonktext2; + al = 20; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext2: + _cmp(data.byte(kIntrocount), 9); + if (!flags.z()) + goto notmonktext3; + al = 21; + bl = 48; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext3: + _cmp(data.byte(kIntrocount), 13); + if (!flags.z()) + goto notmonktext4; + al = 22; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext4: + _cmp(data.byte(kIntrocount), 15); + if (!flags.z()) + goto notmonktext5; + al = 23; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext5: + _cmp(data.byte(kIntrocount), 21); + if (!flags.z()) + goto notmonktext6; + al = 24; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext6: + _cmp(data.byte(kIntrocount), 25); + if (!flags.z()) + goto notmonktext7; + al = 25; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext7: + _cmp(data.byte(kIntrocount), 29); + if (!flags.z()) + goto notmonktext8; + al = 26; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext8: + _cmp(data.byte(kIntrocount), 33); + if (!flags.z()) + goto notmonktext9; + al = 27; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext9: + _cmp(data.byte(kIntrocount), 37); + if (!flags.z()) + goto notmonktext10; + al = 28; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext10: + _cmp(data.byte(kIntrocount), 41); + if (!flags.z()) + goto notmonktext11; + al = 29; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext11: + _cmp(data.byte(kIntrocount), 45); + if (!flags.z()) + goto notmonktext12; + al = 30; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext12: + _cmp(data.byte(kIntrocount), 52); + if (!flags.z()) + goto notmonktext13; + al = 31; + bl = 68; + bh = 154; + cx = 220; + goto gotmonktext; +notmonktext13: + _cmp(data.byte(kIntrocount), 53); + if (!flags.z()) + return /* (notendtitles) */; + fadescreendowns(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + return; +gotmonktext: + dx = 1; + ah = 82; + _cmp(data.byte(kCh1playing), 255); + if (flags.z()) + goto oktalk; + _dec(data.byte(kIntrocount)); + return; +oktalk: + setuptimedtemp(); +} + +void DreamGenContext::drunk() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (!flags.z()) + return /* (trampgone) */; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::advisor() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto noadvisor; + goto noadvisor; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 123); + if (!flags.z()) + goto notendadvis; + ax = 106; + goto gotadvframe; +notendadvis: + _cmp(ax, 108); + if (!flags.z()) + goto gotadvframe; + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 3); + if (flags.c()) + goto gotadvframe; + ax = 106; +gotadvframe: + es.word(bx+3) = ax; +noadvisor: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::copper() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto nocopper; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 94); + if (!flags.z()) + goto notendcopper; + ax = 64; + goto gotcopframe; +notendcopper: + _cmp(ax, 81); + if (flags.z()) + goto mightwait; + _cmp(ax, 66); + if (!flags.z()) + goto gotcopframe; +mightwait: + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 7); + if (flags.c()) + goto gotcopframe; + _dec(ax); +gotcopframe: + es.word(bx+3) = ax; +nocopper: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::sparky() { + STACK_CHECK; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto animsparky; + es.byte(bx+7) = 3; + goto animsparky; +animsparky: + checkspeed(); + if (!flags.z()) + goto finishsparky; + _cmp(es.word(bx+3), 34); + if (!flags.z()) + goto notsparky1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto dosparky; + es.word(bx+3) = 27; + goto finishsparky; +notsparky1: + _cmp(es.word(bx+3), 48); + if (!flags.z()) + goto dosparky; + es.word(bx+3) = 27; + goto finishsparky; +dosparky: + _inc(es.word(bx+3)); +finishsparky: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedsparky) */; + data.byte(kTalkedtosparky) = 1; +} + +void DreamGenContext::train() { + STACK_CHECK; + return; + ax = es.word(bx+3); + _cmp(ax, 21); + if (!flags.c()) + goto notrainyet; + _inc(ax); + goto gottrainframe; +notrainyet: + randomnumber(); + _cmp(al, 253); + if (flags.c()) + return /* (notrainatall) */; + _cmp(data.byte(kManspath), 5); + if (!flags.z()) + return /* (notrainatall) */; + _cmp(data.byte(kFinaldest), 5); + if (!flags.z()) + return /* (notrainatall) */; + ax = 5; +gottrainframe: + es.word(bx+3) = ax; + showgamereel(); +} + +void DreamGenContext::addtopeoplelist() { + STACK_CHECK; + push(es); + push(bx); + push(bx); + cl = es.byte(bx+7); + ax = es.word(bx+3); + bx = data.word(kListpos); + es = data.word(kBuffers); + es.word(bx) = ax; + ax = pop(); + es.word(bx+2) = ax; + es.byte(bx+4) = cl; + bx = pop(); + es = pop(); + _add(data.word(kListpos), 5); +} + +void DreamGenContext::showgamereel() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 512); + if (!flags.c()) + return /* (noshow) */; + data.word(kReelpointer) = ax; + push(es); + push(bx); + plotreel(); + bx = pop(); + es = pop(); + ax = data.word(kReelpointer); + es.word(bx+3) = ax; +} + +void DreamGenContext::checkspeed() { + STACK_CHECK; + _cmp(data.byte(kLastweapon), -1); + if (!flags.z()) + goto forcenext; + _inc(es.byte(bx+6)); + al = es.byte(bx+6); + _cmp(al, es.byte(bx+5)); + if (!flags.z()) + return /* (notspeed) */; + al = 0; + es.byte(bx+6) = al; + _cmp(al, al); + return; +forcenext: + _cmp(al, al); +} + +void DreamGenContext::clearsprites() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); + al = 255; + cx = (32)*16; + _stosb(cx, true); +} + +void DreamGenContext::makesprite() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); +_tmp17: + _cmp(es.byte(bx+15), 255); + if (flags.z()) + goto _tmp17a; + _add(bx, (32)); + goto _tmp17; +_tmp17a: + es.word(bx) = cx; + es.word(bx+10) = si; + es.word(bx+6) = dx; + es.word(bx+8) = di; + es.word(bx+2) = 0x0ffff; + es.byte(bx+15) = 0; + es.byte(bx+18) = 0; +} + +void DreamGenContext::delsprite() { + STACK_CHECK; + di = bx; + cx = (32); + al = 255; + _stosb(cx, true); +} + +void DreamGenContext::spriteupdate() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); + al = data.byte(kRyanon); + es.byte(bx+31) = al; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +_tmp18: + push(cx); + push(bx); + ax = es.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto _tmp18a; + push(es); + push(ds); + cx = es.word(bx+2); + es.word(bx+24) = cx; + __dispatch_call(ax); + ds = pop(); + es = pop(); +_tmp18a: + bx = pop(); + cx = pop(); + _cmp(data.byte(kNowinnewroom), 1); + if (flags.z()) + return /* ($18b) */; + _add(bx, (32)); + if (--cx) + goto _tmp18; +} + +void DreamGenContext::printsprites() { + STACK_CHECK; + es = data.word(kBuffers); + cx = 0; +priorityloop: + push(cx); + data.byte(kPriority) = cl; + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +prtspriteloop: + push(cx); + push(bx); + ax = es.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto skipsprite; + al = data.byte(kPriority); + _cmp(al, es.byte(bx+23)); + if (!flags.z()) + goto skipsprite; + _cmp(es.byte(bx+31), 1); + if (flags.z()) + goto skipsprite; + printasprite(); +skipsprite: + bx = pop(); + cx = pop(); + _add(bx, (32)); + if (--cx) + goto prtspriteloop; + cx = pop(); + _inc(cx); + _cmp(cx, 7); + if (!flags.z()) + goto priorityloop; +} + +void DreamGenContext::printasprite() { + STACK_CHECK; + push(es); + push(bx); + si = bx; + ds = es.word(si+6); + al = es.byte(si+11); + ah = 0; + _cmp(al, 220); + if (flags.c()) + goto notnegative1; + ah = 255; +notnegative1: + bx = ax; + _add(bx, data.word(kMapady)); + al = es.byte(si+10); + ah = 0; + _cmp(al, 220); + if (flags.c()) + goto notnegative2; + ah = 255; +notnegative2: + di = ax; + _add(di, data.word(kMapadx)); + al = es.byte(si+15); + ah = 0; + _cmp(es.byte(si+30), 0); + if (flags.z()) + goto steadyframe; + ah = 8; +steadyframe: + _cmp(data.byte(kPriority), 6); + if (!flags.z()) + goto notquickp; +notquickp: + showframe(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::checkone() { + STACK_CHECK; + push(cx); + al = ch; + ah = 0; + cl = 4; + _shr(ax, cl); + dl = al; + cx = pop(); + al = cl; + ah = 0; + cl = 4; + _shr(ax, cl); + ah = dl; + push(ax); + ch = 0; + cl = al; + push(cx); + al = ah; + ah = 0; + cx = 11; + _mul(cx); + cx = pop(); + _add(ax, cx); + cx = 3; + _mul(cx); + si = ax; + ds = data.word(kBuffers); + _add(si, (0+(228*13)+32+60+(32*32))); + _lodsw(); + cx = ax; + _lodsb(); + dx = pop(); +} + +void DreamGenContext::findsource() { + STACK_CHECK; + ax = data.word(kCurrentframe); + _cmp(ax, 160); + if (!flags.c()) + goto over1000; + ds = data.word(kReel1); + data.word(kTakeoff) = 0; + return; +over1000: + _cmp(ax, 320); + if (!flags.c()) + goto over1001; + ds = data.word(kReel2); + data.word(kTakeoff) = 160; + return; +over1001: + ds = data.word(kReel3); + data.word(kTakeoff) = 320; +} + +void DreamGenContext::initman() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + si = ax; + cx = 49464; + dx = data.word(kMainsprites); + di = 0; + makesprite(); + es.byte(bx+23) = 4; + es.byte(bx+22) = 0; + es.byte(bx+29) = 0; +} + +void DreamGenContext::mainman() { + STACK_CHECK; + _cmp(data.byte(kResetmanxy), 1); + if (!flags.z()) + goto notinnewroom; + data.byte(kResetmanxy) = 0; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + es.word(bx+10) = ax; + es.byte(bx+29) = 0; + goto executewalk; +notinnewroom: + _dec(es.byte(bx+22)); + _cmp(es.byte(bx+22), -1); + if (flags.z()) + goto executewalk; + return; +executewalk: + es.byte(bx+22) = 0; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (flags.z()) + goto facingok; + aboutturn(); + goto notwalk; +facingok: + _cmp(data.byte(kTurndirection), 0); + if (flags.z()) + goto alreadyturned; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto alreadyturned; + data.byte(kReasseschanges) = 1; + al = data.byte(kFacing); + _cmp(al, data.byte(kLeavedirection)); + if (!flags.z()) + goto alreadyturned; + checkforexit(); +alreadyturned: + data.byte(kTurndirection) = 0; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto walkman; + es.byte(bx+29) = 0; + goto notwalk; +walkman: + al = es.byte(bx+29); + _inc(al); + _cmp(al, 11); + if (!flags.z()) + goto notanimend1; + al = 1; +notanimend1: + es.byte(bx+29) = al; + walking(); + _cmp(data.byte(kLinepointer), 254); + if (flags.z()) + goto afterwalk; + al = data.byte(kFacing); + _and(al, 1); + if (flags.z()) + goto isdouble; + al = es.byte(bx+29); + _cmp(al, 2); + if (flags.z()) + goto afterwalk; + _cmp(al, 7); + if (flags.z()) + goto afterwalk; +isdouble: + walking(); +afterwalk: + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto notwalk; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (!flags.z()) + goto notwalk; + data.byte(kReasseschanges) = 1; + al = data.byte(kFacing); + _cmp(al, data.byte(kLeavedirection)); + if (!flags.z()) + goto notwalk; + checkforexit(); +notwalk: + al = data.byte(kFacing); + ah = 0; + di = 1105; + _add(di, ax); + al = cs.byte(di); + _add(al, es.byte(bx+29)); + es.byte(bx+15) = al; + ax = es.word(bx+10); + data.byte(kRyanx) = al; + data.byte(kRyany) = ah; +} + +void DreamGenContext::aboutturn() { + STACK_CHECK; + _cmp(data.byte(kTurndirection), 1); + if (flags.z()) + goto incdir; + _cmp(data.byte(kTurndirection), -1); + if (flags.z()) + goto decdir; + al = data.byte(kFacing); + _sub(al, data.byte(kTurntoface)); + if (!flags.c()) + goto higher; + _neg(al); + _cmp(al, 4); + if (!flags.c()) + goto decdir; + goto incdir; +higher: + _cmp(al, 4); + if (!flags.c()) + goto incdir; + goto decdir; +incdir: + data.byte(kTurndirection) = 1; + al = data.byte(kFacing); + _inc(al); + _and(al, 7); + data.byte(kFacing) = al; + es.byte(bx+29) = 0; + return; +decdir: + data.byte(kTurndirection) = -1; + al = data.byte(kFacing); + _dec(al); + _and(al, 7); + data.byte(kFacing) = al; + es.byte(bx+29) = 0; +} + +void DreamGenContext::walking() { + STACK_CHECK; + _cmp(data.byte(kLinedirection), 0); + if (flags.z()) + goto normalwalk; + al = data.byte(kLinepointer); + _dec(al); + data.byte(kLinepointer) = al; + _cmp(al, 200); + if (!flags.c()) + goto endofline; + goto continuewalk; +normalwalk: + al = data.byte(kLinepointer); + _inc(al); + data.byte(kLinepointer) = al; + _cmp(al, data.byte(kLinelength)); + if (!flags.c()) + goto endofline; +continuewalk: + ah = 0; + _add(ax, ax); + push(es); + push(bx); + dx = data; + es = dx; + bx = 8173; + _add(bx, ax); + ax = es.word(bx); + bx = pop(); + es = pop(); + es.word(bx+10) = ax; + return; +endofline: + data.byte(kLinepointer) = 254; + al = data.byte(kDestination); + data.byte(kManspath) = al; + _cmp(al, data.byte(kFinaldest)); + if (flags.z()) + goto finishedwalk; + al = data.byte(kFinaldest); + data.byte(kDestination) = al; + push(es); + push(bx); + autosetwalk(); + bx = pop(); + es = pop(); + return; +finishedwalk: + facerightway(); +} + +void DreamGenContext::facerightway() { + STACK_CHECK; + push(es); + push(bx); + getroomspaths(); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx+7); + data.byte(kTurntoface) = al; + data.byte(kLeavedirection) = al; + bx = pop(); + es = pop(); +} + +void DreamGenContext::checkforexit() { + STACK_CHECK; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + data.byte(kLastflag) = cl; + data.byte(kLastflagex) = ch; + data.byte(kFlagx) = dl; + data.byte(kFlagy) = dh; + al = data.byte(kLastflag); + _test(al, 64); + if (flags.z()) + goto notnewdirect; + al = data.byte(kLastflagex); + data.byte(kAutolocation) = al; + return; +notnewdirect: + _test(al, 32); + if (flags.z()) + goto notleave; + push(es); + push(bx); + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + goto notlouis; + bl = 0; + push(bx); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'A'; + isryanholding(); + bx = pop(); + if (flags.z()) + goto noshoe1; + _inc(bl); +noshoe1: + push(bx); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'B'; + isryanholding(); + bx = pop(); + if (flags.z()) + goto noshoe2; + _inc(bl); +noshoe2: + _cmp(bl, 2); + if (flags.z()) + goto notlouis; + al = 42; + _cmp(bl, 0); + if (flags.z()) + goto notravmessage; + _inc(al); +notravmessage: + cx = 80; + dx = 10; + bl = 68; + bh = 64; + setuptimeduse(); + al = data.byte(kFacing); + _add(al, 4); + _and(al, 7); + data.byte(kTurntoface) = al; + bx = pop(); + es = pop(); + return; +notlouis: + bx = pop(); + es = pop(); + data.byte(kNeedtotravel) = 1; + return; +notleave: + _test(al, 4); + if (flags.z()) + goto notaleft; + adjustleft(); + return; +notaleft: + _test(al, 2); + if (flags.z()) + goto notaright; + adjustright(); + return; +notaright: + _test(al, 8); + if (flags.z()) + goto notadown; + adjustdown(); + return; +notadown: + _test(al, 16); + if (flags.z()) + return /* (notanup) */; + adjustup(); +} + +void DreamGenContext::adjustdown() { + STACK_CHECK; + push(es); + push(bx); + _add(data.byte(kMapy), 10); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+11) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustup() { + STACK_CHECK; + push(es); + push(bx); + _sub(data.byte(kMapy), 10); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+11) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustleft() { + STACK_CHECK; + push(es); + push(bx); + data.byte(kLastflag) = 0; + _sub(data.byte(kMapx), 11); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+10) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustright() { + STACK_CHECK; + push(es); + push(bx); + _add(data.byte(kMapx), 11); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + _sub(al, 2); + es.byte(bx+10) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::reminders() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 24); + if (!flags.z()) + return /* (notinedenslift) */; + _cmp(data.byte(kMapx), 44); + if (!flags.z()) + return /* (notinedenslift) */; + _cmp(data.byte(kProgresspoints), 0); + if (!flags.z()) + return /* (notfirst) */; + al = 'D'; + ah = 'K'; + cl = 'E'; + ch = 'Y'; + isryanholding(); + if (flags.z()) + goto forgotone; + al = 'C'; + ah = 'S'; + cl = 'H'; + ch = 'R'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto forgotone; + ax = es.word(bx+2); + _cmp(al, 4); + if (!flags.z()) + goto forgotone; + _cmp(ah, 255); + if (flags.z()) + goto havegotcard; + cl = 'P'; + ch = 'U'; + dl = 'R'; + dh = 'S'; + _xchg(al, ah); + compare(); + if (!flags.z()) + goto forgotone; +havegotcard: + _inc(data.byte(kProgresspoints)); + return; +forgotone: + al = 50; + bl = 54; + bh = 70; + cx = 48; + dx = 8; + setuptimeduse(); +} + +void DreamGenContext::initrain() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)); + bx = 1113; +checkmorerain: + al = cs.byte(bx); + _cmp(al, 255); + if (flags.z()) + goto finishinitrain; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+1); + _cmp(al, data.byte(kMapx)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+2); + _cmp(al, data.byte(kMapy)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+3); + data.byte(kRainspace) = al; + goto dorain; +checkrain: + _add(bx, 4); + goto checkmorerain; +dorain: + cx = 4; +initraintop: + randomnumber(); + _and(al, 31); + _add(al, 3); + _cmp(al, data.byte(kRainspace)); + if (!flags.c()) + goto initraintop; + _add(cl, al); + _cmp(cl, data.byte(kMapxsize)); + if (!flags.c()) + goto initrainside; + push(cx); + splitintolines(); + cx = pop(); + goto initraintop; +initrainside: + cl = data.byte(kMapxsize); + _dec(cl); +initrainside2: + randomnumber(); + _and(al, 31); + _add(al, 3); + _cmp(al, data.byte(kRainspace)); + if (!flags.c()) + goto initrainside2; + _add(ch, al); + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + goto finishinitrain; + push(cx); + splitintolines(); + cx = pop(); + goto initrainside2; +finishinitrain: + al = 255; + _stosb(); +} + +void DreamGenContext::splitintolines() { + STACK_CHECK; +lookforlinestart: + getblockofpixel(); + _cmp(al, 0); + if (!flags.z()) + goto foundlinestart; + _dec(cl); + _inc(ch); + _cmp(cl, 0); + if (flags.z()) + return /* (endofthisline) */; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + return /* (endofthisline) */; + goto lookforlinestart; +foundlinestart: + es.word(di) = cx; + bh = 1; +lookforlineend: + getblockofpixel(); + _cmp(al, 0); + if (flags.z()) + goto foundlineend; + _dec(cl); + _inc(ch); + _cmp(cl, 0); + if (flags.z()) + goto foundlineend; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + goto foundlineend; + _inc(bh); + goto lookforlineend; +foundlineend: + push(cx); + es.byte(di+2) = bh; + randomnumber(); + es.byte(di+3) = al; + randomnumber(); + es.byte(di+4) = al; + randomnumber(); + _and(al, 3); + _add(al, 4); + es.byte(di+5) = al; + _add(di, 6); + cx = pop(); + _cmp(cl, 0); + if (flags.z()) + return /* (endofthisline) */; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + return /* (endofthisline) */; + goto lookforlinestart; +} + +void DreamGenContext::getblockofpixel() { + STACK_CHECK; + push(cx); + push(es); + push(di); + ax = data.word(kMapxstart); + _add(cl, al); + ax = data.word(kMapystart); + _add(ch, al); + checkone(); + _and(cl, 1); + if (!flags.z()) + goto failrain; + di = pop(); + es = pop(); + cx = pop(); + return; +failrain: + di = pop(); + es = pop(); + cx = pop(); + al = 0; +} + +void DreamGenContext::showrain() { + STACK_CHECK; + ds = data.word(kMainsprites); + si = 6*58; + ax = ds.word(si+2); + si = ax; + _add(si, 2080); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)); + es = data.word(kBuffers); + _cmp(es.byte(bx), 255); + if (flags.z()) + return /* (nothunder) */; +morerain: + es = data.word(kBuffers); + _cmp(es.byte(bx), 255); + if (flags.z()) + goto finishrain; + al = es.byte(bx+1); + ah = 0; + _add(ax, data.word(kMapady)); + _add(ax, data.word(kMapystart)); + cx = 320; + _mul(cx); + cl = es.byte(bx); + ch = 0; + _add(ax, cx); + _add(ax, data.word(kMapadx)); + _add(ax, data.word(kMapxstart)); + di = ax; + cl = es.byte(bx+2); + ch = 0; + ax = es.word(bx+3); + dl = es.byte(bx+5); + dh = 0; + _sub(ax, dx); + _and(ax, 511); + es.word(bx+3) = ax; + _add(bx, 6); + push(si); + _add(si, ax); + es = data.word(kWorkspace); + ah = 0; + dx = 320-2; +rainloop: + _lodsb(); + _cmp(al, ah); + if (flags.z()) + goto noplot; + _stosb(); + _add(di, dx); + if (--cx) + goto rainloop; + si = pop(); + goto morerain; +noplot: + _add(di, 320-1); + if (--cx) + goto rainloop; + si = pop(); + goto morerain; +finishrain: + _cmp(data.word(kCh1blockstocopy), 0); + if (!flags.z()) + return /* (nothunder) */; + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + goto notlouisthund; + _cmp(data.byte(kBeenmugged), 1); + if (!flags.z()) + return /* (nothunder) */; +notlouisthund: + _cmp(data.byte(kReallocation), 55); + if (flags.z()) + return /* (nothunder) */; + randomnum1(); + _cmp(al, 1); + if (!flags.c()) + return /* (nothunder) */; + al = 7; + _cmp(data.byte(kCh0playing), 6); + if (flags.z()) + goto isthunder1; + al = 4; +isthunder1: + playchannel1(); +} + +void DreamGenContext::backobject() { + STACK_CHECK; + ds = data.word(kSetdat); + di = es.word(bx+20); + al = es.byte(bx+18); + _cmp(al, 0); + if (flags.z()) + goto _tmp48z; + _dec(al); + es.byte(bx+18) = al; + return /* (finishback) */; +_tmp48z: + al = ds.byte(di+7); + es.byte(bx+18) = al; + al = ds.byte(di+8); + _cmp(al, 6); + if (!flags.z()) + goto notwidedoor; + widedoor(); + return /* (finishback) */; +notwidedoor: + _cmp(al, 5); + if (!flags.z()) + goto notrandom; + random(); + return /* (finishback) */; +notrandom: + _cmp(al, 4); + if (!flags.z()) + goto notlockdoor; + lockeddoorway(); + return /* (finishback) */; +notlockdoor: + _cmp(al, 3); + if (!flags.z()) + goto notlift; + liftsprite(); + return /* (finishback) */; +notlift: + _cmp(al, 2); + if (!flags.z()) + goto notdoor; + doorway(); + return /* (finishback) */; +notdoor: + _cmp(al, 1); + if (!flags.z()) + goto steadyob; + constant(); + return /* (finishback) */; +steadyob: + steady(); +} + +void DreamGenContext::liftsprite() { + STACK_CHECK; + al = data.byte(kLiftflag); + _cmp(al, 0); + if (flags.z()) + goto liftclosed; + _cmp(al, 1); + if (flags.z()) + goto liftopen; + _cmp(al, 3); + if (flags.z()) + goto openlift; + al = es.byte(bx+19); + _cmp(al, 0); + if (flags.z()) + goto finishclose; + _dec(al); + _cmp(al, 11); + if (!flags.z()) + goto pokelift; + push(ax); + al = 3; + liftnoise(); + ax = pop(); + goto pokelift; +finishclose: + data.byte(kLiftflag) = 0; + return; +openlift: + al = es.byte(bx+19); + _cmp(al, 12); + if (flags.z()) + goto endoflist; + _inc(al); + _cmp(al, 1); + if (!flags.z()) + goto pokelift; + push(ax); + al = 2; + liftnoise(); + ax = pop(); +pokelift: + es.byte(bx+19) = al; + ah = 0; + push(di); + _add(di, ax); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + return; +endoflist: + data.byte(kLiftflag) = 1; + return; +liftopen: + al = data.byte(kLiftpath); + push(es); + push(bx); + turnpathon(); + bx = pop(); + es = pop(); + _cmp(data.byte(kCounttoclose), 0); + if (flags.z()) + goto nocountclose; + _dec(data.byte(kCounttoclose)); + _cmp(data.byte(kCounttoclose), 0); + if (!flags.z()) + goto nocountclose; + data.byte(kLiftflag) = 2; +nocountclose: + al = 12; + goto pokelift; +liftclosed: + al = data.byte(kLiftpath); + push(es); + push(bx); + turnpathoff(); + bx = pop(); + es = pop(); + _cmp(data.byte(kCounttoopen), 0); + if (flags.z()) + goto nocountopen; + _dec(data.byte(kCounttoopen)); + _cmp(data.byte(kCounttoopen), 0); + if (!flags.z()) + goto nocountopen; + data.byte(kLiftflag) = 3; +nocountopen: + al = 0; + goto pokelift; +} + +void DreamGenContext::liftnoise() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 5); + if (flags.z()) + goto hissnoise; + _cmp(data.byte(kReallocation), 21); + if (flags.z()) + goto hissnoise; + playchannel1(); + return; +hissnoise: + al = 13; + playchannel1(); +} + +void DreamGenContext::random() { + STACK_CHECK; + randomnum1(); + push(di); + _and(ax, 7); + _add(di, 18); + _add(di, ax); + al = ds.byte(di); + di = pop(); + es.byte(bx+15) = al; +} + +void DreamGenContext::steady() { + STACK_CHECK; + al = ds.byte(di+18); + ds.byte(di+17) = al; + es.byte(bx+15) = al; +} + +void DreamGenContext::constant() { + STACK_CHECK; + _inc(es.byte(bx+19)); + cl = es.byte(bx+19); + ch = 0; + _add(di, cx); + _cmp(ds.byte(di+18), 255); + if (!flags.z()) + goto gotconst; + _sub(di, cx); + cx = 0; + es.byte(bx+19) = cl; +gotconst: + al = ds.byte(di+18); + _sub(di, cx); + es.byte(bx+15) = al; + ds.byte(di+17) = al; +} + +void DreamGenContext::doorway() { + STACK_CHECK; + data.byte(kDoorcheck1) = -24; + data.byte(kDoorcheck2) = 10; + data.byte(kDoorcheck3) = -30; + data.byte(kDoorcheck4) = 10; + dodoor(); +} + +void DreamGenContext::widedoor() { + STACK_CHECK; + data.byte(kDoorcheck1) = -24; + data.byte(kDoorcheck2) = 24; + data.byte(kDoorcheck3) = -30; + data.byte(kDoorcheck4) = 24; + dodoor(); +} + +void DreamGenContext::dodoor() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + cl = es.byte(bx+10); + ch = es.byte(bx+11); + _cmp(al, cl); + if (!flags.c()) + goto rtofdoor; + _sub(al, cl); + _cmp(al, data.byte(kDoorcheck1)); + if (!flags.c()) + goto upordown; + goto shutdoor; +rtofdoor: + _sub(al, cl); + _cmp(al, data.byte(kDoorcheck2)); + if (!flags.c()) + goto shutdoor; +upordown: + _cmp(ah, ch); + if (!flags.c()) + goto botofdoor; + _sub(ah, ch); + _cmp(ah, data.byte(kDoorcheck3)); + if (flags.c()) + goto shutdoor; + goto opendoor; +botofdoor: + _sub(ah, ch); + _cmp(ah, data.byte(kDoorcheck4)); + if (!flags.c()) + goto shutdoor; +opendoor: + cl = es.byte(bx+19); + _cmp(data.byte(kThroughdoor), 1); + if (!flags.z()) + goto notthrough; + _cmp(cl, 0); + if (!flags.z()) + goto notthrough; + cl = 6; +notthrough: + _inc(cl); + _cmp(cl, 1); + if (!flags.z()) + goto notdoorsound2; + al = 0; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor2; + al = 13; +nothoteldoor2: + playchannel1(); +notdoorsound2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + _cmp(al, 255); + if (!flags.z()) + goto atlast1; + _dec(di); + _dec(cl); +atlast1: + es.byte(bx+19) = cl; + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + data.byte(kThroughdoor) = 1; + return; +shutdoor: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound1; + al = 1; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor1; + al = 13; +nothoteldoor1: + playchannel1(); +notdoorsound1: + _cmp(cl, 0); + if (flags.z()) + goto atlast2; + _dec(cl); + es.byte(bx+19) = cl; +atlast2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (notnearly) */; + data.byte(kThroughdoor) = 0; +} + +void DreamGenContext::lockeddoorway() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + cl = es.byte(bx+10); + ch = es.byte(bx+11); + _cmp(al, cl); + if (!flags.c()) + goto rtofdoor2; + _sub(al, cl); + _cmp(al, -24); + if (!flags.c()) + goto upordown2; + goto shutdoor2; +rtofdoor2: + _sub(al, cl); + _cmp(al, 10); + if (!flags.c()) + goto shutdoor2; +upordown2: + _cmp(ah, ch); + if (!flags.c()) + goto botofdoor2; + _sub(ah, ch); + _cmp(ah, -30); + if (flags.c()) + goto shutdoor2; + goto opendoor2; +botofdoor2: + _sub(ah, ch); + _cmp(ah, 12); + if (!flags.c()) + goto shutdoor2; +opendoor2: + _cmp(data.byte(kThroughdoor), 1); + if (flags.z()) + goto mustbeopen; + _cmp(data.byte(kLockstatus), 1); + if (flags.z()) + goto shutdoor; +mustbeopen: + cl = es.byte(bx+19); + _cmp(cl, 1); + if (!flags.z()) + goto notdoorsound4; + al = 0; + playchannel1(); +notdoorsound4: + _cmp(cl, 6); + if (!flags.z()) + goto noturnonyet; + al = data.byte(kDoorpath); + push(es); + push(bx); + turnpathon(); + bx = pop(); + es = pop(); +noturnonyet: + cl = es.byte(bx+19); + _cmp(data.byte(kThroughdoor), 1); + if (!flags.z()) + goto notthrough2; + _cmp(cl, 0); + if (!flags.z()) + goto notthrough2; + cl = 6; +notthrough2: + _inc(cl); + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + _cmp(al, 255); + if (!flags.z()) + goto atlast3; + _dec(di); + _dec(cl); +atlast3: + es.byte(bx+19) = cl; + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (justshutting) */; + data.byte(kThroughdoor) = 1; + return; +shutdoor2: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound3; + al = 1; + playchannel1(); +notdoorsound3: + _cmp(cl, 0); + if (flags.z()) + goto atlast4; + _dec(cl); + es.byte(bx+19) = cl; +atlast4: + ch = 0; + data.byte(kThroughdoor) = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 0); + if (!flags.z()) + return /* (notlocky) */; + al = data.byte(kDoorpath); + push(es); + push(bx); + turnpathoff(); + bx = pop(); + es = pop(); + data.byte(kLockstatus) = 1; + return; +/*continuing to unbounded code: shutdoor from dodoor:60-87*/ +shutdoor: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound1; + al = 1; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor1; + al = 13; +nothoteldoor1: + playchannel1(); +notdoorsound1: + _cmp(cl, 0); + if (flags.z()) + goto atlast2; + _dec(cl); + es.byte(bx+19) = cl; +atlast2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (notnearly) */; + data.byte(kThroughdoor) = 0; +} + +void DreamGenContext::updatepeople() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)); + data.word(kListpos) = di; + cx = 12*5; + al = 255; + _stosb(cx, true); + _inc(data.word(kMaintimer)); + es = cs; + bx = 534; + di = 991; +updateloop: + al = es.byte(bx); + _cmp(al, 255); + if (flags.z()) + return /* (endupdate) */; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinthisroom; + cx = es.word(bx+1); + _cmp(cl, data.byte(kMapx)); + if (!flags.z()) + goto notinthisroom; + _cmp(ch, data.byte(kMapy)); + if (!flags.z()) + goto notinthisroom; + push(di); + ax = cs.word(di); + __dispatch_call(ax); + di = pop(); +notinthisroom: + _add(bx, 8); + _add(di, 2); + goto updateloop; +} + +void DreamGenContext::getreelframeax() { + STACK_CHECK; + push(ds); + data.word(kCurrentframe) = ax; + findsource(); + es = ds; + ds = pop(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + _add(ax, ax); + cx = ax; + _add(ax, ax); + _add(ax, cx); + bx = ax; +} + +void DreamGenContext::reelsonscreen() { + STACK_CHECK; + reconstruct(); + updatepeople(); + watchreel(); + showrain(); + usetimedtext(); +} + +void DreamGenContext::plotreel() { + STACK_CHECK; + getreelstart(); +retryreel: + push(es); + push(si); + ax = es.word(si+2); + _cmp(al, 220); + if (flags.c()) + goto normalreel; + _cmp(al, 255); + if (flags.z()) + goto normalreel; + dealwithspecial(); + _inc(data.word(kReelpointer)); + si = pop(); + es = pop(); + _add(si, 40); + goto retryreel; +normalreel: + cx = 8; +plotloop: + push(cx); + push(es); + push(si); + ax = es.word(si); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto notplot; + showreelframe(); +notplot: + si = pop(); + es = pop(); + cx = pop(); + _add(si, 5); + if (--cx) + goto plotloop; + soundonreels(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::soundonreels() { + STACK_CHECK; + bl = data.byte(kReallocation); + _add(bl, bl); + _xor(bh, bh); + _add(bx, 1214); + si = cs.word(bx); +reelsoundloop: + al = cs.byte(si); + _cmp(al, 255); + if (flags.z()) + goto endreelsound; + ax = cs.word(si+1); + _cmp(ax, data.word(kReelpointer)); + if (!flags.z()) + goto skipreelsound; + _cmp(ax, data.word(kLastsoundreel)); + if (flags.z()) + goto skipreelsound; + data.word(kLastsoundreel) = ax; + al = cs.byte(si); + _cmp(al, 64); + if (flags.c()) + { playchannel1(); return; }; + _cmp(al, 128); + if (flags.c()) + goto channel0once; + _and(al, 63); + ah = 255; + { playchannel0(); return; }; +channel0once: + _and(al, 63); + ah = 0; + { playchannel0(); return; }; +skipreelsound: + _add(si, 3); + goto reelsoundloop; +endreelsound: + ax = data.word(kLastsoundreel); + _cmp(ax, data.word(kReelpointer)); + if (flags.z()) + return /* (nochange2) */; + data.word(kLastsoundreel) = -1; +} + +void DreamGenContext::reconstruct() { + STACK_CHECK; + _cmp(data.byte(kHavedoneobs), 0); + if (flags.z()) + return /* (noneedtorecon) */; + data.byte(kNewobs) = 1; + drawfloor(); + spriteupdate(); + printsprites(); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto notfudge; + _cmp(data.byte(kReallocation), 20); + if (!flags.z()) + goto notfudge; + undertextline(); +notfudge: + data.byte(kHavedoneobs) = 0; +} + +void DreamGenContext::dealwithspecial() { + STACK_CHECK; + _sub(al, 220); + _cmp(al, 0); + if (!flags.z()) + goto notplset; + al = ah; + placesetobject(); + data.byte(kHavedoneobs) = 1; + return; +notplset: + _cmp(al, 1); + if (!flags.z()) + goto notremset; + al = ah; + removesetobject(); + data.byte(kHavedoneobs) = 1; + return; +notremset: + _cmp(al, 2); + if (!flags.z()) + goto notplfree; + al = ah; + placefreeobject(); + data.byte(kHavedoneobs) = 1; + return; +notplfree: + _cmp(al, 3); + if (!flags.z()) + goto notremfree; + al = ah; + removefreeobject(); + data.byte(kHavedoneobs) = 1; + return; +notremfree: + _cmp(al, 4); + if (!flags.z()) + goto notryanoff; + switchryanoff(); + return; +notryanoff: + _cmp(al, 5); + if (!flags.z()) + goto notryanon; + data.byte(kTurntoface) = ah; + data.byte(kFacing) = ah; + switchryanon(); + return; +notryanon: + _cmp(al, 6); + if (!flags.z()) + goto notchangeloc; + data.byte(kNewlocation) = ah; + return; +notchangeloc: + movemap(); +} + +void DreamGenContext::movemap() { + STACK_CHECK; + _cmp(ah, 32); + if (!flags.z()) + goto notmapup2; + _sub(data.byte(kMapy), 20); + data.byte(kNowinnewroom) = 1; + return; +notmapup2: + _cmp(ah, 16); + if (!flags.z()) + goto notmapupspec; + _sub(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + return; +notmapupspec: + _cmp(ah, 8); + if (!flags.z()) + goto notmapdownspec; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + return; +notmapdownspec: + _cmp(ah, 2); + if (!flags.z()) + goto notmaprightspec; + _add(data.byte(kMapx), 11); + data.byte(kNowinnewroom) = 1; + return; +notmaprightspec: + _sub(data.byte(kMapx), 11); + data.byte(kNowinnewroom) = 1; +} + +void DreamGenContext::getreelstart() { + STACK_CHECK; + ax = data.word(kReelpointer); + cx = 40; + _mul(cx); + es = data.word(kReels); + si = ax; + _add(si, (0+(36*144))); +} + +void DreamGenContext::showreelframe() { + STACK_CHECK; + al = es.byte(si+2); + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + al = es.byte(si+3); + bx = ax; + _add(bx, data.word(kMapady)); + ax = es.word(si); + data.word(kCurrentframe) = ax; + findsource(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + ah = 8; + showframe(); +} + +void DreamGenContext::deleverything() { + STACK_CHECK; + al = data.byte(kMapysize); + ah = 0; + _add(ax, data.word(kMapoffsety)); + _cmp(ax, 182); + if (!flags.c()) + goto bigroom; + maptopanel(); + return; +bigroom: + _sub(data.byte(kMapysize), 8); + maptopanel(); + _add(data.byte(kMapysize), 8); +} + +void DreamGenContext::dumpeverything() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)); +dumpevery1: + ax = es.word(bx); + cx = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto finishevery1; + _cmp(ax, es.word(bx+(40*5))); + if (!flags.z()) + goto notskip1; + _cmp(cx, es.word(bx+(40*5)+2)); + if (flags.z()) + goto skip1; +notskip1: + push(bx); + push(es); + push(ds); + bl = ah; + bh = 0; + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + multidump(); + ds = pop(); + es = pop(); + bx = pop(); +skip1: + _add(bx, 5); + goto dumpevery1; +finishevery1: + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40))+(40*5); +dumpevery2: + ax = es.word(bx); + cx = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (finishevery2) */; + push(bx); + push(es); + push(ds); + bl = ah; + bh = 0; + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + multidump(); + ds = pop(); + es = pop(); + bx = pop(); + _add(bx, 5); + goto dumpevery2; +} + +void DreamGenContext::allocatework() { + STACK_CHECK; + bx = 0x1000; + allocatemem(); + data.word(kWorkspace) = ax; +} + +void DreamGenContext::loadpalfromiff() { + STACK_CHECK; + dx = 2481; + openfile(); + cx = 2000; + ds = data.word(kMapstore); + dx = 0; + readfromfile(); + closefile(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); + ds = data.word(kMapstore); + si = 0x30; + cx = 768; +palloop: + _lodsb(); + _shr(al, 1); + _shr(al, 1); + _cmp(data.byte(kBrightness), 1); + if (!flags.z()) + goto nought; + _cmp(al, 0); + if (flags.z()) + goto nought; + ah = al; + _shr(ah, 1); + _add(al, ah); + _shr(ah, 1); + _add(al, ah); + _cmp(al, 64); + if (flags.c()) + goto nought; + al = 63; +nought: + _stosb(); + if (--cx) + goto palloop; +} + +void DreamGenContext::paneltomap() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + ds = data.word(kMapstore); + si = 0; + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multiget(); +} + +void DreamGenContext::maptopanel() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + ds = data.word(kMapstore); + si = 0; + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multiput(); +} + +void DreamGenContext::dumpmap() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multidump(); +} + +void DreamGenContext::pixelcheckset() { + STACK_CHECK; + push(ax); + _sub(al, es.byte(bx)); + _sub(ah, es.byte(bx+1)); + push(es); + push(bx); + push(cx); + push(ax); + al = es.byte(bx+4); + getsetad(); + al = es.byte(bx+17); + es = data.word(kSetframes); + bx = (0); + ah = 0; + cx = 6; + _mul(cx); + _add(bx, ax); + ax = pop(); + push(ax); + al = ah; + ah = 0; + cl = es.byte(bx); + ch = 0; + _mul(cx); + cx = pop(); + ch = 0; + _add(ax, cx); + _add(ax, es.word(bx+2)); + bx = ax; + _add(bx, (0+2080)); + al = es.byte(bx); + dl = al; + cx = pop(); + bx = pop(); + es = pop(); + ax = pop(); + _cmp(dl, 0); +} + +void DreamGenContext::createpanel() { + STACK_CHECK; + di = 0; + bx = 8; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 160; + bx = 8; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 0; + bx = 104; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 160; + bx = 104; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); +} + +void DreamGenContext::createpanel2() { + STACK_CHECK; + createpanel(); + di = 0; + bx = 0; + ds = data.word(kIcons2); + al = 5; + ah = 2; + showframe(); + di = 160; + bx = 0; + ds = data.word(kIcons2); + al = 5; + ah = 2; + showframe(); +} + +void DreamGenContext::clearwork() { + STACK_CHECK; + ax = 0x0; + es = data.word(kWorkspace); + di = 0; + cx = (200*320)/64; +clearloop: + _stosw(32); + if (--cx) + goto clearloop; +} + +void DreamGenContext::zoom() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (inwatching) */; + _cmp(data.byte(kZoomon), 1); + if (flags.z()) + goto zoomswitch; + return; +zoomswitch: + _cmp(data.byte(kCommandtype), 199); + if (flags.c()) + goto zoomit; + putunderzoom(); + return; +zoomit: + ax = data.word(kOldpointery); + _sub(ax, 9); + cx = (320); + _mul(cx); + _add(ax, data.word(kOldpointerx)); + _sub(ax, 11); + si = ax; + ax = (132)+4; + cx = (320); + _mul(cx); + _add(ax, (8)+5); + di = ax; + es = data.word(kWorkspace); + ds = data.word(kWorkspace); + cx = 20; +zoomloop: + push(cx); + cx = 23; +zoomloop2: + _lodsb(); + ah = al; + _stosw(); + es.word(di+(320)-2) = ax; + if (--cx) + goto zoomloop2; + _add(si, (320)-23); + _add(di, (320)-46+(320)); + cx = pop(); + if (--cx) + goto zoomloop; + crosshair(); + data.byte(kDidzoom) = 1; +} + +void DreamGenContext::delthisone() { + STACK_CHECK; + push(ax); + push(ax); + al = ah; + ah = 0; + _add(ax, data.word(kMapady)); + bx = (320); + _mul(bx); + bx = pop(); + bh = 0; + _add(bx, data.word(kMapadx)); + _add(ax, bx); + di = ax; + ax = pop(); + push(ax); + al = ah; + ah = 0; + bx = 22*8; + _mul(bx); + bx = pop(); + bh = 0; + _add(ax, bx); + si = ax; + es = data.word(kWorkspace); + ds = data.word(kMapstore); + dl = cl; + dh = 0; + ax = (320); + _sub(ax, dx); + _neg(dx); + _add(dx, 22*8); +deloneloop: + push(cx); + ch = 0; + _movsb(cx, true); + cx = pop(); + _add(di, ax); + _add(si, dx); + _dec(ch); + if (!flags.z()) + goto deloneloop; +} + +void DreamGenContext::doblocks() { + STACK_CHECK; + es = data.word(kWorkspace); + ax = data.word(kMapady); + cx = (320); + _mul(cx); + di = data.word(kMapadx); + _add(di, ax); + al = data.byte(kMapy); + ah = 0; + bx = (66); + _mul(bx); + bl = data.byte(kMapx); + bh = 0; + _add(ax, bx); + si = (0); + _add(si, ax); + cx = 10; +loop120: + push(di); + push(cx); + cx = 11; +loop124: + push(cx); + push(di); + ds = data.word(kMapdata); + _lodsb(); + ds = data.word(kBackdrop); + push(si); + _cmp(al, 0); + if (flags.z()) + goto zeroblock; + ah = al; + al = 0; + si = (0+192); + _add(si, ax); + bh = 14; + bh = 4; +firstbitofblock: + _movsw(8); + _add(di, (320)-16); + _dec(bh); + if (!flags.z()) + goto firstbitofblock; + bh = 12; +loop125: + _movsw(8); + ax = 0x0dfdf; + _stosw(2); + _add(di, (320)-20); + _dec(bh); + if (!flags.z()) + goto loop125; + _add(di, 4); + ax = 0x0dfdf; + _stosw(8); + _add(di, (320)-16); + _stosw(8); + _add(di, (320)-16); + _stosw(8); + _add(di, (320)-16); + _stosw(8); +zeroblock: + si = pop(); + di = pop(); + cx = pop(); + _add(di, 16); + if (--cx) + goto loop124; + _add(si, (66)-11); + cx = pop(); + di = pop(); + _add(di, (320)*16); + if (--cx) + goto loop120; +} + +void DreamGenContext::showframe() { + STACK_CHECK; + push(dx); + push(ax); + cx = ax; + _and(cx, 511); + _add(cx, cx); + si = cx; + _add(cx, cx); + _add(si, cx); + _cmp(ds.word(si), 0); + if (!flags.z()) + goto notblankshow; + ax = pop(); + dx = pop(); + cx = 0; + return; +notblankshow: + _test(ah, 128); + if (!flags.z()) + goto skipoffsets; + al = ds.byte(si+4); + ah = 0; + _add(di, ax); + al = ds.byte(si+5); + ah = 0; + _add(bx, ax); +skipoffsets: + cx = ds.word(si+0); + ax = ds.word(si+2); + _add(ax, 2080); + si = ax; + ax = pop(); + dx = pop(); + _cmp(ah, 0); + if (flags.z()) + goto noeffects; + _test(ah, 128); + if (flags.z()) + goto notcentred; + push(ax); + al = cl; + ah = 0; + _shr(ax, 1); + _sub(di, ax); + al = ch; + ah = 0; + _shr(ax, 1); + _sub(bx, ax); + ax = pop(); +notcentred: + _test(ah, 64); + if (flags.z()) + goto notdiffdest; + push(cx); + frameoutfx(); + cx = pop(); + return; +notdiffdest: + _test(ah, 8); + if (flags.z()) + goto notprintlist; + push(ax); + ax = di; + _sub(ax, data.word(kMapadx)); + push(bx); + _sub(bx, data.word(kMapady)); + ah = bl; + bx = pop(); + ax = pop(); +notprintlist: + _test(ah, 4); + if (flags.z()) + goto notflippedx; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutfx(); + cx = pop(); + return; +notflippedx: + _test(ah, 2); + if (flags.z()) + goto notnomask; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutnm(); + cx = pop(); + return; +notnomask: + _test(ah, 32); + if (flags.z()) + goto noeffects; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutbh(); + cx = pop(); + return; +noeffects: + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutv(); + cx = pop(); +} + +void DreamGenContext::frameoutbh() { + STACK_CHECK; + push(dx); + ax = bx; + bx = dx; + _mul(bx); + _add(di, ax); + dx = pop(); + push(cx); + ch = 0; + _sub(dx, cx); + cx = pop(); +bhloop2: + push(cx); + ch = 0; + ah = 255; +bhloop1: + _cmp(es.byte(di), ah); + if (!flags.z()) + goto nofill; + _movsb(); + if (--cx) + goto bhloop1; + goto nextline; +nofill: + _inc(di); + _inc(si); + if (--cx) + goto bhloop1; +nextline: + _add(di, dx); + cx = pop(); + _dec(ch); + if (!flags.z()) + goto bhloop2; +} + +void DreamGenContext::frameoutfx() { + STACK_CHECK; + push(dx); + ax = bx; + bx = dx; + _mul(bx); + _add(di, ax); + dx = pop(); + push(cx); + ch = 0; + _add(dx, cx); + cx = pop(); +frameloopfx1: + push(cx); + ch = 0; +frameloopfx2: + _lodsb(); + _cmp(al, 0); + if (!flags.z()) + goto backtosolidfx; +backtootherfx: + _dec(di); + if (--cx) + goto frameloopfx2; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloopfx1; + return; +frameloopfx3: + _lodsb(); + _cmp(al, 0); + if (flags.z()) + goto backtootherfx; +backtosolidfx: + es.byte(di) = al; + _dec(di); + if (--cx) + goto frameloopfx3; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloopfx1; +} + +void DreamGenContext::transferinv() { + STACK_CHECK; + di = data.word(kExframepos); + push(di); + al = data.byte(kExpos); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + _inc(ax); + cx = 6; + _mul(cx); + es = data.word(kExtras); + bx = (0); + _add(bx, ax); + _add(di, (0+2080)); + push(bx); + al = data.byte(kItemtotran); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + _inc(ax); + cx = 6; + _mul(cx); + ds = data.word(kFreeframes); + bx = (0); + _add(bx, ax); + si = (0+2080); + al = ds.byte(bx); + ah = 0; + cl = ds.byte(bx+1); + ch = 0; + _add(si, ds.word(bx+2)); + dx = ds.word(bx+4); + bx = pop(); + es.byte(bx+0) = al; + es.byte(bx+1) = cl; + es.word(bx+4) = dx; + _mul(cx); + cx = ax; + push(cx); + _movsb(cx, true); + cx = pop(); + ax = pop(); + es.word(bx+2) = ax; + _add(data.word(kExframepos), cx); +} + +void DreamGenContext::transfermap() { + STACK_CHECK; + di = data.word(kExframepos); + push(di); + al = data.byte(kExpos); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + cx = 6; + _mul(cx); + es = data.word(kExtras); + bx = (0); + _add(bx, ax); + _add(di, (0+2080)); + push(bx); + al = data.byte(kItemtotran); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + cx = 6; + _mul(cx); + ds = data.word(kFreeframes); + bx = (0); + _add(bx, ax); + si = (0+2080); + al = ds.byte(bx); + ah = 0; + cl = ds.byte(bx+1); + ch = 0; + _add(si, ds.word(bx+2)); + dx = ds.word(bx+4); + bx = pop(); + es.byte(bx+0) = al; + es.byte(bx+1) = cl; + es.word(bx+4) = dx; + _mul(cx); + cx = ax; + push(cx); + _movsb(cx, true); + cx = pop(); + ax = pop(); + es.word(bx+2) = ax; + _add(data.word(kExframepos), cx); +} + +void DreamGenContext::dofade() { + STACK_CHECK; + _cmp(data.byte(kFadedirection), 0); + if (flags.z()) + return /* (finishfade) */; + cl = data.byte(kNumtofade); + ch = 0; + al = data.byte(kColourpos); + ah = 0; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)); + _add(si, ax); + _add(si, ax); + _add(si, ax); + showgroup(); + al = data.byte(kNumtofade); + _add(al, data.byte(kColourpos)); + data.byte(kColourpos) = al; + _cmp(al, 0); + if (!flags.z()) + return /* (finishfade) */; + fadecalculation(); +} + +void DreamGenContext::clearendpal() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + cx = 768; + al = 0; + _stosb(cx, true); +} + +void DreamGenContext::clearpalette() { + STACK_CHECK; + data.byte(kFadedirection) = 0; + clearstartpal(); + dumpcurrent(); +} + +void DreamGenContext::fadescreenup() { + STACK_CHECK; + clearstartpal(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadetowhite() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + cx = 768; + al = 63; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + al = 0; + _stosb(3); + paltostartpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadefromwhite() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + cx = 768; + al = 63; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + al = 0; + _stosb(3); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadescreenups() { + STACK_CHECK; + clearstartpal(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 64; +} + +void DreamGenContext::fadescreendownhalf() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + cx = 768; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); +halfend: + al = es.byte(bx); + _shr(al, 1); + es.byte(bx) = al; + _inc(bx); + if (--cx) + goto halfend; + ds = data.word(kBuffers); + es = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3))+(56*3); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(56*3); + cx = 3*5; + _movsb(cx, true); + si = (0+(228*13)+32+60+(32*32)+(11*10*3))+(77*3); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(77*3); + cx = 3*2; + _movsb(cx, true); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 31; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 32; +} + +void DreamGenContext::fadescreenuphalf() { + STACK_CHECK; + endpaltostart(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 31; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 32; +} + +void DreamGenContext::fadescreendown() { + STACK_CHECK; + paltostartpal(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadescreendowns() { + STACK_CHECK; + paltostartpal(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 64; +} + +void DreamGenContext::clearstartpal() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + cx = 256; +wholeloop1: + ax = 0; + _stosw(); + al = 0; + _stosb(); + if (--cx) + goto wholeloop1; +} + +void DreamGenContext::showgun() { + STACK_CHECK; + data.byte(kAddtored) = 0; + data.byte(kAddtogreen) = 0; + data.byte(kAddtoblue) = 0; + paltostartpal(); + paltoendpal(); + greyscalesum(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 130; + hangon(); + endpaltostart(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 200; + hangon(); + data.byte(kRoomssample) = 34; + loadroomssample(); + data.byte(kVolume) = 0; + dx = 2351; + loadintotemp(); + createpanel2(); + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + di = 100; + bx = 4; + showframe(); + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + di = 158; + bx = 106; + showframe(); + worktoscreen(); + getridoftemp(); + fadescreenup(); + cx = 160; + hangon(); + al = 12; + ah = 0; + playchannel0(); + dx = 2260; + loadtemptext(); + rollendcredits2(); + getridoftemptext(); +} + +void DreamGenContext::rollendcredits2() { + STACK_CHECK; + rollem(); +} + +void DreamGenContext::rollem() { + STACK_CHECK; + cl = 160; + ch = 160; + di = 25; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiget(); + es = data.word(kTextfile1); + si = 49*2; + ax = es.word(si); + si = ax; + _add(si, (66*2)); + cx = 80; +endcredits21: + push(cx); + bx = 10; + cx = data.word(kLinespacing); +endcredits22: + push(cx); + push(si); + push(di); + push(es); + push(bx); + vsync(); + cl = 160; + ch = 160; + di = 25; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiput(); + vsync(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + push(si); + push(di); + push(es); + push(bx); + cx = 18; +onelot2: + push(cx); + di = 25; + dx = 161; + ax = 0; + printdirect(); + _add(bx, data.word(kLinespacing)); + cx = pop(); + if (--cx) + goto onelot2; + vsync(); + cl = 160; + ch = 160; + di = 25; + bx = 20; + multidump(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + cx = pop(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto endearly2; + _dec(bx); + if (--cx) + goto endcredits22; + cx = pop(); +looknext2: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto gotnext2; + _cmp(al, 0); + if (flags.z()) + goto gotnext2; + goto looknext2; +gotnext2: + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + return /* (endearly) */; + if (--cx) + goto endcredits21; + cx = 120; + hangone(); + return; +endearly2: + cx = pop(); +} + +void DreamGenContext::fadecalculation() { + STACK_CHECK; + _cmp(data.byte(kFadecount), 0); + if (flags.z()) + goto nomorefading; + bl = data.byte(kFadecount); + es = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + cx = 768; +fadecolloop: + al = es.byte(si); + ah = es.byte(di); + _cmp(al, ah); + if (flags.z()) + goto gotthere; + if (flags.c()) + goto lesscolour; + _dec(es.byte(si)); + goto gotthere; +lesscolour: + _cmp(bl, ah); + if (flags.z()) + goto withit; + if (!flags.c()) + goto gotthere; +withit: + _inc(es.byte(si)); +gotthere: + _inc(si); + _inc(di); + if (--cx) + goto fadecolloop; + _dec(data.byte(kFadecount)); + return; +nomorefading: + data.byte(kFadedirection) = 0; +} + +void DreamGenContext::greyscalesum() { + STACK_CHECK; + es = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + cx = 256; +greysumloop1: + push(cx); + bx = 0; + al = es.byte(si); + ah = 0; + cx = 20; + _mul(cx); + _add(bx, ax); + al = es.byte(si+1); + ah = 0; + cx = 59; + _mul(cx); + _add(bx, ax); + al = es.byte(si+2); + ah = 0; + cx = 11; + _mul(cx); + _add(bx, ax); + al = -1; +greysumloop2: + _inc(al); + _sub(bx, 100); + if (!flags.c()) + goto greysumloop2; + bl = al; + al = bl; + ah = data.byte(kAddtored); + _cmp(al, 0); + _add(al, ah); + _stosb(); + ah = data.byte(kAddtogreen); + al = bl; + _cmp(al, 0); + if (flags.z()) + goto noaddg; + _add(al, ah); +noaddg: + _stosb(); + ah = data.byte(kAddtoblue); + al = bl; + _cmp(al, 0); + if (flags.z()) + goto noaddb; + _add(al, ah); +noaddb: + _stosb(); + _add(si, 3); + cx = pop(); + if (--cx) + goto greysumloop1; +} + +void DreamGenContext::paltostartpal() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::endpaltostart() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::startpaltoend() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::paltoendpal() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::allpalette() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); + cx = 768/2; + _movsw(cx, true); + dumpcurrent(); +} + +void DreamGenContext::dumpcurrent() { + STACK_CHECK; + si = (0+(228*13)+32+60+(32*32)+(11*10*3)); + ds = data.word(kBuffers); + vsync(); + al = 0; + cx = 128; + showgroup(); + vsync(); + al = 128; + cx = 128; + showgroup(); +} + +void DreamGenContext::fadedownmon() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 64; + hangon(); +} + +void DreamGenContext::fadeupmon() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 128; + hangon(); +} + +void DreamGenContext::fadeupmonfirst() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 64; + hangon(); + al = 26; + playchannel1(); + cx = 64; + hangon(); +} + +void DreamGenContext::fadeupyellows() { + STACK_CHECK; + paltoendpal(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768)+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 128; + hangon(); +} + +void DreamGenContext::initialmoncols() { + STACK_CHECK; + paltostartpal(); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(230*3); + cx = 3*9; + ax = 0; + _stosb(cx, true); + di = (0+(228*13)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3))+(230*3); + al = 230; + cx = 18; + showgroup(); +} + +void DreamGenContext::titles() { + STACK_CHECK; + clearpalette(); + biblequote(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (titlesearly) */; + intro(); +} + +void DreamGenContext::endgame() { + STACK_CHECK; + dx = 2260; + loadtemptext(); + monkspeaking(); + gettingshot(); + getridoftemptext(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + cx = 200; + hangon(); +} + +void DreamGenContext::monkspeaking() { + STACK_CHECK; + data.byte(kRoomssample) = 35; + loadroomssample(); + dx = 2364; + loadintotemp(); + clearwork(); + showmonk(); + worktoscreen(); + data.byte(kVolume) = 7; + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 5; + al = 12; + ah = 255; + playchannel0(); + fadescreenups(); + cx = 300; + hangon(); + al = 40; +loadspeech2: + push(ax); + dl = 'T'; + dh = 83; + cl = 'T'; + ah = 0; + loadspeech(); + al = 50+12; + playchannel1(); +notloadspeech2: + vsync(); + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto notloadspeech2; + ax = pop(); + _inc(al); + _cmp(al, 48); + if (!flags.z()) + goto loadspeech2; + data.byte(kVolumedirection) = 1; + data.byte(kVolumeto) = 7; + fadescreendowns(); + cx = 300; + hangon(); + getridoftemp(); +} + +void DreamGenContext::showmonk() { + STACK_CHECK; + al = 0; + ah = 128; + di = 160; + bx = 72; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::gettingshot() { + STACK_CHECK; + data.byte(kNewlocation) = 55; + clearpalette(); + loadintroroom(); + fadescreenups(); + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + runendseq(); + clearbeforeload(); +} + +void DreamGenContext::credits() { + STACK_CHECK; + clearpalette(); + realcredits(); +} + +void DreamGenContext::biblequote() { + STACK_CHECK; + mode640x480(); + dx = 2377; + showpcx(); + fadescreenups(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + cx = 560; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + fadescreendowns(); + cx = 200; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + cancelch0(); +biblequotearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::hangone() { + STACK_CHECK; +hangonloope: + push(cx); + vsync(); + cx = pop(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + return /* (hangonearly) */; + if (--cx) + goto hangonloope; +} + +void DreamGenContext::intro() { + STACK_CHECK; + dx = 2247; + loadtemptext(); + loadpalfromiff(); + setmode(); + data.byte(kNewlocation) = 50; + clearpalette(); + loadintroroom(); + data.byte(kVolume) = 7; + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 4; + al = 12; + ah = 255; + playchannel0(); + fadescreenups(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + data.byte(kNewlocation) = 52; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + data.byte(kNewlocation) = 53; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + allpalette(); + data.byte(kNewlocation) = 54; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + getridoftemptext(); + clearbeforeload(); +introearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::runintroseq() { + STACK_CHECK; + data.byte(kGetback) = 0; +moreintroseq: + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + spriteupdate(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + deleverything(); + printsprites(); + reelsonscreen(); + afterintroroom(); + usetimedtext(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + dumpmap(); + dumptimedtext(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto moreintroseq; + return; +earlyendrun: + getridoftemptext(); + clearbeforeload(); +} + +void DreamGenContext::runendseq() { + STACK_CHECK; + atmospheres(); + data.byte(kGetback) = 0; +moreendseq: + vsync(); + spriteupdate(); + vsync(); + deleverything(); + printsprites(); + reelsonscreen(); + afterintroroom(); + usetimedtext(); + vsync(); + dumpmap(); + dumptimedtext(); + vsync(); + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto moreendseq; +} + +void DreamGenContext::loadintroroom() { + STACK_CHECK; + data.byte(kIntrocount) = 0; + data.byte(kLocation) = 255; + loadroom(); + data.word(kMapoffsetx) = 72; + data.word(kMapoffsety) = 16; + clearsprites(); + data.byte(kThroughdoor) = 0; + data.byte(kCurrentkey) = '0'; + data.byte(kMainmode) = 0; + clearwork(); + data.byte(kNewobs) = 1; + drawfloor(); + reelsonscreen(); + spriteupdate(); + printsprites(); + worktoscreen(); +} + +void DreamGenContext::realcredits() { + STACK_CHECK; + data.byte(kRoomssample) = 33; + loadroomssample(); + data.byte(kVolume) = 0; + mode640x480(); + cx = 35; + hangon(); + dx = 2390; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2403; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2416; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2429; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2442; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2455; + showpcx(); + fadescreenups(); + cx = 60; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + al = 13; + ah = 0; + playchannel0(); + cx = 350; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); +realcreditsearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::printchar() { + STACK_CHECK; + _cmp(al, 255); + if (flags.z()) + return /* (ignoreit) */; + push(si); + push(bx); + push(di); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); +_tmp1: + push(ax); + _sub(al, 32); + ah = 0; + _add(ax, data.word(kCharshift)); + showframe(); + ax = pop(); + di = pop(); + bx = pop(); + si = pop(); + _cmp(data.byte(kKerning), 0); + if (!flags.z()) + goto nokern; + kernchars(); +nokern: + push(cx); + ch = 0; + _add(di, cx); + cx = pop(); +} + +void DreamGenContext::kernchars() { + STACK_CHECK; + _cmp(al, 'a'); + if (flags.z()) + goto iskern; + _cmp(al, 'u'); + if (flags.z()) + goto iskern; + return; +iskern: + _cmp(ah, 'n'); + if (flags.z()) + goto kernit; + _cmp(ah, 't'); + if (flags.z()) + goto kernit; + _cmp(ah, 'r'); + if (flags.z()) + goto kernit; + _cmp(ah, 'i'); + if (flags.z()) + goto kernit; + _cmp(ah, 'l'); + if (flags.z()) + goto kernit; + return; +kernit: + _dec(cl); +} + +void DreamGenContext::printslow() { + STACK_CHECK; + data.byte(kPointerframe) = 1; + data.byte(kPointermode) = 3; + ds = data.word(kCharset1); +printloopslow6: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloopslow5: + push(cx); + push(si); + push(es); + ax = es.word(si); + push(bx); + push(cx); + push(es); + push(si); + push(ds); + modifychar(); + printboth(); + ds = pop(); + si = pop(); + es = pop(); + cx = pop(); + bx = pop(); + ax = es.word(si+1); + _inc(si); + _cmp(al, 0); + if (flags.z()) + goto finishslow; + _cmp(al, ':'); + if (flags.z()) + goto finishslow; + _cmp(cl, 1); + if (flags.z()) + goto afterslow; + push(di); + push(ds); + push(bx); + push(cx); + push(es); + push(si); + modifychar(); + data.word(kCharshift) = 91; + printboth(); + data.word(kCharshift) = 0; + si = pop(); + es = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + di = pop(); + waitframes(); + _cmp(ax, 0); + if (flags.z()) + goto keepgoing; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto finishslow2; +keepgoing: + waitframes(); + _cmp(ax, 0); + if (flags.z()) + goto afterslow; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto finishslow2; +afterslow: + es = pop(); + si = pop(); + cx = pop(); + _inc(si); + if (--cx) + goto printloopslow5; + dx = pop(); + di = pop(); + bx = pop(); + _add(bx, 10); + goto printloopslow6; +finishslow: + es = pop(); + si = pop(); + cx = pop(); + dx = pop(); + di = pop(); + bx = pop(); + al = 0; + return; +finishslow2: + es = pop(); + si = pop(); + cx = pop(); + dx = pop(); + di = pop(); + bx = pop(); + al = 1; +} + +void DreamGenContext::waitframes() { + STACK_CHECK; + push(di); + push(bx); + push(es); + push(si); + push(ds); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + delpointer(); + ax = data.word(kMousebutton); + ds = pop(); + si = pop(); + es = pop(); + bx = pop(); + di = pop(); +} + +void DreamGenContext::printboth() { + STACK_CHECK; + push(ax); + push(cx); + push(bx); + push(di); + printchar(); + ax = pop(); + push(di); + di = ax; + multidump(); + di = pop(); + bx = pop(); + cx = pop(); + ax = pop(); +} + +void DreamGenContext::printdirect() { + STACK_CHECK; + data.word(kLastxpos) = di; + ds = data.word(kCurrentset); +printloop6: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloop5: + ax = es.word(si); + _inc(si); + _cmp(al, 0); + if (flags.z()) + goto finishdirct; + _cmp(al, ':'); + if (flags.z()) + goto finishdirct; + push(cx); + push(es); + modifychar(); + printchar(); + data.word(kLastxpos) = di; + es = pop(); + cx = pop(); + if (--cx) + goto printloop5; + dx = pop(); + di = pop(); + bx = pop(); + _add(bx, data.word(kLinespacing)); + goto printloop6; +finishdirct: + dx = pop(); + di = pop(); + bx = pop(); +} + +void DreamGenContext::monprint() { + STACK_CHECK; + data.byte(kKerning) = 1; + si = bx; + dl = 166; + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); +printloop8: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloop7: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto finishmon2; + _cmp(al, 0); + if (flags.z()) + goto finishmon; + _cmp(al, 34); + if (flags.z()) + goto finishmon; + _cmp(al, '='); + if (flags.z()) + goto finishmon; + _cmp(al, '%'); + if (!flags.z()) + goto nottrigger; + ah = es.byte(si); + _inc(si); + _inc(si); + goto finishmon; +nottrigger: + push(cx); + push(es); + modifychar(); + printchar(); + data.word(kCurslocx) = di; + data.word(kCurslocy) = bx; + data.word(kMaintimer) = 1; + printcurs(); + vsync(); + push(si); + push(dx); + push(ds); + push(es); + push(bx); + push(di); + lockmon(); + di = pop(); + bx = pop(); + es = pop(); + ds = pop(); + dx = pop(); + si = pop(); + delcurs(); + es = pop(); + cx = pop(); + if (--cx) + goto printloop7; +finishmon2: + dx = pop(); + di = pop(); + bx = pop(); + scrollmonitor(); + data.word(kCurslocx) = di; + goto printloop8; +finishmon: + dx = pop(); + di = pop(); + bx = pop(); + _cmp(al, '%'); + if (!flags.z()) + goto nottrigger2; + data.byte(kLasttrigger) = ah; +nottrigger2: + data.word(kCurslocx) = di; + scrollmonitor(); + bx = si; + data.byte(kKerning) = 0; +} + +void DreamGenContext::getnumber() { + STACK_CHECK; + cx = 0; + push(si); + push(bx); + push(di); + push(ds); + push(es); + di = si; +wordloop: + push(cx); + push(dx); + getnextword(); + dx = pop(); + cx = pop(); + _cmp(al, 1); + if (flags.z()) + goto endoftext; + al = cl; + ah = 0; + push(bx); + bh = 0; + _add(ax, bx); + bx = pop(); + _sub(ax, 10); + dh = 0; + _cmp(ax, dx); + if (!flags.c()) + goto gotoverend; + _add(cl, bl); + _add(ch, bh); + goto wordloop; +gotoverend: + al = dl; + _and(al, 1); + if (flags.z()) + goto notcentre; + push(cx); + al = dl; + _and(al, 0xfe); + ah = 0; + ch = 0; + _sub(ax, cx); + _add(ax, 20); + _shr(ax, 1); + cx = pop(); + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + _add(di, ax); + cl = ch; + return; +notcentre: + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + cl = ch; + return; +endoftext: + al = cl; + ah = 0; + push(bx); + bh = 0; + _add(ax, bx); + bx = pop(); + _sub(ax, 10); + dh = 0; + _cmp(ax, dx); + if (!flags.c()) + goto gotoverend2; + _add(cl, bl); + _add(ch, bh); +gotoverend2: + al = dl; + _and(al, 1); + if (flags.z()) + goto notcent2; + push(cx); + al = dl; + _and(al, 0xfe); + _add(al, 2); + ah = 0; + ch = 0; + _add(ax, 20); + _sub(ax, cx); + _shr(ax, 1); + cx = pop(); + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + _add(di, ax); + cl = ch; + return; +notcent2: + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + cl = ch; +} + +void DreamGenContext::getnextword() { + STACK_CHECK; + bx = 0; +getloop: + ax = es.word(di); + _inc(di); + _inc(bh); + _cmp(al, ':'); + if (flags.z()) + goto endall; + _cmp(al, 0); + if (flags.z()) + goto endall; + _cmp(al, 32); + if (flags.z()) + goto endword; + modifychar(); + _cmp(al, 255); + if (flags.z()) + goto getloop; + push(ax); + _sub(al, 32); + ah = 0; + _add(ax, data.word(kCharshift)); + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + cl = ds.byte(si+0); + ax = pop(); + kernchars(); + _add(bl, cl); + goto getloop; +endword: + _add(bl, 6); + al = 0; + return; +endall: + _add(bl, 6); + al = 1; +} + +void DreamGenContext::fillryan() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32); + findallryan(); + si = (0+(228*13)+32); + al = data.byte(kRyanpage); + ah = 0; + cx = 20; + _mul(cx); + _add(si, ax); + di = (80); + bx = (58); + cx = 2; +ryanloop2: + push(cx); + push(di); + push(bx); + cx = 5; +ryanloop1: + push(cx); + push(di); + push(bx); + ax = es.word(si); + _add(si, 2); + push(si); + push(es); + obtoinv(); + es = pop(); + si = pop(); + bx = pop(); + di = pop(); + cx = pop(); + _add(di, (44)); + if (--cx) + goto ryanloop1; + bx = pop(); + di = pop(); + cx = pop(); + _add(bx, (44)); + if (--cx) + goto ryanloop2; + showryanpage(); +} + +void DreamGenContext::fillopen() { + STACK_CHECK; + deltextline(); + getopenedsize(); + _cmp(ah, 4); + if (flags.c()) + goto lessthanapage; + ah = 4; +lessthanapage: + al = 1; + push(ax); + es = data.word(kBuffers); + di = (0+(228*13)); + findallopen(); + si = (0+(228*13)); + di = (80); + bx = (58)+96; + cx = pop(); +openloop1: + push(cx); + push(di); + push(bx); + ax = es.word(si); + _add(si, 2); + push(si); + push(es); + _cmp(ch, cl); + if (flags.c()) + goto nextopenslot; + obtoinv(); +nextopenslot: + es = pop(); + si = pop(); + bx = pop(); + di = pop(); + cx = pop(); + _add(di, (44)); + _inc(cl); + _cmp(cl, 5); + if (!flags.z()) + goto openloop1; + undertextline(); +} + +void DreamGenContext::findallryan() { + STACK_CHECK; + push(di); + cx = 30; + ax = 0x0ffff; + _stosw(cx, true); + di = pop(); + cl = 4; + ds = data.word(kExtras); + bx = (0+2080+30000); + ch = 0; +findryanloop: + _cmp(ds.byte(bx+2), cl); + if (!flags.z()) + goto notinryaninv; + _cmp(ds.byte(bx+3), 255); + if (!flags.z()) + goto notinryaninv; + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 4; + _stosw(); + di = pop(); +notinryaninv: + _add(bx, 16); + _inc(ch); + _cmp(ch, (114)); + if (!flags.z()) + goto findryanloop; +} + +void DreamGenContext::findallopen() { + STACK_CHECK; + push(di); + cx = 16; + ax = 0x0ffff; + _stosw(cx, true); + di = pop(); + cl = data.byte(kOpenedob); + dl = data.byte(kOpenedtype); + ds = data.word(kExtras); + bx = (0+2080+30000); + ch = 0; +findopen1: + _cmp(ds.byte(bx+3), cl); + if (!flags.z()) + goto findopen2; + _cmp(ds.byte(bx+2), dl); + if (!flags.z()) + goto findopen2; + _cmp(data.byte(kOpenedtype), 4); + if (flags.z()) + goto noloccheck; + al = ds.byte(bx+5); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto findopen2; +noloccheck: + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 4; + _stosw(); + di = pop(); +findopen2: + _add(bx, 16); + _inc(ch); + _cmp(ch, (114)); + if (!flags.z()) + goto findopen1; + cl = data.byte(kOpenedob); + dl = data.byte(kOpenedtype); + push(dx); + ds = data.word(kFreedat); + dx = pop(); + bx = 0; + ch = 0; +findopen1a: + _cmp(ds.byte(bx+3), cl); + if (!flags.z()) + goto findopen2a; + _cmp(ds.byte(bx+2), dl); + if (!flags.z()) + goto findopen2a; + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 2; + _stosw(); + di = pop(); +findopen2a: + _add(bx, 16); + _inc(ch); + _cmp(ch, 80); + if (!flags.z()) + goto findopen1a; +} + +void DreamGenContext::obtoinv() { + STACK_CHECK; + push(bx); + push(es); + push(si); + push(ax); + push(ax); + push(di); + push(bx); + ds = data.word(kIcons1); + _sub(di, 2); + _sub(bx, 1); + al = 10; + ah = 0; + showframe(); + bx = pop(); + di = pop(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + goto finishfill; + push(bx); + push(di); + push(ax); + ds = data.word(kExtras); + _cmp(ah, 4); + if (flags.z()) + goto isanextra; + ds = data.word(kFreeframes); +isanextra: + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + _add(bx, 19); + _add(di, 18); + showframe(); + ax = pop(); + di = pop(); + bx = pop(); + push(bx); + getanyaddir(); + isitworn(); + bx = pop(); + if (!flags.z()) + goto finishfill; + ds = data.word(kIcons1); + _sub(di, 3); + _sub(bx, 2); + al = 7; + ah = 0; + showframe(); +finishfill: + ax = pop(); + si = pop(); + es = pop(); + bx = pop(); +} + +void DreamGenContext::isitworn() { + STACK_CHECK; + al = es.byte(bx+12); + _cmp(al, 'W'-'A'); + if (!flags.z()) + return /* (notworn) */; + al = es.byte(bx+13); + _cmp(al, 'E'-'A'); +} + +void DreamGenContext::makeworn() { + STACK_CHECK; + es.byte(bx+12) = 'W'-'A'; + es.byte(bx+13) = 'E'-'A'; +} + +void DreamGenContext::examineob() { + STACK_CHECK; + data.byte(kPointermode) = 0; + data.word(kTimecount) = 0; +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = 2494; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = 2556; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = 2618; +notuseinv: + checkcoords(); + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + +void DreamGenContext::makemainscreen() { + STACK_CHECK; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + spriteupdate(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + data.byte(kCommandtype) = 255; + animpointer(); + worktoscreenm(); + data.byte(kCommandtype) = 200; + data.byte(kManisoffscreen) = 0; +} + +void DreamGenContext::getbackfromob() { + STACK_CHECK; + _cmp(data.byte(kPickup), 1); + if (!flags.z()) + goto notheldob; + blank(); + return; +notheldob: + getback1(); +} + +void DreamGenContext::incryanpage() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyincryan; + data.byte(kCommandtype) = 222; + al = 31; + commandonly(); +alreadyincryan: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noincryan) */; + _and(ax, 1); + if (!flags.z()) + goto doincryan; + return; +doincryan: + ax = data.word(kMousex); + _sub(ax, (80)+167); + data.byte(kRyanpage) = -1; +findnewpage: + _inc(data.byte(kRyanpage)); + _sub(ax, 18); + if (!flags.c()) + goto findnewpage; + delpointer(); + fillryan(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::openinv() { + STACK_CHECK; + data.byte(kInvopen) = 1; + al = 61; + di = (80); + bx = (58)-10; + dl = 240; + printmessage(); + fillryan(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::showryanpage() { + STACK_CHECK; + ds = data.word(kIcons1); + di = (80)+167; + bx = (58)-12; + al = 12; + ah = 0; + showframe(); + al = 13; + _add(al, data.byte(kRyanpage)); + push(ax); + al = data.byte(kRyanpage); + ah = 0; + cx = 18; + _mul(cx); + ds = data.word(kIcons1); + di = (80)+167; + _add(di, ax); + bx = (58)-12; + ax = pop(); + ah = 0; + showframe(); +} + +void DreamGenContext::openob() { + STACK_CHECK; + al = data.byte(kOpenedob); + ah = data.byte(kOpenedtype); + di = 5847; + copyname(); + di = (80); + bx = (58)+86; + al = 62; + dl = 240; + printmessage(); + di = data.word(kLastxpos); + _add(di, 5); + bx = (58)+86; + es = cs; + si = 5847; + dl = 220; + al = 0; + ah = 0; + printdirect(); + fillopen(); + getopenedsize(); + al = ah; + ah = 0; + cx = (44); + _mul(cx); + _add(ax, (80)); + bx = 2588; + cs.word(bx) = ax; +} + +void DreamGenContext::obicons() { + STACK_CHECK; + al = data.byte(kCommand); + getanyad(); + _cmp(al, 255); + if (flags.z()) + goto cantopenit; + ds = data.word(kIcons2); + di = 210; + bx = 1; + al = 4; + ah = 0; + showframe(); +cantopenit: + ds = data.word(kIcons2); + di = 260; + bx = 1; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::examicon() { + STACK_CHECK; + ds = data.word(kIcons2); + di = 254; + bx = 5; + al = 3; + ah = 0; + showframe(); +} + +void DreamGenContext::obpicture() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + _cmp(ah, 1); + if (flags.z()) + return /* (setframe) */; + _cmp(ah, 4); + if (flags.z()) + goto exframe; + ds = data.word(kFreeframes); + di = 160; + bx = 68; + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + showframe(); + return; +exframe: + ds = data.word(kExtras); + di = 160; + bx = 68; + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + showframe(); +} + +void DreamGenContext::describeob() { + STACK_CHECK; + getobtextstart(); + di = 33; + bx = 92; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto notsetd; + _cmp(data.byte(kObjecttype), 1); + if (!flags.z()) + goto notsetd; + bx = 82; +notsetd: + dl = 241; + ah = 16; + data.word(kCharshift) = 91+91; + printdirect(); + data.word(kCharshift) = 0; + di = 36; + bx = 104; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto notsetd2; + _cmp(data.byte(kObjecttype), 1); + if (!flags.z()) + goto notsetd2; + bx = 94; +notsetd2: + dl = 241; + ah = 0; + printdirect(); + push(bx); + obsthatdothings(); + bx = pop(); + additionaltext(); +} + +void DreamGenContext::additionaltext() { + STACK_CHECK; + _add(bx, 10); + push(bx); + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto emptycup; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto fullcup; + bx = pop(); + return; +emptycup: + al = 40; + findpuztext(); + bx = pop(); + di = 36; + dl = 241; + ah = 0; + printdirect(); + return; +fullcup: + al = 39; + findpuztext(); + bx = pop(); + di = 36; + dl = 241; + ah = 0; + printdirect(); +} + +void DreamGenContext::obsthatdothings() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'M'; + ch = 'E'; + dl = 'M'; + dh = 'B'; + compare(); + if (!flags.z()) + return /* (notlouiscard) */; + al = 4; + getlocation(); + _cmp(al, 1); + if (flags.z()) + return /* (seencard) */; + al = 4; + setlocation(); + lookatcard(); +} + +void DreamGenContext::getobtextstart() { + STACK_CHECK; + es = data.word(kFreedesc); + si = (0); + cx = (0+(82*2)); + _cmp(data.byte(kObjecttype), 2); + if (flags.z()) + goto describe; + es = data.word(kSetdesc); + si = (0); + cx = (0+(130*2)); + _cmp(data.byte(kObjecttype), 1); + if (flags.z()) + goto describe; + es = data.word(kExtras); + si = (0+2080+30000+(16*114)); + cx = (0+2080+30000+(16*114)+((114+2)*2)); +describe: + al = data.byte(kCommand); + ah = 0; + _add(ax, ax); + _add(si, ax); + ax = es.word(si); + _add(ax, cx); + si = ax; + bx = ax; +tryagain: + push(si); + findnextcolon(); + al = es.byte(si); + cx = si; + si = pop(); + _cmp(data.byte(kObjecttype), 1); + if (!flags.z()) + return /* (cantmakeoneup) */; + _cmp(al, 0); + if (flags.z()) + goto findsometext; + _cmp(al, ':'); + if (flags.z()) + goto findsometext; + return; +findsometext: + searchforsame(); + goto tryagain; +} + +void DreamGenContext::searchforsame() { + STACK_CHECK; + si = cx; +searchagain: + _inc(si); + al = es.byte(bx); +search: + _cmp(es.byte(si), al); + if (flags.z()) + goto gotstartletter; + _inc(cx); + _inc(si); + _cmp(si, 8000); + if (flags.c()) + goto search; + si = bx; + ax = pop(); + return; +gotstartletter: + push(bx); + push(si); +keepchecking: + _inc(si); + _inc(bx); + al = es.byte(bx); + ah = es.byte(si); + _cmp(al, ':'); + if (flags.z()) + goto foundmatch; + _cmp(al, 0); + if (flags.z()) + goto foundmatch; + _cmp(al, ah); + if (flags.z()) + goto keepchecking; + si = pop(); + bx = pop(); + goto searchagain; +foundmatch: + si = pop(); + bx = pop(); +} + +void DreamGenContext::findnextcolon() { + STACK_CHECK; +isntcolon: + al = es.byte(si); + _inc(si); + _cmp(al, 0); + if (flags.z()) + return /* (endofcolon) */; + _cmp(al, ':'); + if (!flags.z()) + goto isntcolon; +} + +void DreamGenContext::inventory() { + STACK_CHECK; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto iswatchinv; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatchinv; +iswatchinv: + blank(); + return; +notwatchinv: + _cmp(data.byte(kCommandtype), 239); + if (flags.z()) + goto alreadyopinv; + data.byte(kCommandtype) = 239; + al = 32; + commandonly(); +alreadyopinv: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantopinv) */; + _and(ax, 1); + if (!flags.z()) + goto doopeninv; + return; +doopeninv: + data.word(kTimecount) = 0; + data.byte(kPointermode) = 0; + data.byte(kInmaparea) = 0; + animpointer(); + createpanel(); + showpanel(); + examicon(); + showman(); + showexit(); + undertextline(); + data.byte(kPickup) = 0; + data.byte(kInvopen) = 2; + openinv(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kOpenedob) = 255; + goto waitexam; + return; +/*continuing to unbounded code: examineagain from examineob:3-66*/ +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = 2494; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = 2556; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = 2618; +notuseinv: + checkcoords(); + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + +void DreamGenContext::setpickup() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 1); + if (flags.z()) + goto cantpick; + _cmp(data.byte(kObjecttype), 3); + if (flags.z()) + goto cantpick; + getanyad(); + al = es.byte(bx+2); + _cmp(al, 4); + if (!flags.z()) + goto canpick; +cantpick: + blank(); + return; +canpick: + _cmp(data.byte(kCommandtype), 209); + if (flags.z()) + goto alreadysp; + data.byte(kCommandtype) = 209; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 33; + commandwithob(); +alreadysp: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (nosetpick) */; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto dosetpick; + return; +dosetpick: + createpanel(); + showpanel(); + showman(); + showexit(); + examicon(); + data.byte(kPickup) = 1; + data.byte(kInvopen) = 2; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto pickupexob; + al = data.byte(kCommand); + data.byte(kItemframe) = al; + data.byte(kOpenedob) = 255; + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + openinv(); + worktoscreenm(); + return; +pickupexob: + al = data.byte(kCommand); + data.byte(kItemframe) = al; + data.byte(kOpenedob) = 255; + openinv(); + worktoscreenm(); +} + +void DreamGenContext::examinventory() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 249); + if (flags.z()) + goto alreadyexinv; + data.byte(kCommandtype) = 249; + al = 32; + commandonly(); +alreadyexinv: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto doexinv; + return; +doexinv: + createpanel(); + showpanel(); + showman(); + showexit(); + examicon(); + data.byte(kPickup) = 0; + data.byte(kInvopen) = 2; + openinv(); + worktoscreenm(); +} + +void DreamGenContext::reexfrominv() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + data.byte(kCommandtype) = ah; + data.byte(kCommand) = al; + data.byte(kExamagain) = 1; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::reexfromopen() { + STACK_CHECK; + return; + findopenpos(); + ax = es.word(bx); + data.byte(kCommandtype) = ah; + data.byte(kCommand) = al; + data.byte(kExamagain) = 1; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::swapwithinv() { + STACK_CHECK; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub7; + _cmp(data.byte(kCommandtype), 243); + if (flags.z()) + goto alreadyswap1; + data.byte(kCommandtype) = 243; +difsub7: + data.word(kOldsubject) = ax; + bx = ax; + al = 34; + commandwithob(); +alreadyswap1: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantswap1) */; + _and(ax, 1); + if (!flags.z()) + goto doswap1; + return; +doswap1: + ah = data.byte(kObjecttype); + al = data.byte(kItemframe); + push(ax); + findinvpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + push(bx); + findinvpos(); + delpointer(); + al = data.byte(kItemframe); + geteitherad(); + es.byte(bx+2) = 4; + es.byte(bx+3) = 255; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + fillryan(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::swapwithopen() { + STACK_CHECK; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub8; + _cmp(data.byte(kCommandtype), 242); + if (flags.z()) + goto alreadyswap2; + data.byte(kCommandtype) = 242; +difsub8: + data.word(kOldsubject) = ax; + bx = ax; + al = 34; + commandwithob(); +alreadyswap2: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantswap2) */; + _and(ax, 1); + if (!flags.z()) + goto doswap2; + return; +doswap2: + geteitherad(); + isitworn(); + if (!flags.z()) + goto notwornswap; + wornerror(); + return; +notwornswap: + delpointer(); + al = data.byte(kItemframe); + _cmp(al, data.byte(kOpenedob)); + if (!flags.z()) + goto isntsame2; + al = data.byte(kObjecttype); + _cmp(al, data.byte(kOpenedtype)); + if (!flags.z()) + goto isntsame2; + errormessage1(); + return; +isntsame2: + checkobjectsize(); + _cmp(al, 0); + if (flags.z()) + goto sizeok2; + return; +sizeok2: + ah = data.byte(kObjecttype); + al = data.byte(kItemframe); + push(ax); + findopenpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + _cmp(ah, 4); + if (!flags.z()) + goto makeswapex; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + goto actuallyswap; +makeswapex: + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; +actuallyswap: + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + push(bx); + findopenpos(); + geteitherad(); + al = data.byte(kOpenedtype); + es.byte(bx+2) = al; + al = data.byte(kOpenedob); + es.byte(bx+3) = al; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + al = data.byte(kReallocation); + es.byte(bx+5) = al; + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + fillopen(); + fillryan(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::intoinv() { + STACK_CHECK; + _cmp(data.byte(kPickup), 0); + if (!flags.z()) + goto notout; + outofinv(); + return; +notout: + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + goto canplace1; + swapwithinv(); + return; +canplace1: + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub1; + _cmp(data.byte(kCommandtype), 220); + if (flags.z()) + goto alreadyplce; + data.byte(kCommandtype) = 220; +difsub1: + data.word(kOldsubject) = ax; + bx = ax; + al = 35; + commandwithob(); +alreadyplce: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo2) */; + _and(ax, 1); + if (!flags.z()) + goto doplace; + return; +doplace: + delpointer(); + al = data.byte(kItemframe); + getexad(); + es.byte(bx+2) = 4; + es.byte(bx+3) = 255; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + data.byte(kPickup) = 0; + fillryan(); + readmouse(); + showpointer(); + outofinv(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::deletetaken() { + STACK_CHECK; + es = data.word(kFreedat); + ah = data.byte(kReallocation); + ds = data.word(kExtras); + si = (0+2080+30000); + cx = (114); +takenloop: + al = ds.byte(si+11); + _cmp(al, ah); + if (!flags.z()) + goto notinhere; + bl = ds.byte(si+1); + bh = 0; + _add(bx, bx); + _add(bx, bx); + _add(bx, bx); + _add(bx, bx); + es.byte(bx+2) = 254; +notinhere: + _add(si, 16); + if (--cx) + goto takenloop; +} + +void DreamGenContext::outofinv() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canpick2; + blank(); + return; +canpick2: + bx = data.word(kMousebutton); + _cmp(bx, 2); + if (!flags.z()) + goto canpick2a; + reexfrominv(); + return; +canpick2a: + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub3; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadygrab; + data.byte(kCommandtype) = 221; +difsub3: + data.word(kOldsubject) = ax; + bx = ax; + al = 36; + commandwithob(); +alreadygrab: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo) */; + _and(ax, 1); + if (!flags.z()) + goto dograb; + return; +dograb: + delpointer(); + data.byte(kPickup) = 1; + findinvpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + getexad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + fillryan(); + readmouse(); + showpointer(); + intoinv(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::getfreead() { + STACK_CHECK; + ah = 0; + cl = 4; + _shl(ax, cl); + bx = ax; + es = data.word(kFreedat); +} + +void DreamGenContext::getexad() { + STACK_CHECK; + ah = 0; + bx = 16; + _mul(bx); + bx = ax; + es = data.word(kExtras); + _add(bx, (0+2080+30000)); +} + +void DreamGenContext::geteitherad() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto isinexlist; + al = data.byte(kItemframe); + getfreead(); + return; +isinexlist: + al = data.byte(kItemframe); + getexad(); +} + +void DreamGenContext::getanyad() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto isex; + _cmp(data.byte(kObjecttype), 2); + if (flags.z()) + goto isfree; + al = data.byte(kCommand); + getsetad(); + ax = es.word(bx+4); + return; +isfree: + al = data.byte(kCommand); + getfreead(); + ax = es.word(bx+7); + return; +isex: + al = data.byte(kCommand); + getexad(); + ax = es.word(bx+7); +} + +void DreamGenContext::getanyaddir() { + STACK_CHECK; + _cmp(ah, 4); + if (flags.z()) + goto isex3; + _cmp(ah, 2); + if (flags.z()) + goto isfree3; + getsetad(); + return; +isfree3: + getfreead(); + return; +isex3: + getexad(); +} + +void DreamGenContext::getopenedsize() { + STACK_CHECK; + _cmp(data.byte(kOpenedtype), 4); + if (flags.z()) + goto isex2; + _cmp(data.byte(kOpenedtype), 2); + if (flags.z()) + goto isfree2; + al = data.byte(kOpenedob); + getsetad(); + ax = es.word(bx+3); + return; +isfree2: + al = data.byte(kOpenedob); + getfreead(); + ax = es.word(bx+7); + return; +isex2: + al = data.byte(kOpenedob); + getexad(); + ax = es.word(bx+7); +} + +void DreamGenContext::getsetad() { + STACK_CHECK; + ah = 0; + bx = 64; + _mul(bx); + bx = ax; + es = data.word(kSetdat); +} + +void DreamGenContext::findinvpos() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, (80)); + bx = -1; +findinv1: + _inc(bx); + _sub(cx, (44)); + if (!flags.c()) + goto findinv1; + cx = data.word(kMousey); + _sub(cx, (58)); + _sub(bx, 5); +findinv2: + _add(bx, 5); + _sub(cx, (44)); + if (!flags.c()) + goto findinv2; + al = data.byte(kRyanpage); + ah = 0; + cx = 10; + _mul(cx); + _add(bx, ax); + al = bl; + data.byte(kLastinvpos) = al; + _add(bx, bx); + es = data.word(kBuffers); + _add(bx, (0+(228*13)+32)); +} + +void DreamGenContext::findopenpos() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, (80)); + bx = -1; +findopenp1: + _inc(bx); + _sub(cx, (44)); + if (!flags.c()) + goto findopenp1; + al = bl; + data.byte(kLastinvpos) = al; + _add(bx, bx); + es = data.word(kBuffers); + _add(bx, (0+(228*13))); +} + +void DreamGenContext::dropobject() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 223); + if (flags.z()) + goto alreadydrop; + data.byte(kCommandtype) = 223; + _cmp(data.byte(kPickup), 0); + if (flags.z()) + { blank(); return; }; + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + al = 37; + commandwithob(); +alreadydrop: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodrop) */; + _and(ax, 1); + if (!flags.z()) + goto dodrop; + return; +dodrop: + geteitherad(); + isitworn(); + if (!flags.z()) + goto nowornerror; + wornerror(); + return; +nowornerror: + _cmp(data.byte(kReallocation), 47); + if (flags.z()) + goto nodrop2; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto nodroperror; +nodrop2: + droperror(); + return; +nodroperror: + _cmp(data.byte(kMapxsize), 64); + if (!flags.z()) + goto notinlift; + _cmp(data.byte(kMapysize), 64); + if (!flags.z()) + goto notinlift; + droperror(); + return; +notinlift: + al = data.byte(kItemframe); + ah = 4; + cl = 'G'; + ch = 'U'; + dl = 'N'; + dh = 'A'; + compare(); + if (flags.z()) + { cantdrop(); return; }; + al = data.byte(kItemframe); + ah = 4; + cl = 'S'; + ch = 'H'; + dl = 'L'; + dh = 'D'; + compare(); + if (flags.z()) + { cantdrop(); return; }; + data.byte(kObjecttype) = 4; + al = data.byte(kItemframe); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kRyanx); + _add(al, 4); + cl = 4; + _shr(al, cl); + _add(al, data.byte(kMapx)); + ah = data.byte(kRyany); + _add(ah, 8); + cl = 4; + _shr(ah, cl); + _add(ah, data.byte(kMapy)); + es.byte(bx+3) = al; + es.byte(bx+5) = ah; + al = data.byte(kRyanx); + _add(al, 4); + _and(al, 15); + ah = data.byte(kRyany); + _add(ah, 8); + _and(ah, 15); + es.byte(bx+4) = al; + es.byte(bx+6) = ah; + data.byte(kPickup) = 0; + al = data.byte(kReallocation); + es.byte(bx) = al; +} + +void DreamGenContext::droperror() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 56; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::cantdrop() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 24; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::wornerror() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 57; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::removeobfrominv() { + STACK_CHECK; + _cmp(data.byte(kCommand), 100); + if (flags.z()) + return /* (obnotexist) */; + getanyad(); + di = bx; + cl = data.byte(kCommand); + ch = 0; + deleteexobject(); +} + +void DreamGenContext::selectopenob() { + STACK_CHECK; + al = data.byte(kCommand); + getanyad(); + _cmp(al, 255); + if (!flags.z()) + goto canopenit1; + blank(); + return; +canopenit1: + _cmp(data.byte(kCommandtype), 224); + if (flags.z()) + goto alreadyopob; + data.byte(kCommandtype) = 224; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 38; + commandwithob(); +alreadyopob: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noopenob) */; + _and(ax, 1); + if (!flags.z()) + goto doopenob; + return; +doopenob: + al = data.byte(kCommand); + data.byte(kOpenedob) = al; + al = data.byte(kObjecttype); + data.byte(kOpenedtype) = al; + createpanel(); + showpanel(); + showman(); + examicon(); + showexit(); + openinv(); + openob(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::useopened() { + STACK_CHECK; + _cmp(data.byte(kOpenedob), 255); + if (flags.z()) + return /* (cannotuseopen) */; + _cmp(data.byte(kPickup), 0); + if (!flags.z()) + goto notout2; + outofopen(); + return; +notout2: + findopenpos(); + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + goto canplace3; + swapwithopen(); + return; +canplace3: + _cmp(data.byte(kPickup), 1); + if (flags.z()) + goto intoopen; + blank(); + return; +intoopen: + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub2; + _cmp(data.byte(kCommandtype), 227); + if (flags.z()) + goto alreadyplc2; + data.byte(kCommandtype) = 227; +difsub2: + data.word(kOldsubject) = ax; + bx = ax; + al = 35; + commandwithob(); +alreadyplc2: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo3) */; + _cmp(ax, 1); + if (flags.z()) + goto doplace2; + return; +doplace2: + geteitherad(); + isitworn(); + if (!flags.z()) + goto notworntoopen; + wornerror(); + return; +notworntoopen: + delpointer(); + al = data.byte(kItemframe); + _cmp(al, data.byte(kOpenedob)); + if (!flags.z()) + goto isntsame; + al = data.byte(kObjecttype); + _cmp(al, data.byte(kOpenedtype)); + if (!flags.z()) + goto isntsame; + errormessage1(); + return; +isntsame: + checkobjectsize(); + _cmp(al, 0); + if (flags.z()) + goto sizeok1; + return; +sizeok1: + data.byte(kPickup) = 0; + al = data.byte(kItemframe); + geteitherad(); + al = data.byte(kOpenedtype); + es.byte(bx+2) = al; + al = data.byte(kOpenedob); + es.byte(bx+3) = al; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + al = data.byte(kReallocation); + es.byte(bx+5) = al; + fillopen(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage1() { + STACK_CHECK; + delpointer(); + di = 76; + bx = 21; + al = 58; + dl = 240; + printmessage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage2() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 59; + dl = 240; + printmessage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage3() { + STACK_CHECK; + delpointer(); + di = 76; + bx = 21; + al = 60; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::checkobjectsize() { + STACK_CHECK; + getopenedsize(); + push(ax); + al = data.byte(kItemframe); + geteitherad(); + al = es.byte(bx+9); + cx = pop(); + _cmp(al, 255); + if (!flags.z()) + goto notunsized; + al = 6; +notunsized: + _cmp(al, 100); + if (!flags.c()) + goto specialcase; + _cmp(cl, 100); + if (flags.c()) + goto isntspecial; + errormessage3(); + goto sizewrong; +isntspecial: + _cmp(cl, al); + if (!flags.c()) + goto sizeok; +specialcase: + _sub(al, 100); + _cmp(cl, 100); + if (!flags.c()) + goto bothspecial; + _cmp(cl, al); + if (!flags.c()) + goto sizeok; + errormessage2(); + goto sizewrong; +bothspecial: + _sub(cl, 100); + _cmp(al, cl); + if (flags.z()) + goto sizeok; + errormessage3(); +sizewrong: + al = 1; + return; +sizeok: + al = 0; +} + +void DreamGenContext::outofopen() { + STACK_CHECK; + _cmp(data.byte(kOpenedob), 255); + if (flags.z()) + goto cantuseopen; + findopenpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canpick4; +cantuseopen: + blank(); + return; +canpick4: + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub4; + _cmp(data.byte(kCommandtype), 228); + if (flags.z()) + goto alreadygrb; + data.byte(kCommandtype) = 228; +difsub4: + data.word(kOldsubject) = ax; + bx = ax; + al = 36; + commandwithob(); +alreadygrb: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo4) */; + _cmp(ax, 1); + if (flags.z()) + goto dogrb; + _cmp(ax, 2); + if (!flags.z()) + return /* (notletgo4) */; + reexfromopen(); + return; +dogrb: + delpointer(); + data.byte(kPickup) = 1; + findopenpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + _cmp(ah, 4); + if (!flags.z()) + goto makeintoex; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + goto actuallyout; +makeintoex: + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; +actuallyout: + fillopen(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::transfertoex() { + STACK_CHECK; + emergencypurge(); + getexpos(); + al = data.byte(kExpos); + push(ax); + push(di); + al = data.byte(kItemframe); + ah = 0; + bx = 16; + _mul(bx); + ds = data.word(kFreedat); + si = ax; + cx = 8; + _movsw(cx, true); + di = pop(); + al = data.byte(kReallocation); + es.byte(di) = al; + es.byte(di+11) = al; + al = data.byte(kItemframe); + es.byte(di+1) = al; + es.byte(di+2) = 4; + es.byte(di+3) = 255; + al = data.byte(kLastinvpos); + es.byte(di+4) = al; + al = data.byte(kItemframe); + data.byte(kItemtotran) = al; + transfermap(); + transferinv(); + transfertext(); + al = data.byte(kItemframe); + ah = 0; + bx = 16; + _mul(bx); + ds = data.word(kFreedat); + si = ax; + ds.byte(si+2) = 254; + pickupconts(); + ax = pop(); +} + +void DreamGenContext::pickupconts() { + STACK_CHECK; + al = ds.byte(si+7); + _cmp(al, 255); + if (flags.z()) + return /* (notopenable) */; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + dl = data.byte(kExpos); + es = data.word(kFreedat); + bx = 0; + cx = 0; +pickupcontloop: + push(cx); + push(es); + push(bx); + push(dx); + push(ax); + _cmp(es.byte(bx+2), ah); + if (!flags.z()) + goto notinsidethis; + _cmp(es.byte(bx+3), al); + if (!flags.z()) + goto notinsidethis; + data.byte(kItemtotran) = cl; + transfercontoex(); +notinsidethis: + ax = pop(); + dx = pop(); + bx = pop(); + es = pop(); + cx = pop(); + _add(bx, 16); + _inc(cx); + _cmp(cx, 80); + if (!flags.z()) + goto pickupcontloop; +} + +void DreamGenContext::transfercontoex() { + STACK_CHECK; + push(es); + push(bx); + push(dx); + push(es); + push(bx); + getexpos(); + si = pop(); + ds = pop(); + push(di); + cx = 8; + _movsw(cx, true); + di = pop(); + dx = pop(); + al = data.byte(kReallocation); + es.byte(di) = al; + es.byte(di+11) = al; + al = data.byte(kItemtotran); + es.byte(di+1) = al; + es.byte(di+3) = dl; + es.byte(di+2) = 4; + transfermap(); + transferinv(); + transfertext(); + si = pop(); + ds = pop(); + ds.byte(si+2) = 255; +} + +void DreamGenContext::transfertext() { + STACK_CHECK; + es = data.word(kExtras); + al = data.byte(kExpos); + ah = 0; + _add(ax, ax); + bx = (0+2080+30000+(16*114)); + _add(bx, ax); + di = data.word(kExtextpos); + es.word(bx) = di; + _add(di, (0+2080+30000+(16*114)+((114+2)*2))); + al = data.byte(kItemtotran); + ah = 0; + _add(ax, ax); + ds = data.word(kFreedesc); + bx = (0); + _add(bx, ax); + si = (0+(82*2)); + ax = ds.word(bx); + _add(si, ax); +moretext: + _lodsb(); + _stosb(); + _inc(data.word(kExtextpos)); + _cmp(al, 0); + if (!flags.z()) + goto moretext; +} + +void DreamGenContext::getexpos() { + STACK_CHECK; + es = data.word(kExtras); + al = 0; + di = (0+2080+30000); +tryanotherex: + _cmp(es.byte(di+2), 255); + if (flags.z()) + goto foundnewex; + _add(di, 16); + _inc(al); + _cmp(al, (114)); + if (!flags.z()) + goto tryanotherex; +foundnewex: + data.byte(kExpos) = al; +} + +void DreamGenContext::purgealocation() { + STACK_CHECK; + push(ax); + es = data.word(kExtras); + di = (0+2080+30000); + bx = pop(); + cx = 0; +purgeloc: + _cmp(bl, es.byte(di+0)); + if (!flags.z()) + goto dontpurge; + _cmp(es.byte(di+2), 0); + if (!flags.z()) + goto dontpurge; + push(di); + push(es); + push(bx); + push(cx); + deleteexobject(); + cx = pop(); + bx = pop(); + es = pop(); + di = pop(); +dontpurge: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto purgeloc; +} + +void DreamGenContext::emergencypurge() { + STACK_CHECK; +checkpurgeagain: + ax = data.word(kExframepos); + _add(ax, 4000); + _cmp(ax, (30000)); + if (flags.c()) + goto notnearframeend; + purgeanitem(); + goto checkpurgeagain; +notnearframeend: + ax = data.word(kExtextpos); + _add(ax, 400); + _cmp(ax, (18000)); + if (flags.c()) + return /* (notneartextend) */; + purgeanitem(); + goto checkpurgeagain; +} + +void DreamGenContext::purgeanitem() { + STACK_CHECK; + es = data.word(kExtras); + di = (0+2080+30000); + bl = data.byte(kReallocation); + cx = 0; +lookforpurge: + al = es.byte(di+2); + _cmp(al, 0); + if (!flags.z()) + goto cantpurge; + _cmp(es.byte(di+12), 2); + if (flags.z()) + goto iscup; + _cmp(es.byte(di+12), 255); + if (!flags.z()) + goto cantpurge; +iscup: + _cmp(es.byte(di+11), bl); + if (flags.z()) + goto cantpurge; + deleteexobject(); + return; +cantpurge: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto lookforpurge; + di = (0+2080+30000); + bl = data.byte(kReallocation); + cx = 0; +lookforpurge2: + al = es.byte(di+2); + _cmp(al, 0); + if (!flags.z()) + goto cantpurge2; + _cmp(es.byte(di+12), 255); + if (!flags.z()) + goto cantpurge2; + deleteexobject(); + return; +cantpurge2: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto lookforpurge2; +} + +void DreamGenContext::deleteexobject() { + STACK_CHECK; + push(cx); + push(cx); + push(cx); + push(cx); + al = 255; + cx = 16; + _stosb(cx, true); + ax = pop(); + cl = al; + _add(al, al); + _add(al, cl); + deleteexframe(); + ax = pop(); + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + deleteexframe(); + ax = pop(); + deleteextext(); + bx = pop(); + bh = bl; + bl = 4; + di = (0+2080+30000); + cx = 0; +deleteconts: + _cmp(es.word(di+2), bx); + if (!flags.z()) + goto notinsideex; + push(bx); + push(cx); + push(di); + deleteexobject(); + di = pop(); + cx = pop(); + bx = pop(); +notinsideex: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto deleteconts; +} + +void DreamGenContext::deleteexframe() { + STACK_CHECK; + di = (0); + ah = 0; + _add(ax, ax); + _add(di, ax); + _add(ax, ax); + _add(di, ax); + al = es.byte(di); + ah = 0; + cl = es.byte(di+1); + ch = 0; + _mul(cx); + si = es.word(di+2); + push(si); + _add(si, (0+2080)); + cx = (30000); + _sub(cx, es.word(di+2)); + di = si; + _add(si, ax); + push(ax); + ds = es; + _movsb(cx, true); + bx = pop(); + _sub(data.word(kExframepos), bx); + si = pop(); + cx = (114)*3; + di = (0); +shuffleadsdown: + ax = es.word(di+2); + _cmp(ax, si); + if (flags.c()) + goto beforethisone; + _sub(ax, bx); +beforethisone: + es.word(di+2) = ax; + _add(di, 6); + if (--cx) + goto shuffleadsdown; +} + +void DreamGenContext::deleteextext() { + STACK_CHECK; + di = (0+2080+30000+(16*114)); + ah = 0; + _add(ax, ax); + _add(di, ax); + ax = es.word(di); + si = ax; + di = ax; + _add(si, (0+2080+30000+(16*114)+((114+2)*2))); + _add(di, (0+2080+30000+(16*114)+((114+2)*2))); + ax = 0; +findlenextext: + cl = es.byte(si); + _inc(ax); + _inc(si); + _cmp(cl, 0); + if (!flags.z()) + goto findlenextext; + cx = (18000); + bx = si; + _sub(bx, (0+2080+30000+(16*114)+((114+2)*2))); + push(bx); + push(ax); + _sub(cx, bx); + _movsb(cx, true); + bx = pop(); + _sub(data.word(kExtextpos), bx); + si = pop(); + cx = (114); + di = (0+2080+30000+(16*114)); +shuffletextads: + ax = es.word(di); + _cmp(ax, si); + if (flags.c()) + goto beforethistext; + _sub(ax, bx); +beforethistext: + es.word(di) = ax; + _add(di, 2); + if (--cx) + goto shuffletextads; +} + +void DreamGenContext::blockget() { + STACK_CHECK; + ah = al; + al = 0; + ds = data.word(kBackdrop); + si = (0+192); + _add(si, ax); +} + +void DreamGenContext::drawfloor() { + STACK_CHECK; + push(es); + push(bx); + eraseoldobs(); + drawflags(); + calcmapad(); + doblocks(); + showallobs(); + showallfree(); + showallex(); + paneltomap(); + initrain(); + data.byte(kNewobs) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::calcmapad() { + STACK_CHECK; + getdimension(); + push(cx); + push(dx); + al = 11; + _sub(al, dl); + _sub(al, cl); + _sub(al, cl); + ax.cbw(); + bx = 8; + _mul(bx); + _add(ax, data.word(kMapoffsetx)); + data.word(kMapadx) = ax; + dx = pop(); + cx = pop(); + al = 10; + _sub(al, dh); + _sub(al, ch); + _sub(al, ch); + ax.cbw(); + bx = 8; + _mul(bx); + _add(ax, data.word(kMapoffsety)); + data.word(kMapady) = ax; +} + +void DreamGenContext::getdimension() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)); + ch = 0; +dimloop1: + addalong(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim1; + _inc(ch); + goto dimloop1; +finishdim1: + bx = (0+(228*13)+32+60+(32*32)); + cl = 0; +dimloop2: + push(bx); + addlength(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim2; + _inc(cl); + _add(bx, 3); + goto dimloop2; +finishdim2: + bx = (0+(228*13)+32+60+(32*32))+(11*3*9); + dh = 10; +dimloop3: + push(bx); + addalong(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim3; + _dec(dh); + _sub(bx, 11*3); + goto dimloop3; +finishdim3: + bx = (0+(228*13)+32+60+(32*32))+(3*10); + dl = 11; +dimloop4: + push(bx); + addlength(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim4; + _dec(dl); + _sub(bx, 3); + goto dimloop4; +finishdim4: + al = cl; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.word(kMapxstart) = ax; + al = ch; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.word(kMapystart) = ax; + _sub(dl, cl); + _sub(dh, ch); + al = dl; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.byte(kMapxsize) = al; + al = dh; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.byte(kMapysize) = al; +} + +void DreamGenContext::addalong() { + STACK_CHECK; + ah = 11; +addloop: + _cmp(es.byte(bx), 0); + if (!flags.z()) + goto gotalong; + _add(bx, 3); + _dec(ah); + if (!flags.z()) + goto addloop; + al = 0; + return; +gotalong: + al = 1; +} + +void DreamGenContext::addlength() { + STACK_CHECK; + ah = 10; +addloop2: + _cmp(es.byte(bx), 0); + if (!flags.z()) + goto gotlength; + _add(bx, 3*11); + _dec(ah); + if (!flags.z()) + goto addloop2; + al = 0; + return; +gotlength: + al = 1; +} + +void DreamGenContext::drawflags() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)); + al = data.byte(kMapy); + ah = 0; + cx = (66); + _mul(cx); + bl = data.byte(kMapx); + bh = 0; + _add(ax, bx); + si = (0); + _add(si, ax); + cx = 10; +_tmp28: + push(cx); + cx = 11; +_tmp28a: + ds = data.word(kMapdata); + _lodsb(); + ds = data.word(kBackdrop); + push(si); + push(ax); + ah = 0; + _add(ax, ax); + si = (0); + _add(si, ax); + _movsw(); + ax = pop(); + _stosb(); + si = pop(); + if (--cx) + goto _tmp28a; + _add(si, (66)-11); + cx = pop(); + if (--cx) + goto _tmp28; +} + +void DreamGenContext::eraseoldobs() { + STACK_CHECK; + _cmp(data.byte(kNewobs), 0); + if (flags.z()) + return /* (donterase) */; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +oberase: + push(cx); + push(bx); + ax = es.word(bx+20); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto notthisob; + di = bx; + al = 255; + cx = (32); + _stosb(cx, true); +notthisob: + bx = pop(); + cx = pop(); + _add(bx, (32)); + if (--cx) + goto oberase; +} + +void DreamGenContext::showallobs() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)); + data.word(kListpos) = bx; + di = bx; + cx = 128*5; + al = 255; + _stosb(cx, true); + es = data.word(kSetframes); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + data.byte(kCurrentob) = 0; + ds = data.word(kSetdat); + si = 0; + cx = 128; +showobsloop: + push(cx); + push(si); + push(si); + _add(si, 58); + es = data.word(kSetdat); + getmapad(); + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto blankframe; + al = es.byte(si+18); + ah = 0; + data.word(kCurrentframe) = ax; + _cmp(al, 255); + if (flags.z()) + goto blankframe; + push(es); + push(si); + calcfrframe(); + finalframe(); + si = pop(); + es = pop(); + al = es.byte(si+18); + es.byte(si+17) = al; + _cmp(es.byte(si+8), 0); + if (!flags.z()) + goto animating; + _cmp(es.byte(si+5), 5); + if (flags.z()) + goto animating; + _cmp(es.byte(si+5), 6); + if (flags.z()) + goto animating; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + goto drawnsetob; +animating: + makebackob(); +drawnsetob: + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + al = data.byte(kCurrentob); + es.byte(si+4) = al; + _add(si, 5); + data.word(kListpos) = si; +blankframe: + _inc(data.byte(kCurrentob)); + si = pop(); + cx = pop(); + _add(si, 64); + _dec(cx); + if (flags.z()) + return /* (finishedsetobs) */; + goto showobsloop; +} + +void DreamGenContext::makebackob() { + STACK_CHECK; + _cmp(data.byte(kNewobs), 0); + if (flags.z()) + return /* (nomake) */; + al = es.byte(si+5); + ah = es.byte(si+8); + push(si); + push(ax); + push(si); + ax = data.word(kObjectx); + bx = data.word(kObjecty); + ah = bl; + si = ax; + cx = 49520; + dx = data.word(kSetframes); + di = (0); + makesprite(); + ax = pop(); + es.word(bx+20) = ax; + ax = pop(); + _cmp(al, 255); + if (!flags.z()) + goto usedpriority; + al = 0; +usedpriority: + es.byte(bx+23) = al; + es.byte(bx+30) = ah; + es.byte(bx+16) = 0; + es.byte(bx+18) = 0; + es.byte(bx+19) = 0; + si = pop(); +} + +void DreamGenContext::showallfree() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)); + data.word(kListpos) = bx; + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)); + cx = 80*5; + al = 255; + _stosb(cx, true); + es = data.word(kFreeframes); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + al = 0; + data.byte(kCurrentfree) = al; + ds = data.word(kFreedat); + si = 2; + cx = 0; +loop127: + push(cx); + push(si); + push(si); + es = data.word(kFreedat); + getmapad(); + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto over138; + al = data.byte(kCurrentfree); + ah = 0; + dx = ax; + _add(ax, ax); + _add(ax, dx); + data.word(kCurrentframe) = ax; + push(es); + push(si); + calcfrframe(); + es = data.word(kMapstore); + ds = data.word(kFrsegment); + finalframe(); + si = pop(); + es = pop(); + _cmp(cx, 0); + if (flags.z()) + goto over138; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + ax = pop(); + cx = pop(); + push(cx); + push(ax); + es.byte(si+4) = cl; + _add(si, 5); + data.word(kListpos) = si; +over138: + _inc(data.byte(kCurrentfree)); + si = pop(); + cx = pop(); + _add(si, 16); + _inc(cx); + _cmp(cx, 80); + if (flags.z()) + return /* (finfree) */; + goto loop127; +} + +void DreamGenContext::showallex() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); + data.word(kListpos) = bx; + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); + cx = 100*5; + al = 255; + _stosb(cx, true); + es = data.word(kExtras); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + data.byte(kCurrentex) = 0; + si = (0+2080+30000)+2; + cx = 0; +exloop: + push(cx); + push(si); + es = data.word(kExtras); + push(si); + ch = 0; + _cmp(es.byte(si), 255); + if (flags.z()) + goto notinroom; + al = es.byte(si-2); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinroom; + getmapad(); +notinroom: + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto blankex; + al = data.byte(kCurrentex); + ah = 0; + dx = ax; + _add(ax, ax); + _add(ax, dx); + data.word(kCurrentframe) = ax; + push(es); + push(si); + calcfrframe(); + es = data.word(kMapstore); + ds = data.word(kFrsegment); + finalframe(); + si = pop(); + es = pop(); + _cmp(cx, 0); + if (flags.z()) + goto blankex; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + ax = pop(); + cx = pop(); + push(cx); + push(ax); + es.byte(si+4) = cl; + _add(si, 5); + data.word(kListpos) = si; +blankex: + _inc(data.byte(kCurrentex)); + si = pop(); + cx = pop(); + _add(si, 16); + _inc(cx); + _cmp(cx, 100); + if (flags.z()) + return /* (finex) */; + goto exloop; +} + +void DreamGenContext::calcfrframe() { + STACK_CHECK; + dx = data.word(kFrsegment); + ax = data.word(kFramesad); + push(ax); + cx = data.word(kDataad); + ax = data.word(kCurrentframe); + ds = dx; + bx = 6; + _mul(bx); + _add(ax, cx); + bx = ax; + cx = ds.word(bx); + ax = ds.word(bx+2); + dx = ds.word(bx+4); + bx = pop(); + push(dx); + _add(ax, bx); + data.word(kSavesource) = ax; + data.word(kSavesize) = cx; + ax = pop(); + push(ax); + ah = 0; + data.word(kOffsetx) = ax; + ax = pop(); + al = ah; + ah = 0; + data.word(kOffsety) = ax; + return; + ax = pop(); + cx = 0; + data.word(kSavesize) = cx; +} + +void DreamGenContext::finalframe() { + STACK_CHECK; + ax = data.word(kObjecty); + _add(ax, data.word(kOffsety)); + bx = data.word(kObjectx); + _add(bx, data.word(kOffsetx)); + data.byte(kSavex) = bl; + data.byte(kSavey) = al; + di = data.word(kObjectx); + bx = data.word(kObjecty); +} + +void DreamGenContext::adjustlen() { + STACK_CHECK; + ah = al; + _add(al, ch); + _cmp(al, 100); + if (flags.c()) + return /* (over242) */; + al = 224; + _sub(al, ch); + ch = al; +} + +void DreamGenContext::getmapad() { + STACK_CHECK; + getxad(); + _cmp(ch, 0); + if (flags.z()) + return /* (over146) */; + data.word(kObjectx) = ax; + getyad(); + _cmp(ch, 0); + if (flags.z()) + return /* (over146) */; + data.word(kObjecty) = ax; + ch = 1; +} + +void DreamGenContext::getxad() { + STACK_CHECK; + cl = es.byte(si); + _inc(si); + al = es.byte(si); + _inc(si); + ah = es.byte(si); + _inc(si); + _cmp(cl, 0); + if (!flags.z()) + goto over148; + _sub(al, data.byte(kMapx)); + if (flags.c()) + goto over148; + _cmp(al, 11); + if (!flags.c()) + goto over148; + cl = 4; + _shl(al, cl); + _or(al, ah); + ah = 0; + ch = 1; + return; +over148: + ch = 0; +} + +void DreamGenContext::getyad() { + STACK_CHECK; + al = es.byte(si); + _inc(si); + ah = es.byte(si); + _inc(si); + _sub(al, data.byte(kMapy)); + if (flags.c()) + goto over147; + _cmp(al, 10); + if (!flags.c()) + goto over147; + cl = 4; + _shl(al, cl); + _or(al, ah); + ah = 0; + ch = 1; + return; +over147: + ch = 0; +} + +void DreamGenContext::autolook() { + STACK_CHECK; + ax = data.word(kMousex); + _cmp(ax, data.word(kOldx)); + if (!flags.z()) + goto diffmouse; + ax = data.word(kMousey); + _cmp(ax, data.word(kOldy)); + if (!flags.z()) + goto diffmouse; + _dec(data.word(kLookcounter)); + _cmp(data.word(kLookcounter), 0); + if (!flags.z()) + return /* (noautolook) */; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noautolook) */; + dolook(); + return; +diffmouse: + data.word(kLookcounter) = 1000; +} + +void DreamGenContext::look() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 241); + if (flags.z()) + goto alreadylook; + data.byte(kCommandtype) = 241; + al = 25; + commandonly(); +alreadylook: + _cmp(data.word(kMousebutton), 1); + if (!flags.z()) + return /* (nolook) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nolook) */; + dolook(); +} + +void DreamGenContext::dolook() { + STACK_CHECK; + createpanel(); + showicon(); + undertextline(); + worktoscreenm(); + data.byte(kCommandtype) = 255; + dumptextline(); + bl = data.byte(kRoomnum); + _and(bl, 31); + bh = 0; + _add(bx, bx); + es = data.word(kRoomdesc); + _add(bx, (0)); + si = es.word(bx); + _add(si, (0+(38*2))); + findnextcolon(); + di = 66; + _cmp(data.byte(kReallocation), 50); + if (flags.c()) + goto notdream3; + di = 40; +notdream3: + bx = 80; + dl = 241; + printslow(); + _cmp(al, 1); + if (flags.z()) + goto afterlook; + cx = 400; + hangonp(); +afterlook: + data.byte(kPointermode) = 0; + data.byte(kCommandtype) = 0; + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::redrawmainscrn() { + STACK_CHECK; + data.word(kTimecount) = 0; + createpanel(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + readmouse(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::getback1() { + STACK_CHECK; + _cmp(data.byte(kPickup), 0); + if (flags.z()) + goto notgotobject; + blank(); + return; +notgotobject: + _cmp(data.byte(kCommandtype), 202); + if (flags.z()) + goto alreadyget; + data.byte(kCommandtype) = 202; + al = 26; + commandonly(); +alreadyget: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nogetback) */; + _and(ax, 1); + if (!flags.z()) + goto dogetback; + return; +dogetback: + data.byte(kGetback) = 1; + data.byte(kPickup) = 0; +} + +void DreamGenContext::talk() { + STACK_CHECK; + data.byte(kTalkpos) = 0; + data.byte(kInmaparea) = 0; + al = data.byte(kCommand); + data.byte(kCharacter) = al; + createpanel(); + showpanel(); + showman(); + showexit(); + undertextline(); + convicons(); + starttalk(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); +waittalk: + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + data.byte(kGetback) = 0; + bx = 2660; + checkcoords(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto finishtalk; + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waittalk; +finishtalk: + bx = data.word(kPersondata); + es = cs; + _cmp(data.byte(kTalkpos), 4); + if (flags.c()) + goto notnexttalk; + al = es.byte(bx+7); + _or(al, 128); + es.byte(bx+7) = al; +notnexttalk: + redrawmainscrn(); + worktoscreenm(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + return /* (nospeech) */; + cancelch1(); + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 0; +} + +void DreamGenContext::convicons() { + STACK_CHECK; + al = data.byte(kCharacter); + _and(al, 127); + getpersframe(); + di = 234; + bx = 2; + data.word(kCurrentframe) = ax; + findsource(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + ah = 0; + showframe(); +} + +void DreamGenContext::getpersframe() { + STACK_CHECK; + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kPeople); + _add(bx, (0)); + ax = es.word(bx); +} + +void DreamGenContext::starttalk() { + STACK_CHECK; + data.byte(kTalkmode) = 0; + al = data.byte(kCharacter); + _and(al, 127); + getpersontext(); + data.word(kCharshift) = 91+91; + di = 66; + bx = 64; + dl = 241; + al = 0; + ah = 79; + printdirect(); + data.word(kCharshift) = 0; + di = 66; + bx = 80; + dl = 241; + al = 0; + ah = 0; + printdirect(); + data.byte(kSpeechloaded) = 0; + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + return /* (nospeech1) */; + data.byte(kVolumedirection) = 1; + data.byte(kVolumeto) = 6; + al = 50+12; + playchannel1(); +} + +void DreamGenContext::getpersontext() { + STACK_CHECK; + ah = 0; + cx = 64*2; + _mul(cx); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; +} + +void DreamGenContext::moretalk() { + STACK_CHECK; + _cmp(data.byte(kTalkmode), 0); + if (flags.z()) + goto canmore; + redes(); + return; +canmore: + _cmp(data.byte(kCommandtype), 215); + if (flags.z()) + goto alreadymore; + data.byte(kCommandtype) = 215; + al = 49; + commandonly(); +alreadymore: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nomore) */; + _and(ax, 1); + if (!flags.z()) + goto domoretalk; + return; +domoretalk: + data.byte(kTalkmode) = 2; + data.byte(kTalkpos) = 4; + _cmp(data.byte(kCharacter), 100); + if (flags.c()) + goto notsecondpart; + data.byte(kTalkpos) = 48; +notsecondpart: + dosometalk(); +} + +void DreamGenContext::dosometalk() { + STACK_CHECK; +dospeech: + al = data.byte(kTalkpos); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cx = ax; + al = data.byte(kTalkpos); + ah = 0; + _add(ax, cx); + _add(ax, ax); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; + _cmp(es.byte(si), 0); + if (flags.z()) + goto endheartalk; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + si = pop(); + es = pop(); + di = 164; + bx = 64; + dl = 144; + al = 0; + ah = 0; + printdirect(); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = data.byte(kTalkpos); + ch = 0; + _add(ax, cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 0); + if (flags.z()) + goto noplay1; + al = 62; + playchannel1(); +noplay1: + data.byte(kPointermode) = 3; + worktoscreenm(); + cx = 180; + hangonpq(); + if (!flags.c()) + goto _tmp1; + return; +_tmp1: + _inc(data.byte(kTalkpos)); + al = data.byte(kTalkpos); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cx = ax; + al = data.byte(kTalkpos); + ah = 0; + _add(ax, cx); + _add(ax, ax); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; + _cmp(es.byte(si), 0); + if (flags.z()) + goto endheartalk; + _cmp(es.byte(si), ':'); + if (flags.z()) + goto skiptalk2; + _cmp(es.byte(si), 32); + if (flags.z()) + goto skiptalk2; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + si = pop(); + es = pop(); + di = 48; + bx = 128; + dl = 144; + al = 0; + ah = 0; + printdirect(); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = data.byte(kTalkpos); + ch = 0; + _add(ax, cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 0); + if (flags.z()) + goto noplay2; + al = 62; + playchannel1(); +noplay2: + data.byte(kPointermode) = 3; + worktoscreenm(); + cx = 180; + hangonpq(); + if (!flags.c()) + goto skiptalk2; + return; +skiptalk2: + _inc(data.byte(kTalkpos)); + goto dospeech; +endheartalk: + data.byte(kPointermode) = 0; +} + +void DreamGenContext::hangonpq() { + STACK_CHECK; + data.byte(kGetback) = 0; + bx = 0; +hangloopq: + push(cx); + push(bx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 2692; + checkcoords(); + bx = pop(); + cx = pop(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto quitconv; + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto quitconv; + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + goto notspeaking; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto notspeaking; + _inc(bx); + _cmp(bx, 40); + if (flags.z()) + goto finishconv; +notspeaking: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + goto hangloopq; + _cmp(data.word(kOldbutton), 0); + if (!flags.z()) + goto hangloopq; +finishconv: + delpointer(); + data.byte(kPointermode) = 0; + flags._c = false; + return; +quitconv: + delpointer(); + data.byte(kPointermode) = 0; + cancelch1(); + flags._c = true; + } + +void DreamGenContext::redes() { + STACK_CHECK; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto cantredes; + _cmp(data.byte(kTalkmode), 2); + if (flags.z()) + goto canredes; +cantredes: + blank(); + return; +canredes: + _cmp(data.byte(kCommandtype), 217); + if (flags.z()) + goto alreadyreds; + data.byte(kCommandtype) = 217; + al = 50; + commandonly(); +alreadyreds: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto doredes; + return; +doredes: + delpointer(); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + starttalk(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::newplace() { + STACK_CHECK; + _cmp(data.byte(kNeedtotravel), 1); + if (flags.z()) + goto istravel; + _cmp(data.byte(kAutolocation), -1); + if (!flags.z()) + goto isautoloc; + return; +isautoloc: + al = data.byte(kAutolocation); + data.byte(kNewlocation) = al; + data.byte(kAutolocation) = -1; + return; +istravel: + data.byte(kNeedtotravel) = 0; + selectlocation(); +} + +void DreamGenContext::selectlocation() { + STACK_CHECK; + data.byte(kInmaparea) = 0; + clearbeforeload(); + data.byte(kGetback) = 0; + data.byte(kPointerframe) = 22; + readcitypic(); + showcity(); + getridoftemp(); + readdesticon(); + loadtraveltext(); + showpanel(); + showman(); + showarrows(); + showexit(); + locationpic(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + data.byte(kPointerframe) = 0; + showpointer(); + worktoscreen(); + al = 9; + ah = 255; + playchannel0(); + data.byte(kNewlocation) = 255; +select: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto quittravel; + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto quittravel; + bx = 2714; + checkcoords(); + _cmp(data.byte(kNewlocation), 255); + if (flags.z()) + goto select; + al = data.byte(kNewlocation); + _cmp(al, data.byte(kLocation)); + if (flags.z()) + goto quittravel; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + es = data.word(kTraveltext); + deallocatemem(); + return; +quittravel: + al = data.byte(kReallocation); + data.byte(kNewlocation) = al; + data.byte(kGetback) = 0; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + es = data.word(kTraveltext); + deallocatemem(); +} + +void DreamGenContext::showcity() { + STACK_CHECK; + clearwork(); + ds = data.word(kTempgraphics); + di = 57; + bx = 32; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 120+57; + bx = 32; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::lookatplace() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 224); + if (flags.z()) + goto alreadyinfo; + data.byte(kCommandtype) = 224; + al = 27; + commandonly(); +alreadyinfo: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noinfo) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noinfo) */; + bl = data.byte(kDestpos); + _cmp(bl, 15); + if (!flags.c()) + return /* (noinfo) */; + push(bx); + delpointer(); + deltextline(); + getundercentre(); + ds = data.word(kTempgraphics3); + al = 0; + ah = 0; + di = 60; + bx = 72; + showframe(); + al = 4; + ah = 0; + di = 60; + bx = 72+55; + showframe(); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + al = 4; + ah = 0; + di = 60; + bx = 72+55+21; + showframe(); +_tmp1: + bx = pop(); + bh = 0; + _add(bx, bx); + es = data.word(kTraveltext); + si = es.word(bx); + _add(si, (66*2)); + findnextcolon(); + di = 63; + bx = 84; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp2; + bx = 84+4; +_tmp2: + dl = 191; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); + cx = 500; + hangonp(); + data.byte(kPointermode) = 0; + data.byte(kPointerframe) = 0; + putundercentre(); + worktoscreenm(); +} + +void DreamGenContext::getundercentre() { + STACK_CHECK; + di = 58; + bx = 72; + ds = data.word(kMapstore); + si = 0; + cl = 254; + ch = 110; + multiget(); +} + +void DreamGenContext::putundercentre() { + STACK_CHECK; + di = 58; + bx = 72; + ds = data.word(kMapstore); + si = 0; + cl = 254; + ch = 110; + multiput(); +} + +void DreamGenContext::locationpic() { + STACK_CHECK; + getdestinfo(); + al = es.byte(si); + push(es); + push(si); + di = 0; + _cmp(al, 6); + if (!flags.c()) + goto secondlot; + ds = data.word(kTempgraphics); + _add(al, 4); + goto gotgraphic; +secondlot: + _sub(al, 6); + ds = data.word(kTempgraphics2); +gotgraphic: + _add(di, 104); + bx = 138+14; + ah = 0; + showframe(); + si = pop(); + es = pop(); + al = data.byte(kDestpos); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinthisone; + al = 3; + di = 104; + bx = 140+14; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); +notinthisone: + bl = data.byte(kDestpos); + bh = 0; + _add(bx, bx); + es = data.word(kTraveltext); + si = es.word(bx); + _add(si, (66*2)); + di = 50; + bx = 20; + dl = 241; + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::getdestinfo() { + STACK_CHECK; + al = data.byte(kDestpos); + ah = 0; + push(ax); + dx = data; + es = dx; + si = 8011; + _add(si, ax); + cl = es.byte(si); + ax = pop(); + push(cx); + dx = data; + es = dx; + si = 8027; + _add(si, ax); + ax = pop(); +} + +void DreamGenContext::showarrows() { + STACK_CHECK; + di = 116-12; + bx = 16; + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + showframe(); + di = 226+12; + bx = 16; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = 280; + bx = 14; + ds = data.word(kTempgraphics); + al = 2; + ah = 0; + showframe(); +} + +void DreamGenContext::nextdest() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 218); + if (flags.z()) + goto alreadydu; + data.byte(kCommandtype) = 218; + al = 28; + commandonly(); +alreadydu: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (nodu) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodu) */; +searchdestup: + _inc(data.byte(kDestpos)); + _cmp(data.byte(kDestpos), 15); + if (!flags.z()) + goto notlastdest; + data.byte(kDestpos) = 0; +notlastdest: + getdestinfo(); + _cmp(al, 0); + if (flags.z()) + goto searchdestup; + data.byte(kNewtextline) = 1; + deltextline(); + delpointer(); + showpanel(); + showman(); + showarrows(); + locationpic(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::lastdest() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 219); + if (flags.z()) + goto alreadydd; + data.byte(kCommandtype) = 219; + al = 29; + commandonly(); +alreadydd: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (nodd) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodd) */; +searchdestdown: + _dec(data.byte(kDestpos)); + _cmp(data.byte(kDestpos), -1); + if (!flags.z()) + goto notfirstdest; + data.byte(kDestpos) = 15; +notfirstdest: + getdestinfo(); + _cmp(al, 0); + if (flags.z()) + goto searchdestdown; + data.byte(kNewtextline) = 1; + deltextline(); + delpointer(); + showpanel(); + showman(); + showarrows(); + locationpic(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::destselect() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadytrav; + data.byte(kCommandtype) = 222; + al = 30; + commandonly(); +alreadytrav: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (notrav) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notrav) */; + getdestinfo(); + al = data.byte(kDestpos); + data.byte(kNewlocation) = al; +} + +void DreamGenContext::getlocation() { + STACK_CHECK; + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + al = es.byte(bx); +} + +void DreamGenContext::setlocation() { + STACK_CHECK; + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + es.byte(bx) = 1; +} + +void DreamGenContext::resetlocation() { + STACK_CHECK; + push(ax); + _cmp(al, 5); + if (!flags.z()) + goto notdelhotel; + purgealocation(); + al = 21; + purgealocation(); + al = 22; + purgealocation(); + al = 27; + purgealocation(); + goto clearedlocations; +notdelhotel: + _cmp(al, 8); + if (!flags.z()) + goto notdeltvstud; + purgealocation(); + al = 28; + purgealocation(); + goto clearedlocations; +notdeltvstud: + _cmp(al, 6); + if (!flags.z()) + goto notdelsarters; + purgealocation(); + al = 20; + purgealocation(); + al = 25; + purgealocation(); + goto clearedlocations; +notdelsarters: + _cmp(al, 13); + if (!flags.z()) + goto notdelboathouse; + purgealocation(); + al = 29; + purgealocation(); + goto clearedlocations; +notdelboathouse: +clearedlocations: + ax = pop(); + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + es.byte(bx) = 0; +} + +void DreamGenContext::readdesticon() { + STACK_CHECK; + dx = 2013; + loadintotemp(); + dx = 2026; + loadintotemp2(); + dx = 1961; + loadintotemp3(); +} + +void DreamGenContext::readcitypic() { + STACK_CHECK; + dx = 2000; + loadintotemp(); +} + +void DreamGenContext::usemon() { + STACK_CHECK; + data.byte(kLasttrigger) = 0; + es = cs; + di = 2970+1; + cx = 12; + al = 32; + _stosb(cx, true); + es = cs; + di = 2942+1; + cx = 12; + al = 32; + _stosb(cx, true); + es = cs; + di = 2836; + es.byte(di) = 1; + _add(di, 26); + cx = 3; +keyloop: + es.byte(di) = 0; + _add(di, 26); + if (--cx) + goto keyloop; + createpanel(); + showpanel(); + showicon(); + drawfloor(); + getridofall(); + dx = 1974; + loadintotemp(); + loadpersonal(); + loadnews(); + loadcart(); + dx = 1870; + loadtempcharset(); + printoutermon(); + initialmoncols(); + printlogo(); + worktoscreen(); + turnonpower(); + fadeupyellows(); + fadeupmonfirst(); + data.word(kMonadx) = 76; + data.word(kMonady) = 141; + al = 1; + monmessage(); + cx = 120; + hangoncurs(); + al = 2; + monmessage(); + cx = 60; + randomaccess(); + al = 3; + monmessage(); + cx = 100; + hangoncurs(); + printlogo(); + scrollmonitor(); + data.word(kBufferin) = 0; + data.word(kBufferout) = 0; +moreinput: + di = data.word(kMonadx); + bx = data.word(kMonady); + push(di); + push(bx); + input(); + bx = pop(); + di = pop(); + data.word(kMonadx) = di; + data.word(kMonady) = bx; + execcommand(); + _cmp(al, 0); + if (flags.z()) + goto moreinput; + getridoftemp(); + getridoftempcharset(); + es = data.word(kTextfile1); + deallocatemem(); + es = data.word(kTextfile2); + deallocatemem(); + es = data.word(kTextfile3); + deallocatemem(); + data.byte(kGetback) = 1; + al = 26; + playchannel1(); + data.byte(kManisoffscreen) = 0; + restoreall(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::printoutermon() { + STACK_CHECK; + di = 40; + bx = 32; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = 264; + bx = 32; + ds = data.word(kTempgraphics); + al = 2; + ah = 0; + showframe(); + di = 40; + bx = 12; + ds = data.word(kTempgraphics); + al = 3; + ah = 0; + showframe(); + di = 40; + bx = 164; + ds = data.word(kTempgraphics); + al = 4; + ah = 0; + showframe(); +} + +void DreamGenContext::loadpersonal() { + STACK_CHECK; + al = data.byte(kLocation); + dx = 2052; + _cmp(al, 0); + if (flags.z()) + goto foundpersonal; + _cmp(al, 42); + if (flags.z()) + goto foundpersonal; + dx = 2065; + _cmp(al, 2); + if (flags.z()) + goto foundpersonal; +foundpersonal: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile1) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::loadnews() { + STACK_CHECK; + al = data.byte(kNewsitem); + dx = 2078; + _cmp(al, 0); + if (flags.z()) + goto foundnews; + dx = 2091; + _cmp(al, 1); + if (flags.z()) + goto foundnews; + dx = 2104; + _cmp(al, 2); + if (flags.z()) + goto foundnews; + dx = 2117; +foundnews: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile2) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::loadcart() { + STACK_CHECK; + lookininterface(); + dx = 2130; + _cmp(al, 0); + if (flags.z()) + goto gotcart; + dx = 2143; + _cmp(al, 1); + if (flags.z()) + goto gotcart; + dx = 2156; + _cmp(al, 2); + if (flags.z()) + goto gotcart; + dx = 2169; + _cmp(al, 3); + if (flags.z()) + goto gotcart; + dx = 2182; +gotcart: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile3) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::lookininterface() { + STACK_CHECK; + al = 'I'; + ah = 'N'; + cl = 'T'; + ch = 'F'; + findsetobject(); + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (flags.z()) + goto emptyinterface; + al = es.byte(bx+15); + _inc(al); + return; +emptyinterface: + al = 0; +} + +void DreamGenContext::turnonpower() { + STACK_CHECK; + cx = 3; +powerloop: + push(cx); + powerlighton(); + cx = 30; + hangon(); + powerlightoff(); + cx = 30; + hangon(); + cx = pop(); + if (--cx) + goto powerloop; + powerlighton(); +} + +void DreamGenContext::randomaccess() { + STACK_CHECK; +accessloop: + push(cx); + vsync(); + vsync(); + randomnum1(); + _and(al, 15); + _cmp(al, 10); + if (flags.c()) + goto off; + accesslighton(); + goto chosenaccess; +off: + accesslightoff(); +chosenaccess: + cx = pop(); + if (--cx) + goto accessloop; + accesslightoff(); +} + +void DreamGenContext::powerlighton() { + STACK_CHECK; + di = 257+4; + bx = 182; + ds = data.word(kTempgraphics); + al = 6; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::powerlightoff() { + STACK_CHECK; + di = 257+4; + bx = 182; + ds = data.word(kTempgraphics); + al = 5; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::accesslighton() { + STACK_CHECK; + di = 74; + bx = 182; + ds = data.word(kTempgraphics); + al = 8; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::accesslightoff() { + STACK_CHECK; + di = 74; + bx = 182; + ds = data.word(kTempgraphics); + al = 7; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::locklighton() { + STACK_CHECK; + di = 56; + bx = 182; + ds = data.word(kTempgraphics); + al = 10; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::locklightoff() { + STACK_CHECK; + di = 56; + bx = 182; + ds = data.word(kTempgraphics); + al = 9; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::input() { + STACK_CHECK; + es = cs; + di = 8045; + cx = 64; + al = 0; + _stosb(cx, true); + data.word(kCurpos) = 0; + al = '>'; + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + di = data.word(kMonadx); + bx = data.word(kMonady); + cl = 6; + ch = 8; + multidump(); + _add(data.word(kMonadx), 6); + ax = data.word(kMonadx); + data.word(kCurslocx) = ax; + ax = data.word(kMonady); + data.word(kCurslocy) = ax; +waitkey: + printcurs(); + vsync(); + delcurs(); + readkey(); + al = data.byte(kCurrentkey); + _cmp(al, 0); + if (flags.z()) + goto waitkey; + _cmp(al, 13); + if (flags.z()) + return /* (endofinput) */; + _cmp(al, 8); + if (!flags.z()) + goto notdel; + _cmp(data.word(kCurpos), 0); + if (flags.z()) + goto waitkey; + delchar(); + goto waitkey; +notdel: + _cmp(data.word(kCurpos), 28); + if (flags.z()) + goto waitkey; + _cmp(data.byte(kCurrentkey), 32); + if (!flags.z()) + goto notleadingspace; + _cmp(data.word(kCurpos), 0); + if (flags.z()) + goto waitkey; +notleadingspace: + makecaps(); + es = cs; + si = data.word(kCurpos); + _add(si, si); + _add(si, 8045); + es.byte(si) = al; + _cmp(al, 'Z'+1); + if (!flags.c()) + goto waitkey; + push(ax); + push(es); + push(si); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kMapstore); + ax = data.word(kCurpos); + _xchg(al, ah); + si = ax; + cl = 8; + ch = 8; + multiget(); + si = pop(); + es = pop(); + ax = pop(); + push(es); + push(si); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + si = pop(); + es = pop(); + es.byte(si+1) = cl; + ch = 0; + _add(data.word(kMonadx), cx); + _inc(data.word(kCurpos)); + _add(data.word(kCurslocx), cx); + goto waitkey; +} + +void DreamGenContext::makecaps() { + STACK_CHECK; + _cmp(al, 'a'); + if (flags.c()) + return /* (notupperc) */; + _sub(al, 32); +} + +void DreamGenContext::delchar() { + STACK_CHECK; + _dec(data.word(kCurpos)); + si = data.word(kCurpos); + _add(si, si); + es = cs; + _add(si, 8045); + es.byte(si) = 0; + al = es.byte(si+1); + ah = 0; + _sub(data.word(kMonadx), ax); + _sub(data.word(kCurslocx), ax); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kMapstore); + ax = data.word(kCurpos); + _xchg(al, ah); + si = ax; + cl = 8; + ch = 8; + multiput(); + di = data.word(kMonadx); + bx = data.word(kMonady); + cl = al; + ch = 8; + multidump(); +} + +void DreamGenContext::execcommand() { + STACK_CHECK; + es = cs; + bx = 2776; + ds = cs; + si = 8045; + al = ds.byte(si); + _cmp(al, 0); + if (!flags.z()) + goto notblankinp; + scrollmonitor(); + return; +notblankinp: + cl = 0; +comloop: + push(bx); + push(si); +comloop2: + al = ds.byte(si); + _add(si, 2); + ah = es.byte(bx); + _inc(bx); + _cmp(ah, 32); + if (flags.z()) + goto foundcom; + _cmp(al, ah); + if (flags.z()) + goto comloop2; + si = pop(); + bx = pop(); + _add(bx, 10); + _inc(cl); + _cmp(cl, 6); + if (!flags.z()) + goto comloop; + neterror(); + al = 0; + return; +foundcom: + si = pop(); + bx = pop(); + _cmp(cl, 1); + if (flags.z()) + goto testcom; + _cmp(cl, 2); + if (flags.z()) + goto directory; + _cmp(cl, 3); + if (flags.z()) + goto accesscom; + _cmp(cl, 4); + if (flags.z()) + goto signoncom; + _cmp(cl, 5); + if (flags.z()) + goto keyscom; + goto quitcom; +directory: + dircom(); + al = 0; + return; +signoncom: + signon(); + al = 0; + return; +accesscom: + read(); + al = 0; + return; +keyscom: + showkeys(); + al = 0; + return; +testcom: + al = 6; + monmessage(); + al = 0; + return; +quitcom: + al = 1; +} + +void DreamGenContext::neterror() { + STACK_CHECK; + al = 5; + monmessage(); + scrollmonitor(); +} + +void DreamGenContext::dircom() { + STACK_CHECK; + cx = 30; + randomaccess(); + parser(); + _cmp(es.byte(di+1), 0); + if (flags.z()) + goto dirroot; + dirfile(); + return; +dirroot: + data.byte(kLogonum) = 0; + ds = cs; + si = 2956; + _inc(si); + es = cs; + di = 2970; + _inc(di); + cx = 12; + _movsb(cx, true); + monitorlogo(); + scrollmonitor(); + al = 9; + monmessage(); + es = data.word(kTextfile1); + searchforfiles(); + es = data.word(kTextfile2); + searchforfiles(); + es = data.word(kTextfile3); + searchforfiles(); + scrollmonitor(); +} + +void DreamGenContext::searchforfiles() { + STACK_CHECK; + bx = (66*2); +directloop1: + al = es.byte(bx); + _inc(bx); + _cmp(al, '*'); + if (flags.z()) + return /* (endofdir) */; + _cmp(al, 34); + if (!flags.z()) + goto directloop1; + monprint(); + goto directloop1; +} + +void DreamGenContext::signon() { + STACK_CHECK; + parser(); + _inc(di); + ds = cs; + si = 2836; + cx = 4; +signonloop: + push(cx); + push(si); + push(di); + _add(si, 14); + cx = 11; +signonloop2: + _lodsb(); + _cmp(al, 32); + if (flags.z()) + goto foundsign; + makecaps(); + ah = es.byte(di); + _inc(di); + _cmp(al, ah); + if (!flags.z()) + goto nomatch; + if (--cx) + goto signonloop2; +nomatch: + di = pop(); + si = pop(); + cx = pop(); + _add(si, 26); + if (--cx) + goto signonloop; + al = 13; + monmessage(); + return; +foundsign: + di = pop(); + si = pop(); + cx = pop(); + bx = si; + es = ds; + _cmp(es.byte(bx), 0); + if (flags.z()) + goto notyetassigned; + al = 17; + monmessage(); + return; +notyetassigned: + push(es); + push(bx); + scrollmonitor(); + al = 15; + monmessage(); + di = data.word(kMonadx); + bx = data.word(kMonady); + push(di); + push(bx); + input(); + bx = pop(); + di = pop(); + data.word(kMonadx) = di; + data.word(kMonady) = bx; + bx = pop(); + es = pop(); + push(es); + push(bx); + _add(bx, 2); + ds = cs; + si = 8045; +checkpass: + _lodsw(); + ah = es.byte(bx); + _inc(bx); + _cmp(ah, 32); + if (flags.z()) + goto passpassed; + _cmp(al, ah); + if (flags.z()) + goto checkpass; + bx = pop(); + es = pop(); + scrollmonitor(); + al = 16; + monmessage(); + return; +passpassed: + al = 14; + monmessage(); + bx = pop(); + es = pop(); + push(es); + push(bx); + _add(bx, 14); + monprint(); + scrollmonitor(); + bx = pop(); + es = pop(); + es.byte(bx) = 1; +} + +void DreamGenContext::showkeys() { + STACK_CHECK; + cx = 10; + randomaccess(); + scrollmonitor(); + al = 18; + monmessage(); + es = cs; + bx = 2836; + cx = 4; +keysloop: + push(cx); + push(bx); + _cmp(es.byte(bx), 0); + if (flags.z()) + goto notheld; + _add(bx, 14); + monprint(); +notheld: + bx = pop(); + cx = pop(); + _add(bx, 26); + if (--cx) + goto keysloop; + scrollmonitor(); +} + +void DreamGenContext::read() { + STACK_CHECK; + cx = 40; + randomaccess(); + parser(); + _cmp(es.byte(di+1), 0); + if (!flags.z()) + goto okcom; + neterror(); + return; +okcom: + es = cs; + di = 2970; + ax = data.word(kTextfile1); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + ax = data.word(kTextfile2); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + ax = data.word(kTextfile3); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + al = 7; + monmessage(); + return; +foundfile2: + getkeyandlogo(); + _cmp(al, 0); + if (flags.z()) + goto keyok1; + return; +keyok1: + es = cs; + di = 2942; + ds = data.word(kMonsource); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto findtopictext; + al = data.byte(kOldlogonum); + data.byte(kLogonum) = al; + al = 11; + monmessage(); + return; +findtopictext: + _inc(bx); + push(es); + push(bx); + monitorlogo(); + scrollmonitor(); + bx = pop(); + es = pop(); +moretopic: + monprint(); + al = es.byte(bx); + _cmp(al, 34); + if (flags.z()) + goto endoftopic; + _cmp(al, '='); + if (flags.z()) + goto endoftopic; + _cmp(al, '*'); + if (flags.z()) + goto endoftopic; + push(es); + push(bx); + processtrigger(); + cx = 24; + randomaccess(); + bx = pop(); + es = pop(); + goto moretopic; +endoftopic: + scrollmonitor(); +} + +void DreamGenContext::dirfile() { + STACK_CHECK; + al = 34; + es.byte(di) = al; + push(es); + push(di); + ds = data.word(kTextfile1); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + push(es); + push(di); + ds = data.word(kTextfile2); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + push(es); + push(di); + ds = data.word(kTextfile3); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + al = 7; + monmessage(); + return; +foundfile: + ax = pop(); + ax = pop(); + getkeyandlogo(); + _cmp(al, 0); + if (flags.z()) + goto keyok2; + return; +keyok2: + push(es); + push(bx); + ds = cs; + si = 2942+1; + es = cs; + di = 2970+1; + cx = 12; + _movsb(cx, true); + monitorlogo(); + scrollmonitor(); + al = 10; + monmessage(); + bx = pop(); + es = pop(); +directloop2: + al = es.byte(bx); + _inc(bx); + _cmp(al, 34); + if (flags.z()) + goto endofdir2; + _cmp(al, '*'); + if (flags.z()) + goto endofdir2; + _cmp(al, '='); + if (!flags.z()) + goto directloop2; + monprint(); + goto directloop2; +endofdir2: + scrollmonitor(); +} + +void DreamGenContext::getkeyandlogo() { + STACK_CHECK; + _inc(bx); + al = es.byte(bx); + _sub(al, 48); + data.byte(kNewlogonum) = al; + _add(bx, 2); + al = es.byte(bx); + _sub(al, 48); + data.byte(kKeynum) = al; + _inc(bx); + push(es); + push(bx); + al = data.byte(kKeynum); + ah = 0; + cx = 26; + _mul(cx); + es = cs; + bx = 2836; + _add(bx, ax); + al = es.byte(bx); + _cmp(al, 1); + if (flags.z()) + goto keyok; + push(bx); + push(es); + al = 12; + monmessage(); + es = pop(); + bx = pop(); + _add(bx, 14); + monprint(); + scrollmonitor(); + bx = pop(); + es = pop(); + al = 1; + return; +keyok: + bx = pop(); + es = pop(); + al = data.byte(kNewlogonum); + data.byte(kLogonum) = al; + al = 0; +} + +void DreamGenContext::searchforstring() { + STACK_CHECK; + dl = es.byte(di); + cx = di; +restartlook: + di = cx; + bx = si; + dh = 0; +keeplooking: + _lodsb(); + makecaps(); + _cmp(al, '*'); + if (flags.z()) + goto notfound; + _cmp(dl, '='); + if (!flags.z()) + goto nofindingtopic; + _cmp(al, 34); + if (flags.z()) + goto notfound; +nofindingtopic: + ah = es.byte(di); + _cmp(al, dl); + if (!flags.z()) + goto notbracket; + _inc(dh); + _cmp(dh, 2); + if (flags.z()) + goto complete; +notbracket: + _cmp(al, ah); + if (!flags.z()) + goto restartlook; + _inc(di); + goto keeplooking; +complete: + es = ds; + al = 0; + bx = si; + return; +notfound: + al = 1; +} + +void DreamGenContext::parser() { + STACK_CHECK; + es = cs; + di = 2942; + cx = 13; + al = 0; + _stosb(cx, true); + di = 2942; + al = '='; + _stosb(); + ds = cs; + si = 8045; +notspace1: + _lodsw(); + _cmp(al, 32); + if (flags.z()) + goto stillspace1; + _cmp(al, 0); + if (!flags.z()) + goto notspace1; + goto finishpars; +stillspace1: + _lodsw(); + _cmp(al, 32); + if (flags.z()) + goto stillspace1; +copyin1: + _stosb(); + _lodsw(); + _cmp(al, 0); + if (flags.z()) + goto finishpars; + _cmp(al, 32); + if (!flags.z()) + goto copyin1; +finishpars: + di = 2942; +} + +void DreamGenContext::scrollmonitor() { + STACK_CHECK; + push(ax); + push(bx); + push(cx); + push(dx); + push(di); + push(si); + push(es); + push(ds); + printlogo(); + di = data.word(kMonadx); + bx = data.word(kMonady); + printundermon(); + ax = data.word(kMonady); + worktoscreen(); + al = 25; + playchannel1(); + ds = pop(); + es = pop(); + si = pop(); + di = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); +} + +void DreamGenContext::lockmon() { + STACK_CHECK; + _cmp(data.byte(kLasthardkey), 57); + if (!flags.z()) + return /* (notlock) */; + locklighton(); +lockloop: + _cmp(data.byte(kLasthardkey), 57); + if (flags.z()) + goto lockloop; + locklightoff(); +} + +void DreamGenContext::monitorlogo() { + STACK_CHECK; + al = data.byte(kLogonum); + _cmp(al, data.byte(kOldlogonum)); + if (flags.z()) + goto notnewlogo; + data.byte(kOldlogonum) = al; + printlogo(); + printundermon(); + worktoscreen(); + printlogo(); + printlogo(); + al = 26; + playchannel1(); + cx = 20; + randomaccess(); + return; +notnewlogo: + printlogo(); +} + +void DreamGenContext::printlogo() { + STACK_CHECK; + di = 56; + bx = 32; + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + showframe(); + showcurrentfile(); +} + +void DreamGenContext::showcurrentfile() { + STACK_CHECK; + di = 178; + bx = 37; + si = 2970+1; +curfileloop: + al = cs.byte(si); + _cmp(al, 0); + if (flags.z()) + return /* (finishfile) */; + _inc(si); + push(si); + modifychar(); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + si = pop(); + goto curfileloop; +} + +void DreamGenContext::monmessage() { + STACK_CHECK; + es = data.word(kTextfile1); + bx = (66*2); + cl = al; + ch = 0; +monmessageloop: + al = es.byte(bx); + _inc(bx); + _cmp(al, '+'); + if (!flags.z()) + goto monmessageloop; + if (--cx) + goto monmessageloop; + monprint(); +} + +void DreamGenContext::processtrigger() { + STACK_CHECK; + _cmp(data.byte(kLasttrigger), '1'); + if (!flags.z()) + goto notfirsttrigger; + al = 8; + setlocation(); + al = 45; + triggermessage(); + return; +notfirsttrigger: + _cmp(data.byte(kLasttrigger), '2'); + if (!flags.z()) + goto notsecondtrigger; + al = 9; + setlocation(); + al = 55; + triggermessage(); + return; +notsecondtrigger: + _cmp(data.byte(kLasttrigger), '3'); + if (!flags.z()) + return /* (notthirdtrigger) */; + al = 2; + setlocation(); + al = 59; + triggermessage(); +} + +void DreamGenContext::triggermessage() { + STACK_CHECK; + push(ax); + di = 174; + bx = 153; + cl = 200; + ch = 63; + ds = data.word(kMapstore); + si = 0; + multiget(); + ax = pop(); + findpuztext(); + di = 174; + bx = 156; + dl = 141; + ah = 16; + printdirect(); + cx = 140; + hangon(); + worktoscreen(); + cx = 340; + hangon(); + di = 174; + bx = 153; + cl = 200; + ch = 63; + ds = data.word(kMapstore); + si = 0; + multiput(); + worktoscreen(); + data.byte(kLasttrigger) = 0; +} + +void DreamGenContext::printcurs() { + STACK_CHECK; + push(si); + push(di); + push(ds); + push(dx); + push(bx); + push(es); + di = data.word(kCurslocx); + bx = data.word(kCurslocy); + cl = 6; + ch = 8; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); + ch = 11; +_tmp1: + ds = data.word(kBuffers); + si = (0); + push(di); + push(bx); + multiget(); + bx = pop(); + di = pop(); + push(bx); + push(di); + _inc(data.word(kMaintimer)); + ax = data.word(kMaintimer); + _and(al, 16); + if (!flags.z()) + goto flashcurs; + al = '/'; + _sub(al, 32); + ah = 0; + ds = data.word(kTempcharset); + showframe(); +flashcurs: + di = pop(); + bx = pop(); + _sub(di, 6); + cl = 12; + ch = 8; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp2; + ch = 11; +_tmp2: + multidump(); + es = pop(); + bx = pop(); + dx = pop(); + ds = pop(); + di = pop(); + si = pop(); +} + +void DreamGenContext::delcurs() { + STACK_CHECK; + push(es); + push(bx); + push(di); + push(ds); + push(dx); + push(si); + di = data.word(kCurslocx); + bx = data.word(kCurslocy); + cl = 6; + ch = 8; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); + ch = 11; +_tmp1: + push(di); + push(bx); + push(cx); + ds = data.word(kBuffers); + si = (0); + multiput(); + cx = pop(); + bx = pop(); + di = pop(); + multidump(); + si = pop(); + dx = pop(); + ds = pop(); + di = pop(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::useobject() { + STACK_CHECK; + data.byte(kWithobject) = 255; + _cmp(data.byte(kCommandtype), 229); + if (flags.z()) + goto alreadyuse; + data.byte(kCommandtype) = 229; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 51; + commandwithob(); +alreadyuse: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nouse) */; + _and(ax, 1); + if (!flags.z()) + goto douse; + return; +douse: + useroutine(); +} + +void DreamGenContext::useroutine() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 50); + if (flags.c()) + goto nodream7; + _cmp(data.byte(kPointerpower), 0); + if (!flags.z()) + goto powerok; + return; +powerok: + data.byte(kPointerpower) = 0; +nodream7: + getanyad(); + dx = data; + ds = dx; + si = 2984; +checkuselist: + push(si); + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+13)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+14)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+15)); + if (!flags.z()) + goto failed; + _lodsw(); + si = pop(); + __dispatch_call(ax); + return; +failed: + si = pop(); + _add(si, 6); + _cmp(ds.byte(si), 140); + if (!flags.z()) + goto checkuselist; + delpointer(); + getobtextstart(); + findnextcolon(); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + findnextcolon(); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + al = es.byte(si); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + usetext(); + cx = 400; + hangonp(); + putbackobstuff(); + return; +cantuse2: + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + di = 33; + bx = 100; + al = 63; + dl = 241; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + putbackobstuff(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::wheelsound() { + STACK_CHECK; + al = 17; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::runtap() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto tapwith; + withwhat(); + return; +tapwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto fillcupfromtap; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto cupfromtapfull; + cx = 300; + al = 56; + showpuztext(); + putbackobstuff(); + return; +fillcupfromtap: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'F'-'A'; + al = 8; + playchannel1(); + cx = 300; + al = 57; + showpuztext(); + putbackobstuff(); + return; +cupfromtapfull: + cx = 300; + al = 58; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::playguitar() { + STACK_CHECK; + al = 14; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::hotelcontrol() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 21); + if (!flags.z()) + goto notrightcont; + _cmp(data.byte(kMapx), 33); + if (!flags.z()) + goto notrightcont; + showfirstuse(); + putbackobstuff(); + return; +notrightcont: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::hotelbell() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::opentomb() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 35*2; + data.word(kReeltowatch) = 1; + data.word(kEndwatchreel) = 33; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usetrainer() { + STACK_CHECK; + getanyad(); + _cmp(es.byte(bx+2), 4); + if (!flags.z()) + goto notheldtrainer; + _inc(data.byte(kProgresspoints)); + makeworn(); + showseconduse(); + putbackobstuff(); + return; +notheldtrainer: + nothelderror(); +} + +void DreamGenContext::nothelderror() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + di = 64; + bx = 100; + al = 63; + ah = 1; + dl = 201; + printmessage2(); + worktoscreenm(); + cx = 50; + hangonp(); + putbackobstuff(); +} + +void DreamGenContext::usepipe() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto pipewith; + withwhat(); + return; +pipewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto fillcup; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto alreadyfull; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +fillcup: + cx = 300; + al = 36; + showpuztext(); + putbackobstuff(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'F'-'A'; + return; +alreadyfull: + cx = 300; + al = 35; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usefullcart() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + al = 2; + ah = data.byte(kRoomnum); + _add(ah, 6); + turnanypathon(); + data.byte(kManspath) = 4; + data.byte(kFacing) = 4; + data.byte(kTurntoface) = 4; + data.byte(kFinaldest) = 4; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + showfirstuse(); + data.word(kWatchingtime) = 72*2; + data.word(kReeltowatch) = 58; + data.word(kEndwatchreel) = 142; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useplinth() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto plinthwith; + withwhat(); + return; +plinthwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'D'; + ch = 'K'; + dl = 'E'; + dh = 'Y'; + compare(); + if (flags.z()) + goto isrightkey; + showfirstuse(); + putbackobstuff(); + return; +isrightkey: + _inc(data.byte(kProgresspoints)); + showseconduse(); + data.word(kWatchingtime) = 220; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 104; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = data.byte(kRoomafterdream); + data.byte(kNewlocation) = al; +} + +void DreamGenContext::chewy() { + STACK_CHECK; + showfirstuse(); + getanyad(); + es.byte(bx+2) = 255; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useladder() { + STACK_CHECK; + showfirstuse(); + _sub(data.byte(kMapx), 11); + findroominloc(); + data.byte(kFacing) = 6; + data.byte(kTurntoface) = 6; + data.byte(kManspath) = 0; + data.byte(kDestination) = 0; + data.byte(kFinaldest) = 0; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useladderb() { + STACK_CHECK; + showfirstuse(); + _add(data.byte(kMapx), 11); + findroominloc(); + data.byte(kFacing) = 2; + data.byte(kTurntoface) = 2; + data.byte(kManspath) = 1; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::slabdoora() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 13; + _cmp(data.byte(kDreamnumber), 3); + if (!flags.z()) + goto slabawrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 42; + data.byte(kNewlocation) = 47; + return; +slabawrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 34; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorb() { + STACK_CHECK; + _cmp(data.byte(kDreamnumber), 1); + if (!flags.z()) + goto slabbwrong; + al = 'S'; + ah = 'H'; + cl = 'L'; + ch = 'D'; + isryanholding(); + if (!flags.z()) + goto gotcrystal; + al = 44; + cx = 200; + showpuztext(); + putbackobstuff(); + return; +gotcrystal: + showfirstuse(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 44; + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 71; + data.byte(kNewlocation) = 47; + return; +slabbwrong: + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 44; + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 63; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoord() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 75; + _cmp(data.byte(kDreamnumber), 0); + if (!flags.z()) + goto slabcwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 102; + data.byte(kNewlocation) = 47; + return; +slabcwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 94; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorc() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 108; + _cmp(data.byte(kDreamnumber), 4); + if (!flags.z()) + goto slabdwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 135; + data.byte(kNewlocation) = 47; + return; +slabdwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 127; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoore() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 141; + _cmp(data.byte(kDreamnumber), 5); + if (!flags.z()) + goto slabewrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 168; + data.byte(kNewlocation) = 47; + return; +slabewrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 160; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorf() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 171; + _cmp(data.byte(kDreamnumber), 2); + if (!flags.z()) + goto slabfwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 197; + data.byte(kNewlocation) = 47; + return; +slabfwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 189; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::useslab() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto slabwith; + withwhat(); + return; +slabwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'J'; + ch = 'E'; + dl = 'W'; + dh = 'L'; + compare(); + if (flags.z()) + goto nextslab; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +nextslab: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kCommand); + push(ax); + removesetobject(); + ax = pop(); + _inc(al); + push(ax); + placesetobject(); + ax = pop(); + _cmp(al, 54); + if (!flags.z()) + goto notlastslab; + al = 0; + turnpathon(); + data.word(kWatchingtime) = 22; + data.word(kReeltowatch) = 35; + data.word(kEndwatchreel) = 48; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +notlastslab: + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usecart() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto cartwith; + withwhat(); + return; +cartwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'R'; + ch = 'O'; + dl = 'C'; + dh = 'K'; + compare(); + if (flags.z()) + goto nextcart; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +nextcart: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kCommand); + push(ax); + removesetobject(); + ax = pop(); + _inc(al); + placesetobject(); + _inc(data.byte(kProgresspoints)); + al = 17; + playchannel1(); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::useclearbox() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto clearboxwith; + withwhat(); + return; +clearboxwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'R'; + ch = 'A'; + dl = 'I'; + dh = 'L'; + compare(); + if (flags.z()) + goto openbox; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +openbox: + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 80; + data.word(kReeltowatch) = 67; + data.word(kEndwatchreel) = 105; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usecoveredbox() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 50; + data.word(kReeltowatch) = 41; + data.word(kEndwatchreel) = 66; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::userailing() { + STACK_CHECK; + showfirstuse(); + data.word(kWatchingtime) = 80; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 30; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + data.byte(kMandead) = 4; +} + +void DreamGenContext::useopenbox() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto openboxwith; + withwhat(); + return; +openboxwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto destoryopenbox; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto openboxwrong; + showfirstuse(); + return; +destoryopenbox: + _inc(data.byte(kProgresspoints)); + cx = 300; + al = 37; + showpuztext(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'E'-'A'; + data.word(kWatchingtime) = 140; + data.word(kReeltowatch) = 105; + data.word(kEndwatchreel) = 181; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + al = 4; + turnpathon(); + data.byte(kGetback) = 1; + return; +openboxwrong: + cx = 300; + al = 38; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::wearwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto wearingwatch; + showfirstuse(); + data.byte(kWatchon) = 1; + data.byte(kGetback) = 1; + getanyad(); + makeworn(); + return; +wearingwatch: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::wearshades() { + STACK_CHECK; + _cmp(data.byte(kShadeson), 1); + if (flags.z()) + goto wearingshades; + data.byte(kShadeson) = 1; + showfirstuse(); + data.byte(kGetback) = 1; + getanyad(); + makeworn(); + return; +wearingshades: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::sitdowninbar() { + STACK_CHECK; + _cmp(data.byte(kWatchmode), -1); + if (!flags.z()) + goto satdown; + showfirstuse(); + data.word(kWatchingtime) = 50; + data.word(kReeltowatch) = 55; + data.word(kEndwatchreel) = 71; + data.word(kReeltohold) = 73; + data.word(kEndofholdreel) = 83; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + return; +satdown: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usechurchhole() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.word(kWatchingtime) = 28; + data.word(kReeltowatch) = 13; + data.word(kEndwatchreel) = 26; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::usehole() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto holewith; + withwhat(); + return; +holewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'H'; + ch = 'N'; + dl = 'D'; + dh = 'A'; + compare(); + if (flags.z()) + goto righthand; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +righthand: + showfirstuse(); + al = 86; + removesetobject(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 255; + data.byte(kCanmovealtar) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usealtar() { + STACK_CHECK; + al = 'C'; + ah = 'N'; + cl = 'D'; + ch = 'A'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto thingsonaltar; + al = 'C'; + ah = 'N'; + cl = 'D'; + ch = 'B'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto thingsonaltar; + _cmp(data.byte(kCanmovealtar), 1); + if (flags.z()) + goto movealtar; + cx = 300; + al = 23; + showpuztext(); + data.byte(kGetback) = 1; + return; +movealtar: + _inc(data.byte(kProgresspoints)); + showseconduse(); + data.word(kWatchingtime) = 160; + data.word(kReeltowatch) = 81; + data.word(kEndwatchreel) = 174; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + al = 47; + bl = 52; + bh = 76; + cx = 32; + dx = 98; + setuptimeduse(); + data.byte(kGetback) = 1; + return; +thingsonaltar: + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::opentvdoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto tvdoorwith; + withwhat(); + return; +tvdoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'U'; + ch = 'L'; + dl = 'O'; + dh = 'K'; + compare(); + if (flags.z()) + goto keyontv; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyontv: + showfirstuse(); + data.byte(kLockstatus) = 0; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usedryer() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openlouis() { + STACK_CHECK; + al = 5; + ah = 2; + cl = 3; + ch = 8; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::nextcolon() { + STACK_CHECK; +lookcolon: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (!flags.z()) + goto lookcolon; +} + +void DreamGenContext::openyourneighbour() { + STACK_CHECK; + al = 255; + ah = 255; + cl = 255; + ch = 255; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewindow() { + STACK_CHECK; + _cmp(data.byte(kManspath), 6); + if (!flags.z()) + goto notonbalc; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.byte(kNewlocation) = 29; + data.byte(kGetback) = 1; + return; +notonbalc: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usebalcony() { + STACK_CHECK; + showfirstuse(); + al = 6; + turnpathon(); + al = 0; + turnpathoff(); + al = 1; + turnpathoff(); + al = 2; + turnpathoff(); + al = 3; + turnpathoff(); + al = 4; + turnpathoff(); + al = 5; + turnpathoff(); + _inc(data.byte(kProgresspoints)); + data.byte(kManspath) = 6; + data.byte(kDestination) = 6; + data.byte(kFinaldest) = 6; + findxyfrompath(); + switchryanoff(); + data.byte(kResetmanxy) = 1; + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 183; + data.word(kEndwatchreel) = 212; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::openryan() { + STACK_CHECK; + al = 5; + ah = 1; + cl = 0; + ch = 6; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openpoolboss() { + STACK_CHECK; + al = 5; + ah = 2; + cl = 2; + ch = 2; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openeden() { + STACK_CHECK; + al = 2; + ah = 8; + cl = 6; + ch = 5; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::opensarters() { + STACK_CHECK; + al = 7; + ah = 8; + cl = 3; + ch = 3; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::isitright() { + STACK_CHECK; + bx = data; + es = bx; + bx = 8573; + _cmp(es.byte(bx+0), al); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+1), ah); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+2), cl); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+3), ch); +} + +void DreamGenContext::drawitall() { + STACK_CHECK; + createpanel(); + drawfloor(); + printsprites(); + showicon(); +} + +void DreamGenContext::openhoteldoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto hoteldoorwith; + withwhat(); + return; +hoteldoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto keyonhotel1; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyonhotel1: + al = 16; + playchannel1(); + showfirstuse(); + data.byte(kLockstatus) = 0; + data.byte(kGetback) = 1; +} + +void DreamGenContext::openhoteldoor2() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto hoteldoorwith2; + withwhat(); + return; +hoteldoorwith2: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto keyonhotel2; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyonhotel2: + al = 16; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::grafittidoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto grafwith; + withwhat(); + return; +grafwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'P'; + dl = 'E'; + dh = 'N'; + compare(); + if (flags.z()) + goto dograf; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +dograf: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::trapdoor() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + switchryanoff(); + data.word(kWatchingtime) = 20*2; + data.word(kReeltowatch) = 181; + data.word(kEndwatchreel) = 197; + data.byte(kNewlocation) = 26; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::callhotellift() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + data.byte(kDestination) = 5; + data.byte(kFinaldest) = 5; + autosetwalk(); + al = 4; + turnpathon(); +} + +void DreamGenContext::calledenslift() { + STACK_CHECK; + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + al = 2; + turnpathon(); +} + +void DreamGenContext::calledensdlift() { + STACK_CHECK; + _cmp(data.byte(kLiftflag), 1); + if (flags.z()) + goto edensdhere; + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + al = 2; + turnpathon(); + return; +edensdhere: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usepoolreader() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto poolwith; + withwhat(); + return; +poolwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'M'; + ch = 'E'; + dl = 'M'; + dh = 'B'; + compare(); + if (flags.z()) + goto openpool; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +openpool: + _cmp(data.byte(kTalkedtoattendant), 1); + if (flags.z()) + goto canopenpool; + showseconduse(); + putbackobstuff(); + return; +canopenpool: + al = 17; + playchannel1(); + showfirstuse(); + data.byte(kCounttoopen) = 6; + data.byte(kGetback) = 1; +} + +void DreamGenContext::uselighter() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotlighterwith; + withwhat(); + return; +gotlighterwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'S'; + ch = 'M'; + dl = 'K'; + dh = 'E'; + compare(); + if (flags.z()) + goto cigarette; + showfirstuse(); + putbackobstuff(); + return; +cigarette: + cx = 300; + al = 9; + showpuztext(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 255; + data.byte(kGetback) = 1; +} + +void DreamGenContext::showseconduse() { + STACK_CHECK; + getobtextstart(); + nextcolon(); + nextcolon(); + nextcolon(); + usetext(); + cx = 400; + hangonp(); +} + +void DreamGenContext::usecardreader1() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader1with; + withwhat(); + return; +gotreader1with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto correctcard; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +correctcard: + _cmp(data.byte(kTalkedtosparky), 0); + if (flags.z()) + goto notyet; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto getscash; + cx = 300; + al = 17; + showpuztext(); + putbackobstuff(); + return; +getscash: + al = 16; + playchannel1(); + cx = 300; + al = 18; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kCard1money) = 12432; + data.byte(kGetback) = 1; + return; +notyet: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecardreader2() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader2with; + withwhat(); + return; +gotreader2with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto correctcard2; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +correctcard2: + _cmp(data.byte(kTalkedtoboss), 0); + if (flags.z()) + goto notyetboss; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto nocash; + _cmp(data.byte(kGunpassflag), 2); + if (flags.z()) + goto alreadygotnew; + al = 18; + playchannel1(); + cx = 300; + al = 19; + showpuztext(); + al = 94; + placesetobject(); + data.byte(kGunpassflag) = 1; + _sub(data.word(kCard1money), 2000); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +nocash: + cx = 300; + al = 20; + showpuztext(); + putbackobstuff(); + return; +alreadygotnew: + cx = 300; + al = 22; + showpuztext(); + putbackobstuff(); + return; +notyetboss: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecardreader3() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader3with; + withwhat(); + return; +gotreader3with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto rightcard; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +rightcard: + _cmp(data.byte(kTalkedtorecep), 0); + if (flags.z()) + goto notyetrecep; + _cmp(data.byte(kCardpassflag), 0); + if (!flags.z()) + goto alreadyusedit; + al = 16; + playchannel1(); + cx = 300; + al = 25; + showpuztext(); + _inc(data.byte(kProgresspoints)); + _sub(data.word(kCard1money), 8300); + data.byte(kCardpassflag) = 1; + data.byte(kGetback) = 1; + return; +alreadyusedit: + cx = 300; + al = 26; + showpuztext(); + putbackobstuff(); + return; +notyetrecep: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecashcard() { + STACK_CHECK; + getridofreels(); + loadkeypad(); + createpanel(); + showpanel(); + showexit(); + showman(); + di = 114; + bx = 120; + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + bx = 120-3; +_tmp1: + ds = data.word(kTempgraphics); + al = 39; + ah = 0; + showframe(); + ax = data.word(kCard1money); + moneypoke(); + getobtextstart(); + nextcolon(); + nextcolon(); + di = 36; + bx = 98; + dl = 241; + al = 0; + ah = 0; + printdirect(); + di = 160; + bx = 155; + es = cs; + si = 3474; + data.word(kCharshift) = 91*2+75; + al = 0; + ah = 0; + dl = 240; + printdirect(); + di = 187; + bx = 155; + es = cs; + si = 3479; + data.word(kCharshift) = 91*2+85; + al = 0; + ah = 0; + dl = 240; + printdirect(); + data.word(kCharshift) = 0; + worktoscreenm(); + cx = 400; + hangonp(); + getridoftemp(); + restorereels(); + putbackobstuff(); +} + +void DreamGenContext::lookatcard() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofreels(); + loadkeypad(); + createpanel2(); + di = 160; + bx = 80; + ds = data.word(kTempgraphics); + al = 42; + ah = 128; + showframe(); + getobtextstart(); + findnextcolon(); + findnextcolon(); + findnextcolon(); + di = 36; + bx = 124; + dl = 241; + al = 0; + ah = 0; + printdirect(); + push(es); + push(si); + worktoscreenm(); + cx = 280; + hangonw(); + createpanel2(); + di = 160; + bx = 80; + ds = data.word(kTempgraphics); + al = 42; + ah = 128; + showframe(); + si = pop(); + es = pop(); + di = 36; + bx = 130; + dl = 241; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); + cx = 200; + hangonw(); + data.byte(kManisoffscreen) = 0; + getridoftemp(); + restorereels(); + putbackobstuff(); +} + +void DreamGenContext::moneypoke() { + STACK_CHECK; + bx = 3474; + cl = 48-1; +numberpoke0: + _inc(cl); + _sub(ax, 10000); + if (!flags.c()) + goto numberpoke0; + _add(ax, 10000); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke1: + _inc(cl); + _sub(ax, 1000); + if (!flags.c()) + goto numberpoke1; + _add(ax, 1000); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke2: + _inc(cl); + _sub(ax, 100); + if (!flags.c()) + goto numberpoke2; + _add(ax, 100); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke3: + _inc(cl); + _sub(ax, 10); + if (!flags.c()) + goto numberpoke3; + _add(ax, 10); + cs.byte(bx) = cl; + bx = 3479; + _add(al, 48); + cs.byte(bx) = al; +} + +void DreamGenContext::usecontrol() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotcontrolwith; + withwhat(); + return; +gotcontrolwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto rightkey; + _cmp(data.byte(kReallocation), 21); + if (!flags.z()) + goto balls; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto jimmycontrols; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto axeoncontrols; +balls: + showfirstuse(); + putbackobstuff(); + return; +rightkey: + al = 16; + playchannel1(); + _cmp(data.byte(kLocation), 21); + if (flags.z()) + goto goingdown; + cx = 300; + al = 0; + showpuztext(); + data.byte(kNewlocation) = 21; + data.byte(kCounttoclose) = 8; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +goingdown: + cx = 300; + al = 3; + showpuztext(); + data.byte(kNewlocation) = 30; + data.byte(kCounttoclose) = 8; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +jimmycontrols: + al = 50; + placesetobject(); + al = 51; + placesetobject(); + al = 26; + placesetobject(); + al = 30; + placesetobject(); + al = 16; + removesetobject(); + al = 17; + removesetobject(); + al = 14; + playchannel1(); + cx = 300; + al = 10; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +axeoncontrols: + cx = 300; + al = 16; + showpuztext(); + _inc(data.byte(kProgresspoints)); + putbackobstuff(); +} + +void DreamGenContext::usehatch() { + STACK_CHECK; + showfirstuse(); + data.byte(kNewlocation) = 40; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewire() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotwirewith; + withwhat(); + return; +gotwirewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto wireknife; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto wireaxe; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +wireaxe: + cx = 300; + al = 16; + showpuztext(); + putbackobstuff(); + return; +wireknife: + al = 51; + removesetobject(); + al = 52; + placesetobject(); + cx = 300; + al = 11; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usehandle() { + STACK_CHECK; + al = 'C'; + ah = 'U'; + cl = 'T'; + ch = 'W'; + findsetobject(); + al = es.byte(bx+58); + _cmp(al, 255); + if (!flags.z()) + goto havecutwire; + cx = 300; + al = 12; + showpuztext(); + data.byte(kGetback) = 1; + return; +havecutwire: + cx = 300; + al = 13; + showpuztext(); + data.byte(kNewlocation) = 22; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator1() { + STACK_CHECK; + showfirstuse(); + selectlocation(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::showfirstuse() { + STACK_CHECK; + getobtextstart(); + findnextcolon(); + findnextcolon(); + usetext(); + cx = 400; + hangonp(); +} + +void DreamGenContext::useelevator3() { + STACK_CHECK; + showfirstuse(); + data.byte(kCounttoclose) = 20; + data.byte(kNewlocation) = 34; + data.word(kReeltowatch) = 46; + data.word(kEndwatchreel) = 63; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator4() { + STACK_CHECK; + showfirstuse(); + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 11; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kCounttoclose) = 20; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + data.byte(kNewlocation) = 24; +} + +void DreamGenContext::useelevator2() { + STACK_CHECK; + _cmp(data.byte(kLocation), 23); + if (flags.z()) + goto inpoolhall; + showfirstuse(); + data.byte(kNewlocation) = 23; + data.byte(kCounttoclose) = 20; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +inpoolhall: + showfirstuse(); + data.byte(kNewlocation) = 31; + data.byte(kCounttoclose) = 20; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator5() { + STACK_CHECK; + al = 4; + placesetobject(); + al = 0; + removesetobject(); + data.byte(kNewlocation) = 20; + data.word(kWatchingtime) = 80; + data.byte(kLiftflag) = 1; + data.byte(kCounttoclose) = 8; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usekey() { + STACK_CHECK; + _cmp(data.byte(kLocation), 5); + if (flags.z()) + goto usekey1; + _cmp(data.byte(kLocation), 30); + if (flags.z()) + goto usekey1; + _cmp(data.byte(kLocation), 21); + if (flags.z()) + goto usekey2; + cx = 200; + al = 1; + showpuztext(); + putbackobstuff(); + return; +usekey1: + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto wrongroom1; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto wrongroom1; + cx = 300; + al = 0; + showpuztext(); + data.byte(kCounttoclose) = 100; + data.byte(kGetback) = 1; + return; +usekey2: + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto wrongroom1; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto wrongroom1; + cx = 300; + al = 3; + showpuztext(); + data.byte(kNewlocation) = 30; + al = 2; + fadescreendown(); + showfirstuse(); + putbackobstuff(); + return; +wrongroom1: + cx = 200; + al = 2; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usestereo() { + STACK_CHECK; + _cmp(data.byte(kLocation), 0); + if (flags.z()) + goto stereook; + cx = 400; + al = 4; + showpuztext(); + putbackobstuff(); + return; +stereook: + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto stereonotok; + _cmp(data.byte(kMapy), 0); + if (flags.z()) + goto stereook2; +stereonotok: + cx = 400; + al = 5; + showpuztext(); + putbackobstuff(); + return; +stereook2: + al = 'C'; + ah = 'D'; + cl = 'P'; + ch = 'L'; + findsetobject(); + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (!flags.z()) + goto cdinside; + al = 6; + cx = 400; + showpuztext(); + putbackobstuff(); + getanyad(); + al = 255; + es.byte(bx+10) = al; + return; +cdinside: + getanyad(); + al = es.byte(bx+10); + _xor(al, 1); + es.byte(bx+10) = al; + _cmp(al, 255); + if (flags.z()) + goto stereoon; + al = 7; + cx = 400; + showpuztext(); + putbackobstuff(); + return; +stereoon: + al = 8; + cx = 400; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usecooker() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + checkinside(); + _cmp(cl, (114)); + if (!flags.z()) + goto foodinside; + showfirstuse(); + putbackobstuff(); + return; +foodinside: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::useaxe() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 22); + if (!flags.z()) + goto notinpool; + _cmp(data.byte(kMapy), 10); + if (flags.z()) + goto axeondoor; + showseconduse(); + _inc(data.byte(kProgresspoints)); + data.byte(kLastweapon) = 2; + data.byte(kGetback) = 1; + removeobfrominv(); + return; +notinpool: + showfirstuse(); + return; +/*continuing to unbounded code: axeondoor from useelvdoor:19-30*/ +axeondoor: + al = 15; + cx = 300; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 46*2; + data.word(kReeltowatch) = 31; + data.word(kEndwatchreel) = 77; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelvdoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotdoorwith; + withwhat(); + return; +gotdoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto axeondoor; + al = 14; + cx = 300; + showpuztext(); + putbackobstuff(); + return; +axeondoor: + al = 15; + cx = 300; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 46*2; + data.word(kReeltowatch) = 31; + data.word(kEndwatchreel) = 77; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::withwhat() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + showexit(); + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + es = cs; + di = 5847; + copyname(); + di = 100; + bx = 21; + dl = 200; + al = 63; + ah = 2; + printmessage2(); + di = data.word(kLastxpos); + _add(di, 5); + bx = 21; + es = cs; + si = 5847; + dl = 220; + al = 0; + ah = 0; + printdirect(); + di = data.word(kLastxpos); + _add(di, 5); + bx = 21; + dl = 200; + al = 63; + ah = 3; + printmessage2(); + fillryan(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kInvopen) = 2; +} + +void DreamGenContext::selectob() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canselectob; + blank(); + return; +canselectob: + data.byte(kWithobject) = al; + data.byte(kWithtype) = ah; + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto diffsub3; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadyselob; + data.byte(kCommandtype) = 221; +diffsub3: + data.word(kOldsubject) = ax; + bx = ax; + al = 0; + commandwithob(); +alreadyselob: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notselob) */; + _and(ax, 1); + if (!flags.z()) + goto doselob; + return; +doselob: + delpointer(); + data.byte(kInvopen) = 0; + useroutine(); +} + +void DreamGenContext::compare() { + STACK_CHECK; + _sub(dl, 'A'); + _sub(dh, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + push(cx); + push(dx); + getanyaddir(); + dx = pop(); + cx = pop(); + _cmp(es.word(bx+12), cx); + if (!flags.z()) + return /* (comparefin) */; + _cmp(es.word(bx+14), dx); +} + +void DreamGenContext::findsetobject() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kSetdat); + bx = 0; + dl = 0; +findsetloop: + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofind; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofind; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofind; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofind; + al = dl; + return; +nofind: + _add(bx, 64); + _inc(dl); + _cmp(dl, 128); + if (!flags.z()) + goto findsetloop; + al = dl; +} + +void DreamGenContext::findexobject() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kExtras); + bx = (0+2080+30000); + dl = 0; +findexloop: + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofindex; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofindex; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofindex; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofindex; + al = dl; + return; +nofindex: + _add(bx, 16); + _inc(dl); + _cmp(dl, (114)); + if (!flags.z()) + goto findexloop; + al = dl; +} + +void DreamGenContext::isryanholding() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kExtras); + bx = (0+2080+30000); + dl = 0; +searchinv: + _cmp(es.byte(bx+2), 4); + if (!flags.z()) + goto nofindininv; + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofindininv; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofindininv; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofindininv; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofindininv; + al = dl; + _cmp(al, (114)); + return; +nofindininv: + _add(bx, 16); + _inc(dl); + _cmp(dl, (114)); + if (!flags.z()) + goto searchinv; + al = dl; + _cmp(al, (114)); +} + +void DreamGenContext::checkinside() { + STACK_CHECK; + es = data.word(kExtras); + bx = (0+2080+30000); + cl = 0; +insideloop: + _cmp(al, es.byte(bx+3)); + if (!flags.z()) + goto notfoundinside; + _cmp(ah, es.byte(bx+2)); + if (!flags.z()) + goto notfoundinside; + return; +notfoundinside: + _add(bx, 16); + _inc(cl); + _cmp(cl, (114)); + if (!flags.z()) + goto insideloop; +} + +void DreamGenContext::usetext() { + STACK_CHECK; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + si = pop(); + es = pop(); + di = 36; + bx = 104; + dl = 241; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); +} + +void DreamGenContext::putbackobstuff() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + obicons(); + showexit(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::showpuztext() { + STACK_CHECK; + push(cx); + findpuztext(); + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + si = pop(); + es = pop(); + di = 36; + bx = 104; + dl = 241; + ah = 0; + printdirect(); + worktoscreenm(); + cx = pop(); + hangonp(); +} + +void DreamGenContext::findpuztext() { + STACK_CHECK; + ah = 0; + si = ax; + _add(si, si); + es = data.word(kPuzzletext); + ax = es.word(si); + _add(ax, (66*2)); + si = ax; +} + +void DreamGenContext::placesetobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 0; + ch = 0; + findormake(); + getsetad(); + es.byte(bx+58) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::removesetobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 255; + ch = 0; + findormake(); + getsetad(); + es.byte(bx+58) = 255; + bx = pop(); + es = pop(); +} + +void DreamGenContext::issetobonmap() { + STACK_CHECK; + push(es); + push(bx); + getsetad(); + al = es.byte(bx+58); + bx = pop(); + es = pop(); + _cmp(al, 0); +} + +void DreamGenContext::placefreeobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 0; + ch = 1; + findormake(); + getfreead(); + es.byte(bx+2) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::removefreeobject() { + STACK_CHECK; + push(es); + push(bx); + getfreead(); + es.byte(bx+2) = 255; + bx = pop(); + es = pop(); +} + +void DreamGenContext::findormake() { + STACK_CHECK; + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + push(ax); + es = data.word(kBuffers); + ah = data.byte(kReallocation); +changeloop: + _cmp(es.byte(bx), 255); + if (flags.z()) + goto haventfound; + _cmp(ax, es.word(bx)); + if (!flags.z()) + goto nofoundchange; + _cmp(ch, es.byte(bx+3)); + if (flags.z()) + goto foundchange; +nofoundchange: + _add(bx, 4); + goto changeloop; +foundchange: + ax = pop(); + es.byte(bx+2) = cl; + return; +haventfound: + es.word(bx) = ax; + es.word(bx+2) = cx; + ax = pop(); +} + +void DreamGenContext::switchryanon() { + STACK_CHECK; + data.byte(kRyanon) = 255; +} + +void DreamGenContext::switchryanoff() { + STACK_CHECK; + data.byte(kRyanon) = 1; +} + +void DreamGenContext::setallchanges() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); +setallloop: + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + return /* (endsetloop) */; + cx = es.word(bx+2); + _add(bx, 4); + _cmp(ah, data.byte(kReallocation)); + if (!flags.z()) + goto setallloop; + push(es); + push(bx); + dochange(); + bx = pop(); + es = pop(); + goto setallloop; +} + +void DreamGenContext::dochange() { + STACK_CHECK; + _cmp(ch, 0); + if (flags.z()) + goto object; + _cmp(ch, 1); + if (flags.z()) + goto freeobject; + push(cx); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + push(ax); + al = ch; + _sub(al, 100); + ah = 0; + cx = 144; + _mul(cx); + bx = pop(); + _add(bx, ax); + _add(bx, (0)); + es = data.word(kReels); + cx = pop(); + es.byte(bx+6) = cl; + return; +object: + push(cx); + getsetad(); + cx = pop(); + es.byte(bx+58) = cl; + return; +freeobject: + push(cx); + getfreead(); + cx = pop(); + _cmp(es.byte(bx+2), 255); + if (!flags.z()) + return /* (beenpickedup) */; + es.byte(bx+2) = cl; +} + +void DreamGenContext::autoappear() { + STACK_CHECK; + _cmp(data.byte(kLocation), 32); + if (!flags.z()) + goto notinalley; + al = 5; + resetlocation(); + al = 10; + setlocation(); + data.byte(kDestpos) = 10; + return; +notinalley: + _cmp(data.byte(kReallocation), 24); + if (!flags.z()) + goto notinedens; + _cmp(data.byte(kGeneraldead), 1); + if (!flags.z()) + goto edenspart2; + _inc(data.byte(kGeneraldead)); + al = 44; + placesetobject(); + al = 18; + placesetobject(); + al = 93; + placesetobject(); + al = 92; + removesetobject(); + al = 55; + removesetobject(); + al = 75; + removesetobject(); + al = 84; + removesetobject(); + al = 85; + removesetobject(); + return; +edenspart2: + _cmp(data.byte(kSartaindead), 1); + if (!flags.z()) + return /* (notedens2) */; + al = 44; + removesetobject(); + al = 93; + removesetobject(); + al = 55; + placesetobject(); + _inc(data.byte(kSartaindead)); + return; +notinedens: + _cmp(data.byte(kReallocation), 25); + if (!flags.z()) + goto notonsartroof; + data.byte(kNewsitem) = 3; + al = 6; + resetlocation(); + al = 11; + setlocation(); + data.byte(kDestpos) = 11; + return; +notonsartroof: + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + return /* (notinlouiss) */; + _cmp(data.byte(kRockstardead), 0); + if (flags.z()) + return /* (notinlouiss) */; + al = 23; + placesetobject(); +} + +void DreamGenContext::getundertimed() { + STACK_CHECK; + al = data.byte(kTimedy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(al, 3); +_tmp1: + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + ch = (30); + cl = 240; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiget(); +} + +void DreamGenContext::putundertimed() { + STACK_CHECK; + al = data.byte(kTimedy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(al, 3); +_tmp1: + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + ch = (30); + cl = 240; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiput(); +} + +void DreamGenContext::dumptimedtext() { + STACK_CHECK; + _cmp(data.byte(kNeedtodumptimed), 1); + if (!flags.z()) + return /* (nodumptimed) */; + al = data.byte(kTimedy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(al, 3); +_tmp1: + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + cl = 240; + ch = (30); + multidump(); + data.byte(kNeedtodumptimed) = 0; +} + +void DreamGenContext::setuptimeduse() { + STACK_CHECK; + _cmp(data.word(kTimecount), 0); + if (!flags.z()) + return /* (cantsetup) */; + data.byte(kTimedy) = bh; + data.byte(kTimedx) = bl; + data.word(kCounttotimed) = cx; + _add(dx, cx); + data.word(kTimecount) = dx; + bl = al; + bh = 0; + _add(bx, bx); + es = data.word(kPuzzletext); + cx = (66*2); + ax = es.word(bx); + _add(ax, cx); + bx = ax; + data.word(kTimedseg) = es; + data.word(kTimedoffset) = bx; +} + +void DreamGenContext::setuptimedtemp() { + STACK_CHECK; + _cmp(ah, 0); + if (flags.z()) + goto notloadspeech3; + push(ax); + push(bx); + push(cx); + push(dx); + dl = 'T'; + dh = ah; + cl = 'T'; + ah = 0; + loadspeech(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + goto _tmp1; + al = 50+12; + playchannel1(); +_tmp1: + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + goto notloadspeech3; + _cmp(data.byte(kSubtitles), 1); + if (flags.z()) + goto notloadspeech3; + return; +notloadspeech3: + _cmp(data.word(kTimecount), 0); + if (!flags.z()) + return /* (cantsetup2) */; + data.byte(kTimedy) = bh; + data.byte(kTimedx) = bl; + data.word(kCounttotimed) = cx; + _add(dx, cx); + data.word(kTimecount) = dx; + bl = al; + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + cx = (66*2); + ax = es.word(bx); + _add(ax, cx); + bx = ax; + data.word(kTimedseg) = es; + data.word(kTimedoffset) = bx; +} + +void DreamGenContext::usetimedtext() { + STACK_CHECK; + _cmp(data.word(kTimecount), 0); + if (flags.z()) + return /* (notext) */; + _dec(data.word(kTimecount)); + _cmp(data.word(kTimecount), 0); + if (flags.z()) + goto deltimedtext; + ax = data.word(kTimecount); + _cmp(ax, data.word(kCounttotimed)); + if (flags.z()) + goto firsttimed; + if (!flags.c()) + return /* (notext) */; + goto notfirsttimed; +firsttimed: + getundertimed(); +notfirsttimed: + bl = data.byte(kTimedy); + bh = 0; + al = data.byte(kTimedx); + ah = 0; + di = ax; + es = data.word(kTimedseg); + si = data.word(kTimedoffset); + dl = 237; + ah = 0; + printdirect(); + data.byte(kNeedtodumptimed) = 1; + return; +deltimedtext: + putundertimed(); + data.byte(kNeedtodumptimed) = 1; +} + +void DreamGenContext::edenscdplayer() { + STACK_CHECK; + showfirstuse(); + data.word(kWatchingtime) = 18*2; + data.word(kReeltowatch) = 25; + data.word(kEndwatchreel) = 42; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewall() { + STACK_CHECK; + showfirstuse(); + _cmp(data.byte(kManspath), 3); + if (flags.z()) + goto gobackover; + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 2; + data.word(kEndwatchreel) = 31; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = 3; + turnpathon(); + al = 4; + turnpathon(); + al = 0; + turnpathoff(); + al = 1; + turnpathoff(); + al = 2; + turnpathoff(); + al = 5; + turnpathoff(); + data.byte(kManspath) = 3; + data.byte(kFinaldest) = 3; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + switchryanoff(); + return; +gobackover: + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 34; + data.word(kEndwatchreel) = 60; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = 3; + turnpathoff(); + al = 4; + turnpathoff(); + al = 0; + turnpathon(); + al = 1; + turnpathon(); + al = 2; + turnpathon(); + al = 5; + turnpathon(); + data.byte(kManspath) = 5; + data.byte(kFinaldest) = 5; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + switchryanoff(); +} + +void DreamGenContext::usechurchgate() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gatewith; + withwhat(); + return; +gatewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'T'; + dh = 'T'; + compare(); + if (flags.z()) + goto cutgate; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +cutgate: + showfirstuse(); + data.word(kWatchingtime) = 64*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 70; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + al = 3; + turnpathon(); + _cmp(data.byte(kAidedead), 0); + if (flags.z()) + return /* (notopenchurch) */; + al = 2; + turnpathon(); +} + +void DreamGenContext::usegun() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto istakengun; + showseconduse(); + putbackobstuff(); + return; +istakengun: + _cmp(data.byte(kReallocation), 22); + if (!flags.z()) + goto notinpoolroom; + cx = 300; + al = 34; + showpuztext(); + data.byte(kLastweapon) = 1; + data.byte(kCombatcount) = 39; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notinpoolroom: + _cmp(data.byte(kReallocation), 25); + if (!flags.z()) + goto nothelicopter; + cx = 300; + al = 34; + showpuztext(); + data.byte(kLastweapon) = 1; + data.byte(kCombatcount) = 19; + data.byte(kGetback) = 1; + data.byte(kDreamnumber) = 2; + data.byte(kRoomafterdream) = 38; + data.byte(kSartaindead) = 1; + _inc(data.byte(kProgresspoints)); + return; +nothelicopter: + _cmp(data.byte(kReallocation), 27); + if (!flags.z()) + goto notinrockroom; + cx = 300; + al = 46; + showpuztext(); + data.byte(kPointermode) = 2; + data.byte(kRockstardead) = 1; + data.byte(kLastweapon) = 1; + data.byte(kNewsitem) = 1; + data.byte(kGetback) = 1; + data.byte(kRoomafterdream) = 32; + data.byte(kDreamnumber) = 0; + _inc(data.byte(kProgresspoints)); + return; +notinrockroom: + _cmp(data.byte(kReallocation), 8); + if (!flags.z()) + goto notbystudio; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notbystudio; + _cmp(data.byte(kMapy), 40); + if (!flags.z()) + goto notbystudio; + al = 92; + issetobonmap(); + if (flags.z()) + goto notbystudio; + _cmp(data.byte(kManspath), 9); + if (flags.z()) + goto notbystudio; + data.byte(kDestination) = 9; + data.byte(kFinaldest) = 9; + autosetwalk(); + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notbystudio: + _cmp(data.byte(kReallocation), 6); + if (!flags.z()) + goto notsarters; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto notsarters; + _cmp(data.byte(kMapy), 20); + if (!flags.z()) + goto notsarters; + al = 5; + issetobonmap(); + if (!flags.z()) + goto notsarters; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + autosetwalk(); + al = 5; + removesetobject(); + al = 6; + placesetobject(); + al = 1; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); + data.byte(kLiftflag) = 1; + data.word(kWatchingtime) = 40*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 43; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notsarters: + _cmp(data.byte(kReallocation), 29); + if (!flags.z()) + goto notaide; + data.byte(kGetback) = 1; + al = 13; + resetlocation(); + al = 12; + setlocation(); + data.byte(kDestpos) = 12; + data.byte(kDestination) = 2; + data.byte(kFinaldest) = 2; + autosetwalk(); + data.word(kWatchingtime) = 164*2; + data.word(kReeltowatch) = 3; + data.word(kEndwatchreel) = 164; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kAidedead) = 1; + data.byte(kDreamnumber) = 3; + data.byte(kRoomafterdream) = 33; + _inc(data.byte(kProgresspoints)); + return; +notaide: + _cmp(data.byte(kReallocation), 23); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kMapx), 0); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kMapy), 50); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kManspath), 5); + if (flags.z()) + goto pathokboss; + data.byte(kDestination) = 5; + data.byte(kFinaldest) = 5; + autosetwalk(); +pathokboss: + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + return; +notwithboss: + _cmp(data.byte(kReallocation), 8); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kManspath), 2); + if (flags.z()) + goto pathoktv; + data.byte(kDestination) = 2; + data.byte(kFinaldest) = 2; + autosetwalk(); +pathoktv: + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + return; +nottvsoldier: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::useshield() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 20); + if (!flags.z()) + goto notinsartroom; + _cmp(data.byte(kCombatcount), 0); + if (flags.z()) + goto notinsartroom; + data.byte(kLastweapon) = 3; + showseconduse(); + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + removeobfrominv(); + return; +notinsartroom: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usebuttona() { + STACK_CHECK; + al = 95; + issetobonmap(); + if (flags.z()) + goto donethisbit; + showfirstuse(); + al = 0; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); + al = 9; + removesetobject(); + al = 95; + placesetobject(); + data.word(kWatchingtime) = 15*2; + data.word(kReeltowatch) = 71; + data.word(kEndwatchreel) = 85; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +donethisbit: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::useplate() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto platewith; + withwhat(); + return; +platewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'S'; + ch = 'C'; + dl = 'R'; + dh = 'W'; + compare(); + if (flags.z()) + goto unscrewplate; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto triedknife; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +unscrewplate: + al = 20; + playchannel1(); + showfirstuse(); + al = 28; + placesetobject(); + al = 24; + placesetobject(); + al = 25; + removesetobject(); + al = 0; + placefreeobject(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +triedknife: + cx = 300; + al = 54; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usewinch() { + STACK_CHECK; + al = 40; + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (flags.z()) + goto nowinch; + al = cl; + ah = 4; + cl = 'F'; + ch = 'U'; + dl = 'S'; + dh = 'E'; + compare(); + if (!flags.z()) + goto nowinch; + data.word(kWatchingtime) = 217*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 217; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kDestpos) = 1; + data.byte(kNewlocation) = 45; + data.byte(kDreamnumber) = 1; + data.byte(kRoomafterdream) = 44; + data.byte(kGeneraldead) = 1; + data.byte(kNewsitem) = 2; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +nowinch: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::entercode() { + STACK_CHECK; + data.word(kKeypadax) = ax; + data.word(kKeypadcx) = cx; + getridofreels(); + loadkeypad(); + createpanel(); + showicon(); + showouterpad(); + showkeypad(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.word(kPresspointer) = 0; + data.byte(kGetback) = 0; +keypadloop: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto numberright; + delpointer(); + readmouse(); + showkeypad(); + showpointer(); + vsync(); + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + goto nopresses; + _dec(data.byte(kPresscount)); + goto afterpress; +nopresses: + data.byte(kPressed) = 255; + data.byte(kGraphicpress) = 255; + vsync(); +afterpress: + dumppointer(); + dumpkeypad(); + dumptextline(); + bx = 3482; + checkcoords(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto numberright; + _cmp(data.byte(kLightcount), 1); + if (!flags.z()) + goto notendkey; + _cmp(data.byte(kLockstatus), 0); + if (flags.z()) + goto numberright; + goto keypadloop; +notendkey: + _cmp(data.byte(kPresscount), 40); + if (!flags.z()) + goto keypadloop; + addtopresslist(); + _cmp(data.byte(kPressed), 11); + if (!flags.z()) + goto keypadloop; + ax = data.word(kKeypadax); + cx = data.word(kKeypadcx); + isitright(); + if (!flags.z()) + goto incorrect; + data.byte(kLockstatus) = 0; + al = 11; + playchannel1(); + data.byte(kLightcount) = 120; + data.word(kPresspointer) = 0; + goto keypadloop; +incorrect: + al = 11; + playchannel1(); + data.byte(kLightcount) = 120; + data.word(kPresspointer) = 0; + goto keypadloop; +numberright: + data.byte(kManisoffscreen) = 0; + getridoftemp(); + restorereels(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::loadkeypad() { + STACK_CHECK; + dx = 1948; + loadintotemp(); +} + +void DreamGenContext::quitkey() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyqk; + data.byte(kCommandtype) = 222; + al = 4; + commandonly(); +alreadyqk: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notqk) */; + _and(ax, 1); + if (!flags.z()) + goto doqk; + return; +doqk: + data.byte(kGetback) = 1; +} + +void DreamGenContext::addtopresslist() { + STACK_CHECK; + _cmp(data.word(kPresspointer), 5); + if (flags.z()) + return /* (nomorekeys) */; + al = data.byte(kPressed); + _cmp(al, 10); + if (!flags.z()) + goto not10; + al = 0; +not10: + bx = data.word(kPresspointer); + dx = data; + es = dx; + _add(bx, 8573); + es.byte(bx) = al; + _inc(data.word(kPresspointer)); +} + +void DreamGenContext::buttonone() { + STACK_CHECK; + cl = 1; + buttonpress(); +} + +void DreamGenContext::buttontwo() { + STACK_CHECK; + cl = 2; + buttonpress(); +} + +void DreamGenContext::buttonthree() { + STACK_CHECK; + cl = 3; + buttonpress(); +} + +void DreamGenContext::buttonfour() { + STACK_CHECK; + cl = 4; + buttonpress(); +} + +void DreamGenContext::buttonfive() { + STACK_CHECK; + cl = 5; + buttonpress(); +} + +void DreamGenContext::buttonsix() { + STACK_CHECK; + cl = 6; + buttonpress(); +} + +void DreamGenContext::buttonseven() { + STACK_CHECK; + cl = 7; + buttonpress(); +} + +void DreamGenContext::buttoneight() { + STACK_CHECK; + cl = 8; + buttonpress(); +} + +void DreamGenContext::buttonnine() { + STACK_CHECK; + cl = 9; + buttonpress(); +} + +void DreamGenContext::buttonnought() { + STACK_CHECK; + cl = 10; + buttonpress(); +} + +void DreamGenContext::buttonenter() { + STACK_CHECK; + cl = 11; + buttonpress(); +} + +void DreamGenContext::buttonpress() { + STACK_CHECK; + ch = cl; + _add(ch, 100); + _cmp(data.byte(kCommandtype), ch); + if (flags.z()) + goto alreadyb; + data.byte(kCommandtype) = ch; + al = cl; + _add(al, 4); + push(cx); + commandonly(); + cx = pop(); +alreadyb: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notb) */; + _and(ax, 1); + if (!flags.z()) + goto dob; + return; +dob: + data.byte(kPressed) = cl; + _add(cl, 21); + data.byte(kGraphicpress) = cl; + data.byte(kPresscount) = 40; + _cmp(cl, 32); + if (flags.z()) + return /* (nonoise) */; + al = 10; + playchannel1(); +} + +void DreamGenContext::showouterpad() { + STACK_CHECK; + di = (36+112)-3; + bx = (72)-4; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = (36+112)+74; + bx = (72)+76; + ds = data.word(kTempgraphics); + al = 37; + ah = 0; + showframe(); +} + +void DreamGenContext::showkeypad() { + STACK_CHECK; + al = 22; + di = (36+112)+9; + bx = (72)+5; + singlekey(); + al = 23; + di = (36+112)+31; + bx = (72)+5; + singlekey(); + al = 24; + di = (36+112)+53; + bx = (72)+5; + singlekey(); + al = 25; + di = (36+112)+9; + bx = (72)+23; + singlekey(); + al = 26; + di = (36+112)+31; + bx = (72)+23; + singlekey(); + al = 27; + di = (36+112)+53; + bx = (72)+23; + singlekey(); + al = 28; + di = (36+112)+9; + bx = (72)+41; + singlekey(); + al = 29; + di = (36+112)+31; + bx = (72)+41; + singlekey(); + al = 30; + di = (36+112)+53; + bx = (72)+41; + singlekey(); + al = 31; + di = (36+112)+9; + bx = (72)+59; + singlekey(); + al = 32; + di = (36+112)+31; + bx = (72)+59; + singlekey(); + _cmp(data.byte(kLightcount), 0); + if (flags.z()) + return /* (notenter) */; + _dec(data.byte(kLightcount)); + al = 36; + bx = (72)-1+63; + _cmp(data.byte(kLockstatus), 0); + if (!flags.z()) + goto changelight; + al = 41; + bx = (72)+4+63; +changelight: + _cmp(data.byte(kLightcount), 60); + if (flags.c()) + goto gotlight; + _cmp(data.byte(kLightcount), 100); + if (!flags.c()) + goto gotlight; + _dec(al); +gotlight: + ds = data.word(kTempgraphics); + ah = 0; + di = (36+112)+60; + showframe(); +} + +void DreamGenContext::singlekey() { + STACK_CHECK; + _cmp(data.byte(kGraphicpress), al); + if (!flags.z()) + goto gotkey; + _add(al, 11); + _cmp(data.byte(kPresscount), 8); + if (!flags.c()) + goto gotkey; + _sub(al, 11); +gotkey: + ds = data.word(kTempgraphics); + _sub(al, 20); + ah = 0; + showframe(); +} + +void DreamGenContext::dumpkeypad() { + STACK_CHECK; + di = (36+112)-3; + bx = (72)-4; + cl = 120; + ch = 90; + multidump(); +} + +void DreamGenContext::usemenu() { + STACK_CHECK; + getridofreels(); + loadmenu(); + createpanel(); + showpanel(); + showicon(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + al = 4; + ah = 0; + di = (80+40)-48; + bx = (60)-4; + ds = data.word(kTempgraphics2); + showframe(); + getundermenu(); + al = 5; + ah = 0; + di = (80+40)+54; + bx = (60)+72; + ds = data.word(kTempgraphics2); + showframe(); + worktoscreenm(); + data.byte(kGetback) = 0; +menuloop: + delpointer(); + putundermenu(); + showmenu(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumpmenu(); + dumptextline(); + bx = 3614; + checkcoords(); + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto menuloop; + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + getridoftemp2(); + restorereels(); + worktoscreenm(); +} + +void DreamGenContext::dumpmenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + multidump(); +} + +void DreamGenContext::getundermenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiget(); +} + +void DreamGenContext::putundermenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiput(); +} + +void DreamGenContext::showoutermenu() { + STACK_CHECK; + al = 40; + ah = 0; + di = (80+40)-34; + bx = (60)-40; + ds = data.word(kTempgraphics); + showframe(); + al = 41; + ah = 0; + di = (80+40)+64-34; + bx = (60)-40; + ds = data.word(kTempgraphics); + showframe(); + al = 42; + ah = 0; + di = (80+40)-26; + bx = (60)+57-40; + ds = data.word(kTempgraphics); + showframe(); + al = 43; + ah = 0; + di = (80+40)+64-26; + bx = (60)+57-40; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::showmenu() { + STACK_CHECK; + _inc(data.byte(kMenucount)); + _cmp(data.byte(kMenucount), 37*2); + if (!flags.z()) + goto menuframeok; + data.byte(kMenucount) = 0; +menuframeok: + al = data.byte(kMenucount); + _shr(al, 1); + ah = 0; + di = (80+40); + bx = (60); + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::loadmenu() { + STACK_CHECK; + dx = 1832; + loadintotemp(); + dx = 1987; + loadintotemp2(); +} + +void DreamGenContext::viewfolder() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofall(); + loadfolder(); + data.byte(kFolderpage) = 0; + showfolder(); + worktoscreenm(); + data.byte(kGetback) = 0; +folderloop: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3636; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto folderloop; + data.byte(kManisoffscreen) = 0; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + getridoftempcharset(); + restoreall(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::nextfolder() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 12); + if (!flags.z()) + goto cannextf; + blank(); + return; +cannextf: + _cmp(data.byte(kCommandtype), 201); + if (flags.z()) + goto alreadynextf; + data.byte(kCommandtype) = 201; + al = 16; + commandonly(); +alreadynextf: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notnextf) */; + _cmp(ax, 1); + if (flags.z()) + goto donextf; + return; +donextf: + _inc(data.byte(kFolderpage)); + folderhints(); + delpointer(); + showfolder(); + data.word(kMousebutton) = 0; + bx = 3636; + checkcoords(); + worktoscreenm(); +} + +void DreamGenContext::folderhints() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 5); + if (!flags.z()) + goto notaideadd; + _cmp(data.byte(kAidedead), 1); + if (flags.z()) + goto notaideadd; + al = 13; + getlocation(); + _cmp(al, 1); + if (flags.z()) + goto notaideadd; + al = 13; + setlocation(); + showfolder(); + al = 30; + findtext1(); + di = 0; + bx = 86; + dl = 141; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); + return; +notaideadd: + _cmp(data.byte(kFolderpage), 9); + if (!flags.z()) + return /* (notaristoadd) */; + al = 7; + getlocation(); + _cmp(al, 1); + if (flags.z()) + return /* (notaristoadd) */; + al = 7; + setlocation(); + showfolder(); + al = 31; + findtext1(); + di = 0; + bx = 86; + dl = 141; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); +} + +void DreamGenContext::lastfolder() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 0); + if (!flags.z()) + goto canlastf; + blank(); + return; +canlastf: + _cmp(data.byte(kCommandtype), 202); + if (flags.z()) + goto alreadylastf; + data.byte(kCommandtype) = 202; + al = 17; + commandonly(); +alreadylastf: + _cmp(data.byte(kFolderpage), 0); + if (flags.z()) + return /* (notlastf) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notlastf) */; + _cmp(ax, 1); + if (flags.z()) + goto dolastf; + return; +dolastf: + _dec(data.byte(kFolderpage)); + delpointer(); + showfolder(); + data.word(kMousebutton) = 0; + bx = 3636; + checkcoords(); + worktoscreenm(); +} + +void DreamGenContext::loadfolder() { + STACK_CHECK; + dx = 2299; + loadintotemp(); + dx = 2312; + loadintotemp2(); + dx = 2325; + loadintotemp3(); + dx = 1883; + loadtempcharset(); + dx = 2195; + loadtemptext(); +} + +void DreamGenContext::showfolder() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + _cmp(data.byte(kFolderpage), 0); + if (flags.z()) + goto closedfolder; + usetempcharset(); + createpanel2(); + ds = data.word(kTempgraphics); + di = 0; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 143; + bx = 0; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 0; + bx = 92; + al = 2; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 143; + bx = 92; + al = 3; + ah = 0; + showframe(); + folderexit(); + _cmp(data.byte(kFolderpage), 1); + if (flags.z()) + goto noleftpage; + showleftpage(); +noleftpage: + _cmp(data.byte(kFolderpage), 12); + if (flags.z()) + goto norightpage; + showrightpage(); +norightpage: + usecharset1(); + undertextline(); + return; +closedfolder: + createpanel2(); + ds = data.word(kTempgraphics3); + di = 143-28; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics3); + di = 143-28; + bx = 92; + al = 1; + ah = 0; + showframe(); + folderexit(); + undertextline(); +} + +void DreamGenContext::folderexit() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 296; + bx = 178; + al = 6; + ah = 0; + showframe(); +} + +void DreamGenContext::showleftpage() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 0; + bx = 12; + al = 3; + ah = 0; + showframe(); + bx = 12+5; + cx = 9; +leftpageloop: + push(cx); + push(bx); + ds = data.word(kTempgraphics2); + di = 0; + al = 4; + ah = 0; + showframe(); + bx = pop(); + cx = pop(); + _add(bx, 16); + if (--cx) + goto leftpageloop; + ds = data.word(kTempgraphics2); + di = 0; + al = 5; + ah = 0; + showframe(); + data.word(kLinespacing) = 8; + data.word(kCharshift) = 91; + data.byte(kKerning) = 1; + bl = data.byte(kFolderpage); + _dec(bl); + _dec(bl); + _add(bl, bl); + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + si = es.word(bx); + _add(si, 66*2); + di = 2; + bx = 48; + dl = 140; + cx = 2; +twolotsleft: + push(cx); +contleftpage: + printdirect(); + _add(bx, data.word(kLinespacing)); + _cmp(al, 0); + if (!flags.z()) + goto contleftpage; + cx = pop(); + if (--cx) + goto twolotsleft; + data.byte(kKerning) = 0; + data.word(kCharshift) = 0; + data.word(kLinespacing) = 10; + es = data.word(kWorkspace); + ds = data.word(kWorkspace); + di = (48*320)+2; + si = (48*320)+2+130; + cx = 120; +flipfolder: + push(cx); + push(di); + push(si); + cx = 65; +flipfolderline: + al = es.byte(di); + ah = es.byte(si); + es.byte(di) = ah; + es.byte(si) = al; + _dec(si); + _inc(di); + if (--cx) + goto flipfolderline; + si = pop(); + di = pop(); + cx = pop(); + _add(si, 320); + _add(di, 320); + if (--cx) + goto flipfolder; +} + +void DreamGenContext::showrightpage() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 143; + bx = 12; + al = 0; + ah = 0; + showframe(); + bx = 12+37; + cx = 7; +rightpageloop: + push(cx); + push(bx); + ds = data.word(kTempgraphics2); + di = 143; + al = 1; + ah = 0; + showframe(); + bx = pop(); + cx = pop(); + _add(bx, 16); + if (--cx) + goto rightpageloop; + ds = data.word(kTempgraphics2); + di = 143; + al = 2; + ah = 0; + showframe(); + data.word(kLinespacing) = 8; + data.byte(kKerning) = 1; + bl = data.byte(kFolderpage); + _dec(bl); + _add(bl, bl); + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + si = es.word(bx); + _add(si, 66*2); + di = 152; + bx = 48; + dl = 140; + cx = 2; +twolotsright: + push(cx); +contrightpage: + printdirect(); + _add(bx, data.word(kLinespacing)); + _cmp(al, 0); + if (!flags.z()) + goto contrightpage; + cx = pop(); + if (--cx) + goto twolotsright; + data.byte(kKerning) = 0; + data.word(kLinespacing) = 10; +} + +void DreamGenContext::entersymbol() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofreels(); + dx = 2338; + loadintotemp(); + data.byte(kSymboltopx) = 24; + data.byte(kSymboltopdir) = 0; + data.byte(kSymbolbotx) = 24; + data.byte(kSymbolbotdir) = 0; + redrawmainscrn(); + showsymbol(); + undertextline(); + worktoscreenm(); + data.byte(kGetback) = 0; +symbolloop: + delpointer(); + updatesymboltop(); + updatesymbolbot(); + showsymbol(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + dumpsymbol(); + bx = 3678; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto symbolloop; + _cmp(data.byte(kSymbolbotnum), 3); + if (!flags.z()) + goto symbolwrong; + _cmp(data.byte(kSymboltopnum), 5); + if (!flags.z()) + goto symbolwrong; + al = 43; + removesetobject(); + al = 46; + placesetobject(); + ah = data.byte(kRoomnum); + _add(ah, 12); + al = 0; + turnanypathon(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + restorereels(); + worktoscreenm(); + al = 13; + playchannel1(); + return; +symbolwrong: + al = 46; + removesetobject(); + al = 43; + placesetobject(); + ah = data.byte(kRoomnum); + _add(ah, 12); + al = 0; + turnanypathoff(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + restorereels(); + worktoscreenm(); +} + +void DreamGenContext::quitsymbol() { + STACK_CHECK; + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyqs; + data.byte(kCommandtype) = 222; + al = 18; + commandonly(); +alreadyqs: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notqs) */; + _and(ax, 1); + if (!flags.z()) + goto doqs; + return; +doqs: + data.byte(kGetback) = 1; +} + +void DreamGenContext::settopleft() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 210); + if (flags.z()) + goto alreadytopl; + data.byte(kCommandtype) = 210; + al = 19; + commandonly(); +alreadytopl: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notopleft) */; + data.byte(kSymboltopdir) = -1; +} + +void DreamGenContext::settopright() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 211); + if (flags.z()) + goto alreadytopr; + data.byte(kCommandtype) = 211; + al = 20; + commandonly(); +alreadytopr: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notopright) */; + data.byte(kSymboltopdir) = 1; +} + +void DreamGenContext::setbotleft() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 212); + if (flags.z()) + goto alreadybotl; + data.byte(kCommandtype) = 212; + al = 21; + commandonly(); +alreadybotl: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (nobotleft) */; + data.byte(kSymbolbotdir) = -1; +} + +void DreamGenContext::setbotright() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 213); + if (flags.z()) + goto alreadybotr; + data.byte(kCommandtype) = 213; + al = 22; + commandonly(); +alreadybotr: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (nobotright) */; + data.byte(kSymbolbotdir) = 1; +} + +void DreamGenContext::dumpsymbol() { + STACK_CHECK; + data.byte(kNewtextline) = 0; + di = (64); + bx = (56)+20; + cl = 104; + ch = 60; + multidump(); +} + +void DreamGenContext::showsymbol() { + STACK_CHECK; + al = 12; + ah = 0; + di = (64); + bx = (56); + ds = data.word(kTempgraphics); + showframe(); + al = data.byte(kSymboltopx); + ah = 0; + di = ax; + _add(di, (64)-44); + al = data.byte(kSymboltopnum); + bx = (56)+20; + ds = data.word(kTempgraphics); + ah = 32; + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + showframe(); + al = data.byte(kSymbolbotx); + ah = 0; + di = ax; + _add(di, (64)-44); + al = data.byte(kSymbolbotnum); + _add(al, 6); + bx = (56)+49; + ds = data.word(kTempgraphics); + ah = 32; + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + showframe(); +} + +void DreamGenContext::nextsymbol() { + STACK_CHECK; + _inc(al); + _cmp(al, 6); + if (flags.z()) + goto topwrap; + _cmp(al, 12); + if (flags.z()) + goto botwrap; + return; +topwrap: + al = 0; + return; +botwrap: + al = 6; +} + +void DreamGenContext::updatesymboltop() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (flags.z()) + return /* (topfinished) */; + _cmp(data.byte(kSymboltopdir), -1); + if (flags.z()) + goto backwards; + _inc(data.byte(kSymboltopx)); + _cmp(data.byte(kSymboltopx), 49); + if (!flags.z()) + goto notwrapfor; + data.byte(kSymboltopx) = 0; + _dec(data.byte(kSymboltopnum)); + _cmp(data.byte(kSymboltopnum), -1); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopnum) = 5; + return; +notwrapfor: + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopdir) = 0; + return; +backwards: + _dec(data.byte(kSymboltopx)); + _cmp(data.byte(kSymboltopx), -1); + if (!flags.z()) + goto notwrapback; + data.byte(kSymboltopx) = 48; + _inc(data.byte(kSymboltopnum)); + _cmp(data.byte(kSymboltopnum), 6); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopnum) = 0; + return; +notwrapback: + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopdir) = 0; +} + +void DreamGenContext::updatesymbolbot() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (flags.z()) + return /* (botfinished) */; + _cmp(data.byte(kSymbolbotdir), -1); + if (flags.z()) + goto backwardsbot; + _inc(data.byte(kSymbolbotx)); + _cmp(data.byte(kSymbolbotx), 49); + if (!flags.z()) + goto notwrapforb; + data.byte(kSymbolbotx) = 0; + _dec(data.byte(kSymbolbotnum)); + _cmp(data.byte(kSymbolbotnum), -1); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotnum) = 5; + return; +notwrapforb: + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotdir) = 0; + return; +backwardsbot: + _dec(data.byte(kSymbolbotx)); + _cmp(data.byte(kSymbolbotx), -1); + if (!flags.z()) + goto notwrapbackb; + data.byte(kSymbolbotx) = 48; + _inc(data.byte(kSymbolbotnum)); + _cmp(data.byte(kSymbolbotnum), 6); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotnum) = 0; + return; +notwrapbackb: + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotdir) = 0; +} + +void DreamGenContext::dumpsymbox() { + STACK_CHECK; + _cmp(data.word(kDumpx), -1); + if (flags.z()) + return /* (nodumpsym) */; + di = data.word(kDumpx); + bx = data.word(kDumpy); + cl = 30; + ch = 77; + multidump(); + data.word(kDumpx) = -1; +} + +void DreamGenContext::usediary() { + STACK_CHECK; + getridofreels(); + dx = 2039; + loadintotemp(); + dx = 2208; + loadtemptext(); + dx = 1883; + loadtempcharset(); + createpanel(); + showicon(); + showdiary(); + undertextline(); + showdiarypage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kGetback) = 0; +diaryloop: + delpointer(); + readmouse(); + showdiarykeys(); + showpointer(); + vsync(); + dumppointer(); + dumpdiarykeys(); + dumptextline(); + bx = 3740; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto diaryloop; + getridoftemp(); + getridoftemptext(); + getridoftempcharset(); + restorereels(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::showdiary() { + STACK_CHECK; + al = 1; + ah = 0; + di = (68+24); + bx = (48+12)+37; + ds = data.word(kTempgraphics); + showframe(); + al = 2; + ah = 0; + di = (68+24)+176; + bx = (48+12)+108; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::showdiarykeys() { + STACK_CHECK; + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + return /* (nokeyatall) */; + _dec(data.byte(kPresscount)); + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + return /* (nokeyatall) */; + _cmp(data.byte(kPressed), 'N'); + if (!flags.z()) + goto nokeyn; + al = 3; + _cmp(data.byte(kPresscount), 1); + if (flags.z()) + goto gotkeyn; + al = 4; +gotkeyn: + ah = 0; + di = (68+24)+94; + bx = (48+12)+97; + ds = data.word(kTempgraphics); + showframe(); + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + return /* (notshown) */; + showdiarypage(); + return; +nokeyn: + al = 5; + _cmp(data.byte(kPresscount), 1); + if (flags.z()) + goto gotkeyp; + al = 6; +gotkeyp: + ah = 0; + di = (68+24)+151; + bx = (48+12)+71; + ds = data.word(kTempgraphics); + showframe(); + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + return /* (notshowp) */; + showdiarypage(); +} + +void DreamGenContext::dumpdiarykeys() { + STACK_CHECK; + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + goto notdumpdiary; + _cmp(data.byte(kSartaindead), 1); + if (flags.z()) + goto notsartadd; + _cmp(data.byte(kDiarypage), 5); + if (!flags.z()) + goto notsartadd; + _cmp(data.byte(kDiarypage), 5); + if (!flags.z()) + goto notsartadd; + al = 6; + getlocation(); + _cmp(al, 1); + if (flags.z()) + goto notsartadd; + al = 6; + setlocation(); + delpointer(); + al = 12; + findtext1(); + di = 70; + bx = 106; + dl = 241; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); + createpanel(); + showicon(); + showdiary(); + showdiarypage(); + worktoscreenm(); + showpointer(); + return; +notsartadd: + di = (68+24)+48; + bx = (48+12)+15; + cl = 200; + ch = 16; + multidump(); +notdumpdiary: + di = (68+24)+94; + bx = (48+12)+97; + cl = 16; + ch = 16; + multidump(); + di = (68+24)+151; + bx = (48+12)+71; + cl = 16; + ch = 16; + multidump(); +} + +void DreamGenContext::diarykeyp() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 214); + if (flags.z()) + goto alreadykeyp; + data.byte(kCommandtype) = 214; + al = 23; + commandonly(); +alreadykeyp: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notkeyp) */; + ax = data.word(kOldbutton); + _cmp(ax, data.word(kMousebutton)); + if (flags.z()) + return /* (notkeyp) */; + _cmp(data.byte(kPresscount), 0); + if (!flags.z()) + return /* (notkeyp) */; + al = 16; + playchannel1(); + data.byte(kPresscount) = 12; + data.byte(kPressed) = 'P'; + _dec(data.byte(kDiarypage)); + _cmp(data.byte(kDiarypage), -1); + if (!flags.z()) + return /* (notkeyp) */; + data.byte(kDiarypage) = 11; +} + +void DreamGenContext::diarykeyn() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 213); + if (flags.z()) + goto alreadykeyn; + data.byte(kCommandtype) = 213; + al = 23; + commandonly(); +alreadykeyn: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notkeyn) */; + ax = data.word(kOldbutton); + _cmp(ax, data.word(kMousebutton)); + if (flags.z()) + return /* (notkeyn) */; + _cmp(data.byte(kPresscount), 0); + if (!flags.z()) + return /* (notkeyn) */; + al = 16; + playchannel1(); + data.byte(kPresscount) = 12; + data.byte(kPressed) = 'N'; + _inc(data.byte(kDiarypage)); + _cmp(data.byte(kDiarypage), 12); + if (!flags.z()) + return /* (notkeyn) */; + data.byte(kDiarypage) = 0; +} + +void DreamGenContext::showdiarypage() { + STACK_CHECK; + al = 0; + ah = 0; + di = (68+24); + bx = (48+12); + ds = data.word(kTempgraphics); + showframe(); + al = data.byte(kDiarypage); + findtext1(); + data.byte(kKerning) = 1; + usetempcharset(); + di = (68+24)+48; + bx = (48+12)+16; + dl = 240; + ah = 16; + data.word(kCharshift) = 91+91; + printdirect(); + di = (68+24)+129; + bx = (48+12)+16; + dl = 240; + ah = 16; + printdirect(); + di = (68+24)+48; + bx = (48+12)+23; + dl = 240; + ah = 16; + printdirect(); + data.byte(kKerning) = 0; + data.word(kCharshift) = 0; + usecharset1(); +} + +void DreamGenContext::findtext1() { + STACK_CHECK; + ah = 0; + si = ax; + _add(si, si); + es = data.word(kTextfile1); + ax = es.word(si); + _add(ax, (66*2)); + si = ax; +} + +void DreamGenContext::zoomonoff() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyonoff; + data.byte(kCommandtype) = 222; + al = 39; + commandonly(); +alreadyonoff: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nozoomonoff) */; + _and(ax, 1); + if (!flags.z()) + goto dozoomonoff; + return; +dozoomonoff: + al = data.byte(kZoomon); + _xor(al, 1); + data.byte(kZoomon) = al; + createpanel(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + al = 39; + commandonly(); + readmouse(); + worktoscreenm(); +} + +void DreamGenContext::saveload() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 253); + if (flags.z()) + goto alreadyops; + data.byte(kCommandtype) = 253; + al = 43; + commandonly(); +alreadyops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noops) */; + _and(ax, 1); + if (flags.z()) + return /* (noops) */; + dosaveload(); +} + +void DreamGenContext::dosaveload() { + STACK_CHECK; + data.byte(kPointerframe) = 0; + data.word(kTextaddressx) = 70; + data.word(kTextaddressy) = 182-8; + data.byte(kTextlen) = 181; + data.byte(kManisoffscreen) = 1; + clearwork(); + createpanel2(); + undertextline(); + getridofall(); + loadsavebox(); + showopbox(); + showmainops(); + worktoscreen(); + goto donefirstops; +restartops: + showopbox(); + showmainops(); + worktoscreenm(); +donefirstops: + data.byte(kGetback) = 0; +waitops: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto justret; + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + bx = 3782; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + goto restartops; + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto justret; + getridoftemp(); + restoreall(); + redrawmainscrn(); + worktoscreenm(); + data.byte(kCommandtype) = 200; +justret: + data.byte(kManisoffscreen) = 0; +} + +void DreamGenContext::getbackfromops() { + STACK_CHECK; + _cmp(data.byte(kMandead), 2); + if (flags.z()) + goto opsblock1; + getback1(); + return; +opsblock1: + blank(); +} + +void DreamGenContext::showmainops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+10; + bx = (52)+10; + al = 8; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+59; + bx = (52)+30; + al = 7; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::showdiscops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+10; + bx = (52)+10; + al = 9; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+59; + bx = (52)+30; + al = 10; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); +} + +void DreamGenContext::loadsavebox() { + STACK_CHECK; + dx = 1961; + loadintotemp(); +} + +void DreamGenContext::loadgame() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 246); + if (flags.z()) + goto alreadyload; + data.byte(kCommandtype) = 246; + al = 41; + commandonly(); +alreadyload: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noload) */; + _cmp(ax, 1); + if (flags.z()) + goto doload; + return; +doload: + data.byte(kLoadingorsave) = 1; + showopbox(); + showloadops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + data.byte(kPointerframe) = 0; + worktoscreenm(); + namestoold(); + data.byte(kGetback) = 0; +loadops: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (quitloaded) */; + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3824; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto loadops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + return /* (quitloaded) */; + getridoftemp(); + dx = data; + es = dx; + bx = 7979; + startloading(); + loadroomssample(); + data.byte(kRoomloaded) = 1; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + initrain(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + startup(); + worktoscreen(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::getbacktoops() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 201); + if (flags.z()) + goto alreadygetops; + data.byte(kCommandtype) = 201; + al = 42; + commandonly(); +alreadygetops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nogetbackops) */; + _and(ax, 1); + if (!flags.z()) + goto dogetbackops; + return; +dogetbackops: + oldtonames(); + data.byte(kGetback) = 2; +} + +void DreamGenContext::discops() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 249); + if (flags.z()) + goto alreadydiscops; + data.byte(kCommandtype) = 249; + al = 43; + commandonly(); +alreadydiscops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodiscops) */; + _and(ax, 1); + if (!flags.z()) + goto dodiscops; + return; +dodiscops: + scanfornames(); + data.byte(kLoadingorsave) = 2; + showopbox(); + showdiscops(); + data.byte(kCurrentslot) = 0; + worktoscreenm(); + data.byte(kGetback) = 0; +discopsloop: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (quitdiscops) */; + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3866; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto discopsloop; +} + +void DreamGenContext::savegame() { + STACK_CHECK; + _cmp(data.byte(kMandead), 2); + if (!flags.z()) + goto cansaveok; + blank(); + return; +cansaveok: + _cmp(data.byte(kCommandtype), 247); + if (flags.z()) + goto alreadysave; + data.byte(kCommandtype) = 247; + al = 44; + commandonly(); +alreadysave: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto dosave; + return; +dosave: + data.byte(kLoadingorsave) = 2; + showopbox(); + showsaveops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + worktoscreenm(); + namestoold(); + data.word(kBufferin) = 0; + data.word(kBufferout) = 0; + data.byte(kGetback) = 0; +saveops: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (quitsavegame) */; + delpointer(); + checkinput(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3908; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto saveops; +} + +void DreamGenContext::actualsave() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyactsave; + data.byte(kCommandtype) = 222; + al = 44; + commandonly(); +alreadyactsave: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noactsave) */; + dx = data; + ds = dx; + si = 8579; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + _add(si, ax); + _inc(si); + _cmp(ds.byte(si), 0); + if (flags.z()) + return /* (noactsave) */; + al = data.byte(kLocation); + ah = 0; + cx = 32; + _mul(cx); + ds = cs; + si = 6187; + _add(si, ax); + di = 7979; + bx = di; + es = cs; + cx = 16; + _movsw(cx, true); + al = data.byte(kRoomssample); + es.byte(bx+13) = al; + al = data.byte(kMapx); + es.byte(bx+15) = al; + al = data.byte(kMapy); + es.byte(bx+16) = al; + al = data.byte(kLiftflag); + es.byte(bx+20) = al; + al = data.byte(kManspath); + es.byte(bx+21) = al; + al = data.byte(kFacing); + es.byte(bx+22) = al; + al = 255; + es.byte(bx+27) = al; + saveposition(); + getridoftemp(); + restoreall(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + redrawmainscrn(); + worktoscreenm(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::actualload() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadyactload; + data.byte(kCommandtype) = 221; + al = 41; + commandonly(); +alreadyactload: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notactload) */; + _cmp(ax, 1); + if (!flags.z()) + return /* (notactload) */; + dx = data; + ds = dx; + si = 8579; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + _add(si, ax); + _inc(si); + _cmp(ds.byte(si), 0); + if (flags.z()) + return /* (notactload) */; + loadposition(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::selectslot2() { + STACK_CHECK; + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + goto noselslot2; + data.byte(kLoadingorsave) = 2; +noselslot2: + selectslot(); +} + +void DreamGenContext::checkinput() { + STACK_CHECK; + _cmp(data.byte(kLoadingorsave), 3); + if (flags.z()) + return /* (nokeypress) */; + readkey(); + al = data.byte(kCurrentkey); + _cmp(al, 0); + if (flags.z()) + return /* (nokeypress) */; + _cmp(al, 13); + if (!flags.z()) + goto notret; + data.byte(kLoadingorsave) = 3; + goto afterkey; +notret: + _cmp(al, 8); + if (!flags.z()) + goto nodel2; + _cmp(data.byte(kCursorpos), 0); + if (flags.z()) + return /* (nokeypress) */; + getnamepos(); + _dec(data.byte(kCursorpos)); + es.byte(bx) = 0; + es.byte(bx+1) = 1; + goto afterkey; +nodel2: + _cmp(data.byte(kCursorpos), 14); + if (flags.z()) + return /* (nokeypress) */; + getnamepos(); + _inc(data.byte(kCursorpos)); + al = data.byte(kCurrentkey); + es.byte(bx+1) = al; + es.byte(bx+2) = 0; + es.byte(bx+3) = 1; + goto afterkey; + return; +afterkey: + showopbox(); + shownames(); + showslots(); + showsaveops(); + worktoscreenm(); +} + +void DreamGenContext::getnamepos() { + STACK_CHECK; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + dx = data; + es = dx; + bx = 8579; + _add(bx, ax); + al = data.byte(kCursorpos); + ah = 0; + _add(bx, ax); +} + +void DreamGenContext::showopbox() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60); + bx = (52); + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60); + bx = (52)+55; + al = 4; + ah = 0; + showframe(); +} + +void DreamGenContext::showloadops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); + di = (60)+104; + bx = (52)+14; + al = 55; + dl = 101; + printmessage(); +} + +void DreamGenContext::showsaveops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); + di = (60)+104; + bx = (52)+14; + al = 54; + dl = 101; + printmessage(); +} + +void DreamGenContext::selectslot() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 244); + if (flags.z()) + goto alreadysel; + data.byte(kCommandtype) = 244; + al = 45; + commandonly(); +alreadysel: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (noselslot) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noselslot) */; + _cmp(data.byte(kLoadingorsave), 3); + if (!flags.z()) + goto notnocurs; + _dec(data.byte(kLoadingorsave)); +notnocurs: + oldtonames(); + ax = data.word(kMousey); + _sub(ax, (52)+4); + cl = -1; +getslotnum: + _inc(cl); + _sub(ax, 11); + if (!flags.c()) + goto getslotnum; + data.byte(kCurrentslot) = cl; + delpointer(); + showopbox(); + showslots(); + shownames(); + _cmp(data.byte(kLoadingorsave), 1); + if (flags.z()) + goto isloadmode; + showsaveops(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + return; +isloadmode: + showloadops(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::showslots() { + STACK_CHECK; + di = (60)+7; + bx = (52)+8; + al = 2; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); + di = (60)+10; + bx = (52)+11; + cl = 0; +slotloop: + push(cx); + push(di); + push(bx); + _cmp(cl, data.byte(kCurrentslot)); + if (!flags.z()) + goto nomatchslot; + al = 3; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); +nomatchslot: + bx = pop(); + di = pop(); + cx = pop(); + _add(bx, 10); + _inc(cl); + _cmp(cl, 7); + if (!flags.z()) + goto slotloop; +} + +void DreamGenContext::shownames() { + STACK_CHECK; + dx = data; + es = dx; + si = 8579+1; + di = (60)+21; + bx = (52)+10; + cl = 0; +shownameloop: + push(cx); + push(di); + push(es); + push(bx); + push(si); + al = 4; + _cmp(cl, data.byte(kCurrentslot)); + if (!flags.z()) + goto nomatchslot2; + _cmp(data.byte(kLoadingorsave), 2); + if (!flags.z()) + goto loadmode; + dx = si; + cx = 15; + _add(si, 15); +zerostill: + _dec(si); + _dec(cl); + _cmp(es.byte(si), 1); + if (!flags.z()) + goto foundcharacter; + goto zerostill; +foundcharacter: + data.byte(kCursorpos) = cl; + es.byte(si) = '/'; + es.byte(si+1) = 0; + push(si); + si = dx; + dl = 200; + ah = 0; + printdirect(); + si = pop(); + es.byte(si) = 0; + es.byte(si+1) = 1; + goto afterprintname; +loadmode: + al = 0; + dl = 200; + ah = 0; + data.word(kCharshift) = 91; + printdirect(); + data.word(kCharshift) = 0; + goto afterprintname; +nomatchslot2: + dl = 200; + ah = 0; + printdirect(); +afterprintname: + si = pop(); + bx = pop(); + es = pop(); + di = pop(); + cx = pop(); + _add(si, 17); + _add(bx, 10); + _inc(cl); + _cmp(cl, 7); + if (!flags.z()) + goto shownameloop; +} + +void DreamGenContext::namestoold() { + STACK_CHECK; + ds = cs; + si = 8579; + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + es = data.word(kBuffers); + cx = 17*4; + _movsb(cx, true); +} + +void DreamGenContext::oldtonames() { + STACK_CHECK; + es = cs; + di = 8579; + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + ds = data.word(kBuffers); + cx = 17*4; + _movsb(cx, true); +} + +void DreamGenContext::saveposition() { + STACK_CHECK; + makeheader(); + al = data.byte(kCurrentslot); + ah = 0; + push(ax); + cx = 13; + _mul(cx); + dx = data; + ds = dx; + dx = 8698; + _add(dx, ax); + openforsave(); + dx = data; + ds = dx; + dx = 6091; + cx = (6187-6091); + savefilewrite(); + dx = data; + es = dx; + di = 6141; + ax = pop(); + cx = 17; + _mul(cx); + dx = data; + ds = dx; + dx = 8579; + _add(dx, ax); + saveseg(); + dx = data; + ds = dx; + dx = 0; + saveseg(); + ds = data.word(kExtras); + dx = (0); + saveseg(); + ds = data.word(kBuffers); + dx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + saveseg(); + dx = data; + ds = dx; + dx = 7979; + saveseg(); + dx = data; + ds = dx; + dx = 534; + saveseg(); + closefile(); +} + +void DreamGenContext::loadposition() { + STACK_CHECK; + data.word(kTimecount) = 0; + clearchanges(); + al = data.byte(kCurrentslot); + ah = 0; + push(ax); + cx = 13; + _mul(cx); + dx = data; + ds = dx; + dx = 8698; + _add(dx, ax); + openfilefromc(); + ds = cs; + dx = 6091; + cx = (6187-6091); + savefileread(); + es = cs; + di = 6141; + ax = pop(); + cx = 17; + _mul(cx); + dx = data; + ds = dx; + dx = 8579; + _add(dx, ax); + loadseg(); + dx = data; + ds = dx; + dx = 0; + loadseg(); + ds = data.word(kExtras); + dx = (0); + loadseg(); + ds = data.word(kBuffers); + dx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + loadseg(); + dx = data; + ds = dx; + dx = 7979; + loadseg(); + ds = cs; + dx = 534; + loadseg(); + closefile(); +} + +void DreamGenContext::makeheader() { + STACK_CHECK; + dx = data; + es = dx; + di = 6141; + ax = 17; + storeit(); + ax = (68-0); + storeit(); + ax = (0+2080+30000+(16*114)+((114+2)*2)+18000); + storeit(); + ax = (250)*4; + storeit(); + ax = 48; + storeit(); + ax = (991-534); + storeit(); +} + +void DreamGenContext::storeit() { + STACK_CHECK; + _cmp(ax, 0); + if (!flags.z()) + goto isntblank; + _inc(ax); +isntblank: + _stosw(); +} + +void DreamGenContext::findlen() { + STACK_CHECK; + _dec(bx); + _add(bx, ax); +nextone: + _cmp(cl, ds.byte(bx)); + if (!flags.z()) + return /* (foundlen) */; + _dec(bx); + _dec(ax); + _cmp(ax, 0); + if (!flags.z()) + goto nextone; +} + +void DreamGenContext::scanfornames() { + STACK_CHECK; + dx = data; + es = dx; + di = 8579; + dx = data; + ds = dx; + dx = 8698; + cx = 7; +scanloop: + push(es); + push(ds); + push(di); + push(dx); + push(cx); + openfilefromc(); + if (flags.c()) + goto notexist; + cx = pop(); + _inc(ch); + push(cx); + push(di); + push(es); + dx = data; + ds = dx; + dx = 6091; + cx = (6187-6091); + savefileread(); + dx = data; + es = dx; + di = 6141; + ds = pop(); + dx = pop(); + loadseg(); + bx = data.word(kHandle); + closefile(); +notexist: + cx = pop(); + dx = pop(); + di = pop(); + ds = pop(); + es = pop(); + _add(dx, 13); + _add(di, 17); + _dec(cl); + if (!flags.z()) + goto scanloop; + al = ch; +} + +void DreamGenContext::decide() { + STACK_CHECK; + setmode(); + loadpalfromiff(); + clearpalette(); + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 0; + data.byte(kPointerframe) = 0; + data.word(kTextaddressx) = 70; + data.word(kTextaddressy) = 182-8; + data.byte(kTextlen) = 181; + data.byte(kManisoffscreen) = 1; + loadsavebox(); + showdecisions(); + worktoscreen(); + fadescreenup(); + data.byte(kGetback) = 0; +waitdecide: + _cmp(data.byte(kQuitrequested), 0); + if (flags.z()) + goto _tmp1; + return; +_tmp1: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + bx = 5057; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitdecide; + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto hasloadedroom; + getridoftemp(); +hasloadedroom: + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; +} + +void DreamGenContext::showdecisions() { + STACK_CHECK; + createpanel2(); + showopbox(); + ds = data.word(kTempgraphics); + di = (60)+17; + bx = (52)+13; + al = 6; + ah = 0; + showframe(); + undertextline(); +} + +void DreamGenContext::newgame() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 251); + if (flags.z()) + goto alreadynewgame; + data.byte(kCommandtype) = 251; + al = 47; + commandonly(); +alreadynewgame: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (nonewgame) */; + data.byte(kGetback) = 3; +} + +void DreamGenContext::doload() { + STACK_CHECK; + data.byte(kLoadingorsave) = 1; + showopbox(); + showloadops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + data.byte(kPointerframe) = 0; + worktoscreenm(); + namestoold(); + data.byte(kGetback) = 0; +loadops: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (quitloaded) */; + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3824; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto loadops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + return /* (quitloaded) */; + getridoftemp(); + dx = data; + es = dx; + bx = 7979; + startloading(); + loadroomssample(); + data.byte(kRoomloaded) = 1; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + initrain(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + startup(); + worktoscreen(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::loadold() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 252); + if (flags.z()) + goto alreadyloadold; + data.byte(kCommandtype) = 252; + al = 48; + commandonly(); +alreadyloadold: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noloadold) */; + doload(); + _cmp(data.byte(kGetback), 4); + if (flags.z()) + return /* (noloadold) */; + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (noloadold) */; + showdecisions(); + worktoscreenm(); + data.byte(kGetback) = 0; +} + +void DreamGenContext::createname() { + STACK_CHECK; + push(ax); + di = 5105; + cs.byte(di+0) = dl; + cs.byte(di+3) = cl; + al = dh; + ah = '0'-1; +findten: + _inc(ah); + _sub(al, 10); + if (!flags.c()) + goto findten; + cs.byte(di+1) = ah; + _add(al, 10+'0'); + cs.byte(di+2) = al; + ax = pop(); + cl = '0'-1; +thousandsc: + _inc(cl); + _sub(ax, 1000); + if (!flags.c()) + goto thousandsc; + _add(ax, 1000); + cs.byte(di+4) = cl; + cl = '0'-1; +hundredsc: + _inc(cl); + _sub(ax, 100); + if (!flags.c()) + goto hundredsc; + _add(ax, 100); + cs.byte(di+5) = cl; + cl = '0'-1; +tensc: + _inc(cl); + _sub(ax, 10); + if (!flags.c()) + goto tensc; + _add(ax, 10); + cs.byte(di+6) = cl; + _add(al, '0'); + cs.byte(di+7) = al; +} + +void DreamGenContext::trysoundalloc() { + STACK_CHECK; + _cmp(data.byte(kNeedsoundbuff), 1); + if (flags.z()) + return /* (gotsoundbuff) */; + _inc(data.byte(kSoundtimes)); + bx = (16384+2048)/16; + allocatemem(); + data.word(kSoundbuffer) = ax; + push(ax); + al = ah; + cl = 4; + _shr(al, cl); + data.byte(kSoundbufferpage) = al; + ax = pop(); + cl = 4; + _shl(ax, cl); + data.word(kSoundbufferad) = ax; + _cmp(ax, 0x0b7ff); + if (!flags.c()) + goto soundfail; + es = data.word(kSoundbuffer); + di = 0; + cx = 16384/2; + ax = 0x7f7f; + _stosw(cx, true); + data.byte(kNeedsoundbuff) = 1; + return; +soundfail: + es = data.word(kSoundbuffer); + deallocatemem(); +} + +void DreamGenContext::playchannel0() { + STACK_CHECK; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (dontbother4) */; + push(es); + push(ds); + push(bx); + push(cx); + push(di); + push(si); + data.byte(kCh0playing) = al; + es = data.word(kSounddata); + _cmp(al, 12); + if (flags.c()) + goto notsecondbank; + es = data.word(kSounddata2); + _sub(al, 12); +notsecondbank: + data.byte(kCh0repeat) = ah; + ah = 0; + _add(ax, ax); + bx = ax; + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + data.word(kCh0emmpage) = ax; + ax = es.word(bx+1); + data.word(kCh0offset) = ax; + ax = es.word(bx+3); + data.word(kCh0blockstocopy) = ax; + _cmp(data.byte(kCh0repeat), 0); + if (flags.z()) + goto nosetloop; + ax = data.word(kCh0emmpage); + data.word(kCh0oldemmpage) = ax; + ax = data.word(kCh0offset); + data.word(kCh0oldoffset) = ax; + ax = data.word(kCh0blockstocopy); + data.word(kCh0oldblockstocopy) = ax; +nosetloop: + si = pop(); + di = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::playchannel1() { + STACK_CHECK; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (dontbother5) */; + _cmp(data.byte(kCh1playing), 7); + if (flags.z()) + return /* (dontbother5) */; + push(es); + push(ds); + push(bx); + push(cx); + push(di); + push(si); + data.byte(kCh1playing) = al; + es = data.word(kSounddata); + _cmp(al, 12); + if (flags.c()) + goto notsecondbank1; + es = data.word(kSounddata2); + _sub(al, 12); +notsecondbank1: + ah = 0; + _add(ax, ax); + bx = ax; + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + data.word(kCh1emmpage) = ax; + ax = es.word(bx+1); + data.word(kCh1offset) = ax; + ax = es.word(bx+3); + data.word(kCh1blockstocopy) = ax; + si = pop(); + di = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::makenextblock() { + STACK_CHECK; + volumeadjust(); + loopchannel0(); + _cmp(data.word(kCh1blockstocopy), 0); + if (flags.z()) + goto mightbeonlych0; + _cmp(data.word(kCh0blockstocopy), 0); + if (flags.z()) + goto mightbeonlych1; + _dec(data.word(kCh0blockstocopy)); + _dec(data.word(kCh1blockstocopy)); + bothchannels(); + return; +mightbeonlych1: + data.byte(kCh0playing) = 255; + _cmp(data.word(kCh1blockstocopy), 0); + if (flags.z()) + return /* (notch1only) */; + _dec(data.word(kCh1blockstocopy)); + channel1only(); + return; +mightbeonlych0: + data.byte(kCh1playing) = 255; + _cmp(data.word(kCh0blockstocopy), 0); + if (flags.z()) + goto notch0only; + _dec(data.word(kCh0blockstocopy)); + channel0only(); + return; +notch0only: + es = data.word(kSoundbuffer); + di = data.word(kSoundbufferwrite); + cx = 1024; + ax = 0x7f7f; + _stosw(cx, true); + _and(di, 16384-1); + data.word(kSoundbufferwrite) = di; +} + +void DreamGenContext::volumeadjust() { + STACK_CHECK; + al = data.byte(kVolumedirection); + _cmp(al, 0); + if (flags.z()) + return /* (volok) */; + al = data.byte(kVolume); + _cmp(al, data.byte(kVolumeto)); + if (flags.z()) + goto volfinish; + _add(data.byte(kVolumecount), 64); + if (!flags.z()) + return /* (volok) */; + al = data.byte(kVolume); + _add(al, data.byte(kVolumedirection)); + data.byte(kVolume) = al; + return; +volfinish: + data.byte(kVolumedirection) = 0; +} + +void DreamGenContext::loopchannel0() { + STACK_CHECK; + _cmp(data.word(kCh0blockstocopy), 0); + if (!flags.z()) + return /* (notloop) */; + _cmp(data.byte(kCh0repeat), 0); + if (flags.z()) + return /* (notloop) */; + _cmp(data.byte(kCh0repeat), 255); + if (flags.z()) + goto endlessloop; + _dec(data.byte(kCh0repeat)); +endlessloop: + ax = data.word(kCh0oldemmpage); + data.word(kCh0emmpage) = ax; + ax = data.word(kCh0oldoffset); + data.word(kCh0offset) = ax; + ax = data.word(kCh0blockstocopy); + _add(ax, data.word(kCh0oldblockstocopy)); + data.word(kCh0blockstocopy) = ax; +} + +void DreamGenContext::cancelch0() { + STACK_CHECK; + data.byte(kCh0repeat) = 0; + data.word(kCh0blockstocopy) = 0; + data.byte(kCh0playing) = 255; +} + +void DreamGenContext::cancelch1() { + STACK_CHECK; + data.word(kCh1blockstocopy) = 0; + data.byte(kCh1playing) = 255; +} + +void DreamGenContext::channel0tran() { + STACK_CHECK; + _cmp(data.byte(kVolume), 0); + if (!flags.z()) + goto lowvolumetran; + cx = 1024; + _movsw(cx, true); + return; +lowvolumetran: + cx = 1024; + bh = data.byte(kVolume); + bl = 0; + _add(bx, 16384-256); +volloop: + _lodsw(); + bl = al; + al = es.byte(bx); + bl = ah; + ah = es.byte(bx); + _stosw(); + if (--cx) + goto volloop; +} + +void DreamGenContext::domix() { + STACK_CHECK; + _cmp(data.byte(kVolume), 0); + if (!flags.z()) + goto lowvolumemix; +slow: + _lodsb(); + ah = ds.byte(bx); + _inc(bx); + _cmp(al, dh); + if (!flags.c()) + goto toplot; + _cmp(ah, dh); + if (!flags.c()) + goto nodistort; + _add(al, ah); + if (flags.s()) + goto botok; + _xor(al, al); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +botok: + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +toplot: + _cmp(ah, dh); + if (flags.c()) + goto nodistort; + _add(al, ah); + if (!flags.s()) + goto topok; + al = dl; + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +topok: + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +nodistort: + _add(al, ah); + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +lowvolumemix: + _lodsb(); + push(bx); + bh = data.byte(kVolume); + _add(bh, 63); + bl = al; + al = es.byte(bx); + bx = pop(); + ah = ds.byte(bx); + _inc(bx); + _cmp(al, dh); + if (!flags.c()) + goto toplotv; + _cmp(ah, dh); + if (!flags.c()) + goto nodistortv; + _add(al, ah); + if (flags.s()) + goto botokv; + _xor(al, al); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +botokv: + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +toplotv: + _cmp(ah, dh); + if (flags.c()) + goto nodistortv; + _add(al, ah); + if (!flags.s()) + goto topokv; + al = dl; + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +topokv: + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +nodistortv: + _add(al, ah); + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; +} + +void DreamGenContext::entrytexts() { + STACK_CHECK; + _cmp(data.byte(kLocation), 21); + if (!flags.z()) + goto notloc15; + al = 28; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc15: + _cmp(data.byte(kLocation), 30); + if (!flags.z()) + goto notloc43; + al = 27; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc43: + _cmp(data.byte(kLocation), 23); + if (!flags.z()) + goto notloc23; + al = 29; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc23: + _cmp(data.byte(kLocation), 31); + if (!flags.z()) + goto notloc44; + al = 30; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc44: + _cmp(data.byte(kLocation), 20); + if (!flags.z()) + goto notsarters2; + al = 31; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notsarters2: + _cmp(data.byte(kLocation), 24); + if (!flags.z()) + goto notedenlob; + al = 32; + cx = 60; + dx = 3; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notedenlob: + _cmp(data.byte(kLocation), 34); + if (!flags.z()) + return /* (noteden2) */; + al = 33; + cx = 60; + dx = 3; + bl = 68; + bh = 64; + setuptimeduse(); +} + +void DreamGenContext::entryanims() { + STACK_CHECK; + data.word(kReeltowatch) = -1; + data.byte(kWatchmode) = -1; + _cmp(data.byte(kLocation), 33); + if (!flags.z()) + goto notinthebeach; + switchryanoff(); + data.word(kWatchingtime) = 76*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 76; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + return; +notinthebeach: + _cmp(data.byte(kLocation), 44); + if (!flags.z()) + goto notsparkys; + al = 8; + resetlocation(); + data.word(kWatchingtime) = 50*2; + data.word(kReeltowatch) = 247; + data.word(kEndwatchreel) = 297; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notsparkys: + _cmp(data.byte(kLocation), 22); + if (!flags.z()) + goto notinthelift; + data.word(kWatchingtime) = 31*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 30; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notinthelift: + _cmp(data.byte(kLocation), 26); + if (!flags.z()) + goto notunderchurch; + data.byte(kSymboltopnum) = 2; + data.byte(kSymbolbotnum) = 1; + return; +notunderchurch: + _cmp(data.byte(kLocation), 45); + if (!flags.z()) + goto notenterdream; + data.byte(kKeeperflag) = 0; + data.word(kWatchingtime) = 296; + data.word(kReeltowatch) = 45; + data.word(kEndwatchreel) = 198; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notenterdream: + _cmp(data.byte(kReallocation), 46); + if (!flags.z()) + goto notcrystal; + _cmp(data.byte(kSartaindead), 1); + if (!flags.z()) + goto notcrystal; + al = 0; + removefreeobject(); + return; +notcrystal: + _cmp(data.byte(kLocation), 9); + if (!flags.z()) + goto nottopchurch; + al = 2; + checkifpathison(); + if (flags.z()) + goto nottopchurch; + _cmp(data.byte(kAidedead), 0); + if (flags.z()) + goto nottopchurch; + al = 3; + checkifpathison(); + if (!flags.z()) + goto makedoorsopen; + al = 2; + turnpathon(); +makedoorsopen: + al = 4; + removesetobject(); + al = 5; + placesetobject(); + return; +nottopchurch: + _cmp(data.byte(kLocation), 47); + if (!flags.z()) + goto notdreamcentre; + al = 4; + placesetobject(); + al = 5; + placesetobject(); + return; +notdreamcentre: + _cmp(data.byte(kLocation), 38); + if (!flags.z()) + goto notcarpark; + data.word(kWatchingtime) = 57*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 57; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notcarpark: + _cmp(data.byte(kLocation), 32); + if (!flags.z()) + goto notalley; + data.word(kWatchingtime) = 66*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 66; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notalley: + _cmp(data.byte(kLocation), 24); + if (!flags.z()) + return /* (notedensagain) */; + al = 2; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); +} + +void DreamGenContext::initialinv() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 24); + if (flags.z()) + goto isedens; + return; +isedens: + al = 11; + ah = 5; + pickupob(); + al = 12; + ah = 6; + pickupob(); + al = 13; + ah = 7; + pickupob(); + al = 14; + ah = 8; + pickupob(); + al = 18; + al = 18; + ah = 0; + pickupob(); + al = 19; + ah = 1; + pickupob(); + al = 20; + ah = 9; + pickupob(); + al = 16; + ah = 2; + pickupob(); + data.byte(kWatchmode) = 1; + data.word(kReeltohold) = 0; + data.word(kEndofholdreel) = 6; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); +} + +void DreamGenContext::pickupob() { + STACK_CHECK; + data.byte(kLastinvpos) = ah; + data.byte(kObjecttype) = 2; + data.byte(kItemframe) = al; + data.byte(kCommand) = al; + getanyad(); + transfertoex(); +} + +void DreamGenContext::checkforemm() { + STACK_CHECK; +} + +void DreamGenContext::checkbasemem() { + STACK_CHECK; + bx = data.word(kHowmuchalloc); + _cmp(bx, 0x9360); + if (!flags.c()) + return /* (enoughmem) */; + data.byte(kGameerror) = 5; + { quickquit(); return; }; +} + +void DreamGenContext::allocatebuffers() { + STACK_CHECK; + bx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/16; + allocatemem(); + data.word(kExtras) = ax; + trysoundalloc(); + bx = (0+(66*60))/16; + allocatemem(); + data.word(kMapdata) = ax; + trysoundalloc(); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-534+68-0)/16; + allocatemem(); + data.word(kBuffers) = ax; + trysoundalloc(); + bx = (16*80)/16; + allocatemem(); + data.word(kFreedat) = ax; + trysoundalloc(); + bx = (64*128)/16; + allocatemem(); + data.word(kSetdat) = ax; + trysoundalloc(); + bx = (22*8*20*8)/16; + allocatemem(); + data.word(kMapstore) = ax; + allocatework(); + bx = 2048/16; + allocatemem(); + data.word(kSounddata) = ax; + bx = 2048/16; + allocatemem(); + data.word(kSounddata2) = ax; +} + +void DreamGenContext::clearbuffers() { + STACK_CHECK; + es = data.word(kBuffers); + cx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-534+68-0)/2; + ax = 0; + di = 0; + _stosw(cx, true); + es = data.word(kExtras); + cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2; + ax = 0x0ffff; + di = 0; + _stosw(cx, true); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)); + ds = cs; + si = 534; + cx = (991-534); + _movsb(cx, true); + es = data.word(kBuffers); + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-534); + ds = cs; + si = 0; + cx = (68-0); + _movsb(cx, true); + clearchanges(); +} + +void DreamGenContext::clearchanges() { + STACK_CHECK; + es = data.word(kBuffers); + cx = (250)*2; + ax = 0x0ffff; + di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + _stosw(cx, true); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)); + es = cs; + di = 534; + cx = (991-534); + _movsb(cx, true); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-534); + es = cs; + di = 0; + cx = (68-0); + _movsb(cx, true); + data.byte(kExpos) = 0; + data.word(kExframepos) = 0; + data.word(kExtextpos) = 0; + es = data.word(kExtras); + cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2; + ax = 0x0ffff; + di = 0; + _stosw(cx, true); + es = cs; + di = 8011; + al = 1; + _stosb(2); + al = 0; + _stosb(); + al = 1; + _stosb(); + ax = 0; + cx = 6; + _stosw(cx, true); +} + +void DreamGenContext::clearbeforeload() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 1); + if (!flags.z()) + return /* (noclear) */; + clearreels(); + clearrest(); + data.byte(kRoomloaded) = 0; +} + +void DreamGenContext::clearreels() { + STACK_CHECK; + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); +} + +void DreamGenContext::clearrest() { + STACK_CHECK; + es = data.word(kMapdata); + cx = (66*60)/2; + ax = 0; + di = (0); + _stosw(cx, true); + es = data.word(kBackdrop); + deallocatemem(); + es = data.word(kSetframes); + deallocatemem(); + es = data.word(kReels); + deallocatemem(); + es = data.word(kPeople); + deallocatemem(); + es = data.word(kSetdesc); + deallocatemem(); + es = data.word(kBlockdesc); + deallocatemem(); + es = data.word(kRoomdesc); + deallocatemem(); + es = data.word(kFreeframes); + deallocatemem(); + es = data.word(kFreedesc); + deallocatemem(); +} + +void DreamGenContext::parseblaster() { + STACK_CHECK; +lookattail: + al = es.byte(bx); + _cmp(al, 0); + if (flags.z()) + return /* (endtail) */; + _cmp(al, 13); + if (flags.z()) + return /* (endtail) */; + _cmp(al, 'i'); + if (flags.z()) + goto issoundint; + _cmp(al, 'I'); + if (flags.z()) + goto issoundint; + _cmp(al, 'b'); + if (flags.z()) + goto isbright; + _cmp(al, 'B'); + if (flags.z()) + goto isbright; + _cmp(al, 'a'); + if (flags.z()) + goto isbaseadd; + _cmp(al, 'A'); + if (flags.z()) + goto isbaseadd; + _cmp(al, 'n'); + if (flags.z()) + goto isnosound; + _cmp(al, 'N'); + if (flags.z()) + goto isnosound; + _cmp(al, 'd'); + if (flags.z()) + goto isdma; + _cmp(al, 'D'); + if (flags.z()) + goto isdma; + _inc(bx); + if (--cx) + goto lookattail; + return; +issoundint: + al = es.byte(bx+1); + _sub(al, '0'); + data.byte(kSoundint) = al; + _inc(bx); + goto lookattail; +isdma: + al = es.byte(bx+1); + _sub(al, '0'); + data.byte(kSounddmachannel) = al; + _inc(bx); + goto lookattail; +isbaseadd: + push(cx); + al = es.byte(bx+2); + _sub(al, '0'); + ah = 0; + cl = 4; + _shl(ax, cl); + _add(ax, 0x200); + data.word(kSoundbaseadd) = ax; + cx = pop(); + _inc(bx); + goto lookattail; +isbright: + data.byte(kBrightness) = 1; + _inc(bx); + goto lookattail; +isnosound: + data.byte(kSoundint) = 255; + _inc(bx); + goto lookattail; +} + +void DreamGenContext::startup() { + STACK_CHECK; + data.byte(kCurrentkey) = 0; + data.byte(kMainmode) = 0; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + showicon(); + getunderzoom(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + atmospheres(); +} + +void DreamGenContext::startup1() { + STACK_CHECK; + clearpalette(); + data.byte(kThroughdoor) = 0; + data.byte(kCurrentkey) = '0'; + data.byte(kMainmode) = 0; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + showicon(); + getunderzoom(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + atmospheres(); + worktoscreen(); + fadescreenup(); +} + +void DreamGenContext::screenupdate() { + STACK_CHECK; + newplace(); + mainscreen(); + animpointer(); + showpointer(); + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatchingmode; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + return /* (finishearly) */; +iswatchingmode: + vsync(); + readmouse1(); + dumppointer(); + dumptextline(); + delpointer(); + autolook(); + spriteupdate(); + watchcount(); + zoom(); + showpointer(); + _cmp(data.byte(kWongame), 0); + if (!flags.z()) + return /* (finishearly) */; + vsync(); + readmouse2(); + dumppointer(); + dumpzoom(); + delpointer(); + deleverything(); + printsprites(); + reelsonscreen(); + afternewroom(); + showpointer(); + vsync(); + readmouse3(); + dumppointer(); + dumpmap(); + dumptimedtext(); + delpointer(); + showpointer(); + vsync(); + readmouse4(); + dumppointer(); + dumpwatch(); + delpointer(); +} + +void DreamGenContext::watchreel() { + STACK_CHECK; + _cmp(data.word(kReeltowatch), -1); + if (flags.z()) + goto notplayingreel; + al = data.byte(kManspath); + _cmp(al, data.byte(kFinaldest)); + if (!flags.z()) + return /* (waitstopwalk) */; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (flags.z()) + goto notwatchpath; + return; +notwatchpath: + _dec(data.byte(kSpeedcount)); + _cmp(data.byte(kSpeedcount), -1); + if (!flags.z()) + goto showwatchreel; + al = data.byte(kWatchspeed); + data.byte(kSpeedcount) = al; + ax = data.word(kReeltowatch); + _cmp(ax, data.word(kEndwatchreel)); + if (!flags.z()) + goto ismorereel; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto showwatchreel; + data.word(kReeltowatch) = -1; + data.byte(kWatchmode) = -1; + _cmp(data.word(kReeltohold), -1); + if (flags.z()) + return /* (nomorereel) */; + data.byte(kWatchmode) = 1; + goto notplayingreel; +ismorereel: + _inc(data.word(kReeltowatch)); +showwatchreel: + ax = data.word(kReeltowatch); + data.word(kReelpointer) = ax; + plotreel(); + ax = data.word(kReelpointer); + data.word(kReeltowatch) = ax; + checkforshake(); + return; +notplayingreel: + _cmp(data.byte(kWatchmode), 1); + if (!flags.z()) + goto notholdingreel; + ax = data.word(kReeltohold); + data.word(kReelpointer) = ax; + plotreel(); + return; +notholdingreel: + _cmp(data.byte(kWatchmode), 2); + if (!flags.z()) + return /* (notreleasehold) */; + _dec(data.byte(kSpeedcount)); + _cmp(data.byte(kSpeedcount), -1); + if (!flags.z()) + goto notlastspeed2; + al = data.byte(kWatchspeed); + data.byte(kSpeedcount) = al; + _inc(data.word(kReeltohold)); +notlastspeed2: + ax = data.word(kReeltohold); + _cmp(ax, data.word(kEndofholdreel)); + if (!flags.z()) + goto ismorereel2; + data.word(kReeltohold) = -1; + data.byte(kWatchmode) = -1; + al = data.byte(kDestafterhold); + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + autosetwalk(); + return; +ismorereel2: + ax = data.word(kReeltohold); + data.word(kReelpointer) = ax; + plotreel(); +} + +void DreamGenContext::checkforshake() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 26); + if (!flags.z()) + return /* (notstartshake) */; + _cmp(ax, 104); + if (!flags.z()) + return /* (notstartshake) */; + data.byte(kShakecounter) = -1; +} + +void DreamGenContext::watchcount() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowatchworn) */; + _inc(data.byte(kTimercount)); + _cmp(data.byte(kTimercount), 9); + if (flags.z()) + goto flashdots; + _cmp(data.byte(kTimercount), 18); + if (flags.z()) + goto uptime; + return; +flashdots: + ax = 91*3+21; + di = 268+4; + bx = 21; + ds = data.word(kCharset1); + showframe(); + goto finishwatch; +uptime: + data.byte(kTimercount) = 0; + _add(data.byte(kSecondcount), 1); + _cmp(data.byte(kSecondcount), 60); + if (!flags.z()) + goto finishtime; + data.byte(kSecondcount) = 0; + _inc(data.byte(kMinutecount)); + _cmp(data.byte(kMinutecount), 60); + if (!flags.z()) + goto finishtime; + data.byte(kMinutecount) = 0; + _inc(data.byte(kHourcount)); + _cmp(data.byte(kHourcount), 24); + if (!flags.z()) + goto finishtime; + data.byte(kHourcount) = 0; +finishtime: + showtime(); +finishwatch: + data.byte(kWatchdump) = 1; +} + +void DreamGenContext::showtime() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowatch) */; + al = data.byte(kSecondcount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3+10); + ds = data.word(kCharset1); + di = 282+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3+10); + ds = data.word(kCharset1); + di = 282+9; + bx = 21; + showframe(); + al = data.byte(kMinutecount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 270+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 270+11; + bx = 21; + showframe(); + al = data.byte(kHourcount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 256+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 256+11; + bx = 21; + showframe(); + ax = 91*3+20; + ds = data.word(kCharset1); + di = 267+5; + bx = 21; + showframe(); +} + +void DreamGenContext::dumpwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchdump), 1); + if (!flags.z()) + return /* (nodumpwatch) */; + di = 256; + bx = 21; + cl = 40; + ch = 12; + multidump(); + data.byte(kWatchdump) = 0; +} + +void DreamGenContext::showbyte() { + STACK_CHECK; + dl = al; + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + onedigit(); + es.byte(di) = dl; + dl = al; + _and(dl, 15); + onedigit(); + es.byte(di+1) = dl; + _add(di, 3); +} + +void DreamGenContext::onedigit() { + STACK_CHECK; + _cmp(dl, 10); + if (!flags.c()) + goto morethan10; + _add(dl, '0'); + return; +morethan10: + _sub(dl, 10); + _add(dl, 'A'); +} + +void DreamGenContext::twodigitnum() { + STACK_CHECK; + ah = cl; + _dec(ah); +numloop1: + _inc(ah); + _sub(al, 10); + if (!flags.c()) + goto numloop1; + _add(al, 10); + _add(al, cl); +} + +void DreamGenContext::showword() { + STACK_CHECK; + ch = 0; + bx = 10000; + cl = 47; +word1: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word1; + _add(ax, bx); + convnum(); + cs.byte(di) = cl; + bx = 1000; + cl = 47; +word2: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word2; + _add(ax, bx); + convnum(); + cs.byte(di+1) = cl; + bx = 100; + cl = 47; +word3: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word3; + _add(ax, bx); + convnum(); + cs.byte(di+2) = cl; + bx = 10; + cl = 47; +word4: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word4; + _add(ax, bx); + convnum(); + cs.byte(di+3) = cl; + _add(al, 48); + cl = al; + convnum(); + cs.byte(di+4) = cl; +} + +void DreamGenContext::convnum() { + STACK_CHECK; + _cmp(ch, 0); + if (!flags.z()) + return /* (noconvnum) */; + _cmp(cl, '0'); + if (!flags.z()) + goto notzeronum; + cl = 32; + return /* (noconvnum) */; +notzeronum: + ch = 1; +} + +void DreamGenContext::walkandexamine() { + STACK_CHECK; + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + al = data.byte(kWalkexamtype); + data.byte(kCommandtype) = al; + al = data.byte(kWalkexamnum); + data.byte(kCommand) = al; + data.byte(kWalkandexam) = 0; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstowalk: + setwalk(); + data.byte(kReasseschanges) = 1; + return; +diff: + data.byte(kCommand) = al; + data.byte(kCommandtype) = ah; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto middleofwalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto middleofwalk; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); + if (!flags.z()) + goto middleofwalk; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto notblock; + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto dontcheck; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto isblock; +dontcheck: + getflagunderp(); + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + goto isblock; + _cmp(data.byte(kLastflag), 128); + if (!flags.c()) + goto isblock; + goto toofaraway; +notblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto toofaraway; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto isblock; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto isaperson; + examineobtext(); + return; +middleofwalk: + blocknametext(); + return; +isblock: + blocknametext(); + return; +isaperson: + personnametext(); + return; +toofaraway: + walktotext(); +} + +void DreamGenContext::mainscreen() { + STACK_CHECK; + data.byte(kInmaparea) = 0; + bx = 5122; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto checkmain; + bx = 5184; +checkmain: + checkcoords(); + _cmp(data.byte(kWalkandexam), 0); + if (flags.z()) + return /* (finishmain) */; + walkandexamine(); +} + +void DreamGenContext::madmanrun() { + STACK_CHECK; + _cmp(data.byte(kLocation), 14); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kPointermode), 2); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kMadmanflag), 0); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kCommandtype), 211); + if (flags.z()) + goto alreadyrun; + data.byte(kCommandtype) = 211; + al = 52; + commandonly(); +alreadyrun: + _cmp(data.word(kMousebutton), 1); + if (!flags.z()) + return /* (norun) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (norun) */; + data.byte(kLastweapon) = 8; +} + +void DreamGenContext::checkcoords() { + STACK_CHECK; + _cmp(data.byte(kNewlocation), 255); + if (flags.z()) + goto loop048; + return; +loop048: + ax = cs.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (nonefound) */; + push(bx); + _cmp(data.word(kMousex), ax); + if (flags.l()) + goto over045; + ax = cs.word(bx+2); + _cmp(data.word(kMousex), ax); + if (!flags.l()) + goto over045; + ax = cs.word(bx+4); + _cmp(data.word(kMousey), ax); + if (flags.l()) + goto over045; + ax = cs.word(bx+6); + _cmp(data.word(kMousey), ax); + if (!flags.l()) + goto over045; + ax = cs.word(bx+8); + __dispatch_call(ax); + ax = pop(); + return; +over045: + bx = pop(); + _add(bx, 10); + goto loop048; +} + +void DreamGenContext::identifyob() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + ax = data.word(kMousex); + _sub(ax, data.word(kMapadx)); + _cmp(ax, 22*8); + if (flags.c()) + goto notover1; + blank(); + return; +notover1: + bx = data.word(kMousey); + _sub(bx, data.word(kMapady)); + _cmp(bx, 20*8); + if (flags.c()) + goto notover2; + blank(); + return; +notover2: + data.byte(kInmaparea) = 1; + ah = bl; + push(ax); + findpathofpoint(); + data.byte(kPointerspath) = dl; + ax = pop(); + push(ax); + findfirstpath(); + data.byte(kPointerfirstpath) = al; + ax = pop(); + checkifex(); + if (!flags.z()) + return /* (finishidentify) */; + checkiffree(); + if (!flags.z()) + return /* (finishidentify) */; + checkifperson(); + if (!flags.z()) + return /* (finishidentify) */; + checkifset(); + if (!flags.z()) + return /* (finishidentify) */; + ax = data.word(kMousex); + _sub(ax, data.word(kMapadx)); + cl = al; + ax = data.word(kMousey); + _sub(ax, data.word(kMapady)); + ch = al; + checkone(); + _cmp(al, 0); + if (flags.z()) + goto nothingund; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto nothingund; + ah = 3; + obname(); + return; +nothingund: + blank(); +} + +void DreamGenContext::checkifperson() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)); + cx = 12; +identifyreel: + push(cx); + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notareelid; + push(es); + push(bx); + push(ax); + ax = es.word(bx+0); + data.word(kReelpointer) = ax; + getreelstart(); + _cmp(es.word(si+2), 0x0ffff); + if (!flags.z()) + goto notblankpers; + _add(si, 5); +notblankpers: + cx = es.word(si+2); + ax = es.word(si+0); + push(cx); + getreelframeax(); + cx = pop(); + _add(cl, es.byte(bx+4)); + _add(ch, es.byte(bx+5)); + dx = cx; + _add(dl, es.byte(bx+0)); + _add(dh, es.byte(bx+1)); + ax = pop(); + bx = pop(); + es = pop(); + _cmp(al, cl); + if (flags.c()) + goto notareelid; + _cmp(ah, ch); + if (flags.c()) + goto notareelid; + _cmp(al, dl); + if (!flags.c()) + goto notareelid; + _cmp(ah, dh); + if (!flags.c()) + goto notareelid; + cx = pop(); + ax = es.word(bx+2); + data.word(kPersondata) = ax; + al = es.byte(bx+4); + ah = 5; + obname(); + al = 0; + _cmp(al, 1); + return; +notareelid: + cx = pop(); + _add(bx, 5); + _dec(cx); + if (!flags.z()) + goto identifyreel; +} + +void DreamGenContext::checkifset() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32))+(127*5); + cx = 127; +identifyset: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notasetid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notasetid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notasetid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notasetid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notasetid; + pixelcheckset(); + if (flags.z()) + goto notasetid; + isitdescribed(); + if (flags.z()) + goto notasetid; + al = es.byte(bx+4); + ah = 1; + obname(); + al = 0; + _cmp(al, 1); + return; +notasetid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyset; +} + +void DreamGenContext::checkifex() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5))+(99*5); + cx = 99; +identifyex: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notanexid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notanexid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notanexid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notanexid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notanexid; + al = es.byte(bx+4); + ah = 4; + obname(); + al = 1; + _cmp(al, 0); + return; +notanexid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyex; +} + +void DreamGenContext::checkiffree() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5))+(79*5); + cx = 79; +identifyfree: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notafreeid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notafreeid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notafreeid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notafreeid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notafreeid; + al = es.byte(bx+4); + ah = 2; + obname(); + al = 0; + _cmp(al, 1); + return; +notafreeid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyfree; +} + +void DreamGenContext::isitdescribed() { + STACK_CHECK; + push(ax); + push(cx); + push(es); + push(bx); + al = es.byte(bx+4); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kSetdesc); + _add(bx, (0)); + ax = es.word(bx); + _add(ax, (0+(130*2))); + bx = ax; + dl = es.byte(bx); + bx = pop(); + es = pop(); + cx = pop(); + ax = pop(); + _cmp(dl, 0); +} + +void DreamGenContext::findpathofpoint() { + STACK_CHECK; + push(ax); + bx = (0); + es = data.word(kReels); + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + _add(bx, ax); + cx = pop(); + dl = 0; +pathloop: + al = es.byte(bx+6); + _cmp(al, 255); + if (!flags.z()) + goto flunkedit; + ax = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto flunkedit; + _cmp(cl, al); + if (flags.c()) + goto flunkedit; + _cmp(ch, ah); + if (flags.c()) + goto flunkedit; + ax = es.word(bx+4); + _cmp(cl, al); + if (!flags.c()) + goto flunkedit; + _cmp(ch, ah); + if (!flags.c()) + goto flunkedit; + return /* (gotvalidpath) */; +flunkedit: + _add(bx, 8); + _inc(dl); + _cmp(dl, 12); + if (!flags.z()) + goto pathloop; + dl = 255; +} + +void DreamGenContext::findfirstpath() { + STACK_CHECK; + push(ax); + bx = (0); + es = data.word(kReels); + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + _add(bx, ax); + cx = pop(); + dl = 0; +fpathloop: + ax = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto nofirst; + _cmp(cl, al); + if (flags.c()) + goto nofirst; + _cmp(ch, ah); + if (flags.c()) + goto nofirst; + ax = es.word(bx+4); + _cmp(cl, al); + if (!flags.c()) + goto nofirst; + _cmp(ch, ah); + if (!flags.c()) + goto nofirst; + goto gotfirst; +nofirst: + _add(bx, 8); + _inc(dl); + _cmp(dl, 12); + if (!flags.z()) + goto fpathloop; + al = 0; + return; +gotfirst: + al = es.byte(bx+6); +} + +void DreamGenContext::turnpathon() { + STACK_CHECK; + push(ax); + push(ax); + cl = 255; + ch = data.byte(kRoomnum); + _add(ch, 100); + findormake(); + ax = pop(); + getroomspaths(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + return /* (nopathon) */; + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 255; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnpathoff() { + STACK_CHECK; + push(ax); + push(ax); + cl = 0; + ch = data.byte(kRoomnum); + _add(ch, 100); + findormake(); + ax = pop(); + getroomspaths(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + return /* (nopathoff) */; + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnanypathon() { + STACK_CHECK; + push(ax); + push(ax); + cl = 255; + ch = ah; + _add(ch, 100); + findormake(); + ax = pop(); + al = ah; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 255; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnanypathoff() { + STACK_CHECK; + push(ax); + push(ax); + cl = 0; + ch = ah; + _add(ch, 100); + findormake(); + ax = pop(); + al = ah; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::checkifpathison() { + STACK_CHECK; + push(ax); + getroomspaths(); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx+6); + _cmp(al, 255); +} + +void DreamGenContext::afternewroom() { + STACK_CHECK; + _cmp(data.byte(kNowinnewroom), 0); + if (flags.z()) + return /* (notnew) */; + data.word(kTimecount) = 0; + createpanel(); + data.byte(kCommandtype) = 0; + findroominloc(); + _cmp(data.byte(kRyanon), 1); + if (flags.z()) + goto ryansoff; + al = data.byte(kRyanx); + _add(al, 12); + ah = data.byte(kRyany); + _add(ah, 12); + findpathofpoint(); + data.byte(kManspath) = dl; + findxyfrompath(); + data.byte(kResetmanxy) = 1; +ryansoff: + data.byte(kNewobs) = 1; + drawfloor(); + data.word(kLookcounter) = 160; + data.byte(kNowinnewroom) = 0; + showicon(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + mainscreen(); + getunderzoom(); + zoom(); + worktoscreenm(); + walkintoroom(); + reminders(); + atmospheres(); +} + +void DreamGenContext::atmospheres() { + STACK_CHECK; + cl = data.byte(kMapx); + ch = data.byte(kMapy); + bx = 5246; +nextatmos: + al = cs.byte(bx); + _cmp(al, 255); + if (flags.z()) + goto nomoreatmos; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto wrongatmos; + ax = cs.word(bx+1); + _cmp(ax, cx); + if (!flags.z()) + goto wrongatmos; + ax = cs.word(bx+3); + _cmp(al, data.byte(kCh0playing)); + if (flags.z()) + goto playingalready; + _cmp(data.byte(kLocation), 45); + if (!flags.z()) + goto notweb; + _cmp(data.word(kReeltowatch), 45); + if (flags.z()) + goto wrongatmos; +notweb: + playchannel0(); + _cmp(data.byte(kReallocation), 2); + _cmp(data.byte(kMapy), 0); + if (flags.z()) + goto fullvol; + if (!flags.z()) + goto notlouisvol; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto notlouisvol; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notlouisvol; + data.byte(kVolume) = 5; +notlouisvol: + _cmp(data.byte(kReallocation), 14); + if (!flags.z()) + goto notmad1; + _cmp(data.byte(kMapx), 33); + if (flags.z()) + goto ismad2; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notmad1; + data.byte(kVolume) = 5; + return; +ismad2: + data.byte(kVolume) = 0; + return; +notmad1: +playingalready: + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + return /* (notlouisvol2) */; + _cmp(data.byte(kMapx), 22); + if (flags.z()) + goto louisvol; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + return /* (notlouisvol2) */; +fullvol: + data.byte(kVolume) = 0; + return; +louisvol: + data.byte(kVolume) = 5; + return; +wrongatmos: + _add(bx, 5); + goto nextatmos; +nomoreatmos: + cancelch0(); +} + +void DreamGenContext::walkintoroom() { + STACK_CHECK; + _cmp(data.byte(kLocation), 14); + if (!flags.z()) + return /* (notlair) */; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + return /* (notlair) */; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + autosetwalk(); +} + +void DreamGenContext::afterintroroom() { + STACK_CHECK; + _cmp(data.byte(kNowinnewroom), 0); + if (flags.z()) + return /* (notnewintro) */; + clearwork(); + findroominloc(); + data.byte(kNewobs) = 1; + drawfloor(); + reelsonscreen(); + spriteupdate(); + printsprites(); + worktoscreen(); + data.byte(kNowinnewroom) = 0; +} + +void DreamGenContext::obname() { + STACK_CHECK; + _cmp(data.byte(kReasseschanges), 0); + if (flags.z()) + goto notnewpath; + data.byte(kReasseschanges) = 0; + goto diff; +notnewpath: + _cmp(ah, data.byte(kCommandtype)); + if (flags.z()) + goto notdiffob; + goto diff; +notdiffob: + _cmp(al, data.byte(kCommand)); + if (!flags.z()) + goto diff; + _cmp(data.byte(kWalkandexam), 1); + if (flags.z()) + goto walkandexamine; + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (noobselect) */; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto isntblock; + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + return /* (noobselect) */; +isntblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto wantstowalk; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto wantstowalk; + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto wantstotalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstotalk: + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noobselect) */; + talk(); + return; +walkandexamine: + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + al = data.byte(kWalkexamtype); + data.byte(kCommandtype) = al; + al = data.byte(kWalkexamnum); + data.byte(kCommand) = al; + data.byte(kWalkandexam) = 0; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstowalk: + setwalk(); + data.byte(kReasseschanges) = 1; + return; +diff: + data.byte(kCommand) = al; + data.byte(kCommandtype) = ah; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto middleofwalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto middleofwalk; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); + if (!flags.z()) + goto middleofwalk; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto notblock; + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto dontcheck; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto isblock; +dontcheck: + getflagunderp(); + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + goto isblock; + _cmp(data.byte(kLastflag), 128); + if (!flags.c()) + goto isblock; + goto toofaraway; +notblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto toofaraway; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto isblock; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto isaperson; + examineobtext(); + return; +middleofwalk: + blocknametext(); + return; +isblock: + blocknametext(); + return; +isaperson: + personnametext(); + return; +toofaraway: + walktotext(); +} + +void DreamGenContext::finishedwalking() { + STACK_CHECK; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + return /* (iswalking) */; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); +} + +void DreamGenContext::examineobtext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 1; + commandwithob(); +} + +void DreamGenContext::commandwithob() { + STACK_CHECK; + push(ax); + push(ax); + push(bx); + push(cx); + push(dx); + push(es); + push(ds); + push(si); + push(di); + deltextline(); + di = pop(); + si = pop(); + ds = pop(); + es = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); + push(bx); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + ax = pop(); + di = 5847; + copyname(); + ax = pop(); + di = data.word(kLastxpos); + _cmp(al, 0); + if (flags.z()) + goto noadd; + _add(di, 5); +noadd: + bx = data.word(kTextaddressy); + es = cs; + si = 5847; + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + data.byte(kNewtextline) = 1; +} + +void DreamGenContext::commandonly() { + STACK_CHECK; + push(ax); + push(bx); + push(cx); + push(dx); + push(es); + push(ds); + push(si); + push(di); + deltextline(); + di = pop(); + si = pop(); + ds = pop(); + es = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + data.byte(kNewtextline) = 1; +} + +void DreamGenContext::printmessage() { + STACK_CHECK; + push(dx); + push(bx); + push(di); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = pop(); + bx = pop(); + dx = pop(); + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::printmessage2() { + STACK_CHECK; + push(dx); + push(bx); + push(di); + push(ax); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + ax = pop(); +searchmess: + push(ax); + findnextcolon(); + ax = pop(); + _dec(ah); + if (!flags.z()) + goto searchmess; + di = pop(); + bx = pop(); + dx = pop(); + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::blocknametext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 0; + commandwithob(); +} + +void DreamGenContext::personnametext() { + STACK_CHECK; + bl = data.byte(kCommand); + _and(bl, 127); + bh = data.byte(kCommandtype); + al = 2; + commandwithob(); +} + +void DreamGenContext::walktotext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 3; + commandwithob(); +} + +void DreamGenContext::getflagunderp() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, data.word(kMapadx)); + ax = data.word(kMousey); + _sub(ax, data.word(kMapady)); + ch = al; + checkone(); + data.byte(kLastflag) = cl; + data.byte(kLastflagex) = ch; +} + +void DreamGenContext::setwalk() { + STACK_CHECK; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto alreadywalking; + al = data.byte(kPointerspath); + _cmp(al, data.byte(kManspath)); + if (flags.z()) + goto cantwalk2; + _cmp(data.byte(kWatchmode), 1); + if (flags.z()) + goto holdingreel; + _cmp(data.byte(kWatchmode), 2); + if (flags.z()) + return /* (cantwalk) */; + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + _cmp(data.word(kMousebutton), 2); + if (!flags.z()) + goto notwalkandexam; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto notwalkandexam; + data.byte(kWalkandexam) = 1; + al = data.byte(kCommandtype); + data.byte(kWalkexamtype) = al; + al = data.byte(kCommand); + data.byte(kWalkexamnum) = al; +notwalkandexam: + autosetwalk(); + return; +cantwalk2: + facerightway(); + return; +alreadywalking: + al = data.byte(kPointerspath); + data.byte(kFinaldest) = al; + return; +holdingreel: + data.byte(kDestafterhold) = al; + data.byte(kWatchmode) = 2; +} + +void DreamGenContext::autosetwalk() { + STACK_CHECK; + al = data.byte(kManspath); + _cmp(data.byte(kFinaldest), al); + if (!flags.z()) + goto notsamealready; + return; +notsamealready: + getroomspaths(); + checkdest(); + push(bx); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + _sub(ax, 12); + data.word(kLinestartx) = ax; + al = es.byte(bx+1); + ah = 0; + _sub(ax, 12); + data.word(kLinestarty) = ax; + bx = pop(); + al = data.byte(kDestination); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + _sub(ax, 12); + data.word(kLineendx) = ax; + al = es.byte(bx+1); + ah = 0; + _sub(ax, 12); + data.word(kLineendy) = ax; + bresenhams(); + _cmp(data.byte(kLinedirection), 0); + if (flags.z()) + goto normalline; + al = data.byte(kLinelength); + _dec(al); + data.byte(kLinepointer) = al; + data.byte(kLinedirection) = 1; + return; +normalline: + data.byte(kLinepointer) = 0; +} + +void DreamGenContext::checkdest() { + STACK_CHECK; + push(bx); + _add(bx, 12*8); + ah = data.byte(kManspath); + cl = 4; + _shl(ah, cl); + al = data.byte(kDestination); + cl = 24; + ch = data.byte(kDestination); +checkdestloop: + dh = es.byte(bx); + _and(dh, 0xf0); + dl = es.byte(bx); + _and(dl, 0xf); + _cmp(ax, dx); + if (!flags.z()) + goto nextcheck; + al = es.byte(bx+1); + _and(al, 15); + data.byte(kDestination) = al; + bx = pop(); + return; +nextcheck: + dl = es.byte(bx); + _and(dl, 0xf0); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + dh = es.byte(bx); + _and(dh, 0xf); + _shl(dh, 1); + _shl(dh, 1); + _shl(dh, 1); + _shl(dh, 1); + _cmp(ax, dx); + if (!flags.z()) + goto nextcheck2; + ch = es.byte(bx+1); + _and(ch, 15); +nextcheck2: + _add(bx, 2); + _dec(cl); + if (!flags.z()) + goto checkdestloop; + data.byte(kDestination) = ch; + bx = pop(); +} + +void DreamGenContext::bresenhams() { + STACK_CHECK; + workoutframes(); + dx = data; + es = dx; + di = 8173; + si = 1; + data.byte(kLinedirection) = 0; + cx = data.word(kLineendx); + _sub(cx, data.word(kLinestartx)); + if (flags.z()) + goto vertline; + if (!flags.s()) + goto line1; + _neg(cx); + bx = data.word(kLineendx); + _xchg(bx, data.word(kLinestartx)); + data.word(kLineendx) = bx; + bx = data.word(kLineendy); + _xchg(bx, data.word(kLinestarty)); + data.word(kLineendy) = bx; + data.byte(kLinedirection) = 1; +line1: + bx = data.word(kLineendy); + _sub(bx, data.word(kLinestarty)); + if (flags.z()) + goto horizline; + if (!flags.s()) + goto line3; + _neg(bx); + _neg(si); +line3: + push(si); + data.byte(kLineroutine) = 0; + _cmp(bx, cx); + if (flags.le()) + goto line4; + data.byte(kLineroutine) = 1; + _xchg(bx, cx); +line4: + _shl(bx, 1); + data.word(kIncrement1) = bx; + _sub(bx, cx); + si = bx; + _sub(bx, cx); + data.word(kIncrement2) = bx; + ax = data.word(kLinestartx); + bx = data.word(kLinestarty); + ah = bl; + _inc(cx); + bx = pop(); + _cmp(data.byte(kLineroutine), 1); + if (flags.z()) + goto hislope; + goto loslope; +vertline: + ax = data.word(kLinestarty); + bx = data.word(kLineendy); + cx = bx; + _sub(cx, ax); + if (!flags.l()) + goto line31; + _neg(cx); + ax = bx; + data.byte(kLinedirection) = 1; +line31: + _inc(cx); + bx = data.word(kLinestartx); + _xchg(ax, bx); + ah = bl; + bx = si; +line32: + _stosw(); + _add(ah, bl); + if (--cx) + goto line32; + goto lineexit; +horizline: + ax = data.word(kLinestartx); + bx = data.word(kLinestarty); + ah = bl; + _inc(cx); +horizloop: + _stosw(); + _inc(al); + if (--cx) + goto horizloop; + goto lineexit; +loslope: +loloop: + _stosw(); + _inc(al); + _or(si, si); + if (!flags.s()) + goto line12; + _add(si, data.word(kIncrement1)); + if (--cx) + goto loloop; + goto lineexit; +line12: + _add(si, data.word(kIncrement2)); + _add(ah, bl); + if (--cx) + goto loloop; + goto lineexit; +hislope: +hiloop: + _stosw(); + _add(ah, bl); + _or(si, si); + if (!flags.s()) + goto line23; + _add(si, data.word(kIncrement1)); + if (--cx) + goto hiloop; + goto lineexit; +line23: + _add(si, data.word(kIncrement2)); + _inc(al); + if (--cx) + goto hiloop; +lineexit: + _sub(di, 8173); + ax = di; + _shr(ax, 1); + data.byte(kLinelength) = al; +} + +void DreamGenContext::workoutframes() { + STACK_CHECK; + bx = data.word(kLinestartx); + _add(bx, 32); + ax = data.word(kLineendx); + _add(ax, 32); + _sub(bx, ax); + if (!flags.c()) + goto notneg1; + _neg(bx); +notneg1: + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto notneg2; + _neg(cx); +notneg2: + _cmp(bx, cx); + if (!flags.c()) + goto tendstohoriz; + dl = 2; + ax = cx; + _shr(ax, 1); + _cmp(bx, ax); + if (flags.c()) + goto gotquad; + dl = 1; + goto gotquad; +tendstohoriz: + dl = 0; + ax = bx; + _shr(ax, 1); + _cmp(cx, ax); + if (flags.c()) + goto gotquad; + dl = 1; + goto gotquad; +gotquad: + bx = data.word(kLinestartx); + _add(bx, 32); + ax = data.word(kLineendx); + _add(ax, 32); + _sub(bx, ax); + if (flags.c()) + goto isinright; + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto topleft; + _cmp(dl, 1); + if (flags.z()) + goto noswap1; + _xor(dl, 2); +noswap1: + _add(dl, 4); + goto success; +topleft: + _add(dl, 6); + goto success; +isinright: + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto botright; + _add(dl, 2); + goto success; +botright: + _cmp(dl, 1); + if (flags.z()) + goto noswap2; + _xor(dl, 2); +noswap2: +success: + _and(dl, 7); + data.byte(kTurntoface) = dl; + data.byte(kTurndirection) = 0; +} + +void DreamGenContext::getroomspaths() { + STACK_CHECK; + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); +} + +void DreamGenContext::copyname() { + STACK_CHECK; + push(di); + findobname(); + di = pop(); + es = cs; + cx = 28; +make: + _lodsb(); + _cmp(al, ':'); + if (flags.z()) + goto finishmakename; + _cmp(al, 0); + if (flags.z()) + goto finishmakename; + _stosb(); + if (--cx) + goto make; +finishmakename: + _inc(cx); + al = 0; + _stosb(); + return; + al = 255; + _stosb(cx, true); +} + +void DreamGenContext::findobname() { + STACK_CHECK; + push(ax); + ah = 0; + _add(ax, ax); + bx = ax; + ax = pop(); + _cmp(ah, 5); + if (!flags.z()) + goto notpersonname; + push(ax); + _and(al, 127); + ah = 0; + bx = 64*2; + _mul(bx); + si = ax; + ds = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = ds.word(si); + _add(ax, cx); + si = ax; + ax = pop(); + return; +notpersonname: + _cmp(ah, 4); + if (!flags.z()) + goto notextraname; + ds = data.word(kExtras); + _add(bx, (0+2080+30000+(16*114))); + ax = ds.word(bx); + _add(ax, (0+2080+30000+(16*114)+((114+2)*2))); + si = ax; + return; +notextraname: + _cmp(ah, 2); + if (!flags.z()) + goto notfreename; + ds = data.word(kFreedesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(82*2))); + si = ax; + return; +notfreename: + _cmp(ah, 1); + if (!flags.z()) + goto notsetname; + ds = data.word(kSetdesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(130*2))); + si = ax; + return; +notsetname: + ds = data.word(kBlockdesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(98*2))); + si = ax; +} + +void DreamGenContext::showicon() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 50); + if (!flags.c()) + goto isdream1; + showpanel(); + showman(); + roomname(); + panelicons1(); + zoomicon(); + return; +isdream1: + ds = data.word(kTempsprites); + di = 72; + bx = 2; + al = 45; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 72+47; + bx = 2; + al = 46; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 69-10; + bx = 21; + al = 49; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 160+88; + bx = 2; + al = 45; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+43; + bx = 2; + al = 46; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+101; + bx = 21; + al = 49; + ah = 4; + showframe(); + middlepanel(); +} + +void DreamGenContext::middlepanel() { + STACK_CHECK; + ds = data.word(kTempsprites); + di = 72+47+20; + bx = 0; + al = 48; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 72+19; + bx = 21; + al = 47; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 160+23; + bx = 0; + al = 48; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+71; + bx = 21; + al = 47; + ah = 4; + showframe(); +} + +void DreamGenContext::showman() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 0; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kIcons1); + di = 0; + bx = 114; + al = 1; + ah = 0; + showframe(); + _cmp(data.byte(kShadeson), 0); + if (flags.z()) + return /* (notverycool) */; + ds = data.word(kIcons1); + di = 28; + bx = 25; + al = 2; + ah = 0; + showframe(); +} + +void DreamGenContext::showpanel() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 72; + bx = 0; + al = 19; + ah = 0; + showframe(); + ds = data.word(kIcons1); + di = 192; + bx = 0; + al = 19; + ah = 0; + showframe(); +} + +void DreamGenContext::roomname() { + STACK_CHECK; + di = 88; + bx = 18; + al = 53; + dl = 240; + printmessage(); + bl = data.byte(kRoomnum); + _cmp(bl, 32); + if (flags.c()) + goto notover32; + _sub(bl, 32); +notover32: + bh = 0; + _add(bx, bx); + es = data.word(kRoomdesc); + _add(bx, (0)); + ax = es.word(bx); + _add(ax, (0+(38*2))); + si = ax; + data.word(kLinespacing) = 7; + di = 88; + bx = 25; + dl = 120; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto gotpl; + dl = 160; +gotpl: + al = 0; + ah = 0; + printdirect(); + data.word(kLinespacing) = 10; + usecharset1(); +} + +void DreamGenContext::usecharset1() { + STACK_CHECK; + ax = data.word(kCharset1); + data.word(kCurrentset) = ax; +} + +void DreamGenContext::usetempcharset() { + STACK_CHECK; + ax = data.word(kTempcharset); + data.word(kCurrentset) = ax; +} + +void DreamGenContext::showexit() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 274; + bx = 154; + al = 11; + ah = 0; + showframe(); +} + +void DreamGenContext::panelicons1() { + STACK_CHECK; + di = 0; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto watchison; + di = 48; +watchison: + push(di); + ds = data.word(kIcons2); + _add(di, 204); + bx = 4; + al = 2; + ah = 0; + showframe(); + di = pop(); + push(di); + _cmp(data.byte(kZoomon), 1); + if (flags.z()) + goto zoomisoff; + ds = data.word(kIcons1); + _add(di, 228); + bx = 8; + al = 5; + ah = 0; + showframe(); +zoomisoff: + di = pop(); + showwatch(); +} + +void DreamGenContext::showwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowristwatch) */; + ds = data.word(kIcons1); + di = 250; + bx = 1; + al = 6; + ah = 0; + showframe(); + showtime(); +} + +void DreamGenContext::zoomicon() { + STACK_CHECK; + _cmp(data.byte(kZoomon), 0); + if (flags.z()) + return /* (nozoom1) */; + ds = data.word(kIcons1); + di = (8); + bx = (132)-1; + al = 8; + ah = 0; + showframe(); +} + +void DreamGenContext::showblink() { + STACK_CHECK; + _cmp(data.byte(kManisoffscreen), 1); + if (flags.z()) + return /* (finblink1) */; + _inc(data.byte(kBlinkcount)); + _cmp(data.byte(kShadeson), 0); + if (!flags.z()) + return /* (finblink1) */; + _cmp(data.byte(kReallocation), 50); + if (!flags.c()) + return /* (eyesshut) */; + al = data.byte(kBlinkcount); + _cmp(al, 3); + if (!flags.z()) + return /* (finblink1) */; + data.byte(kBlinkcount) = 0; + al = data.byte(kBlinkframe); + _inc(al); + data.byte(kBlinkframe) = al; + _cmp(al, 6); + if (flags.c()) + goto nomorethan6; + al = 6; +nomorethan6: + ah = 0; + bx = 5888; + _add(bx, ax); + al = cs.byte(bx); + ds = data.word(kIcons1); + di = 44; + bx = 32; + ah = 0; + showframe(); +} + +void DreamGenContext::dumpblink() { + STACK_CHECK; + _cmp(data.byte(kShadeson), 0); + if (!flags.z()) + return /* (nodumpeye) */; + _cmp(data.byte(kBlinkcount), 0); + if (!flags.z()) + return /* (nodumpeye) */; + al = data.byte(kBlinkframe); + _cmp(al, 6); + if (!flags.c()) + return /* (nodumpeye) */; + push(ds); + di = 44; + bx = 32; + cl = 16; + ch = 12; + multidump(); + ds = pop(); +} + +void DreamGenContext::worktoscreenm() { + STACK_CHECK; + animpointer(); + readmouse(); + showpointer(); + vsync(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::blank() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 199); + if (flags.z()) + return /* (alreadyblnk) */; + data.byte(kCommandtype) = 199; + al = 0; + commandonly(); +} + +void DreamGenContext::allpointer() { + STACK_CHECK; + readmouse(); + showpointer(); + dumppointer(); +} + +void DreamGenContext::hangonp() { + STACK_CHECK; + push(cx); + _add(cx, cx); + ax = pop(); + _add(cx, ax); + data.word(kMaintimer) = 0; + al = data.byte(kPointerframe); + ah = data.byte(kPickup); + push(ax); + data.byte(kPointermode) = 3; + data.byte(kPickup) = 0; + push(cx); + data.byte(kCommandtype) = 255; + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); +hangloop: + push(cx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); + ax = data.word(kMousebutton); + _cmp(ax, 0); + if (flags.z()) + goto notpressed; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto getoutofit; +notpressed: + if (--cx) + goto hangloop; +getoutofit: + delpointer(); + ax = pop(); + data.byte(kPointerframe) = al; + data.byte(kPickup) = ah; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::hangonw() { + STACK_CHECK; +hangloopw: + push(cx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); + if (--cx) + goto hangloopw; +} + +void DreamGenContext::hangoncurs() { + STACK_CHECK; +monloop1: + push(cx); + printcurs(); + vsync(); + delcurs(); + cx = pop(); + if (--cx) + goto monloop1; +} + +void DreamGenContext::getunderzoom() { + STACK_CHECK; + di = (8)+5; + bx = (132)+4; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + cl = 46; + ch = 40; + multiget(); +} + +void DreamGenContext::dumpzoom() { + STACK_CHECK; + _cmp(data.byte(kZoomon), 1); + if (!flags.z()) + return /* (notzoomon) */; + di = (8)+5; + bx = (132)+4; + cl = 46; + ch = 40; + multidump(); +} + +void DreamGenContext::putunderzoom() { + STACK_CHECK; + di = (8)+5; + bx = (132)+4; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + cl = 46; + ch = 40; + multiput(); +} + +void DreamGenContext::crosshair() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto nocross; + _cmp(data.byte(kCommandtype), 10); + if (!flags.c()) + goto nocross; + es = data.word(kWorkspace); + ds = data.word(kIcons1); + di = (8)+24; + bx = (132)+19; + al = 9; + ah = 0; + showframe(); + return; +nocross: + es = data.word(kWorkspace); + ds = data.word(kIcons1); + di = (8)+24; + bx = (132)+19; + al = 29; + ah = 0; + showframe(); +} + +void DreamGenContext::showpointer() { + STACK_CHECK; + showblink(); + di = data.word(kMousex); + data.word(kOldpointerx) = di; + bx = data.word(kMousey); + data.word(kOldpointery) = bx; + _cmp(data.byte(kPickup), 1); + if (flags.z()) + goto itsanobject; + push(bx); + push(di); + ds = data.word(kIcons1); + al = data.byte(kPointerframe); + _add(al, 20); + ah = 0; + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + cx = ds.word(si); + _cmp(cl, 12); + if (!flags.c()) + goto notsmallx; + cl = 12; +notsmallx: + _cmp(ch, 12); + if (!flags.c()) + goto notsmally; + ch = 12; +notsmally: + data.byte(kPointerxs) = cl; + data.byte(kPointerys) = ch; + push(ds); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60); + multiget(); + ds = pop(); + di = pop(); + bx = pop(); + push(di); + push(bx); + al = data.byte(kPointerframe); + _add(al, 20); + ah = 0; + showframe(); + bx = pop(); + di = pop(); + return; +itsanobject: + al = data.byte(kItemframe); + ds = data.word(kExtras); + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto itsfrominv; + ds = data.word(kFreeframes); +itsfrominv: + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 0; + push(ax); + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + ax = 2080; + cx = ds.word(si); + _cmp(cl, 12); + if (!flags.c()) + goto notsmallx2; + cl = 12; +notsmallx2: + _cmp(ch, 12); + if (!flags.c()) + goto notsmally2; + ch = 12; +notsmally2: + data.byte(kPointerxs) = cl; + data.byte(kPointerys) = ch; + ax = pop(); + push(di); + push(bx); + push(ax); + push(bx); + push(di); + push(ds); + al = cl; + ah = 0; + _shr(ax, 1); + _sub(data.word(kOldpointerx), ax); + _sub(di, ax); + al = ch; + _shr(ax, 1); + _sub(data.word(kOldpointery), ax); + _sub(bx, ax); + ds = data.word(kBuffers); + si = (0+(228*13)+32+60); + multiget(); + ds = pop(); + di = pop(); + bx = pop(); + ax = pop(); + ah = 128; + showframe(); + bx = pop(); + di = pop(); + ds = data.word(kIcons1); + al = 3; + ah = 128; + showframe(); +} + +void DreamGenContext::delpointer() { + STACK_CHECK; + ax = data.word(kOldpointerx); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (nevershown) */; + data.word(kDelherex) = ax; + ax = data.word(kOldpointery); + data.word(kDelherey) = ax; + cl = data.byte(kPointerxs); + data.byte(kDelxs) = cl; + ch = data.byte(kPointerys); + data.byte(kDelys) = ch; + ds = data.word(kBuffers); + si = (0+(228*13)+32+60); + di = data.word(kDelherex); + bx = data.word(kDelherey); + multiput(); +} + +void DreamGenContext::dumppointer() { + STACK_CHECK; + dumpblink(); + cl = data.byte(kDelxs); + ch = data.byte(kDelys); + di = data.word(kDelherex); + bx = data.word(kDelherey); + multidump(); + bx = data.word(kOldpointery); + di = data.word(kOldpointerx); + _cmp(di, data.word(kDelherex)); + if (!flags.z()) + goto difffound; + _cmp(bx, data.word(kDelherey)); + if (flags.z()) + return /* (notboth) */; +difffound: + cl = data.byte(kPointerxs); + ch = data.byte(kPointerys); + multidump(); +} + +void DreamGenContext::undertextline() { + STACK_CHECK; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); +_tmp1: + ds = data.word(kBuffers); + si = (0); + cl = (228); + ch = (13); + multiget(); +} + +void DreamGenContext::deltextline() { + STACK_CHECK; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); +_tmp1: + ds = data.word(kBuffers); + si = (0); + cl = (228); + ch = (13); + multiput(); +} + +void DreamGenContext::dumptextline() { + STACK_CHECK; + _cmp(data.byte(kNewtextline), 1); + if (!flags.z()) + return /* (nodumptextline) */; + data.byte(kNewtextline) = 0; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + _cmp(data.byte(kForeignrelease), 0); + if (flags.z()) + goto _tmp1; + _sub(bx, 3); +_tmp1: + cl = (228); + ch = (13); + multidump(); +} + +void DreamGenContext::animpointer() { + STACK_CHECK; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + goto combathand; + _cmp(data.byte(kPointermode), 3); + if (flags.z()) + goto mousehand; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatchpoint; + data.byte(kPointerframe) = 11; + return; +notwatchpoint: + data.byte(kPointerframe) = 0; + _cmp(data.byte(kInmaparea), 0); + if (flags.z()) + return /* (gothand) */; + _cmp(data.byte(kPointerfirstpath), 0); + if (flags.z()) + return /* (gothand) */; + getflagunderp(); + _cmp(cl, 2); + if (flags.c()) + return /* (gothand) */; + _cmp(cl, 128); + if (!flags.c()) + return /* (gothand) */; + data.byte(kPointerframe) = 3; + _test(cl, 4); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 4; + _test(cl, 16); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 5; + _test(cl, 2); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 6; + _test(cl, 8); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 8; + return; +mousehand: + _cmp(data.byte(kPointerspeed), 0); + if (flags.z()) + goto rightspeed3; + _dec(data.byte(kPointerspeed)); + goto finflashmouse; +rightspeed3: + data.byte(kPointerspeed) = 5; + _inc(data.byte(kPointercount)); + _cmp(data.byte(kPointercount), 16); + if (!flags.z()) + goto finflashmouse; + data.byte(kPointercount) = 0; +finflashmouse: + al = data.byte(kPointercount); + ah = 0; + bx = 5895; + _add(bx, ax); + al = cs.byte(bx); + data.byte(kPointerframe) = al; + return; +combathand: + data.byte(kPointerframe) = 0; + _cmp(data.byte(kReallocation), 14); + if (!flags.z()) + return /* (notarrow) */; + _cmp(data.byte(kCommandtype), 211); + if (!flags.z()) + return /* (notarrow) */; + data.byte(kPointerframe) = 5; +} + +void DreamGenContext::readmouse() { + STACK_CHECK; + ax = data.word(kMousebutton); + data.word(kOldbutton) = ax; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton) = bx; +} + +void DreamGenContext::readmouse1() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton1) = bx; +} + +void DreamGenContext::readmouse2() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton2) = bx; +} + +void DreamGenContext::readmouse3() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton3) = bx; +} + +void DreamGenContext::readmouse4() { + STACK_CHECK; + ax = data.word(kMousebutton); + data.word(kOldbutton) = ax; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + ax = data.word(kMousebutton1); + _or(ax, data.word(kMousebutton2)); + _or(ax, data.word(kMousebutton3)); + _or(bx, ax); + data.word(kMousebutton) = bx; +} + +void DreamGenContext::readkey() { + STACK_CHECK; + bx = data.word(kBufferout); + _cmp(bx, data.word(kBufferin)); + if (flags.z()) + goto nokey; + _inc(bx); + _and(bx, 15); + data.word(kBufferout) = bx; + di = 5912; + _add(di, bx); + al = cs.byte(di); + data.byte(kCurrentkey) = al; + return; +nokey: + data.byte(kCurrentkey) = 0; +} + +void DreamGenContext::randomnum1() { + STACK_CHECK; + push(ds); + push(es); + push(di); + push(bx); + push(cx); + randomnumber(); + cx = pop(); + bx = pop(); + di = pop(); + es = pop(); + ds = pop(); +} + +void DreamGenContext::randomnum2() { + STACK_CHECK; + push(ds); + push(es); + push(di); + push(bx); + push(ax); + randomnumber(); + cl = al; + ax = pop(); + bx = pop(); + di = pop(); + es = pop(); + ds = pop(); +} + +void DreamGenContext::hangon() { + STACK_CHECK; +hangonloop: + push(cx); + vsync(); + cx = pop(); + if (--cx) + goto hangonloop; +} + +void DreamGenContext::loadtraveltext() { + STACK_CHECK; + dx = 2234; + standardload(); + data.word(kTraveltext) = ax; +} + +void DreamGenContext::loadintotemp() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics) = ax; +} + +void DreamGenContext::loadintotemp2() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics2) = ax; +} + +void DreamGenContext::loadintotemp3() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics3) = ax; +} + +void DreamGenContext::loadtempcharset() { + STACK_CHECK; + standardload(); + data.word(kTempcharset) = ax; +} + +void DreamGenContext::standardload() { + STACK_CHECK; + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + ds = ax; + cx = pop(); + push(ax); + dx = 0; + readfromfile(); + closefile(); + ax = pop(); +} + +void DreamGenContext::loadtemptext() { + STACK_CHECK; + standardload(); + data.word(kTextfile1) = ax; +} + +void DreamGenContext::loadroom() { + STACK_CHECK; + data.byte(kRoomloaded) = 1; + data.word(kTimecount) = 0; + data.word(kMaintimer) = 0; + data.word(kMapoffsetx) = 104; + data.word(kMapoffsety) = 38; + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + al = data.byte(kNewlocation); + data.byte(kLocation) = al; + getroomdata(); + startloading(); + loadroomssample(); + switchryanon(); + drawflags(); + getdimension(); +} + +void DreamGenContext::loadroomssample() { + STACK_CHECK; + al = data.byte(kRoomssample); + _cmp(al, 255); + if (flags.z()) + return /* (loadedalready) */; + _cmp(al, data.byte(kCurrentsample)); + if (flags.z()) + return /* (loadedalready) */; + data.byte(kCurrentsample) = al; + al = data.byte(kCurrentsample); + cl = '0'; + twodigitnum(); + di = 1896; + _xchg(al, ah); + cs.word(di+10) = ax; + dx = di; + loadsecondsample(); +} + +void DreamGenContext::getridofreels() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 0); + if (flags.z()) + return /* (dontgetrid) */; + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); +} + +void DreamGenContext::getridofall() { + STACK_CHECK; + es = data.word(kBackdrop); + deallocatemem(); + es = data.word(kSetframes); + deallocatemem(); + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); + es = data.word(kReels); + deallocatemem(); + es = data.word(kPeople); + deallocatemem(); + es = data.word(kSetdesc); + deallocatemem(); + es = data.word(kBlockdesc); + deallocatemem(); + es = data.word(kRoomdesc); + deallocatemem(); + es = data.word(kFreeframes); + deallocatemem(); + es = data.word(kFreedesc); + deallocatemem(); +} + +void DreamGenContext::restorereels() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 0); + if (flags.z()) + return /* (dontrestore) */; + al = data.byte(kReallocation); + getroomdata(); + dx = bx; + openfile(); + readheader(); + dontloadseg(); + dontloadseg(); + dontloadseg(); + dontloadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + closefile(); +} + +void DreamGenContext::restoreall() { + STACK_CHECK; + al = data.byte(kLocation); + getroomdata(); + dx = bx; + openfile(); + readheader(); + allocateload(); + ds = ax; + data.word(kBackdrop) = ax; + dx = (0); + loadseg(); + ds = data.word(kWorkspace); + dx = (0); + cx = 132*66; + al = 0; + fillspace(); + loadseg(); + sortoutmap(); + allocateload(); + data.word(kSetframes) = ax; + ds = ax; + dx = (0); + loadseg(); + dontloadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReels) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kPeople) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kSetdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kBlockdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kRoomdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kFreeframes) = ax; + ds = ax; + dx = 0; + loadseg(); + dontloadseg(); + allocateload(); + data.word(kFreedesc) = ax; + ds = ax; + dx = (0); + loadseg(); + closefile(); + setallchanges(); +} + +void DreamGenContext::sortoutmap() { + STACK_CHECK; + push(es); + push(di); + ds = data.word(kWorkspace); + si = 0; + es = data.word(kMapdata); + di = 0; + cx = (60); +blimey: + push(cx); + push(si); + cx = (66); + _movsb(cx, true); + si = pop(); + cx = pop(); + _add(si, 132); + if (--cx) + goto blimey; + di = pop(); + es = pop(); +} + +void DreamGenContext::startloading() { + STACK_CHECK; + data.byte(kCombatcount) = 0; + al = cs.byte(bx+13); + data.byte(kRoomssample) = al; + al = cs.byte(bx+15); + data.byte(kMapx) = al; + al = cs.byte(bx+16); + data.byte(kMapy) = al; + al = cs.byte(bx+20); + data.byte(kLiftflag) = al; + al = cs.byte(bx+21); + data.byte(kManspath) = al; + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + al = cs.byte(bx+22); + data.byte(kFacing) = al; + data.byte(kTurntoface) = al; + al = cs.byte(bx+23); + data.byte(kCounttoopen) = al; + al = cs.byte(bx+24); + data.byte(kLiftpath) = al; + al = cs.byte(bx+25); + data.byte(kDoorpath) = al; + data.byte(kLastweapon) = -1; + al = cs.byte(bx+27); + push(ax); + al = cs.byte(bx+31); + ah = data.byte(kReallocation); + data.byte(kReallocation) = al; + dx = bx; + openfile(); + readheader(); + allocateload(); + ds = ax; + data.word(kBackdrop) = ax; + dx = (0); + loadseg(); + ds = data.word(kWorkspace); + dx = (0); + cx = 132*66; + al = 0; + fillspace(); + loadseg(); + sortoutmap(); + allocateload(); + data.word(kSetframes) = ax; + ds = ax; + dx = (0); + loadseg(); + ds = data.word(kSetdat); + dx = 0; + cx = (64*128); + al = 255; + fillspace(); + loadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReels) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kPeople) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kSetdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kBlockdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kRoomdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kFreeframes) = ax; + ds = ax; + dx = 0; + loadseg(); + ds = data.word(kFreedat); + dx = 0; + cx = (16*80); + al = 255; + fillspace(); + loadseg(); + allocateload(); + data.word(kFreedesc) = ax; + ds = ax; + dx = (0); + loadseg(); + closefile(); + findroominloc(); + deletetaken(); + setallchanges(); + autoappear(); + al = data.byte(kNewlocation); + getroomdata(); + data.byte(kLastweapon) = -1; + data.byte(kMandead) = 0; + data.word(kLookcounter) = 160; + data.byte(kNewlocation) = 255; + data.byte(kLinepointer) = 254; + ax = pop(); + _cmp(al, 255); + if (flags.z()) + goto dontwalkin; + data.byte(kManspath) = al; + push(bx); + autosetwalk(); + bx = pop(); +dontwalkin: + findxyfrompath(); +} + +void DreamGenContext::disablepath() { + STACK_CHECK; + push(cx); + _xchg(al, ah); + cx = -6; +looky2: + _add(cx, 6); + _sub(al, 10); + if (!flags.c()) + goto looky2; + al = ah; + _dec(cx); +lookx2: + _inc(cx); + _sub(al, 11); + if (!flags.c()) + goto lookx2; + al = cl; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::findxyfrompath() { + STACK_CHECK; + getroomspaths(); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + ax = es.word(bx); + _sub(al, 12); + _sub(ah, 12); + data.byte(kRyanx) = al; + data.byte(kRyany) = ah; +} + +void DreamGenContext::findroominloc() { + STACK_CHECK; + al = data.byte(kMapy); + cx = -6; +looky: + _add(cx, 6); + _sub(al, 10); + if (!flags.c()) + goto looky; + al = data.byte(kMapx); + _dec(cx); +lookx: + _inc(cx); + _sub(al, 11); + if (!flags.c()) + goto lookx; + data.byte(kRoomnum) = cl; +} + +void DreamGenContext::getroomdata() { + STACK_CHECK; + ah = 0; + cx = 32; + _mul(cx); + bx = 6187; + _add(bx, ax); +} + +void DreamGenContext::readheader() { + STACK_CHECK; + ds = cs; + dx = 6091; + cx = (6187-6091); + readfromfile(); + es = cs; + di = 6141; +} + +void DreamGenContext::allocateload() { + STACK_CHECK; + push(es); + push(di); + bx = es.word(di); + cl = 4; + _shr(bx, cl); + allocatemem(); + di = pop(); + es = pop(); +} + +void DreamGenContext::fillspace() { + STACK_CHECK; + push(es); + push(ds); + push(dx); + push(di); + push(bx); + di = dx; + es = ds; + _stosb(cx, true); + bx = pop(); + di = pop(); + dx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::getridoftemp() { + STACK_CHECK; + es = data.word(kTempgraphics); + deallocatemem(); +} + +void DreamGenContext::getridoftemptext() { + STACK_CHECK; + es = data.word(kTextfile1); + deallocatemem(); +} + +void DreamGenContext::getridoftemp2() { + STACK_CHECK; + es = data.word(kTempgraphics2); + deallocatemem(); +} + +void DreamGenContext::getridoftemp3() { + STACK_CHECK; + es = data.word(kTempgraphics3); + deallocatemem(); +} + +void DreamGenContext::getridoftempcharset() { + STACK_CHECK; + es = data.word(kTempcharset); + deallocatemem(); +} + +void DreamGenContext::getridoftempsp() { + STACK_CHECK; + es = data.word(kTempsprites); + deallocatemem(); +} + +void DreamGenContext::readsetdata() { + STACK_CHECK; + dx = 1857; + standardload(); + data.word(kCharset1) = ax; + dx = 1922; + standardload(); + data.word(kIcons1) = ax; + dx = 1935; + standardload(); + data.word(kIcons2) = ax; + dx = 1819; + standardload(); + data.word(kMainsprites) = ax; + dx = 2221; + standardload(); + data.word(kPuzzletext) = ax; + dx = 2273; + standardload(); + data.word(kCommandtext) = ax; + ax = data.word(kCharset1); + data.word(kCurrentset) = ax; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (novolumeload) */; + dx = 2286; + openfile(); + cx = 2048-256; + ds = data.word(kSoundbuffer); + dx = 16384; + readfromfile(); + closefile(); +} + +void DreamGenContext::makename() { + STACK_CHECK; + si = dx; + di = 6061; +transfer: + al = cs.byte(si); + cs.byte(di) = al; + _inc(si); + _inc(di); + _cmp(al, 0); + if (!flags.z()) + goto transfer; + dx = 6059; +} + +void DreamGenContext::dreamweb() { + STACK_CHECK; + seecommandtail(); + checkbasemem(); + soundstartup(); + setkeyboardint(); + setupemm(); + allocatebuffers(); + setmouse(); + fadedos(); + gettime(); + clearbuffers(); + clearpalette(); + set16colpalette(); + readsetdata(); + data.byte(kWongame) = 0; + dx = 1909; + loadsample(); + setsoundoff(); + scanfornames(); + _cmp(al, 0); + if (!flags.z()) + goto dodecisions; + setmode(); + loadpalfromiff(); + titles(); + credits(); + goto playgame; +dodecisions: + cls(); + setmode(); + decide(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (exitgame) */; + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto mainloop; + titles(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (exitgame) */; + credits(); +playgame: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (exitgame) */; + clearchanges(); + setmode(); + loadpalfromiff(); + data.byte(kLocation) = 255; + data.byte(kRoomafterdream) = 1; + data.byte(kNewlocation) = 35; + data.byte(kVolume) = 7; + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kDestpos) = 3; + initialinv(); + data.byte(kLastflag) = 32; + startup1(); + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + data.byte(kCommandtype) = 255; + goto mainloop; +loadnew: + clearbeforeload(); + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kNewlocation) = 255; + startup(); + data.byte(kCommandtype) = 255; + worktoscreenm(); + goto mainloop; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + startup(); + data.byte(kCommandtype) = 255; +mainloop: + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + return /* (exitgame) */; + screenupdate(); + _cmp(data.byte(kWongame), 0); + if (!flags.z()) + goto endofgame; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto gameover; + _cmp(data.byte(kMandead), 2); + if (flags.z()) + goto gameover; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatching; + al = data.byte(kFinaldest); + _cmp(al, data.byte(kManspath)); + if (!flags.z()) + goto mainloop; + _dec(data.word(kWatchingtime)); + if (!flags.z()) + goto mainloop; +notwatching: + _cmp(data.byte(kMandead), 4); + if (flags.z()) + goto gameover; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto loadnew; + goto mainloop; +gameover: + clearbeforeload(); + showgun(); + fadescreendown(); + cx = 100; + hangon(); + goto dodecisions; +endofgame: + clearbeforeload(); + fadescreendowns(); + cx = 200; + hangon(); + endgame(); + { quickquit2(); return; }; +} + + + +void DreamGenContext::__start() { + static const uint8 src[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xff, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x14, 0x00, 0x02, 0x00, 0x01, 0x01, 0x37, + 0x00, 0x00, 0x00, 0x32, 0x14, 0x00, 0x18, 0x16, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x18, 0x21, + 0x0a, 0x4b, 0x00, 0x01, 0x00, 0x01, 0x01, 0x2c, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x02, 0x01, 0x2c, + 0x00, 0x60, 0x00, 0x03, 0x00, 0x04, 0x01, 0x2c, 0x00, 0x76, 0x00, 0x02, 0x00, 0x05, 0x01, 0x2c, + 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x16, 0x14, 0x35, 0x00, 0x03, 0x00, 0x00, 0x05, 0x16, + 0x14, 0x28, 0x00, 0x01, 0x00, 0x02, 0x05, 0x16, 0x14, 0x32, 0x00, 0x01, 0x00, 0x03, 0x02, 0x0b, + 0x0a, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x0a, 0xb6, 0x00, 0x02, 0x00, 0x01, 0x08, 0x0b, + 0x0a, 0x00, 0x00, 0x02, 0x00, 0x01, 0x17, 0x00, 0x32, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0x0b, + 0x14, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x17, 0x00, 0x32, 0x2b, 0x00, 0x02, 0x00, 0x08, 0x17, 0x0b, + 0x28, 0x82, 0x00, 0x02, 0x00, 0x01, 0x17, 0x16, 0x28, 0x7a, 0x00, 0x02, 0x00, 0x02, 0x17, 0x16, + 0x28, 0x69, 0x00, 0x02, 0x00, 0x03, 0x17, 0x16, 0x28, 0x51, 0x00, 0x02, 0x00, 0x04, 0x17, 0x0b, + 0x28, 0x87, 0x00, 0x02, 0x00, 0x05, 0x17, 0x16, 0x28, 0x91, 0x00, 0x02, 0x00, 0x06, 0x04, 0x16, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x14, 0x2d, 0x16, + 0x1e, 0x27, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0x19, 0x00, 0x02, 0x00, 0x00, 0x08, 0x16, + 0x28, 0x20, 0x00, 0x02, 0x00, 0x00, 0x07, 0x0b, 0x14, 0x40, 0x00, 0x02, 0x00, 0x00, 0x16, 0x16, + 0x14, 0x52, 0x00, 0x02, 0x00, 0x00, 0x1b, 0x0b, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x21, 0x28, 0x15, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x0b, + 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x16, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x19, 0x00, + 0x32, 0x04, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x1e, 0x79, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, + 0x1e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x34, 0x16, 0x1e, 0xc0, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + 0x1e, 0xe9, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x68, 0x00, 0x37, 0x00, 0x00, 0x35, 0x21, + 0x00, 0x63, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x32, 0x16, + 0x1e, 0xa2, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 0x1e, 0x39, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x48, 0x00, 0x03, 0x00, 0x00, 0x37, 0x2c, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x16, + 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x16, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x16, + 0x1e, 0xae, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x0b, 0x1e, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x16, + 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x7c, + 0xc0, 0x80, 0xc0, 0x1c, 0xc0, 0x20, 0xc0, 0x00, 0xc1, 0x10, 0xc0, 0x18, 0xc0, 0xf4, 0xc0, 0x0c, + 0xc0, 0x24, 0xc0, 0x28, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x54, 0xc0, 0x78, 0xc0, 0x50, 0xc0, 0x74, + 0xc0, 0x34, 0xc0, 0x38, 0xc0, 0x40, 0xc0, 0x44, 0xc0, 0x48, 0xc0, 0x3c, 0xc0, 0x14, 0xc0, 0x88, + 0xc0, 0x8c, 0xc0, 0x90, 0xc0, 0x70, 0xc0, 0xfc, 0xc0, 0x6c, 0xc0, 0x58, 0xc0, 0x68, 0xc0, 0x04, + 0xc1, 0x64, 0xc0, 0x60, 0xc0, 0x5c, 0xc0, 0x94, 0xc0, 0x04, 0xc0, 0xa4, 0xc0, 0x9c, 0xc0, 0xa0, + 0xc0, 0xa8, 0xc0, 0xac, 0xc0, 0x98, 0xc0, 0xb0, 0xc0, 0xb4, 0xc0, 0xc8, 0xc0, 0xcc, 0xc0, 0xd4, + 0xc0, 0xdc, 0xc0, 0xd8, 0xc0, 0x00, 0xc0, 0x08, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, + 0xc0, 0x00, 0x3c, 0x21, 0x47, 0x0b, 0x52, 0x16, 0x5d, 0x01, 0x2c, 0x0a, 0x10, 0x04, 0x0b, 0x1e, + 0x0e, 0x04, 0x16, 0x1e, 0x0e, 0x03, 0x21, 0x0a, 0x0e, 0x0a, 0x21, 0x1e, 0x0e, 0x0a, 0x16, 0x1e, + 0x18, 0x09, 0x16, 0x0a, 0x0e, 0x02, 0x21, 0x00, 0x0e, 0x02, 0x16, 0x00, 0x0e, 0x06, 0x0b, 0x1e, + 0x0e, 0x07, 0x0b, 0x14, 0x12, 0x07, 0x00, 0x14, 0x12, 0x07, 0x00, 0x1e, 0x12, 0x37, 0x2c, 0x00, + 0x0e, 0x05, 0x16, 0x1e, 0x0e, 0x08, 0x00, 0x0a, 0x12, 0x08, 0x0b, 0x0a, 0x12, 0x08, 0x16, 0x0a, + 0x12, 0x08, 0x21, 0x0a, 0x12, 0x08, 0x21, 0x14, 0x12, 0x08, 0x21, 0x1e, 0x12, 0x08, 0x21, 0x28, + 0x12, 0x08, 0x16, 0x28, 0x12, 0x08, 0x0b, 0x28, 0x12, 0x15, 0x2c, 0x14, 0x12, 0xff, 0x2e, 0x05, + 0x2f, 0x05, 0x33, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x46, 0x05, 0x2e, 0x05, 0x4d, 0x05, + 0x5d, 0x05, 0x64, 0x05, 0x68, 0x05, 0x6c, 0x05, 0x70, 0x05, 0x7d, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x9f, 0x05, 0x2e, 0x05, 0xb5, 0x05, 0xd4, 0x05, 0x2e, 0x05, + 0xe1, 0x05, 0xf7, 0x05, 0x0d, 0x06, 0x26, 0x06, 0x39, 0x06, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x49, 0x06, 0x50, 0x06, 0x75, 0x06, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x82, 0x06, 0x86, 0x06, 0x2e, 0x05, 0x8d, 0x06, 0xff, 0x0f, + 0x01, 0x01, 0xff, 0x0c, 0x05, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x23, 0x00, 0x11, 0x32, 0x00, 0x12, + 0x67, 0x00, 0x13, 0x6c, 0x00, 0xff, 0x12, 0x13, 0x00, 0x13, 0x17, 0x00, 0xff, 0x0c, 0x33, 0x00, + 0x0d, 0x35, 0x00, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x4e, 0x00, 0xff, 0x0c, 0x77, 0x00, + 0x0c, 0x91, 0x00, 0xff, 0x0d, 0x10, 0x00, 0xff, 0x0d, 0x14, 0x00, 0xff, 0x0e, 0x10, 0x00, 0xff, + 0x0f, 0x04, 0x00, 0x10, 0x08, 0x00, 0x11, 0x86, 0x00, 0x12, 0x99, 0x00, 0xff, 0x0d, 0x6c, 0x00, + 0x0f, 0x46, 0x01, 0x0f, 0x4b, 0x01, 0x0f, 0x50, 0x01, 0x0f, 0x56, 0x01, 0x0f, 0x5c, 0x01, 0x0f, + 0x62, 0x01, 0x12, 0x9f, 0x00, 0x12, 0xb2, 0x00, 0x93, 0xd9, 0x00, 0x54, 0xe4, 0x00, 0xff, 0x0d, + 0x14, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x22, 0x00, 0x0d, 0x34, 0x00, 0x0d, 0x37, 0x00, 0x19, 0x39, + 0x00, 0x15, 0x49, 0x00, 0xff, 0x0d, 0xc4, 0x00, 0x0d, 0xea, 0x00, 0x0d, 0x9c, 0x00, 0x0e, 0x81, + 0x00, 0x0d, 0x7c, 0x00, 0x0f, 0xa2, 0x00, 0x0f, 0xc8, 0x00, 0x0f, 0xef, 0x00, 0x11, 0x63, 0x00, + 0x0c, 0x34, 0x00, 0xff, 0x0f, 0x38, 0x00, 0x10, 0x40, 0x00, 0x13, 0x16, 0x00, 0x14, 0x21, 0x00, + 0xff, 0x14, 0x0b, 0x00, 0x14, 0x0f, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x50, 0x00, 0x15, 0x52, 0x00, + 0x93, 0x57, 0x00, 0x57, 0x80, 0x00, 0xff, 0x0c, 0x0d, 0x00, 0x0e, 0x27, 0x00, 0x0c, 0x43, 0x00, + 0x0c, 0x4b, 0x00, 0x0c, 0x53, 0x00, 0x0c, 0x5b, 0x00, 0x0f, 0x66, 0x00, 0xff, 0x16, 0x24, 0x00, + 0x0d, 0x7d, 0x00, 0x12, 0x58, 0x00, 0x0f, 0x6b, 0x00, 0x0e, 0x7f, 0x00, 0x0e, 0x9a, 0x00, 0x93, + 0xaa, 0x00, 0x57, 0xe8, 0x00, 0xff, 0x15, 0x10, 0x00, 0x15, 0x48, 0x00, 0x15, 0xcd, 0x00, 0x16, + 0x3f, 0x00, 0x97, 0x63, 0x00, 0x58, 0x9e, 0x00, 0xff, 0x0d, 0x15, 0x00, 0x0e, 0x18, 0x00, 0x93, + 0x32, 0x00, 0x57, 0x4b, 0x00, 0x18, 0x80, 0x00, 0xff, 0x53, 0x2e, 0x00, 0x10, 0xa7, 0x00, 0xff, + 0x10, 0x13, 0x00, 0x0e, 0x24, 0x00, 0x10, 0x32, 0x00, 0x0e, 0x41, 0x00, 0x10, 0x51, 0x00, 0x0e, + 0x60, 0x00, 0x10, 0x72, 0x00, 0x0e, 0x81, 0x00, 0x10, 0x93, 0x00, 0x0e, 0xa2, 0x00, 0x10, 0xb1, + 0x00, 0x0e, 0xbf, 0x00, 0xff, 0x0d, 0x30, 0x00, 0x0e, 0x29, 0x00, 0x0f, 0x4e, 0x00, 0x10, 0x5c, + 0x00, 0xff, 0x10, 0x73, 0x00, 0xff, 0x15, 0x67, 0x00, 0x14, 0xc7, 0x00, 0xff, 0x11, 0x35, 0x00, + 0x11, 0x36, 0x00, 0x11, 0x37, 0x00, 0x11, 0x38, 0x00, 0x11, 0x39, 0x00, 0x11, 0x3a, 0x00, 0x11, + 0x3b, 0x00, 0x11, 0x3d, 0x00, 0x11, 0x3f, 0x00, 0x11, 0x40, 0x00, 0x11, 0x41, 0x00, 0xff, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x53, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x53, 0x30, 0x32, 0x00, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x2e, 0x44, 0x41, 0x54, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x30, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x56, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, + 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x30, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x47, 0x30, 0x38, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, + 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x37, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x47, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x47, 0x31, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x31, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x32, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x54, 0x31, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, + 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x30, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x54, 0x32, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, + 0x32, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x30, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x31, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x54, 0x38, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x54, 0x38, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x33, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x34, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x47, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, + 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x32, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x49, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, + 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x32, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x49, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x49, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x37, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x50, 0x41, 0x4c, 0x00, 0x11, 0x01, + 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0x04, 0x01, 0x2c, 0x01, 0x00, 0x00, 0x2c, 0x00, + 0x80, 0xc5, 0xd2, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x2c, 0x00, 0xdc, 0xc3, 0x90, 0x00, 0xb0, 0x00, + 0x40, 0x00, 0x60, 0x00, 0x80, 0xc3, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0xc8, 0x00, 0x84, 0xc3, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, + 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0xff, 0x00, 0x26, 0x01, 0x00, 0x00, 0x18, 0x00, 0xc8, 0xc3, + 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, 0x00, 0x01, 0x9e, 0x00, + 0xca, 0x00, 0xe0, 0xc3, 0x50, 0x00, 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0x98, 0xc3, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, + 0xc6, 0x00, 0x44, 0xc3, 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, + 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0xbc, 0xc6, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0xf0, 0x00, + 0x22, 0x01, 0x02, 0x00, 0x2c, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xee, 0x00, 0x02, 0x01, 0x04, 0x00, + 0x2c, 0x00, 0xc8, 0xc4, 0x68, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2c, 0x00, 0xcc, 0xc4, 0x18, 0x01, + 0x34, 0x01, 0x04, 0x00, 0x2c, 0x00, 0xb0, 0xc4, 0x68, 0x00, 0xd8, 0x00, 0x8a, 0x00, 0xc0, 0x00, + 0xd0, 0xc4, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, 0x40, 0x01, + 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x45, 0x58, 0x49, 0x54, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x49, 0x53, 0x54, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, + 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49, + 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20, + 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, + 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x4e, 0x45, 0x54, 0x57, 0xe8, 0xc4, 0x45, 0x4c, + 0x56, 0x41, 0x8c, 0xc6, 0x45, 0x4c, 0x56, 0x42, 0x9c, 0xc6, 0x45, 0x4c, 0x56, 0x43, 0x94, 0xc6, + 0x45, 0x4c, 0x56, 0x45, 0x98, 0xc6, 0x45, 0x4c, 0x56, 0x46, 0xa0, 0xc6, 0x43, 0x47, 0x41, 0x54, + 0x30, 0xc7, 0x52, 0x45, 0x4d, 0x4f, 0xa8, 0xc6, 0x42, 0x55, 0x54, 0x41, 0x3c, 0xc7, 0x43, 0x42, + 0x4f, 0x58, 0x44, 0xc7, 0x4c, 0x49, 0x54, 0x45, 0x5c, 0xc6, 0x50, 0x4c, 0x41, 0x54, 0x40, 0xc7, + 0x4c, 0x49, 0x46, 0x54, 0x7c, 0xc6, 0x57, 0x49, 0x52, 0x45, 0x84, 0xc6, 0x48, 0x4e, 0x44, 0x4c, + 0x88, 0xc6, 0x48, 0x41, 0x43, 0x48, 0x80, 0xc6, 0x44, 0x4f, 0x4f, 0x52, 0xb4, 0xc6, 0x43, 0x53, + 0x48, 0x52, 0x70, 0xc6, 0x47, 0x55, 0x4e, 0x41, 0x34, 0xc7, 0x43, 0x52, 0x41, 0x41, 0x64, 0xc6, + 0x43, 0x52, 0x42, 0x42, 0x68, 0xc6, 0x43, 0x52, 0x43, 0x43, 0x6c, 0xc6, 0x53, 0x45, 0x41, 0x54, + 0xf8, 0xc5, 0x4d, 0x45, 0x4e, 0x55, 0x98, 0xc7, 0x43, 0x4f, 0x4f, 0x4b, 0xac, 0xc6, 0x45, 0x4c, + 0x43, 0x41, 0x4c, 0xc6, 0x45, 0x44, 0x43, 0x41, 0x50, 0xc6, 0x44, 0x44, 0x43, 0x41, 0x54, 0xc6, + 0x41, 0x4c, 0x54, 0x52, 0x04, 0xc6, 0x4c, 0x4f, 0x4b, 0x41, 0x3c, 0xc6, 0x4c, 0x4f, 0x4b, 0x42, + 0x40, 0xc6, 0x45, 0x4e, 0x54, 0x41, 0x10, 0xc6, 0x45, 0x4e, 0x54, 0x42, 0x24, 0xc6, 0x45, 0x4e, + 0x54, 0x45, 0x28, 0xc6, 0x45, 0x4e, 0x54, 0x43, 0x18, 0xc6, 0x45, 0x4e, 0x54, 0x44, 0x2c, 0xc6, + 0x45, 0x4e, 0x54, 0x48, 0x30, 0xc6, 0x57, 0x57, 0x41, 0x54, 0xf0, 0xc5, 0x50, 0x4f, 0x4f, 0x4c, + 0x58, 0xc6, 0x57, 0x53, 0x48, 0x44, 0xf4, 0xc5, 0x47, 0x52, 0x41, 0x46, 0x44, 0xc6, 0x54, 0x52, + 0x41, 0x50, 0x48, 0xc6, 0x43, 0x44, 0x50, 0x45, 0x28, 0xc7, 0x44, 0x4c, 0x4f, 0x4b, 0x08, 0xc6, + 0x48, 0x4f, 0x4c, 0x45, 0x00, 0xc6, 0x44, 0x52, 0x59, 0x52, 0x0c, 0xc6, 0x48, 0x4f, 0x4c, 0x59, + 0xfc, 0xc5, 0x57, 0x41, 0x4c, 0x4c, 0x2c, 0xc7, 0x42, 0x4f, 0x4f, 0x4b, 0x08, 0xc8, 0x41, 0x58, + 0x45, 0x44, 0xb0, 0xc6, 0x53, 0x48, 0x4c, 0x44, 0x38, 0xc7, 0x42, 0x43, 0x4e, 0x59, 0xe8, 0xc5, + 0x4c, 0x49, 0x44, 0x43, 0xe4, 0xc5, 0x4c, 0x49, 0x44, 0x55, 0xe0, 0xc5, 0x4c, 0x49, 0x44, 0x4f, + 0xec, 0xc5, 0x50, 0x49, 0x50, 0x45, 0xa8, 0xc5, 0x42, 0x41, 0x4c, 0x43, 0x20, 0xc6, 0x57, 0x49, + 0x4e, 0x44, 0x1c, 0xc6, 0x50, 0x41, 0x50, 0x52, 0xb4, 0xc7, 0x55, 0x57, 0x54, 0x41, 0xa0, 0xc5, + 0x55, 0x57, 0x54, 0x42, 0xa0, 0xc5, 0x53, 0x54, 0x41, 0x54, 0xd8, 0xc7, 0x54, 0x4c, 0x49, 0x44, + 0x9c, 0xc5, 0x53, 0x4c, 0x41, 0x42, 0xd8, 0xc5, 0x43, 0x41, 0x52, 0x54, 0xdc, 0xc5, 0x46, 0x43, + 0x41, 0x52, 0xac, 0xc5, 0x53, 0x4c, 0x42, 0x41, 0xc0, 0xc5, 0x53, 0x4c, 0x42, 0x42, 0xc4, 0xc5, + 0x53, 0x4c, 0x42, 0x43, 0xcc, 0xc5, 0x53, 0x4c, 0x42, 0x44, 0xc8, 0xc5, 0x53, 0x4c, 0x42, 0x45, + 0xd0, 0xc5, 0x53, 0x4c, 0x42, 0x46, 0xd4, 0xc5, 0x50, 0x4c, 0x49, 0x4e, 0xb0, 0xc5, 0x4c, 0x41, + 0x44, 0x44, 0xb8, 0xc5, 0x4c, 0x41, 0x44, 0x42, 0xbc, 0xc5, 0x47, 0x55, 0x4d, 0x41, 0xb4, 0xc5, + 0x53, 0x51, 0x45, 0x45, 0x88, 0xc5, 0x54, 0x41, 0x50, 0x50, 0x8c, 0xc5, 0x47, 0x55, 0x49, 0x54, + 0x90, 0xc5, 0x43, 0x4f, 0x4e, 0x54, 0x94, 0xc5, 0x42, 0x45, 0x4c, 0x4c, 0x98, 0xc5, 0x8c, 0x8c, + 0x8c, 0x8c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x9d, 0x00, 0xb2, 0x00, 0x51, 0x00, + 0x5e, 0x00, 0x58, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x5c, 0xc7, 0xc9, 0x00, + 0xde, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x60, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x5f, 0x00, 0x70, 0x00, + 0x64, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x68, 0xc7, 0xc9, 0x00, 0xde, 0x00, + 0x5f, 0x00, 0x70, 0x00, 0x6c, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x71, 0x00, 0x82, 0x00, 0x70, 0xc7, + 0xb3, 0x00, 0xc8, 0x00, 0x71, 0x00, 0x82, 0x00, 0x74, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x71, 0x00, + 0x82, 0x00, 0x78, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x83, 0x00, 0x91, 0x00, 0x7c, 0xc7, 0xb3, 0x00, + 0xde, 0x00, 0x83, 0x00, 0x91, 0x00, 0x80, 0xc7, 0xdc, 0x00, 0xea, 0x00, 0x98, 0x00, 0xa6, 0x00, + 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xae, 0x00, + 0xbc, 0x00, 0x84, 0x00, 0x94, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x18, 0x01, 0x40, 0x01, 0xa0, 0x00, 0xc8, 0x00, 0x50, 0xc7, 0x8f, 0x00, + 0x2c, 0x01, 0x06, 0x00, 0xc2, 0x00, 0xb8, 0xc7, 0x00, 0x00, 0x8f, 0x00, 0x06, 0x00, 0xc2, 0x00, + 0xc0, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x68, 0x00, + 0x80, 0x00, 0x3a, 0x00, 0x48, 0x00, 0xdc, 0xc7, 0x40, 0x00, 0x74, 0x00, 0x4c, 0x00, 0x6a, 0x00, + 0xe0, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x4c, 0x00, 0x6a, 0x00, 0xe4, 0xc7, 0x40, 0x00, 0x74, 0x00, + 0x6a, 0x00, 0x88, 0x00, 0xe8, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x6a, 0x00, 0x88, 0x00, 0xec, 0xc7, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xba, 0x00, 0xca, 0x00, + 0x9d, 0x00, 0xad, 0x00, 0x1c, 0xc8, 0xf3, 0x00, 0x03, 0x01, 0x83, 0x00, 0x93, 0x00, 0x18, 0xc8, + 0x0c, 0x01, 0x1c, 0x01, 0xa8, 0x00, 0xb8, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, 0x80, 0x00, 0x34, 0xc8, + 0x46, 0x00, 0x89, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x44, 0x00, + 0x98, 0x00, 0x4c, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, + 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00, + 0x98, 0x00, 0x58, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, 0x74, 0xc8, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, + 0x80, 0x00, 0x44, 0xc8, 0x46, 0x00, 0x8b, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x50, 0xc8, 0xec, 0x00, + 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, + 0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x54, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, + 0x74, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x0d, 0x0a, + 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x45, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d, + 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, + 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, + 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x72, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x20, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x20, 0x48, 0x65, 0x78, 0x2e, 0x0d, 0x0a, + 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4f, + 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, + 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x3a, 0x0d, 0x0a, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x2e, 0x0d, + 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + 0x41, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x35, 0x39, 0x30, 0x4b, 0x20, 0x6f, 0x66, + 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, + 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, + 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x75, 0x70, 0x74, 0x20, 0x30, 0x0d, + 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x20, 0x45, 0x4d, 0x4d, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, + 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, + 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x63, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x0d, + 0x0a, 0x74, 0x68, 0x65, 0x20, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x45, 0x52, 0x20, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x45, + 0x58, 0x45, 0x43, 0x2e, 0x42, 0x41, 0x54, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, + 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, + 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, + 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x2e, 0x0d, 0x0a, + 0x0d, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, + 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x0d, 0x0a, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, + 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0d, + 0x0a, 0x0d, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x20, 0x49, 0x37, 0x20, 0x41, 0x32, 0x32, 0x30, 0x20, 0x44, 0x31, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, + 0x62, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x61, + 0x73, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x68, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x20, 0x49, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x32, 0x32, 0x30, 0x68, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x31, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x72, 0x65, 0x61, + 0x6d, 0x77, 0x65, 0x62, 0x20, 0x43, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x2e, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, + 0x24, 0x81, 0x00, 0xb8, 0x00, 0x52, 0x00, 0x80, 0x00, 0xc0, 0xc8, 0x50, 0x00, 0x93, 0x00, 0x3e, + 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xb7, 0x00, 0xfa, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0xc4, 0xc8, 0x00, + 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x53, 0x50, 0x45, 0x45, 0x43, + 0x48, 0x52, 0x32, 0x34, 0x43, 0x30, 0x30, 0x30, 0x35, 0x2e, 0x52, 0x41, 0x57, 0x00, 0x87, 0x83, + 0x81, 0x82, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x00, 0xb4, 0x00, 0x7c, 0xc3, 0xe2, 0x00, 0xf4, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, + 0xe2, 0x00, 0xf4, 0x00, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, + 0x7c, 0x00, 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, + 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x7c, 0xc3, 0x12, 0x01, 0x24, 0x01, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, 0x12, 0x01, + 0x24, 0x01, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, 0x7c, 0x00, + 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, 0x00, 0x21, + 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x00, 0x0f, 0xff, 0x00, 0x0b, 0x00, + 0x0f, 0xff, 0x00, 0x0b, 0x0a, 0x0f, 0xff, 0x00, 0x00, 0x0a, 0x0f, 0xff, 0x01, 0x2c, 0x0a, 0x06, + 0xff, 0x01, 0x2c, 0x00, 0x0d, 0xff, 0x02, 0x21, 0x00, 0x06, 0xff, 0x02, 0x16, 0x00, 0x05, 0xff, + 0x02, 0x16, 0x0a, 0x10, 0xff, 0x02, 0x0b, 0x0a, 0x10, 0xff, 0x03, 0x2c, 0x00, 0x0f, 0xff, 0x03, + 0x21, 0x0a, 0x06, 0xff, 0x03, 0x21, 0x00, 0x05, 0xff, 0x04, 0x0b, 0x1e, 0x06, 0xff, 0x04, 0x16, + 0x1e, 0x05, 0xff, 0x04, 0x16, 0x14, 0x0d, 0xff, 0x0a, 0x21, 0x1e, 0x06, 0xff, 0x0a, 0x16, 0x1e, + 0x06, 0xff, 0x09, 0x16, 0x0a, 0x06, 0xff, 0x09, 0x16, 0x14, 0x10, 0xff, 0x09, 0x16, 0x1e, 0x10, + 0xff, 0x09, 0x16, 0x28, 0x10, 0xff, 0x09, 0x16, 0x32, 0x10, 0xff, 0x06, 0x0b, 0x1e, 0x06, 0xff, + 0x06, 0x00, 0x0a, 0x0f, 0xff, 0x06, 0x00, 0x14, 0x0f, 0xff, 0x06, 0x0b, 0x14, 0x0f, 0xff, 0x06, + 0x16, 0x14, 0x0f, 0xff, 0x07, 0x0b, 0x14, 0x06, 0xff, 0x07, 0x00, 0x14, 0x06, 0xff, 0x07, 0x00, + 0x1e, 0x06, 0xff, 0x37, 0x2c, 0x00, 0x05, 0xff, 0x37, 0x2c, 0x0a, 0x05, 0xff, 0x05, 0x16, 0x1e, + 0x06, 0xff, 0x05, 0x16, 0x14, 0x0f, 0xff, 0x05, 0x16, 0x0a, 0x0f, 0xff, 0x18, 0x16, 0x00, 0x0f, + 0xff, 0x18, 0x21, 0x00, 0x0f, 0xff, 0x18, 0x2c, 0x00, 0x0f, 0xff, 0x18, 0x21, 0x0a, 0x0f, 0xff, + 0x08, 0x00, 0x0a, 0x06, 0xff, 0x08, 0x0b, 0x0a, 0x06, 0xff, 0x08, 0x16, 0x0a, 0x06, 0xff, 0x08, + 0x21, 0x0a, 0x06, 0xff, 0x08, 0x21, 0x14, 0x06, 0xff, 0x08, 0x21, 0x1e, 0x06, 0xff, 0x08, 0x21, + 0x28, 0x06, 0xff, 0x08, 0x16, 0x28, 0x06, 0xff, 0x08, 0x0b, 0x28, 0x06, 0xff, 0x0b, 0x0b, 0x14, + 0x0c, 0xff, 0x0b, 0x0b, 0x1e, 0x0c, 0xff, 0x0b, 0x16, 0x14, 0x0c, 0xff, 0x0b, 0x16, 0x1e, 0x0c, + 0xff, 0x0c, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x21, 0x14, 0x0c, 0xff, + 0x0e, 0x2c, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x00, 0x0c, 0xff, 0x0e, 0x21, 0x0a, 0x0c, 0xff, 0x0e, + 0x21, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x1e, 0x0c, 0xff, 0x0e, 0x21, 0x28, 0x0c, 0xff, 0x0e, 0x16, + 0x00, 0x10, 0xff, 0x13, 0x00, 0x00, 0x0c, 0xff, 0x14, 0x00, 0x14, 0x10, 0xff, 0x14, 0x00, 0x1e, + 0x10, 0xff, 0x14, 0x0b, 0x1e, 0x10, 0xff, 0x14, 0x00, 0x28, 0x10, 0xff, 0x14, 0x0b, 0x28, 0x10, + 0xff, 0x15, 0x0b, 0x0a, 0x0f, 0xff, 0x15, 0x0b, 0x14, 0x0f, 0xff, 0x15, 0x00, 0x14, 0x0f, 0xff, + 0x15, 0x16, 0x14, 0x0f, 0xff, 0x15, 0x21, 0x14, 0x0f, 0xff, 0x15, 0x2c, 0x14, 0x0f, 0xff, 0x15, + 0x2c, 0x0a, 0x0f, 0xff, 0x16, 0x16, 0x0a, 0x10, 0xff, 0x16, 0x16, 0x14, 0x10, 0xff, 0x17, 0x16, + 0x1e, 0x0d, 0xff, 0x17, 0x16, 0x28, 0x0d, 0xff, 0x17, 0x21, 0x28, 0x0d, 0xff, 0x17, 0x0b, 0x28, + 0x0d, 0xff, 0x17, 0x00, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x32, 0x0d, 0xff, 0x19, 0x0b, 0x28, 0x10, + 0xff, 0x19, 0x0b, 0x32, 0x10, 0xff, 0x19, 0x00, 0x32, 0x10, 0xff, 0x1b, 0x0b, 0x14, 0x10, 0xff, + 0x1b, 0x0b, 0x1e, 0x10, 0xff, 0x1d, 0x0b, 0x0a, 0x10, 0xff, 0x2d, 0x16, 0x1e, 0x0c, 0xff, 0x2d, + 0x16, 0x28, 0x0c, 0xff, 0x2d, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x28, 0x0c, 0xff, 0x2e, 0x0b, + 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x21, 0x32, 0x0c, 0xff, 0x2f, 0x00, 0x00, + 0x0c, 0xff, 0x1a, 0x16, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x0a, 0x10, 0xff, 0x1a, 0x21, 0x14, 0x10, + 0xff, 0x1a, 0x21, 0x1e, 0x10, 0xff, 0x1a, 0x2c, 0x1e, 0x10, 0xff, 0x1a, 0x16, 0x1e, 0x10, 0xff, + 0x1a, 0x0b, 0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x14, 0x10, 0xff, 0x1a, 0x00, 0x14, 0x10, 0xff, 0x1a, + 0x0b, 0x28, 0x10, 0xff, 0x1a, 0x00, 0x28, 0x10, 0xff, 0x1a, 0x16, 0x28, 0x10, 0xff, 0x1a, 0x0b, + 0x32, 0x10, 0xff, 0x1c, 0x00, 0x1e, 0x0f, 0xff, 0x1c, 0x00, 0x14, 0x0f, 0xff, 0x1c, 0x00, 0x28, + 0x0f, 0xff, 0x1c, 0x0b, 0x1e, 0x0f, 0xff, 0x1c, 0x0b, 0x14, 0x0f, 0xff, 0x1c, 0x16, 0x1e, 0x0f, + 0xff, 0x1c, 0x16, 0x14, 0x0f, 0xff, 0xff, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41, + 0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x30, 0x2d, 0x00, 0x08, 0x00, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, + 0x4f, 0x50, 0x00, 0x00, 0x0d, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x3a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x43, 0x4f, + 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x31, 0x39, 0x39, 0x32, 0x20, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x49, 0x56, 0x45, 0x20, 0x52, 0x45, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x30, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x07, 0x02, 0xff, 0xff, 0xff, 0xff, 0x06, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x32, 0x00, 0x02, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, 0xff, 0x02, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0x00, 0x02, 0x04, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x00, 0x05, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x02, 0x00, 0x04, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x36, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0xff, 0xff, 0xff, 0x06, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x37, 0x00, 0xff, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0b, 0x28, 0x00, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x39, 0x00, 0x09, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x06, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x09, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x21, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x00, 0xff, 0xff, 0x02, 0x02, 0x04, 0x16, 0x1e, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x33, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x34, 0x00, 0x0e, 0xff, 0x2c, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x30, 0x00, 0x16, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x33, 0x00, 0x17, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x35, 0x00, 0x16, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x37, 0x00, 0x16, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x39, 0x00, 0x16, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0xff, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x03, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x00, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x37, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x32, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x30, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x31, 0x00, 0x23, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x32, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x33, 0x00, 0x23, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x34, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x35, 0x00, 0x0e, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, + 0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x44, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x44, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x32, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x33, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x44, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x45, + 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, }; + ds.assign(src, src + sizeof(src)); +dreamweb(); +} + +void DreamGenContext::__dispatch_call(uint16 addr) { + switch(addr) { + case 0xc000: alleybarksound(); break; + case 0xc004: intromusic(); break; + case 0xc008: foghornsound(); break; + case 0xc00c: receptionist(); break; + case 0xc010: smokebloke(); break; + case 0xc014: attendant(); break; + case 0xc018: manasleep(); break; + case 0xc01c: eden(); break; + case 0xc020: edeninbath(); break; + case 0xc024: malefan(); break; + case 0xc028: femalefan(); break; + case 0xc02c: louis(); break; + case 0xc030: louischair(); break; + case 0xc034: manasleep2(); break; + case 0xc038: mansatstill(); break; + case 0xc03c: tattooman(); break; + case 0xc040: drinker(); break; + case 0xc044: bartender(); break; + case 0xc048: othersmoker(); break; + case 0xc04c: barwoman(); break; + case 0xc050: interviewer(); break; + case 0xc054: soldier1(); break; + case 0xc058: rockstar(); break; + case 0xc05c: helicopter(); break; + case 0xc060: mugger(); break; + case 0xc064: aide(); break; + case 0xc068: businessman(); break; + case 0xc06c: poolguard(); break; + case 0xc070: security(); break; + case 0xc074: heavy(); break; + case 0xc078: bossman(); break; + case 0xc07c: gamer(); break; + case 0xc080: sparkydrip(); break; + case 0xc084: carparkdrip(); break; + case 0xc088: keeper(); break; + case 0xc08c: candles1(); break; + case 0xc090: smallcandle(); break; + case 0xc094: intromagic1(); break; + case 0xc098: candles(); break; + case 0xc09c: candles2(); break; + case 0xc0a0: gates(); break; + case 0xc0a4: intromagic2(); break; + case 0xc0a8: intromagic3(); break; + case 0xc0ac: intromonks1(); break; + case 0xc0b0: intromonks2(); break; + case 0xc0b4: handclap(); break; + case 0xc0b8: monks2text(); break; + case 0xc0bc: intro1text(); break; + case 0xc0c0: intro2text(); break; + case 0xc0c4: intro3text(); break; + case 0xc0c8: monkandryan(); break; + case 0xc0cc: endgameseq(); break; + case 0xc0d0: rollendcredits(); break; + case 0xc0d4: priest(); break; + case 0xc0d8: madmanstelly(); break; + case 0xc0dc: madman(); break; + case 0xc0e0: madmantext(); break; + case 0xc0e4: madmode(); break; + case 0xc0e8: priesttext(); break; + case 0xc0ec: textforend(); break; + case 0xc0f0: textformonk(); break; + case 0xc0f4: drunk(); break; + case 0xc0f8: advisor(); break; + case 0xc0fc: copper(); break; + case 0xc100: sparky(); break; + case 0xc104: train(); break; + case 0xc108: addtopeoplelist(); break; + case 0xc10c: showgamereel(); break; + case 0xc110: checkspeed(); break; + case 0xc114: clearsprites(); break; + case 0xc118: makesprite(); break; + case 0xc11c: delsprite(); break; + case 0xc120: spriteupdate(); break; + case 0xc124: printsprites(); break; + case 0xc128: printasprite(); break; + case 0xc12c: checkone(); break; + case 0xc130: findsource(); break; + case 0xc134: initman(); break; + case 0xc138: mainman(); break; + case 0xc13c: aboutturn(); break; + case 0xc140: walking(); break; + case 0xc144: facerightway(); break; + case 0xc148: checkforexit(); break; + case 0xc14c: adjustdown(); break; + case 0xc150: adjustup(); break; + case 0xc154: adjustleft(); break; + case 0xc158: adjustright(); break; + case 0xc15c: reminders(); break; + case 0xc160: initrain(); break; + case 0xc164: splitintolines(); break; + case 0xc168: getblockofpixel(); break; + case 0xc16c: showrain(); break; + case 0xc170: backobject(); break; + case 0xc174: liftsprite(); break; + case 0xc178: liftnoise(); break; + case 0xc17c: random(); break; + case 0xc180: steady(); break; + case 0xc184: constant(); break; + case 0xc188: doorway(); break; + case 0xc18c: widedoor(); break; + case 0xc190: dodoor(); break; + case 0xc194: lockeddoorway(); break; + case 0xc198: updatepeople(); break; + case 0xc19c: getreelframeax(); break; + case 0xc1a0: reelsonscreen(); break; + case 0xc1a4: plotreel(); break; + case 0xc1a8: soundonreels(); break; + case 0xc1ac: reconstruct(); break; + case 0xc1b0: dealwithspecial(); break; + case 0xc1b4: movemap(); break; + case 0xc1b8: getreelstart(); break; + case 0xc1bc: showreelframe(); break; + case 0xc1c0: deleverything(); break; + case 0xc1c4: dumpeverything(); break; + case 0xc1c8: allocatework(); break; + case 0xc1cc: showpcx(); break; + case 0xc1d8: loadpalfromiff(); break; + case 0xc1dc: setmode(); break; + case 0xc1ec: paneltomap(); break; + case 0xc1f0: maptopanel(); break; + case 0xc1f4: dumpmap(); break; + case 0xc1f8: pixelcheckset(); break; + case 0xc1fc: createpanel(); break; + case 0xc200: createpanel2(); break; + case 0xc204: clearwork(); break; + case 0xc208: vsync(); break; + case 0xc20c: doshake(); break; + case 0xc210: zoom(); break; + case 0xc214: delthisone(); break; + case 0xc228: doblocks(); break; + case 0xc22c: showframe(); break; + case 0xc238: frameoutbh(); break; + case 0xc23c: frameoutfx(); break; + case 0xc240: transferinv(); break; + case 0xc244: transfermap(); break; + case 0xc248: fadedos(); break; + case 0xc24c: dofade(); break; + case 0xc250: clearendpal(); break; + case 0xc254: clearpalette(); break; + case 0xc258: fadescreenup(); break; + case 0xc25c: fadetowhite(); break; + case 0xc260: fadefromwhite(); break; + case 0xc264: fadescreenups(); break; + case 0xc268: fadescreendownhalf(); break; + case 0xc26c: fadescreenuphalf(); break; + case 0xc270: fadescreendown(); break; + case 0xc274: fadescreendowns(); break; + case 0xc278: clearstartpal(); break; + case 0xc27c: showgun(); break; + case 0xc280: rollendcredits2(); break; + case 0xc284: rollem(); break; + case 0xc288: fadecalculation(); break; + case 0xc28c: greyscalesum(); break; + case 0xc290: showgroup(); break; + case 0xc294: paltostartpal(); break; + case 0xc298: endpaltostart(); break; + case 0xc29c: startpaltoend(); break; + case 0xc2a0: paltoendpal(); break; + case 0xc2a4: allpalette(); break; + case 0xc2a8: dumpcurrent(); break; + case 0xc2ac: fadedownmon(); break; + case 0xc2b0: fadeupmon(); break; + case 0xc2b4: fadeupmonfirst(); break; + case 0xc2b8: fadeupyellows(); break; + case 0xc2bc: initialmoncols(); break; + case 0xc2c0: titles(); break; + case 0xc2c4: endgame(); break; + case 0xc2c8: monkspeaking(); break; + case 0xc2cc: showmonk(); break; + case 0xc2d0: gettingshot(); break; + case 0xc2d4: credits(); break; + case 0xc2d8: biblequote(); break; + case 0xc2dc: hangone(); break; + case 0xc2e0: intro(); break; + case 0xc2e4: runintroseq(); break; + case 0xc2e8: runendseq(); break; + case 0xc2ec: loadintroroom(); break; + case 0xc2f0: mode640x480(); break; + case 0xc2f4: set16colpalette(); break; + case 0xc2f8: realcredits(); break; + case 0xc2fc: printchar(); break; + case 0xc300: kernchars(); break; + case 0xc304: printslow(); break; + case 0xc308: waitframes(); break; + case 0xc30c: printboth(); break; + case 0xc310: printdirect(); break; + case 0xc314: monprint(); break; + case 0xc318: getnumber(); break; + case 0xc31c: getnextword(); break; + case 0xc320: fillryan(); break; + case 0xc324: fillopen(); break; + case 0xc328: findallryan(); break; + case 0xc32c: findallopen(); break; + case 0xc330: obtoinv(); break; + case 0xc334: isitworn(); break; + case 0xc338: makeworn(); break; + case 0xc33c: examineob(); break; + case 0xc340: makemainscreen(); break; + case 0xc344: getbackfromob(); break; + case 0xc348: incryanpage(); break; + case 0xc34c: openinv(); break; + case 0xc350: showryanpage(); break; + case 0xc354: openob(); break; + case 0xc358: obicons(); break; + case 0xc35c: examicon(); break; + case 0xc360: obpicture(); break; + case 0xc364: describeob(); break; + case 0xc368: additionaltext(); break; + case 0xc36c: obsthatdothings(); break; + case 0xc370: getobtextstart(); break; + case 0xc374: searchforsame(); break; + case 0xc378: findnextcolon(); break; + case 0xc37c: inventory(); break; + case 0xc380: setpickup(); break; + case 0xc384: examinventory(); break; + case 0xc388: reexfrominv(); break; + case 0xc38c: reexfromopen(); break; + case 0xc390: swapwithinv(); break; + case 0xc394: swapwithopen(); break; + case 0xc398: intoinv(); break; + case 0xc39c: deletetaken(); break; + case 0xc3a0: outofinv(); break; + case 0xc3a4: getfreead(); break; + case 0xc3a8: getexad(); break; + case 0xc3ac: geteitherad(); break; + case 0xc3b0: getanyad(); break; + case 0xc3b4: getanyaddir(); break; + case 0xc3b8: getopenedsize(); break; + case 0xc3bc: getsetad(); break; + case 0xc3c0: findinvpos(); break; + case 0xc3c4: findopenpos(); break; + case 0xc3c8: dropobject(); break; + case 0xc3cc: droperror(); break; + case 0xc3d0: cantdrop(); break; + case 0xc3d4: wornerror(); break; + case 0xc3d8: removeobfrominv(); break; + case 0xc3dc: selectopenob(); break; + case 0xc3e0: useopened(); break; + case 0xc3e4: errormessage1(); break; + case 0xc3e8: errormessage2(); break; + case 0xc3ec: errormessage3(); break; + case 0xc3f0: checkobjectsize(); break; + case 0xc3f4: outofopen(); break; + case 0xc3f8: transfertoex(); break; + case 0xc3fc: pickupconts(); break; + case 0xc400: transfercontoex(); break; + case 0xc404: transfertext(); break; + case 0xc408: getexpos(); break; + case 0xc40c: purgealocation(); break; + case 0xc410: emergencypurge(); break; + case 0xc414: purgeanitem(); break; + case 0xc418: deleteexobject(); break; + case 0xc41c: deleteexframe(); break; + case 0xc420: deleteextext(); break; + case 0xc424: blockget(); break; + case 0xc428: drawfloor(); break; + case 0xc42c: calcmapad(); break; + case 0xc430: getdimension(); break; + case 0xc434: addalong(); break; + case 0xc438: addlength(); break; + case 0xc43c: drawflags(); break; + case 0xc440: eraseoldobs(); break; + case 0xc444: showallobs(); break; + case 0xc448: makebackob(); break; + case 0xc44c: showallfree(); break; + case 0xc450: showallex(); break; + case 0xc454: calcfrframe(); break; + case 0xc458: finalframe(); break; + case 0xc45c: adjustlen(); break; + case 0xc460: getmapad(); break; + case 0xc464: getxad(); break; + case 0xc468: getyad(); break; + case 0xc46c: autolook(); break; + case 0xc470: look(); break; + case 0xc474: dolook(); break; + case 0xc478: redrawmainscrn(); break; + case 0xc47c: getback1(); break; + case 0xc480: talk(); break; + case 0xc484: convicons(); break; + case 0xc488: getpersframe(); break; + case 0xc48c: starttalk(); break; + case 0xc490: getpersontext(); break; + case 0xc494: moretalk(); break; + case 0xc498: dosometalk(); break; + case 0xc49c: hangonpq(); break; + case 0xc4a0: redes(); break; + case 0xc4a4: newplace(); break; + case 0xc4a8: selectlocation(); break; + case 0xc4ac: showcity(); break; + case 0xc4b0: lookatplace(); break; + case 0xc4b4: getundercentre(); break; + case 0xc4b8: putundercentre(); break; + case 0xc4bc: locationpic(); break; + case 0xc4c0: getdestinfo(); break; + case 0xc4c4: showarrows(); break; + case 0xc4c8: nextdest(); break; + case 0xc4cc: lastdest(); break; + case 0xc4d0: destselect(); break; + case 0xc4d4: getlocation(); break; + case 0xc4d8: setlocation(); break; + case 0xc4dc: resetlocation(); break; + case 0xc4e0: readdesticon(); break; + case 0xc4e4: readcitypic(); break; + case 0xc4e8: usemon(); break; + case 0xc4ec: printoutermon(); break; + case 0xc4f0: loadpersonal(); break; + case 0xc4f4: loadnews(); break; + case 0xc4f8: loadcart(); break; + case 0xc4fc: lookininterface(); break; + case 0xc500: turnonpower(); break; + case 0xc504: randomaccess(); break; + case 0xc508: powerlighton(); break; + case 0xc50c: powerlightoff(); break; + case 0xc510: accesslighton(); break; + case 0xc514: accesslightoff(); break; + case 0xc518: locklighton(); break; + case 0xc51c: locklightoff(); break; + case 0xc520: input(); break; + case 0xc524: makecaps(); break; + case 0xc528: delchar(); break; + case 0xc52c: execcommand(); break; + case 0xc530: neterror(); break; + case 0xc534: dircom(); break; + case 0xc538: searchforfiles(); break; + case 0xc53c: signon(); break; + case 0xc540: showkeys(); break; + case 0xc544: read(); break; + case 0xc548: dirfile(); break; + case 0xc54c: getkeyandlogo(); break; + case 0xc550: searchforstring(); break; + case 0xc554: parser(); break; + case 0xc558: scrollmonitor(); break; + case 0xc55c: lockmon(); break; + case 0xc560: monitorlogo(); break; + case 0xc564: printlogo(); break; + case 0xc568: showcurrentfile(); break; + case 0xc56c: monmessage(); break; + case 0xc570: processtrigger(); break; + case 0xc574: triggermessage(); break; + case 0xc578: printcurs(); break; + case 0xc57c: delcurs(); break; + case 0xc580: useobject(); break; + case 0xc584: useroutine(); break; + case 0xc588: wheelsound(); break; + case 0xc58c: runtap(); break; + case 0xc590: playguitar(); break; + case 0xc594: hotelcontrol(); break; + case 0xc598: hotelbell(); break; + case 0xc59c: opentomb(); break; + case 0xc5a0: usetrainer(); break; + case 0xc5a4: nothelderror(); break; + case 0xc5a8: usepipe(); break; + case 0xc5ac: usefullcart(); break; + case 0xc5b0: useplinth(); break; + case 0xc5b4: chewy(); break; + case 0xc5b8: useladder(); break; + case 0xc5bc: useladderb(); break; + case 0xc5c0: slabdoora(); break; + case 0xc5c4: slabdoorb(); break; + case 0xc5c8: slabdoord(); break; + case 0xc5cc: slabdoorc(); break; + case 0xc5d0: slabdoore(); break; + case 0xc5d4: slabdoorf(); break; + case 0xc5d8: useslab(); break; + case 0xc5dc: usecart(); break; + case 0xc5e0: useclearbox(); break; + case 0xc5e4: usecoveredbox(); break; + case 0xc5e8: userailing(); break; + case 0xc5ec: useopenbox(); break; + case 0xc5f0: wearwatch(); break; + case 0xc5f4: wearshades(); break; + case 0xc5f8: sitdowninbar(); break; + case 0xc5fc: usechurchhole(); break; + case 0xc600: usehole(); break; + case 0xc604: usealtar(); break; + case 0xc608: opentvdoor(); break; + case 0xc60c: usedryer(); break; + case 0xc610: openlouis(); break; + case 0xc614: nextcolon(); break; + case 0xc618: openyourneighbour(); break; + case 0xc61c: usewindow(); break; + case 0xc620: usebalcony(); break; + case 0xc624: openryan(); break; + case 0xc628: openpoolboss(); break; + case 0xc62c: openeden(); break; + case 0xc630: opensarters(); break; + case 0xc634: isitright(); break; + case 0xc638: drawitall(); break; + case 0xc63c: openhoteldoor(); break; + case 0xc640: openhoteldoor2(); break; + case 0xc644: grafittidoor(); break; + case 0xc648: trapdoor(); break; + case 0xc64c: callhotellift(); break; + case 0xc650: calledenslift(); break; + case 0xc654: calledensdlift(); break; + case 0xc658: usepoolreader(); break; + case 0xc65c: uselighter(); break; + case 0xc660: showseconduse(); break; + case 0xc664: usecardreader1(); break; + case 0xc668: usecardreader2(); break; + case 0xc66c: usecardreader3(); break; + case 0xc670: usecashcard(); break; + case 0xc674: lookatcard(); break; + case 0xc678: moneypoke(); break; + case 0xc67c: usecontrol(); break; + case 0xc680: usehatch(); break; + case 0xc684: usewire(); break; + case 0xc688: usehandle(); break; + case 0xc68c: useelevator1(); break; + case 0xc690: showfirstuse(); break; + case 0xc694: useelevator3(); break; + case 0xc698: useelevator4(); break; + case 0xc69c: useelevator2(); break; + case 0xc6a0: useelevator5(); break; + case 0xc6a4: usekey(); break; + case 0xc6a8: usestereo(); break; + case 0xc6ac: usecooker(); break; + case 0xc6b0: useaxe(); break; + case 0xc6b4: useelvdoor(); break; + case 0xc6b8: withwhat(); break; + case 0xc6bc: selectob(); break; + case 0xc6c0: compare(); break; + case 0xc6c4: findsetobject(); break; + case 0xc6c8: findexobject(); break; + case 0xc6cc: isryanholding(); break; + case 0xc6d0: checkinside(); break; + case 0xc6d4: usetext(); break; + case 0xc6d8: putbackobstuff(); break; + case 0xc6dc: showpuztext(); break; + case 0xc6e0: findpuztext(); break; + case 0xc6e4: placesetobject(); break; + case 0xc6e8: removesetobject(); break; + case 0xc6ec: issetobonmap(); break; + case 0xc6f0: placefreeobject(); break; + case 0xc6f4: removefreeobject(); break; + case 0xc6f8: findormake(); break; + case 0xc6fc: switchryanon(); break; + case 0xc700: switchryanoff(); break; + case 0xc704: setallchanges(); break; + case 0xc708: dochange(); break; + case 0xc70c: autoappear(); break; + case 0xc710: getundertimed(); break; + case 0xc714: putundertimed(); break; + case 0xc718: dumptimedtext(); break; + case 0xc71c: setuptimeduse(); break; + case 0xc720: setuptimedtemp(); break; + case 0xc724: usetimedtext(); break; + case 0xc728: edenscdplayer(); break; + case 0xc72c: usewall(); break; + case 0xc730: usechurchgate(); break; + case 0xc734: usegun(); break; + case 0xc738: useshield(); break; + case 0xc73c: usebuttona(); break; + case 0xc740: useplate(); break; + case 0xc744: usewinch(); break; + case 0xc748: entercode(); break; + case 0xc74c: loadkeypad(); break; + case 0xc750: quitkey(); break; + case 0xc754: addtopresslist(); break; + case 0xc758: buttonone(); break; + case 0xc75c: buttontwo(); break; + case 0xc760: buttonthree(); break; + case 0xc764: buttonfour(); break; + case 0xc768: buttonfive(); break; + case 0xc76c: buttonsix(); break; + case 0xc770: buttonseven(); break; + case 0xc774: buttoneight(); break; + case 0xc778: buttonnine(); break; + case 0xc77c: buttonnought(); break; + case 0xc780: buttonenter(); break; + case 0xc784: buttonpress(); break; + case 0xc788: showouterpad(); break; + case 0xc78c: showkeypad(); break; + case 0xc790: singlekey(); break; + case 0xc794: dumpkeypad(); break; + case 0xc798: usemenu(); break; + case 0xc79c: dumpmenu(); break; + case 0xc7a0: getundermenu(); break; + case 0xc7a4: putundermenu(); break; + case 0xc7a8: showoutermenu(); break; + case 0xc7ac: showmenu(); break; + case 0xc7b0: loadmenu(); break; + case 0xc7b4: viewfolder(); break; + case 0xc7b8: nextfolder(); break; + case 0xc7bc: folderhints(); break; + case 0xc7c0: lastfolder(); break; + case 0xc7c4: loadfolder(); break; + case 0xc7c8: showfolder(); break; + case 0xc7cc: folderexit(); break; + case 0xc7d0: showleftpage(); break; + case 0xc7d4: showrightpage(); break; + case 0xc7d8: entersymbol(); break; + case 0xc7dc: quitsymbol(); break; + case 0xc7e0: settopleft(); break; + case 0xc7e4: settopright(); break; + case 0xc7e8: setbotleft(); break; + case 0xc7ec: setbotright(); break; + case 0xc7f0: dumpsymbol(); break; + case 0xc7f4: showsymbol(); break; + case 0xc7f8: nextsymbol(); break; + case 0xc7fc: updatesymboltop(); break; + case 0xc800: updatesymbolbot(); break; + case 0xc804: dumpsymbox(); break; + case 0xc808: usediary(); break; + case 0xc80c: showdiary(); break; + case 0xc810: showdiarykeys(); break; + case 0xc814: dumpdiarykeys(); break; + case 0xc818: diarykeyp(); break; + case 0xc81c: diarykeyn(); break; + case 0xc820: showdiarypage(); break; + case 0xc824: findtext1(); break; + case 0xc828: zoomonoff(); break; + case 0xc82c: saveload(); break; + case 0xc830: dosaveload(); break; + case 0xc834: getbackfromops(); break; + case 0xc838: showmainops(); break; + case 0xc83c: showdiscops(); break; + case 0xc840: loadsavebox(); break; + case 0xc844: loadgame(); break; + case 0xc848: getbacktoops(); break; + case 0xc84c: discops(); break; + case 0xc850: savegame(); break; + case 0xc854: actualsave(); break; + case 0xc858: actualload(); break; + case 0xc85c: selectslot2(); break; + case 0xc860: checkinput(); break; + case 0xc864: getnamepos(); break; + case 0xc868: showopbox(); break; + case 0xc86c: showloadops(); break; + case 0xc870: showsaveops(); break; + case 0xc874: selectslot(); break; + case 0xc878: showslots(); break; + case 0xc87c: shownames(); break; + case 0xc880: dosreturn(); break; + case 0xc884: error(); break; + case 0xc888: namestoold(); break; + case 0xc88c: oldtonames(); break; + case 0xc890: savefilewrite(); break; + case 0xc894: savefileread(); break; + case 0xc898: saveposition(); break; + case 0xc89c: loadposition(); break; + case 0xc8a0: loadseg(); break; + case 0xc8a4: makeheader(); break; + case 0xc8a8: storeit(); break; + case 0xc8ac: saveseg(); break; + case 0xc8b0: findlen(); break; + case 0xc8b4: scanfornames(); break; + case 0xc8b8: decide(); break; + case 0xc8bc: showdecisions(); break; + case 0xc8c0: newgame(); break; + case 0xc8c4: loadold(); break; + case 0xc8c8: loadspeech(); break; + case 0xc8cc: createname(); break; + case 0xc8d0: loadsample(); break; + case 0xc8d4: loadsecondsample(); break; + case 0xc8d8: soundstartup(); break; + case 0xc8dc: trysoundalloc(); break; + case 0xc8e0: setsoundoff(); break; + case 0xc8e4: checksoundint(); break; + case 0xc8e8: enablesoundint(); break; + case 0xc8ec: disablesoundint(); break; + case 0xc8f0: interupttest(); break; + case 0xc8f4: soundend(); break; + case 0xc8f8: out22c(); break; + case 0xc8fc: playchannel0(); break; + case 0xc900: playchannel1(); break; + case 0xc904: makenextblock(); break; + case 0xc908: volumeadjust(); break; + case 0xc90c: loopchannel0(); break; + case 0xc910: cancelch0(); break; + case 0xc914: cancelch1(); break; + case 0xc918: channel0only(); break; + case 0xc91c: channel1only(); break; + case 0xc920: channel0tran(); break; + case 0xc924: bothchannels(); break; + case 0xc928: saveems(); break; + case 0xc92c: restoreems(); break; + case 0xc930: domix(); break; + case 0xc934: dmaend(); break; + case 0xc938: startdmablock(); break; + case 0xc93c: setuppit(); break; + case 0xc940: getridofpit(); break; + case 0xc944: pitinterupt(); break; + case 0xc948: dreamweb(); break; + case 0xc94c: entrytexts(); break; + case 0xc950: entryanims(); break; + case 0xc954: initialinv(); break; + case 0xc958: pickupob(); break; + case 0xc95c: setupemm(); break; + case 0xc960: removeemm(); break; + case 0xc964: checkforemm(); break; + case 0xc968: checkbasemem(); break; + case 0xc96c: allocatebuffers(); break; + case 0xc970: clearbuffers(); break; + case 0xc974: clearchanges(); break; + case 0xc978: clearbeforeload(); break; + case 0xc97c: clearreels(); break; + case 0xc980: clearrest(); break; + case 0xc984: deallocatemem(); break; + case 0xc988: allocatemem(); break; + case 0xc990: parseblaster(); break; + case 0xc994: startup(); break; + case 0xc998: startup1(); break; + case 0xc99c: screenupdate(); break; + case 0xc9a0: watchreel(); break; + case 0xc9a4: checkforshake(); break; + case 0xc9a8: watchcount(); break; + case 0xc9ac: showtime(); break; + case 0xc9b0: dumpwatch(); break; + case 0xc9b4: showbyte(); break; + case 0xc9b8: onedigit(); break; + case 0xc9bc: twodigitnum(); break; + case 0xc9c0: showword(); break; + case 0xc9c4: convnum(); break; + case 0xc9c8: mainscreen(); break; + case 0xc9cc: madmanrun(); break; + case 0xc9d0: checkcoords(); break; + case 0xc9d4: identifyob(); break; + case 0xc9d8: checkifperson(); break; + case 0xc9dc: checkifset(); break; + case 0xc9e0: checkifex(); break; + case 0xc9e4: checkiffree(); break; + case 0xc9e8: isitdescribed(); break; + case 0xc9ec: findpathofpoint(); break; + case 0xc9f0: findfirstpath(); break; + case 0xc9f4: turnpathon(); break; + case 0xc9f8: turnpathoff(); break; + case 0xc9fc: turnanypathon(); break; + case 0xca00: turnanypathoff(); break; + case 0xca04: checkifpathison(); break; + case 0xca08: afternewroom(); break; + case 0xca0c: atmospheres(); break; + case 0xca10: walkintoroom(); break; + case 0xca14: afterintroroom(); break; + case 0xca18: obname(); break; + case 0xca1c: finishedwalking(); break; + case 0xca20: examineobtext(); break; + case 0xca24: commandwithob(); break; + case 0xca28: commandonly(); break; + case 0xca2c: printmessage(); break; + case 0xca30: printmessage2(); break; + case 0xca34: blocknametext(); break; + case 0xca38: personnametext(); break; + case 0xca3c: walktotext(); break; + case 0xca40: getflagunderp(); break; + case 0xca44: setwalk(); break; + case 0xca48: autosetwalk(); break; + case 0xca4c: checkdest(); break; + case 0xca50: bresenhams(); break; + case 0xca54: workoutframes(); break; + case 0xca58: getroomspaths(); break; + case 0xca5c: copyname(); break; + case 0xca60: findobname(); break; + case 0xca64: showicon(); break; + case 0xca68: middlepanel(); break; + case 0xca6c: showman(); break; + case 0xca70: showpanel(); break; + case 0xca74: roomname(); break; + case 0xca78: usecharset1(); break; + case 0xca7c: usetempcharset(); break; + case 0xca80: showexit(); break; + case 0xca84: panelicons1(); break; + case 0xca88: showwatch(); break; + case 0xca8c: gettime(); break; + case 0xca90: zoomicon(); break; + case 0xca94: showblink(); break; + case 0xca98: dumpblink(); break; + case 0xca9c: worktoscreenm(); break; + case 0xcaa0: blank(); break; + case 0xcaa4: allpointer(); break; + case 0xcaa8: hangonp(); break; + case 0xcaac: hangonw(); break; + case 0xcab0: hangoncurs(); break; + case 0xcab4: getunderzoom(); break; + case 0xcab8: dumpzoom(); break; + case 0xcabc: putunderzoom(); break; + case 0xcac0: crosshair(); break; + case 0xcac4: showpointer(); break; + case 0xcac8: delpointer(); break; + case 0xcacc: dumppointer(); break; + case 0xcad0: undertextline(); break; + case 0xcad4: deltextline(); break; + case 0xcad8: dumptextline(); break; + case 0xcadc: animpointer(); break; + case 0xcae0: setmouse(); break; + case 0xcae4: readmouse(); break; + case 0xcae8: mousecall(); break; + case 0xcaec: readmouse1(); break; + case 0xcaf0: readmouse2(); break; + case 0xcaf4: readmouse3(); break; + case 0xcaf8: readmouse4(); break; + case 0xcafc: readkey(); break; + case 0xcb04: randomnum1(); break; + case 0xcb08: randomnum2(); break; + case 0xcb10: hangon(); break; + case 0xcb14: loadtraveltext(); break; + case 0xcb18: loadintotemp(); break; + case 0xcb1c: loadintotemp2(); break; + case 0xcb20: loadintotemp3(); break; + case 0xcb24: loadtempcharset(); break; + case 0xcb28: standardload(); break; + case 0xcb2c: loadtemptext(); break; + case 0xcb30: loadroom(); break; + case 0xcb34: loadroomssample(); break; + case 0xcb38: getridofreels(); break; + case 0xcb3c: getridofall(); break; + case 0xcb40: restorereels(); break; + case 0xcb44: restoreall(); break; + case 0xcb48: sortoutmap(); break; + case 0xcb4c: startloading(); break; + case 0xcb50: disablepath(); break; + case 0xcb54: findxyfrompath(); break; + case 0xcb58: findroominloc(); break; + case 0xcb5c: getroomdata(); break; + case 0xcb60: readheader(); break; + case 0xcb64: dontloadseg(); break; + case 0xcb68: allocateload(); break; + case 0xcb6c: fillspace(); break; + case 0xcb70: getridoftemp(); break; + case 0xcb74: getridoftemptext(); break; + case 0xcb78: getridoftemp2(); break; + case 0xcb7c: getridoftemp3(); break; + case 0xcb80: getridoftempcharset(); break; + case 0xcb84: getridoftempsp(); break; + case 0xcb88: readsetdata(); break; + case 0xcb8c: createfile(); break; + case 0xcb90: openfile(); break; + case 0xcb94: openfilefromc(); break; + case 0xcb98: makename(); break; + case 0xcb9c: openfilenocheck(); break; + case 0xcba0: openforsave(); break; + case 0xcba4: closefile(); break; + case 0xcba8: readfromfile(); break; + case 0xcbac: setkeyboardint(); break; + case 0xcbb0: resetkeyboard(); break; + case 0xcbb4: keyboardread(); break; + case 0xcbb8: walkandexamine(); break; + case 0xcbbc: doload(); break; + case 0xcbc0: generalerror(); break; + default: ::error("invalid call to %04x dispatched", (uint16)ax); + } +} + +} /*namespace*/ |