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  | 
