diff options
author | Willem Jan Palenstijn | 2011-12-26 19:35:47 +0100 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-12-26 20:03:52 +0100 |
commit | 6f85de6b6e9b2af820d0294db16881d41368d693 (patch) | |
tree | 34ea544f1a3354b146449359bb66e10710fe03d3 /engines/dreamweb/object.cpp | |
parent | 463aa52ac6bad2f5d15c1daed613396e5c0e149b (diff) | |
download | scummvm-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.cpp | 32 |
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; } |