diff options
author | Filippos Karapetis | 2011-12-16 22:29:41 +0200 |
---|---|---|
committer | Filippos Karapetis | 2011-12-16 22:29:41 +0200 |
commit | 984010faae5d7cac0cef8f74229f9761cf7dd934 (patch) | |
tree | f60fb86009270eb2b8f0265b7c84ea12ce86da27 /engines | |
parent | 12cac260c9acb16180ab4414fecd5748d77886f3 (diff) | |
download | scummvm-rg350-984010faae5d7cac0cef8f74229f9761cf7dd934.tar.gz scummvm-rg350-984010faae5d7cac0cef8f74229f9761cf7dd934.tar.bz2 scummvm-rg350-984010faae5d7cac0cef8f74229f9761cf7dd934.zip |
DREAMWEB: Port 'identifyob' to C++
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 63 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 5 | ||||
-rw-r--r-- | engines/dreamweb/object.cpp | 38 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 1 |
4 files changed, 41 insertions, 66 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 0938efca37..ddc599f7e8 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -3104,69 +3104,6 @@ void DreamGenContext::clearChanges() { _stosw(cx, true); } -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::findPathOfPoint() { STACK_CHECK; push(ax); diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index f3cedd890d..5273270ce5 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -475,12 +475,11 @@ public: #include "stubs.h" // Allow hand-reversed functions to have a signature different than void f() void fadeDownMon(); - void identifyOb(); void getPersonText(); void clearBuffers(); void getObTextStart(); void checkObjectSize(); - void fillOpen(); + void showSlots(); void useCashCard(); void moneyPoke(); void doSomeTalk(); @@ -519,7 +518,7 @@ public: void rollEm(); void lookAtPlace(); void findAllOpen(); - void showSlots(); + void fillOpen(); void deleteExObject(); void getEitherAd(); void setPickup(); diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 5f326a5a03..64f70ada98 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -312,4 +312,42 @@ void DreamGenContext::openOb() { _openChangeSize = getOpenedSizeCPP() * kItempicsize + kInventx; } +void DreamGenContext::identifyOb() { + if (data.word(kWatchingtime) != 0 || + data.word(kMousex) - data.word(kMapadx) >= 22 * 8 || + data.word(kMousey) - data.word(kMapady) >= 20 * 8) { + blank(); + return; + } + + data.byte(kInmaparea) = 1; + ah = bl; + push(ax); + findPathOfPoint(); + data.byte(kPointerspath) = dl; + ax = pop(); + push(ax); + findFirstPath(); + data.byte(kPointerfirstpath) = al; + ax = pop(); + + byte x = al; + byte y = ah; + + if (checkIfEx(x, y) || checkIfFree(x, y) || + checkIfPerson(x, y) || checkIfSet(x, y)) + return; // finishidentify + + x = (data.word(kMousex) - data.word(kMapadx)) & 0xFF; + y = (data.word(kMousey) - data.word(kMapady)) & 0xFF; + byte flag, flagEx, type, flagX, flagY; + + checkOne(x, y, &flag, &flagEx, &type, &flagX, &flagY); + + if (type != 0 && data.byte(kMandead) != 1) + obName(type, 3); + else + blank(); +} + } // End of namespace DreamGen diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index d3f656db45..6140f3d0d4 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -392,5 +392,6 @@ void withWhat(); void notHeldError(); void useGun(); + void identifyOb(); #endif |