[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