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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun Apr 20 02:30:40 CEST 2008


Revision: 31585
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31585&view=rev
Author:   lordhoto
Date:     2008-04-19 17:30:39 -0700 (Sat, 19 Apr 2008)

Log Message:
-----------
Implemented opcode 49: o3_badConscienceChat.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/animator_v3.cpp
    scummvm/trunk/engines/kyra/kyra_v3.h
    scummvm/trunk/engines/kyra/script_v3.cpp
    scummvm/trunk/engines/kyra/text_v3.cpp

Modified: scummvm/trunk/engines/kyra/animator_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/animator_v3.cpp	2008-04-20 00:11:42 UTC (rev 31584)
+++ scummvm/trunk/engines/kyra/animator_v3.cpp	2008-04-20 00:30:39 UTC (rev 31585)
@@ -380,6 +380,8 @@
 
 void KyraEngine_v3::setupSceneAnimObject(int animId, uint16 flags, int x, int y, int x2, int y2, int w,
 										int h, int unk10, int specialSize, int unk14, int shape, const char *filename) {
+	debugC(9, kDebugLevelAnimator, "KyraEngine_v3::setupSceneAnimObject(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '%s')",
+			animId, flags, x, y, x2, y2, w, h, unk10, specialSize, unk14, shape, filename);
 	restorePage3();
 	SceneAnim &anim = _sceneAnims[animId];
 	anim.flags = flags;

Modified: scummvm/trunk/engines/kyra/kyra_v3.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-20 00:11:42 UTC (rev 31584)
+++ scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-20 00:30:39 UTC (rev 31585)
@@ -460,6 +460,9 @@
 	void objectChatProcess(const char *script);
 	void objectChatWaitToFinish();
 
+	void badConscienceChat(const char *str, int vocHigh, int vocLow);
+	void badConscienceChatWaitToFinish();
+
 	// conscience
 	bool _badConscienceShown;
 	int _badConscienceAnim;
@@ -520,6 +523,7 @@
 	int o3_hideMouse(ScriptState *script);
 	int o3_setMousePos(ScriptState *script);
 	int o3_showMouse(ScriptState *script);
+	int o3_badConscienceChat(ScriptState *script);
 	int o3_delay(ScriptState *script);
 	int o3_setSceneFilename(ScriptState *script);
 	int o3_playSoundEffect(ScriptState *script);

Modified: scummvm/trunk/engines/kyra/script_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-20 00:11:42 UTC (rev 31584)
+++ scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-20 00:30:39 UTC (rev 31585)
@@ -159,6 +159,14 @@
 	return 0;
 }
 
+int KyraEngine_v3::o3_badConscienceChat(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_badConscienceChat(%p) (%d)", (const void *)script, stackPos(0));
+	int id = stackPos(0);
+	const char *str = (const char*)getTableEntry(_useActorBuffer ? _actorFile : _sceneStrings, id);
+	badConscienceChat(str, _vocHigh, id);
+	return 0;
+}
+
 int KyraEngine_v3::o3_delay(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_delay(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
 	const uint32 delayTime = stackPos(0) * _tickLength;
@@ -472,8 +480,8 @@
 		Opcode(o3_setMousePos),
 		// 0x30
 		Opcode(o3_showMouse),
+		Opcode(o3_badConscienceChat),
 		OpcodeUnImpl(),
-		OpcodeUnImpl(),
 		Opcode(o3_dummy),
 		// 0x34
 		OpcodeUnImpl(),

Modified: scummvm/trunk/engines/kyra/text_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_v3.cpp	2008-04-20 00:11:42 UTC (rev 31584)
+++ scummvm/trunk/engines/kyra/text_v3.cpp	2008-04-20 00:30:39 UTC (rev 31585)
@@ -364,6 +364,7 @@
 
 			const uint32 curTime = _system->getMillis();
 			if ((textEnabled() && !speechEnabled() && curTime > endTime) || (speechEnabled() && !snd_voiceIsPlaying()) || skipFlag()) {
+				snd_stopVoice();
 				resetSkipFlag();
 				nextFrame = curTime;
 				running = false;
@@ -378,4 +379,63 @@
 	resetCharacterAnimDim();
 }
 
+void KyraEngine_v3::badConscienceChat(const char *str, int vocHigh, int vocLow) {
+	debugC(9, kDebugLevelMain, "KyraEngine_v3::badConscienceChat('%s', %d, %d)", str, vocHigh, vocLow);
+	if (!_badConscienceShown)
+		return;
+
+	//setNextIdleAnimTimer();
+	_chatVocHigh = _chatVocLow = -1;
+	objectChatInit(str, 1, vocHigh, vocLow);
+	_chatText = str;
+	_chatObject = 1;
+	badConscienceChatWaitToFinish();
+	updateSceneAnim(0x0E, _badConscienceFrameTable[_badConscienceAnim+16]);
+	_text->restoreScreen();
+	update();
+	_chatText = 0;
+	_chatObject = -1;
+}
+
+void KyraEngine_v3::badConscienceChatWaitToFinish() {
+	debugC(9, kDebugLevelMain, "KyraEngine_v3::badConscienceChatWaitToFinish()");
+	if (_chatVocHigh) {
+		playVoice(_chatVocHigh, _chatVocLow);
+		_chatVocHigh = _chatVocLow = -1;
+	}
+
+	bool running = true;
+	const uint32 endTime = _chatEndTime;
+	resetSkipFlag();
+
+	uint32 nextFrame = _system->getMillis() + _rnd.getRandomNumberRng(4, 8) * _tickLength;
+
+	int frame = _badConscienceFrameTable[_badConscienceAnim+24];
+	while (running && !_quitFlag) {
+		if (nextFrame < _system->getMillis()) {
+			++frame;
+			if (_badConscienceFrameTable[_badConscienceAnim+32] < frame)
+				frame = _badConscienceFrameTable[_badConscienceAnim+24];
+
+			updateSceneAnim(0x0E, frame);
+			updateWithText();
+
+			nextFrame = _system->getMillis() + _rnd.getRandomNumberRng(4, 8) * _tickLength;
+		}
+
+		updateWithText();
+
+		const uint32 curTime = _system->getMillis();
+		if ((textEnabled() && !speechEnabled() && curTime > endTime) || (speechEnabled() && !snd_voiceIsPlaying()) || skipFlag()) {
+			snd_stopVoice();
+			resetSkipFlag();
+			nextFrame = curTime;
+			running = false;
+		}
+
+		delay(10);
+	}
+}
+
 } // end of namespace Kyra
+


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