aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/object.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2011-12-25 17:54:22 +0200
committerFilippos Karapetis2011-12-25 17:54:22 +0200
commitbf4271dfc116fa6f4b4245051e2d6a391f1d850c (patch)
tree7694b9e26b1eff50c51a64455f6719516ca2acfb /engines/dreamweb/object.cpp
parentc531c4c1eafbf66a3724df0f3cb7b9ad8da97a8d (diff)
downloadscummvm-rg350-bf4271dfc116fa6f4b4245051e2d6a391f1d850c.tar.gz
scummvm-rg350-bf4271dfc116fa6f4b4245051e2d6a391f1d850c.tar.bz2
scummvm-rg350-bf4271dfc116fa6f4b4245051e2d6a391f1d850c.zip
DREAMWEB: Port 'swapwithopen' to C++
Diffstat (limited to 'engines/dreamweb/object.cpp')
-rw-r--r--engines/dreamweb/object.cpp91
1 files changed, 81 insertions, 10 deletions
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 9eb31f438f..6546f19da4 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -834,6 +834,49 @@ void DreamGenContext::reExFromInv() {
data.byte(kPointermode) = 0;
}
+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();
+}
+
void DreamGenContext::useOpened() {
if (data.byte(kOpenedob) == 255)
return; // cannot use opened object
@@ -902,11 +945,11 @@ void DreamGenContext::useOpened() {
delPointer();
}
-void DreamGenContext::swapWithInv() {
+void DreamGenContext::swapWithOpen() {
uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
if (subject == data.word(kOldsubject)) {
- if (data.byte(kCommandtype) != 243) {
- data.byte(kCommandtype) = 243;
+ if (data.byte(kCommandtype) != 242) {
+ data.byte(kCommandtype) = 242;
data.word(kOldsubject) = subject;
commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
}
@@ -918,28 +961,56 @@ void DreamGenContext::swapWithInv() {
if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
return;
+ if (isItWorn(getEitherAdCPP())) {
+ wornError();
+ return;
+ }
+
+ delPointer();
+
+ if (data.byte(kItemframe) == data.byte(kOpenedob) &&
+ data.byte(kObjecttype) == data.byte(kOpenedtype)) {
+ errorMessage1();
+ return;
+ }
+
+ if (!checkObjectSizeCPP())
+ 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;
+ findOpenPos();
+ ax = es.word(bx);
+ data.byte(kItemframe) = al;
+ data.byte(kObjecttype) = ah;
+
+ if (data.byte(kObjecttype) != 4) {
+ transferToEx();
+ data.byte(kItemframe) = al;
+ data.byte(kObjecttype) = 4;
+ }
+
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();
+ findOpenPos();
object = getEitherAdCPP();
- object->mapad[0] = 4;
- object->mapad[1] = 255;
+ object->mapad[0] = data.byte(kOpenedtype);
+ object->mapad[1] = data.byte(kOpenedob);
object->mapad[2] = data.byte(kLastinvpos);
+ object->mapad[3] = data.byte(kReallocation);
data.byte(kObjecttype) = prevType2;
data.byte(kItemframe) = prevFrame2;
+ fillOpen();
fillRyan();
+ underTextLine();
readMouse();
+ useOpened();
showPointer();
workToScreenCPP();
delPointer();