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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat May 30 21:48:14 CEST 2009


Revision: 41041
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41041&view=rev
Author:   athrxx
Date:     2009-05-30 19:48:13 +0000 (Sat, 30 May 2009)

Log Message:
-----------
LOL: implemented some opcodes required for yvel city

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.cpp
    scummvm/trunk/engines/kyra/script_tim.h
    scummvm/trunk/engines/kyra/text_lol.cpp

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-05-30 19:48:13 UTC (rev 41041)
@@ -101,7 +101,6 @@
 	_monsterShapesEx = 0;
 	_gameShapeMap = 0;
 	memset(_monsterAnimType, 0, 3);
-	_pageSavedFlag = false;
 	_healOverlay = 0;
 	_swarmSpellStatus = 0;
 
@@ -833,7 +832,7 @@
 	_currentLevel = 1;
 
 	giveCredits(41, 0);
-	_inventory[0] = makeItem(132, 0, 0);
+	_inventory[0] = makeItem(216, 0, 0);
 	_inventory[1] = makeItem(217, 0, 0);
 	_inventory[2] = makeItem(218, 0, 0);
 
@@ -1635,25 +1634,6 @@
 		_tim->updateBackgroundAnimation(i);
 }
 
-void LoLEngine::savePage5() {
-	if (_pageSavedFlag)
-		return;
-
-	_screen->copyRegionToBuffer(5, 0, 0, 320, 200, _pageBuffer2);
-	_pageSavedFlag = true;
-}
-
-void LoLEngine::restorePage5() {
-	if (!_pageSavedFlag)
-		return;
-
-	for (int i = 0; i < 6; i++)
-		_tim->freeAnimStruct(i);
-
-	_screen->copyBlockToPage(5, 0, 0, 320, 200, _pageBuffer2);
-	_pageSavedFlag = false;
-}
-
 void LoLEngine::loadTalkFile(int index) {
 	char file[8];
 

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/lol.h	2009-05-30 19:48:13 UTC (rev 41041)
@@ -740,8 +740,10 @@
 	int olol_getNextActiveCharacter(EMCState *script);
 	int olol_paralyzePoisonCharacter(EMCState *script);
 	int olol_drawCharPortrait(EMCState *script);
+	int olol_getAnimationLastPart(EMCState *script);
 	int olol_assignSpecialGuiShape(EMCState *script);
 	int olol_findInventoryItem(EMCState *script);
+	int olol_restoreFadePalette(EMCState *script);
 	int olol_changeItemTypeOrFlag(EMCState *script);
 	int olol_placeInventoryItemInHand(EMCState *script);
 	int olol_castSpell(EMCState *script);
@@ -750,6 +752,8 @@
 	int olol_disableControls(EMCState *script);
 	int olol_enableControls(EMCState *script);
 	int olol_gasExplosion(EMCState *script);
+	int olol_calcNewBlockPosition(EMCState *script);
+	int olol_updateDrawPage2(EMCState *script);
 	int olol_characterSays(EMCState *script);
 	int olol_queueSpeech(EMCState *script);
 	int olol_getItemPrice(EMCState *script);
@@ -816,9 +820,7 @@
 	void generateBrightnessPalette(uint8 *src, uint8 *dst, int brightness, int modifier);
 	void generateFlashPalette(uint8 *src, uint8 *dst, int colorFlags);
 	void updateSequenceBackgroundAnimations();
-	void savePage5();
-	void restorePage5();
-
+	
 	bool _dialogueField;
 	uint8 **_itemIconShapes;
 	int _numItemIconShapes;
@@ -836,8 +838,6 @@
 
 	uint8 *_characterFaceShapes[40][3];
 
-	bool _pageSavedFlag;
-
 	// characters
 	bool addCharacter(int id);
 	void setTemporaryFaceFrame(int charNum, int frame, int updateDelay, int redraw);

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-05-30 19:48:13 UTC (rev 41041)
@@ -1729,13 +1729,19 @@
 
 int LoLEngine::olol_savePage5(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_savePage5(%p)", (const void *)script);
-	savePage5();
+	// Not implemented: The original code uses this to back up and restore page 5 which is used
+	// to load WSA files. Since our WSA player provides its own memory buffers we don't
+	// need to use page 5.
 	return 1;
 }
 
 int LoLEngine::olol_restorePage5(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restorePage5(%p)", (const void *)script);
-	restorePage5();
+	// Not implemented: The original code uses this to back up and restore page 5 which is used
+	// to load WSA files. Since our WSA player provides its own memory buffers we don't
+	// need to use page 5.
+	for (int i = 0; i < 6; i++)
+		_tim->freeAnimStruct(i);
 	return 1;
 }
 
@@ -1869,7 +1875,7 @@
 }
 
 int LoLEngine::olol_drawCharPortrait(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawCharPortrait(%p)  (%d)", (const void *)script, stackPos(0));
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawCharPortrait(%p) (%d)", (const void *)script, stackPos(0));
 	int charNum = stackPos(0);
 	if (charNum == -1)
 		gui_drawAllCharPortraitsWithStats();
@@ -1878,8 +1884,13 @@
 	return 1;
 }
 
