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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Tue Mar 10 01:32:21 CET 2009


Revision: 39284
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39284&view=rev
Author:   athrxx
Date:     2009-03-10 00:32:20 +0000 (Tue, 10 Mar 2009)

Log Message:
-----------
LOL: - some opcodes and interface code so that you can at least get out of the shops and Geron's room

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

Modified: scummvm/trunk/engines/kyra/gui_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lol.cpp	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/gui_lol.cpp	2009-03-10 00:32:20 UTC (rev 39284)
@@ -1350,6 +1350,9 @@
 }
 
 int LoLEngine::clickedSequenceWindow(Button *button) {
+	runLevelScript(calcNewBlockPosition(_currentBlock, _currentDirection), 0x40);
+	if (!_seqTrigger || !posWithinRect(_mouseX, _mouseY, _seqWindowX1, _seqWindowY1, _seqWindowX2, _seqWindowY2))
+		_seqTrigger = 0;
 	return 1;
 }
 

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-03-10 00:32:20 UTC (rev 39284)
@@ -152,7 +152,7 @@
 	_lastMouseRegion = 0;
 	_monsterLastWalkDirection = _monsterCountUnk = _monsterShiftAlt = 0;
 	_monsterCurBlock = 0;
-	//_preSeq_X1 = _preSeq_Y1 = _preSeq_X2 = _preSeq_Y2 = 0;
+	_seqWindowX1 = _seqWindowY1 = _seqWindowX2 = _seqWindowY2 = _seqTrigger = 0;
 
 	_dscUnk1 = 0;
 	_dscShapeIndex = 0;
@@ -805,6 +805,7 @@
 	snd_characterSpeaking();
 	fadeText();
 
+	updateInput();
 	_screen->updateScreen();
 }
 
