aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/object.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2011-12-26 19:35:47 +0100
committerWillem Jan Palenstijn2011-12-26 20:03:52 +0100
commit6f85de6b6e9b2af820d0294db16881d41368d693 (patch)
tree34ea544f1a3354b146449359bb66e10710fe03d3 /engines/dreamweb/object.cpp
parent463aa52ac6bad2f5d15c1daed613396e5c0e149b (diff)
downloadscummvm-rg350-6f85de6b6e9b2af820d0294db16881d41368d693.tar.gz
scummvm-rg350-6f85de6b6e9b2af820d0294db16881d41368d693.tar.bz2
scummvm-rg350-6f85de6b6e9b2af820d0294db16881d41368d693.zip
DREAMWEB: Combine transferMap and transferInv
Diffstat (limited to 'engines/dreamweb/object.cpp')
-rw-r--r--engines/dreamweb/object.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 9799ca4726..0f0599b7f6 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -255,10 +255,11 @@ void DreamGenContext::inventory() {
examineOb(false);
}
-void DreamGenContext::transferText() {
- getSegment(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos);
- uint16 freeTextOffset = data.byte(kItemtotran) * 2;
+void DreamBase::transferText(uint8 from, uint8 to) {
+ getSegment(data.word(kExtras)).word(kExtextdat + 2*to) = data.word(kExtextpos);
+ uint16 freeTextOffset = 2*from;
uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset);
+
const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0);
char *dst = (char *)getSegment(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0);
@@ -1012,23 +1013,29 @@ ObjectRef DreamBase::findOpenPos() {
byte DreamGenContext::transferToEx() {
emergencyPurge();
+
DynObject *exObject = getExPos(); // Also sets es:di
byte pos = data.byte(kExpos);
+
DynObject *freeObject = getFreeAd(data.byte(kItemframe));
+
memcpy(exObject, freeObject, sizeof(DynObject));
+
exObject->currentLocation = data.byte(kReallocation);
exObject->initialLocation = data.byte(kReallocation);
exObject->index = data.byte(kItemframe);
exObject->mapad[0] = 4;
exObject->mapad[1] = 255;
exObject->mapad[2] = data.byte(kLastinvpos);
- data.byte(kItemtotran) = data.byte(kItemframe);
- transferMap();
- transferInv();
- transferText();
- freeObject = getFreeAd(data.byte(kItemframe));
+
+ transferFrame(data.byte(kItemframe), pos, 0);
+ transferFrame(data.byte(kItemframe), pos, 1);
+ transferText(data.byte(kItemframe), pos);
+
freeObject->mapad[0] = 254;
+
pickupConts();
+
return pos;
}
@@ -1084,14 +1091,13 @@ void DreamGenContext::pickupConts() {
uint8 expos = data.byte(kExpos);
- for (uint16 index = 0; index < 80; ++index) {
+ for (uint8 index = 0; index < 80; ++index) {
DynObject *freeObj = getFreeAd(index);
if (freeObj->mapad[0] != data.byte(kObjecttype))
continue;
if (freeObj->mapad[1] != data.byte(kItemframe))
continue;
- data.byte(kItemtotran) = index;
DynObject *exObj = getExPos(); // Also sets es:di to exObj
@@ -1102,9 +1108,9 @@ void DreamGenContext::pickupConts() {
exObj->mapad[0] = 4; // kExObjectType?
exObj->mapad[1] = expos;
- transferMap();
- transferInv();
- transferText();
+ transferFrame(index, data.byte(kExpos), 0);
+ transferFrame(index, data.byte(kExpos), 1);
+ transferText(index, data.byte(kExpos));
freeObj->mapad[0] = 0xFF;
}