Revert the 'get rid of SO_WAIT_FOR_TURN workaround' commit but keep it specific to TheDig

svn-id: r20959
This commit is contained in:
Gregory Montoir 2006-02-27 22:15:21 +00:00
parent 0f5ef6f5b1
commit 1b1bc9cde4

View file

@ -2231,8 +2231,21 @@ void ScummEngine_v6::o6_wait() {
break;
return;
case 232: // SO_WAIT_FOR_TURN
// FIXME: This opcode is really odd. It's used a lot in The Dig.
// But sometimes it receives the actor ID as params, and sometimes an
// angle. However in (almost?) all cases, just before calling it, _curActor
// is set, so we can use it. I tried to add code that detects if an angle
// is passed, and if so, wait till that angle is reached, but that leads to hangs.
// Disassembly doesn't show anything special for that opcode, though.
//
// For now, if the value passed in is divisible by 45, assume it is an
// angle, and use _curActor as the actor to wait for. See bug report #744441
offs = fetchScriptWordSigned();
actnum = pop();
actnum = pop();
if (_game.id == GID_DIG && actnum % 45 == 0) {
warning("Working around invalid actor num %d", actnum);
actnum = _curActor;
}
a = derefActor(actnum, "o6_wait:232b");
if (a->isInCurrentRoom() && a->_moving & MF_TURN)
break;