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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sun Mar 8 04:26:21 CET 2009


Revision: 39210
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39210&view=rev
Author:   athrxx
Date:     2009-03-08 03:26:21 +0000 (Sun, 08 Mar 2009)

Log Message:
-----------
LOL: some opcodes for the library room (so that the game will at least not freeze when clicking one of the books)

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/lol.h
    scummvm/trunk/engines/kyra/script_lol.cpp
    scummvm/trunk/engines/kyra/script_tim.h
    scummvm/trunk/engines/kyra/timer.cpp

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-03-08 02:17:14 UTC (rev 39209)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-03-08 03:26:21 UTC (rev 39210)
@@ -196,6 +196,7 @@
 	memset(_charStatsTemp, 0, 5 * sizeof(int));
 	
 	_unkBt1 = _unkBt2 = 0;
+	_dialogueField = false;
 	
 	_buttonData = 0;
 	_activeButtons = 0;
@@ -1096,7 +1097,7 @@
 	}
 }
 
-void LoLEngine::initDialogueSequence(int controlMode) {
+void LoLEngine::initAnimatedDialogue(int controlMode) {
 	resetPortraitsArea();
 	gui_prepareForSequence(112, 0, 176, 120, controlMode);
 
@@ -1140,7 +1141,7 @@
 	}
 }
 
