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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Fri Nov 9 17:52:40 CET 2007


Revision: 29460
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29460&view=rev
Author:   lordhoto
Date:     2007-11-09 08:52:39 -0800 (Fri, 09 Nov 2007)

Log Message:
-----------
Implemented idle script handling.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.h
    scummvm/trunk/engines/kyra/scene_v2.cpp
    scummvm/trunk/engines/kyra/text_v2.cpp

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2007-11-09 08:22:09 UTC (rev 29459)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2007-11-09 16:52:39 UTC (rev 29460)
@@ -79,6 +79,7 @@
 	_chatVocLow = -1;
 	_chatText = 0;
 	_chatObject = -1;
+	_lastIdleScript = -1;
 
 	_currentTalkSections.STATim = NULL;
 	_currentTalkSections.TLKTim = NULL;
@@ -282,7 +283,7 @@
 	_screen->showMouse();
 
 	//sub_20EE8(1);
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 	//XXX
 	_timer->setDelay(0, 5);
 }
@@ -293,7 +294,12 @@
 	_quitFlag = false;
 	while (!_quitFlag) {
 		//XXX
+		
+		if (_system->getMillis() > _nextIdleAnim)
+			showIdleAnim();
 
+		//XXX
+
 		int inputFlag = checkInput(0/*dword_324C5*/);
 		removeInputTop();
 
@@ -309,7 +315,7 @@
 }
 
 void KyraEngine_v2::handleInput(int x, int y) {
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 	if (_unk5) {
 		_unk5 = 0;
 		return;
@@ -323,7 +329,7 @@
 		return;
 	}
 
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 
 	if (x <= 6 || x >= 312 || y <= 6 || y >= 135) {
 		bool exitOk = false;
@@ -1384,9 +1390,67 @@
 void KyraEngine_v2::resetNewShapes(int count, uint8 *filedata) {
 	Common::set_to(_defaultShapeTable+33, _defaultShapeTable+33+count, (uint8*)0);
 	delete [] filedata;
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 }
 
+void KyraEngine_v2::setNextIdleAnimTimer() {
+	_nextIdleAnim = _system->getMillis() + _rnd.getRandomNumberRng(10, 15) * 60 * _tickLength;
+}
+
+void KyraEngine_v2::showIdleAnim() {
+	static const uint8 scriptMinTable[] = {
+		0x00, 0x05, 0x07, 0x08, 0x00, 0x09, 0x0A, 0x0B, 0xFF, 0x00
+	};
+
+	static const uint8 scriptMaxTable[] = {
+		0x04, 0x06, 0x07, 0x08, 0x04, 0x09, 0x0A, 0x0B, 0xFF, 0x00
+	};
+
+	if (queryGameFlag(0x159))
+		return;
+
+	//if (!word_28432) {
+	//	word_28432 = 1;
+	//	sub_2715D();
+	//} else {
+	//	word_28432 = 0;
+		if (_loadedZTable > 8)
+			return;
+
+		int scriptMin = scriptMinTable[_loadedZTable-1];
+		int scriptMax = scriptMaxTable[_loadedZTable-1];
+		int script = 0;
+
+		if (scriptMin < scriptMax) {
+			do {
+				script = _rnd.getRandomNumberRng(scriptMin, scriptMax);
+			} while (script == _lastIdleScript);
+		} else {
+			script = scriptMin;
+		}
+
+		runIdleScript(script);
+		_lastIdleScript = script;
+	//}
+}
+
+void KyraEngine_v2::runIdleScript(int script) {
+	if (script < 0 || script >= 12)
+		script = 0;
+
+	if (_mainCharacter.animFrame != 18) {
+		setNextIdleAnimTimer();
+	} else {
+		// FIXME: move this to staticres.cpp?
+		static const char *idleScriptFiles[] = {
+			"_IDLHAIR.EMC", "_IDLDUST.EMC", "_IDLLEAN.EMC", "_IDLDIRT.EMC", "_IDLTOSS.EMC", "_IDLNOSE.EMC",
+			"_IDLBRSH.EMC", "_Z3IDLE.EMC", "_Z4IDLE.EMC", "_Z6IDLE.EMC", "_Z7IDLE.EMC", "_Z8IDLE.EMC"
+		};
+
+		runTemporaryScript(idleScriptFiles[script], 1, 1, 1, 1);
+	}
+}
+
 #pragma mark -
 
 void KyraEngine_v2::backUpGfxRect24x24(int x, int y) {

Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h	2007-11-09 08:22:09 UTC (rev 29459)
+++ scummvm/trunk/engines/kyra/kyra_v2.h	2007-11-09 16:52:39 UTC (rev 29460)
@@ -636,7 +636,15 @@
 	void timerFunc6(int);
 
 	void setTimer1DelaySecs(int secs);
+	
+	uint32 _nextIdleAnim;
+	int _lastIdleScript;
 
+	void setNextIdleAnimTimer();
+	void showIdleAnim();
+	void runIdleScript(int script);
+
+
 	// delay
 	void delay(uint32 millis, bool updateGame = false, bool isMainLoop = false);
 

Modified: scummvm/trunk/engines/kyra/scene_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_v2.cpp	2007-11-09 08:22:09 UTC (rev 29459)
+++ scummvm/trunk/engines/kyra/scene_v2.cpp	2007-11-09 16:52:39 UTC (rev 29460)
@@ -128,7 +128,7 @@
 	enterNewSceneUnk2(unk3);
 	_screen->showMouse();
 	_unk5 = 0;
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 
 	_currentScene = newScene;
 }

Modified: scummvm/trunk/engines/kyra/text_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_v2.cpp	2007-11-09 08:22:09 UTC (rev 29459)
+++ scummvm/trunk/engines/kyra/text_v2.cpp	2007-11-09 16:52:39 UTC (rev 29460)
@@ -127,7 +127,7 @@
 }
 
 void KyraEngine_v2::objectChat(const char *str, int object, int vocHigh, int vocLow) {
-	//setNextIdleAnimTimer();
+	setNextIdleAnimTimer();
 
 	_chatVocHigh = _chatVocLow = -1;
 	
@@ -176,7 +176,7 @@
 	_chatText = 0;
 	_chatObject = -1;
 
-	//setNextIdelAnimTimer();
+	setNextIdleAnimTimer();
 }
 
 void KyraEngine_v2::objectChatInit(const char *str, int object, int vocHigh, int vocLow) {


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