diff options
| -rw-r--r-- | engines/dreamweb/stubs.cpp | 33 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.h | 1 | 
2 files changed, 33 insertions, 1 deletions
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 4dc4ef83c7..dc05e455ff 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -817,7 +817,7 @@ void DreamGenContext::mainmanCPP(Sprite* sprite) {  	}  	sprite->b22 = 0;  	if (data.byte(kTurntoface) != data.byte(kFacing)) { -		aboutturn(); +		aboutturn(sprite);  	} else {  		if ((data.byte(kTurndirection) != 0) && (data.byte(kLinepointer) == 254)) {  			data.byte(kReasseschanges) = 1; @@ -887,6 +887,37 @@ void DreamGenContext::walking() {  	es = pop();  } +void DreamGenContext::aboutturn(Sprite* sprite) { +	if (data.byte(kTurndirection) == 1) +		goto incdir; +	else if ((int8)data.byte(kTurndirection) == -1) +		goto decdir; +	else { +		if (data.byte(kFacing) < data.byte(kTurntoface)) { +			uint8 delta = data.byte(kTurntoface) - data.byte(kFacing); +			if (delta >= 4) +				goto decdir; +			else +				goto incdir; +		} else { +			uint8 delta = data.byte(kFacing) - data.byte(kTurntoface); +			if (delta >= 4) +				goto incdir; +			else +				goto decdir; +		} +	} +incdir: +	data.byte(kTurndirection) = 1; +	data.byte(kFacing) = (data.byte(kFacing) + 1) & 7; +	sprite->b29 = 0; +	return; +decdir: +	data.byte(kTurndirection) = -1; +	data.byte(kFacing) = (data.byte(kFacing) - 1) & 7; +	sprite->b29 = 0; +} +  void DreamGenContext::backobject(Sprite* sprite) {  	push(es);  	push(ds); diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index d1eb5aae9f..63a898acc9 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -28,6 +28,7 @@  	void initman();  	void mainmanCPP(Sprite* sprite);  	void walking(); +	void aboutturn(Sprite* sprite);  	void backobject(Sprite* sprite);  	void constant(Sprite* sprite, ObjData* objData);  	void steady(Sprite* sprite, ObjData* objData);  | 
