diff options
-rwxr-xr-x | devtools/tasmrecover/tasm-recover | 2 | ||||
-rw-r--r-- | engines/dreamweb/dreambase.h | 2 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 82 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 2 | ||||
-rw-r--r-- | engines/dreamweb/object.cpp | 35 | ||||
-rw-r--r-- | engines/dreamweb/stubs.cpp | 9 | ||||
-rw-r--r-- | engines/dreamweb/use.cpp | 3 |
7 files changed, 43 insertions, 92 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 579a58f799..8fe03bc532 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -676,6 +676,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'printsprites', 'printundermon', 'processtrigger', + 'purgealocation', 'putbackobstuff', 'putundercentre', 'putundermenu', @@ -716,6 +717,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'removesetobject', 'removeobfrominv', 'resetkeyboard', + 'resetlocation', 'restoreall', 'restoreems', 'restorereels', diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h index 01772bb2ff..5acdca0ac9 100644 --- a/engines/dreamweb/dreambase.h +++ b/engines/dreamweb/dreambase.h @@ -143,6 +143,7 @@ public: void showArrows(); uint8 getLocation(uint8 index); void setLocation(uint8 index); + void resetLocation(uint8 index); // from object.cpp void obIcons(); @@ -154,6 +155,7 @@ public: void deleteExObject(uint8 index); void deleteExFrame(uint8 frameNum); void deleteExText(uint8 textNum); + void purgeALocation(uint8 index); // from pathfind.cpp void turnPathOn(uint8 param); diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index c2d8530b25..e23a0a7983 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -1130,37 +1130,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: @@ -1491,57 +1460,6 @@ void DreamGenContext::getDestInfo() { 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; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 92b75a287a..de710a20d1 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -469,7 +469,6 @@ public: void getObTextStart(); void checkObjectSize(); void doSomeTalk(); - void resetLocation(); void outOfOpen(); void dirCom(); void findFirstPath(); @@ -481,7 +480,6 @@ public: void reExFromInv(); void transferMap(); void purgeAnItem(); - void purgeALocation(); void getSetAd(); void findOpenPos(); void searchForSame(); diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8553f41ee8..6aa1364002 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -631,4 +631,39 @@ void DreamGenContext::outOfInv() { delPointer(); } +void DreamBase::resetLocation(uint8 index) { + if (index == 5) { + // delete hotel + purgeALocation(5); + purgeALocation(21); + purgeALocation(22); + purgeALocation(27); + } else if (index == 8) { + // delete TV studio + purgeALocation(8); + purgeALocation(28); + } else if (index == 6) { + // delete sarters + purgeALocation(6); + purgeALocation(20); + purgeALocation(25); + } else if (index == 13) { + // delete boathouse + purgeALocation(13); + purgeALocation(29); + } + + data.byte(kRoomscango + index) = 0; +} + +void DreamBase::purgeALocation(uint8 index) { + // index == al + for (uint8 i = 0; i < kNumexobjects; ++i) { + DynObject *t = getExAd(i); + if (t->currentLocation == index && t->mapad[0] == 0) { + deleteExObject(i); + } + } +} + } // End of namespace DreamGen diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 137fad4526..894c247e5b 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -3901,8 +3901,7 @@ void DreamGenContext::useButtonA() { void DreamGenContext::autoAppear() { if (data.byte(kLocation) == 32) { // In alley - al = 5; - resetLocation(); + resetLocation(5); setLocation(10); data.byte(kDestpos) = 10; return; @@ -3932,8 +3931,7 @@ void DreamGenContext::autoAppear() { if (data.byte(kReallocation) == 25) { // Sart roof data.byte(kNewsitem) = 3; - al = 6; - resetLocation(); + resetLocation(6); setLocation(11); data.byte(kDestpos) = 11; } else { @@ -4013,8 +4011,7 @@ void DreamGenContext::entryAnims() { data.byte(kSpeedcount) = 1; break; case 44: // Sparky's - al = 8; - resetLocation(); + resetLocation(8); data.word(kWatchingtime) = 50*2; data.word(kReeltowatch) = 247; data.word(kEndwatchreel) = 297; diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index f6406dc773..d3dda0e0a0 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -823,8 +823,7 @@ void DreamGenContext::useGun() { } else if (data.byte(kReallocation) == 29) { // aide data.byte(kGetback) = 1; - al = 13; - resetLocation(); + resetLocation(13); setLocation(12); data.byte(kDestpos) = 12; data.byte(kDestination) = 2; |