[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.113,2.114 intern.h,2.90,2.91 script.cpp,1.96,1.97 script_v2.cpp,2.93,2.94 script_v5.cpp,1.90,1.91 scummvm.cpp,2.171,2.172 vars.cpp,1.53,1.54
Max Horn
fingolfin at users.sourceforge.net
Wed May 21 07:01:07 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv31644
Modified Files:
gfx.cpp intern.h script.cpp script_v2.cpp script_v5.cpp
scummvm.cpp vars.cpp
Log Message:
added v2 cutscene support (not quite complete; and crashes at some point in maniac because VAR_EGO contains a bogus value); cleanup
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.113
retrieving revision 2.114
diff -u -d -r2.113 -r2.114
--- gfx.cpp 19 May 2003 11:34:13 -0000 2.113
+++ gfx.cpp 21 May 2003 14:00:04 -0000 2.114
@@ -2063,6 +2063,8 @@
}
void Scumm::setCameraFollows(Actor *a) {
+ assert(a != NULL);
+
if (_features & GF_AFTER_V7) {
byte oldfollow = camera._follows;
int ax, ay;
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.90
retrieving revision 2.91
diff -u -d -r2.90 -r2.91
--- intern.h 20 May 2003 16:13:33 -0000 2.90
+++ intern.h 21 May 2003 14:00:06 -0000 2.91
@@ -119,7 +119,7 @@
void o5_notEqualZero();
void o5_oldRoomEffect();
void o5_or();
- void o5_overRide();
+ void o5_beginOverride();
void o5_panCameraTo();
void o5_pickupObject();
void o5_pickupObjectOld();
@@ -220,6 +220,7 @@
void o2_animateActor();
void o2_assignVarByte();
void o2_assignVarWordIndirect();
+ void o2_beginOverride();
void o2_chainScript();
void o2_clearState01();
void o2_clearState02();
Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script.cpp,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -d -r1.96 -r1.97
--- script.cpp 20 May 2003 20:58:24 -0000 1.96
+++ script.cpp 21 May 2003 14:00:06 -0000 1.97
@@ -1103,6 +1103,7 @@
// why we record the current script position in vm.cutScenePtr).
fetchScriptByte();
fetchScriptWord();
+
VAR(VAR_OVERRIDE) = 0;
}
Index: script_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v2.cpp,v
retrieving revision 2.93
retrieving revision 2.94
diff -u -d -r2.93 -r2.94
--- script_v2.cpp 21 May 2003 11:22:03 -0000 2.93
+++ script_v2.cpp 21 May 2003 14:00:07 -0000 2.94
@@ -143,7 +143,7 @@
OPCODE(o5_getActorMoving),
OPCODE(o2_setState02),
/* 58 */
- OPCODE(beginOverride),
+ OPCODE(o2_beginOverride),
OPCODE(o2_doSentence),
OPCODE(o5_add),
OPCODE(o2_setBitVar),
@@ -852,9 +852,9 @@
warning("TODO o2_doSentence(%d, %d, %d): execute", st->verb, st->objectA, st->objectB);
// FIXME / TODO: The following is hackish, and probably incomplete, but it works somewhat.
- _scummVars[VAR_ACTIVE_VERB] = st->verb;
- _scummVars[VAR_ACTIVE_OBJECT1] = st->objectA;
- _scummVars[VAR_ACTIVE_OBJECT2] = st->objectB;
+ VAR(VAR_ACTIVE_VERB) = st->verb;
+ VAR(VAR_ACTIVE_OBJECT1) = st->objectA;
+ VAR(VAR_ACTIVE_OBJECT2) = st->objectB;
runObjectScript(st->objectA, st->verb, 0, 0, NULL);
break;
@@ -863,9 +863,9 @@
_sentenceNum--;
warning("TODO o2_doSentence(%d, %d, %d): print", st->verb, st->objectA, st->objectB);
- _scummVars[VAR_SENTENCE_VERB] = st->verb;
- _scummVars[VAR_SENTENCE_OBJECT1] = st->objectA;
- _scummVars[VAR_SENTENCE_OBJECT2] = st->objectB;
+ VAR(VAR_SENTENCE_VERB) = st->verb;
+ VAR(VAR_SENTENCE_OBJECT1) = st->objectA;
+ VAR(VAR_SENTENCE_OBJECT2) = st->objectB;
o2_drawSentence();
break;
@@ -876,22 +876,22 @@
ScummVM::Rect sentenceline;
static char sentence[80];
byte *temp;
- int slot = getVerbSlot(_scummVars[VAR_SENTENCE_VERB],0);
+ int slot = getVerbSlot(VAR(VAR_SENTENCE_VERB),0);
if (!(_userState & 32))
return;
strcpy(sentence, (char*)getResourceAddress(rtVerb, slot));
- if (_scummVars[VAR_SENTENCE_OBJECT1] > 0) {
- temp = getObjOrActorName(_scummVars[VAR_SENTENCE_OBJECT1]);
+ if (VAR(VAR_SENTENCE_OBJECT1) > 0) {
+ temp = getObjOrActorName(VAR(VAR_SENTENCE_OBJECT1));
if (temp) {
strcat(sentence, " ");
strcat(sentence, (char*)temp);
}
}
- if (_scummVars[VAR_SENTENCE_OBJECT2] > 0) {
- temp = getObjOrActorName(_scummVars[VAR_SENTENCE_OBJECT2]);
+ if (VAR(VAR_SENTENCE_OBJECT2) > 0) {
+ temp = getObjOrActorName(VAR(VAR_SENTENCE_OBJECT2));
if (temp) {
strcat(sentence, " with ");
strcat(sentence, (char*)temp);
@@ -1152,13 +1152,55 @@
void Scumm_v2::o2_cutscene() {
warning("TODO o2_cutscene()");
+
+ vm.cutSceneData[0] = _userState;
+ vm.cutSceneData[1] = VAR(VAR_CURSORSTATE);
+ vm.cutSceneData[2] = _currentRoom;
+ vm.cutSceneData[3] = camera._mode;
+
+ VAR(VAR_CURSORSTATE) = 200;
+
+ // TODO: some cursor command stuff (hide mouse etc maybe?)
+
_sentenceNum = 0;
stopScript(SENTENCE_SCRIPT);
resetSentence();
+
+ vm.cutScenePtr[0] = 0;
}
void Scumm_v2::o2_endCutscene() {
warning("TODO o2_endCutscene()");
+
+ vm.cutSceneStackPointer = 0;
+
+ VAR(VAR_OVERRIDE) = 0;
+ vm.cutSceneScript[0] = 0;
+ vm.cutScenePtr[0] = 0;
+
+ VAR(VAR_CURSORSTATE) = vm.cutSceneData[1];
+
+ // TODO: some cursor command stuff (probably to reset it to the pre-cutscene state)
+
+ if (_gameId == GID_MANIAC) {
+ camera._mode = vm.cutSceneData[3];
+ if (camera._mode == CM_FOLLOW_ACTOR) {
+ actorFollowCamera(VAR(VAR_EGO));
+ } else if (vm.cutSceneData[2] != _currentRoom) {
+ startScene(vm.cutSceneData[2], 0, 0);
+ }
+ } else {
+ actorFollowCamera(VAR(VAR_EGO));
+ }
+}
+
+void Scumm_v2::o2_beginOverride() {
+ vm.cutScenePtr[0] = _scriptPointer - _scriptOrgPointer;
+ vm.cutSceneScript[0] = _currentScript;
+
+ // Skip the jump instruction following the override instruction
+ fetchScriptByte();
+ fetchScriptWord();
}
void Scumm_v2::o2_chainScript() {
@@ -1236,7 +1278,7 @@
int a2 = cmd >> 8;
if (cmd & 0xFF) { // (?)
- _scummVars[21] = cmd & 0xFF;
+ VAR(VAR_CURSORSTATE) = cmd & 0xFF;
printf("Set cmd %d\n", cmd & 0xFF);
}
@@ -1280,8 +1322,8 @@
}
void Scumm_v2::resetSentence() {
- _scummVars[VAR_SENTENCE_VERB] = _scummVars[VAR_BACKUP_VERB];
- _scummVars[VAR_SENTENCE_OBJECT1] = 0;
- _scummVars[VAR_SENTENCE_OBJECT2] = 0;
+ VAR(VAR_SENTENCE_VERB) = VAR(VAR_BACKUP_VERB);
+ VAR(VAR_SENTENCE_OBJECT1) = 0;
+ VAR(VAR_SENTENCE_OBJECT2) = 0;
_scummVars[29] = 0;
}
Index: script_v5.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v5.cpp,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -d -r1.90 -r1.91
--- script_v5.cpp 20 May 2003 23:05:33 -0000 1.90
+++ script_v5.cpp 21 May 2003 14:00:07 -0000 1.91
@@ -143,7 +143,7 @@
OPCODE(o5_getActorMoving),
OPCODE(o5_or),
/* 58 */
- OPCODE(o5_overRide),
+ OPCODE(o5_beginOverride),
OPCODE(o5_doSentence),
OPCODE(o5_add),
OPCODE(o5_divide),
@@ -1412,7 +1412,7 @@
setResult(readVar(_resultVarNumber) | a);
}
-void Scumm_v5::o5_overRide() {
+void Scumm_v5::o5_beginOverride() {
if (fetchScriptByte() != 0)
beginOverride();
else
Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.171
retrieving revision 2.172
diff -u -d -r2.171 -r2.172
--- scummvm.cpp 21 May 2003 10:13:06 -0000 2.171
+++ scummvm.cpp 21 May 2003 14:00:13 -0000 2.172
@@ -1316,6 +1316,7 @@
int ENCD_len = -1;
if (_features & GF_AFTER_V2) {
_ENCD_offs = READ_LE_UINT16(roomptr + 0x1A);
+ // TODO: determine v2 entry script length
} else if (_features & GF_OLD_BUNDLE) {
_ENCD_offs = READ_LE_UINT16(roomptr + 0x1B);
// FIXME - the following is a hack which assumes that immediately after
@@ -1759,7 +1760,8 @@
return;
}
- if (_lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY)) {
+ if (_lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY) ||
+ (VAR(VAR_CUTSCENEEXIT_KEY) == 4 && _lastKeyHit == 27)) {
if (_insaneState) {
_videoFinished = true;
} else
Index: vars.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/vars.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- vars.cpp 18 May 2003 12:52:27 -0000 1.53
+++ vars.cpp 21 May 2003 14:00:19 -0000 1.54
@@ -116,6 +116,7 @@
VAR_VERB_ALLOWED = 18;
VAR_ACTOR_RANGE_MIN = 19;
VAR_ACTOR_RANGE_MAX = 20;
+ VAR_CURSORSTATE = 21;
VAR_CAMERA_MIN_X = 23;
VAR_CAMERA_MAX_X = 24;
VAR_TIMER_NEXT = 25;
More information about the Scummvm-git-logs
mailing list