@@ -1126,10 +1127,10 @@
 void LoLEngine::gui_prepareForSequence(int x, int y, int w, int h, int buttonFlags) {
 	setSequenceGui(x, y, w, h, buttonFlags);
 
-	/*_preSeq_X1 = x;
-	_preSeq_Y1 = y;
-	_preSeq_X2 = x + w;
-	_preSeq_Y2 = y + h;*/
+	_seqWindowX1 = x;
+	_seqWindowY1 = y;
+	_seqWindowX2 = x + w;
+	_seqWindowY2 = y + h;
 
 	int mouseOffs = _itemInHand ? 10 : 0;
 	_screen->setMouseCursor(mouseOffs, mouseOffs, getItemIconShapePtr(_itemInHand));

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/lol.h	2009-03-10 00:32:20 UTC (rev 39284)
@@ -519,7 +519,9 @@
 	int olol_freeAnimStruct(EMCState *script);
 	int olol_getDirection(EMCState *script);
 	int olol_setMusicTrack(EMCState *script);
+	int olol_checkRectForMousePointer(EMCState *script);
 	int olol_clearDialogueField(EMCState *script);
+	int olol_loadBitmap(EMCState *script);
 	int olol_getGlobalScriptVar(EMCState *script);
 	int olol_setGlobalScriptVar(EMCState *script);
 	int olol_getGlobalVar(EMCState *script);
@@ -528,7 +530,9 @@
 	int olol_updateSceneAnimations(EMCState *script);
 	int olol_mapShapeToBlock(EMCState *script);
 	int olol_resetBlockShapeAssignment(EMCState *script);
+	int olol_copyRegion(EMCState *script);
 	int olol_initMonster(EMCState *script);
+	int olol_fadeClearSceneWindow(EMCState *script);
 	int olol_loadMonsterProperties(EMCState *script);
 	int olol_moveMonster(EMCState *script);
 	int olol_dialogueBox(EMCState *script);
@@ -547,7 +551,9 @@
 	int olol_getWallFlags(EMCState *script);
 	int olol_playCharacterScriptChat(EMCState *script);
 	int olol_update(EMCState *script);
+	int olol_drawExitButton(EMCState *script);
 	int olol_loadSoundFile(EMCState *script);
+	int olol_playMusicTrack(EMCState *script);
 	int olol_stopCharacterSpeech(EMCState *script);
 	int olol_setPaletteBrightness(EMCState *script);
 	int olol_printMessage(EMCState *script);
@@ -555,6 +561,7 @@
 	int olol_checkForMonsterMode1(EMCState *script);
 	int olol_setNextFunc(EMCState *script);
 	int olol_setDoorState(EMCState *script);
+	int olol_processButtonClick(EMCState *script);
 	int olol_initNonAnimatedDialogue(EMCState *script);
 	int olol_restoreAfterNonAnimatedDialogue(EMCState *script);
 	int olol_assignCustomSfx(EMCState *script);
@@ -850,7 +857,7 @@
 	int16 _dmScaleH;
 
 	int _lastMouseRegion;
-	//int _preSeq_X1, _preSeq_Y1,	_preSeq_X2, _preSeq_Y2;
+	int _seqWindowX1, _seqWindowY1,	_seqWindowX2, _seqWindowY2, _seqTrigger;
 	uint8 _unkGameFlag;
 
 	uint8 *_tempBuffer5120;

Modified: scummvm/trunk/engines/kyra/scene_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lol.cpp	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/scene_lol.cpp	2009-03-10 00:32:20 UTC (rev 39284)
@@ -1163,6 +1163,10 @@
 
 void LoLEngine::setSequenceGui(int x, int y, int w, int h, int enableFlags) {
 	gui_enableSequenceButtons(x, y, w, h, enableFlags);
+	_seqWindowX1 = x;
+	_seqWindowY1 = y;
+	_seqWindowX2 = x + w;
+	_seqWindowY2 = y + h;
 	int offs = _itemInHand ? 10 : 0;
 	_screen->setMouseCursor(offs, offs, getItemIconShapePtr(_itemInHand));
 	setLampMode(0);
@@ -1171,6 +1175,7 @@
 
 void LoLEngine::restoreDefaultGui() {
 	gui_enableDefaultPlayfieldButtons();
+	_seqWindowX1 = _seqWindowY1 = _seqWindowX2 = _seqWindowY2 = _seqTrigger = 0;
 	if (_lampStatusSuspended)
 		resetLampStatus();
 	_lampStatusSuspended = false;

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-10 00:32:20 UTC (rev 39284)
@@ -439,6 +439,11 @@
 	return 1;
 }
 
+int LoLEngine::olol_checkRectForMousePointer(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_checkRectForMousePointer(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
+	return posWithinRect(_mouseX, _mouseY, stackPos(0), stackPos(1), stackPos(2), stackPos(3)) ? 1 : 0;
+}
+
 int LoLEngine::olol_clearDialogueField(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_clearDialogueField(%p) (%d)", (const void *)script, stackPos(0));
 	if (_hideControls && (!textEnabled()))
@@ -452,6 +457,14 @@
 	return 1;
 }
 
+int LoLEngine::olol_loadBitmap(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_clearDialogueField(%p) (%s, %d)", (const void *)script, stackPosString(0), stackPos(1));
+	_screen->loadBitmap(stackPosString(0), 3, 3, _screen->getPalette(3));
+	if (stackPos(1) != 2)
+		_screen->copyPage(3, stackPos(1));
+	return 1;
+}
+
 int LoLEngine::olol_getGlobalScriptVar(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getGlobalScriptVar(%p) (%d)", (const void *)script, stackPos(0));
 	assert(stackPos(0) < 16);
@@ -603,7 +616,16 @@
 	return 1;
 }
 
+int LoLEngine::olol_copyRegion(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_copyRegion(%p) (%d, %d, %d, %d, %d, %d, %d, %d)",
+		(const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7));
+	_screen->copyRegion(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), Screen::CR_NO_P_CHECK);
+	return 1;
+}
+
 int LoLEngine::olol_initMonster(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_initMonster(%p) (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", (const void *)script,
+		stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9), stackPos(10));
 	uint16 x = 0;
 	uint16 y = 0;
 	calcCoordinates(x, y, stackPos(0), stackPos(1), stackPos(2));
@@ -653,6 +675,12 @@
 	return -1;
 }
 
