[Scummvm-cvs-logs] scummvm master -> bf4271dfc116fa6f4b4245051e2d6a391f1d850c

bluegr md5 at scummvm.org
Sun Dec 25 16:55:03 CET 2011


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
c531c4c1ea DREAMWEB: Port 'swapwithinv' to C++
bf4271dfc1 DREAMWEB: Port 'swapwithopen' to C++


Commit: c531c4c1eafbf66a3724df0f3cb7b9ad8da97a8d
    https://github.com/scummvm/scummvm/commit/c531c4c1eafbf66a3724df0f3cb7b9ad8da97a8d
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-25T07:32:56-08:00

Commit Message:
DREAMWEB: Port 'swapwithinv' 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 84c1648..3b8d188 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -859,6 +859,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'startup1',
 	'steady',
 	'storeit',
+	'swapwithinv',
 	'switchryanoff',
 	'switchryanon',
 	'talk',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 4d89322..1afca17 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -284,66 +284,6 @@ findopen2a:
 		goto findopen1a;
 }
 
-void DreamGenContext::swapWithInv() {
-	STACK_CHECK;
-	al = data.byte(kItemframe);
-	ah = data.byte(kObjecttype);
-	_cmp(ax, data.word(kOldsubject));
-	if (!flags.z())
-		goto difsub7;
-	_cmp(data.byte(kCommandtype), 243);
-	if (flags.z())
-		goto alreadyswap1;
-	data.byte(kCommandtype) = 243;
-difsub7:
-	data.word(kOldsubject) = ax;
-	bx = ax;
-	al = 34;
-	commandWithOb();
-alreadyswap1:
-	ax = data.word(kMousebutton);
-	_cmp(ax, data.word(kOldbutton));
-	if (flags.z())
-		return /* (cantswap1) */;
-	_and(ax, 1);
-	if (!flags.z())
-		goto doswap1;
-	return;
-doswap1:
-	ah = data.byte(kObjecttype);
-	al = data.byte(kItemframe);
-	push(ax);
-	findInvPos();
-	ax = es.word(bx);
-	data.byte(kItemframe) = al;
-	data.byte(kObjecttype) = ah;
-	getEitherAd();
-	es.byte(bx+2) = 20;
-	es.byte(bx+3) = 255;
-	bl = data.byte(kItemframe);
-	bh = data.byte(kObjecttype);
-	ax = pop();
-	data.byte(kObjecttype) = ah;
-	data.byte(kItemframe) = al;
-	push(bx);
-	findInvPos();
-	delPointer();
-	al = data.byte(kItemframe);
-	getEitherAd();
-	es.byte(bx+2) = 4;
-	es.byte(bx+3) = 255;
-	al = data.byte(kLastinvpos);
-	es.byte(bx+4) = al;
-	ax = pop();
-	data.byte(kObjecttype) = ah;
-	data.byte(kItemframe) = al;
-	fillRyan();
-	readMouse();
-	showPointer();
-	workToScreen();
-	delPointer();
-}
-
 void DreamGenContext::swapWithOpen() {
 	STACK_CHECK;
 	al = data.byte(kItemframe);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 3ddf858..2590125 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -477,7 +477,6 @@ public:
 	void searchForString();
 	void searchForFiles();
 	void getExAd();
-	void swapWithInv();
 	void transferToEx();
 	void parser();
 	void emergencyPurge();
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 8399c6f..9eb31f4 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -902,4 +902,47 @@ void DreamGenContext::useOpened() {
 	delPointer();
 }
 
+void DreamGenContext::swapWithInv() {
+	uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
+	if (subject == data.word(kOldsubject)) {
+		if (data.byte(kCommandtype) != 243) {
+			data.byte(kCommandtype) = 243;
+			data.word(kOldsubject) = subject;
+			commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
+		}
+	} else {
+		data.word(kOldsubject) = subject;
+		commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
+	}
+
+	if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
+		return;
+
+	byte prevType = data.byte(kObjecttype);
+	byte prevFrame = data.byte(kItemframe);
+	uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP());
+	data.byte(kItemframe)  = objectId & 0x00FF;
+	data.byte(kObjecttype) = objectId >> 8;
+	DynObject *object = getEitherAdCPP();
+	object->mapad[0] = 20;
+	object->mapad[1] = 255;
+	byte prevType2 = data.byte(kObjecttype);
+	byte prevFrame2 = data.byte(kItemframe);
+	data.byte(kObjecttype) = prevType;
+	data.byte(kItemframe) = prevFrame;
+	//findInvPosCPP();	// found in the original source, but it seems to be useless
+	delPointer();
+	object = getEitherAdCPP();
+	object->mapad[0] = 4;
+	object->mapad[1] = 255;
+	object->mapad[2] = data.byte(kLastinvpos);
+	data.byte(kObjecttype) = prevType2;
+	data.byte(kItemframe) = prevFrame2;
+	fillRyan();
+	readMouse();
+	showPointer();
+	workToScreenCPP();
+	delPointer();
+}
+
 } // End of namespace DreamGen
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 4ba8cd6..2ac944b 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -196,5 +196,6 @@
 	void reExFromInv();
 	void locationPic();
 	void useOpened();
