[Scummvm-cvs-logs] scummvm master -> 95ffd7f4ce2e0274b8adf87f03bc705b1d3a1ebd
bluegr
md5 at scummvm.org
Sun Dec 25 18:25:47 CET 2011
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
95ffd7f4ce DREAMWEB: Port 'purgeanitem' to C++, some cleanup
Commit: 95ffd7f4ce2e0274b8adf87f03bc705b1d3a1ebd
https://github.com/scummvm/scummvm/commit/95ffd7f4ce2e0274b8adf87f03bc705b1d3a1ebd
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-25T09:25:00-08:00
Commit Message:
DREAMWEB: Port 'purgeanitem' to C++, some cleanup
Changed paths:
devtools/tasmrecover/tasm-recover
engines/dreamweb/dreambase.h
engines/dreamweb/dreamgen.cpp
engines/dreamweb/dreamgen.h
engines/dreamweb/object.cpp
engines/dreamweb/stubs.cpp
engines/dreamweb/stubs.h
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 0ca442f..7ae43e4 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -697,6 +697,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'printundermon',
'processtrigger',
'purgealocation',
+ 'purgeanitem',
'putbackobstuff',
'putundercentre',
'putundermenu',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index 9e45e04..c14bfda 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -541,6 +541,8 @@ public:
void cantDrop();
void entryAnims();
bool finishedWalking();
+ void emergencyPurge();
+ void purgeAnItem();
// from talk.cpp
void talk();
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 42c0f71..3ab3a66 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -475,56 +475,6 @@ void DreamGenContext::transferConToEx() {
ds.byte(si+2) = 255;
}
-void DreamGenContext::purgeAnItem() {
- STACK_CHECK;
- es = data.word(kExtras);
- di = (0+2080+30000);
- bl = data.byte(kReallocation);
- cx = 0;
-lookforpurge:
- al = es.byte(di+2);
- _cmp(al, 0);
- if (!flags.z())
- goto cantpurge;
- _cmp(es.byte(di+12), 2);
- if (flags.z())
- goto iscup;
- _cmp(es.byte(di+12), 255);
- if (!flags.z())
- goto cantpurge;
-iscup:
- _cmp(es.byte(di+11), bl);
- if (flags.z())
- goto cantpurge;
- deleteExObject();
- return;
-cantpurge:
- _add(di, 16);
- _inc(cx);
- _cmp(cx, (114));
- if (!flags.z())
- goto lookforpurge;
- di = (0+2080+30000);
- bl = data.byte(kReallocation);
- cx = 0;
-lookforpurge2:
- al = es.byte(di+2);
- _cmp(al, 0);
- if (!flags.z())
- goto cantpurge2;
- _cmp(es.byte(di+12), 255);
- if (!flags.z())
- goto cantpurge2;
- deleteExObject();
- return;
-cantpurge2:
- _add(di, 16);
- _inc(cx);
- _cmp(cx, (114));
- if (!flags.z())
- goto lookforpurge2;
-}
-
void DreamGenContext::getDestInfo() {
STACK_CHECK;
al = data.byte(kDestpos);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index d86e007..cd65c72 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -461,7 +461,6 @@ public:
void dirFile();
void pickupConts();
void transferMap();
- void purgeAnItem();
void getSetAd();
void findOpenPos();
void rollEm();
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 64b3d27..f3e27d9 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -517,11 +517,6 @@ void DreamBase::deleteExText(uint8 textNum) {
}
}
-// This takes es:di and cl as input, but es:di always points to getExAd(cl)
-void DreamGenContext::deleteExObject() {
- deleteExObject(cl);
-}
-
void DreamBase::deleteExObject(uint8 index) {
DynObject *obj = getExAd(index);
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 4eea0b7..3425ad4 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -3701,7 +3701,7 @@ void DreamBase::incRyanPage() {
}
-void DreamGenContext::emergencyPurge() {
+void DreamBase::emergencyPurge() {
while (true) {
if (data.word(kExframepos) + 4000 < kExframeslen) {
// Not near frame end
@@ -3713,4 +3713,23 @@ void DreamGenContext::emergencyPurge() {
}
}
+void DreamBase::purgeAnItem() {
+ const DynObject *extraObjects = (const DynObject *)getSegment(data.word(kExtras)).ptr(kExdata, 0);
+
+ for (size_t i = 0; i < kNumexobjects; ++i) {
+ if (extraObjects[i].mapad[0] && extraObjects[i].id[0] == 255 &&
+ extraObjects[i].initialLocation != data.byte(kReallocation)) {
+ deleteExObject(i);
+ return;
+ }
+ }
+
+ for (size_t i = 0; i < kNumexobjects; ++i) {
+ if (extraObjects[i].mapad[0] && extraObjects[i].id[0] == 255) {
+ deleteExObject(i);
+ return;
+ }
+ }
+}
+
} // End of namespace DreamGen
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 5bb07ad..98149f2 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -183,10 +183,6 @@
uint16 findInvPosCPP();
void setPickup();
void getKeyAndLogo();
- void deleteExObject();
- void deleteExObject(uint8 index) {
- DreamBase::deleteExObject(index);
- }
void signOn();
void lookAtPlace();
void inToInv();
@@ -199,6 +195,5 @@
void outOfOpen();
void swapWithOpen();
void swapWithInv();
- void emergencyPurge();
#endif
More information about the Scummvm-git-logs
mailing list