[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