diff options
| -rwxr-xr-x | devtools/tasmrecover/tasm-recover | 1 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.cpp | 93 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.h | 3 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.cpp | 76 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.h | 4 | 
5 files changed, 81 insertions, 96 deletions
| diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 22010aa71a..8eb70290ef 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -33,6 +33,7 @@ generator = cpp(context, "DreamGen", blacklist = [  	'showframe',  	'spriteupdate',  	'dodoor', +	'liftsprite',  	'frameoutv',  	'modifychar',  	'lockmon' diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 478a7380e7..ce978b223d 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -2955,98 +2955,6 @@ steadyob:  	steady();  } -void DreamGenContext::liftsprite() { -	STACK_CHECK; -	al = data.byte(kLiftflag); -	_cmp(al, 0); -	if (flags.z()) -		goto liftclosed; -	_cmp(al, 1); -	if (flags.z()) -		goto liftopen; -	_cmp(al, 3); -	if (flags.z()) -		goto openlift; -	al = es.byte(bx+19); -	_cmp(al, 0); -	if (flags.z()) -		goto finishclose; -	_dec(al); -	_cmp(al, 11); -	if (!flags.z()) -		goto pokelift; -	push(ax); -	al = 3; -	liftnoise(); -	ax = pop(); -	goto pokelift; -finishclose: -	data.byte(kLiftflag) = 0; -	return; -openlift: -	al = es.byte(bx+19); -	_cmp(al, 12); -	if (flags.z()) -		goto endoflist; -	_inc(al); -	_cmp(al, 1); -	if (!flags.z()) -		goto pokelift; -	push(ax); -	al = 2; -	liftnoise(); -	ax = pop(); -pokelift: -	es.byte(bx+19) = al; -	ah = 0; -	push(di); -	_add(di, ax); -	al = ds.byte(di+18); -	di = pop(); -	es.byte(bx+15) = al; -	ds.byte(di+17) = al; -	return; -endoflist: -	data.byte(kLiftflag) = 1; -	return; -liftopen: -	al = data.byte(kLiftpath); -	push(es); -	push(bx); -	turnpathon(); -	bx = pop(); -	es = pop(); -	_cmp(data.byte(kCounttoclose), 0); -	if (flags.z()) -		goto nocountclose; -	_dec(data.byte(kCounttoclose)); -	_cmp(data.byte(kCounttoclose), 0); -	if (!flags.z()) -		goto nocountclose; -	data.byte(kLiftflag) = 2; -nocountclose: -	al = 12; -	goto pokelift; -liftclosed: -	al = data.byte(kLiftpath); -	push(es); -	push(bx); -	turnpathoff(); -	bx = pop(); -	es = pop(); -	_cmp(data.byte(kCounttoopen), 0); -	if (flags.z()) -		goto nocountopen; -	_dec(data.byte(kCounttoopen)); -	_cmp(data.byte(kCounttoopen), 0); -	if (!flags.z()) -		goto nocountopen; -	data.byte(kLiftflag) = 3; -nocountopen: -	al = 0; -	goto pokelift; -} -  void DreamGenContext::liftnoise() {  	STACK_CHECK;  	_cmp(data.byte(kReallocation), 5); @@ -21687,7 +21595,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {  		case addr_getblockofpixel: getblockofpixel(); break;  		case addr_showrain: showrain(); break;  		case addr_backobject: backobject(); break; -		case addr_liftsprite: liftsprite(); break;  		case addr_liftnoise: liftnoise(); break;  		case addr_random: random(); break;  		case addr_steady: steady(); break; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index f7e19f2eec..d924c62c3c 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -653,7 +653,6 @@ public:  	static const uint16 addr_steady = 0xc180;  	static const uint16 addr_random = 0xc17c;  	static const uint16 addr_liftnoise = 0xc178; -	static const uint16 addr_liftsprite = 0xc174;  	static const uint16 addr_backobject = 0xc170;  	static const uint16 addr_showrain = 0xc16c;  	static const uint16 addr_getblockofpixel = 0xc168; @@ -1455,7 +1454,7 @@ public:  	void dealwithspecial();  	//void eraseoldobs();  	void dircom(); -	void liftsprite(); +	//void liftsprite();  	void dumpkeypad();  	void dumpzoom();  	void endgameseq(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index d0fdf6fd42..3271b701d6 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -825,7 +825,7 @@ void DreamGenContext::backobject(Sprite* sprite) {  	else if (objData->type == 4)  		lockeddoorway();  	else if (objData->type == 3) -		liftsprite(); +		liftsprite(sprite, objData);  	else if (objData->type == 2)  		doorway();  	else if (objData->type == 1) @@ -913,6 +913,80 @@ void DreamGenContext::steady(Sprite* sprite, ObjData* objData) {  	sprite->b15 = b18;  } +void DreamGenContext::turnpathonCPP(uint8 param) { +	al = param; +	push(es); +	push(bx); +	turnpathon(); +	bx = pop(); +	es = pop(); +} + +void DreamGenContext::turnpathoffCPP(uint8 param) { +	al = param; +	push(es); +	push(bx); +	turnpathoff(); +	bx = pop(); +	es = pop(); +} + +void DreamGenContext::liftsprite() { +	Sprite *sprite = (Sprite*)es.ptr(bx, sizeof(Sprite)); +	ObjData *objData = (ObjData*)ds.ptr(di, 0); +	liftsprite(sprite, objData); +} + +void DreamGenContext::liftsprite(Sprite* sprite, ObjData* objData) { +	uint8 liftFlag = data.byte(kLiftflag); +	if (liftFlag == 0) { //liftclosed +		turnpathoffCPP(data.byte(kLiftpath)); + +		if (data.byte(kCounttoopen) != 0) { +			_dec(data.byte(kCounttoopen)); +			if (data.byte(kCounttoopen) == 0) +				data.byte(kLiftflag) = 3; +		} +		sprite->frame = 0; +		sprite->b15 = objData->b17 = objData->b18[sprite->frame]; +	} +	else if (liftFlag == 1) {  //liftopen +		turnpathonCPP(data.byte(kLiftpath)); + +		if (data.byte(kCounttoclose) != 0) { +			_dec(data.byte(kCounttoclose)); +			if (data.byte(kCounttoclose) == 0) +				data.byte(kLiftflag) = 2; +		} +		sprite->frame = 12; +		sprite->b15 = objData->b17 = objData->b18[sprite->frame]; +	}	 +	else if (liftFlag == 3) { //openlift +		if (sprite->frame == 12) { +			data.byte(kLiftflag) = 1; +			return; +		} +		++sprite->frame; +		if (sprite->frame == 1) { +			al = 2; +			liftnoise(); +		} +		sprite->b15 = objData->b17 = objData->b18[sprite->frame]; +	} else { //closeLift +		assert(liftFlag == 2); +		if (sprite->frame == 0) { +			data.byte(kLiftflag) = 0; +			return; +		} +		--sprite->frame; +		if (sprite->frame == 11) { +			al = 3; +			liftnoise(); +		} +		sprite->b15 = objData->b17 = objData->b18[sprite->frame]; +	} +} +  void DreamGenContext::modifychar() {  	al = engine->modifyChar(al);  } diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index d840a8c8fa..461cef7419 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -31,6 +31,10 @@  	void steady(Sprite* sprite, ObjData* objData);  	void dodoor();  	void dodoor(Sprite* sprite, ObjData* objData); +	void liftsprite(); +	void liftsprite(Sprite* sprite, ObjData* objData); +	void turnpathonCPP(uint8 param); +	void turnpathoffCPP(uint8 param);  	void modifychar();  	void lockmon(); | 
