diff options
| -rw-r--r-- | engines/sci/engine/kmath.cpp | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp index 7570856dff..cbfe00d3ca 100644 --- a/engines/sci/engine/kmath.cpp +++ b/engines/sci/engine/kmath.cpp @@ -78,6 +78,25 @@ reg_t kSqrt(EngineState *s, int argc, reg_t *argv) {  }  uint16 kGetAngleWorker(int16 x1, int16 y1, int16 x2, int16 y2) { +	// TODO: This has been implemented based on behavior observed with a test +	// program created with SCI Studio. However, the return values have subtle +	// differences from the original, which uses atan(). +	// The differences in the return values are the cause of bug #3540976 +	// and perhaps bug #3037267 as well. + +	// HACK: Return the expected value for Longbow, scene 150 (bug #3540976). +	// This is a temporary solution, till the function returns the expected +	// results. +	if (g_sci->getGameId() == GID_LONGBOW && g_sci->getEngineState()->currentRoomNumber() == 150) { +		if (x1 == 207 && y1 == 88 && x2 == 107 && y2 == 184) +			return 226; +	} + +#if 0 +	// A simpler atan2-based implementation +	return (360 - atan2((double)(x1 - x2), (double)(y1 - y2)) * 57.2958) % 360; +#endif +  	int16 xRel = x2 - x1;  	int16 yRel = y1 - y2; // y-axis is mirrored.  	int16 angle; | 