+int LoLEngine::olol_fadeClearSceneWindow(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_fadeClearSceneWindow(%p)", (const void *)script);
+	_screen->fadeClearSceneWindow(10);
+	return 1;
+}
+
 int LoLEngine::olol_loadMonsterProperties(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_loadMonsterProperties(%p) (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",
 		(const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5),
@@ -841,12 +869,42 @@
 	return 1;
 }
 
+int LoLEngine::olol_drawExitButton(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawExitButton(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+	
+	static const uint8 printPara[] = { 0x90, 0x78, 0x0C, 0x9F, 0x80, 0x1E };
+
+	int cp = _screen->setCurPage(0);
+	Screen::FontId cf = _screen->setFont(Screen::FID_6_FNT);
+	int x = printPara[3 * stackPos(0)] << 1;
+	int y = printPara[3 * stackPos(0) + 1];
+	int offs = printPara[3 * stackPos(0) + 2];
+
+	char *str = getLangString(0x4033);
+	int w = _screen->getTextWidth(str);
+	
+	gui_drawBox(x - offs - w, y - 9, w + offs, 9, 136, 251, 252);
+	_screen->printText(str, x - (offs >> 1) - w, y - 7, 144, 0);
+
+	if (stackPos(1))
+		_screen->drawGridBox(x - offs - w + 1, y - 8, w + offs - 2, 7, 1);
+
+	_screen->setFont(cf);
+	_screen->setCurPage(cp);	
+	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));
 	return 1;
 }
 
+int LoLEngine::olol_playMusicTrack(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_playMusicTrack(%p) (%d)", (const void *)script, stackPos(0));
+	return snd_playTrack(stackPos(0));
+}
+
 int LoLEngine::olol_stopCharacterSpeech(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_stopCharacterSpeech(%p)", (const void *)script);
 	snd_stopSpeech(1);
@@ -907,6 +965,15 @@
 	return _emcDoorState;
 }
 
+int LoLEngine::olol_processButtonClick(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_processButtonClick(%p) (%d)", (const void *)script, stackPos(0));
+	int n = _tim->getNumberOfDialogueButtons();
+	_activeTim[stackPos(0)]->procFunc = 0;
+	_activeTim[stackPos(0)]->procParam = n ? n : 1;
+	_tim->setDialogueParameters(0, -1);
+	return 1;
+}
+
 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));
@@ -1188,7 +1255,7 @@
 
 	// 0x20
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(olol_checkRectForMousePointer);
 	Opcode(olol_clearDialogueField);
 	OpcodeUnImpl();
 
@@ -1200,9 +1267,9 @@
 
 	// 0x28
 	OpcodeUnImpl();
+	Opcode(olol_loadBitmap);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x2C
 	OpcodeUnImpl();
@@ -1220,13 +1287,13 @@
 	Opcode(olol_updateSceneAnimations);
 	Opcode(olol_mapShapeToBlock);
 	Opcode(olol_resetBlockShapeAssignment);
-	OpcodeUnImpl();
+	Opcode(olol_copyRegion);
 
 	// 0x38
 	Opcode(olol_initMonster);
+	Opcode(olol_fadeClearSceneWindow);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x3C
 	OpcodeUnImpl();
@@ -1285,14 +1352,14 @@
 	// 0x60
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(olol_drawExitButton);
 	Opcode(olol_loadSoundFile);
 
 	// 0x64
+	Opcode(olol_playMusicTrack);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x68
 	OpcodeUnImpl();
@@ -1340,7 +1407,7 @@
 	OpcodeUnImpl();
 	OpcodeUnImpl();
 	Opcode(olol_setDoorState);
-	OpcodeUnImpl();
+	Opcode(olol_processButtonClick);
 
 	// 0x88
 	OpcodeUnImpl();

Modified: scummvm/trunk/engines/kyra/script_tim.h
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.h	2009-03-10 00:26:40 UTC (rev 39283)
+++ scummvm/trunk/engines/kyra/script_tim.h	2009-03-10 00:32:20 UTC (rev 39284)
@@ -118,6 +118,9 @@
 	virtual void drawDialogueBox(int numStr, const char *s1, const char *s2, const char *s3) {}
 	virtual uint16 processDialogue() { return 1; }
 
+	void setDialogueParameters(int clickedButton, int dlgFunc) { _currentTim->clickedButton = clickedButton; _currentTim->dlgFunc = dlgFunc; }
+	virtual int getNumberOfDialogueButtons() { return 0; }
+
 	int _drawPage2;
 
 	int _palDelayInc, _palDiff, _palDelayAcc;
@@ -200,6 +203,8 @@
 
 	void drawDialogueBox(int numStr, const char *s1, const char *s2, const char *s3);
 	uint16 processDialogue();
+
+	int getNumberOfDialogueButtons() { return _dialogueNumButtons; }
 		
 private:
 	KyraEngine_v1 *vm();


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