[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