diff options
| -rw-r--r-- | engines/kyra/gui_lol.cpp | 2 | ||||
| -rw-r--r-- | engines/kyra/lol.cpp | 2 | ||||
| -rw-r--r-- | engines/kyra/lol.h | 10 | ||||
| -rw-r--r-- | engines/kyra/script_lol.cpp | 85 | ||||
| -rw-r--r-- | engines/kyra/sprites_lol.cpp | 3 | ||||
| -rw-r--r-- | engines/kyra/staticres.cpp | 2 | ||||
| -rw-r--r-- | engines/kyra/text_lol.cpp | 4 | ||||
| -rw-r--r-- | engines/kyra/text_lol.h | 4 | 
8 files changed, 96 insertions, 16 deletions
diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp index 34ae13b000..379eb304b6 100644 --- a/engines/kyra/gui_lol.cpp +++ b/engines/kyra/gui_lol.cpp @@ -1342,7 +1342,7 @@ int LoLEngine::clickedWall(Button *button) {  	return res;  } -int LoLEngine::clickedScene(Button *button) { +int LoLEngine::clickedSequenceWindow(Button *button) {  	return 1;  } diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 96fddd8660..513f45fd51 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -1428,7 +1428,7 @@ bool LoLEngine::characterSays(int track, int charId, bool redraw) {  	return r ? textEnabled() : 1;  } -int LoLEngine::playCharacterScriptChat(int charId, int mode, int unk1, char *str, EMCState *script, int16 *paramList, int16 paramIndex) { +int LoLEngine::playCharacterScriptChat(int charId, int mode, int unk1, char *str, EMCState *script, const uint16 *paramList, int16 paramIndex) {  	int ch = 0;  	bool skipAnim = false; diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index 23ae1831df..673dbdd9dd 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -434,7 +434,7 @@ private:  	int clickedInventorySlot(Button *button);  	int clickedInventoryScroll(Button *button);  	int clickedWall(Button *button); -	int clickedScene(Button *button); +	int clickedSequenceWindow(Button *button);  	int clickedScroll(Button *button);  	int clickedUnk23(Button *button);  	int clickedUnk24(Button *button); @@ -468,7 +468,7 @@ private:  	// text  	bool characterSays(int track, int charId, bool redraw); -	int playCharacterScriptChat(int charId, int y, int unk1, char *str, EMCState *script, int16 *paramList, int16 paramIndex); +	int playCharacterScriptChat(int charId, int y, int unk1, char *str, EMCState *script, const uint16 *paramList, int16 paramIndex);  	TextDisplayer_LoL *_txt; @@ -490,6 +490,7 @@ private:  	uint16 _unkEMC46[16];  	// emc opcode +	int olol_drawScene(EMCState *script);  	int olol_setGameFlag(EMCState *script);  	int olol_testGameFlag(EMCState *script);  	int olol_loadLevelGraphics(EMCState *script); @@ -552,6 +553,11 @@ private:  	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_fadeClearWindow(const TIM *tim, const uint16 *param); +	int tlol_playDialogueTalkText(const TIM *tim, const uint16 *param); +  	Common::Array<const TIMOpcode*> _timIngameOpcodes;  	// translation diff --git a/engines/kyra/script_lol.cpp b/engines/kyra/script_lol.cpp index 77bfba3025..c81e0e4aa2 100644 --- a/engines/kyra/script_lol.cpp +++ b/engines/kyra/script_lol.cpp @@ -110,6 +110,12 @@ bool LoLEngine::checkSceneUpdateNeed(int func) {  	return false;  } +int LoLEngine::olol_drawScene(EMCState *script) { +	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawScene(%p) (%d)", (const void *)script, stackPos(0)); +	drawScene(stackPos(0)); +	return 1; +} +  int LoLEngine::olol_setGameFlag(EMCState *script) {  	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setGameFlag(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));  	if (stackPos(1)) @@ -883,6 +889,75 @@ int LoLEngine::tlol_displayText(const TIM *tim, const uint16 *param) {  	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]); +	this->initDialogueSequence(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]); +	return 1; +} + +int LoLEngine::tlol_fadeClearWindow(const TIM *tim, const uint16 *param) { +	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_fadeClearWindow(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]); +	uint8 *tmp = 0; + +	switch (param[0]) { +		case 0: +			_screen->fadeClearSceneWindow(10); +			break; + +		case 1: +			tmp = _screen->getPalette(3); +			memcpy(tmp + 0x180, _screen->_currentPalette + 0x180, 0x180); +			_screen->loadSpecialColours(tmp); +			_screen->fadePalette(tmp, 10); +			_screen->_fadeFlag = 0; +			break; + +		case 2: +			_screen->fadeToBlack(10); +			break; + +		case 3: +			tmp = _screen->getPalette(3); +			_screen->loadSpecialColours(tmp); +			_screen->fadePalette(tmp, 10); +			_screen->_fadeFlag = 0; +			break; + +		case 4: +			if (_screen->_fadeFlag != 2) +				_screen->fadeClearSceneWindow(10); +			gui_drawPlayField(); +			_screen->setPaletteBrightness(_screen->_currentPalette, _brightness, _lampOilStatus); +			_screen->_fadeFlag = 0; +			break; + +		case 5: +			tmp = _screen->getPalette(3); +			_screen->loadSpecialColours(tmp); +			_screen->fadePalette(_screen->getPalette(1), 10); +			_screen->_fadeFlag = 0; +			break; + +		default: +			break; +	} + +	return 1; +} + +int LoLEngine::tlol_playDialogueTalkText(const TIM *tim, const uint16 *param) { +	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_playDialogueTalkText(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]); +	if (!snd_playCharacterSpeech(param[0], 0, 0) || textEnabled()) +		_txt->printDialogueText(4, getLangString(param[0]), 0, param, 1); +	return 1; +} +  #pragma mark -  typedef Common::Functor1Mem<EMCState*, int, LoLEngine> OpcodeV2; @@ -902,7 +977,7 @@ void LoLEngine::setupOpcodeTable() {  	// 0x00  	OpcodeUnImpl();  	OpcodeUnImpl(); -	OpcodeUnImpl(); +	Opcode(olol_drawScene);  	Opcode(o1_getRand);  	// 0x04 @@ -1205,14 +1280,14 @@ void LoLEngine::setupOpcodeTable() {  	SetTimOpcodeTable(_timIngameOpcodes);  	// 0x00 -	OpcodeTimUnImpl(); -	OpcodeTimUnImpl(); +	OpcodeTim(tlol_initDialogueSequence); +	OpcodeTim(tlol_restoreSceneAfterDialogueSequence);  	OpcodeTimUnImpl();  	OpcodeTimUnImpl();  	// 0x04  	OpcodeTimUnImpl(); -	OpcodeTimUnImpl(); +	OpcodeTim(tlol_fadeClearWindow);  	OpcodeTimUnImpl();  	OpcodeTimUnImpl(); @@ -1224,7 +1299,7 @@ void LoLEngine::setupOpcodeTable() {  	// 0x0C  	OpcodeTimUnImpl(); -	OpcodeTimUnImpl(); +	OpcodeTim(tlol_playDialogueTalkText);  	OpcodeTimUnImpl();  	OpcodeTimUnImpl(); diff --git a/engines/kyra/sprites_lol.cpp b/engines/kyra/sprites_lol.cpp index 603a45cb93..84d4fbce87 100644 --- a/engines/kyra/sprites_lol.cpp +++ b/engines/kyra/sprites_lol.cpp @@ -499,6 +499,7 @@ void LoLEngine::drawMonster(uint16 id) {  	if (curFrm == -1) {  		////////////  		// TODO +		curFrm=curFrm;  	} else {  		int d = m->flags & 7; @@ -934,8 +935,6 @@ void LoLEngine::shiftMonster(MonsterInPlay *monster) {  	if (monster->properties->flags & 0x400)  		return; - -  }  } // end of namespace Kyra diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index df14925037..a45149a1e6 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -1861,7 +1861,7 @@ void LoLEngine::assignButtonCallback(Button *button, int index) {  		cb(clickedInventoryScroll),  		cb(clickedWall),  		cb(clickedWall), -		cb(clickedScene), +		cb(clickedSequenceWindow),  		cb(clickedUpArrow),  		cb(clickedDownArrow),  		cb(clickedLeftArrow), diff --git a/engines/kyra/text_lol.cpp b/engines/kyra/text_lol.cpp index 7e4648149d..ac7d7c4a6c 100644 --- a/engines/kyra/text_lol.cpp +++ b/engines/kyra/text_lol.cpp @@ -131,7 +131,7 @@ void TextDisplayer_LoL::setAnimParameters(const char *str, int x, uint8 col1, ui  	}  } -void TextDisplayer_LoL::printDialogueText(int dim, char *str, EMCState *script, int16 *paramList, int16 paramIndex) { +void TextDisplayer_LoL::printDialogueText(int dim, char *str, EMCState *script, const uint16 *paramList, int16 paramIndex) {  	_colour1prot = false;  	int oldDim = _screen->curDimIndex(); @@ -213,7 +213,7 @@ void TextDisplayer_LoL::printMessage(uint16 type, char *str, ...) {  	_vm->_fadeText = false;  } -void TextDisplayer_LoL::preprocessString(char *str, EMCState *script, int16 *paramList, int16 paramIndex) { +void TextDisplayer_LoL::preprocessString(char *str, EMCState *script, const uint16 *paramList, int16 paramIndex) {  	char *dst = _dialogueBuffer;  	for (char *s = str; *s;) { diff --git a/engines/kyra/text_lol.h b/engines/kyra/text_lol.h index cc31480e7b..82eebd862d 100644 --- a/engines/kyra/text_lol.h +++ b/engines/kyra/text_lol.h @@ -44,7 +44,7 @@ public:  	void setupField(bool mode);  	void expandField(); -	void printDialogueText(int dim, char *str, EMCState *script, int16 *paramList, int16 paramIndex); +	void printDialogueText(int dim, char *str, EMCState *script, const uint16 *paramList, int16 paramIndex);  	void printMessage(uint16 type, char *str, ...);  	int16 _scriptParameter; @@ -54,7 +54,7 @@ private:  	char parseCommand();  	void readNextPara();  	void printLine(char *str); -	void preprocessString(char *str, EMCState *script, int16 *paramList, int16 paramIndex); +	void preprocessString(char *str, EMCState *script, const uint16 *paramList, int16 paramIndex);  	//typedef void (LoLEngine::*DialogueAnimCallback)(const char *str, uint16 lineWidth, uint8 col1, uint8 col2);  	//DialogueAnimCallback _dlgAnimCallback;  | 