+	void swapWithInv();
 
 #endif


Commit: bf4271dfc116fa6f4b4245051e2d6a391f1d850c
    https://github.com/scummvm/scummvm/commit/bf4271dfc116fa6f4b4245051e2d6a391f1d850c
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-25T07:54:22-08:00

Commit Message:
DREAMWEB: Port 'swapwithopen' 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 3b8d188..c06f583 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -860,6 +860,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'steady',
 	'storeit',
 	'swapwithinv',
+	'swapwithopen',
 	'switchryanoff',
 	'switchryanon',
 	'talk',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 1afca17..d68bd3b 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -284,108 +284,6 @@ findopen2a:
 		goto findopen1a;
 }
 
-void DreamGenContext::swapWithOpen() {
-	STACK_CHECK;
-	al = data.byte(kItemframe);
-	ah = data.byte(kObjecttype);
-	_cmp(ax, data.word(kOldsubject));
-	if (!flags.z())
-		goto difsub8;
-	_cmp(data.byte(kCommandtype), 242);
-	if (flags.z())
-		goto alreadyswap2;
-	data.byte(kCommandtype) = 242;
-difsub8:
-	data.word(kOldsubject) = ax;
-	bx = ax;
-	al = 34;
-	commandWithOb();
-alreadyswap2:
-	ax = data.word(kMousebutton);
-	_cmp(ax, data.word(kOldbutton));
-	if (flags.z())
-		return /* (cantswap2) */;
-	_and(ax, 1);
-	if (!flags.z())
-		goto doswap2;
-	return;
-doswap2:
-	getEitherAd();
-	isItWorn();
-	if (!flags.z())
-		goto notwornswap;
-	wornError();
-	return;
-notwornswap:
-	delPointer();
-	al = data.byte(kItemframe);
-	_cmp(al, data.byte(kOpenedob));
-	if (!flags.z())
-		goto isntsame2;
-	al = data.byte(kObjecttype);
-	_cmp(al, data.byte(kOpenedtype));
-	if (!flags.z())
-		goto isntsame2;
-	errorMessage1();
-	return;
-isntsame2:
-	checkObjectSize();
-	_cmp(al, 0);
-	if (flags.z())
-		goto sizeok2;
-	return;
-sizeok2:
-	ah = data.byte(kObjecttype);
-	al = data.byte(kItemframe);
-	push(ax);
-	findOpenPos();
-	ax = es.word(bx);
-	data.byte(kItemframe) = al;
-	data.byte(kObjecttype) = ah;
-	_cmp(ah, 4);
-	if (!flags.z())
-		goto makeswapex;
-	getEitherAd();
-	es.byte(bx+2) = 20;
-	es.byte(bx+3) = 255;
-	goto actuallyswap;
-makeswapex:
-	transferToEx();
-	data.byte(kItemframe) = al;
-	data.byte(kObjecttype) = 4;
-	getEitherAd();
-	es.byte(bx+2) = 20;
-	es.byte(bx+3) = 255;
-actuallyswap:
-	bl = data.byte(kItemframe);
-	bh = data.byte(kObjecttype);
-	ax = pop();
-	data.byte(kObjecttype) = ah;
-	data.byte(kItemframe) = al;
-	push(bx);
-	findOpenPos();
-	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;
-	ax = pop();
-	data.byte(kObjecttype) = ah;
-	data.byte(kItemframe) = al;
-	fillOpen();
-	fillRyan();
-	underTextLine();
-	readMouse();
-	useOpened();
-	showPointer();
-	workToScreen();
-	delPointer();
-}
-
 void DreamGenContext::getFreeAd() {
 	STACK_CHECK;
 	ah = 0;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 2590125..f585c6a 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -469,7 +469,6 @@ public:
 	void findAllOpen();
 	void fillOpen();
 	void getEitherAd();
-	void swapWithOpen();
 	void dreamweb();
 	void findPathOfPoint();
 	void getDestInfo();
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 9eb31f4..6546f19 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -834,6 +834,49 @@ void DreamGenContext::reExFromInv() {
 	data.byte(kPointermode) = 0;
 }
 
+void DreamGenContext::swapWithInv() {
+	uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
+	if (subject == data.word(kOldsubject)) {
+		if (data.byte(kCommandtype) != 243) {
+			data.byte(kCommandtype) = 243;
+			data.word(kOldsubject) = subject;
+			commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
+		}
+	} else {
+		data.word(kOldsubject) = subject;
+		commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
+	}
+
+	if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
+		return;
+
+	byte prevType = data.byte(kObjecttype);
+	byte prevFrame = data.byte(kItemframe);
+	uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP());
+	data.byte(kItemframe)  = objectId & 0x00FF;
+	data.byte(kObjecttype) = objectId >> 8;
+	DynObject *object = getEitherAdCPP();
+	object->mapad[0] = 20;
+	object->mapad[1] = 255;
+	byte prevType2 = data.byte(kObjecttype);
+	byte prevFrame2 = data.byte(kItemframe);
+	data.byte(kObjecttype) = prevType;
+	data.byte(kItemframe) = prevFrame;
+	//findInvPosCPP();	// found in the original source, but it seems to be useless
+	delPointer();
+	object = getEitherAdCPP();
+	object->mapad[0] = 4;
+	object->mapad[1] = 255;
+	object->mapad[2] = data.byte(kLastinvpos);
+	data.byte(kObjecttype) = prevType2;
+	data.byte(kItemframe) = prevFrame2;
+	fillRyan();
+	readMouse();
+	showPointer();
+	workToScreenCPP();
+	delPointer();
+}
+
 void DreamGenContext::useOpened() {
 	if (data.byte(kOpenedob) == 255)
 		return;	// cannot use opened object
@@ -902,11 +945,11 @@ void DreamGenContext::useOpened() {
 	delPointer();
 }
 
-void DreamGenContext::swapWithInv() {
+void DreamGenContext::swapWithOpen() {
 	uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
 	if (subject == data.word(kOldsubject)) {
-		if (data.byte(kCommandtype) != 243) {
-			data.byte(kCommandtype) = 243;
+		if (data.byte(kCommandtype) != 242) {
+			data.byte(kCommandtype) = 242;
 			data.word(kOldsubject) = subject;
 			commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe));
 		}
@@ -918,28 +961,56 @@ void DreamGenContext::swapWithInv() {
 	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;
+
 	byte prevType = data.byte(kObjecttype);
 	byte prevFrame = data.byte(kItemframe);
-	uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP());
-	data.byte(kItemframe)  = objectId & 0x00FF;
-	data.byte(kObjecttype) = objectId >> 8;
+	findOpenPos();
+	ax = es.word(bx);
+	data.byte(kItemframe) = al;
+	data.byte(kObjecttype) = ah;
+
+	if (data.byte(kObjecttype) != 4) {
+		transferToEx();
+		data.byte(kItemframe) = al;
+		data.byte(kObjecttype) = 4;
+	}
+
 	DynObject *object = getEitherAdCPP();
 	object->mapad[0] = 20;
 	object->mapad[1] = 255;
+
 	byte prevType2 = data.byte(kObjecttype);
 	byte prevFrame2 = data.byte(kItemframe);
 	data.byte(kObjecttype) = prevType;
 	data.byte(kItemframe) = prevFrame;
-	//findInvPosCPP();	// found in the original source, but it seems to be useless
-	delPointer();
+	findOpenPos();
 	object = getEitherAdCPP();
-	object->mapad[0] = 4;
-	object->mapad[1] = 255;
+	object->mapad[0] = data.byte(kOpenedtype);
+	object->mapad[1] = data.byte(kOpenedob);
 	object->mapad[2] = data.byte(kLastinvpos);
+	object->mapad[3] = data.byte(kReallocation);
 	data.byte(kObjecttype) = prevType2;
 	data.byte(kItemframe) = prevFrame2;
+	fillOpen();
 	fillRyan();
+	underTextLine();
 	readMouse();
+	useOpened();
 	showPointer();
 	workToScreenCPP();
 	delPointer();
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 2ac944b..0cdd68f 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -196,6 +196,7 @@
 	void reExFromInv();
 	void locationPic();
 	void useOpened();
+	void swapWithOpen();
 	void swapWithInv();
 
 #endif






More information about the Scummvm-git-logs mailing list