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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Mar 28 13:58:34 CET 2009


Revision: 39721
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39721&view=rev
Author:   athrxx
Date:     2009-03-28 12:58:34 +0000 (Sat, 28 Mar 2009)

Log Message:
-----------
LOL: - implemented opcode required for operating the floor plates in the thugs' cave)
- fixed bug (only one of the two thugs in front of the cave was deleted when sneaking into the cave)

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

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-03-28 12:08:43 UTC (rev 39720)
+++ scummvm/trunk/engines/kyra/lol.h	2009-03-28 12:58:34 UTC (rev 39721)
@@ -617,6 +617,7 @@
 	int olol_drawExitButton(EMCState *script);
 	int olol_loadSoundFile(EMCState *script);
 	int olol_playMusicTrack(EMCState *script);
+	int olol_countBlockItems(EMCState *script);
 	int olol_stopCharacterSpeech(EMCState *script);
 	int olol_setPaletteBrightness(EMCState *script);
 	int olol_printMessage(EMCState *script);
@@ -1061,7 +1062,7 @@
 	// monsters
 	void loadMonsterShapes(const char *file, int monsterIndex, int b);
 	void releaseMonsterShapes(int monsterIndex);
-	int disableMonstersForBlock(int block);
+	int deleteMonstersForBlock(int block);
 	void setMonsterMode(MonsterInPlay *monster, int mode);
 	bool updateMonsterAdjustBlocks(MonsterInPlay *monster);
 	void placeMonster(MonsterInPlay *monster, uint16 x, uint16 y);

Modified: scummvm/trunk/engines/kyra/scene_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lol.cpp	2009-03-28 12:08:43 UTC (rev 39720)
+++ scummvm/trunk/engines/kyra/scene_lol.cpp	2009-03-28 12:58:34 UTC (rev 39721)
@@ -84,7 +84,7 @@
 	runInfScript(filename);
 
 	addLevelItems();
-	disableMonstersForBlock(_currentBlock);
+	deleteMonstersForBlock(_currentBlock);
 
 	_screen->generateGrayOverlay(_screen->_currentPalette, _screen->_grayOverlay, 32, 16, 0, 0, 128, true);
 

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-28 12:08:43 UTC (rev 39720)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-03-28 12:58:34 UTC (rev 39721)
@@ -115,7 +115,7 @@
 int LoLEngine::olol_setWallType(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setWallType(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 	if (_wllWallFlags[stackPos(2)] & 4)
-		disableMonstersForBlock(stackPos(0));
+		deleteMonstersForBlock(stackPos(0));
 	setWallType(stackPos(0), stackPos(1), stackPos(2));
 	return 1;
 }
@@ -1134,6 +1134,20 @@
 	return snd_playTrack(stackPos(0));
 }
 
+int LoLEngine::olol_countBlockItems(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_countBlockItems(%p) (%d)", (const void *)script, stackPos(0));
+	uint16 o = _levelBlockProperties[stackPos(0)].assignedObjects;
+	int res = 0;
+
+	while (o) {
+		if (!(o & 0x8000))
+			res++;
+		o = findObject(o)->nextAssignedObject;
+	}
+
+	return res;
+}
+
 int LoLEngine::olol_stopCharacterSpeech(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_stopCharacterSpeech(%p)", (const void *)script);
 	snd_stopSpeech(1);
@@ -1727,8 +1741,8 @@
 	// 0x64
 	Opcode(olol_playMusicTrack);
 	OpcodeUnImpl();
+	Opcode(olol_countBlockItems);
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x68
 	OpcodeUnImpl();

Modified: scummvm/trunk/engines/kyra/sprites_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sprites_lol.cpp	2009-03-28 12:08:43 UTC (rev 39720)
+++ scummvm/trunk/engines/kyra/sprites_lol.cpp	2009-03-28 12:58:34 UTC (rev 39721)
@@ -135,26 +135,28 @@
 	}
 }
 
-int LoLEngine::disableMonstersForBlock(int block) {
+int LoLEngine::deleteMonstersForBlock(int block) {
 	int i = _levelBlockProperties[block].assignedObjects;
 	int cnt = 0;
-	MonsterInPlay *t = 0;
+	uint16 next = 0;
 
 	while (i) {
-		t = (MonsterInPlay *)findObject(i);
-		i = t->nextAssignedObject;
-		if (!(i & 0x8000))
+		next = findObject(i)->nextAssignedObject;
+		if (!(i & 0x8000)) {
+			i = next;
 			continue;
+		}
 
-		i &= 0x7fff;
-		t = &_monsters[i];
+		MonsterInPlay *m = &_monsters[i & 0x7fff];
 
 		cnt++;
-		setMonsterMode(t, 14);
+		setMonsterMode(m, 14);
 
-		checkSceneUpdateNeed(t->blockPropertyIndex);
+		checkSceneUpdateNeed(m->blockPropertyIndex);
 
-		placeMonster(t, 0, 0);
+		placeMonster(m, 0, 0);
+
+		i = next;
 	}
 	return cnt;
 }
@@ -1077,7 +1079,7 @@
 			_unkDrawLevelBool = true;
 			monster->fightCurTick--;
 			if ((monster->fightCurTick <= 0) || (checkDrawObjectSpace(_partyPosX, _partyPosY, monster->x, monster->y) > 256) || (monster->flags & 8))
-				setMonsterMode(monster, 7);
+				setMonsterMode(monster, 13/*7*/);
 			else
 				rearrangeAttackingMonster(monster);
 			break;


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