From df3e545976f401e4be999eb1c8fa9726b9dfcb38 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 22 Aug 2016 21:52:29 -0400 Subject: TITANIC: Implemented more game classes --- engines/titanic/game/idle_summoner.cpp | 79 +++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 6 deletions(-) (limited to 'engines/titanic/game/idle_summoner.cpp') diff --git a/engines/titanic/game/idle_summoner.cpp b/engines/titanic/game/idle_summoner.cpp index 19d760a8db..5ca3209e28 100644 --- a/engines/titanic/game/idle_summoner.cpp +++ b/engines/titanic/game/idle_summoner.cpp @@ -24,10 +24,16 @@ namespace Titanic { -CIdleSummoner::CIdleSummoner() : CGameObject(), _fieldBC(0x57E40), - _fieldC0(0xEA60), _fieldC4(0x57E40), _fieldC8(0xEA60), - _fieldCC(0xEA60), _fieldD0(0xEA60), _fieldD4(0xEA60), - _fieldD8(0xEA60), _fieldDC(0xEA60) { +BEGIN_MESSAGE_MAP(CIdleSummoner, CGameObject) + ON_MESSAGE(EnterViewMsg) + ON_MESSAGE(TimerMsg) + ON_MESSAGE(ActMsg) + ON_MESSAGE(LoadSuccessMsg) +END_MESSAGE_MAP() + +CIdleSummoner::CIdleSummoner() : CGameObject(), _fieldBC(360000), + _fieldC0(60000), _fieldC4(360000), _fieldC8(60000), + _fieldCC(0), _fieldD0(0), _fieldD4(0), _fieldD8(0), _ticks(0) { } void CIdleSummoner::save(SimpleFile *file, int indent) { @@ -40,7 +46,7 @@ void CIdleSummoner::save(SimpleFile *file, int indent) { file->writeNumberLine(_fieldD0, indent); file->writeNumberLine(_fieldD4, indent); file->writeNumberLine(_fieldD8, indent); - file->writeNumberLine(_fieldDC, indent); + file->writeNumberLine(_ticks, indent); CGameObject::save(file, indent); } @@ -55,9 +61,70 @@ void CIdleSummoner::load(SimpleFile *file) { _fieldD0 = file->readNumber(); _fieldD4 = file->readNumber(); _fieldD8 = file->readNumber(); - _fieldDC = file->readNumber(); + _ticks = file->readNumber(); CGameObject::load(file); } +bool CIdleSummoner::EnterViewMsg(CEnterViewMsg *msg) { + CActMsg actMsg("Enable"); + actMsg.execute(this); + return true; +} + +bool CIdleSummoner::TimerMsg(CTimerMsg *msg) { + uint nodesCtr = getNodeChangedCtr(); + if (msg->_actionVal == 1 && !petDoorOrBellbotPresent() + && nodesCtr > 0 && _fieldD8) { + if (!compareRoomNameTo("TopOfWell") && !compareRoomNameTo("EmbLobby")) + return true; + + int region = talkGetDialRegion("BellBot", 1); + uint delay = region == 1 ? 15000 : 12000; + uint enterTicks = MIN(getNodeEnterTicks(), _ticks); + + CString name; + uint ticks = getTicksCount() - enterTicks; + if (ticks > delay) { + if (region == 1 || getRandomNumber(1) == 1) { + name = "BellBot"; + } else { + name = "DoorBot"; + } + _fieldD8 = nodesCtr; + + if (getRoom()) { + CSummonBotQueryMsg queryMsg(name); + if (queryMsg.execute(this)) { + CSummonBotMsg summonMsg(name, 1); + summonMsg.execute(this); + } + } + } + } + + return true; +} + +bool CIdleSummoner::ActMsg(CActMsg *msg) { + if (msg->_action == "Enable") { + if (!_fieldD4) + _fieldD4 = addTimer(15000, 15000); + } else if (msg->_action == "Disable") { + if (_fieldD4 > 0) { + stopAnimTimer(_fieldD4); + _fieldD4 = 0; + } + } else if (msg->_action == "DoorbotDismissed" || msg->_action == "BellbotDismissed") { + _ticks = getTicksCount(); + } + + return true; +} + +bool CIdleSummoner::LoadSuccessMsg(CLoadSuccessMsg *msg) { + _ticks = getTicksCount(); + return true; +} + } // End of namespace Titanic -- cgit v1.2.3