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

tramboi bertrand_augereau at yahoo.fr
Thu Aug 18 17:15:18 CEST 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:
efe76ac494 DREAMWEB: 'getposition' ported to C++


Commit: efe76ac494e23f94a7a320fe0f7e31cab8225020
    https://github.com/scummvm/scummvm/commit/efe76ac494e23f94a7a320fe0f7e31cab8225020
Author: Bertrand Augereau (bertrand_augereau at yahoo.fr)
Date: 2011-08-18T08:11:24-07:00

Commit Message:
DREAMWEB: 'getposition' ported to C++

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



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 0c89f53..e14388a 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -118,6 +118,9 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'doorway',
 	'widedoor',
 	'showallobs',
+	'addalong',
+	'addlength',
+	'getdimension',
 	'getxad',
 	'getyad',
 	'getmapad',
diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp
index 708a544..be957bf 100644
--- a/engines/dreamweb/backdrop.cpp
+++ b/engines/dreamweb/backdrop.cpp
@@ -172,5 +172,61 @@ void DreamGenContext::showallobs() {
 	}
 }
 
+void DreamGenContext::getdimension()
+{
+	uint8 mapXstart, mapYstart;
+	uint8 mapXsize, mapYsize;
+	getdimension(&mapXstart, &mapYstart, &mapXsize, &mapYsize);
+	cl = mapXstart;
+	ch = mapYstart;
+	dl = mapXsize;
+	dh = mapYsize;
+}
+
+bool DreamGenContext::addalong(const uint8 *mapFlags) {
+	for (size_t i = 0; i < 11; ++i) {
+		if (mapFlags[3 * i] != 0)
+			return true;
+	}
+	return false;
+}
+
+bool DreamGenContext::addlength(const uint8 *mapFlags) {
+	for (size_t i = 0; i < 10; ++i) {
+		if (mapFlags[3 * 11 * i] != 0)
+			return true;
+	}
+	return false;
+}
+
+void DreamGenContext::getdimension(uint8 *mapXstart, uint8 *mapYstart, uint8 *mapXsize, uint8 *mapYsize) {
+	const uint8 *mapFlags = segRef(data.word(kBuffers)).ptr(kMapflags, 0);
+
+	uint8 yStart = 0;
+	while (! addalong(mapFlags + 3 * 11 * yStart))
+		++yStart;
+
+	uint8 xStart = 0;
+	while (! addlength(mapFlags + 3 * xStart))
+		++xStart;
+
+	uint8 yEnd = 10;
+	while (! addalong(mapFlags + 3 * 11 * (yEnd - 1)))
+		--yEnd;
+
+	uint8 xEnd = 11;
+	while (! addlength(mapFlags + 3 * (xEnd - 1)))
+		--xEnd;
+
+	*mapXstart = xStart;
+	*mapYstart = yStart;
+	*mapXsize = xEnd - xStart;
+	*mapYsize = yEnd - yStart;
+	data.word(kMapxstart) = xStart << 4;
+	data.word(kMapystart) = yStart << 4;
+	data.byte(kMapxsize) = *mapXsize << 4;
+	data.byte(kMapysize) = *mapYsize << 4;
+}
+
 } /*namespace dreamgen */
 
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 4c69c21..75794bd 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -6428,124 +6428,6 @@ void DreamGenContext::calcmapad() {
 	data.word(kMapady) = ax;
 }
 
