diff --git a/engines/kingdom/GPLogic4.cpp b/engines/kingdom/GPLogic4.cpp index f6984d3ed6d..4d4debeecf8 100644 --- a/engines/kingdom/GPLogic4.cpp +++ b/engines/kingdom/GPLogic4.cpp @@ -25,214 +25,46 @@ namespace Kingdom { -void Logic::GPLogic4() { - switch(_statPlay) { - case 900: +void Logic::GPL4_900() { + if (_vm->_aTimer > 0) { + _vm->playSound(0); + _vm->_aTimer = 133; + } + if (_vm->_asMode) { + _vm->switchMtoA(); + _mapStat = 0; + _oldStatPlay--; + _vm->_asMode = false; + } + _vm->saveAS(); + _vm->fadeToBlack2(); + + if (_health == 10 || _health == 6 || _health == 2) { + _vm->showPic(121); + _vm->_bTimer = 38; + _vm->readMouse(); + while (_vm->_bTimer && !_vm->_mouseButton) { + _vm->checkTimers(); + _vm->refreshSound(); + _vm->readMouse(); + } + + if (_vm->_aTimer > 0) + _vm->setATimer(); + + _vm->_userInput = 0; + GPL4_901(); + } else { if (_vm->_aTimer > 0) { - _vm->playSound(0); + _vm->setATimer(); _vm->_aTimer = 133; } - if (_vm->_asMode) { - _vm->switchMtoA(); - _mapStat = 0; - _oldStatPlay--; - _vm->_asMode = false; - } - _vm->saveAS(); - _vm->fadeToBlack2(); - - if (_health == 10 || _health == 6 || _health == 2) { - _vm->showPic(121); - _vm->_bTimer = 38; - _vm->readMouse(); - while (_vm->_bTimer && !_vm->_mouseButton) { - _vm->checkTimers(); - _vm->refreshSound(); - _vm->readMouse(); - } - - if (_vm->_aTimer > 0) - _vm->setATimer(); - - _vm->_userInput = 0; - GPLogic4_SP901(); - } else { - if (_vm->_aTimer > 0) { - _vm->setATimer(); - _vm->_aTimer = 133; - } - _vm->showPic(120); - _statPlay = 901; - } - break; - case 901: - GPLogic4_SP901(); - break; - case 991: - _currMap = 10; - _vm->_userInput = 0; - _vm->playSound(0); - if (_health == 10 || _health == 6 || _health == 2) - _health -= 2; - else - _health -= 4; - - if (_health == 0) { - _vm->playMovie(194); - _vm->_noIFScreen = true; - _vm->fShowPic(107); - _currMap = 3; - dsAll(); - _pouch = false; - _vm->playSound(1); - memset(_inventory, -1, 19); - _statPlay = 994; - } else { - _vm->_bTimer = 36; - while(_vm->_bTimer) { - _vm->checkTimers(); - _vm->refreshSound(); - } - - _vm->_loopFlag = true; - if (_nodes[29] == 1) { - _nodes[29] = 0; - _nodes[49] = 0; - } - - _vm->_itemInhibit = false; - _tideCntl = false; - _vm->drawPic(179); - _vm->_skylarTimer = 0; - _vm->_skylarTimerFlag = false; - enAll(); - _vm->_mapEx = true; - _nodeNum = 5; - _vm->drawLocation(); - _vm->playSound(0); - if (_nodes[5] > 0) { - _vm->playMovie(197); - _resurrect = true; - } - inventoryDel(12); - _statPlay = 50; - } - break; - case 992: - _currMap = 10; - _vm->_userInput = 0; - _vm->playSound(0); - if (_health == 10 || _health == 6 || _health == 2) - _health -= 2; - else - _health -= 4; - - if (_health == 0) { - _vm->playMovie(194); - _vm->_noIFScreen = true; - _vm->fShowPic(107); - _currMap = 3; - dsAll(); - _pouch = false; - _vm->playSound(1); - memset(_inventory, -1, 19); - _statPlay = 994; - } else { - _vm->_bTimer = 36; - while(_vm->_bTimer != 0) { - _vm->checkTimers(); - _vm->refreshSound(); - } - - _vm->_loopFlag = true; - if (_nodes[29] == 1) { - _nodes[29] = 0; - _nodes[49] = 0; - } - - _vm->_itemInhibit = false; - _tideCntl = false; - _vm->drawPic(179); - _vm->_skylarTimer = 0; - _vm->_skylarTimerFlag = false; - enAll(); - _vm->_mapEx = true; - _nodeNum = 27; - _vm->drawLocation(); - _resurrect = true; - _vm->playSound(0); - _vm->playMovie(195); - inventoryDel(12); - _statPlay = 270; - } - break; - case 993: - _currMap = 10; - _vm->_userInput = 0; - _vm->playSound(0); - if (_health == 10 || _health == 6 || _health == 2) - _health -= 2; - else - _health -= 4; - - if (_health == 0) { - _vm->playMovie(194); - _vm->_noIFScreen = true; - _vm->fShowPic(107); - _currMap = 3; - dsAll(); - _pouch = false; - _vm->playSound(1); - memset(_inventory, -1, 19); - _statPlay = 994; - } else { - _vm->_bTimer = 36; - while (_vm->_bTimer != 0) { - _vm->checkTimers(); - _vm->refreshSound(); - } - - _vm->_loopFlag = true; - if (_nodes[29] == 1) { - _nodes[29] = 0; - _nodes[49] = 0; - } - if (_nodes[68] == 1) - _nodes[68] = 0; - - _vm->_itemInhibit = false; - _tideCntl = false; - _vm->drawPic(179); - _vm->_skylarTimer = 0; - _vm->_skylarTimerFlag = false; - enAll(); - _vm->_mapEx = true; - _nodeNum = 52; - _vm->drawLocation(); - _resurrect = true; - _vm->playSound(0); - _vm->playMovie(196); - inventoryDel(12); - _statPlay = 520; - } - break; - case 994: - switch(_vm->_userInput) { - case 0x190: - _vm->initPlay(); - // TODO _QuitFlag = 1; - _vm->_quit = true; - break; - case 0x191: - // TODO _QuitFlag = 2; - _vm->_quit = true; - break; - } - break; + _vm->showPic(120); + _statPlay = 901; } } -void Logic::GPLogic4_SP901() { +void Logic::GPL4_901() { _vm->setMouse(); _vm->eraseCursor(); _vm->fadeToBlack2(); @@ -242,7 +74,7 @@ void Logic::GPLogic4_SP901() { _vm->drawPic(178); else _vm->drawPic(179); - + _vm->_iconRedraw = true; if (_vm->_userInput == 0x2F1) { _vm->_asMode = false; @@ -270,4 +102,173 @@ void Logic::GPLogic4_SP901() { } } +void Logic::GPL4_991() { + _currMap = 10; + _vm->_userInput = 0; + _vm->playSound(0); + if (_health == 10 || _health == 6 || _health == 2) + _health -= 2; + else + _health -= 4; + + if (_health == 0) { + _vm->playMovie(194); + _vm->_noIFScreen = true; + _vm->fShowPic(107); + _currMap = 3; + dsAll(); + _pouch = false; + _vm->playSound(1); + memset(_inventory, -1, 19); + _statPlay = 994; + } else { + _vm->_bTimer = 36; + while(_vm->_bTimer) { + _vm->checkTimers(); + _vm->refreshSound(); + } + + _vm->_loopFlag = true; + if (_nodes[29] == 1) { + _nodes[29] = 0; + _nodes[49] = 0; + } + + _vm->_itemInhibit = false; + _tideCntl = false; + _vm->drawPic(179); + _vm->_skylarTimer = 0; + _vm->_skylarTimerFlag = false; + enAll(); + _vm->_mapEx = true; + _nodeNum = 5; + _vm->drawLocation(); + _vm->playSound(0); + if (_nodes[5] > 0) { + _vm->playMovie(197); + _resurrect = true; + } + inventoryDel(12); + _statPlay = 50; + } +} + +void Logic::GPL4_992() { + _currMap = 10; + _vm->_userInput = 0; + _vm->playSound(0); + if (_health == 10 || _health == 6 || _health == 2) + _health -= 2; + else + _health -= 4; + + if (_health == 0) { + _vm->playMovie(194); + _vm->_noIFScreen = true; + _vm->fShowPic(107); + _currMap = 3; + dsAll(); + _pouch = false; + _vm->playSound(1); + memset(_inventory, -1, 19); + _statPlay = 994; + } else { + _vm->_bTimer = 36; + while(_vm->_bTimer != 0) { + _vm->checkTimers(); + _vm->refreshSound(); + } + + _vm->_loopFlag = true; + if (_nodes[29] == 1) { + _nodes[29] = 0; + _nodes[49] = 0; + } + + _vm->_itemInhibit = false; + _tideCntl = false; + _vm->drawPic(179); + _vm->_skylarTimer = 0; + _vm->_skylarTimerFlag = false; + enAll(); + _vm->_mapEx = true; + _nodeNum = 27; + _vm->drawLocation(); + _resurrect = true; + _vm->playSound(0); + _vm->playMovie(195); + inventoryDel(12); + _statPlay = 270; + } +} + +void Logic::GPL4_993() { + _currMap = 10; + _vm->_userInput = 0; + _vm->playSound(0); + if (_health == 10 || _health == 6 || _health == 2) + _health -= 2; + else + _health -= 4; + + if (_health == 0) { + _vm->playMovie(194); + _vm->_noIFScreen = true; + _vm->fShowPic(107); + _currMap = 3; + dsAll(); + _pouch = false; + _vm->playSound(1); + memset(_inventory, -1, 19); + _statPlay = 994; + } else { + _vm->_bTimer = 36; + while (_vm->_bTimer != 0) { + _vm->checkTimers(); + _vm->refreshSound(); + } + + _vm->_loopFlag = true; + if (_nodes[29] == 1) { + _nodes[29] = 0; + _nodes[49] = 0; + } + if (_nodes[68] == 1) + _nodes[68] = 0; + + _vm->_itemInhibit = false; + _tideCntl = false; + _vm->drawPic(179); + _vm->_skylarTimer = 0; + _vm->_skylarTimerFlag = false; + enAll(); + _vm->_mapEx = true; + _nodeNum = 52; + _vm->drawLocation(); + _resurrect = true; + _vm->playSound(0); + _vm->playMovie(196); + inventoryDel(12); + _statPlay = 520; + } +} + +void Logic::GPL4_994() { + switch(_vm->_userInput) { + case 0x190: + _vm->initPlay(); + // TODO _QuitFlag = 1; + _vm->_quit = true; + break; + case 0x191: + // TODO _QuitFlag = 2; + _vm->_quit = true; + break; + default: + if (_vm->_userInput) + debug("Skipped UserInput %d(0x%04X) for _StatPlay %d", _vm->_userInput, _vm->_userInput, _statPlay); + break; + } +} + } // Namespace diff --git a/engines/kingdom/kingdom.cpp b/engines/kingdom/kingdom.cpp index 7de011c8c2d..ba4f5fb7967 100644 --- a/engines/kingdom/kingdom.cpp +++ b/engines/kingdom/kingdom.cpp @@ -190,7 +190,7 @@ Common::Error KingdomGame::run() { } if (_logic->_statPlay > 899) - _logic->GPLogic4(); + _logic->executeOpcode(); } if (!_loopFlag) diff --git a/engines/kingdom/logic.cpp b/engines/kingdom/logic.cpp index a70f92f5f6e..196dc1bbe56 100644 --- a/engines/kingdom/logic.cpp +++ b/engines/kingdom/logic.cpp @@ -270,6 +270,13 @@ void Logic::initOpcodes() { _opCodes[781] = &Logic::GPL3_781; _opCodes[790] = &Logic::GPL3_790; _opCodes[791] = &Logic::GPL3_791; + + _opCodes[900] = &Logic::GPL4_900; + _opCodes[901] = &Logic::GPL4_901; + _opCodes[991] = &Logic::GPL4_991; + _opCodes[992] = &Logic::GPL4_992; + _opCodes[993] = &Logic::GPL4_993; + _opCodes[994] = &Logic::GPL4_994; } void Logic::enAll() { diff --git a/engines/kingdom/logic.h b/engines/kingdom/logic.h index 77141a740b6..176f90e00b0 100644 --- a/engines/kingdom/logic.h +++ b/engines/kingdom/logic.h @@ -230,6 +230,13 @@ private: void GPL3_790(); void GPL3_791(); + void GPL4_900(); + void GPL4_901(); + void GPL4_991(); + void GPL4_992(); + void GPL4_993(); + void GPL4_994(); + public: int _statPlay; int _oldStatPlay; @@ -267,7 +274,6 @@ public: void GPLogic1_SubSP10(); void GPLogic1_SubSP121(); void GPLogic2_SubSP361(); - void GPLogic4_SP901(); bool chkDesertObstacles(); void increaseHealth(); void endCredits(); @@ -277,8 +283,6 @@ public: explicit Logic(Kingdom::KingdomGame *vm); virtual ~Logic(void) {} - void GPLogic3(); - void GPLogic4(); void gameHelp(); void inventoryDel(int item); void inventoryAdd(int item);