+int LoLEngine::olol_getAnimationLastPart(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getAnimationLastPart(%p) (%d)", (const void *)script, stackPos(0));
+	return _tim->resetAnimationLastPart(stackPos(0));
+}
+
 int LoLEngine::olol_assignSpecialGuiShape(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignSpecialGuiShape(%p)  (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignSpecialGuiShape(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
 	if (stackPos(0)) {
 		_specialGuiShape = _levelShapes[_levelShapeProperties[_wllShapeMap[stackPos(0)]].shapeIndex[stackPos(1)]];
 		_specialGuiShapeX = stackPos(2);
@@ -1894,7 +1905,7 @@
 }
 
 int LoLEngine::olol_findInventoryItem(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_findInventoryItem(%p)  (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_findInventoryItem(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 	if (stackPos(0) == 0) {
 		for (int i = 0; i < 48; i++) {
 			if (!_inventory[i])
@@ -1922,8 +1933,16 @@
 	return -1;
 }
 
+int LoLEngine::olol_restoreFadePalette(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreFadePalette(%p)", (const void *)script);
+	memcpy(_screen->_currentPalette, _screen->getPalette(1), 384);
+	_screen->fadePalette(_screen->_currentPalette, 10);
+	_screen->_fadeFlag = 0;
+	return 1;
+}
+
 int LoLEngine::olol_changeItemTypeOrFlag(EMCState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_changeItemTypeOrFlag(%p)  (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_changeItemTypeOrFlag(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 	if (stackPos(0) < 1)
 		return 0;
 
@@ -2050,6 +2069,17 @@
 	return 1;
 }
 
+int LoLEngine::olol_calcNewBlockPosition(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_calcNewBlockPosition(%p)  (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+	return calcNewBlockPosition(stackPos(0), stackPos(1));
+}
+
+int LoLEngine::olol_updateDrawPage2(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_updateDrawPage2(%p)", (const void *)script);
+	updateDrawPage2();
+	return 1;
+}
+
 int LoLEngine::olol_characterSays(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_characterSays(%p)  (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 	if (stackPos(0) == -1) {
@@ -2576,13 +2606,13 @@
 	OpcodeUnImpl();
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(olol_getAnimationLastPart);
 
 	// 0xA4
 	Opcode(olol_assignSpecialGuiShape);
 	Opcode(olol_findInventoryItem);
+	Opcode(olol_restoreFadePalette);
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0xA8
 	OpcodeUnImpl();
@@ -2606,12 +2636,12 @@
 	Opcode(olol_enableControls);
 	OpcodeUnImpl();
 	Opcode(olol_gasExplosion);
-	OpcodeUnImpl();
+	Opcode(olol_calcNewBlockPosition);
 
 	// 0xB8
 	OpcodeUnImpl();
+	Opcode(olol_updateDrawPage2);
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 	Opcode(olol_characterSays);
 
 	// 0xBC

Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_tim.cpp	2009-05-30 19:48:13 UTC (rev 41041)
@@ -1065,6 +1065,13 @@
 	}
 }
 
+int TIMInterpreter_LoL::resetAnimationLastPart(int animIndex) {
+	Animation *anim = &_animations[animIndex];
+	int8 res = -1;
+	SWAP(res, anim->lastPart);
+	return res;
+}
+
 void TIMInterpreter_LoL::drawDialogueButtons() {
 	int cp = _screen->setCurPage(0);
 	Screen::FontId of = _screen->setFont(Screen::FID_6_FNT);

Modified: scummvm/trunk/engines/kyra/script_tim.h
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.h	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_tim.h	2009-05-30 19:48:13 UTC (rev 41041)
@@ -144,6 +144,7 @@
 	virtual void stopBackgroundAnimation(int animIndex) {}
 	virtual void updateBackgroundAnimation(int animIndex) {}
 	virtual void playAnimationPart(int animIndex, int firstFrame, int lastFrame, int delay) {}
+	virtual int resetAnimationLastPart(int animIndex) { return -1; }
 
 	virtual void resetDialogueState(TIM *tim) {}
 
@@ -238,6 +239,7 @@
 	void stopBackgroundAnimation(int animIndex);
 	void updateBackgroundAnimation(int animIndex);
 	void playAnimationPart(int animIndex, int firstFrame, int lastFrame, int delay);
+	int resetAnimationLastPart(int animIndex);
 
 private:
 	KyraEngine_v1 *vm();

Modified: scummvm/trunk/engines/kyra/text_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_lol.cpp	2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/text_lol.cpp	2009-05-30 19:48:13 UTC (rev 41041)
@@ -77,11 +77,10 @@
 
 			for (int i = 177; i > 141; i--) {
 				uint32 endTime = _vm->_system->getMillis() + _vm->_tickLength;
-				_screen->hideMouse();
 				_screen->copyRegion(83, i, 83, i - 1, 235, 3, 0, 0, Screen::CR_NO_P_CHECK);
 				_screen->copyRegion(83, i + 1, 83, i + 1, 235, 1, 2, 0, Screen::CR_NO_P_CHECK);
+				_vm->updateInput();
 				_screen->updateScreen();
-				_screen->showMouse();
 				_vm->delayUntil(endTime);
 			}
 
@@ -98,7 +97,7 @@
 }
 
 void TextDisplayer_LoL::expandField() {
-	uint8 *tmp = _vm->_pageBuffer1 + 1300;
+	uint8 *tmp = _vm->_pageBuffer1 + 13000;
 
 	if (_vm->textEnabled()) {
 		_vm->_fadeText = false;
@@ -110,10 +109,9 @@
 
 		for (int i = 140; i < 177; i++) {
 			uint32 endTime = _vm->_system->getMillis() + _vm->_tickLength;
-			_screen->hideMouse();
 			_screen->copyRegion(0, 0, 83, i, 235, 3, 2, 0, Screen::CR_NO_P_CHECK);
+			_vm->updateInput();
 			_screen->updateScreen();
-			_screen->showMouse();
 			_vm->delayUntil(endTime);
 		}
 


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