[Scummvm-cvs-logs] scummvm master -> 10e163761223b919533ad8ff71d05f90001d6fb8

wjp wjp at usecode.org
Sat Dec 17 23:17:22 CET 2011


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

Summary:
5958d2d29a DREAMWEB: Name some DynObject/SetObject fields
b0a42f115e DREAMWEB: Use serializer for ReelRoutines
46caa77164 DREAMWEB: Add disabled reelRoutine conversion work
30089ec315 DREAMWEB: Convert clearBuffers, clearChanges
10e1637612 DREAMWEB: Fix regressions in findExObject, findSetObject


Commit: 5958d2d29af136a7adcbc4dc2abbb8ee5e0fcbba
    https://github.com/scummvm/scummvm/commit/5958d2d29af136a7adcbc4dc2abbb8ee5e0fcbba
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-17T12:02:31-08:00

Commit Message:
DREAMWEB: Name some DynObject/SetObject fields

Also change getAnyAd() behaviour to be consistent between Free/Ex and
Set objects, diverging from the original.

Changed paths:
    engines/dreamweb/object.cpp
    engines/dreamweb/structs.h
    engines/dreamweb/stubs.cpp



diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 5bdfc07..e4abac1 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -311,11 +311,11 @@ byte DreamGenContext::getOpenedSizeCPP() {
 	byte obj = data.byte(kOpenedob);
 	switch (data.byte(kOpenedtype)) {
 	case 4:
-		return getExAd(obj)->b8;
+		return getExAd(obj)->slotCount;
 	case 2:
-		return getFreeAd(obj)->b8;
+		return getFreeAd(obj)->slotCount;
 	default:
-		return getSetAd(obj)->b4;
+		return getSetAd(obj)->slotCount;
 	}
 }
 
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 30962a2..28c462e 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -76,8 +76,8 @@ struct SetObject {
 	uint8 b0;
 	uint8 b1;
 	uint8 b2;
-	uint8 b3;
-	uint8 b4;
+	uint8 slotSize;
+	uint8 slotCount;
 	uint8 priority;
 	uint8 b6;
 	uint8 delay;
@@ -125,8 +125,8 @@ struct DynObject {
 	uint8 currentLocation;
 	uint8 index;
 	uint8 mapad[5];
-	uint8 b7;
-	uint8 b8;
+	uint8 slotSize;
+	uint8 slotCount;
 	uint8 b9;
 	uint8 b10;
 	uint8 initialLocation;
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 21d1038..1ba8840 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1363,18 +1363,22 @@ DynObject *DreamBase::getEitherAdCPP() {
 void *DreamBase::getAnyAd(uint8 *value1, uint8 *value2) {
 	if (data.byte(kObjecttype) == 4) {
 		DynObject *exObject = getExAd(data.byte(kCommand));
-		*value1 = exObject->b7;
-		*value2 = exObject->b8;
+		*value1 = exObject->slotSize;
+		*value2 = exObject->slotCount;
 		return exObject;
 	} else if (data.byte(kObjecttype) == 2) {
 		DynObject *freeObject = getFreeAd(data.byte(kCommand));
-		*value1 = freeObject->b7;
-		*value2 = freeObject->b8;
+		*value1 = freeObject->slotSize;
+		*value2 = freeObject->slotCount;
 		return freeObject;
 	} else {
 		SetObject *setObject = getSetAd(data.byte(kCommand));
-		*value1 = setObject->b4;
-		*value2 = setObject->priority;
+		// Note: the original returned slotCount/priority (bytes 4 and 5)
+		// instead of slotSize/slotCount (bytes 3 and 4).
+		// Changed this for consistency with the Ex/Free cases, and also
+		// with getOpenedSize()
+		*value1 = setObject->slotSize;
+		*value2 = setObject->slotCount;
 		return setObject;
 	}
 }


Commit: b0a42f115eb8333cb6f25eb713324ef778822bce
    https://github.com/scummvm/scummvm/commit/b0a42f115eb8333cb6f25eb713324ef778822bce
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-17T12:30:54-08:00

Commit Message:
DREAMWEB: Use serializer for ReelRoutines

Changed paths:
    engines/dreamweb/saveload.cpp



diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index c77c419..a47afde 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -25,12 +25,25 @@
 #include "gui/saveload.h"
 #include "common/config-manager.h"
 #include "common/translation.h"
+#include "common/serializer.h"
 
 namespace DreamGen {
 
 // Temporary storage for loading the room from a savegame
 Room g_madeUpRoomDat;
 
+
+void syncReelRoutine(Common::Serializer &s, ReelRoutine *reel) {
+	s.syncAsByte(reel->reallocation);
+	s.syncAsByte(reel->mapX);
+	s.syncAsByte(reel->mapY);
+	s.syncAsByte(reel->b3);
+	s.syncAsByte(reel->b4);
+	s.syncAsByte(reel->period);
+	s.syncAsByte(reel->counter);
+	s.syncAsByte(reel->b7);
+}
+
 void DreamGenContext::loadGame() {
 	if (data.byte(kCommandtype) != 246) {
 		data.byte(kCommandtype) = 246;
@@ -405,6 +418,11 @@ void DreamGenContext::savePosition(unsigned int slot, const char *descbuf) {
 	outSaveFile->write((const uint8 *)&madeUpRoom, sizeof(Room));
 	outSaveFile->write(data.ptr(kRoomscango, 16), 16);
 
+	// TODO: Convert more to serializer?
+	Common::Serializer s(0, outSaveFile);
+	for (unsigned int i = 0; 8*i < kLenofreelrouts; ++i) {
+		syncReelRoutine(s, (ReelRoutine*)data.ptr(kReelroutines + 8*i, 8));
+	}
 	outSaveFile->write(data.ptr(kReelroutines, len[5]), len[5]);
 
 	outSaveFile->finalize();
@@ -454,7 +472,11 @@ void DreamGenContext::loadPosition(unsigned int slot) {
 	inSaveFile->read((uint8 *)&g_madeUpRoomDat, sizeof(Room));
 	inSaveFile->read(data.ptr(kRoomscango, 16), 16);
 
-	inSaveFile->read(data.ptr(kReelroutines, len[5]), len[5]);
+	// TODO: Use serializer for more
+	Common::Serializer s(inSaveFile, 0);
+	for (unsigned int i = 0; 8*i < kLenofreelrouts; ++i) {
+		syncReelRoutine(s, (ReelRoutine*)data.ptr(kReelroutines + 8*i, 8));
+	}
 
 	delete inSaveFile;
 }


Commit: 46caa771640a37339a0b2e1ed7774d9f894fdc68
    https://github.com/scummvm/scummvm/commit/46caa771640a37339a0b2e1ed7774d9f894fdc68
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-17T13:28:54-08:00

Commit Message:
DREAMWEB: Add disabled reelRoutine conversion work

Changed paths:
    engines/dreamweb/people.cpp
    engines/dreamweb/saveload.cpp
    engines/dreamweb/structs.h



diff --git a/engines/dreamweb/people.cpp b/engines/dreamweb/people.cpp
index e8446f0..af92d07 100644
--- a/engines/dreamweb/people.cpp
+++ b/engines/dreamweb/people.cpp
@@ -56,6 +56,85 @@ static void (DreamGenContext::*reelCallbacks[57])(ReelRoutine &) = {
 	&DreamBase::carParkDrip
 };
 
+#if 0
+// TODO: Enable this when the ReelRoutine list has been moved out of the
+// data segment, all ReelCallbacks are in DreamBase, and the
+// ReelRoutine::reelPointer field is a real member.
+// See also struct ReelRoutine, clearBuffers, clearChanges, syncReelRoutine
+
+static const ReelRoutine g_initialReelRoutines[] = {
+// Room number and x,y
+// reel pointer
+// speed,speed count,convers. no.
+	{ 1,44,0, 20, 2,0,1 },
+	{ 1,55,0, 0, 50,20,0 },
+	{ 24,22,0, 74, 1,0,0 },
+	{ 24,33,10, 75, 1,0,1 },
+	{ 1,44,0, 27, 2,0,2 },
+	{ 1,44,0, 96, 3,0,4 },
+	{ 1,44,0, 118, 2,0,5 },
+	{ 1,44,10, 0, 2,0,0 },
+	{ 5,22,20, 53, 3,0,0 },
+	{ 5,22,20, 40, 1,0,2 },
+	{ 5,22,20, 50, 1,0,3 },
+	{ 2,11,10, 192, 1,0,0 },
+	{ 2,11,10, 182, 2,0,1 },
+	{ 8,11,10, 0, 2,0,1 },
+	{ 23,0,50, 0, 3,0,0 },
+	{ 28,11,20, 250, 4,0,0 },
+	{ 23,0,50, 43, 2,0,8 },
+	{ 23,11,40, 130, 2,0,1 },
+	{ 23,22,40, 122, 2,0,2 },
+	{ 23,22,40, 105, 2,0,3 },
+	{ 23,22,40, 81, 2,0,4 },
+	{ 23,11,40, 135, 2,0,5 },
+	{ 23,22,40, 145, 2,0,6 },
+	{ 4,22,30, 0, 2,0,0 },
+	{ 45,22,30, 200, 0,0,20 },
+	{ 45,22,30, 39, 2,0,0 },
+	{ 45,22,30, 25, 2,0,0 },
+	{ 8,22,40, 32, 2,0,0 },
+	{ 7,11,20, 64, 2,0,0 },
+	{ 22,22,20, 82, 2,0,0 },
+	{ 27,11,30, 0, 2,0,0 },
+	{ 20,0,30, 0, 2,0,0 },
+	{ 14,33,40, 21, 1,0,0 },
+	{ 29,11,10, 0, 1,0,0 },
+	{ 2,22,0, 2, 2,0,0 },
+	{ 25,0,50, 4, 2,0,0 },
+	{ 50,22,30, 121, 2,0,0 },
+	{ 50,22,30, 0, 20,0,0 },
+	{ 52,22,30, 192, 2,0,0 },
+	{ 52,22,30, 233, 2,0,0 },
+	{ 50,22,40, 104, 55,0,0 }, // ...., 65,0,0 for German CD
+	{ 53,33,0, 99, 2,0,0 },
+	{ 50,22,40, 0, 3,0,0 },
+	{ 50,22,30, 162, 2,0,0 },
+	{ 52,22,30, 57, 2,0,0 },
+	{ 52,22,30, 0, 2,0,0 },
+	{ 54,0,0, 72, 3,0,0 },
+	{ 55,44,0, 0, 2,0,0 },
+	{ 19,0,0, 0, 28,0,0 },
+	{ 14,22,0, 2, 2,0,0 },
+	{ 14,22,0, 300, 1,0,0 },
+	{ 10,22,30, 174, 0,0,0 },
+	{ 12,22,20, 0, 1,0,0 },
+	{ 11,11,20, 0, 50,20,0 },
+	{ 11,11,30, 0, 50,20,0 },
+	{ 11,22,20, 0, 50,20,0 },
+	{ 14,33,40, 0, 50,20,0 },
+	{ 255,0,0, 0, 0,0,0 }
+};
+
+void DreamBase::setupInitialReelRoutines(ReelRoutine *dest) {
+	for (unsigned int i = 0; i < ARRAYSIZE(g_initialReelRoutines); ++i) {
+		dest[i] = g_initialReelRoutines[i];
+		if (dest[i].period == 55 && isCD() && engine->getLanguage() == Common::DE_DEU)
+			dest[i].period = 65;
+	}
+}
+#endif
+
 void DreamGenContext::updatePeople() {
 	data.word(kListpos) = kPeoplelist;
 	memset(getSegment(data.word(kBuffers)).ptr(kPeoplelist, 12 * sizeof(People)), 0xff, 12 * sizeof(People));
diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index a47afde..9cf3ea2 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -37,8 +37,12 @@ void syncReelRoutine(Common::Serializer &s, ReelRoutine *reel) {
 	s.syncAsByte(reel->reallocation);
 	s.syncAsByte(reel->mapX);
 	s.syncAsByte(reel->mapY);
+#if 1
 	s.syncAsByte(reel->b3);
 	s.syncAsByte(reel->b4);
+#else
+	s.syncAsUint16LE(reel->_reelPointer);
+#endif
 	s.syncAsByte(reel->period);
 	s.syncAsByte(reel->counter);
 	s.syncAsByte(reel->b7);
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 28c462e..709a3d2 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -168,11 +168,18 @@ struct ReelRoutine {
 	uint8 reallocation;
 	uint8 mapX;
 	uint8 mapY;
+#if 0
+	uint16 _reelPointer;
+	uint16 reelPointer() const { return _reelPointer; }
+	void setReelPointer(uint16 v) { _reelPointer = v; }
+	void incReelPointer() { _reelPointer++; }
+#else
 	uint8 b3;
 	uint8 b4;
 	uint16 reelPointer() const { return READ_LE_UINT16(&b3); }
 	void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b3, v); }
 	void incReelPointer() { setReelPointer(reelPointer() + 1); }
+#endif
 	uint8 period;
 	uint8 counter;
 	uint8 b7;


Commit: 30089ec31504c862d4ad4317075af600d38a79a8
    https://github.com/scummvm/scummvm/commit/30089ec31504c862d4ad4317075af600d38a79a8
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-17T13:28:54-08:00

Commit Message:
DREAMWEB: Convert clearBuffers, clearChanges

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



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index cbc0001..30a6ea3 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -305,6 +305,8 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'checkspeed',
 	'chewy',
 	'clearbeforeload',
+	'clearbuffers',
+	'clearchanges',
 	'clearendpal',
 	'clearpalette',
 	'clearreels',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index 7c86696..06936ca 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -390,6 +390,8 @@ public:
 	void getTime();
 	void doChange(uint8 index, uint8 value, uint8 type);
 	bool isRyanHolding(const char *id);
+	void clearBuffers();
+	void clearChanges();
 
 	// from use.cpp
 	void placeFreeObject(uint8 index);
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index ea4d8e5..3c3abe9 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2593,73 +2593,6 @@ gotkeyp:
 	showDiaryPage();
 }
 
-void DreamGenContext::clearBuffers() {
-	STACK_CHECK;
-	es = data.word(kBuffers);
-	cx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+898-441+68-0)/2;
-	ax = 0;
-	di = 0;
-	_stosw(cx, true);
-	es = data.word(kExtras);
-	cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2;
-	ax = 0x0ffff;
-	di = 0;
-	_stosw(cx, true);
-	es = data.word(kBuffers);
-	di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64));
-	ds = cs;
-	si = 441;
-	cx = (898-441);
-	_movsb(cx, true);
-	es = data.word(kBuffers);
-	di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+898-441);
-	ds = cs;
-	si = 0;
-	cx = (68-0);
-	_movsb(cx, true);
-	clearChanges();
-}
-
-void DreamGenContext::clearChanges() {
-	STACK_CHECK;
-	es = data.word(kBuffers);
-	cx = (250)*2;
-	ax = 0x0ffff;
-	di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80));
-	_stosw(cx, true);
-	ds = data.word(kBuffers);
-	si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64));
-	es = cs;
-	di = 441;
-	cx = (898-441);
-	_movsb(cx, true);
-	ds = data.word(kBuffers);
-	si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+898-441);
-	es = cs;
-	di = 0;
-	cx = (68-0);
-	_movsb(cx, true);
-	data.byte(kExpos) = 0;
-	data.word(kExframepos) = 0;
-	data.word(kExtextpos) = 0;
-	es = data.word(kExtras);
-	cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2;
-	ax = 0x0ffff;
-	di = 0;
-	_stosw(cx, true);
-	es = cs;
-	di = 1120;
-	al = 1;
-	_stosb(2);
-	al = 0;
-	_stosb();
-	al = 1;
-	_stosb();
-	ax = 0;
-	cx = 6;
-	_stosw(cx, true);
-}
-
 void DreamGenContext::findPathOfPoint() {
 	STACK_CHECK;
 	push(ax);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index f610055..98bab1b 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -471,7 +471,6 @@ public:
 
 	void fadeDownMon();
 	void getPersonText();
-	void clearBuffers();
 	void getObTextStart();
 	void checkObjectSize();
 	void fillOpen();
@@ -522,7 +521,6 @@ public:
 	void searchForString();
 	void selectOpenOb();
 	void incRyanPage();
-	void clearChanges();
 	void searchForFiles();
 	void getExAd();
 	void initialMonCols();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 1ba8840..eea38eb 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -4593,4 +4593,39 @@ void DreamGenContext::showSlots() {
 	}
 }
 
+void DreamBase::clearBuffers() {
+	memset(getSegment(data.word(kBuffers)).ptr(0, kLengthofbuffer), 0, kLengthofbuffer);
+
+	memset(getSegment(data.word(kExtras)).ptr(0, kLengthofextra), 0xFF, kLengthofextra);
+
+	// TODO: Remove this line 
+	// (once the ReelRoutines are no longer in the data segment)
+	memcpy(getSegment(data.word(kBuffers)).ptr(kInitialreelrouts, kLenofreelrouts), data.ptr(kReelroutines, kLenofreelrouts), kLenofreelrouts);
+
+	memcpy(getSegment(data.word(kBuffers)).ptr(kInitialvars, kLengthofvars), data.ptr(kStartvars, kLengthofvars), kLengthofvars);
+
+	clearChanges();
+}
+
+void DreamBase::clearChanges() {
+	memset(getSegment(data.word(kBuffers)).ptr(kListofchanges, 4*kNumchanges), 0xFF, 4*kNumchanges);
+
+	// TODO: Call setupInitialReelRoutines instead
+	// (once the ReelRoutines are no longer in the data segment)
+	memcpy(data.ptr(kReelroutines, kLenofreelrouts), getSegment(data.word(kBuffers)).ptr(kInitialreelrouts, kLenofreelrouts), kLenofreelrouts);
+
+	memcpy(data.ptr(kStartvars, kLengthofvars), getSegment(data.word(kBuffers)).ptr(kInitialvars, kLengthofvars), kLengthofvars);
+
+	data.byte(kExpos) = 0;
+	data.word(kExframepos) = 0;
+	data.word(kExtextpos) = 0;
+
+	memset(getSegment(data.word(kExtras)).ptr(0, kLengthofextra), 0xFF, kLengthofextra);
+
+	const uint8 initialRoomsCanGo[] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+	memcpy(data.ptr(kRoomscango, 16), initialRoomsCanGo, 16);
+}
+
+
 } // End of namespace DreamGen


Commit: 10e163761223b919533ad8ff71d05f90001d6fb8
    https://github.com/scummvm/scummvm/commit/10e163761223b919533ad8ff71d05f90001d6fb8
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-17T14:16:36-08:00

Commit Message:
DREAMWEB: Fix regressions in findExObject, findSetObject

Changed paths:
    engines/dreamweb/stubs.cpp



diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index eea38eb..7f1824d 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1745,6 +1745,7 @@ void DreamGenContext::findSetObject() {
 	id[3] = ch;
 	id[4] = '\0';
 	al = findSetObject(id);
+	es = data.word(kSetdat);
 	bx = al * 64;
 }
 
@@ -1765,7 +1766,8 @@ void DreamGenContext::findExObject() {
 	id[3] = ch;
 	id[4] = '\0';
 	al = findExObject(id);
-	bx = al * 16;
+	es = data.word(kExtras);
+	bx = kExdata + al * 16;
 }
 
 uint16 DreamGenContext::findExObject(const char *id) {






More information about the Scummvm-git-logs mailing list