diff options
Diffstat (limited to 'engines/kyra/script_lol.cpp')
-rw-r--r-- | engines/kyra/script_lol.cpp | 136 |
1 files changed, 58 insertions, 78 deletions
diff --git a/engines/kyra/script_lol.cpp b/engines/kyra/script_lol.cpp index d8ba32ce09..c5d1d49030 100644 --- a/engines/kyra/script_lol.cpp +++ b/engines/kyra/script_lol.cpp @@ -93,25 +93,6 @@ void LoLEngine::runLevelScriptCustom(int block, int flags, int charNum, int item checkSceneUpdateNeed(block); } -bool LoLEngine::checkSceneUpdateNeed(int func) { - if (_sceneUpdateRequired) - return true; - - for (int i = 0; i < 15; i++) { - if (_visibleBlockIndex[i] == func) { - _sceneUpdateRequired = true; - return true; - } - } - - if (_currentBlock == func){ - _sceneUpdateRequired = true; - return true; - } - - return false; -} - 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 (stackPos(2) != -1) { @@ -305,7 +286,7 @@ int LoLEngine::olol_getItemPara(EMCState *script) { if (!stackPos(0)) return 0; - ItemInPlay *i = &_itemsInPlay[stackPos(0)]; + LoLItem *i = &_itemsInPlay[stackPos(0)]; ItemProperty *p = &_itemProperties[i->itemPropertyIndex]; switch (stackPos(1)) { @@ -796,9 +777,9 @@ int LoLEngine::olol_updateBlockAnimations(EMCState *script) { return 0; } -int LoLEngine::olol_mapShapeToBlock(EMCState *script) { - debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_mapShapeToBlock(%p) (%d)", (const void *)script, stackPos(0)); - return assignLevelShapes(stackPos(0)); +int LoLEngine::olol_assignLevelDecorationShape(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignLevelDecorationShape(%p) (%d)", (const void *)script, stackPos(0)); + return assignLevelDecorationShapes(stackPos(0)); } int LoLEngine::olol_resetBlockShapeAssignment(EMCState *script) { @@ -811,7 +792,7 @@ int LoLEngine::olol_resetBlockShapeAssignment(EMCState *script) { 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)); + (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); if (!stackPos(7)) _screen->updateScreen(); @@ -820,7 +801,7 @@ int LoLEngine::olol_copyRegion(EMCState *script) { 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)); + 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)); @@ -830,11 +811,11 @@ int LoLEngine::olol_initMonster(EMCState *script) { return -1; for (uint8 i = 0; i < 30; i++) { - MonsterInPlay *l = &_monsters[i]; + LoLMonster *l = &_monsters[i]; if (l->hitPoints || l->mode == 13) continue; - memset(l, 0, sizeof(MonsterInPlay)); + memset(l, 0, sizeof(LoLMonster)); l->id = i; l->x = x; l->y = y; @@ -938,14 +919,14 @@ int LoLEngine::olol_dummy0(EMCState *script) { 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), - stackPos(6), stackPos(7), stackPos(8), stackPos(9), stackPos(10), stackPos(11), stackPos(12), stackPos(13), - stackPos(14), stackPos(15), stackPos(16), stackPos(17), stackPos(18), stackPos(19), stackPos(20), - stackPos(21), stackPos(22), stackPos(23), stackPos(24), stackPos(25), stackPos(26), stackPos(27), - stackPos(28), stackPos(29), stackPos(30), stackPos(31), stackPos(32), stackPos(33), stackPos(34), - stackPos(35), stackPos(36), stackPos(37), stackPos(38), stackPos(39), stackPos(40), stackPos(41)); - - MonsterProperty *l = &_monsterProperties[stackPos(0)]; + (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), stackPos(11), stackPos(12), stackPos(13), + stackPos(14), stackPos(15), stackPos(16), stackPos(17), stackPos(18), stackPos(19), stackPos(20), + stackPos(21), stackPos(22), stackPos(23), stackPos(24), stackPos(25), stackPos(26), stackPos(27), + stackPos(28), stackPos(29), stackPos(30), stackPos(31), stackPos(32), stackPos(33), stackPos(34), + stackPos(35), stackPos(36), stackPos(37), stackPos(38), stackPos(39), stackPos(40), stackPos(41)); + + LoLMonsterProperty *l = &_monsterProperties[stackPos(0)]; l->shapeIndex = stackPos(1) & 0xff; int shpWidthMax = 0; @@ -958,14 +939,14 @@ int LoLEngine::olol_loadMonsterProperties(EMCState *script) { l->maxWidth = shpWidthMax; - l->fightingStats[0] = (stackPos(2) << 8) / 100; // hit chance - l->fightingStats[1] = 256; // - l->fightingStats[2] = (stackPos(3) << 8) / 100; // protection - l->fightingStats[3] = stackPos(4); // evade chance - l->fightingStats[4] = (stackPos(5) << 8) / 100; // speed - l->fightingStats[5] = (stackPos(6) << 8) / 100; // - l->fightingStats[6] = (stackPos(7) << 8) / 100; // - l->fightingStats[7] = (stackPos(8) << 8) / 100; // + l->fightingStats[0] = (stackPos(2) << 8) / 100; // hit chance + l->fightingStats[1] = 256; // + l->fightingStats[2] = (stackPos(3) << 8) / 100; // protection + l->fightingStats[3] = stackPos(4); // evade chance + l->fightingStats[4] = (stackPos(5) << 8) / 100; // speed + l->fightingStats[5] = (stackPos(6) << 8) / 100; // + l->fightingStats[6] = (stackPos(7) << 8) / 100; // + l->fightingStats[7] = (stackPos(8) << 8) / 100; // l->fightingStats[8] = 0; for (int i = 0; i < 8; i++) { @@ -1017,7 +998,7 @@ int LoLEngine::olol_inflictDamage(EMCState *script) { int LoLEngine::olol_moveMonster(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_moveMonster(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4)); - MonsterInPlay *m = &_monsters[stackPos(0)]; + LoLMonster *m = &_monsters[stackPos(0)]; if (m->mode == 1 || m->mode == 2) { calcCoordinates(m->destX, m->destY, stackPos(1), stackPos(2), stackPos(3)); @@ -1029,10 +1010,9 @@ int LoLEngine::olol_moveMonster(EMCState *script) { return 1; } -int LoLEngine::olol_dialogueBox(EMCState *script) { - debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_dialogueBox(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); - - _tim->drawDialogueBox(stackPos(0), getLangString(stackPos(1)), getLangString(stackPos(2)), getLangString(stackPos(3))); +int LoLEngine::olol_setupDialogueButtons(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setupDialogueButtons(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); + setupDialogueButtons(stackPos(0), getLangString(stackPos(1)), getLangString(stackPos(2)), getLangString(stackPos(3))); return 1; } @@ -1194,7 +1174,7 @@ int LoLEngine::olol_playSoundEffect(EMCState *script) { int LoLEngine::olol_processDialogue(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_processDialogue(%p)", (const void *)script); - return _tim->processDialogue(); + return processDialogue(); } int LoLEngine::olol_stopTimScript(EMCState *script) { @@ -1213,7 +1193,7 @@ int LoLEngine::olol_changeMonsterStat(EMCState *script) { if (stackPos(0) == -1) return 1; - MonsterInPlay *m = &_monsters[stackPos(0) & 0x7fff]; + LoLMonster *m = &_monsters[stackPos(0) & 0x7fff]; int16 d = stackPos(2); uint16 x = 0; @@ -1254,7 +1234,7 @@ int LoLEngine::olol_getMonsterStat(EMCState *script) { if (stackPos(0) == -1) return 0; - MonsterInPlay *m = &_monsters[stackPos(0) & 0x7fff]; + LoLMonster *m = &_monsters[stackPos(0) & 0x7fff]; int d = stackPos(1); switch (d) { @@ -1385,14 +1365,14 @@ int LoLEngine::olol_countBlockItems(EMCState *script) { return res; } -int LoLEngine::olol_characterSkillTest(EMCState *script){ +int LoLEngine::olol_characterSkillTest(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_characterSkillTest(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); int skill = stackPos(0); int n = countActiveCharacters(); int m = 0; int c = 0; - for (int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { int v = _characters[i].skillModifiers[skill] + _characters[i].skillLevels[skill] + 25; if (v > m) { m = v; @@ -1403,7 +1383,7 @@ int LoLEngine::olol_characterSkillTest(EMCState *script){ return (rollDice(1, 100) > m) ? -1 : c; } -int LoLEngine::olol_countAllMonsters(EMCState *script){ +int LoLEngine::olol_countAllMonsters(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_countAllMonsters(%p)", (const void *)script); int res = 0; @@ -1415,7 +1395,7 @@ int LoLEngine::olol_countAllMonsters(EMCState *script){ return res; } -int LoLEngine::olol_playEndSequence(EMCState *script){ +int LoLEngine::olol_playEndSequence(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_playEndSequence(%p)", (const void *)script); int c = 0; @@ -1567,7 +1547,7 @@ int LoLEngine::olol_moveBlockObjects(EMCState *script) { l &= 0x7fff; - MonsterInPlay *m = &_monsters[l]; + LoLMonster *m = &_monsters[l]; setMonsterMode(m, 14); checkSceneUpdateNeed(m->block); @@ -1582,8 +1562,8 @@ int LoLEngine::olol_moveBlockObjects(EMCState *script) { placeMoveLevelItem(l, level, destBlock, _itemsInPlay[l].x & 0xff, _itemsInPlay[l].y & 0xff, _itemsInPlay[l].flyingHeight); res = 1; - if (!runScript || level != _currentLevel) - continue; + if (!runScript || level != _currentLevel) + continue; runLevelScriptCustom(destBlock, 0x80, -1, l, 0, 0); } @@ -1638,7 +1618,7 @@ int LoLEngine::olol_dummy1(EMCState *script) { int LoLEngine::olol_suspendMonster(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_suspendMonster(%p) (%d)", (const void *)script, stackPos(0)); - MonsterInPlay *m = &_monsters[stackPos(0) & 0x7fff]; + LoLMonster *m = &_monsters[stackPos(0) & 0x7fff]; setMonsterMode(m, 14); checkSceneUpdateNeed(m->block); placeMonster(m, 0, 0); @@ -1705,7 +1685,7 @@ int LoLEngine::olol_countSpecificMonsters(EMCState *script) { int LoLEngine::olol_updateBlockAnimations2(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_updateBlockAnimations2(%p) (%d, %d, %d, %d, ...)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); int numFrames = stackPos(3); - assert (numFrames <= 97); + assert(numFrames <= 97); int curFrame = stackPos(2) % numFrames; setWallType(stackPos(0), stackPos(1), stackPos(4 + curFrame)); return 0; @@ -1889,9 +1869,9 @@ int LoLEngine::olol_checkBlockForMonster(EMCState *script) { return -1; } -int LoLEngine::olol_transformRegion(EMCState *script) { - debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_transformRegion(%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)); - transformRegion(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7)); +int LoLEngine::olol_crossFadeRegion(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_crossFadeRegion(%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->crossFadeRegion(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7)); return 1; } @@ -1984,7 +1964,7 @@ int LoLEngine::olol_getAnimationLastPart(EMCState *script) { 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)); if (stackPos(0)) { - _specialGuiShape = _levelShapes[_levelShapeProperties[_wllShapeMap[stackPos(0)]].shapeIndex[stackPos(1)]]; + _specialGuiShape = _levelDecorationShapes[_levelDecorationProperties[_wllShapeMap[stackPos(0)]].shapeIndex[stackPos(1)]]; _specialGuiShapeX = stackPos(2); _specialGuiShapeY = stackPos(3); _specialGuiShapeMirrorFlag = stackPos(4); @@ -2012,7 +1992,7 @@ int LoLEngine::olol_findInventoryItem(EMCState *script) { cur = 0; last = 4; } - for (;cur < last; cur++) { + for (; cur < last; cur++) { if (!(_characters[cur].flags & 1)) continue; for (int i = 0; i < 11; i++) { @@ -2055,7 +2035,7 @@ int LoLEngine::olol_changeItemTypeOrFlag(EMCState *script) { if (stackPos(0) < 1) return 0; - ItemInPlay *i = &_itemsInPlay[stackPos(0)]; + LoLItem *i = &_itemsInPlay[stackPos(0)]; int16 val = stackPos(2); if (stackPos(1) == 4) @@ -2291,10 +2271,10 @@ int LoLEngine::olol_calcNewBlockPosition(EMCState *script) { return calcNewBlockPosition(stackPos(0), stackPos(1)); } -int LoLEngine::olol_fadeScene(EMCState *script) { - debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_fadeScene(%p)", (const void *)script); +int LoLEngine::olol_crossFadeScene(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_crossFadeScene(%p)", (const void *)script); gui_drawScene(2); - transformRegion(112, 0, 112, 0, 176, 120, 2, 0); + _screen->crossFadeRegion(112, 0, 112, 0, 176, 120, 2, 0); updateDrawPage2(); return 1; } @@ -2376,7 +2356,7 @@ int LoLEngine::tlol_setupPaletteFade(const TIM *tim, const uint16 *param) { int LoLEngine::tlol_loadPalette(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_loadPalette(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]); - const char *palFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0]<<1))); + const char *palFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0] << 1))); _screen->loadPalette(palFile, _screen->getPalette(0)); return 1; } @@ -2392,7 +2372,7 @@ int LoLEngine::tlol_setupPaletteFadeEx(const TIM *tim, const uint16 *param) { int LoLEngine::tlol_processWsaFrame(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_processWsaFrame(%p, %p) (%d, %d, %d, %d, %d)", - (const void *)tim, (const void *)param, param[0], param[1], param[2], param[3], param[4]); + (const void *)tim, (const void *)param, param[0], param[1], param[2], param[3], param[4]); const int animIndex = tim->wsa[param[0]].anim - 1; const int frame = param[1]; @@ -2590,8 +2570,8 @@ int LoLEngine::tlol_stopBackgroundAnimation(const TIM *tim, const uint16 *param) int LoLEngine::tlol_fadeInScene(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_fadeInScene(%p, %p) (%d, %d)", (const void *)tim, (const void *)param, param[0], param[1]); - const char *sceneFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0]<<1))); - const char *overlayFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[1]<<1))); + const char *sceneFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0] << 1))); + const char *overlayFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[1] << 1))); _screen->copyRegion(0, 0, 0, 0, 320, 200, 0, 2, Screen::CR_NO_P_CHECK); @@ -2642,7 +2622,7 @@ int LoLEngine::tlol_unusedResourceFunc(const TIM *tim, const uint16 *param) { int LoLEngine::tlol_fadeInPalette(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_fadeInPalette(%p, %p) (%d, %d)", (const void *)tim, (const void *)param, param[0], param[1]); - const char *bitmap = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0]<<1))); + const char *bitmap = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0] << 1))); Palette pal(_screen->getPalette(0).getNumColors()); _screen->loadBitmap(bitmap, 3, 3, &pal); @@ -2784,7 +2764,7 @@ void LoLEngine::setupOpcodeTable() { // 0x34 Opcode(olol_updateBlockAnimations); - Opcode(olol_mapShapeToBlock); + Opcode(olol_assignLevelDecorationShape); Opcode(olol_resetBlockShapeAssignment); Opcode(olol_copyRegion); @@ -2808,7 +2788,7 @@ void LoLEngine::setupOpcodeTable() { // 0x44 Opcode(olol_moveMonster); - Opcode(olol_dialogueBox); + Opcode(olol_setupDialogueButtons); Opcode(olol_giveTakeMoney); Opcode(olol_checkMoney); @@ -2933,7 +2913,7 @@ void LoLEngine::setupOpcodeTable() { Opcode(olol_checkBlockForMonster); // 0x98 - Opcode(olol_transformRegion); + Opcode(olol_crossFadeRegion); Opcode(olol_calcCoordinatesAddDirectionOffset); Opcode(olol_resetPortraitsAndDisableSysTimer); Opcode(olol_enableSysTimer); @@ -2981,7 +2961,7 @@ void LoLEngine::setupOpcodeTable() { Opcode(olol_calcNewBlockPosition); // 0xB8 - Opcode(olol_fadeScene); + Opcode(olol_crossFadeScene); Opcode(olol_updateDrawPage2); Opcode(olol_setMouseCursor); Opcode(olol_characterSays); |