aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2011-08-11 20:02:10 +0100
committerEugene Sandulenko2011-08-13 23:27:29 +0100
commitbe9c5c0427f1e7edfdc1c244726e31fdeb53766d (patch)
treebd64293185c3af9b0555f95e42519f05b95304eb
parent3fb50b815e78b9284497deb6ead60a6efff02453 (diff)
downloadscummvm-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.cpp23
-rw-r--r--engines/agi/opcodes.cpp4
-rw-r--r--engines/agi/opcodes.h2
-rw-r--r--engines/agi/view.cpp5
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;
+ }
+
}
/**