[Scummvm-cvs-logs] SF.net SVN: scummvm: [31186] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue Mar 18 20:06:53 CET 2008


Revision: 31186
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31186&view=rev
Author:   lordhoto
Date:     2008-03-18 12:06:53 -0700 (Tue, 18 Mar 2008)

Log Message:
-----------
Implemented showing of credits after completing game.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/animator_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.h
    scummvm/trunk/engines/kyra/script_v2.cpp

Modified: scummvm/trunk/engines/kyra/animator_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/animator_v2.cpp	2008-03-18 18:20:13 UTC (rev 31185)
+++ scummvm/trunk/engines/kyra/animator_v2.cpp	2008-03-18 19:06:53 UTC (rev 31186)
@@ -62,6 +62,11 @@
 }
 
 KyraEngine_v2::AnimObj *KyraEngine_v2::addToAnimListSorted(AnimObj *list, AnimObj *add) {
+	if (!list) {
+		add->nextObject = 0;
+		return add;
+	}
+
 	if (add->yPos1 <= list->yPos1) {
 		add->nextObject = list;
 		return add;

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-18 18:20:13 UTC (rev 31185)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-18 19:06:53 UTC (rev 31186)
@@ -55,6 +55,8 @@
 	_demoShapeDefs = 0;
 	_sequenceSoundList = 0;
 
+	_showCredits = false;
+
 	_gamePlayBuffer = 0;
 	_cCodeBuffer = _optionsBuffer = _chapterBuffer = 0;
 
@@ -240,7 +242,6 @@
 		_menuChoice = 4;
 	} else {
 		seq_playSequences(kSequenceVirgin, kSequenceZanfaun);
-		//seq_playSequences(kSequenceFunters, kSequenceFrash);
 	}
 
 	_res->unloadAllPakFiles();
@@ -260,6 +261,9 @@
 		startup();
 		runLoop();
 		cleanup();
+		
+		if (_showCredits)
+			seq_playSequences(kSequenceFunters, kSequenceFrash);
 	}
 
 	return 0;
@@ -387,7 +391,8 @@
 	_screen->updateScreen();
 
 	_quitFlag = false;
-	while (!_quitFlag) {
+	_runFlag = true;
+	while (!_quitFlag && _runFlag) {
 		//if (_deathHandler >= 0) {
 		//	removeHandItem();
 		//	waitTicks(5);
@@ -571,7 +576,8 @@
 		if (queryGameFlag(0x1ED)) {
 			_sound->beginFadeOut();
 			_screen->fadeToBlack();
-			_quitFlag = true;
+			_showCredits = true;
+			_runFlag = false;
 		}
 
 		return _sceneScriptState.regs[3] != 0;

Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h	2008-03-18 18:20:13 UTC (rev 31185)
+++ scummvm/trunk/engines/kyra/kyra_v2.h	2008-03-18 19:06:53 UTC (rev 31186)
@@ -300,6 +300,9 @@
 	void loadItemShapes();
 
 	// run
+	bool _runFlag;
+	bool _showCredits;
+
 	void update();
 	void updateWithText();
 
@@ -1035,6 +1038,7 @@
 	int o2_getRand(ScriptState *script);
 	int o2_setDeathHandlerFlag(ScriptState *script);
 	int o2_setDrawNoShapeFlag(ScriptState *script);
+	int o2_setRunFlag(ScriptState *script);
 	int o2_showLetter(ScriptState *script);
 	int o2_fillRect(ScriptState *script);
 	int o2_waitForConfirmationClick(ScriptState *script);

Modified: scummvm/trunk/engines/kyra/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v2.cpp	2008-03-18 18:20:13 UTC (rev 31185)
+++ scummvm/trunk/engines/kyra/script_v2.cpp	2008-03-18 19:06:53 UTC (rev 31186)
@@ -240,7 +240,7 @@
 	_wsaSlots[slot]->setX(x);
 	_wsaSlots[slot]->setY(y);
 	_wsaSlots[slot]->setDrawPage(dstPage);
-	_wsaSlots[slot]->displayFrame(frame, copyParam | 0xC000);
+	_wsaSlots[slot]->displayFrame(frame, copyParam | 0xC000, 0, 0);
 	_screen->updateScreen();
 
 	if (backUp)
@@ -282,7 +282,7 @@
 		if (startFrame < endFrame) {
 			for (int i = startFrame; i <= endFrame && !skipFlag(); ++i) {
 				uint32 endTime = _system->getMillis() + waitTime * _tickLength;
-				_wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags);
+				_wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags, 0, 0);
 				_screen->updateScreen();
 
 				do {
@@ -295,7 +295,7 @@
 		} else {
 			for (int i = startFrame; i >= endFrame && !skipFlag(); --i) {
 				uint32 endTime = _system->getMillis() + waitTime * _tickLength;
-				_wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags);
+				_wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags, 0, 0);
 				_screen->updateScreen();
 
 				do {
@@ -338,7 +338,7 @@
 
 	while (currentFrame <= lastFrame && !skipFlag()) {	
 		uint32 endTime = _system->getMillis() + frameDelay;
-		_wsaSlots[index]->displayFrame(currentFrame++, copyParam);
+		_wsaSlots[index]->displayFrame(currentFrame++, copyParam, 0, 0);
 		_screen->updateScreen();
 		delayUntil(endTime);
 	}
@@ -368,7 +368,7 @@
 
 	while (currentFrame <= lastFrame && !skipFlag()) {	
 		uint32 endTime = _system->getMillis() + frameDelay;
-		_wsaSlots[index]->displayFrame(currentFrame++, copyParam);
+		_wsaSlots[index]->displayFrame(currentFrame++, copyParam, 0, 0);
 		if (doUpdate)
 			update();
 		_screen->updateScreen();
@@ -896,6 +896,15 @@
 	return 0;
 }
 
+int KyraEngine_v2::o2_setRunFlag(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_setRunFlag(%p) (%d)", (const void *)script, stackPos(0));
+	// this is usually just _runFlag, but since this is just used when the game should play the credits
+	// we handle it a bit different :-)
+	_showCredits = true;
+	_runFlag = false;
+	return 0;
+}
+
 int KyraEngine_v2::o2_showLetter(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_showLetter(%p) (%d)", (const void *)script, stackPos(0));
 	const int letter = stackPos(0);
@@ -1782,7 +1791,7 @@
 		Opcode(o2_setDeathHandlerFlag),
 		Opcode(o2_setDrawNoShapeFlag),
 		// 0x64
-		OpcodeUnImpl(),
+		Opcode(o2_setRunFlag),
 		Opcode(o2_showLetter),
 		OpcodeUnImpl(),
 		Opcode(o2_fillRect),


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list