-void LoLEngine::restoreSceneAfterDialogueSequence(int redraw) {
+void LoLEngine::restoreAfterAnimatedDialogue(int redraw) {
 	gui_enableControls();
 	_txt->setupField(false);
 	_updateFlags &= 0xffdf;
@@ -1164,6 +1165,35 @@
 	enableSysTimer(2);
 }
 
+void LoLEngine::initNonAnimatedDialogue(int controlMode, int pageNum) {
+	
+	_dialogueField = true;
+	
+}
+
+void LoLEngine::restoreAfterNonAnimatedDialogue(int controlMode) {
+	if (!_dialogueField)
+		return;
+
+	updatePortraits();
+	_hideControls = controlMode;
+	calcCharPortraitXpos();
+
+	if (_hideControls) {
+		_screen->modifyScreenDim(4, 11, 124, 28, 45);
+		_screen->modifyScreenDim(5, 85, 123, 233, 54);
+		_updateFlags &= 0xfffd;
+	} else {
+		const ScreenDim *d = _screen->getScreenDim(5);
+		_screen->fillRect(d->sx, d->sy, d->sx + d->w - 2, d->sy + d->h - 2, d->unkA);
+		_screen->clearDim(4);
+		_screen->setScreenDim(4);
+		_txt->setupField(false);
+	}
+
+	_dialogueField = false;
+}
+
 void LoLEngine::resetPortraitsArea() {
 	_hideInventory = 1;
 	if (!textEnabled() || (!(_hideControls & 2)))

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-03-08 02:17:14 UTC (rev 39209)
+++ scummvm/trunk/engines/kyra/lol.h	2009-03-08 03:26:21 UTC (rev 39210)
@@ -529,19 +529,22 @@
 	int olol_initMonster(EMCState *script);
 	int olol_loadMonsterProperties(EMCState *script);
 	int olol_moveMonster(EMCState *script);
+	int olol_dialogueBox(EMCState *script);
 	int olol_setScriptTimer(EMCState *script);
 	int olol_loadTimScript(EMCState *script);
 	int olol_runTimScript(EMCState *script);
 	int olol_releaseTimScript(EMCState *script);
-	int olol_initDialogueSequence(EMCState *script);
-	int olol_restoreSceneAfterDialogueSequence(EMCState *script);
+	int olol_initAnimatedDialogue(EMCState *script);
+	int olol_restoreAfterAnimatedDialogue(EMCState *script);
 	int olol_getItemInHand(EMCState *script);
 	int olol_giveItemToMonster(EMCState *script);
 	int olol_loadLangFile(EMCState *script);
 	int olol_playSoundEffect(EMCState *script);
+	int olol_processDialogue(EMCState *script);
 	int olol_stopTimScript(EMCState *script);
 	int olol_getWallFlags(EMCState *script);
 	int olol_playCharacterScriptChat(EMCState *script);
+	int olol_update(EMCState *script);
 	int olol_loadSoundFile(EMCState *script);
 	int olol_stopCharacterSpeech(EMCState *script);
 	int olol_setPaletteBrightness(EMCState *script);
@@ -550,6 +553,8 @@
 	int olol_checkForMonsterMode1(EMCState *script);
 	int olol_setNextFunc(EMCState *script);
 	int olol_setDoorState(EMCState *script);
+	int olol_initNonAnimatedDialogue(EMCState *script);
+	int olol_restoreAfterNonAnimatedDialogue(EMCState *script);
 	int olol_assignCustomSfx(EMCState *script);
 	int olol_resetPortraitsArea(EMCState *script);
 	int olol_enableSysTimer(EMCState *script);
@@ -567,8 +572,8 @@
 	int tlol_processWsaFrame(const TIM *tim, const uint16 *param);
 	int tlol_displayText(const TIM *tim, const uint16 *param);
 
-	int tlol_initDialogueSequence(const TIM *tim, const uint16 *param);
-	int tlol_restoreSceneAfterDialogueSequence(const TIM *tim, const uint16 *param);
+	int tlol_initAnimatedDialogue(const TIM *tim, const uint16 *param);
+	int tlol_restoreAfterAnimatedDialogue(const TIM *tim, const uint16 *param);
 	int tlol_giveItem(const TIM *tim, const uint16 *param);
 	int tlol_setPartyPosition(const TIM *tim, const uint16 *param);
 	int tlol_fadeClearWindow(const TIM *tim, const uint16 *param);
@@ -596,8 +601,10 @@
 
 	// graphics
 	void setupScreenDims();
-	void initDialogueSequence(int controlMode);
-	void restoreSceneAfterDialogueSequence(int redraw);
+	void initAnimatedDialogue(int controlMode);
+	void restoreAfterAnimatedDialogue(int redraw);
+	void initNonAnimatedDialogue(int controlMode, int pageNum);
+	void restoreAfterNonAnimatedDialogue(int controlMode);
 	void resetPortraitsArea();
 	void toggleSelectedCharacterFrame(bool mode);
 	void fadeText();
@@ -605,6 +612,7 @@
 	void generateBrightnessPalette(uint8 *src, uint8 *dst, int brightness, int modifier);
 	void updateWsaAnimations();
 
+	bool _dialogueField;
 	uint8 **_itemIconShapes;
 	int _numItemIconShapes;
 	uint8 **_itemShapes;

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-08 02:17:14 UTC (rev 39209)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-08 03:26:21 UTC (rev 39210)
@@ -716,6 +716,13 @@
 	return 1;
 }
 
+int LoLEngine::olol_dialogueBox(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_dialogueBox(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
+
+	_tim->drawDialogueBox(stackPos(0), getLangString(stackPos(1)), getLangString(stackPos(2)), getLangString(stackPos(3)));
+	return 1;
+}
+
 int LoLEngine::olol_setScriptTimer(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setScriptTimer(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
 	uint8 id = 0x50 + stackPos(0);
@@ -728,7 +735,7 @@
 		_timer->disable(id);
 	}
 
-	return true;
+	return 1;
 }
 
 int LoLEngine::olol_loadTimScript(EMCState *script) {
@@ -752,15 +759,15 @@
 	return 1;
 }
 
-int LoLEngine::olol_initDialogueSequence(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_initDialogueSequence(%p) (%d)", (const void *)script, stackPos(0));
-	initDialogueSequence(stackPos(0));
+int LoLEngine::olol_initAnimatedDialogue(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_initAnimatedDialogue(%p) (%d)", (const void *)script, stackPos(0));
+	initAnimatedDialogue(stackPos(0));
 	return 1;
 }
 
-int LoLEngine::olol_restoreSceneAfterDialogueSequence(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreSceneAfterDialogueSequence(%p) (%d)", (const void *)script, stackPos(0));
-	restoreSceneAfterDialogueSequence(stackPos(0));
+int LoLEngine::olol_restoreAfterAnimatedDialogue(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreAfterAnimatedDialogue(%p) (%d)", (const void *)script, stackPos(0));
+	restoreAfterAnimatedDialogue(stackPos(0));
 	return 1;
 }
 
@@ -793,6 +800,11 @@
 	return 1;
 }
 
+int LoLEngine::olol_processDialogue(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_processDialogue(%p)", (const void *)script);
+	return _tim->processDialogue();
+}
+
 int LoLEngine::olol_stopTimScript(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_stopTimScript(%p) (%d)", (const void *)script, stackPos(0));
 	_tim->stopAllFuncs(_activeTim[stackPos(0)]);
@@ -811,6 +823,12 @@
 	return playCharacterScriptChat(stackPos(0), stackPos(1), 1, getLangString(stackPos(2)), script, 0, 3);
 }
 
+int LoLEngine::olol_update(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_update(%p)", (const void *)script);
+	update();
+	return 1;
+}
+
 int LoLEngine::olol_loadSoundFile(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_loadSoundFile(%p) (%d)", (const void *)script, stackPos(0));
 	snd_loadSoundFile(stackPos(0));
@@ -877,6 +895,18 @@
 	return _emcDoorState;
 }
 
+int LoLEngine::olol_initNonAnimatedDialogue(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_initNonAnimatedDialogue(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+	initNonAnimatedDialogue(stackPos(0), stackPos(1));
+	return 1;
+}
+
+int LoLEngine::olol_restoreAfterNonAnimatedDialogue(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreAfterNonAnimatedDialogue(%p) (%d)", (const void *)script, stackPos(0));
+	restoreAfterNonAnimatedDialogue(stackPos(0));
+	return 1;
+}
+
 int LoLEngine::olol_assignCustomSfx(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignCustomSfx(%p) (%s, %d)", (const void *)script, stackPosString(0), stackPos(1));
 	const char *c = stackPosString(0);
@@ -965,15 +995,15 @@
 	return 1;
 }
 
-int LoLEngine::tlol_initDialogueSequence(const TIM *tim, const uint16 *param) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_initDialogueSequence(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
-	initDialogueSequence(param[0]);
+int LoLEngine::tlol_initAnimatedDialogue(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_initAnimatedDialogue(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	initAnimatedDialogue(param[0]);
 	return 1;
 }
 
-int LoLEngine::tlol_restoreSceneAfterDialogueSequence(const TIM *tim, const uint16 *param) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_restoreSceneAfterDialogueSequence(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
-	restoreSceneAfterDialogueSequence(param[0]);
+int LoLEngine::tlol_restoreAfterAnimatedDialogue(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_restoreAfterAnimatedDialogue(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	restoreAfterAnimatedDialogue(param[0]);
 	return 1;
 }
 
@@ -1200,9 +1230,9 @@
 
 	// 0x44
 	Opcode(olol_moveMonster);
+	Opcode(olol_dialogueBox);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x48
 	Opcode(olol_setScriptTimer);
@@ -1218,8 +1248,8 @@
 
 	// 0x50
 	Opcode(olol_releaseTimScript);
-	Opcode(olol_initDialogueSequence);
-	Opcode(olol_restoreSceneAfterDialogueSequence);
+	Opcode(olol_initAnimatedDialogue);
+	Opcode(olol_restoreAfterAnimatedDialogue);
 	Opcode(olol_getItemInHand);
 
 	// 0x54
@@ -1229,7 +1259,7 @@
 	Opcode(olol_playSoundEffect);
 
 	// 0x58
-	OpcodeUnImpl();
+	Opcode(olol_processDialogue);
 	Opcode(olol_stopTimScript);
 	Opcode(olol_getWallFlags);
 	OpcodeUnImpl();
@@ -1238,7 +1268,7 @@
 	OpcodeUnImpl();
 	OpcodeUnImpl();
 	Opcode(olol_playCharacterScriptChat);
-	OpcodeUnImpl();
+	Opcode(olol_update);
 
 	// 0x60
 	OpcodeUnImpl();
@@ -1307,10 +1337,10 @@
 	OpcodeUnImpl();
 
 	// 0x8C
+	Opcode(olol_initNonAnimatedDialogue);
+	Opcode(olol_restoreAfterNonAnimatedDialogue);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x90
 	OpcodeUnImpl();
@@ -1402,8 +1432,8 @@
 	SetTimOpcodeTable(_timIngameOpcodes);
 
 	// 0x00
-	OpcodeTim(tlol_initDialogueSequence);
-	OpcodeTim(tlol_restoreSceneAfterDialogueSequence);
+	OpcodeTim(tlol_initAnimatedDialogue);
+	OpcodeTim(tlol_restoreAfterAnimatedDialogue);
 	OpcodeTimUnImpl();
 	OpcodeTim(tlol_giveItem);
 

Modified: scummvm/trunk/engines/kyra/script_tim.h
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.h	2009-03-08 02:17:14 UTC (rev 39209)
+++ scummvm/trunk/engines/kyra/script_tim.h	2009-03-08 03:26:21 UTC (rev 39210)
@@ -115,6 +115,9 @@
 	void displayText(uint16 textId, int16 flags);
 	void setupTextPalette(uint index, int fadePalette);
 
+	virtual void drawDialogueBox(int numStr, const char *s1, const char *s2, const char *s3) {}
+	virtual uint16 processDialogue() { return 1; }
+
 	int _drawPage2;
 
 	int _palDelayInc, _palDiff, _palDelayAcc;
@@ -139,7 +142,6 @@
 
 	virtual void update() {}
 	virtual void checkSpeechProgress() {}
-	virtual uint16 processDialogue() { return 1; }
 
 	char _audioFilename[32];
 
@@ -195,6 +197,9 @@
 public:
 	TIMInterpreter_LoL(LoLEngine *engine, Screen_v2 *screen_v2, OSystem *system);
 	Animation *initAnimStruct(int index, const char *filename, int x, int y, int copyPara, int, uint16 wsaFlags);
+
+	void drawDialogueBox(int numStr, const char *s1, const char *s2, const char *s3);
+	uint16 processDialogue();
 		
 private:
 	KyraEngine_v1 *vm();
@@ -202,12 +207,10 @@
 
 	void update();
 	void checkSpeechProgress();
-	uint16 processDialogue();
 	
 	char *getTableString(int id);
 	void advanceToOpcode(int opcode);
 
-	void drawDialogueBox(int numStr, const char *s1, const char *s2, const char *s3);	
 	void drawDialogueButtons();
 
 	LoLEngine *_vm;

Modified: scummvm/trunk/engines/kyra/timer.cpp
===================================================================
--- scummvm/trunk/engines/kyra/timer.cpp	2009-03-08 02:17:14 UTC (rev 39209)
+++ scummvm/trunk/engines/kyra/timer.cpp	2009-03-08 03:26:21 UTC (rev 39210)
@@ -228,10 +228,10 @@
 	
 	if (p) {
 		timer->pauseStartTime = _system->getMillis();
-		timer->enabled ^= 2;
+		timer->enabled |= 2;
 	} else if (timer->pauseStartTime) {
 		int32 elapsedTime = _system->getMillis() - timer->pauseStartTime;
-		timer->enabled ^= 2;
+		timer->enabled &= (~2);
 		timer->lastUpdate += elapsedTime;
 		timer->nextRun += elapsedTime;
 		resync();
@@ -265,7 +265,7 @@
 
 	Iterator timer = Common::find_if(_timers.begin(), _timers.end(), TimerEqual(id));
 	if (timer != _timers.end())
-		timer->enabled &= 2;
+		timer->enabled &= (~1);
 	else
 		warning("TimerManager::disable: No timer %d", id);
 }


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