From c15d43be5a574f8ff7142438e69fd03586d304c8 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Fri, 29 Sep 2006 11:07:38 +0000 Subject: [PATCH] Update opcode table for PP svn-id: r24014 --- engines/agos/agos.cpp | 1 + engines/agos/agos.h | 8 +++- engines/agos/items.cpp | 103 +++++++++++++++++++++++++++-------------- 3 files changed, 74 insertions(+), 38 deletions(-) diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 806d1bf7263..5463a556a12 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -227,6 +227,7 @@ AGOSEngine::AGOSEngine(OSystem *syst) _clockStopped = 0; _gameStoppedClock = 0; + _gameTime = 0; _lastTime = 0; _firstTimeStruct = 0; diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 444789bac02..8dd0cc945d6 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -322,7 +322,7 @@ protected: uint _numTextBoxes; uint _lastTime; - uint32 _clockStopped, _gameStoppedClock; + uint32 _clockStopped, _gameStoppedClock, _gameTime; time_t _timeStore; TimeEvent *_firstTimeStruct, *_pendingDeleteTimeEvent; @@ -1041,8 +1041,11 @@ public: // Opcodes, Puzzle Pack only void o4_opcode30(); + void o4_restoreOopsPosition(); void o4_checkTiles(); - void o4_opcode38(); + void o4_loadMouseImage(); + void o4_setShortText(); + void o4_animate(); void o4_loadHiScores(); void o4_checkHiScores(); void o4_loadUserGame(); @@ -1050,6 +1053,7 @@ public: void o4_resetGameTime(); void o4_resetPVCount(); void o4_setPathValues(); + void o4_restartClock(); protected: void drawImages(VC10_state *state); diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 8c102898dfc..006a5244e09 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -448,52 +448,47 @@ void AGOSEngine::setupOpcodes() { opcode_table[199] = &AGOSEngine::o3_b3NotZero; break; case GType_PP: - // Confirmed - opcode_table[30] = &AGOSEngine::o4_opcode30; - opcode_table[37] = &AGOSEngine::o4_checkTiles; - opcode_table[38] = &AGOSEngine::o4_opcode38; - opcode_table[105] = &AGOSEngine::o4_loadHiScores; - opcode_table[106] = &AGOSEngine::o4_checkHiScores; - opcode_table[133] = &AGOSEngine::o4_loadUserGame; - opcode_table[166] = NULL; - opcode_table[167] = NULL; - opcode_table[168] = NULL; - opcode_table[169] = NULL; - opcode_table[173] = &AGOSEngine::o4_saveOopsPosition; - opcode_table[191] = &AGOSEngine::o4_resetPVCount; - opcode_table[192] = &AGOSEngine::o4_setPathValues; - - // Code difference, check if triggered - opcode_table[132] = &AGOSEngine::o3_saveUserGame, - opcode_table[187] = &AGOSEngine::o4_resetGameTime; - - // Code difference. Some kind of logging? - opcode_table[190] = &AGOSEngine::o2_waitMark; - - // To check opcode_table[23] = &AGOSEngine::o3_chance; + opcode_table[30] = &AGOSEngine::o4_opcode30; + opcode_table[32] = &AGOSEngine::o4_restoreOopsPosition; + opcode_table[37] = &AGOSEngine::o4_checkTiles; + opcode_table[38] = &AGOSEngine::o4_loadMouseImage; opcode_table[65] = &AGOSEngine::o3_addTextBox; + opcode_table[66] = &AGOSEngine::o4_setShortText, opcode_table[70] = &AGOSEngine::o3_printLongText; opcode_table[83] = &AGOSEngine::o2_rescan; - opcode_table[98] = &AGOSEngine::o2_animate; + opcode_table[98] = &AGOSEngine::o4_animate; opcode_table[99] = &AGOSEngine::o2_stopAnimate; + opcode_table[105] = &AGOSEngine::o4_loadHiScores; + opcode_table[106] = &AGOSEngine::o4_checkHiScores; opcode_table[107] = &AGOSEngine::o3_addBox; opcode_table[122] = &AGOSEngine::o3_oracleTextDown; opcode_table[123] = &AGOSEngine::o3_oracleTextUp; opcode_table[124] = &AGOSEngine::o3_ifTime; opcode_table[127] = &AGOSEngine::o3_playTune; opcode_table[131] = &AGOSEngine::o3_setTime; + opcode_table[132] = &AGOSEngine::o3_saveUserGame, + opcode_table[133] = &AGOSEngine::o4_loadUserGame; opcode_table[134] = &AGOSEngine::o3_listSaveGames; opcode_table[161] = &AGOSEngine::o3_screenTextBox; opcode_table[165] = &AGOSEngine::o3_isAdjNoun; + opcode_table[166] = NULL; + opcode_table[167] = NULL; + opcode_table[168] = NULL; + opcode_table[169] = NULL; opcode_table[171] = &AGOSEngine::o3_hyperLinkOn; opcode_table[172] = &AGOSEngine::o3_hyperLinkOff; + opcode_table[173] = &AGOSEngine::o4_saveOopsPosition; opcode_table[177] = &AGOSEngine::o3_screenTextPObj; opcode_table[181] = &AGOSEngine::o3_mouseOff; + opcode_table[187] = &AGOSEngine::o4_resetGameTime; opcode_table[188] = &AGOSEngine::o2_isShortText; opcode_table[189] = &AGOSEngine::o2_clearMarks; + opcode_table[190] = &AGOSEngine::o2_waitMark; + opcode_table[191] = &AGOSEngine::o4_resetPVCount; + opcode_table[192] = &AGOSEngine::o4_setPathValues; opcode_table[193] = &AGOSEngine::o3_stopClock; - opcode_table[194] = &AGOSEngine::o3_restartClock; + opcode_table[194] = &AGOSEngine::o4_restartClock; opcode_table[195] = &AGOSEngine::o3_setColour; break; default: @@ -859,10 +854,6 @@ void AGOSEngine::o_setShortText() { uint stringId = getNextStringID(); if (var < _numTextBoxes) { _shortText[var] = stringId; - if (getGameType() == GType_PP) { - _shortTextX[var] = getVarOrWord(); - _shortTextY[var] = getVarOrWord(); - } } } @@ -2368,38 +2359,71 @@ void AGOSEngine::o4_opcode30() { getNextItemPtr(); } +void AGOSEngine::o4_restoreOopsPosition() { + // 32: restore oops position + getNextItemPtr(); +} + void AGOSEngine::o4_checkTiles() { // 37: for MahJongg game getVarOrByte(); } -void AGOSEngine::o4_opcode38() { - // 38 +void AGOSEngine::o4_loadMouseImage() { + // 38: load mouse image getVarOrByte(); getNextItemPtr(); } +void AGOSEngine::o4_setShortText() { + // 66: set item name + uint var = getVarOrByte(); + uint stringId = getNextStringID(); + if (var < _numTextBoxes) { + _shortText[var] = stringId; + _shortTextX[var] = getVarOrWord(); + _shortTextY[var] = getVarOrWord(); + } +} + +void AGOSEngine::o4_animate() { + // 98: start vga + uint vga_res = getVarOrWord(); + uint vgaSpriteId = getVarOrWord(); + uint windowNum = getVarOrByte(); + uint x = getVarOrWord(); + uint y = getVarOrWord(); + uint palette = getVarOrWord(); + + if (getBitFlag(96)) { + printf("Start Block\n"); + } else { + loadSprite(windowNum, vga_res, vgaSpriteId, x, y, palette); + } +} + void AGOSEngine::o4_loadHiScores() { - // 105 + // 105: load high scores getVarOrByte(); } void AGOSEngine::o4_checkHiScores() { - // 106 + // 106: check high scores getVarOrByte(); getVarOrByte(); } void AGOSEngine::o4_loadUserGame() { - // 133 + // 133: load usergame } void AGOSEngine::o4_saveOopsPosition() { - // 173 + // 173: save oops position } void AGOSEngine::o4_resetGameTime() { - // 187 + // 187: reset game time + _gameTime = 0; } void AGOSEngine::o4_resetPVCount() { @@ -2416,6 +2440,13 @@ void AGOSEngine::o4_setPathValues() { _pathValues[_PVCount++] = getVarOrByte(); } +void AGOSEngine::o4_restartClock() { + // 194: resume clock + if (_clockStopped != 0) + _gameTime += time(NULL) - _clockStopped; + _clockStopped = 0; +} + // ----------------------------------------------------------------------- int AGOSEngine::runScript() {