diff options
| -rwxr-xr-x | devtools/tasmrecover/tasm-recover | 6 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.cpp | 171 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.h | 6 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.h | 6 | ||||
| -rw-r--r-- | engines/dreamweb/use.cpp | 140 | 
5 files changed, 151 insertions, 178 deletions
| diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 52fe40888d..197909c338 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -200,6 +200,7 @@ generator = cpp(context, "DreamGen", blacklist = [  	'checkifset',  	'checkone',  	'checkspeed', +	'chewy',  	'clearbeforeload',  	'clearendpal',  	'clearpalette', @@ -553,6 +554,7 @@ generator = cpp(context, "DreamGen", blacklist = [  	'singlekey',  	'sitdowninbar',  	'slabdoora', +	'slabdoorb',  	'slabdoorc',  	'slabdoord',  	'slabdoore', @@ -591,6 +593,7 @@ generator = cpp(context, "DreamGen", blacklist = [  	'twodigitnum',  	'updatepeople',  	'usebalcony', +	'usecart',  	'usecharset1',  	'usechurchgate',  	'usechurchhole', @@ -604,6 +607,7 @@ generator = cpp(context, "DreamGen", blacklist = [  	'useelevator5',  	'useelvdoor',  	'usefullcart', +	'usehole',  	'useladder',  	'useladderb',  	'usehatch', @@ -618,7 +622,9 @@ generator = cpp(context, "DreamGen", blacklist = [  	'usetempcharset',  	'usetext',  	'usetimedtext', +	'usetrainer',  	'usewall', +	'usewinch',  	'usewindow',  	'viewfolder',  	'waitframes', diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 8f3d73e4e6..3e63d186ce 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -5103,21 +5103,6 @@ void DreamGenContext::openTomb() {  	data.byte(kGetback) = 1;  } -void DreamGenContext::useTrainer() { -	STACK_CHECK; -	getAnyAd(); -	_cmp(es.byte(bx+2), 4); -	if (!flags.z()) -		goto notheldtrainer; -	_inc(data.byte(kProgresspoints)); -	makeWorn(); -	showSecondUse(); -	putBackObStuff(); -	return; -notheldtrainer: -	notHeldError(); -} -  void DreamGenContext::notHeldError() {  	STACK_CHECK;  	createPanel(); @@ -5184,54 +5169,6 @@ alreadyfull:  	putBackObStuff();  } -void DreamGenContext::chewy() { -	STACK_CHECK; -	showFirstUse(); -	getAnyAd(); -	es.byte(bx+2) = 255; -	data.byte(kGetback) = 1; -} - -void DreamGenContext::sLabDoorB() { -	STACK_CHECK; -	_cmp(data.byte(kDreamnumber), 1); -	if (!flags.z()) -		goto slabbwrong; -	al = 'S'; -	ah = 'H'; -	cl = 'L'; -	ch = 'D'; -	isRyanHolding(); -	if (!flags.z()) -		goto gotcrystal; -	al = 44; -	cx = 200; -	showPuzText(); -	putBackObStuff(); -	return; -gotcrystal: -	showFirstUse(); -	_inc(data.byte(kProgresspoints)); -	data.byte(kGetback) = 1; -	data.byte(kWatchspeed) = 1; -	data.byte(kSpeedcount) = 1; -	data.word(kReeltowatch) = 44; -	data.word(kWatchingtime) = 60; -	data.word(kEndwatchreel) = 71; -	data.byte(kNewlocation) = 47; -	return; -slabbwrong: -	showFirstUse(); -	data.byte(kGetback) = 1; -	data.byte(kWatchspeed) = 1; -	data.byte(kSpeedcount) = 1; -	data.word(kReeltowatch) = 44; -	data.word(kWatchingtime) = 40; -	data.word(kEndwatchreel) = 63; -	data.byte(kWatchspeed) = 1; -	data.byte(kSpeedcount) = 1; -} -  void DreamGenContext::useSLab() {  	STACK_CHECK;  	_cmp(data.byte(kWithobject), 255); @@ -5282,45 +5219,6 @@ notlastslab:  	data.byte(kGetback) = 1;  } -void DreamGenContext::useCart() { -	STACK_CHECK; -	_cmp(data.byte(kWithobject), 255); -	if (!flags.z()) -		goto cartwith; -	withWhat(); -	return; -cartwith: -	al = data.byte(kWithobject); -	ah = data.byte(kWithtype); -	cl = 'R'; -	ch = 'O'; -	dl = 'C'; -	dh = 'K'; -	compare(); -	if (flags.z()) -		goto nextcart; -	cx = 300; -	al = 14; -	showPuzText(); -	putBackObStuff(); -	return; -nextcart: -	al = data.byte(kWithobject); -	getExAd(); -	es.byte(bx+2) = 0; -	al = data.byte(kCommand); -	push(ax); -	removeSetObject(); -	ax = pop(); -	_inc(al); -	placeSetObject(); -	_inc(data.byte(kProgresspoints)); -	al = 17; -	playChannel1(); -	showFirstUse(); -	data.byte(kGetback) = 1; -} -  void DreamGenContext::useOpenBox() {  	STACK_CHECK;  	_cmp(data.byte(kWithobject), 255); @@ -5373,39 +5271,6 @@ openboxwrong:  	putBackObStuff();  } -void DreamGenContext::useHole() { -	STACK_CHECK; -	_cmp(data.byte(kWithobject), 255); -	if (!flags.z()) -		goto holewith; -	withWhat(); -	return; -holewith: -	al = data.byte(kWithobject); -	ah = data.byte(kWithtype); -	cl = 'H'; -	ch = 'N'; -	dl = 'D'; -	dh = 'A'; -	compare(); -	if (flags.z()) -		goto righthand; -	cx = 300; -	al = 14; -	showPuzText(); -	putBackObStuff(); -	return; -righthand: -	showFirstUse(); -	al = 86; -	removeSetObject(); -	al = data.byte(kWithobject); -	getExAd(); -	es.byte(bx+2) = 255; -	data.byte(kCanmovealtar) = 1; -	data.byte(kGetback) = 1; -} -  void DreamGenContext::useAltar() {  	STACK_CHECK;  	al = 'C'; @@ -6836,42 +6701,6 @@ donethisbit:  	putBackObStuff();  } -void DreamGenContext::useWinch() { -	STACK_CHECK; -	al = 40; -	ah = 1; -	checkInside(); -	_cmp(cl, (114)); -	if (flags.z()) -		goto nowinch; -	al = cl; -	ah = 4; -	cl = 'F'; -	ch = 'U'; -	dl = 'S'; -	dh = 'E'; -	compare(); -	if (!flags.z()) -		goto nowinch; -	data.word(kWatchingtime) = 217*2; -	data.word(kReeltowatch) = 0; -	data.word(kEndwatchreel) = 217; -	data.byte(kWatchspeed) = 1; -	data.byte(kSpeedcount) = 1; -	data.byte(kDestpos) = 1; -	data.byte(kNewlocation) = 45; -	data.byte(kDreamnumber) = 1; -	data.byte(kRoomafterdream) = 44; -	data.byte(kGeneraldead) = 1; -	data.byte(kNewsitem) = 2; -	data.byte(kGetback) = 1; -	_inc(data.byte(kProgresspoints)); -	return; -nowinch: -	showFirstUse(); -	putBackObStuff(); -} -  void DreamGenContext::quitKey() {  	STACK_CHECK;  	_cmp(data.byte(kCommandtype), 222); diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 74c425c2f0..93f62691b0 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -575,7 +575,6 @@ public:  	void getOpenedSize();  	void resetKeyboard();  	void soundStartup(); -	void sLabDoorB();  	void adjustUp();  	void fadeScreenDownHalf();  	void mouseCall(); @@ -681,7 +680,6 @@ public:  	void deleteExFrame();  	void bossMan();  	void searchForSame(); -	void chewy();  	void getBack1();  	void fadeFromWhite();  	void rollEm(); @@ -708,7 +706,6 @@ public:  	void candles1();  	void showOpBox();  	void doFade(); -	void useTrainer();  	void dumpCurrent();  	void showDiaryKeys();  	void dontLoadSeg(); @@ -766,7 +763,6 @@ public:  	void monkAndRyan();  	void swapWithInv();  	void useControl(); -	void useWinch();  	void updateSymbolTop();  	void checkSoundInt();  	void doSaveLoad(); @@ -782,7 +778,6 @@ public:  	void saveFileRead();  	void emergencyPurge();  	void alleyBarkSound(); -	void useCart();  	void quitKey();  	void processTrigger();  	void volumeAdjust(); @@ -791,7 +786,6 @@ public:  	void withWhat();  	void openOb();  	void createFile(); -	void useHole();  	void fadeToWhite();  	void showLoadOps();  }; diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index c90f80d2a0..e275d1d2f0 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -404,6 +404,7 @@  	void usePlinth();  	void useElvDoor();  	void useObject(); +	void useWinch();  	void openTVDoor();  	void wearWatch();  	void wearShades(); @@ -536,7 +537,12 @@  	void setWalk();  	void useLadder();  	void useLadderB(); +	void useCart(); +	void useTrainer(); +	void useHole(); +	void chewy();  	void sLabDoorA(); +	void sLabDoorB();  	void sLabDoorC();  	void sLabDoorE();  	void sLabDoorD(); diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index e37e8d4e93..f8a3054e65 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -612,6 +612,46 @@ void DreamGenContext::sLabDoorA() {  	}  } +void DreamGenContext::sLabDoorB() { +	if (data.byte(kDreamnumber) != 1) { +		// Wrong +		showFirstUse(); +		data.byte(kGetback) = 1; +		data.byte(kWatchspeed) = 1; +		data.byte(kSpeedcount) = 1; +		data.word(kReeltowatch) = 44; +		data.word(kWatchingtime) = 40; +		data.word(kEndwatchreel) = 63; +		data.byte(kWatchspeed) = 1; +		data.byte(kSpeedcount) = 1; +	} else { +		al = 'S'; +		ah = 'H'; +		cl = 'L'; +		ch = 'D'; +		isRyanHolding(); + +		if (flags.z()) { +			// No crystal +			al = 44; +			cx = 200; +			showPuzText(); +			putBackObStuff(); +		} else { +			// Got crystal +			showFirstUse(); +			data.byte(kProgresspoints)++; +			data.byte(kGetback) = 1; +			data.byte(kWatchspeed) = 1; +			data.byte(kSpeedcount) = 1; +			data.word(kReeltowatch) = 44; +			data.word(kWatchingtime) = 60; +			data.word(kEndwatchreel) = 71; +			data.byte(kNewlocation) = 47; +		} +	} +} +  void DreamGenContext::sLabDoorC() {  	showFirstUse();  	data.byte(kGetback) = 1; @@ -863,7 +903,7 @@ void DreamGenContext::useElvDoor() {  		cx = 300;  		showPuzText();  		_inc(data.byte(kProgresspoints)); -		data.word(kWatchingtime) = 46*2; +		data.word(kWatchingtime) = 46 * 2;  		data.word(kReeltowatch) = 31;  		data.word(kEndwatchreel) = 77;  		data.byte(kWatchspeed) = 1; @@ -887,4 +927,102 @@ void DreamGenContext::useObject() {  		useRoutine();  } + +void DreamGenContext::useWinch() { +	al = 40; +	ah = 1; +	checkInside(); + +	char id[4] = { 'F', 'U', 'S', 'E' };	// TODO: convert to string with trailing zero +	if (cl == 114 || !compare(cl, 4, id)) { +		// No winch +		showFirstUse(); +		putBackObStuff(); +		return; +	} + +	data.word(kWatchingtime) = 217 * 2; +	data.word(kReeltowatch) = 0; +	data.word(kEndwatchreel) = 217; +	data.byte(kWatchspeed) = 1; +	data.byte(kSpeedcount) = 1; +	data.byte(kDestpos) = 1; +	data.byte(kNewlocation) = 45; +	data.byte(kDreamnumber) = 1; +	data.byte(kRoomafterdream) = 44; +	data.byte(kGeneraldead) = 1; +	data.byte(kNewsitem) = 2; +	data.byte(kGetback) = 1; +	data.byte(kProgresspoints)++; +} + +void DreamGenContext::useCart() { +	if (data.byte(kWithobject) == 255) { +		withWhat(); +		return; +	} + +	char id[4] = { 'R', 'O', 'C', 'K' };	// TODO: convert to string with trailing zero +	if (!compare(data.byte(kWithobject), data.byte(kWithtype), id)) { +		// Wrong item +		cx = 300; +		al = 14; +		showPuzText(); +		putBackObStuff(); +	} else { +		DynObject *exObject = getExAd(data.byte(kWithobject)); +		exObject->mapad[0] = 0; +		removeSetObject(data.byte(kCommand)); +		placeSetObject(data.byte(kWithobject) + 1); +		data.byte(kProgresspoints)++; +		playChannel1(17); +		showFirstUse(); +		data.byte(kGetback) = 1; +	} +} + +void DreamGenContext::useTrainer() { +	// TODO: Use the C++ version of getAnyAd() +	getAnyAd(); +	if (es.byte(bx + 2) != 4) { +		notHeldError(); +	} else { +		data.byte(kProgresspoints)++; +		makeWorn(); +		showSecondUse(); +		putBackObStuff(); +	} +} + +void DreamGenContext::chewy() { +	showFirstUse(); +	// TODO: Use the C++ version of getAnyAd() +	getAnyAd(); +	es.byte(bx + 2) = 255; +	data.byte(kGetback) = 1; +} + +void DreamGenContext::useHole() { +	if (data.byte(kWithobject) == 255) { +		withWhat(); +		return; +	} + +	char id[4] = { 'H', 'N', 'D', 'A' };	// TODO: convert to string with trailing zero +	if (!compare(data.byte(kWithobject), data.byte(kWithtype), id)) { +		// Wrong item +		cx = 300; +		al = 14; +		showPuzText(); +		putBackObStuff(); +	} else { +		showFirstUse(); +		removeSetObject(86); +		DynObject *exObject = getExAd(data.byte(kWithobject)); +		exObject->mapad[0] = 255; +		data.byte(kCanmovealtar) = 1; +		data.byte(kGetback) = 1; +	} +} +  } /*namespace dreamgen */ | 
