diff options
Diffstat (limited to 'engines/dreamweb/dreamgen.cpp')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 1473 |
1 files changed, 32 insertions, 1441 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index a0ce29d416..66885d7623 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -26,59 +26,6 @@ namespace DreamGen { -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::transferMap() { STACK_CHECK; di = data.word(kExframepos); @@ -126,158 +73,6 @@ void DreamGenContext::transferMap() { _add(data.word(kExframepos), cx); } -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::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::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::fillOpen() { STACK_CHECK; delTextLine(); @@ -395,302 +190,6 @@ findopen2a: goto findopen1a; } -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::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::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::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::getFreeAd() { STACK_CHECK; ah = 0; @@ -710,19 +209,6 @@ void DreamGenContext::getExAd() { _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); @@ -755,382 +241,6 @@ void DreamGenContext::getSetAd() { es = data.word(kSetdat); } -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::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::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(); @@ -1241,418 +351,6 @@ void DreamGenContext::transferConToEx() { ds.byte(si+2) = 255; } -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::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::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::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 = 555; - _add(si, ax); - cl = es.byte(si); - ax = pop(); - push(cx); - dx = data; - es = dx; - si = 571; - _add(si, ax); - ax = pop(); -} - -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, 555); - es.byte(bx) = 0; -} - void DreamGenContext::dirCom() { STACK_CHECK; cx = 30; @@ -1669,7 +367,7 @@ dirroot: si = offset_rootdir; _inc(si); es = cs; - di = 480; + di = 462; _inc(di); cx = 12; _movsb(cx, true); @@ -1686,22 +384,6 @@ dirroot: 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::read() { STACK_CHECK; cx = 40; @@ -1714,7 +396,7 @@ void DreamGenContext::read() { return; okcom: es = cs; - di = 480; + di = 462; ax = data.word(kTextfile1); data.word(kMonsource) = ax; ds = ax; @@ -1844,7 +526,7 @@ keyok2: ds = cs; si = offset_operand1+1; es = cs; - di = 480+1; + di = 462+1; cx = 12; _movsb(cx, true); monitorLogo(); @@ -1926,7 +608,7 @@ void DreamGenContext::parser() { al = '='; _stosb(); ds = cs; - si = 589; + si = 556; notspace1: _lodsw(); _cmp(al, 32); @@ -1954,93 +636,6 @@ finishpars: di = offset_operand1; } -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::__start() { static const uint8 src[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2063,14 +658,14 @@ void DreamGenContext::__start() { //0x0080: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0090: .... .... .... .... - 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, //0x00a0: .... .... .... .... - 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, //0x00b0: .... .... .... .... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, + //0x00c0: .... .... ... ... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - //0x00c0: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, - //0x00d0: .... .... .... . . + //0x00d0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00e0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2085,37 +680,37 @@ void DreamGenContext::__start() { //0x0130: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0140: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 0x00, 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, //0x0150: .... .... .... .... - 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, //0x0160: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0170: .... .... .... .... - 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, //0x0180: .... .... .... .... - 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, 0xff, 0x00, //0x0190: .... .... .... .... + 0x00, 0x00, 0x00, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, + //0x01a0: .... .DRE AMWE B.V9 + 0x39, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + //0x01b0: 9. . + 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, + //0x01c0: "ROO T ." + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0d, 0x0a, 0x0d, 0x0a, + //0x01d0: . .... + 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x01e0: $... .... .... .... + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x01f0: .... .... .D:. .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - //0x01a0: .... .... .... .... - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, - //0x01b0: .... ...D REAM WEB. - 0x56, 0x39, 0x39, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - //0x01c0: V99. - 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - //0x01d0: ."R OOT . - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0d, 0x0a, - //0x01e0: " ... - 0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - //0x01f0: ..$. .... .... .... - 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, - //0x0200: .... .... ...D :... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0200: .... .... .... .... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0210: .... .... .... .... - 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, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0220: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0230: .... .... .... .... - 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, //0x0240: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0250: .... .... .... .... @@ -2127,13 +722,9 @@ void DreamGenContext::__start() { //0x0280: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0290: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 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, //0x02a0: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - //0x02b0: .... .... .... .... - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - //0x02c0: .... .... .... .... - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, }; + 0xff, 0xff, 0x00, 0x00, 0x00, }; ds.assign(src, src + sizeof(src)); dreamweb(); } |