diff options
author | Eugene Sandulenko | 2011-08-11 20:02:10 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2011-08-13 23:27:29 +0100 |
commit | be9c5c0427f1e7edfdc1c244726e31fdeb53766d (patch) | |
tree | bd64293185c3af9b0555f95e42519f05b95304eb | |
parent | 3fb50b815e78b9284497deb6ead60a6efff02453 (diff) | |
download | scummvm-rg350-be9c5c0427f1e7edfdc1c244726e31fdeb53766d.tar.gz scummvm-rg350-be9c5c0427f1e7edfdc1c244726e31fdeb53766d.tar.bz2 scummvm-rg350-be9c5c0427f1e7edfdc1c244726e31fdeb53766d.zip |
AGI: Checked V1 instructions till 0x20
-rw-r--r-- | engines/agi/op_cmd.cpp | 23 | ||||
-rw-r--r-- | engines/agi/opcodes.cpp | 4 | ||||
-rw-r--r-- | engines/agi/opcodes.h | 2 | ||||
-rw-r--r-- | engines/agi/view.cpp | 5 |
4 files changed, 31 insertions, 3 deletions
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp index 62606911dc..01abf21230 100644 --- a/engines/agi/op_cmd.cpp +++ b/engines/agi/op_cmd.cpp @@ -314,7 +314,10 @@ void cmdLastCel(AgiGame *state, uint8 *p) { void cmdSetCel(AgiGame *state, uint8 *p) { state->_vm->setCel(&vt, p1); - vt.flags &= ~DONTUPDATE; + + if (getVersion() >= 0x2000) { + vt.flags &= ~DONTUPDATE; + } } void cmdSetCelF(AgiGame *state, uint8 *p) { @@ -1032,6 +1035,15 @@ void cmdReverseLoop(AgiGame *state, uint8 *p) { setflag(p1, false); } +void cmdReverseLoopV1(AgiGame *state, uint8 *p) { + debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); + vt.cycle = CYCLE_REV_LOOP; + state->_vm->setCel(&vt, 0); + vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.parm1 = p1; + vt.parm3 = 0; +} + void cmdEndOfLoop(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); vt.cycle = CYCLE_END_OF_LOOP; @@ -1040,6 +1052,15 @@ void cmdEndOfLoop(AgiGame *state, uint8 *p) { setflag(p1, false); } +void cmdEndOfLoopV1(AgiGame *state, uint8 *p) { + debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); + vt.cycle = CYCLE_END_OF_LOOP; + state->_vm->setCel(&vt, 0); + vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.parm1 = p1; + vt.parm3 = 0; +} + void cmdBlock(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "x1=%d, y1=%d, x2=%d, y2=%d", p0, p1, p2, p3); state->block.active = true; diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp index d39307c3cd..3b8406c9f4 100644 --- a/engines/agi/opcodes.cpp +++ b/engines/agi/opcodes.cpp @@ -78,8 +78,8 @@ AgiInstruction insV1[] = { { "get.posn", "nvv", &cmdGetPosn }, // 1A { "set.cel", "nn", &cmdSetCel }, // 1B { "set.loop", "nn", &cmdSetLoop }, // 1C - { "end.of.loop", "nn", &cmdEndOfLoop }, // 1D - { "reverse.loop", "nn", &cmdReverseLoop }, // 1E + { "end.of.loop", "nn", &cmdEndOfLoopV1 }, // 1D + { "reverse.loop", "nn", &cmdReverseLoopV1 }, // 1E { "move.obj", "nnnnn", &cmdMoveObj }, // 1F { "set.view", "nn", &cmdSetView }, // 20 { "follow.ego", "nnn", &cmdFollowEgo }, // 21 diff --git a/engines/agi/opcodes.h b/engines/agi/opcodes.h index f0a1c178b5..d0b741b502 100644 --- a/engines/agi/opcodes.h +++ b/engines/agi/opcodes.h @@ -114,8 +114,10 @@ void cmdStopCycling(AgiGame *state, uint8 *p); void cmdStartCycling(AgiGame *state, uint8 *p); void cmdNormalCycle(AgiGame *state, uint8 *p); // 0x48 void cmdEndOfLoop(AgiGame *state, uint8 *p); +void cmdEndOfLoopV1(AgiGame *state, uint8 *p); void cmdReverseCycle(AgiGame *state, uint8 *p); void cmdReverseLoop(AgiGame *state, uint8 *p); +void cmdReverseLoopV1(AgiGame *state, uint8 *p); void cmdCycleTime(AgiGame *state, uint8 *p); void cmdStopMotion(AgiGame *state, uint8 *p); void cmdStartMotion(AgiGame *state, uint8 *p); diff --git a/engines/agi/view.cpp b/engines/agi/view.cpp index 0d420caa81..e249b80de9 100644 --- a/engines/agi/view.cpp +++ b/engines/agi/view.cpp @@ -270,6 +270,11 @@ void AgiEngine::clipViewCoordinates(VtEntry *v) { v->flags |= UPDATE_POS; v->yPos = _game.horizon + 1; } + + if (getVersion() < 0x2000) { + v->flags |= DONTUPDATE; + } + } /** |