-void DreamGenContext::getdimension() {
-	STACK_CHECK;
-	es = data.word(kBuffers);
-	bx = (0+(228*13)+32+60+(32*32));
-	ch = 0;
-dimloop1:
-	addalong();
-	_cmp(al, 0);
-	if (!flags.z())
-		goto finishdim1;
-	_inc(ch);
-	goto dimloop1;
-finishdim1:
-	bx = (0+(228*13)+32+60+(32*32));
-	cl = 0;
-dimloop2:
-	push(bx);
-	addlength();
-	bx = pop();
-	_cmp(al, 0);
-	if (!flags.z())
-		goto finishdim2;
-	_inc(cl);
-	_add(bx, 3);
-	goto dimloop2;
-finishdim2:
-	bx = (0+(228*13)+32+60+(32*32))+(11*3*9);
-	dh = 10;
-dimloop3:
-	push(bx);
-	addalong();
-	bx = pop();
-	_cmp(al, 0);
-	if (!flags.z())
-		goto finishdim3;
-	_dec(dh);
-	_sub(bx, 11*3);
-	goto dimloop3;
-finishdim3:
-	bx = (0+(228*13)+32+60+(32*32))+(3*10);
-	dl = 11;
-dimloop4:
-	push(bx);
-	addlength();
-	bx = pop();
-	_cmp(al, 0);
-	if (!flags.z())
-		goto finishdim4;
-	_dec(dl);
-	_sub(bx, 3);
-	goto dimloop4;
-finishdim4:
-	al = cl;
-	ah = 0;
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	data.word(kMapxstart) = ax;
-	al = ch;
-	ah = 0;
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	data.word(kMapystart) = ax;
-	_sub(dl, cl);
-	_sub(dh, ch);
-	al = dl;
-	ah = 0;
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	data.byte(kMapxsize) = al;
-	al = dh;
-	ah = 0;
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	_shl(ax, 1);
-	data.byte(kMapysize) = al;
-}
-
-void DreamGenContext::addalong() {
-	STACK_CHECK;
-	ah = 11;
-addloop:
-	_cmp(es.byte(bx), 0);
-	if (!flags.z())
-		goto gotalong;
-	_add(bx, 3);
-	_dec(ah);
-	if (!flags.z())
-		goto addloop;
-	al = 0;
-	return;
-gotalong:
-	al = 1;
-}
-
-void DreamGenContext::addlength() {
-	STACK_CHECK;
-	ah = 10;
-addloop2:
-	_cmp(es.byte(bx), 0);
-	if (!flags.z())
-		goto gotlength;
-	_add(bx, 3*11);
-	_dec(ah);
-	if (!flags.z())
-		goto addloop2;
-	al = 0;
-	return;
-gotlength:
-	al = 1;
-}
-
 void DreamGenContext::drawflags() {
 	STACK_CHECK;
 	es = data.word(kBuffers);
@@ -18770,9 +18652,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
 		case addr_blockget: blockget(); break;
 		case addr_drawfloor: drawfloor(); break;
 		case addr_calcmapad: calcmapad(); break;
-		case addr_getdimension: getdimension(); break;
-		case addr_addalong: addalong(); break;
-		case addr_addlength: addlength(); break;
 		case addr_drawflags: drawflags(); break;
 		case addr_showallfree: showallfree(); break;
 		case addr_showallex: showallex(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index efa9b42..f466504 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -480,9 +480,6 @@ public:
 	static const uint16 addr_showallex = 0xc450;
 	static const uint16 addr_showallfree = 0xc44c;
 	static const uint16 addr_drawflags = 0xc43c;
-	static const uint16 addr_addlength = 0xc438;
-	static const uint16 addr_addalong = 0xc434;
-	static const uint16 addr_getdimension = 0xc430;
 	static const uint16 addr_calcmapad = 0xc42c;
 	static const uint16 addr_drawfloor = 0xc428;
 	static const uint16 addr_blockget = 0xc424;
@@ -1365,7 +1362,7 @@ public:
 	//void frameoutv();
 	void opensarters();
 	void screenupdate();
-	void addlength();
+	//void addlength();
 	void wornerror();
 	void putundercentre();
 	void checkobjectsize();
@@ -1820,7 +1817,7 @@ public:
 	//void copyname();
 	void look();
 	void setmouse();
-	void checkone();
+	//void getdimension();
 	void transferinv();
 	void candles2();
 	void pickupob();
@@ -1896,7 +1893,7 @@ public:
 	void grafittidoor();
 	void input();
 	void nextdest();
-	void getdimension();
+	void checkone();
 	void makecaps();
 	void read();
 	void fadescreenups();
@@ -1943,7 +1940,7 @@ public:
 	void usecharset1();
 	//void makenextblock();
 	void showpuztext();
-	void addalong();
+	//void addalong();
 	//void width160();
 	void incryanpage();
 	//void dodoor();
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 710ebf9..adca64f 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -132,6 +132,10 @@
 	void madmantext();
 	void madmode();
 	void movemap(uint8 param);
+	bool addalong(const uint8 *mapFlags);
+	bool addlength(const uint8 *mapFlags);
+	void getdimension();
+	void getdimension(uint8 *mapXstart, uint8 *mapYstart, uint8 *mapXsize, uint8 *mapYsize);
 	void getmapad();
 	uint8 getmapad(const uint8 *setData);
 	uint8 getxad(const uint8 *setData, uint8 *result);






More information about the Scummvm-git-logs mailing list