diff options
-rw-r--r-- | engines/titanic/true_talk/tt_npc_script.cpp | 39 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_npc_script.h | 18 |
2 files changed, 47 insertions, 10 deletions
diff --git a/engines/titanic/true_talk/tt_npc_script.cpp b/engines/titanic/true_talk/tt_npc_script.cpp index 48135d0e63..8369d6623a 100644 --- a/engines/titanic/true_talk/tt_npc_script.cpp +++ b/engines/titanic/true_talk/tt_npc_script.cpp @@ -24,6 +24,7 @@ #include "titanic/pet_control/pet_control.h" #include "titanic/true_talk/tt_npc_script.h" #include "titanic/true_talk/true_talk_manager.h" +#include "titanic/game_manager.h" #include "titanic/titanic.h" namespace Titanic { @@ -245,13 +246,20 @@ int TTnpcScript::proc31() { return 0; } -void TTnpcScript::proc32(int dialNum, int region) { - warning("TODO"); +void TTnpcScript::setDialRegion(int dialNum, int region) { + if (dialNum < DIALS_ARRAY_COUNT) + _dialValues[dialNum] = region * 100; + + if (g_vm->_trueTalkManager) { + CPetControl *petControl = getPetControl(g_vm->_trueTalkManager->getGameManager()); + if (petControl) + petControl->playSound(1); + } } void TTnpcScript::setDial(int dialNum, int value) { if (dialNum < DIALS_ARRAY_COUNT) { - int oldRegion = proc34(dialNum); + int oldRegion = getDialRegion(dialNum); int newRegion = 1; if (value < 50) @@ -260,21 +268,30 @@ void TTnpcScript::setDial(int dialNum, int value) { newRegion = 2; if (oldRegion == newRegion) - proc32(dialNum, newRegion); + setDialRegion(dialNum, newRegion); _dialValues[dialNum] = value; } if (g_vm->_trueTalkManager) { - CPetControl *petControl = g_vm->_trueTalkManager->getGameManager()->getPetControl(); + CPetControl *petControl = getPetControl(g_vm->_trueTalkManager->getGameManager()); if (petControl) petControl->resetDials(); } } -int TTnpcScript::proc34(int dialNum) { - warning("TODO"); - return 0; +int TTnpcScript::getDialRegion(int dialNum) { + if (dialNum < DIALS_ARRAY_COUNT) { + int value = _dialValues[dialNum]; + if (value < 50) + return 0; + else if (value > 150) + return 2; + else + return 1; + } else { + return 0; + } } int TTnpcScript::getDialLevel(uint dialNum, bool flag) { @@ -424,4 +441,10 @@ int TTnpcScript::translateByArray(int id) { return -1; } +CPetControl *TTnpcScript::getPetControl(CGameManager *gameManager) { + if (gameManager && gameManager->_project) + return gameManager->_project->getPetControl(); + return nullptr; +} + } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_npc_script.h b/engines/titanic/true_talk/tt_npc_script.h index bb495425aa..69934ce863 100644 --- a/engines/titanic/true_talk/tt_npc_script.h +++ b/engines/titanic/true_talk/tt_npc_script.h @@ -30,6 +30,8 @@ namespace Titanic { #define DIALS_ARRAY_COUNT 10 +class CGameManager; +class CPetControl; class TTroomScript; class TTsentence; @@ -128,6 +130,11 @@ protected: * Returns a dialogue Id by script tag value Id */ uint getDialogueId(uint tagId); + + /** + * Returns a pointer to the PET control + */ + static CPetControl *getPetControl(CGameManager *gameManager); public: TTnpcScript(int charId, const char *charClass, int v2, const char *charName, int v3, int val2, int v4, @@ -174,14 +181,21 @@ public: virtual void saveBody(SimpleFile *file); virtual void loadBody(SimpleFile *file); virtual int proc31(); - virtual void proc32(int dialNum, int region); + + /** + * Sets a given dial to be pointing in a specified region (0 to 2) + */ + virtual void setDialRegion(int dialNum, int region); /** * Sets the value for an NPC's dial */ virtual void setDial(int dialNum, int value); - virtual int proc34(int dialNum); + /** + * Returns a dial's region number + */ + virtual int getDialRegion(int dialNum); /** * Get the NPC's dial level |