diff options
author | Travis Howell | 2006-10-25 13:38:35 +0000 |
---|---|---|
committer | Travis Howell | 2006-10-25 13:38:35 +0000 |
commit | 05fd51d03611fc88041a68da384eac58f3049024 (patch) | |
tree | d2e7bc921e00fb7f912325d2170a14a19e3202f6 | |
parent | fc04b2e45adbdc617fb6e20b3de81c88f5f10eff (diff) | |
download | scummvm-rg350-05fd51d03611fc88041a68da384eac58f3049024.tar.gz scummvm-rg350-05fd51d03611fc88041a68da384eac58f3049024.tar.bz2 scummvm-rg350-05fd51d03611fc88041a68da384eac58f3049024.zip |
Cleanup
svn-id: r24501
-rw-r--r-- | engines/agos/agos.h | 199 | ||||
-rw-r--r-- | engines/agos/icons.cpp | 2 | ||||
-rw-r--r-- | engines/agos/script.cpp | 252 | ||||
-rw-r--r-- | engines/agos/script_e1.cpp | 35 | ||||
-rw-r--r-- | engines/agos/script_e2.cpp | 76 | ||||
-rw-r--r-- | engines/agos/script_ff.cpp | 170 | ||||
-rw-r--r-- | engines/agos/script_pp.cpp | 126 | ||||
-rw-r--r-- | engines/agos/script_s1.cpp | 243 | ||||
-rw-r--r-- | engines/agos/script_s2.cpp | 82 | ||||
-rw-r--r-- | engines/agos/script_ww.cpp | 87 |
10 files changed, 646 insertions, 626 deletions
diff --git a/engines/agos/agos.h b/engines/agos/agos.h index e7ef5d3964..1f2e854b64 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1021,9 +1021,6 @@ public: void o_print(); void o_message(); void o_msg(); - void o_addTextBox(); - void o_setShortText(); - void o_setLongText(); void o_end(); void o_done(); void o_process(); @@ -1081,24 +1078,8 @@ public: void o_getOValue(); void o_setOValue(); void o_ink(); - void o_screenTextBox(); - void o_screenTextMsg(); - void o_playEffect(); - void o_getDollar2(); - void o_isAdjNoun(); - void o_b2Set(); - void o_b2Clear(); - void o_b2Zero(); - void o_b2NotZero(); - void o_lockZones(); - void o_unlockZones(); - void o_getPathPosn(); - void o_scnTxtLongText(); - void o_mouseOn(); - void o_unloadZone(); - void o_unfreezeZones(); - - // Opcodes, Elvira 1 only + + // Opcodes, Elvira 1 void oe1_present(); void oe1_notPresent(); void oe1_worn(); @@ -1125,6 +1106,7 @@ public: void oe1_pName(); void oe1_pcName(); void oe1_cFlag(); + void oe1_rescan(); void oe1_setUserItem(); void oe1_getUserItem(); void oe1_whereTo(); @@ -1134,6 +1116,8 @@ public: void oe1_clearUserItem(); void oe1_findMaster(); void oe1_nextMaster(); + void oe1_animate(); + void oe1_stopAnimate(); void oe1_menu(); void oe1_enableInput(); void oe1_setTime(); @@ -1149,7 +1133,7 @@ public: void oe1_printPlayerHit(); void oe1_printMonsterHit(); - // Opcodes, Elvira 2 only + // Opcodes, Elvira 2 void oe2_moveDirn(); void oe2_doClass(); void oe2_pObj(); @@ -1170,12 +1154,21 @@ public: void oe2_ifExitOpen(); void oe2_ifExitClosed(); void oe2_ifExitLocked(); + void oe2_getDollar2(); void oe2_unk177(); void oe2_unk178(); + void oe2_isAdjNoun(); + void oe2_b2Set(); + void oe2_b2Clear(); + void oe2_b2Zero(); + void oe2_b2NotZero(); - // Opcodes, Waxworks only + // Opcodes, Waxworks void oww_moveDirn(); void oww_goto(); + void oww_addTextBox(); + void oww_setShortText(); + void oww_setLongText(); void oww_whereTo(); void oww_menu(); void oww_textMenu(); @@ -1185,82 +1178,90 @@ public: void oww_boxLongText(); void oww_printBox(); void oww_boxPObj(); - - // Opcodes, Simon 1 only - void o1_printLongText(); - void o1_rescan(); - void o1_animate(); - void o1_stopAnimate(); - void o1_playTune(); - void o1_screenTextPObj(); - void o1_mouseOff(); - void o1_loadBeard(); - void o1_unloadBeard(); - void o1_loadStrings(); - void o1_specialFade(); - - // Opcodes, Simon 2 and later - void o2_printLongText(); - void o2_rescan(); - void o2_animate(); - void o2_stopAnimate(); - void o2_playTune(); - void o2_screenTextPObj(); - void o2_mouseOff(); - void o2_isShortText(); - void o2_clearMarks(); - void o2_waitMark(); - - // Opcodes, Feeble Files only - void o3_chance(); - void o3_jumpOut(); - void o3_addTextBox(); - void o3_printLongText(); - void o3_addBox(); - void o3_oracleTextDown(); - void o3_oracleTextUp(); - void o3_ifTime(); - void o3_setTime(); - void o3_saveUserGame(); - void o3_loadUserGame(); - void o3_listSaveGames(); - void o3_checkCD(); - void o3_screenTextBox(); - void o3_isAdjNoun(); - void o3_hyperLinkOn(); - void o3_hyperLinkOff(); - void o3_checkPaths(); - void o3_screenTextPObj(); - void o3_mouseOff(); - void o3_loadVideo(); - void o3_playVideo(); - void o3_centreScroll(); - void o3_resetPVCount(); - void o3_setPathValues(); - void o3_stopClock(); - void o3_restartClock(); - void o3_setColour(); - void o3_b3Set(); - void o3_b3Clear(); - void o3_b3Zero(); - void o3_b3NotZero(); - - // Opcodes, Puzzle Pack only - void o4_iconifyWindow(); - void o4_restoreOopsPosition(); - void o4_loadMouseImage(); - void o4_message(); - void o4_setShortText(); - void o4_loadHiScores(); - void o4_checkHiScores(); - void o4_sync(); - void o4_saveUserGame(); - void o4_loadUserGame(); - void o4_saveOopsPosition(); - void o4_resetGameTime(); - void o4_resetPVCount(); - void o4_setPathValues(); - void o4_restartClock(); + void oww_lockZones(); + void oww_unlockZones(); + + // Opcodes, Simon 1 + void oww_printLongText(); + void os1_animate(); + void os1_playTune(); + void os1_screenTextBox(); + void os1_screenTextMsg(); + void os1_playEffect(); + void os1_screenTextPObj(); + void os1_getPathPosn(); + void os1_scnTxtLongText(); + void os1_mouseOn(); + void os1_mouseOff(); + void os1_loadBeard(); + void os1_unloadBeard(); + void os1_unloadZone(); + void os1_loadStrings(); + void os1_unfreezeZones(); + void os1_specialFade(); + + // Opcodes, Simon 2 + void os2_printLongText(); + void os2_rescan(); + void os2_animate(); + void os2_stopAnimate(); + void os2_playTune(); + void os2_screenTextPObj(); + void os2_mouseOff(); + void os2_isShortText(); + void os2_clearMarks(); + void os2_waitMark(); + + // Opcodes, Feeble Files + void off_chance(); + void off_jumpOut(); + void off_addTextBox(); + void off_printLongText(); + void off_addBox(); + void off_oracleTextDown(); + void off_oracleTextUp(); + void off_ifTime(); + void off_setTime(); + void off_saveUserGame(); + void off_loadUserGame(); + void off_listSaveGames(); + void off_checkCD(); + void off_screenTextBox(); + void off_isAdjNoun(); + void off_hyperLinkOn(); + void off_hyperLinkOff(); + void off_checkPaths(); + void off_screenTextPObj(); + void off_mouseOff(); + void off_loadVideo(); + void off_playVideo(); + void off_centreScroll(); + void off_resetPVCount(); + void off_setPathValues(); + void off_stopClock(); + void off_restartClock(); + void off_setColour(); + void off_b3Set(); + void off_b3Clear(); + void off_b3Zero(); + void off_b3NotZero(); + + // Opcodes, Puzzle Pack + void opp_iconifyWindow(); + void opp_restoreOopsPosition(); + void opp_loadMouseImage(); + void opp_message(); + void opp_setShortText(); + void opp_loadHiScores(); + void opp_checkHiScores(); + void opp_sync(); + void opp_saveUserGame(); + void opp_loadUserGame(); + void opp_saveOopsPosition(); + void opp_resetGameTime(); + void opp_resetPVCount(); + void opp_setPathValues(); + void opp_restartClock(); protected: void drawImages(VC10_state *state); diff --git a/engines/agos/icons.cpp b/engines/agos/icons.cpp index d2ae7a078f..d04076aa8a 100644 --- a/engines/agos/icons.cpp +++ b/engines/agos/icons.cpp @@ -58,7 +58,7 @@ void AGOSEngine::loadIconData() { error("Out of icon memory"); memcpy(_iconFilePtr, src, 43 * 336); - o_unfreezeZones(); + os1_unfreezeZones(); } // Thanks to Stuart Caie for providing the original diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index 3ebe92518e..6a6a488ed0 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -95,8 +95,6 @@ void AGOSEngine::setupCommonOpcodes(OpcodeProc *op) { op[80] = &AGOSEngine::o_is; op[82] = &AGOSEngine::o_debug; op[87] = &AGOSEngine::o_comment; - op[88] = &AGOSEngine::o_haltAnimation; - op[89] = &AGOSEngine::o_restartAnimation; op[90] = &AGOSEngine::o_getParent; op[91] = &AGOSEngine::o_getNext; op[92] = &AGOSEngine::o_getChildren; @@ -516,44 +514,6 @@ void AGOSEngine::o_msg() { showMessageFormat("%s", getStringPtrByID(getNextStringID())); } -void AGOSEngine::o_addTextBox() { - // 65: add hit area - uint id = getVarOrWord(); - uint x = getVarOrWord(); - uint y = getVarOrWord(); - uint w = getVarOrWord(); - uint h = getVarOrWord(); - uint number = getVarOrByte(); - if (number < _numTextBoxes) - defineBox(id, x, y, w, h, (number << 8) + 129, 208, _dummyItem2); -} - -void AGOSEngine::o_setShortText() { - // 66: set item name - uint var = getVarOrByte(); - uint stringId = getNextStringID(); - if (var < _numTextBoxes) { - _shortText[var] = stringId; - } -} - -void AGOSEngine::o_setLongText() { - // 67: set item description - uint var = getVarOrByte(); - uint stringId = getNextStringID(); - if (getFeatures() & GF_TALKIE) { - uint speechId = getNextWord(); - if (var < _numTextBoxes) { - _longText[var] = stringId; - _longSound[var] = speechId; - } - } else { - if (var < _numTextBoxes) { - _longText[var] = stringId; - } - } -} - void AGOSEngine::o_end() { // 68: exit interpreter shutdown(); @@ -1084,218 +1044,6 @@ void AGOSEngine::o_ink() { setTextColor(getVarOrByte()); } -void AGOSEngine::o_screenTextBox() { - // 161: setup text - TextLocation *tl = getTextLocation(getVarOrByte()); - - tl->x = getVarOrWord(); - tl->y = getVarOrByte(); - tl->width = getVarOrWord(); -} - -void AGOSEngine::o_screenTextMsg() { - // 162: print string - uint vgaSpriteId = getVarOrByte(); - uint color = getVarOrByte(); - uint stringId = getNextStringID(); - const byte *string_ptr = NULL; - uint speechId = 0; - TextLocation *tl; - - if (stringId != 0xFFFF) - string_ptr = getStringPtrByID(stringId); - - if (getFeatures() & GF_TALKIE) { - if (getGameType() == GType_FF || getGameType() == GType_PP) - speechId = (uint16)getVarOrWord(); - else - speechId = (uint16)getNextWord(); - } - - if (getGameType() == GType_FF || getGameType() == GType_PP) - vgaSpriteId = 1; - - tl = getTextLocation(vgaSpriteId); - if (_speech && speechId != 0) - playSpeech(speechId, vgaSpriteId); - if (((getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) || getGameType() == GType_FF) && - speechId == 0) { - stopAnimateSimon2(2, vgaSpriteId + 2); - } - - if (string_ptr != NULL && (speechId == 0 || _subtitles)) - printScreenText(vgaSpriteId, color, (const char *)string_ptr, tl->x, tl->y, tl->width); - -} - -void AGOSEngine::o_playEffect() { - // 163: play sound - uint soundId = getVarOrWord(); - - if (getGameId() == GID_SIMON1DOS) - playSting(soundId); - else - _sound->playEffects(soundId); -} - -void AGOSEngine::o_getDollar2() { - // 164 - _showPreposition = true; - - setup_cond_c_helper(); - - _objectItem = _hitAreaObjectItem; - - if (_objectItem == _dummyItem2) - _objectItem = me(); - - if (_objectItem == _dummyItem3) - _objectItem = derefItem(me()->parent); - - if (_objectItem != NULL) { - _scriptNoun2 = _objectItem->noun; - _scriptAdj2 = _objectItem->adjective; - } else { - _scriptNoun2 = -1; - _scriptAdj2 = -1; - } - - _showPreposition = false; -} - -void AGOSEngine::o_isAdjNoun() { - // 165: item unk1 unk2 is - Item *item = getNextItemPtr(); - int16 a = getNextWord(), b = getNextWord(); - setScriptCondition(item->adjective == a && item->noun == b); -} - -void AGOSEngine::o_b2Set() { - // 166: set bit2 - uint bit = getVarOrByte(); - _bitArrayTwo[bit / 16] |= (1 << (bit & 15)); -} - -void AGOSEngine::o_b2Clear() { - // 167: clear bit2 - uint bit = getVarOrByte(); - _bitArrayTwo[bit / 16] &= ~(1 << (bit & 15)); -} - -void AGOSEngine::o_b2Zero() { - // 168: is bit2 clear - uint bit = getVarOrByte(); - setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) == 0); -} - -void AGOSEngine::o_b2NotZero() { - // 169: is bit2 set - uint bit = getVarOrByte(); - setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0); -} - -void AGOSEngine::o_lockZones() { - // 175: vga pointer op 1 - _vgaMemBase = _vgaMemPtr; -} - -void AGOSEngine::o_unlockZones() { - // 176: vga pointer op 2 - _vgaMemPtr = _vgaFrozenBase; - _vgaMemBase = _vgaFrozenBase; -} - -void AGOSEngine::o_getPathPosn() { - // 178: path find - uint x = getVarOrWord(); - uint y = getVarOrWord(); - uint var_1 = getVarOrByte(); - uint var_2 = getVarOrByte(); - - const uint16 *p; - uint i, j; - uint prev_i; - uint x_diff, y_diff; - uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF; - uint maxPath = (getGameType() == GType_FF || getGameType() == GType_PP) ? 100 : 20; - - if (getGameType() == GType_FF || getGameType() == GType_PP) { - x += _scrollX; - y += _scrollY; - } else if (getGameType() == GType_SIMON2) { - x += _scrollX * 8; - } - - int end = (getGameType() == GType_FF) ? 9999 : 999; - prev_i = maxPath + 1 - readVariable(12); - for (i = maxPath; i != 0; --i) { - p = (const uint16 *)_pathFindArray[maxPath - i]; - if (!p) - continue; - for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) { - x_diff = ABS((int16)(readUint16Wrapper(&p[0]) - x)); - y_diff = ABS((int16)(readUint16Wrapper(&p[1]) - 12 - y)); - - if (x_diff < y_diff) { - x_diff /= 4; - y_diff *= 4; - } - x_diff += y_diff /= 4; - - if (x_diff < best_dist || x_diff == best_dist && prev_i == i) { - best_dist = x_diff; - best_i = maxPath + 1 - i; - best_j = j; - } - } - } - - writeVariable(var_1, best_i); - writeVariable(var_2, best_j); -} - -void AGOSEngine::o_scnTxtLongText() { - // 179: conversation responses and room descriptions - uint vgaSpriteId = getVarOrByte(); - uint color = getVarOrByte(); - uint stringId = getVarOrByte(); - uint speechId = 0; - TextLocation *tl; - - const char *string_ptr = (const char *)getStringPtrByID(_longText[stringId]); - if (getFeatures() & GF_TALKIE) - speechId = _longSound[stringId]; - - if (getGameType() == GType_FF || getGameType() == GType_PP) - vgaSpriteId = 1; - tl = getTextLocation(vgaSpriteId); - - if (_speech && speechId != 0) - playSpeech(speechId, vgaSpriteId); - if (string_ptr != NULL && _subtitles) - printScreenText(vgaSpriteId, color, string_ptr, tl->x, tl->y, tl->width); -} - -void AGOSEngine::o_mouseOn() { - // 180: force mouseOn - scriptMouseOn(); -} - -void AGOSEngine::o_unloadZone() { - // 184: clear vgapointer entry - uint a = getVarOrWord(); - VgaPointersEntry *vpe = &_vgaBufferPointers[a]; - - vpe->sfxFile = NULL; - vpe->vgaFile1 = NULL; - vpe->vgaFile2 = NULL; -} - -void AGOSEngine::o_unfreezeZones() { - // 186: vga pointer op 3 - unfreezeBottom(); -} - // ----------------------------------------------------------------------- byte AGOSEngine::getByte() { diff --git a/engines/agos/script_e1.cpp b/engines/agos/script_e1.cpp index a58125b85f..8eb9759809 100644 --- a/engines/agos/script_e1.cpp +++ b/engines/agos/script_e1.cpp @@ -130,7 +130,7 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) { op[162] = &AGOSEngine::oe1_cFlag; - op[164] = &AGOSEngine::o1_rescan; + op[164] = &AGOSEngine::oe1_rescan; op[176] = &AGOSEngine::oe1_setUserItem; op[177] = &AGOSEngine::oe1_getUserItem; @@ -153,8 +153,8 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) { op[224] = &AGOSEngine::o_picture; op[225] = &AGOSEngine::o_loadZone; - op[226] = &AGOSEngine::o1_animate; - op[227] = &AGOSEngine::o1_stopAnimate; + op[226] = &AGOSEngine::oe1_animate; + op[227] = &AGOSEngine::oe1_stopAnimate; op[228] = &AGOSEngine::o_killAnimate; op[229] = &AGOSEngine::o_defWindow; op[230] = &AGOSEngine::o_window; @@ -187,7 +187,7 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) { op[260] = &AGOSEngine::oe1_ifTime; op[261] = &AGOSEngine::o_here; op[262] = &AGOSEngine::o_doClassIcons; - op[263] = &AGOSEngine::o1_playTune; + op[263] = &AGOSEngine::os1_playTune; op[266] = &AGOSEngine::o_setAdjNoun; op[267] = &AGOSEngine::oe1_zoneDisk; op[268] = &AGOSEngine::o_saveUserGame; @@ -406,6 +406,11 @@ void AGOSEngine::oe1_cFlag() { setScriptCondition((c->flags & (1 << bit)) != 0); } +void AGOSEngine::oe1_rescan() { + // 164: restart subroutine + setScriptReturn(-10); +} + void AGOSEngine::oe1_setUserItem() { // 176: set user item Item *i = getNextItemPtr(); @@ -508,6 +513,28 @@ void AGOSEngine::oe1_nextMaster() { _objectItem = nextMaster(item, ad, no); } +void AGOSEngine::oe1_animate() { + // 226: animate + uint vgaSpriteId = getVarOrWord(); + uint windowNum = getVarOrByte(); + uint x = getVarOrWord(); + uint y = getVarOrWord(); + uint palette = getVarOrWord(); + + if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && vgaSpriteId >= 400) { + _lastVgaWaitFor = 0; + } + + _lockWord |= 0x40; + animate(windowNum, vgaSpriteId / 100, vgaSpriteId, x, y, palette); + _lockWord &= ~0x40; +} + +void AGOSEngine::oe1_stopAnimate() { + // 227: stop animate + stopAnimateSimon1(getVarOrWord()); +} + void AGOSEngine::oe1_menu() { // 233: agos menu uint b = getVarOrWord(); diff --git a/engines/agos/script_e2.cpp b/engines/agos/script_e2.cpp index 5c88e335a5..3e5fe1d430 100644 --- a/engines/agos/script_e2.cpp +++ b/engines/agos/script_e2.cpp @@ -46,16 +46,16 @@ void AGOSEngine::setupElvira2Opcodes(OpcodeProc *op) { op[73] = &AGOSEngine::oe2_pObj; op[74] = &AGOSEngine::oe1_pName; op[75] = &AGOSEngine::oe1_pcName; - op[83] = &AGOSEngine::o1_rescan; + op[83] = &AGOSEngine::oe1_rescan; op[89] = &AGOSEngine::oe1_loadGame; op[94] = &AGOSEngine::oe1_findMaster; op[95] = &AGOSEngine::oe1_nextMaster; - op[98] = &AGOSEngine::o1_animate; - op[99] = &AGOSEngine::o1_stopAnimate; + op[98] = &AGOSEngine::oe1_animate; + op[99] = &AGOSEngine::oe1_stopAnimate; op[113] = &AGOSEngine::oe2_drawItem; op[123] = &AGOSEngine::oe1_setTime; op[124] = &AGOSEngine::oe1_ifTime; - op[127] = &AGOSEngine::o1_playTune; + op[127] = &AGOSEngine::os1_playTune; op[144] = &AGOSEngine::oe2_setDoorOpen; op[145] = &AGOSEngine::oe2_setDoorClosed; op[146] = &AGOSEngine::oe2_setDoorLocked; @@ -74,14 +74,14 @@ void AGOSEngine::setupElvira2Opcodes(OpcodeProc *op) { op[171] = &AGOSEngine::oe2_ifExitOpen; op[172] = &AGOSEngine::oe2_ifExitClosed; op[173] = &AGOSEngine::oe2_ifExitLocked; - op[175] = &AGOSEngine::o_getDollar2; + op[175] = &AGOSEngine::oe2_getDollar2; op[177] = &AGOSEngine::oe2_unk177; op[178] = &AGOSEngine::oe2_unk178; - op[179] = &AGOSEngine::o_isAdjNoun; - op[180] = &AGOSEngine::o_b2Set; - op[181] = &AGOSEngine::o_b2Clear; - op[182] = &AGOSEngine::o_b2Zero; - op[183] = &AGOSEngine::o_b2NotZero; + op[179] = &AGOSEngine::oe2_isAdjNoun; + op[180] = &AGOSEngine::oe2_b2Set; + op[181] = &AGOSEngine::oe2_b2Clear; + op[182] = &AGOSEngine::oe2_b2Zero; + op[183] = &AGOSEngine::oe2_b2NotZero; } // ----------------------------------------------------------------------- @@ -285,6 +285,31 @@ void AGOSEngine::oe2_ifExitLocked() { setScriptCondition(getExitState(i, n, d) == 3); } +void AGOSEngine::oe2_getDollar2() { + // 175 + _showPreposition = true; + + setup_cond_c_helper(); + + _objectItem = _hitAreaObjectItem; + + if (_objectItem == _dummyItem2) + _objectItem = me(); + + if (_objectItem == _dummyItem3) + _objectItem = derefItem(me()->parent); + + if (_objectItem != NULL) { + _scriptNoun2 = _objectItem->noun; + _scriptAdj2 = _objectItem->adjective; + } else { + _scriptNoun2 = -1; + _scriptAdj2 = -1; + } + + _showPreposition = false; +} + void AGOSEngine::oe2_unk177() { // 177: set unknown vga event uint a = getVarOrByte(); @@ -297,4 +322,35 @@ void AGOSEngine::oe2_unk178() { debug(0, "oe2_unk178: stub (%d)", a); } +void AGOSEngine::oe2_isAdjNoun() { + // 179: item unk1 unk2 is + Item *item = getNextItemPtr(); + int16 a = getNextWord(), b = getNextWord(); + setScriptCondition(item->adjective == a && item->noun == b); +} + +void AGOSEngine::oe2_b2Set() { + // 180: set bit2 + uint bit = getVarOrByte(); + _bitArrayTwo[bit / 16] |= (1 << (bit & 15)); +} + +void AGOSEngine::oe2_b2Clear() { + // 181: clear bit2 + uint bit = getVarOrByte(); + _bitArrayTwo[bit / 16] &= ~(1 << (bit & 15)); +} + +void AGOSEngine::oe2_b2Zero() { + // 182: is bit2 clear + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) == 0); +} + +void AGOSEngine::oe2_b2NotZero() { + // 183: is bit2 set + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0); +} + } // End of namespace AGOS diff --git a/engines/agos/script_ff.cpp b/engines/agos/script_ff.cpp index 0c6d7ac00c..1b07f48fcb 100644 --- a/engines/agos/script_ff.cpp +++ b/engines/agos/script_ff.cpp @@ -33,66 +33,66 @@ namespace AGOS { void AGOSEngine::setupFeebleOpcodes(OpcodeProc *op) { setupCommonOpcodes(op); - op[23] = &AGOSEngine::o3_chance; - op[37] = &AGOSEngine::o3_jumpOut; - op[65] = &AGOSEngine::o3_addTextBox; - op[66] = &AGOSEngine::o_setShortText; - op[67] = &AGOSEngine::o_setLongText; - op[70] = &AGOSEngine::o3_printLongText; - op[83] = &AGOSEngine::o2_rescan; - op[98] = &AGOSEngine::o2_animate; - op[99] = &AGOSEngine::o2_stopAnimate; - op[107] = &AGOSEngine::o3_addBox; - op[122] = &AGOSEngine::o3_oracleTextDown; - op[123] = &AGOSEngine::o3_oracleTextUp; - op[124] = &AGOSEngine::o3_ifTime; - op[131] = &AGOSEngine::o3_setTime; - op[132] = &AGOSEngine::o3_saveUserGame; - op[133] = &AGOSEngine::o3_loadUserGame; - op[134] = &AGOSEngine::o3_listSaveGames; - op[135] = &AGOSEngine::o3_checkCD; - op[161] = &AGOSEngine::o3_screenTextBox; - op[162] = &AGOSEngine::o_screenTextMsg; - op[164] = &AGOSEngine::o_getDollar2; - op[165] = &AGOSEngine::o3_isAdjNoun; - op[166] = &AGOSEngine::o_b2Set; - op[167] = &AGOSEngine::o_b2Clear; - op[168] = &AGOSEngine::o_b2Zero; - op[169] = &AGOSEngine::o_b2NotZero; - op[171] = &AGOSEngine::o3_hyperLinkOn; - op[172] = &AGOSEngine::o3_hyperLinkOff; - op[173] = &AGOSEngine::o3_checkPaths; - op[175] = &AGOSEngine::o_lockZones; - op[176] = &AGOSEngine::o_unlockZones; - op[177] = &AGOSEngine::o3_screenTextPObj; - op[178] = &AGOSEngine::o_getPathPosn; - op[179] = &AGOSEngine::o_scnTxtLongText; - op[180] = &AGOSEngine::o_mouseOn; - op[181] = &AGOSEngine::o3_mouseOff; - op[182] = &AGOSEngine::o3_loadVideo; - op[183] = &AGOSEngine::o3_playVideo; - op[184] = &AGOSEngine::o_unloadZone; - op[186] = &AGOSEngine::o_unfreezeZones; - op[187] = &AGOSEngine::o3_centreScroll; - op[188] = &AGOSEngine::o2_isShortText; - op[189] = &AGOSEngine::o2_clearMarks; - op[190] = &AGOSEngine::o2_waitMark; - op[191] = &AGOSEngine::o3_resetPVCount; - op[192] = &AGOSEngine::o3_setPathValues; - op[193] = &AGOSEngine::o3_stopClock; - op[194] = &AGOSEngine::o3_restartClock; - op[195] = &AGOSEngine::o3_setColour; - op[196] = &AGOSEngine::o3_b3Set; - op[197] = &AGOSEngine::o3_b3Clear; - op[198] = &AGOSEngine::o3_b3Zero; - op[199] = &AGOSEngine::o3_b3NotZero; + op[23] = &AGOSEngine::off_chance; + op[37] = &AGOSEngine::off_jumpOut; + op[65] = &AGOSEngine::off_addTextBox; + op[66] = &AGOSEngine::oww_setShortText; + op[67] = &AGOSEngine::oww_setLongText; + op[70] = &AGOSEngine::off_printLongText; + op[83] = &AGOSEngine::os2_rescan; + op[98] = &AGOSEngine::os2_animate; + op[99] = &AGOSEngine::os2_stopAnimate; + op[107] = &AGOSEngine::off_addBox; + op[122] = &AGOSEngine::off_oracleTextDown; + op[123] = &AGOSEngine::off_oracleTextUp; + op[124] = &AGOSEngine::off_ifTime; + op[131] = &AGOSEngine::off_setTime; + op[132] = &AGOSEngine::off_saveUserGame; + op[133] = &AGOSEngine::off_loadUserGame; + op[134] = &AGOSEngine::off_listSaveGames; + op[135] = &AGOSEngine::off_checkCD; + op[161] = &AGOSEngine::off_screenTextBox; + op[162] = &AGOSEngine::os1_screenTextMsg; + op[164] = &AGOSEngine::oe2_getDollar2; + op[165] = &AGOSEngine::off_isAdjNoun; + op[166] = &AGOSEngine::oe2_b2Set; + op[167] = &AGOSEngine::oe2_b2Clear; + op[168] = &AGOSEngine::oe2_b2Zero; + op[169] = &AGOSEngine::oe2_b2NotZero; + op[171] = &AGOSEngine::off_hyperLinkOn; + op[172] = &AGOSEngine::off_hyperLinkOff; + op[173] = &AGOSEngine::off_checkPaths; + op[175] = &AGOSEngine::oww_lockZones; + op[176] = &AGOSEngine::oww_unlockZones; + op[177] = &AGOSEngine::off_screenTextPObj; + op[178] = &AGOSEngine::os1_getPathPosn; + op[179] = &AGOSEngine::os1_scnTxtLongText; + op[180] = &AGOSEngine::os1_mouseOn; + op[181] = &AGOSEngine::off_mouseOff; + op[182] = &AGOSEngine::off_loadVideo; + op[183] = &AGOSEngine::off_playVideo; + op[184] = &AGOSEngine::os1_unloadZone; + op[186] = &AGOSEngine::os1_unfreezeZones; + op[187] = &AGOSEngine::off_centreScroll; + op[188] = &AGOSEngine::os2_isShortText; + op[189] = &AGOSEngine::os2_clearMarks; + op[190] = &AGOSEngine::os2_waitMark; + op[191] = &AGOSEngine::off_resetPVCount; + op[192] = &AGOSEngine::off_setPathValues; + op[193] = &AGOSEngine::off_stopClock; + op[194] = &AGOSEngine::off_restartClock; + op[195] = &AGOSEngine::off_setColour; + op[196] = &AGOSEngine::off_b3Set; + op[197] = &AGOSEngine::off_b3Clear; + op[198] = &AGOSEngine::off_b3Zero; + op[199] = &AGOSEngine::off_b3NotZero; } // ----------------------------------------------------------------------- // Feeble Files Opcodes // ----------------------------------------------------------------------- -void AGOSEngine::o3_chance() { +void AGOSEngine::off_chance() { // 23 uint a = getVarOrWord(); @@ -112,13 +112,13 @@ void AGOSEngine::o3_chance() { setScriptCondition(false); } -void AGOSEngine::o3_jumpOut() { +void AGOSEngine::off_jumpOut() { // 37 getVarOrByte(); setScriptReturn(1); } -void AGOSEngine::o3_addTextBox() { +void AGOSEngine::off_addTextBox() { // 65: add hit area uint flags = kBFTextBox | kBFBoxItem; uint id = getVarOrWord(); @@ -139,14 +139,14 @@ void AGOSEngine::o3_addTextBox() { defineBox(id, x, y, w, h, flags + (num << 8), 208, _dummyItem2); } -void AGOSEngine::o3_printLongText() { +void AGOSEngine::off_printLongText() { // 70: show string from array int num = getVarOrByte(); const char *str = (const char *)getStringPtrByID(_longText[num]); sendInteractText(num, "%d. %s\n", num, str); } -void AGOSEngine::o3_addBox() { +void AGOSEngine::off_addBox() { // 107: add item hitarea uint flags = 0; uint id = getVarOrWord(); @@ -176,17 +176,17 @@ void AGOSEngine::o3_addBox() { defineBox(id, x, y, w, h, flags, verb, item); } -void AGOSEngine::o3_oracleTextDown() { +void AGOSEngine::off_oracleTextDown() { // 122: oracle text down oracleTextDown(); } -void AGOSEngine::o3_oracleTextUp() { +void AGOSEngine::off_oracleTextUp() { // 123: oracle text up oracleTextUp(); } -void AGOSEngine::o3_ifTime() { +void AGOSEngine::off_ifTime() { // 124: if time time_t t; @@ -200,13 +200,13 @@ void AGOSEngine::o3_ifTime() { setScriptCondition(false); } -void AGOSEngine::o3_setTime() { +void AGOSEngine::off_setTime() { // 131 time(&_timeStore); _timeStore -= _gameStoppedClock; } -void AGOSEngine::o3_saveUserGame() { +void AGOSEngine::off_saveUserGame() { // 132: save game _noOracleScroll = 0; _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true); @@ -214,17 +214,17 @@ void AGOSEngine::o3_saveUserGame() { _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false); } -void AGOSEngine::o3_loadUserGame() { +void AGOSEngine::off_loadUserGame() { // 133: load game loadGame(readVariable(55)); } -void AGOSEngine::o3_listSaveGames() { +void AGOSEngine::off_listSaveGames() { // 134: dummy opcode? listSaveGames(1); } -void AGOSEngine::o3_checkCD() { +void AGOSEngine::off_checkCD() { // 135: switch CD uint disc = readVariable(97); @@ -240,7 +240,7 @@ void AGOSEngine::o3_checkCD() { debug(0, "Switch to CD number %d", disc); } -void AGOSEngine::o3_screenTextBox() { +void AGOSEngine::off_screenTextBox() { // 161: setup text TextLocation *tl = getTextLocation(getVarOrByte()); @@ -249,7 +249,7 @@ void AGOSEngine::o3_screenTextBox() { tl->width = getVarOrWord(); } -void AGOSEngine::o3_isAdjNoun() { +void AGOSEngine::off_isAdjNoun() { // 165: item unk1 unk2 is Item *item = getNextItemPtr(); int16 a = getNextWord(), b = getNextWord(); @@ -261,17 +261,17 @@ void AGOSEngine::o3_isAdjNoun() { setScriptCondition(false); } -void AGOSEngine::o3_hyperLinkOn() { +void AGOSEngine::off_hyperLinkOn() { // 171: oracle hyperlink on hyperLinkOn(getVarOrWord()); } -void AGOSEngine::o3_hyperLinkOff() { +void AGOSEngine::off_hyperLinkOff() { // 172: oracle hyperlink off hyperLinkOff(); } -void AGOSEngine::o3_checkPaths() { +void AGOSEngine::off_checkPaths() { // 173 check paths int i, count; const uint8 *pathVal1 = _pathValues1; @@ -307,7 +307,7 @@ void AGOSEngine::o3_checkPaths() { _variableArray2[52] = result; } -void AGOSEngine::o3_screenTextPObj() { +void AGOSEngine::off_screenTextPObj() { // 177: inventory descriptions uint vgaSpriteId = getVarOrByte(); uint color = getVarOrByte(); @@ -336,29 +336,29 @@ void AGOSEngine::o3_screenTextPObj() { } } -void AGOSEngine::o3_mouseOff() { +void AGOSEngine::off_mouseOff() { // 181: force mouseOff scriptMouseOff(); clearName(); } -void AGOSEngine::o3_loadVideo() { +void AGOSEngine::off_loadVideo() { // 182: load video file const byte *filename = getStringPtrByID(getNextStringID()); _moviePlay->load((const char *)filename); } -void AGOSEngine::o3_playVideo() { +void AGOSEngine::off_playVideo() { // 183: play video _moviePlay->play(); } -void AGOSEngine::o3_centreScroll() { +void AGOSEngine::off_centreScroll() { // 187 centreScroll(); } -void AGOSEngine::o3_resetPVCount() { +void AGOSEngine::off_resetPVCount() { // 191 if (getBitFlag(83)) { _PVCount1 = 0; @@ -369,7 +369,7 @@ void AGOSEngine::o3_resetPVCount() { } } -void AGOSEngine::o3_setPathValues() { +void AGOSEngine::off_setPathValues() { // 192 uint8 a = getVarOrByte(); uint8 b = getVarOrByte(); @@ -388,19 +388,19 @@ void AGOSEngine::o3_setPathValues() { } } -void AGOSEngine::o3_stopClock() { +void AGOSEngine::off_stopClock() { // 193: pause clock _clockStopped = time(NULL); } -void AGOSEngine::o3_restartClock() { +void AGOSEngine::off_restartClock() { // 194: resume clock if (_clockStopped != 0) _gameStoppedClock += time(NULL) - _clockStopped; _clockStopped = 0; } -void AGOSEngine::o3_setColour() { +void AGOSEngine::off_setColour() { // 195: set palette colour uint c = getVarOrByte() * 4; uint r = getVarOrByte(); @@ -414,25 +414,25 @@ void AGOSEngine::o3_setColour() { _paletteFlag = 2; } -void AGOSEngine::o3_b3Set() { +void AGOSEngine::off_b3Set() { // 196: set bit3 uint bit = getVarOrByte(); _bitArrayThree[bit / 16] |= (1 << (bit & 15)); } -void AGOSEngine::o3_b3Clear() { +void AGOSEngine::off_b3Clear() { // 197: clear bit3 uint bit = getVarOrByte(); _bitArrayThree[bit / 16] &= ~(1 << (bit & 15)); } -void AGOSEngine::o3_b3Zero() { +void AGOSEngine::off_b3Zero() { // 198: is bit3 clear uint bit = getVarOrByte(); setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) == 0); } -void AGOSEngine::o3_b3NotZero() { +void AGOSEngine::off_b3NotZero() { // 199: is bit3 set uint bit = getVarOrByte(); setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) != 0); diff --git a/engines/agos/script_pp.cpp b/engines/agos/script_pp.cpp index ca8e8a64a1..10dd82af08 100644 --- a/engines/agos/script_pp.cpp +++ b/engines/agos/script_pp.cpp @@ -32,61 +32,61 @@ namespace AGOS { void AGOSEngine::setupPuzzleOpcodes(OpcodeProc *op) { setupCommonOpcodes(op); - op[23] = &AGOSEngine::o3_chance; - op[30] = &AGOSEngine::o4_iconifyWindow; - op[32] = &AGOSEngine::o4_restoreOopsPosition; - op[38] = &AGOSEngine::o4_loadMouseImage; - op[63] = &AGOSEngine::o4_message; - op[65] = &AGOSEngine::o3_addTextBox; - op[66] = &AGOSEngine::o4_setShortText; - op[67] = &AGOSEngine::o_setLongText; - op[70] = &AGOSEngine::o3_printLongText; - op[83] = &AGOSEngine::o2_rescan; - op[98] = &AGOSEngine::o2_animate; - op[99] = &AGOSEngine::o2_stopAnimate; - op[105] = &AGOSEngine::o4_loadHiScores; - op[106] = &AGOSEngine::o4_checkHiScores; - op[107] = &AGOSEngine::o3_addBox; - op[120] = &AGOSEngine::o4_sync; - op[122] = &AGOSEngine::o3_oracleTextDown; - op[123] = &AGOSEngine::o3_oracleTextUp; - op[124] = &AGOSEngine::o3_ifTime; - op[131] = &AGOSEngine::o3_setTime; - op[132] = &AGOSEngine::o4_saveUserGame; - op[133] = &AGOSEngine::o4_loadUserGame; - op[134] = &AGOSEngine::o3_listSaveGames; - op[161] = &AGOSEngine::o3_screenTextBox; - op[162] = &AGOSEngine::o_screenTextMsg; - op[164] = &AGOSEngine::o_getDollar2; - op[165] = &AGOSEngine::o3_isAdjNoun; - op[171] = &AGOSEngine::o3_hyperLinkOn; - op[172] = &AGOSEngine::o3_hyperLinkOff; - op[173] = &AGOSEngine::o4_saveOopsPosition; - op[175] = &AGOSEngine::o_lockZones; - op[176] = &AGOSEngine::o_unlockZones; - op[177] = &AGOSEngine::o3_screenTextPObj; - op[178] = &AGOSEngine::o_getPathPosn; - op[179] = &AGOSEngine::o_scnTxtLongText; - op[180] = &AGOSEngine::o_mouseOn; - op[181] = &AGOSEngine::o3_mouseOff; - op[184] = &AGOSEngine::o_unloadZone; - op[186] = &AGOSEngine::o_unfreezeZones; - op[187] = &AGOSEngine::o4_resetGameTime; - op[188] = &AGOSEngine::o2_isShortText; - op[189] = &AGOSEngine::o2_clearMarks; - op[190] = &AGOSEngine::o2_waitMark; - op[191] = &AGOSEngine::o4_resetPVCount; - op[192] = &AGOSEngine::o4_setPathValues; - op[193] = &AGOSEngine::o3_stopClock; - op[194] = &AGOSEngine::o4_restartClock; - op[195] = &AGOSEngine::o3_setColour; + op[23] = &AGOSEngine::off_chance; + op[30] = &AGOSEngine::opp_iconifyWindow; + op[32] = &AGOSEngine::opp_restoreOopsPosition; + op[38] = &AGOSEngine::opp_loadMouseImage; + op[63] = &AGOSEngine::opp_message; + op[65] = &AGOSEngine::off_addTextBox; + op[66] = &AGOSEngine::opp_setShortText; + op[67] = &AGOSEngine::oww_setLongText; + op[70] = &AGOSEngine::off_printLongText; + op[83] = &AGOSEngine::os2_rescan; + op[98] = &AGOSEngine::os2_animate; + op[99] = &AGOSEngine::os2_stopAnimate; + op[105] = &AGOSEngine::opp_loadHiScores; + op[106] = &AGOSEngine::opp_checkHiScores; + op[107] = &AGOSEngine::off_addBox; + op[120] = &AGOSEngine::opp_sync; + op[122] = &AGOSEngine::off_oracleTextDown; + op[123] = &AGOSEngine::off_oracleTextUp; + op[124] = &AGOSEngine::off_ifTime; + op[131] = &AGOSEngine::off_setTime; + op[132] = &AGOSEngine::opp_saveUserGame; + op[133] = &AGOSEngine::opp_loadUserGame; + op[134] = &AGOSEngine::off_listSaveGames; + op[161] = &AGOSEngine::off_screenTextBox; + op[162] = &AGOSEngine::os1_screenTextMsg; + op[164] = &AGOSEngine::oe2_getDollar2; + op[165] = &AGOSEngine::off_isAdjNoun; + op[171] = &AGOSEngine::off_hyperLinkOn; + op[172] = &AGOSEngine::off_hyperLinkOff; + op[173] = &AGOSEngine::opp_saveOopsPosition; + op[175] = &AGOSEngine::oww_lockZones; + op[176] = &AGOSEngine::oww_unlockZones; + op[177] = &AGOSEngine::off_screenTextPObj; + op[178] = &AGOSEngine::os1_getPathPosn; + op[179] = &AGOSEngine::os1_scnTxtLongText; + op[180] = &AGOSEngine::os1_mouseOn; + op[181] = &AGOSEngine::off_mouseOff; + op[184] = &AGOSEngine::os1_unloadZone; + op[186] = &AGOSEngine::os1_unfreezeZones; + op[187] = &AGOSEngine::opp_resetGameTime; + op[188] = &AGOSEngine::os2_isShortText; + op[189] = &AGOSEngine::os2_clearMarks; + op[190] = &AGOSEngine::os2_waitMark; + op[191] = &AGOSEngine::opp_resetPVCount; + op[192] = &AGOSEngine::opp_setPathValues; + op[193] = &AGOSEngine::off_stopClock; + op[194] = &AGOSEngine::opp_restartClock; + op[195] = &AGOSEngine::off_setColour; } // ----------------------------------------------------------------------- // Puzzle Pack Opcodes // ----------------------------------------------------------------------- -void AGOSEngine::o4_iconifyWindow() { +void AGOSEngine::opp_iconifyWindow() { // 30 getNextItemPtr(); if (_clockStopped != 0) @@ -95,7 +95,7 @@ void AGOSEngine::o4_iconifyWindow() { _system->setFeatureState(OSystem::kFeatureIconifyWindow, true); } -void AGOSEngine::o4_restoreOopsPosition() { +void AGOSEngine::opp_restoreOopsPosition() { // 32: restore oops position uint i; @@ -117,14 +117,14 @@ void AGOSEngine::o4_restoreOopsPosition() { } } -void AGOSEngine::o4_loadMouseImage() { +void AGOSEngine::opp_loadMouseImage() { // 38: load mouse image getNextItemPtr(); getVarOrByte(); loadMouseImage(); } -void AGOSEngine::o4_message() { +void AGOSEngine::opp_message() { // 63: show string nl if (getBitFlag(105)) { @@ -136,7 +136,7 @@ void AGOSEngine::o4_message() { } } -void AGOSEngine::o4_setShortText() { +void AGOSEngine::opp_setShortText() { // 66: set item name uint var = getVarOrByte(); uint stringId = getNextStringID(); @@ -147,18 +147,18 @@ void AGOSEngine::o4_setShortText() { } } -void AGOSEngine::o4_loadHiScores() { +void AGOSEngine::opp_loadHiScores() { // 105: load high scores getVarOrByte(); } -void AGOSEngine::o4_checkHiScores() { +void AGOSEngine::opp_checkHiScores() { // 106: check high scores getVarOrByte(); getVarOrByte(); } -void AGOSEngine::o4_sync() { +void AGOSEngine::opp_sync() { // 120: sync uint a = getVarOrWord(); if (a == 8001 || a == 8101 || a == 8201 || a == 8301 || a == 8401) { @@ -167,7 +167,7 @@ void AGOSEngine::o4_sync() { sendSync(a); } -void AGOSEngine::o4_saveUserGame() { +void AGOSEngine::opp_saveUserGame() { // 132: save game if (_clockStopped != 0) _gameTime += time(NULL) - _clockStopped; @@ -183,7 +183,7 @@ void AGOSEngine::o4_saveUserGame() { //saveHiScores() } -void AGOSEngine::o4_loadUserGame() { +void AGOSEngine::opp_loadUserGame() { // 133: load usergame // NoPatience or Jumble @@ -196,7 +196,7 @@ void AGOSEngine::o4_loadUserGame() { loadGame(1); } -void AGOSEngine::o4_saveOopsPosition() { +void AGOSEngine::opp_saveOopsPosition() { // 173: save oops position if (!isVgaQueueEmpty()) { _oopsValid = true; @@ -208,18 +208,18 @@ void AGOSEngine::o4_saveOopsPosition() { } } -void AGOSEngine::o4_resetGameTime() { +void AGOSEngine::opp_resetGameTime() { // 187: reset game time _gameTime = 0; } -void AGOSEngine::o4_resetPVCount() { +void AGOSEngine::opp_resetPVCount() { // 191 _PVCount = 0; _GPVCount = 0; } -void AGOSEngine::o4_setPathValues() { +void AGOSEngine::opp_setPathValues() { // 192 _pathValues[_PVCount++] = getVarOrByte(); _pathValues[_PVCount++] = getVarOrByte(); @@ -227,7 +227,7 @@ void AGOSEngine::o4_setPathValues() { _pathValues[_PVCount++] = getVarOrByte(); } -void AGOSEngine::o4_restartClock() { +void AGOSEngine::opp_restartClock() { // 194: resume clock if (_clockStopped != 0) _gameTime += time(NULL) - _clockStopped; diff --git a/engines/agos/script_s1.cpp b/engines/agos/script_s1.cpp index ea45b0f497..a8015f923e 100644 --- a/engines/agos/script_s1.cpp +++ b/engines/agos/script_s1.cpp @@ -32,62 +32,53 @@ namespace AGOS { void AGOSEngine::setupSimon1Opcodes(OpcodeProc *op) { setupCommonOpcodes(op); - op[65] = &AGOSEngine::o_addTextBox; - op[66] = &AGOSEngine::o_setShortText; - op[67] = &AGOSEngine::o_setLongText; - op[70] = &AGOSEngine::o1_printLongText; - op[83] = &AGOSEngine::o1_rescan; - op[98] = &AGOSEngine::o1_animate; - op[99] = &AGOSEngine::o1_stopAnimate; - op[127] = &AGOSEngine::o1_playTune; - op[161] = &AGOSEngine::o_screenTextBox; - op[162] = &AGOSEngine::o_screenTextMsg; - op[163] = &AGOSEngine::o_playEffect; - op[164] = &AGOSEngine::o_getDollar2; - op[165] = &AGOSEngine::o_isAdjNoun; - op[166] = &AGOSEngine::o_b2Set; - op[167] = &AGOSEngine::o_b2Clear; - op[168] = &AGOSEngine::o_b2Zero; - op[169] = &AGOSEngine::o_b2NotZero; - op[175] = &AGOSEngine::o_lockZones; - op[176] = &AGOSEngine::o_unlockZones; - op[177] = &AGOSEngine::o1_screenTextPObj; - op[178] = &AGOSEngine::o_getPathPosn; - op[179] = &AGOSEngine::o_scnTxtLongText; - op[180] = &AGOSEngine::o_mouseOn; - op[181] = &AGOSEngine::o1_mouseOff; - op[182] = &AGOSEngine::o1_loadBeard; - op[183] = &AGOSEngine::o1_unloadBeard; - op[184] = &AGOSEngine::o_unloadZone; - op[185] = &AGOSEngine::o1_loadStrings; - op[186] = &AGOSEngine::o_unfreezeZones; - op[187] = &AGOSEngine::o1_specialFade; + op[65] = &AGOSEngine::oww_addTextBox; + op[66] = &AGOSEngine::oww_setShortText; + op[67] = &AGOSEngine::oww_setLongText; + op[70] = &AGOSEngine::oww_printLongText; + op[83] = &AGOSEngine::oe1_rescan; + op[88] = &AGOSEngine::o_haltAnimation; + op[89] = &AGOSEngine::o_restartAnimation; + op[98] = &AGOSEngine::os1_animate; + op[99] = &AGOSEngine::oe1_stopAnimate; + op[127] = &AGOSEngine::os1_playTune; + op[161] = &AGOSEngine::os1_screenTextBox; + op[162] = &AGOSEngine::os1_screenTextMsg; + op[163] = &AGOSEngine::os1_playEffect; + op[164] = &AGOSEngine::oe2_getDollar2; + op[165] = &AGOSEngine::oe2_isAdjNoun; + op[166] = &AGOSEngine::oe2_b2Set; + op[167] = &AGOSEngine::oe2_b2Clear; + op[168] = &AGOSEngine::oe2_b2Zero; + op[169] = &AGOSEngine::oe2_b2NotZero; + op[175] = &AGOSEngine::oww_lockZones; + op[176] = &AGOSEngine::oww_unlockZones; + op[177] = &AGOSEngine::os1_screenTextPObj; + op[178] = &AGOSEngine::os1_getPathPosn; + op[179] = &AGOSEngine::os1_scnTxtLongText; + op[180] = &AGOSEngine::os1_mouseOn; + op[181] = &AGOSEngine::os1_mouseOff; + op[182] = &AGOSEngine::os1_loadBeard; + op[183] = &AGOSEngine::os1_unloadBeard; + op[184] = &AGOSEngine::os1_unloadZone; + op[185] = &AGOSEngine::os1_loadStrings; + op[186] = &AGOSEngine::os1_unfreezeZones; + op[187] = &AGOSEngine::os1_specialFade; } // ----------------------------------------------------------------------- // Simon 1 Opcodes // ----------------------------------------------------------------------- -void AGOSEngine::o1_printLongText() { - // 70: show string from array - const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]); - showMessageFormat("%s\n", str); -} - -void AGOSEngine::o1_rescan() { - // 83: restart subroutine - setScriptReturn(-10); -} - -void AGOSEngine::o1_animate() { - // 98: start vga +void AGOSEngine::os1_animate() { + // 98: animate uint vgaSpriteId = getVarOrWord(); uint windowNum = getVarOrByte(); uint x = getVarOrWord(); uint y = getVarOrWord(); uint palette = getVarOrWord(); - if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && vgaSpriteId >= 400) { + if (getFeatures() & GF_TALKIE && vgaSpriteId >= 400) { _lastVgaWaitFor = 0; } @@ -96,12 +87,7 @@ void AGOSEngine::o1_animate() { _lockWord &= ~0x40; } -void AGOSEngine::o1_stopAnimate() { - // 99: kill sprite - stopAnimateSimon1(getVarOrWord()); -} - -void AGOSEngine::o1_playTune() { +void AGOSEngine::os1_playTune() { // 127: deals with music int music = getVarOrWord(); int track = getVarOrWord(); @@ -122,7 +108,61 @@ void AGOSEngine::o1_playTune() { } } -void AGOSEngine::o1_screenTextPObj() { +void AGOSEngine::os1_screenTextBox() { + // 161: setup text + TextLocation *tl = getTextLocation(getVarOrByte()); + + tl->x = getVarOrWord(); + tl->y = getVarOrByte(); + tl->width = getVarOrWord(); +} + +void AGOSEngine::os1_screenTextMsg() { + // 162: print string + uint vgaSpriteId = getVarOrByte(); + uint color = getVarOrByte(); + uint stringId = getNextStringID(); + const byte *string_ptr = NULL; + uint speechId = 0; + TextLocation *tl; + + if (stringId != 0xFFFF) + string_ptr = getStringPtrByID(stringId); + + if (getFeatures() & GF_TALKIE) { + if (getGameType() == GType_FF || getGameType() == GType_PP) + speechId = (uint16)getVarOrWord(); + else + speechId = (uint16)getNextWord(); + } + + if (getGameType() == GType_FF || getGameType() == GType_PP) + vgaSpriteId = 1; + + tl = getTextLocation(vgaSpriteId); + if (_speech && speechId != 0) + playSpeech(speechId, vgaSpriteId); + if (((getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) || getGameType() == GType_FF) && + speechId == 0) { + stopAnimateSimon2(2, vgaSpriteId + 2); + } + + if (string_ptr != NULL && (speechId == 0 || _subtitles)) + printScreenText(vgaSpriteId, color, (const char *)string_ptr, tl->x, tl->y, tl->width); + +} + +void AGOSEngine::os1_playEffect() { + // 163: play sound + uint soundId = getVarOrWord(); + + if (getGameId() == GID_SIMON1DOS) + playSting(soundId); + else + _sound->playEffects(soundId); +} + +void AGOSEngine::os1_screenTextPObj() { // 177: inventory descriptions uint vgaSpriteId = getVarOrByte(); uint color = getVarOrByte(); @@ -163,12 +203,88 @@ void AGOSEngine::o1_screenTextPObj() { } } -void AGOSEngine::o1_mouseOff() { +void AGOSEngine::os1_getPathPosn() { + // 178: path find + uint x = getVarOrWord(); + uint y = getVarOrWord(); + uint var_1 = getVarOrByte(); + uint var_2 = getVarOrByte(); + + const uint16 *p; + uint i, j; + uint prev_i; + uint x_diff, y_diff; + uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF; + uint maxPath = (getGameType() == GType_FF || getGameType() == GType_PP) ? 100 : 20; + + if (getGameType() == GType_FF || getGameType() == GType_PP) { + x += _scrollX; + y += _scrollY; + } else if (getGameType() == GType_SIMON2) { + x += _scrollX * 8; + } + + int end = (getGameType() == GType_FF) ? 9999 : 999; + prev_i = maxPath + 1 - readVariable(12); + for (i = maxPath; i != 0; --i) { + p = (const uint16 *)_pathFindArray[maxPath - i]; + if (!p) + continue; + for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) { + x_diff = ABS((int16)(readUint16Wrapper(&p[0]) - x)); + y_diff = ABS((int16)(readUint16Wrapper(&p[1]) - 12 - y)); + + if (x_diff < y_diff) { + x_diff /= 4; + y_diff *= 4; + } + x_diff += y_diff /= 4; + + if (x_diff < best_dist || x_diff == best_dist && prev_i == i) { + best_dist = x_diff; + best_i = maxPath + 1 - i; + best_j = j; + } + } + } + + writeVariable(var_1, best_i); + writeVariable(var_2, best_j); +} + +void AGOSEngine::os1_scnTxtLongText() { + // 179: conversation responses and room descriptions + uint vgaSpriteId = getVarOrByte(); + uint color = getVarOrByte(); + uint stringId = getVarOrByte(); + uint speechId = 0; + TextLocation *tl; + + const char *string_ptr = (const char *)getStringPtrByID(_longText[stringId]); + if (getFeatures() & GF_TALKIE) + speechId = _longSound[stringId]; + + if (getGameType() == GType_FF || getGameType() == GType_PP) + vgaSpriteId = 1; + tl = getTextLocation(vgaSpriteId); + + if (_speech && speechId != 0) + playSpeech(speechId, vgaSpriteId); + if (string_ptr != NULL && _subtitles) + printScreenText(vgaSpriteId, color, string_ptr, tl->x, tl->y, tl->width); +} + +void AGOSEngine::os1_mouseOn() { + // 180: force mouseOn + scriptMouseOn(); +} + +void AGOSEngine::os1_mouseOff() { // 181: force mouseOff scriptMouseOff(); } -void AGOSEngine::o1_loadBeard() { +void AGOSEngine::os1_loadBeard() { // 182: load beard if (_beardLoaded == false) { _beardLoaded = true; @@ -178,7 +294,7 @@ void AGOSEngine::o1_loadBeard() { } } -void AGOSEngine::o1_unloadBeard() { +void AGOSEngine::os1_unloadBeard() { // 183: unload beard if (_beardLoaded == true) { _beardLoaded = false; @@ -188,7 +304,17 @@ void AGOSEngine::o1_unloadBeard() { } } -void AGOSEngine::o1_loadStrings() { +void AGOSEngine::os1_unloadZone() { + // 184: unload zone + uint a = getVarOrWord(); + VgaPointersEntry *vpe = &_vgaBufferPointers[a]; + + vpe->sfxFile = NULL; + vpe->vgaFile1 = NULL; + vpe->vgaFile2 = NULL; +} + +void AGOSEngine::os1_loadStrings() { // 185: load sound files _soundFileId = getVarOrWord(); if (getPlatform() == Common::kPlatformAmiga && getFeatures() & GF_TALKIE) { @@ -200,7 +326,12 @@ void AGOSEngine::o1_loadStrings() { } } -void AGOSEngine::o1_specialFade() { +void AGOSEngine::os1_unfreezeZones() { + // 186: freeze zone + unfreezeBottom(); +} + +void AGOSEngine::os1_specialFade() { // 187: fade to black uint i; diff --git a/engines/agos/script_s2.cpp b/engines/agos/script_s2.cpp index 04fdca01b1..b185616e6b 100644 --- a/engines/agos/script_s2.cpp +++ b/engines/agos/script_s2.cpp @@ -30,49 +30,51 @@ namespace AGOS { void AGOSEngine::setupSimon2Opcodes(OpcodeProc *op) { setupCommonOpcodes(op); - op[65] = &AGOSEngine::o_addTextBox; - op[66] = &AGOSEngine::o_setShortText; - op[67] = &AGOSEngine::o_setLongText; - op[70] = &AGOSEngine::o2_printLongText; - op[83] = &AGOSEngine::o2_rescan; - op[98] = &AGOSEngine::o2_animate; - op[99] = &AGOSEngine::o2_stopAnimate; - op[127] = &AGOSEngine::o2_playTune; - op[161] = &AGOSEngine::o_screenTextBox; - op[162] = &AGOSEngine::o_screenTextMsg; - op[163] = &AGOSEngine::o_playEffect; - op[164] = &AGOSEngine::o_getDollar2; - op[165] = &AGOSEngine::o_isAdjNoun; - op[166] = &AGOSEngine::o_b2Set; - op[167] = &AGOSEngine::o_b2Clear; - op[168] = &AGOSEngine::o_b2Zero; - op[169] = &AGOSEngine::o_b2NotZero; - op[175] = &AGOSEngine::o_lockZones; - op[176] = &AGOSEngine::o_unlockZones; - op[177] = &AGOSEngine::o2_screenTextPObj; - op[178] = &AGOSEngine::o_getPathPosn; - op[179] = &AGOSEngine::o_scnTxtLongText; - op[180] = &AGOSEngine::o_mouseOn; - op[181] = &AGOSEngine::o2_mouseOff; - op[184] = &AGOSEngine::o_unloadZone; - op[186] = &AGOSEngine::o_unfreezeZones; - op[188] = &AGOSEngine::o2_isShortText; - op[189] = &AGOSEngine::o2_clearMarks; - op[190] = &AGOSEngine::o2_waitMark; + op[65] = &AGOSEngine::oww_addTextBox; + op[66] = &AGOSEngine::oww_setShortText; + op[67] = &AGOSEngine::oww_setLongText; + op[70] = &AGOSEngine::os2_printLongText; + op[83] = &AGOSEngine::os2_rescan; + op[88] = &AGOSEngine::o_haltAnimation; + op[89] = &AGOSEngine::o_restartAnimation; + op[98] = &AGOSEngine::os2_animate; + op[99] = &AGOSEngine::os2_stopAnimate; + op[127] = &AGOSEngine::os2_playTune; + op[161] = &AGOSEngine::os1_screenTextBox; + op[162] = &AGOSEngine::os1_screenTextMsg; + op[163] = &AGOSEngine::os1_playEffect; + op[164] = &AGOSEngine::oe2_getDollar2; + op[165] = &AGOSEngine::oe2_isAdjNoun; + op[166] = &AGOSEngine::oe2_b2Set; + op[167] = &AGOSEngine::oe2_b2Clear; + op[168] = &AGOSEngine::oe2_b2Zero; + op[169] = &AGOSEngine::oe2_b2NotZero; + op[175] = &AGOSEngine::oww_lockZones; + op[176] = &AGOSEngine::oww_unlockZones; + op[177] = &AGOSEngine::os2_screenTextPObj; + op[178] = &AGOSEngine::os1_getPathPosn; + op[179] = &AGOSEngine::os1_scnTxtLongText; + op[180] = &AGOSEngine::os1_mouseOn; + op[181] = &AGOSEngine::os2_mouseOff; + op[184] = &AGOSEngine::os1_unloadZone; + op[186] = &AGOSEngine::os1_unfreezeZones; + op[188] = &AGOSEngine::os2_isShortText; + op[189] = &AGOSEngine::os2_clearMarks; + op[190] = &AGOSEngine::os2_waitMark; } // ----------------------------------------------------------------------- // Simon 2 Opcodes // ----------------------------------------------------------------------- -void AGOSEngine::o2_printLongText() { +void AGOSEngine::os2_printLongText() { // 70: show string from array const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]); writeVariable(51, strlen(str) / 53 * 8 + 8); showMessageFormat("%s\n", str); } -void AGOSEngine::o2_rescan() { +void AGOSEngine::os2_rescan() { // 83: restart subroutine if (_exitCutscene) { if (getBitFlag(9)) { @@ -85,7 +87,7 @@ void AGOSEngine::o2_rescan() { setScriptReturn(-10); } -void AGOSEngine::o2_animate() { +void AGOSEngine::os2_animate() { // 98: start vga uint zoneNum = getVarOrWord(); uint vgaSpriteId = getVarOrWord(); @@ -99,14 +101,14 @@ void AGOSEngine::o2_animate() { _lockWord &= ~0x40; } -void AGOSEngine::o2_stopAnimate() { +void AGOSEngine::os2_stopAnimate() { // 99: kill sprite uint a = getVarOrWord(); uint b = getVarOrWord(); stopAnimateSimon2(a, b); } -void AGOSEngine::o2_playTune() { +void AGOSEngine::os2_playTune() { // 127: deals with music int music = getVarOrWord(); int track = getVarOrWord(); @@ -128,7 +130,7 @@ void AGOSEngine::o2_playTune() { midi.startTrack(track); } -void AGOSEngine::o2_screenTextPObj() { +void AGOSEngine::os2_screenTextPObj() { // 177: inventory descriptions uint vgaSpriteId = getVarOrByte(); uint color = getVarOrByte(); @@ -177,7 +179,7 @@ void AGOSEngine::o2_screenTextPObj() { speechId = 51; break; default: - error("o2_screenTextPObj: invalid case %d", speechIdOffs); + error("os2_screenTextPObj: invalid case %d", speechIdOffs); } } } @@ -213,26 +215,26 @@ void AGOSEngine::o2_screenTextPObj() { } } -void AGOSEngine::o2_mouseOff() { +void AGOSEngine::os2_mouseOff() { // 181: force mouseOff scriptMouseOff(); changeWindow(1); showMessageFormat("\xC"); } -void AGOSEngine::o2_isShortText() { +void AGOSEngine::os2_isShortText() { // 188: string2 is uint i = getVarOrByte(); uint str = getNextStringID(); setScriptCondition(str < _numTextBoxes && _shortText[i] == str); } -void AGOSEngine::o2_clearMarks() { +void AGOSEngine::os2_clearMarks() { // 189: clear_op189_flag _marks = 0; } -void AGOSEngine::o2_waitMark() { +void AGOSEngine::os2_waitMark() { // 190 uint i = getVarOrByte(); if (!(_marks & (1 << i))) diff --git a/engines/agos/script_ww.cpp b/engines/agos/script_ww.cpp index b544383841..8946f4b2fa 100644 --- a/engines/agos/script_ww.cpp +++ b/engines/agos/script_ww.cpp @@ -45,20 +45,20 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) { op[39] = &AGOSEngine::oe1_weigh; op[54] = &AGOSEngine::oww_moveDirn; op[55] = &AGOSEngine::oww_goto; - op[65] = &AGOSEngine::o_addTextBox; - op[66] = &AGOSEngine::o_setShortText; - op[67] = &AGOSEngine::o_setLongText; - op[70] = &AGOSEngine::o1_printLongText; - op[83] = &AGOSEngine::o1_rescan; + op[65] = &AGOSEngine::oww_addTextBox; + op[66] = &AGOSEngine::oww_setShortText; + op[67] = &AGOSEngine::oww_setLongText; + op[70] = &AGOSEngine::oww_printLongText; + op[83] = &AGOSEngine::oe1_rescan; op[85] = &AGOSEngine::oww_whereTo; op[89] = &AGOSEngine::oe1_loadGame; op[94] = &AGOSEngine::oe1_findMaster; op[95] = &AGOSEngine::oe1_nextMaster; - op[98] = &AGOSEngine::o1_animate; - op[99] = &AGOSEngine::o1_stopAnimate; + op[98] = &AGOSEngine::oe1_animate; + op[99] = &AGOSEngine::oe1_stopAnimate; op[105] = &AGOSEngine::oww_menu; op[106] = &AGOSEngine::oww_textMenu; - op[127] = &AGOSEngine::o1_playTune; + op[127] = &AGOSEngine::os1_playTune; op[144] = &AGOSEngine::oe2_setDoorOpen; op[145] = &AGOSEngine::oe2_setDoorClosed; op[146] = &AGOSEngine::oe2_setDoorLocked; @@ -67,19 +67,19 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) { op[149] = &AGOSEngine::oe2_ifDoorClosed; op[150] = &AGOSEngine::oe2_ifDoorLocked; op[162] = &AGOSEngine::oww_screenTextMsg; - op[175] = &AGOSEngine::o_getDollar2; - op[179] = &AGOSEngine::o_isAdjNoun; - op[180] = &AGOSEngine::o_b2Set; - op[181] = &AGOSEngine::o_b2Clear; - op[182] = &AGOSEngine::o_b2Zero; - op[183] = &AGOSEngine::o_b2NotZero; + op[175] = &AGOSEngine::oe2_getDollar2; + op[179] = &AGOSEngine::oe2_isAdjNoun; + op[180] = &AGOSEngine::oe2_b2Set; + op[181] = &AGOSEngine::oe2_b2Clear; + op[182] = &AGOSEngine::oe2_b2Zero; + op[183] = &AGOSEngine::oe2_b2NotZero; op[184] = &AGOSEngine::oww_boxMessage; op[185] = &AGOSEngine::oww_boxMsg; op[186] = &AGOSEngine::oww_boxLongText; op[187] = &AGOSEngine::oww_printBox; op[188] = &AGOSEngine::oww_boxPObj; - op[189] = &AGOSEngine::o_lockZones; - op[190] = &AGOSEngine::o_unlockZones; + op[189] = &AGOSEngine::oww_lockZones; + op[190] = &AGOSEngine::oww_unlockZones; } // ----------------------------------------------------------------------- @@ -102,6 +102,50 @@ void AGOSEngine::oww_goto() { setItemParent(me(), derefItem(item)); } +void AGOSEngine::oww_addTextBox() { + // 65: add hit area + uint id = getVarOrWord(); + uint x = getVarOrWord(); + uint y = getVarOrWord(); + uint w = getVarOrWord(); + uint h = getVarOrWord(); + uint number = getVarOrByte(); + if (number < _numTextBoxes) + defineBox(id, x, y, w, h, (number << 8) + 129, 208, _dummyItem2); +} + +void AGOSEngine::oww_setShortText() { + // 66: set item name + uint var = getVarOrByte(); + uint stringId = getNextStringID(); + if (var < _numTextBoxes) { + _shortText[var] = stringId; + } +} + +void AGOSEngine::oww_setLongText() { + // 67: set item description + uint var = getVarOrByte(); + uint stringId = getNextStringID(); + if (getFeatures() & GF_TALKIE) { + uint speechId = getNextWord(); + if (var < _numTextBoxes) { + _longText[var] = stringId; + _longSound[var] = speechId; + } + } else { + if (var < _numTextBoxes) { + _longText[var] = stringId; + } + } +} + +void AGOSEngine::oww_printLongText() { + // 70: show string from array + const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]); + showMessageFormat("%s\n", str); +} + void AGOSEngine::oww_whereTo() { // 85: where to Item *i = getNextItemPtr(); @@ -159,4 +203,15 @@ void AGOSEngine::oww_boxPObj() { boxTextMsg((const char *)getStringPtrByID(subObject->objectFlagValue[0])); } +void AGOSEngine::oww_lockZones() { + // 189: lock zone + _vgaMemBase = _vgaMemPtr; +} + +void AGOSEngine::oww_unlockZones() { + // 190: unlock zone + _vgaMemPtr = _vgaFrozenBase; + _vgaMemBase = _vgaFrozenBase; +} + } // End of namespace AGOS |