[Scummvm-cvs-logs] scummvm master -> 0fff97b4b023895256cb8cce9b30684d433bfae4

bluegr md5 at scummvm.org
Sun Dec 25 16:11:21 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:
0fff97b4b0 DREAMWEB: Port 'useopened' to C++


Commit: 0fff97b4b023895256cb8cce9b30684d433bfae4
    https://github.com/scummvm/scummvm/commit/0fff97b4b023895256cb8cce9b30684d433bfae4
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-25T07:10:49-08:00

Commit Message:
DREAMWEB: Port 'useopened' to C++

Changed paths:
    devtools/tasmrecover/tasm-recover
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h
    engines/dreamweb/object.cpp
    engines/dreamweb/stubs.h



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index e33fc7e..84c1648 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -919,6 +919,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'usemon',
 	'useobject',
 	'useopenbox',
+	'useopened',
 	'usepipe',
 	'useplate',
 	'useplinth',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 55ab375..4d89322 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -527,100 +527,6 @@ findopenp1:
 	_add(bx, (0+(228*13)));
 }
 
-void DreamGenContext::useOpened() {
-	STACK_CHECK;
-	_cmp(data.byte(kOpenedob), 255);
-	if (flags.z())
-		return /* (cannotuseopen) */;
-	_cmp(data.byte(kPickup), 0);
-	if (!flags.z())
-		goto notout2;
-	outOfOpen();
-	return;
-notout2:
-	findOpenPos();
-	ax = es.word(bx);
-	_cmp(al, 255);
-	if (flags.z())
-		goto canplace3;
-	swapWithOpen();
-	return;
-canplace3:
-	_cmp(data.byte(kPickup), 1);
-	if (flags.z())
-		goto intoopen;
-	blank();
-	return;
-intoopen:
-	al = data.byte(kItemframe);
-	ah = data.byte(kObjecttype);
-	_cmp(ax, data.word(kOldsubject));
-	if (!flags.z())
-		goto difsub2;
-	_cmp(data.byte(kCommandtype), 227);
-	if (flags.z())
-		goto alreadyplc2;
-	data.byte(kCommandtype) = 227;
-difsub2:
-	data.word(kOldsubject) = ax;
-	bx = ax;
-	al = 35;
-	commandWithOb();
-alreadyplc2:
-	ax = data.word(kMousebutton);
-	_cmp(ax, data.word(kOldbutton));
-	if (flags.z())
-		return /* (notletgo3) */;
-	_cmp(ax, 1);
-	if (flags.z())
-		goto doplace2;
-	return;
-doplace2:
-	getEitherAd();
-	isItWorn();
-	if (!flags.z())
-		goto notworntoopen;
-	wornError();
-	return;
-notworntoopen:
-	delPointer();
-	al = data.byte(kItemframe);
-	_cmp(al, data.byte(kOpenedob));
-	if (!flags.z())
-		goto isntsame;
-	al = data.byte(kObjecttype);
-	_cmp(al, data.byte(kOpenedtype));
-	if (!flags.z())
-		goto isntsame;
-	errorMessage1();
-	return;
-isntsame:
-	checkObjectSize();
-	_cmp(al, 0);
-	if (flags.z())
-		goto sizeok1;
-	return;
-sizeok1:
-	data.byte(kPickup) = 0;
-	al = data.byte(kItemframe);
-	getEitherAd();
-	al = data.byte(kOpenedtype);
-	es.byte(bx+2) = al;
-	al = data.byte(kOpenedob);
-	es.byte(bx+3) = al;
-	al = data.byte(kLastinvpos);
-	es.byte(bx+4) = al;
-	al = data.byte(kReallocation);
-	es.byte(bx+5) = al;
-	fillOpen();
-	underTextLine();
-	readMouse();
-	useOpened();
-	showPointer();
-	workToScreen();
-	delPointer();
-}
-
 void DreamGenContext::outOfOpen() {
 	STACK_CHECK;
 	_cmp(data.byte(kOpenedob), 255);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index ffefa0d..3ddf858 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -469,7 +469,6 @@ public:
 	void findAllOpen();
 	void fillOpen();
 	void getEitherAd();
-	void useOpened();
 	void swapWithOpen();
 	void dreamweb();
 	void findPathOfPoint();
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 9d81825..8399c6f 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -834,4 +834,72 @@ void DreamGenContext::reExFromInv() {
 	data.byte(kPointermode) = 0;
 }
 
+void DreamGenContext::useOpened() {
+	if (data.byte(kOpenedob) == 255)
+		return;	// cannot use opened object
+
+	if (!data.byte(kPickup)) {
+		outOfOpen();
+		return;
+	}
+
+	findOpenPos();
+	ax = es.word(bx);
+
+	if (al != 255) {
+		swapWithOpen();
+		return;
+	}
+
+	if (data.byte(kPickup) != 1) {
+		blank();
+		return;
+	}
+
+	uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
+	if (subject == data.word(kOldsubject)) {
+		if (data.byte(kCommandtype) != 227) {
+			data.byte(kCommandtype) = 227;
+			data.word(kOldsubject) = subject;
+			commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe));
+		}
+	} else {
+		data.word(kOldsubject) = subject;
+		commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe));
+	}
+
+	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;
+
+	data.byte(kPickup) = 0;
+	DynObject *object = getEitherAdCPP();
+	object->mapad[0] = data.byte(kOpenedtype);
+	object->mapad[1] = data.byte(kOpenedob);
+	object->mapad[2] = data.byte(kLastinvpos);
+	object->mapad[3] = data.byte(kReallocation);
+	fillOpen();
+	underTextLine();
+	readMouse();
+	useOpened();
+	showPointer();
+	workToScreenCPP();
+	delPointer();
+}
+
 } // End of namespace DreamGen
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index a4fcbf7..4ba8cd6 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -195,5 +195,6 @@
 	void selectLocation();
 	void reExFromInv();
 	void locationPic();
+	void useOpened();
 
 #endif






More information about the Scummvm-git-logs mailing list