[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