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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Mar 7 00:59:13 CET 2009


Revision: 39168
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39168&view=rev
Author:   athrxx
Date:     2009-03-06 23:59:12 +0000 (Fri, 06 Mar 2009)

Log Message:
-----------
LOL: - some opcodes for the first throne room sequence

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

Modified: scummvm/trunk/engines/kyra/items_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/items_lol.cpp	2009-03-06 23:52:12 UTC (rev 39167)
+++ scummvm/trunk/engines/kyra/items_lol.cpp	2009-03-06 23:59:12 UTC (rev 39168)
@@ -139,6 +139,34 @@
 	return slot;
 }
 
+bool LoLEngine::addItemToInventory(int itemIndex) {
+	int pos = 0;
+	int i = 0;
+
+	for (; i < 48; i++) {
+		pos = _inventoryCurItem + i;
+		if (pos > 47)
+			pos -= 48;
+
+		if (!_inventory[pos])
+			break;
+	}
+
+	if (i == 48)
+		return false;
+
+	while ((_inventoryCurItem > pos) || ((_inventoryCurItem + 9) <= pos)) {
+		if (++_inventoryCurItem > 47)
+			_inventoryCurItem -= 48;
+		gui_drawInventory();
+	}
+
+	_inventory[pos] = itemIndex;
+	gui_drawInventory();
+
+	return true;
+}
+
 bool LoLEngine::testUnkItemFlags(int itemIndex) {
 	if (!(_itemsInPlay[itemIndex].shpCurFrame_flg & 0x4000))
 		return false;

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-03-06 23:52:12 UTC (rev 39167)
+++ scummvm/trunk/engines/kyra/lol.h	2009-03-06 23:59:12 UTC (rev 39168)
@@ -501,6 +501,7 @@
 	int olol_loadLevelGraphics(EMCState *script);
 	int olol_loadCmzFile(EMCState *script);
 	int olol_loadMonsterShapes(EMCState *script);
+	int olol_deleteHandItem(EMCState *script);
 	int olol_allocItemPropertiesBuffer(EMCState *script);
 	int olol_setItemProperty(EMCState *script);
 	int olol_makeItem(EMCState *script);
@@ -560,9 +561,14 @@
 
 	int tlol_initDialogueSequence(const TIM *tim, const uint16 *param);
 	int tlol_restoreSceneAfterDialogueSequence(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);
 	int tlol_update(const TIM *tim, const uint16 *param);
+	int tlol_loadSoundFile(const TIM *tim, const uint16 *param);
+	int tlol_playMusicTrack(const TIM *tim, const uint16 *param);	
 	int tlol_playDialogueTalkText(const TIM *tim, const uint16 *param);
+	int tlol_playSoundEffect(const TIM *tim, const uint16 *param);
 
 	Common::Array<const TIMOpcode*> _timIngameOpcodes;
 
@@ -883,6 +889,7 @@
 	// items
 	void giveCredits(int credits, int redraw);
 	int makeItem(int itemIndex, int curFrame, int flags);
+	bool addItemToInventory(int itemIndex);
 	bool testUnkItemFlags(int itemIndex);
 	void deleteItem(int itemIndex);
 	ItemInPlay *findItem(uint16 index);

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-06 23:52:12 UTC (rev 39167)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-06 23:59:12 UTC (rev 39168)
@@ -157,6 +157,14 @@
 	return 1;
 }
 
+int LoLEngine::olol_deleteHandItem(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_deleteHandItem(%p) ()", (const void *)script);
+	int r = _itemInHand;
+	deleteItem(_itemInHand);
+	setHandItem(0);
+	return r;
+}
+
 int LoLEngine::olol_allocItemPropertiesBuffer(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_allocItemPropertiesBuffer(%p) (%d)", (const void *)script, stackPos(0));
 	delete[] _itemProperties;
@@ -902,6 +910,28 @@
 	return 1;
 }
 
+int LoLEngine::tlol_giveItem(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_giveItem(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	int item = makeItem(param[0], param[1], param[2]);
+	if (addItemToInventory(item))
+		return 1;
+
+	deleteItem(item);
+	return 0;
+}
+
+int LoLEngine::tlol_setPartyPosition(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_setPartyPosition(%p, %p) (%d, %d)", (const void*)tim, (const void*)param, param[0], param[1]);
+	if (param[0] == 1) {
+		_currentDirection = param[1];
+	} else if (param[0] == 0) {
+		_currentBlock = param[1];
+		calcCoordinates(_partyPosX, _partyPosY, _currentBlock, 0x80, 0x80);
+	}
+
+	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;
@@ -958,6 +988,18 @@
 	return 1;
 }
 
+int LoLEngine::tlol_loadSoundFile(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_loadSoundFile(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	snd_loadSoundFile(param[0]);
+	return 1;
+}
+
+int LoLEngine::tlol_playMusicTrack(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_playMusicTrack(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	snd_playTrack(param[0]);
+	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())
@@ -965,6 +1007,12 @@
 	return 1;
 }
 
+int LoLEngine::tlol_playSoundEffect(const TIM *tim, const uint16 *param) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_playSoundEffect(%p, %p) (%d)", (const void*)tim, (const void*)param, param[0]);
+	snd_playSoundEffect(param[0], -1);
+	return 1;
+}
+
 #pragma mark -
 
 typedef Common::Functor1Mem<EMCState*, int, LoLEngine> OpcodeV2;
@@ -1000,7 +1048,7 @@
 	Opcode(olol_loadMonsterShapes);
 
 	// 0x0C
-	OpcodeUnImpl();
+	Opcode(olol_deleteHandItem);
 	Opcode(olol_allocItemPropertiesBuffer);
 	Opcode(olol_setItemProperty);
 	Opcode(olol_makeItem);
@@ -1290,10 +1338,10 @@
 	OpcodeTim(tlol_initDialogueSequence);
 	OpcodeTim(tlol_restoreSceneAfterDialogueSequence);
 	OpcodeTimUnImpl();
-	OpcodeTimUnImpl();
+	OpcodeTim(tlol_giveItem);
 
 	// 0x04
-	OpcodeTimUnImpl();
+	OpcodeTim(tlol_setPartyPosition);
 	OpcodeTim(tlol_fadeClearWindow);
 	OpcodeTimUnImpl();
 	OpcodeTimUnImpl();
@@ -1302,13 +1350,13 @@
 	OpcodeTimUnImpl();
 	OpcodeTim(tlol_update);
 	OpcodeTimUnImpl();
-	OpcodeTimUnImpl();
+	OpcodeTim(tlol_loadSoundFile);
 
 	// 0x0C
-	OpcodeTimUnImpl();
+	OpcodeTim(tlol_playMusicTrack);
 	OpcodeTim(tlol_playDialogueTalkText);
+	OpcodeTim(tlol_playSoundEffect);
 	OpcodeTimUnImpl();
-	OpcodeTimUnImpl();
 
 	// 0x10
 	OpcodeTimUnImpl();


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