DREAMWEB: Port 'swapwithinv' to C++
This commit is contained in:
parent
0fff97b4b0
commit
c531c4c1ea
5 changed files with 45 additions and 61 deletions
|
@ -859,6 +859,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||||
'startup1',
|
'startup1',
|
||||||
'steady',
|
'steady',
|
||||||
'storeit',
|
'storeit',
|
||||||
|
'swapwithinv',
|
||||||
'switchryanoff',
|
'switchryanoff',
|
||||||
'switchryanon',
|
'switchryanon',
|
||||||
'talk',
|
'talk',
|
||||||
|
|
|
@ -284,66 +284,6 @@ findopen2a:
|
||||||
goto findopen1a;
|
goto findopen1a;
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
void DreamGenContext::swapWithOpen() {
|
||||||
STACK_CHECK;
|
STACK_CHECK;
|
||||||
al = data.byte(kItemframe);
|
al = data.byte(kItemframe);
|
||||||
|
|
|
@ -477,7 +477,6 @@ public:
|
||||||
void searchForString();
|
void searchForString();
|
||||||
void searchForFiles();
|
void searchForFiles();
|
||||||
void getExAd();
|
void getExAd();
|
||||||
void swapWithInv();
|
|
||||||
void transferToEx();
|
void transferToEx();
|
||||||
void parser();
|
void parser();
|
||||||
void emergencyPurge();
|
void emergencyPurge();
|
||||||
|
|
|
@ -902,4 +902,47 @@ void DreamGenContext::useOpened() {
|
||||||
delPointer();
|
delPointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DreamGenContext::swapWithInv() {
|
||||||
|
uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
|
||||||
|
if (subject == data.word(kOldsubject)) {
|
||||||
|
if (data.byte(kCommandtype) != 243) {
|
||||||
|
data.byte(kCommandtype) = 243;
|
||||||
|
data.word(kOldsubject) = subject;
|
||||||
|
commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data.word(kOldsubject) = subject;
|
||||||
|
commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
|
||||||
|
return;
|
||||||
|
|
||||||
|
byte prevType = data.byte(kObjecttype);
|
||||||
|
byte prevFrame = data.byte(kItemframe);
|
||||||
|
uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP());
|
||||||
|
data.byte(kItemframe) = objectId & 0x00FF;
|
||||||
|
data.byte(kObjecttype) = objectId >> 8;
|
||||||
|
DynObject *object = getEitherAdCPP();
|
||||||
|
object->mapad[0] = 20;
|
||||||
|
object->mapad[1] = 255;
|
||||||
|
byte prevType2 = data.byte(kObjecttype);
|
||||||
|
byte prevFrame2 = data.byte(kItemframe);
|
||||||
|
data.byte(kObjecttype) = prevType;
|
||||||
|
data.byte(kItemframe) = prevFrame;
|
||||||
|
//findInvPosCPP(); // found in the original source, but it seems to be useless
|
||||||
|
delPointer();
|
||||||
|
object = getEitherAdCPP();
|
||||||
|
object->mapad[0] = 4;
|
||||||
|
object->mapad[1] = 255;
|
||||||
|
object->mapad[2] = data.byte(kLastinvpos);
|
||||||
|
data.byte(kObjecttype) = prevType2;
|
||||||
|
data.byte(kItemframe) = prevFrame2;
|
||||||
|
fillRyan();
|
||||||
|
readMouse();
|
||||||
|
showPointer();
|
||||||
|
workToScreenCPP();
|
||||||
|
delPointer();
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace DreamGen
|
} // End of namespace DreamGen
|
||||||
|
|
|
@ -196,5 +196,6 @@
|
||||||
void reExFromInv();
|
void reExFromInv();
|
||||||
void locationPic();
|
void locationPic();
|
||||||
void useOpened();
|
void useOpened();
|
||||||
|
void swapWithInv();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue