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

wjp wjp at usecode.org
Mon Dec 26 20:04:24 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:
6f85de6b6e DREAMWEB: Combine transferMap and transferInv
cb3eee8635 DREAMWEB: Reduce dependency on globals and move functions to DreamBase


Commit: 6f85de6b6e9b2af820d0294db16881d41368d693
    https://github.com/scummvm/scummvm/commit/6f85de6b6e9b2af820d0294db16881d41368d693
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-26T11:03:52-08:00

Commit Message:
DREAMWEB: Combine transferMap and transferInv

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.h
    engines/dreamweb/vgagrafx.cpp



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index dc2874f..e551338 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -212,6 +212,7 @@ p = parser(skip_binary_data = [
 	'timer3to',
 	'oldsubject',
 	'buffers',
+	'itemtotran',
 	# vgagrafx.asm
 	'cityname',
 	'extragraphics1',
@@ -919,6 +920,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'train',
 	'transfercontoex',
 	'transferinv',
+	'transfermap',
 	'transfertext',
 	'transfertoex',
 	'trapdoor',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index b134159..ef08738 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -221,6 +221,7 @@ public:
 	ObjectRef findInvPos();
 	void reExFromInv();
 	void swapWithInv();
+	void transferText(uint8 from, uint8 to);
 
 	// from pathfind.cpp
 	void turnPathOn(uint8 param);
@@ -726,7 +727,7 @@ public:
 	void panelToMap();
 	void mapToPanel();
 	void dumpMap();
-	void transferInv();
+	void transferFrame(uint8 from, uint8 to, uint8 offset);
 	void zoom();
 	void multiGet(uint8 *dst, uint16 x, uint16 y, uint8 width, uint8 height);
 	void multiPut(const uint8 *src, uint16 x, uint16 y, uint8 width, uint8 height);
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 356ebc8..a0e2555 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -26,53 +26,6 @@
 
 namespace DreamGen {
 
-void DreamGenContext::transferMap() {
-	STACK_CHECK;
-	di = data.word(kExframepos);
-	push(di);
-	al = data.byte(kExpos);
-	ah = 0;
-	bx = ax;
-	_add(ax, ax);
-	_add(ax, bx);
-	cx = 6;
-	_mul(cx);
-	es = data.word(kExtras);
-	bx = (0);
-	_add(bx, ax);
-	_add(di, (0+2080));
-	push(bx);
-	al = data.byte(kItemtotran);
-	ah = 0;
-	bx = ax;
-	_add(ax, ax);
-	_add(ax, bx);
-	cx = 6;
-	_mul(cx);
-	ds = data.word(kFreeframes);
-	bx = (0);
-	_add(bx, ax);
-	si = (0+2080);
-	al = ds.byte(bx);
-	ah = 0;
-	cl = ds.byte(bx+1);
-	ch = 0;
-	_add(si, ds.word(bx+2));
-	dx = ds.word(bx+4);
-	bx = pop();
-	es.byte(bx+0) = al;
-	es.byte(bx+1) = cl;
-	es.word(bx+4) = dx;
-	_mul(cx);
-	cx = ax;
-	push(cx);
-	_movsb(cx, true);
-	cx = pop();
-	ax = pop();
-	es.word(bx+2) = ax;
-	_add(data.word(kExframepos), cx);
-}
-
 void DreamGenContext::read() {
 	STACK_CHECK;
 	cx = 40;
@@ -85,7 +38,7 @@ void DreamGenContext::read() {
 	return;
 okcom:
 	es = cs;
-	di = 418;
+	di = 417;
 	ax = data.word(kTextfile1);
 	data.word(kMonsource) = ax;
 	ds = ax;
@@ -215,7 +168,7 @@ keyok2:
 	ds = cs;
 	si = offset_operand1+1;
 	es = cs;
-	di = 418+1;
+	di = 417+1;
 	cx = 12;
 	_movsb(cx, true);
 	monitorLogo();
@@ -297,7 +250,7 @@ void DreamGenContext::parser() {
 	al = '=';
 	_stosb();
 	ds = cs;
-	si = 493;
+	si = 492;
 notspace1:
 	_lodsw();
 	_cmp(al, 32);
@@ -341,18 +294,18 @@ void DreamGenContext::__start() {
 		//0x0050: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x0060: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0070: .... .h.& .... ....
+		0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		//0x0070: .... h.&. .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x0080: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 
 		//0x0090: .... .... .... ....
-		0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x00a0: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x00b0: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x00c0: ....   .. .... ....
+		0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		//0x00c0: ...   ... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x00d0: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -365,26 +318,26 @@ void DreamGenContext::__start() {
 		//0x0110: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x0120: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 
 		//0x0130: .... .... .... ....
 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 		//0x0140: .... .... .... ....
 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 		//0x0150: .... .... .... ....
-		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x0160: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 
 		//0x0170: .... .... .... ....
-		0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 
-		//0x0180: .... ...D REAM WEB.
-		0x56, 0x39, 0x39, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
-		//0x0190: V99.               
-		0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 
-		//0x01a0:  ."               .
-		0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 
-		//0x01b0: .... $... .... ....
-		0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 
-		//0x01c0: .... .... .... .D:.
+		0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 
+		//0x0180: .... ..DR EAMW EB.V
+		0x39, 0x39, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+		//0x0190: 99.                
+		0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0d, 
+		//0x01a0: ."               ..
+		0x0a, 0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		//0x01b0: ...$ .... .... ....
+		0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 
+		//0x01c0: .... .... .... D:..
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x01d0: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -403,9 +356,7 @@ void DreamGenContext::__start() {
 		//0x0240: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 		//0x0250: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0260: .... .... .... ....
-		};
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
 	ds.assign(src, src + sizeof(src));
 	dreamweb(); 
 }
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 0c61a60..492a8b3 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -32,7 +32,7 @@
 
 namespace DreamGen {
 
-static const uint16 offset_operand1 = 0x0194;
+static const uint16 offset_operand1 = 0x0193;
 static const uint16 kStartvars = 0;
 static const uint16 kProgresspoints = 1;
 static const uint16 kWatchon = 2;
@@ -104,225 +104,224 @@ static const uint16 kLastxpos = 82;
 static const uint16 kIcontop = 84;
 static const uint16 kIconleft = 86;
 static const uint16 kItemframe = 88;
-static const uint16 kItemtotran = 89;
-static const uint16 kRoomad = 90;
-static const uint16 kWithobject = 92;
-static const uint16 kWithtype = 93;
-static const uint16 kLookcounter = 94;
-static const uint16 kCommand = 96;
-static const uint16 kCommandtype = 97;
-static const uint16 kOldcommandtype = 98;
-static const uint16 kObjecttype = 99;
-static const uint16 kGetback = 100;
-static const uint16 kInvopen = 101;
-static const uint16 kMainmode = 102;
-static const uint16 kPickup = 103;
-static const uint16 kLastinvpos = 104;
-static const uint16 kExamagain = 105;
-static const uint16 kNewtextline = 106;
-static const uint16 kOpenedob = 107;
-static const uint16 kOpenedtype = 108;
-static const uint16 kOldmapadx = 109;
-static const uint16 kOldmapady = 111;
-static const uint16 kMapadx = 113;
-static const uint16 kMapady = 115;
-static const uint16 kMapoffsetx = 117;
-static const uint16 kMapoffsety = 119;
-static const uint16 kMapxstart = 121;
-static const uint16 kMapystart = 123;
-static const uint16 kMapxsize = 125;
-static const uint16 kMapysize = 126;
-static const uint16 kHavedoneobs = 127;
-static const uint16 kManisoffscreen = 128;
-static const uint16 kRainspace = 129;
-static const uint16 kFacing = 130;
-static const uint16 kLeavedirection = 131;
-static const uint16 kTurntoface = 132;
-static const uint16 kTurndirection = 133;
-static const uint16 kMaintimer = 134;
-static const uint16 kIntrocount = 136;
-static const uint16 kArrowad = 137;
-static const uint16 kCurrentkey = 139;
-static const uint16 kOldkey = 140;
-static const uint16 kUseddirection = 141;
-static const uint16 kTimercount = 142;
-static const uint16 kOldtimercount = 143;
-static const uint16 kMapx = 144;
-static const uint16 kMapy = 145;
-static const uint16 kNewscreen = 146;
-static const uint16 kRyanx = 147;
-static const uint16 kRyany = 148;
-static const uint16 kLastflag = 149;
-static const uint16 kOffsetx = 150;
-static const uint16 kOffsety = 152;
-static const uint16 kCurrentob = 154;
-static const uint16 kDestpos = 155;
-static const uint16 kReallocation = 156;
-static const uint16 kRoomnum = 157;
-static const uint16 kNowinnewroom = 158;
-static const uint16 kResetmanxy = 159;
-static const uint16 kNewlocation = 160;
-static const uint16 kAutolocation = 161;
-static const uint16 kDoorcheck1 = 162;
-static const uint16 kDoorcheck2 = 163;
-static const uint16 kDoorcheck3 = 164;
-static const uint16 kDoorcheck4 = 165;
-static const uint16 kMousex = 166;
-static const uint16 kMousey = 168;
-static const uint16 kMousebutton = 170;
-static const uint16 kMousebutton1 = 172;
-static const uint16 kMousebutton2 = 174;
-static const uint16 kMousebutton3 = 176;
-static const uint16 kMousebutton4 = 178;
-static const uint16 kOldbutton = 180;
-static const uint16 kOldx = 182;
-static const uint16 kOldy = 184;
-static const uint16 kLastbutton = 186;
-static const uint16 kOldpointerx = 188;
-static const uint16 kOldpointery = 190;
-static const uint16 kDelherex = 192;
-static const uint16 kDelherey = 194;
-static const uint16 kPointerxs = 196;
-static const uint16 kPointerys = 197;
-static const uint16 kDelxs = 198;
-static const uint16 kDelys = 199;
-static const uint16 kPointerframe = 200;
-static const uint16 kPointerpower = 201;
-static const uint16 kAuxpointerframe = 202;
-static const uint16 kPointermode = 203;
-static const uint16 kPointerspeed = 204;
-static const uint16 kPointercount = 205;
-static const uint16 kInmaparea = 206;
-static const uint16 kTalkmode = 207;
-static const uint16 kTalkpos = 208;
-static const uint16 kCharacter = 209;
-static const uint16 kWatchdump = 210;
-static const uint16 kLogonum = 211;
-static const uint16 kOldlogonum = 212;
-static const uint16 kNetseg = 213;
-static const uint16 kNetpoint = 215;
-static const uint16 kCursorstate = 217;
-static const uint16 kPressed = 218;
-static const uint16 kPresspointer = 219;
-static const uint16 kGraphicpress = 221;
-static const uint16 kPresscount = 222;
-static const uint16 kLightcount = 223;
-static const uint16 kFolderpage = 224;
-static const uint16 kDiarypage = 225;
-static const uint16 kMenucount = 226;
-static const uint16 kSymboltopx = 227;
-static const uint16 kSymboltopnum = 228;
-static const uint16 kSymboltopdir = 229;
-static const uint16 kSymbolbotx = 230;
-static const uint16 kSymbolbotnum = 231;
-static const uint16 kSymbolbotdir = 232;
-static const uint16 kSymboltolight = 233;
-static const uint16 kSymbol1 = 234;
-static const uint16 kSymbol2 = 235;
-static const uint16 kSymbol3 = 236;
-static const uint16 kSymbolnum = 237;
-static const uint16 kDumpx = 238;
-static const uint16 kDumpy = 240;
-static const uint16 kWalkandexam = 242;
-static const uint16 kWalkexamtype = 243;
-static const uint16 kWalkexamnum = 244;
-static const uint16 kCurslocx = 245;
-static const uint16 kCurslocy = 247;
-static const uint16 kCurpos = 249;
-static const uint16 kMonadx = 251;
-static const uint16 kMonady = 253;
-static const uint16 kMonsource = 255;
-static const uint16 kNumtodo = 257;
-static const uint16 kTimecount = 259;
-static const uint16 kCounttotimed = 261;
-static const uint16 kTimedseg = 263;
-static const uint16 kTimedoffset = 265;
-static const uint16 kTimedy = 267;
-static const uint16 kTimedx = 268;
-static const uint16 kNeedtodumptimed = 269;
-static const uint16 kLoadingorsave = 270;
-static const uint16 kCurrentslot = 271;
-static const uint16 kCursorpos = 272;
-static const uint16 kColourpos = 273;
-static const uint16 kFadedirection = 274;
-static const uint16 kNumtofade = 275;
-static const uint16 kFadecount = 276;
-static const uint16 kAddtogreen = 277;
-static const uint16 kAddtored = 278;
-static const uint16 kAddtoblue = 279;
-static const uint16 kLastsoundreel = 280;
-static const uint16 kSpeechloaded = 282;
-static const uint16 kSpeechlength = 283;
-static const uint16 kVolume = 285;
-static const uint16 kVolumeto = 286;
-static const uint16 kVolumedirection = 287;
-static const uint16 kVolumecount = 288;
-static const uint16 kWongame = 289;
-static const uint16 kLasthardkey = 290;
-static const uint16 kBufferin = 291;
-static const uint16 kBufferout = 293;
-static const uint16 kExtras = 295;
-static const uint16 kWorkspace = 297;
-static const uint16 kMapstore = 299;
-static const uint16 kCharset1 = 301;
-static const uint16 kMainsprites = 303;
-static const uint16 kBackdrop = 305;
-static const uint16 kMapdata = 307;
-static const uint16 kSounddata = 309;
-static const uint16 kSounddata2 = 311;
-static const uint16 kRecordspace = 313;
-static const uint16 kFreedat = 315;
-static const uint16 kSetdat = 317;
-static const uint16 kReel1 = 319;
-static const uint16 kReel2 = 321;
-static const uint16 kReel3 = 323;
-static const uint16 kRoomdesc = 325;
-static const uint16 kFreedesc = 327;
-static const uint16 kSetdesc = 329;
-static const uint16 kBlockdesc = 331;
-static const uint16 kSetframes = 333;
-static const uint16 kFreeframes = 335;
-static const uint16 kPeople = 337;
-static const uint16 kReels = 339;
-static const uint16 kCommandtext = 341;
-static const uint16 kPuzzletext = 343;
-static const uint16 kTraveltext = 345;
-static const uint16 kTempgraphics = 347;
-static const uint16 kTempgraphics2 = 349;
-static const uint16 kTempgraphics3 = 351;
-static const uint16 kTempsprites = 353;
-static const uint16 kTextfile1 = 355;
-static const uint16 kTextfile2 = 357;
-static const uint16 kTextfile3 = 359;
-static const uint16 kBlinkframe = 361;
-static const uint16 kBlinkcount = 362;
-static const uint16 kReasseschanges = 363;
-static const uint16 kPointerspath = 364;
-static const uint16 kManspath = 365;
-static const uint16 kPointerfirstpath = 366;
-static const uint16 kFinaldest = 367;
-static const uint16 kDestination = 368;
-static const uint16 kLinestartx = 369;
-static const uint16 kLinestarty = 371;
-static const uint16 kLineendx = 373;
-static const uint16 kLineendy = 375;
-static const uint16 kLinepointer = 377;
-static const uint16 kLinedirection = 378;
-static const uint16 kLinelength = 379;
-static const uint16 kCh0blockstocopy = 380;
-static const uint16 kCh0playing = 382;
-static const uint16 kCh0repeat = 383;
-static const uint16 kCh1playing = 384;
-static const uint16 kCh1blockstocopy = 385;
-static const uint16 kSoundbufferwrite = 387;
-static const uint16 kCurrentsample = 389;
-static const uint16 kRoomssample = 390;
-static const uint16 kBasicsample = 391;
-static const uint16 kCurrentfile = 418;
-static const uint16 kInputline = 493;
-static const uint16 kQuitrequested = 621;
-static const uint16 kSubtitles = 622;
-static const uint16 kForeignrelease = 623;
+static const uint16 kRoomad = 89;
+static const uint16 kWithobject = 91;
+static const uint16 kWithtype = 92;
+static const uint16 kLookcounter = 93;
+static const uint16 kCommand = 95;
+static const uint16 kCommandtype = 96;
+static const uint16 kOldcommandtype = 97;
+static const uint16 kObjecttype = 98;
+static const uint16 kGetback = 99;
+static const uint16 kInvopen = 100;
+static const uint16 kMainmode = 101;
+static const uint16 kPickup = 102;
+static const uint16 kLastinvpos = 103;
+static const uint16 kExamagain = 104;
+static const uint16 kNewtextline = 105;
+static const uint16 kOpenedob = 106;
+static const uint16 kOpenedtype = 107;
+static const uint16 kOldmapadx = 108;
+static const uint16 kOldmapady = 110;
+static const uint16 kMapadx = 112;
+static const uint16 kMapady = 114;
+static const uint16 kMapoffsetx = 116;
+static const uint16 kMapoffsety = 118;
+static const uint16 kMapxstart = 120;
+static const uint16 kMapystart = 122;
+static const uint16 kMapxsize = 124;
+static const uint16 kMapysize = 125;
+static const uint16 kHavedoneobs = 126;
+static const uint16 kManisoffscreen = 127;
+static const uint16 kRainspace = 128;
+static const uint16 kFacing = 129;
+static const uint16 kLeavedirection = 130;
+static const uint16 kTurntoface = 131;
+static const uint16 kTurndirection = 132;
+static const uint16 kMaintimer = 133;
+static const uint16 kIntrocount = 135;
+static const uint16 kArrowad = 136;
+static const uint16 kCurrentkey = 138;
+static const uint16 kOldkey = 139;
+static const uint16 kUseddirection = 140;
+static const uint16 kTimercount = 141;
+static const uint16 kOldtimercount = 142;
+static const uint16 kMapx = 143;
+static const uint16 kMapy = 144;
+static const uint16 kNewscreen = 145;
+static const uint16 kRyanx = 146;
+static const uint16 kRyany = 147;
+static const uint16 kLastflag = 148;
+static const uint16 kOffsetx = 149;
+static const uint16 kOffsety = 151;
+static const uint16 kCurrentob = 153;
+static const uint16 kDestpos = 154;
+static const uint16 kReallocation = 155;
+static const uint16 kRoomnum = 156;
+static const uint16 kNowinnewroom = 157;
+static const uint16 kResetmanxy = 158;
+static const uint16 kNewlocation = 159;
+static const uint16 kAutolocation = 160;
+static const uint16 kDoorcheck1 = 161;
+static const uint16 kDoorcheck2 = 162;
+static const uint16 kDoorcheck3 = 163;
+static const uint16 kDoorcheck4 = 164;
+static const uint16 kMousex = 165;
+static const uint16 kMousey = 167;
+static const uint16 kMousebutton = 169;
+static const uint16 kMousebutton1 = 171;
+static const uint16 kMousebutton2 = 173;
+static const uint16 kMousebutton3 = 175;
+static const uint16 kMousebutton4 = 177;
+static const uint16 kOldbutton = 179;
+static const uint16 kOldx = 181;
+static const uint16 kOldy = 183;
+static const uint16 kLastbutton = 185;
+static const uint16 kOldpointerx = 187;
+static const uint16 kOldpointery = 189;
+static const uint16 kDelherex = 191;
+static const uint16 kDelherey = 193;
+static const uint16 kPointerxs = 195;
+static const uint16 kPointerys = 196;
+static const uint16 kDelxs = 197;
+static const uint16 kDelys = 198;
+static const uint16 kPointerframe = 199;
+static const uint16 kPointerpower = 200;
+static const uint16 kAuxpointerframe = 201;
+static const uint16 kPointermode = 202;
+static const uint16 kPointerspeed = 203;
+static const uint16 kPointercount = 204;
+static const uint16 kInmaparea = 205;
+static const uint16 kTalkmode = 206;
+static const uint16 kTalkpos = 207;
+static const uint16 kCharacter = 208;
+static const uint16 kWatchdump = 209;
+static const uint16 kLogonum = 210;
+static const uint16 kOldlogonum = 211;
+static const uint16 kNetseg = 212;
+static const uint16 kNetpoint = 214;
+static const uint16 kCursorstate = 216;
+static const uint16 kPressed = 217;
+static const uint16 kPresspointer = 218;
+static const uint16 kGraphicpress = 220;
+static const uint16 kPresscount = 221;
+static const uint16 kLightcount = 222;
+static const uint16 kFolderpage = 223;
+static const uint16 kDiarypage = 224;
+static const uint16 kMenucount = 225;
+static const uint16 kSymboltopx = 226;
+static const uint16 kSymboltopnum = 227;
+static const uint16 kSymboltopdir = 228;
+static const uint16 kSymbolbotx = 229;
+static const uint16 kSymbolbotnum = 230;
+static const uint16 kSymbolbotdir = 231;
+static const uint16 kSymboltolight = 232;
+static const uint16 kSymbol1 = 233;
+static const uint16 kSymbol2 = 234;
+static const uint16 kSymbol3 = 235;
+static const uint16 kSymbolnum = 236;
+static const uint16 kDumpx = 237;
+static const uint16 kDumpy = 239;
+static const uint16 kWalkandexam = 241;
+static const uint16 kWalkexamtype = 242;
+static const uint16 kWalkexamnum = 243;
+static const uint16 kCurslocx = 244;
+static const uint16 kCurslocy = 246;
+static const uint16 kCurpos = 248;
+static const uint16 kMonadx = 250;
+static const uint16 kMonady = 252;
+static const uint16 kMonsource = 254;
+static const uint16 kNumtodo = 256;
+static const uint16 kTimecount = 258;
+static const uint16 kCounttotimed = 260;
+static const uint16 kTimedseg = 262;
+static const uint16 kTimedoffset = 264;
+static const uint16 kTimedy = 266;
+static const uint16 kTimedx = 267;
+static const uint16 kNeedtodumptimed = 268;
+static const uint16 kLoadingorsave = 269;
+static const uint16 kCurrentslot = 270;
+static const uint16 kCursorpos = 271;
+static const uint16 kColourpos = 272;
+static const uint16 kFadedirection = 273;
+static const uint16 kNumtofade = 274;
+static const uint16 kFadecount = 275;
+static const uint16 kAddtogreen = 276;
+static const uint16 kAddtored = 277;
+static const uint16 kAddtoblue = 278;
+static const uint16 kLastsoundreel = 279;
+static const uint16 kSpeechloaded = 281;
+static const uint16 kSpeechlength = 282;
+static const uint16 kVolume = 284;
+static const uint16 kVolumeto = 285;
+static const uint16 kVolumedirection = 286;
+static const uint16 kVolumecount = 287;
+static const uint16 kWongame = 288;
+static const uint16 kLasthardkey = 289;
+static const uint16 kBufferin = 290;
+static const uint16 kBufferout = 292;
+static const uint16 kExtras = 294;
+static const uint16 kWorkspace = 296;
+static const uint16 kMapstore = 298;
+static const uint16 kCharset1 = 300;
+static const uint16 kMainsprites = 302;
+static const uint16 kBackdrop = 304;
+static const uint16 kMapdata = 306;
+static const uint16 kSounddata = 308;
+static const uint16 kSounddata2 = 310;
+static const uint16 kRecordspace = 312;
+static const uint16 kFreedat = 314;
+static const uint16 kSetdat = 316;
+static const uint16 kReel1 = 318;
+static const uint16 kReel2 = 320;
+static const uint16 kReel3 = 322;
+static const uint16 kRoomdesc = 324;
+static const uint16 kFreedesc = 326;
+static const uint16 kSetdesc = 328;
+static const uint16 kBlockdesc = 330;
+static const uint16 kSetframes = 332;
+static const uint16 kFreeframes = 334;
+static const uint16 kPeople = 336;
+static const uint16 kReels = 338;
+static const uint16 kCommandtext = 340;
+static const uint16 kPuzzletext = 342;
+static const uint16 kTraveltext = 344;
+static const uint16 kTempgraphics = 346;
+static const uint16 kTempgraphics2 = 348;
+static const uint16 kTempgraphics3 = 350;
+static const uint16 kTempsprites = 352;
+static const uint16 kTextfile1 = 354;
+static const uint16 kTextfile2 = 356;
+static const uint16 kTextfile3 = 358;
+static const uint16 kBlinkframe = 360;
+static const uint16 kBlinkcount = 361;
+static const uint16 kReasseschanges = 362;
+static const uint16 kPointerspath = 363;
+static const uint16 kManspath = 364;
+static const uint16 kPointerfirstpath = 365;
+static const uint16 kFinaldest = 366;
+static const uint16 kDestination = 367;
+static const uint16 kLinestartx = 368;
+static const uint16 kLinestarty = 370;
+static const uint16 kLineendx = 372;
+static const uint16 kLineendy = 374;
+static const uint16 kLinepointer = 376;
+static const uint16 kLinedirection = 377;
+static const uint16 kLinelength = 378;
+static const uint16 kCh0blockstocopy = 379;
+static const uint16 kCh0playing = 381;
+static const uint16 kCh0repeat = 382;
+static const uint16 kCh1playing = 383;
+static const uint16 kCh1blockstocopy = 384;
+static const uint16 kSoundbufferwrite = 386;
+static const uint16 kCurrentsample = 388;
+static const uint16 kRoomssample = 389;
+static const uint16 kBasicsample = 390;
+static const uint16 kCurrentfile = 417;
+static const uint16 kInputline = 492;
+static const uint16 kQuitrequested = 620;
+static const uint16 kSubtitles = 621;
+static const uint16 kForeignrelease = 622;
 static const uint16 kBlocktextdat = (0);
 static const uint16 kPersonframes = (0);
 static const uint16 kDebuglevel1 = (0);
@@ -425,7 +424,6 @@ public:
 #include "stubs.h" // Allow hand-reversed functions to have a signature different than void f()
 
 	void dirFile();
-	void transferMap();
 	void dreamweb();
 	void read();
 	void searchForString();
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 9799ca4..0f0599b 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -255,10 +255,11 @@ void DreamGenContext::inventory() {
 	examineOb(false);
 }
 
-void DreamGenContext::transferText() {
-	getSegment(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos);
-	uint16 freeTextOffset = data.byte(kItemtotran) * 2;
+void DreamBase::transferText(uint8 from, uint8 to) {
+	getSegment(data.word(kExtras)).word(kExtextdat + 2*to) = data.word(kExtextpos);
+	uint16 freeTextOffset = 2*from;
 	uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset);
+
 	const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0);
 	char *dst = (char *)getSegment(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0);
 
@@ -1012,23 +1013,29 @@ ObjectRef DreamBase::findOpenPos() {
 
 byte DreamGenContext::transferToEx() {
 	emergencyPurge();
+
 	DynObject *exObject = getExPos(); // Also sets es:di
 	byte pos = data.byte(kExpos);
+
 	DynObject *freeObject = getFreeAd(data.byte(kItemframe));
+
 	memcpy(exObject, freeObject, sizeof(DynObject));
+
 	exObject->currentLocation = data.byte(kReallocation);
 	exObject->initialLocation = data.byte(kReallocation);
 	exObject->index = data.byte(kItemframe);
 	exObject->mapad[0] = 4;
 	exObject->mapad[1] = 255;
 	exObject->mapad[2] = data.byte(kLastinvpos);
-	data.byte(kItemtotran) = data.byte(kItemframe);
-	transferMap();
-	transferInv();
-	transferText();
-	freeObject = getFreeAd(data.byte(kItemframe));
+
+	transferFrame(data.byte(kItemframe), pos, 0);
+	transferFrame(data.byte(kItemframe), pos, 1);
+	transferText(data.byte(kItemframe), pos);
+
 	freeObject->mapad[0] = 254;
+
 	pickupConts();
+
 	return pos;
 }
 
@@ -1084,14 +1091,13 @@ void DreamGenContext::pickupConts() {
 
 	uint8 expos = data.byte(kExpos);
 
-	for (uint16 index = 0; index < 80; ++index) {
+	for (uint8 index = 0; index < 80; ++index) {
 		DynObject *freeObj = getFreeAd(index);
 
 		if (freeObj->mapad[0] != data.byte(kObjecttype))
 			continue;
 		if (freeObj->mapad[1] != data.byte(kItemframe))
 			continue;
-		data.byte(kItemtotran) = index;
 
 		DynObject *exObj = getExPos(); // Also sets es:di to exObj
 
@@ -1102,9 +1108,9 @@ void DreamGenContext::pickupConts() {
 		exObj->mapad[0] = 4; // kExObjectType?
 		exObj->mapad[1] = expos;
 
-		transferMap();
-		transferInv();
-		transferText();
+		transferFrame(index, data.byte(kExpos), 0);
+		transferFrame(index, data.byte(kExpos), 1);
+		transferText(index, data.byte(kExpos));
 
 		freeObj->mapad[0] = 0xFF;
 	}
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 8bdc0b1..0c62abd 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -75,7 +75,6 @@
 	void useRoutine();
 	void examineOb(bool examineAgain = true);
 	void dumpWatch();
-	void transferText();
 	void watchCount();
 	void readSetData();
 	void useMon();
diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp
index ce89711..ecb295a 100644
--- a/engines/dreamweb/vgagrafx.cpp
+++ b/engines/dreamweb/vgagrafx.cpp
@@ -401,23 +401,6 @@ void DreamBase::dumpMap() {
 	multiDump(data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize));
 }
 
-void DreamBase::transferInv() {
-	const Frame *freeFrames = (const Frame *)getSegment(data.word(kFreeframes)).ptr(kFrframedata, 0);
-	const Frame *freeFrame = freeFrames + (3 * data.byte(kItemtotran) + 1);
-	Frame *exFrames = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata, 0);
-	Frame *exFrame = exFrames + (3 * data.byte(kExpos) + 1);
-	exFrame->width = freeFrame->width;
-	exFrame->height = freeFrame->height;
-	exFrame->x = freeFrame->x;
-	exFrame->y = freeFrame->y;
-	uint16 byteCount = freeFrame->width * freeFrame->height;
-	const uint8 *src = getSegment(data.word(kFreeframes)).ptr(kFrframes + freeFrame->ptr(), byteCount);
-	uint8 *dst = getSegment(data.word(kExtras)).ptr(kExframes + data.word(kExframepos), byteCount);
-	memcpy(dst, src, byteCount);
-	exFrame->setPtr(data.word(kExframepos));
-	data.word(kExframepos) += byteCount;
-}
-
 bool DreamBase::pixelCheckSet(const ObjPos *pos, uint8 x, uint8 y) {
 	x -= pos->xMin;
 	y -= pos->yMin;
@@ -466,4 +449,25 @@ void DreamBase::showPanel() {
 	showFrame(engine->icons1(), 192, 0, 19, 0);
 }
 
+void DreamBase::transferFrame(uint8 from, uint8 to, uint8 offset) {
+	const Frame *freeFrames = (const Frame *)getSegment(data.word(kFreeframes)).ptr(kFrframedata, 0);
+	const Frame &freeFrame = freeFrames[3*from + offset];
+
+	Frame *exFrames = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata, 0);
+	Frame &exFrame = exFrames[3*to + offset];
+
+	exFrame.width = freeFrame.width;
+	exFrame.height = freeFrame.height;
+	exFrame.x = freeFrame.x;
+	exFrame.y = freeFrame.y;
+	uint16 byteCount = freeFrame.width * freeFrame.height;
+
+	const uint8 *src = getSegment(data.word(kFreeframes)).ptr(kFrframes + freeFrame.ptr(), byteCount);
+	uint8 *dst = getSegment(data.word(kExtras)).ptr(kExframes + data.word(kExframepos), byteCount);
+	memcpy(dst, src, byteCount);
+
+	exFrame.setPtr(data.word(kExframepos));
+	data.word(kExframepos) += byteCount;
+}
+
 } // End of namespace DreamGen


Commit: cb3eee86358e73251081d0d285ac2303db5aa775
    https://github.com/scummvm/scummvm/commit/cb3eee86358e73251081d0d285ac2303db5aa775
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-12-26T11:03:52-08:00

Commit Message:
DREAMWEB: Reduce dependency on globals and move functions to DreamBase

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



diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index ef08738..3fe00ad 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -222,6 +222,16 @@ public:
 	void reExFromInv();
 	void swapWithInv();
 	void transferText(uint8 from, uint8 to);
+	void pickupConts(uint8 from, uint8 containerEx);
+	byte transferToEx(uint8 from);
+	void swapWithOpen();
+	void outOfOpen();
+	void inToInv();
+	void outOfInv();
+	bool checkObjectSize();
+	void useOpened();
+	void setPickup();
+	void selectOpenOb();
 
 	// from pathfind.cpp
 	void turnPathOn(uint8 param);
@@ -576,6 +586,10 @@ public:
 	void showSymbol();
 	void updateSymbolTop();
 	void updateSymbolBot();
+	void pickupOb(uint8 command, uint8 pos);
+	void errorMessage1();
+	void errorMessage2();
+	void errorMessage3();
 
 	// from talk.cpp
 	void talk();
@@ -600,6 +614,7 @@ public:
 	void loadIntroRoom();
 	void set16ColPalette();
 	void realCredits();
+	uint8 getExPos();
 
 	// from use.cpp
 	void placeFreeObject(uint8 index);
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 0f0599b..4fa21e7 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -163,8 +163,8 @@ void DreamGenContext::examineOb(bool examineAgain) {
 			RectWithCallback<DreamGenContext> examList[] = {
 				{ 273,320,157,198,&DreamBase::getBackFromOb },
 				{ 260,300,0,44,&DreamGenContext::useObject },
-				{ 210,254,0,44,&DreamGenContext::selectOpenOb },
-				{ 144,176,64,96,&DreamGenContext::setPickup },
+				{ 210,254,0,44,&DreamBase::selectOpenOb },
+				{ 144,176,64,96,&DreamBase::setPickup },
 				{ 0,50,50,200,&DreamBase::examineInventory },
 				{ 0,320,0,200,&DreamBase::blank },
 				{ 0xFFFF,0,0,0,0 }
@@ -174,12 +174,12 @@ void DreamGenContext::examineOb(bool examineAgain) {
 		}
 		case 1: {
 			// Note: This table contains the non-constant _openChangeSize!
-			RectWithCallback<DreamGenContext> invList1[] = {
+			RectWithCallback<DreamBase> invList1[] = {
 				{ 273,320,157,198,&DreamBase::getBackFromOb },
-				{ 255,294,0,24,&DreamGenContext::dropObject },
-				{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage },
-				{ kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened },
-				{ kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamGenContext::inToInv },
+				{ 255,294,0,24,&DreamBase::dropObject },
+				{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage },
+				{ kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamBase::useOpened },
+				{ kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamBase::inToInv },
 				{ 0,320,0,200,&DreamBase::blank },
 				{ 0xFFFF,0,0,0,0 }
 			};
@@ -189,7 +189,7 @@ void DreamGenContext::examineOb(bool examineAgain) {
 		default: {
 			RectWithCallback<DreamGenContext> withList1[] = {
 				{ 273,320,157,198,&DreamBase::getBackFromOb },
-				{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage },
+				{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage },
 				{ kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb },
 				{ 0,320,0,200,&DreamBase::blank },
 				{ 0xFFFF,0,0,0,0 }
@@ -383,7 +383,7 @@ void DreamGenContext::selectOb() {
 	useRoutine();
 }
 
-void DreamGenContext::setPickup() {
+void DreamBase::setPickup() {
 	if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) {
 		// Object types 1 and 3 are excluded, so the resulting object is a DynObject
 		uint8 dummy;
@@ -414,9 +414,9 @@ void DreamGenContext::setPickup() {
 	data.byte(kInvopen) = 2;
 
 	if (data.byte(kObjecttype) != kExObjectType) {
-		data.byte(kItemframe) = data.byte(kCommand);
+		assert(data.byte(kObjecttype) == kFreeObjectType);
 		data.byte(kOpenedob) = 255;
-		data.byte(kItemframe) = transferToEx();
+		data.byte(kItemframe) = transferToEx(data.byte(kCommand));
 		data.byte(kObjecttype) = kExObjectType;
 		DynObject *object = getExAd(data.byte(kItemframe));
 		object->mapad[0] = 20;
@@ -502,7 +502,7 @@ void DreamBase::removeObFromInv() {
 	deleteExObject(data.byte(kCommand));
 }
 
-void DreamGenContext::inToInv() {
+void DreamBase::inToInv() {
 	if (!data.byte(kPickup)) {
 		outOfInv();
 		return;
@@ -542,7 +542,7 @@ void DreamGenContext::inToInv() {
 	delPointer();
 }
 
-void DreamGenContext::outOfInv() {
+void DreamBase::outOfInv() {
 	ObjectRef subject = findInvPos();
 
 	if (subject._index == 255) {
@@ -713,7 +713,7 @@ void DreamBase::dropObject() {
 	object->currentLocation = data.byte(kReallocation);
 }
 
-bool DreamGenContext::checkObjectSize() {
+bool DreamBase::checkObjectSize() {
 	byte containerSize = getOpenedSlotSize();
 	DynObject *object = getEitherAdCPP();
 	// If there is no size defined for the object in the editor, set its size
@@ -742,7 +742,7 @@ bool DreamGenContext::checkObjectSize() {
 	return false;
 }
 
-void DreamGenContext::selectOpenOb() {
+void DreamBase::selectOpenOb() {
 	uint8 slotSize, slotCount;
 	getAnyAd(&slotSize, &slotCount);
 	if (slotCount == 255) {
@@ -823,7 +823,7 @@ void DreamBase::swapWithInv() {
 	delPointer();
 }
 
-void DreamGenContext::useOpened() {
+void DreamBase::useOpened() {
 	if (data.byte(kOpenedob) == 255)
 		return;	// cannot use opened object
 
@@ -887,7 +887,7 @@ void DreamGenContext::useOpened() {
 	delPointer();
 }
 
-void DreamGenContext::outOfOpen() {
+void DreamBase::outOfOpen() {
 	if (data.byte(kOpenedob) == 255)
 		return;	// cannot use opened object
 
@@ -921,7 +921,8 @@ void DreamGenContext::outOfOpen() {
 	data.byte(kItemframe) = objectId._index;
 
 	if (data.byte(kObjecttype) != kExObjectType) {
-		data.byte(kItemframe) = transferToEx();
+		assert(objectId._type == kFreeObjectType);
+		data.byte(kItemframe) = transferToEx(objectId._index);
 		data.byte(kObjecttype) = kExObjectType;
 	}
 
@@ -938,7 +939,7 @@ void DreamGenContext::outOfOpen() {
 	delPointer();
 }
 
-void DreamGenContext::swapWithOpen() {
+void DreamBase::swapWithOpen() {
 	ObjectRef subject;
 	subject._type = data.byte(kObjecttype);
 	subject._index = data.byte(kItemframe);
@@ -975,7 +976,8 @@ void DreamGenContext::swapWithOpen() {
 	data.byte(kItemframe)  = objectId._index;
 
 	if (data.byte(kObjecttype) != kExObjectType) {
-		data.byte(kItemframe) = transferToEx();
+		assert(objectId._type == kFreeObjectType);
+		data.byte(kItemframe) = transferToEx(objectId._index);
 		data.byte(kObjecttype) = kExObjectType;
 	}
 
@@ -1011,30 +1013,30 @@ ObjectRef DreamBase::findOpenPos() {
 	return _openInvList[pos];
 }
 
-byte DreamGenContext::transferToEx() {
+byte DreamBase::transferToEx(uint8 from) {
 	emergencyPurge();
 
-	DynObject *exObject = getExPos(); // Also sets es:di
-	byte pos = data.byte(kExpos);
+	byte pos = getExPos();
+	DynObject *exObject = getExAd(pos);
 
-	DynObject *freeObject = getFreeAd(data.byte(kItemframe));
+	DynObject *freeObject = getFreeAd(from);
 
 	memcpy(exObject, freeObject, sizeof(DynObject));
 
 	exObject->currentLocation = data.byte(kReallocation);
 	exObject->initialLocation = data.byte(kReallocation);
-	exObject->index = data.byte(kItemframe);
+	exObject->index = from;
 	exObject->mapad[0] = 4;
 	exObject->mapad[1] = 255;
 	exObject->mapad[2] = data.byte(kLastinvpos);
 
-	transferFrame(data.byte(kItemframe), pos, 0);
-	transferFrame(data.byte(kItemframe), pos, 1);
-	transferText(data.byte(kItemframe), pos);
+	transferFrame(from, pos, 0);
+	transferFrame(from, pos, 1);
+	transferText(from, pos);
 
 	freeObject->mapad[0] = 254;
 
-	pickupConts();
+	pickupConts(from, pos);
 
 	return pos;
 }
@@ -1082,35 +1084,33 @@ void DreamBase::findAllOpen() {
 	}
 }
 
-void DreamGenContext::pickupConts() {
-	assert(data.byte(kObjecttype) == kFreeObjectType);
-	const DynObject *obj = getFreeAd(data.byte(kItemframe));
+void DreamBase::pickupConts(uint8 from, uint8 containerEx) {
+	const DynObject *obj = getFreeAd(from);
 
 	if (obj->slotCount == 255)
 		return; // not openable
 
-	uint8 expos = data.byte(kExpos);
-
 	for (uint8 index = 0; index < 80; ++index) {
 		DynObject *freeObj = getFreeAd(index);
 
-		if (freeObj->mapad[0] != data.byte(kObjecttype))
+		if (freeObj->mapad[0] != kFreeObjectType)
 			continue;
-		if (freeObj->mapad[1] != data.byte(kItemframe))
+		if (freeObj->mapad[1] != from)
 			continue;
 
-		DynObject *exObj = getExPos(); // Also sets es:di to exObj
+		uint8 pos = getExPos();
+		DynObject *exObj = getExAd(pos);
 
 		memcpy(exObj, freeObj, sizeof(DynObject));
 		exObj->currentLocation = data.byte(kReallocation);
 		exObj->initialLocation = data.byte(kReallocation);
 		exObj->index = index;
 		exObj->mapad[0] = 4; // kExObjectType?
-		exObj->mapad[1] = expos;
+		exObj->mapad[1] = containerEx;
 
-		transferFrame(index, data.byte(kExpos), 0);
-		transferFrame(index, data.byte(kExpos), 1);
-		transferText(index, data.byte(kExpos));
+		transferFrame(index, pos, 0);
+		transferFrame(index, pos, 1);
+		transferText(index, pos);
 
 		freeObj->mapad[0] = 0xFF;
 	}
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 9351a01..55e6110 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1364,19 +1364,13 @@ void DreamBase::deleteTaken() {
 	}
 }
 
-DynObject *DreamGenContext::getExPos() {
-	es = data.word(kExtras);
+uint8 DreamBase::getExPos() {
 	DynObject *objects = (DynObject *)getSegment(data.word(kExtras)).ptr(kExdata, sizeof(DynObject));
 	for (size_t i = 0; i < kNumexobjects; ++i) {
-		if (objects[i].mapad[0] == 0xff) {
-			data.byte(kExpos) = i;
-			di = kExdata + i * sizeof(DynObject);
-			return &objects[i];
-		}
+		if (objects[i].mapad[0] == 0xff)
+			return i;
 	}
-	data.byte(kExpos) = kNumexobjects;
-	di = kExdata + kNumexobjects * sizeof(DynObject);
-	return 0;
+	error("Out of Ex object positions");
 }
 
 void DreamBase::placeSetObject(uint8 index) {
@@ -2717,14 +2711,14 @@ void DreamBase::newGame() {
 		data.byte(kGetback) = 3;
 }
 
-void DreamGenContext::pickupOb(uint8 command, uint8 pos) {
+void DreamBase::pickupOb(uint8 command, uint8 pos) {
 	data.byte(kLastinvpos) = pos;
 	data.byte(kObjecttype) = kFreeObjectType;
 	data.byte(kItemframe) = command;
 	data.byte(kCommand) = command;
 	//uint8 dummy;
 	//getAnyAd(&dummy, &dummy);	// was in the original source, seems useless here
-	transferToEx();
+	transferToEx(command);
 }
 
 void DreamGenContext::initialInv() {
@@ -2870,7 +2864,7 @@ void DreamBase::delEverything() {
 	}
 }
 
-void DreamGenContext::errorMessage1() {
+void DreamBase::errorMessage1() {
 	delPointer();
 	printMessage(76, 21, 58, 240, (240 & 1));
 	readMouse();
@@ -2888,7 +2882,7 @@ void DreamGenContext::errorMessage1() {
 	delPointer();
 }
 
-void DreamGenContext::errorMessage2() {
+void DreamBase::errorMessage2() {
 	data.byte(kCommandtype) = 255;
 	delPointer();
 	printMessage(76, 21, 59, 240, (240 & 1));
@@ -2907,7 +2901,7 @@ void DreamGenContext::errorMessage2() {
 	delPointer();
 }
 
-void DreamGenContext::errorMessage3() {
+void DreamBase::errorMessage3() {
 	delPointer();
 	printMessage(76, 21, 60, 240, (240 & 1));
 	workToScreenM();
@@ -3606,7 +3600,6 @@ void DreamBase::clearChanges() {
 
 	memcpy(data.ptr(kStartvars, kLengthofvars), _initialVars, kLengthofvars);
 
-	data.byte(kExpos) = 0;
 	data.word(kExframepos) = 0;
 	data.word(kExtextpos) = 0;
 
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 0c62abd..feedef9 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -66,7 +66,6 @@
 	void walkAndExamine();
 	void obName(uint8 command, uint8 commandType);
 
-	DynObject *getExPos();
 	bool checkIfSet(uint8 x, uint8 y);
 	void obToInv();
 	void obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) {
@@ -103,13 +102,9 @@
 	void inventory();
 	void mainScreen();
 	void zoomOnOff();
-	void pickupOb(uint8 command, uint8 pos);
 	void initialInv();
 	void walkIntoRoom();
 	void allPointer();
-	void errorMessage1();
-	void errorMessage2();
-	void errorMessage3();
 	void afterNewRoom();
 	void madmanRun();
 	void decide();
@@ -117,21 +112,11 @@
 	void triggerMessage(uint16 index);
 	void processTrigger();
 	bool execCommand();
-	bool checkObjectSize();
 	void identifyOb();
 	void selectOb();
-	void setPickup();
 	void getKeyAndLogo();
 	void signOn();
-	void inToInv();
-	void outOfInv();
-	void selectOpenOb();
-	void useOpened();
-	void outOfOpen();
-	void swapWithOpen();
 	void searchForFiles(uint16 segment);
-	byte transferToEx();
 	void dirCom();
-	void pickupConts();
 
 #endif






More information about the Scummvm-git-logs mailing list