DREAMWEB: Port 'identifyob' to C++

This commit is contained in:
Filippos Karapetis 2011-12-16 22:29:41 +02:00
parent 12cac260c9
commit 984010faae
5 changed files with 42 additions and 66 deletions

View File

@ -480,6 +480,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'helicopter',
'hotelbell',
'hotelcontrol',
'identifyob',
'initialinv',
'initman',
'initrain',

View File

@ -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);

View File

@ -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();

View File

@ -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

View File

@ -392,5 +392,6 @@
void withWhat();
void notHeldError();
void useGun();
void identifyOb();
#endif