mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 03:31:40 +00:00
TITANIC: Implemented more game classes
This commit is contained in:
parent
1dcfe25808
commit
56c2ef9efc
@ -55,14 +55,14 @@ bool CBridgePiece::UseWithOtherMsg(CUseWithOtherMsg *msg) {
|
||||
CShipSetting *shipSetting = static_cast<CShipSetting *>(msg->_other);
|
||||
if (!shipSetting) {
|
||||
return CCarry::UseWithOtherMsg(msg);
|
||||
} else if (shipSetting->_string4 == "NULL") {
|
||||
} else if (shipSetting->_itemName != "NULL") {
|
||||
petAddToInventory();
|
||||
return true;
|
||||
} else {
|
||||
setVisible(false);
|
||||
playSound("z#54.wav", 100, 0, 0);
|
||||
setPosition(shipSetting->_pos1);
|
||||
shipSetting->_string4 = getName();
|
||||
shipSetting->_itemName = getName();
|
||||
petMoveToHiddenRoom();
|
||||
|
||||
CAddHeadPieceMsg headpieceMsg(shipSetting->getName() == _string6 ?
|
||||
|
@ -24,10 +24,17 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSpeechCentre, CBrain)
|
||||
ON_MESSAGE(PuzzleSolvedMsg)
|
||||
ON_MESSAGE(ChangeSeasonMsg)
|
||||
ON_MESSAGE(SpeechFallsFromTreeMsg)
|
||||
ON_MESSAGE(FrameMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CSpeechCentre::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_field13C, indent);
|
||||
file->writeQuotedLine(_string1, indent);
|
||||
file->writeQuotedLine(_season, indent);
|
||||
file->writeNumberLine(_field14C, indent);
|
||||
|
||||
CBrain::save(file, indent);
|
||||
@ -36,10 +43,41 @@ void CSpeechCentre::save(SimpleFile *file, int indent) {
|
||||
void CSpeechCentre::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_field13C = file->readNumber();
|
||||
_string1 = file->readString();
|
||||
_season = file->readString();
|
||||
_field14C = file->readNumber();
|
||||
|
||||
CBrain::load(file);
|
||||
}
|
||||
|
||||
bool CSpeechCentre::PuzzleSolvedMsg(CPuzzleSolvedMsg *msg) {
|
||||
if (_field13C == 1 && _season == "Autumn")
|
||||
_fieldE0 = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechCentre::ChangeSeasonMsg(CChangeSeasonMsg *msg) {
|
||||
_season = msg->_season;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechCentre::SpeechFallsFromTreeMsg(CSpeechFallsFromTreeMsg *msg) {
|
||||
setVisible(true);
|
||||
dragMove(msg->_pos);
|
||||
_field14C = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechCentre::FrameMsg(CFrameMsg *msg) {
|
||||
if (_field14C) {
|
||||
if (_bounds.top > 200)
|
||||
_field14C = false;
|
||||
|
||||
makeDirty();
|
||||
_bounds.top += 3;
|
||||
makeDirty();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,13 +28,18 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSpeechCentre : public CBrain {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool PuzzleSolvedMsg(CPuzzleSolvedMsg *msg);
|
||||
bool ChangeSeasonMsg(CChangeSeasonMsg *msg);
|
||||
bool SpeechFallsFromTreeMsg(CSpeechFallsFromTreeMsg *msg);
|
||||
bool FrameMsg(CFrameMsg *msg);
|
||||
private:
|
||||
int _field13C;
|
||||
CString _string1;
|
||||
CString _season;
|
||||
int _field14C;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CSpeechCentre() : CBrain(), _string1("Summer"),
|
||||
CSpeechCentre() : CBrain(), _season("Summer"),
|
||||
_field13C(1), _field14C(0) {}
|
||||
|
||||
/**
|
||||
|
@ -21,35 +21,109 @@
|
||||
*/
|
||||
|
||||
#include "titanic/game/ship_setting.h"
|
||||
#include "titanic/core/project_item.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CShipSetting, CBackground)
|
||||
ON_MESSAGE(AddHeadPieceMsg)
|
||||
ON_MESSAGE(SetFrameMsg)
|
||||
ON_MESSAGE(EnterRoomMsg)
|
||||
ON_MESSAGE(MouseDragStartMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CShipSetting::CShipSetting() : CBackground(),
|
||||
_string4("NULL"), _string5("NULL") {
|
||||
_itemName("NULL"), _frameTarget("NULL") {
|
||||
}
|
||||
|
||||
void CShipSetting::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeQuotedLine(_string3, indent);
|
||||
file->writeQuotedLine(_target, indent);
|
||||
file->writePoint(_pos1, indent);
|
||||
file->writeQuotedLine(_string4, indent);
|
||||
file->writeQuotedLine(_string5, indent);
|
||||
file->writeQuotedLine(_itemName, indent);
|
||||
file->writeQuotedLine(_frameTarget, indent);
|
||||
|
||||
CBackground::save(file, indent);
|
||||
}
|
||||
|
||||
void CShipSetting::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_string3 = file->readString();
|
||||
_target = file->readString();
|
||||
_pos1 = file->readPoint();
|
||||
_string4 = file->readString();
|
||||
_string5 = file->readString();
|
||||
_itemName = file->readString();
|
||||
_frameTarget = file->readString();
|
||||
|
||||
CBackground::load(file);
|
||||
}
|
||||
|
||||
bool CShipSetting::AddHeadPieceMsg(CAddHeadPieceMsg *msg) {
|
||||
_cursorId = CURSOR_HAND;
|
||||
|
||||
if (msg->_value == "Enable") {
|
||||
CTurnOn onMsg;
|
||||
onMsg.execute(_target);
|
||||
|
||||
if (isEquals("ChickenSetting")) {
|
||||
CActMsg actMsg("DecreaseQuantity");
|
||||
actMsg.execute("ChickenDispenser");
|
||||
}
|
||||
} else {
|
||||
CTurnOff offMsg;
|
||||
offMsg.execute(_target);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSetting::SetFrameMsg(CSetFrameMsg *msg) {
|
||||
msg->execute(_frameTarget);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSetting::EnterRoomMsg(CEnterRoomMsg *msg) {
|
||||
warning("CShipSetting::handleEvent");
|
||||
CSetFrameMsg frameMsg;
|
||||
|
||||
if (_itemName == "ChickenBridge")
|
||||
frameMsg._frameNumber = 1;
|
||||
else if (_itemName == "FanBridge")
|
||||
frameMsg._frameNumber = 2;
|
||||
else if (_itemName == "SeasonBridge")
|
||||
frameMsg._frameNumber = 3;
|
||||
else if (_itemName == "BeamBridge")
|
||||
frameMsg._frameNumber = 4;
|
||||
|
||||
frameMsg.execute(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSetting::MouseDragStartMsg(CMouseDragStartMsg *msg) {
|
||||
if (!checkStartDragging(msg))
|
||||
return false;
|
||||
if (_itemName == "NULL")
|
||||
return true;
|
||||
|
||||
CTurnOff offMsg;
|
||||
offMsg.execute(_target);
|
||||
|
||||
if (isEquals("ChickenSetting") || _itemName == "ChickenBridge") {
|
||||
CActMsg actMsg("IncreaseQuantity");
|
||||
actMsg.execute("ChickenDispenser");
|
||||
}
|
||||
|
||||
if (_itemName != "NULL") {
|
||||
CPassOnDragStartMsg passMsg(msg->_mousePos, 1);
|
||||
passMsg.execute(_itemName);
|
||||
|
||||
msg->_dragItem = getRoot()->findByName(_itemName);
|
||||
|
||||
CVisibleMsg visibleMsg(true);
|
||||
visibleMsg.execute(_itemName);
|
||||
}
|
||||
|
||||
CSetFrameMsg frameMsg(0);
|
||||
frameMsg.execute(_frameTarget);
|
||||
_itemName = "NULL";
|
||||
_cursorId = CURSOR_ARROW;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -29,12 +29,16 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CShipSetting : public CBackground {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool AddHeadPieceMsg(CAddHeadPieceMsg *msg);
|
||||
bool SetFrameMsg(CSetFrameMsg *msg);
|
||||
bool EnterRoomMsg(CEnterRoomMsg *msg);
|
||||
bool MouseDragStartMsg(CMouseDragStartMsg *msg);
|
||||
public:
|
||||
CString _string3;
|
||||
CString _target;
|
||||
Point _pos1;
|
||||
CString _string4;
|
||||
CString _string5;
|
||||
CString _itemName;
|
||||
CString _frameTarget;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CShipSetting();
|
||||
|
@ -24,25 +24,69 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
CShipSettingButton::CShipSettingButton() : CGameObject(), _fieldC8(0), _fieldCC(0) {
|
||||
BEGIN_MESSAGE_MAP(CShipSettingButton, CGameObject)
|
||||
ON_MESSAGE(TurnOn)
|
||||
ON_MESSAGE(TurnOff)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CShipSettingButton::CShipSettingButton() : CGameObject(), _pressed(false), _enabled(false) {
|
||||
}
|
||||
|
||||
void CShipSettingButton::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeQuotedLine(_string1, indent);
|
||||
file->writeNumberLine(_fieldC8, indent);
|
||||
file->writeNumberLine(_fieldCC, indent);
|
||||
file->writeQuotedLine(_target, indent);
|
||||
file->writeNumberLine(_pressed, indent);
|
||||
file->writeNumberLine(_enabled, indent);
|
||||
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
|
||||
void CShipSettingButton::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_string1 = file->readString();
|
||||
_fieldC8 = file->readNumber();
|
||||
_fieldCC = file->readNumber();
|
||||
_target = file->readString();
|
||||
_pressed = file->readNumber();
|
||||
_enabled = file->readNumber();
|
||||
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CShipSettingButton::TurnOn(CTurnOn *msg) {
|
||||
_pressed = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSettingButton::TurnOff(CTurnOff *msg) {
|
||||
_pressed = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSettingButton::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
if (_pressed) {
|
||||
if (_enabled)
|
||||
playMovie(8, 16, 0);
|
||||
else
|
||||
playMovie(0, 8, 0);
|
||||
|
||||
_enabled = !_enabled;
|
||||
CActMsg actMsg(_enabled ? "EnableObject" : "DisableObject");
|
||||
actMsg.execute(_target);
|
||||
} else {
|
||||
if (_enabled) {
|
||||
playMovie(8, 16, 0);
|
||||
playMovie(0, 8, 0);
|
||||
} else {
|
||||
playMovie(0, 16, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShipSettingButton::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
loadFrame(_enabled ? 8 : 16);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,10 +28,15 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CShipSettingButton : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool TurnOn(CTurnOn *msg);
|
||||
bool TurnOff(CTurnOff *msg);
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
private:
|
||||
CString _string1;
|
||||
int _fieldC8;
|
||||
int _fieldCC;
|
||||
CString _target;
|
||||
bool _pressed;
|
||||
bool _enabled;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CShipSettingButton();
|
||||
|
@ -21,21 +21,50 @@
|
||||
*/
|
||||
|
||||
#include "titanic/game/show_cell_points.h"
|
||||
#include "titanic/pet_control/pet_control.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CShowCellpoints, CGameObject)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
ON_MESSAGE(LeaveViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CShowCellpoints::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeQuotedLine(_strValue, indent);
|
||||
file->writeNumberLine(_numValue, indent);
|
||||
file->writeQuotedLine(_npcName, indent);
|
||||
file->writeNumberLine(_flag, indent);
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
|
||||
void CShowCellpoints::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_strValue = file->readString();
|
||||
_numValue = file->readNumber();
|
||||
_npcName = file->readString();
|
||||
_flag = file->readNumber();
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CShowCellpoints::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
CPetControl *pet = getPetControl();
|
||||
if (pet) {
|
||||
petSetArea(PET_CONVERSATION);
|
||||
pet->setActiveNPC(_npcName);
|
||||
pet->incAreaLocks();
|
||||
_flag = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CShowCellpoints::LeaveViewMsg(CLeaveViewMsg *msg) {
|
||||
CPetControl *pet = getPetControl();
|
||||
if (pet && _flag) {
|
||||
pet->resetDials0();
|
||||
pet->decAreaLocks();
|
||||
_flag = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,12 +28,15 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CShowCellpoints : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
bool LeaveViewMsg(CLeaveViewMsg *msg);
|
||||
public:
|
||||
CString _strValue;
|
||||
int _numValue;
|
||||
CString _npcName;
|
||||
bool _flag;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CShowCellpoints() : CGameObject(), _numValue(0) {}
|
||||
CShowCellpoints() : CGameObject(), _flag(false) {}
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
@ -24,15 +24,26 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSpeechDispensor, CBackground)
|
||||
ON_MESSAGE(FrameMsg)
|
||||
ON_MESSAGE(MouseButtonUpMsg)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
ON_MESSAGE(ChangeSeasonMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CSpeechDispensor::CSpeechDispensor() : CBackground(), _dragItem(nullptr),
|
||||
_fieldE0(0), _state(0), _fieldEC(0), _fieldF8(0), _seasonNum(SEASON_SUMMER) {
|
||||
}
|
||||
|
||||
void CSpeechDispensor::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_fieldE0, indent);
|
||||
file->writeNumberLine(_fieldE4, indent);
|
||||
file->writeNumberLine(_state, indent);
|
||||
file->writeNumberLine(_fieldEC, indent);
|
||||
file->writeNumberLine(_fieldF0, indent);
|
||||
file->writeNumberLine(_fieldF4, indent);
|
||||
file->writeNumberLine(_itemPos.x, indent);
|
||||
file->writeNumberLine(_itemPos.y, indent);
|
||||
file->writeNumberLine(_fieldF8, indent);
|
||||
file->writeNumberLine(_fieldFC, indent);
|
||||
file->writeNumberLine(_seasonNum, indent);
|
||||
|
||||
CBackground::save(file, indent);
|
||||
}
|
||||
@ -40,14 +51,92 @@ void CSpeechDispensor::save(SimpleFile *file, int indent) {
|
||||
void CSpeechDispensor::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_fieldE0 = file->readNumber();
|
||||
_fieldE4 = file->readNumber();
|
||||
_state = file->readNumber();
|
||||
_fieldEC = file->readNumber();
|
||||
_fieldF0 = file->readNumber();
|
||||
_fieldF4 = file->readNumber();
|
||||
_itemPos.x = file->readNumber();
|
||||
_itemPos.y = file->readNumber();
|
||||
_fieldF8 = file->readNumber();
|
||||
_fieldFC = file->readNumber();
|
||||
_seasonNum = (Season)file->readNumber();
|
||||
|
||||
CBackground::load(file);
|
||||
}
|
||||
|
||||
bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) {
|
||||
if (_fieldEC || _seasonNum == 0 || _seasonNum == 3)
|
||||
return true;
|
||||
|
||||
CGameObject *dragObject = getDraggingObject();
|
||||
if (!_dragItem && dragObject && getView() == findView()) {
|
||||
if (dragObject->isEquals("Perch")) {
|
||||
petDisplayMessage(1, "This stick is too short to reach the branches.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dragObject->isEquals("LongStick"))
|
||||
_dragItem = dragObject;
|
||||
}
|
||||
|
||||
if (_dragItem) {
|
||||
Point pt(_itemPos.x + _dragItem->_bounds.left,
|
||||
_itemPos.y + _dragItem->_bounds.top);
|
||||
bool flag = checkPoint(pt, true);
|
||||
|
||||
switch (_state) {
|
||||
case 0:
|
||||
playSound("z#93.wav");
|
||||
if (_seasonNum == SEASON_WINTER) {
|
||||
petDisplayMessage(1, "You cannot get this, it is frozen to the branch.");
|
||||
_fieldE0 = false;
|
||||
_state = 1;
|
||||
} else {
|
||||
if (++_fieldE0 >= 5) {
|
||||
CActMsg actMsg("PlayerGetsSpeechCentre");
|
||||
actMsg.execute("SeasonalAdjust");
|
||||
CSpeechFallsFromTreeMsg fallMsg(pt);
|
||||
fallMsg.execute("SpeechCentre");
|
||||
|
||||
_fieldEC = true;
|
||||
_fieldE0 = false;
|
||||
}
|
||||
|
||||
_state = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
_state = 0;
|
||||
++_fieldE0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechDispensor::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
|
||||
if (!_fieldEC) {
|
||||
playSound("z#93.wav");
|
||||
if (_fieldF8) {
|
||||
petDisplayMessage(1, "Sadly, this is out of your reach.");
|
||||
} else {
|
||||
petDisplayMessage(1, "You can't pick this up on account of it being stuck to the branch.");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechDispensor::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
_fieldF8 = msg->_newStatus == 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSpeechDispensor::ChangeSeasonMsg(CChangeSeasonMsg *msg) {
|
||||
_seasonNum = (Season)(((int)_seasonNum + 1) % 4);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,17 +28,22 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSpeechDispensor : public CBackground {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool FrameMsg(CFrameMsg *msg);
|
||||
bool MouseButtonUpMsg(CMouseButtonUpMsg *msg);
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
bool ChangeSeasonMsg(CChangeSeasonMsg *msg);
|
||||
private:
|
||||
int _fieldE0;
|
||||
int _fieldE4;
|
||||
int _fieldE8;
|
||||
int _state;
|
||||
CGameObject *_dragItem;
|
||||
int _fieldEC;
|
||||
int _fieldF0;
|
||||
int _fieldF4;
|
||||
Point _itemPos;
|
||||
int _fieldF8;
|
||||
int _fieldFC;
|
||||
Season _seasonNum;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CSpeechDispensor();
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
@ -24,16 +24,56 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CStarlingPuret, CGameObject)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CStarlingPuret::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_value, indent);
|
||||
file->writeNumberLine(_flag, indent);
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
|
||||
void CStarlingPuret::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_value = file->readNumber();
|
||||
_flag = file->readNumber();
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CStarlingPuret::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
_flag = msg->_newStatus == 1;
|
||||
if (_flag) {
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg._newStatus = 1;
|
||||
changeMsg.execute("StarlingLoop01");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CStarlingPuret::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
if (_flag) {
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg._newStatus = 1;
|
||||
changeMsg.execute("PromDeckStarlings");
|
||||
|
||||
playMovie(MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
|
||||
CSignalObject signalMsg;
|
||||
signalMsg._numValue = 4;
|
||||
signalMsg.execute("PromDeckStarlings");
|
||||
_flag = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CStarlingPuret::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
CActMsg actMsg("StarlingsDead");
|
||||
actMsg.execute("FanController");
|
||||
actMsg.execute("BirdSauceDisp");
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,11 +28,15 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CStarlingPuret : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
private:
|
||||
int _value;
|
||||
bool _flag;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CStarlingPuret() : CGameObject(), _value(0) {}
|
||||
CStarlingPuret() : CGameObject(), _flag(false) {}
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
@ -24,6 +24,10 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CStopPhonographButton, CBackground)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CStopPhonographButton::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
CBackground::save(file, indent);
|
||||
@ -34,4 +38,19 @@ void CStopPhonographButton::load(SimpleFile *file) {
|
||||
CBackground::load(file);
|
||||
}
|
||||
|
||||
bool CStopPhonographButton::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
CQueryPhonographState queryMsg;
|
||||
queryMsg.execute(getParent());
|
||||
|
||||
if (!queryMsg._value) {
|
||||
playMovie(0, 1, 0);
|
||||
playMovie(1, 0, 0);
|
||||
|
||||
CPhonographStopMsg stopMsg;
|
||||
stopMsg.execute(getParent());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,6 +28,8 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CStopPhonographButton : public CBackground {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
@ -24,17 +24,25 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
CSUBGlass::CSUBGlass() : _fieldBC(0), _fieldC0(0), _fieldC4(1), _fieldC8(0) {
|
||||
BEGIN_MESSAGE_MAP(CSUBGlass, CGameObject)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
ON_MESSAGE(MouseButtonUpMsg)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
ON_MESSAGE(SignalObject)
|
||||
ON_MESSAGE(LeaveViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CSUBGlass::CSUBGlass() : _fieldBC(0), _startFrame(0), _endFrame(1), _signalStartFrame(0) {
|
||||
}
|
||||
|
||||
void CSUBGlass::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_fieldBC, indent);
|
||||
file->writeNumberLine(_fieldC0, indent);
|
||||
file->writeNumberLine(_fieldC4, indent);
|
||||
file->writeNumberLine(_fieldC8, indent);
|
||||
file->writeNumberLine(_fieldCC, indent);
|
||||
file->writeQuotedLine(_string, indent);
|
||||
file->writeNumberLine(_startFrame, indent);
|
||||
file->writeNumberLine(_endFrame, indent);
|
||||
file->writeNumberLine(_signalStartFrame, indent);
|
||||
file->writeNumberLine(_signalEndFrame, indent);
|
||||
file->writeQuotedLine(_target, indent);
|
||||
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
@ -42,13 +50,58 @@ void CSUBGlass::save(SimpleFile *file, int indent) {
|
||||
void CSUBGlass::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_fieldBC = file->readNumber();
|
||||
_fieldC0 = file->readNumber();
|
||||
_fieldC4 = file->readNumber();
|
||||
_fieldC8 = file->readNumber();
|
||||
_fieldCC = file->readNumber();
|
||||
_string = file->readString();
|
||||
_startFrame = file->readNumber();
|
||||
_endFrame = file->readNumber();
|
||||
_signalStartFrame = file->readNumber();
|
||||
_signalEndFrame = file->readNumber();
|
||||
_target = file->readString();
|
||||
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CSUBGlass::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSUBGlass::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
|
||||
if (!_fieldBC && _startFrame >= 0) {
|
||||
_fieldBC = true;
|
||||
playMovie(_startFrame, _endFrame, MOVIE_NOTIFY_OBJECT);
|
||||
playSound("z#30.wav");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSUBGlass::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
if (msg->_endFrame == _endFrame) {
|
||||
_fieldBC = true;
|
||||
CSignalObject signalMsg(getName(), 1);
|
||||
signalMsg.execute(_target);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSUBGlass::SignalObject(CSignalObject *msg) {
|
||||
if (msg->_numValue == 1) {
|
||||
setVisible(true);
|
||||
|
||||
if (_signalStartFrame >= 0) {
|
||||
playMovie(_signalStartFrame, _signalEndFrame, MOVIE_GAMESTATE);
|
||||
playSound("z#30.wav");
|
||||
_fieldBC = false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSUBGlass::LeaveViewMsg(CLeaveViewMsg *msg) {
|
||||
_fieldBC = false;
|
||||
setVisible(true);
|
||||
loadFrame(0);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,13 +28,19 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSUBGlass : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
bool MouseButtonUpMsg(CMouseButtonUpMsg *msg);
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
bool SignalObject(CSignalObject *msg);
|
||||
bool LeaveViewMsg(CLeaveViewMsg *msg);
|
||||
private:
|
||||
int _fieldBC;
|
||||
int _fieldC0;
|
||||
int _fieldC4;
|
||||
int _fieldC8;
|
||||
int _fieldCC;
|
||||
CString _string;
|
||||
int _startFrame;
|
||||
int _endFrame;
|
||||
int _signalStartFrame;
|
||||
int _signalEndFrame;
|
||||
CString _target;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CSUBGlass();
|
||||
|
@ -24,16 +24,56 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSUBWrapper, CGameObject)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
ON_MESSAGE(SignalObject)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CSUBWrapper::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_value, indent);
|
||||
file->writeNumberLine(_flag, indent);
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
|
||||
void CSUBWrapper::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_value = file->readNumber();
|
||||
_flag = file->readNumber();
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CSUBWrapper::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
if (_flag) {
|
||||
stopMovie();
|
||||
setVisible(false);
|
||||
_flag = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSUBWrapper::SignalObject(CSignalObject *msg) {
|
||||
switch (msg->_numValue) {
|
||||
case 1:
|
||||
if (!_flag) {
|
||||
loadFrame(0);
|
||||
setVisible(true);
|
||||
playMovie(MOVIE_NOTIFY_OBJECT);
|
||||
_flag = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (!_flag) {
|
||||
setVisible(true);
|
||||
_flag = true;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,11 +28,14 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSUBWrapper : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
bool SignalObject(CSignalObject *msg);
|
||||
public:
|
||||
int _value;
|
||||
bool _flag;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CSUBWrapper() : CGameObject(), _value(0) {}
|
||||
CSUBWrapper() : CGameObject(), _flag(false) {}
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
@ -24,6 +24,12 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSweetBowl, CGameObject)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
ON_MESSAGE(ActMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CSweetBowl::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
CGameObject::save(file, indent);
|
||||
@ -34,4 +40,28 @@ void CSweetBowl::load(SimpleFile *file) {
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CSweetBowl::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
setVisible(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSweetBowl::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
setVisible(false);
|
||||
loadSound("b#43.wav");
|
||||
playSound("b#42.wav");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSweetBowl::ActMsg(CActMsg *msg) {
|
||||
if (msg->_action == "Jiggle") {
|
||||
setVisible(true);
|
||||
playMovie(MOVIE_GAMESTATE | MOVIE_NOTIFY_OBJECT);
|
||||
playSound(getRandomNumber(1) == 1 ? "b#42.wav" : "b#43.wav");
|
||||
}
|
||||
|
||||
petDisplayMessage(isEquals("BowlNutsRustler") ?
|
||||
"A bowl of pistachio nuts." : "Not a bowl of pistachio nuts.");
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,6 +28,10 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSweetBowl : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
bool ActMsg(CActMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
@ -24,6 +24,14 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSliderButton, CSTButton)
|
||||
ON_MESSAGE(MouseButtonUpMsg)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
ON_MESSAGE(MouseDragMoveMsg)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CSliderButton::CSliderButton() : CSTButton(), _field114(0),
|
||||
_field118(0), _field11C(0) {
|
||||
}
|
||||
@ -48,4 +56,39 @@ void CSliderButton::load(SimpleFile *file) {
|
||||
CSTButton::load(file);
|
||||
}
|
||||
|
||||
bool CSliderButton::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
|
||||
_pos1 = msg->_mousePos;
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg.execute(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSliderButton::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
_pos1 = msg->_mousePos;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSliderButton::MouseDragMoveMsg(CMouseDragMoveMsg *msg) {
|
||||
_pos1 = msg->_mousePos;
|
||||
if (_field118) {
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg.execute(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSliderButton::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg._oldStatus = _currentStatus;
|
||||
_currentStatus = (_pos1.y - _bounds.top) / _field11C;
|
||||
changeMsg._newStatus = _currentStatus;
|
||||
changeMsg.execute(_actionTarget);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSliderButton::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,6 +28,12 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CSliderButton : public CSTButton {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonUpMsg(CMouseButtonUpMsg *msg);
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
bool MouseDragMoveMsg(CMouseDragMoveMsg *msg);
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
private:
|
||||
int _field114;
|
||||
int _field118;
|
||||
|
@ -24,6 +24,10 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CStatusChangeButton, CSTButton)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CStatusChangeButton::CStatusChangeButton() : CSTButton() {
|
||||
}
|
||||
|
||||
@ -37,4 +41,11 @@ void CStatusChangeButton::load(SimpleFile *file) {
|
||||
CSTButton::load(file);
|
||||
}
|
||||
|
||||
bool CStatusChangeButton::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
CStatusChangeMsg changeMsg;
|
||||
changeMsg._newStatus = _statusInc;
|
||||
changeMsg.execute(_actionTarget);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -28,6 +28,8 @@
|
||||
namespace Titanic {
|
||||
|
||||
class CStatusChangeButton : public CSTButton {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
CStatusChangeButton();
|
||||
|
@ -303,7 +303,7 @@ MESSAGE2(CSetVolumeMsg, int, volume, 70, int, secondsTransition, 0);
|
||||
MESSAGE2(CShipSettingMsg, int, value, 0, CString, name, "");
|
||||
MESSAGE1(CShowTextMsg, CString, value, "NO TEXT INCLUDED!!!");
|
||||
MESSAGE2(CSignalObject, CString, strValue, "", int, numValue, 0);
|
||||
MESSAGE2(CSpeechFallsFromTreeMsg, int, value1, 0, int, value2, 0);
|
||||
MESSAGE1(CSpeechFallsFromTreeMsg, Point, pos, Point());
|
||||
MESSAGE1(CStartMusicMsg, CMusicPlayer *, musicPlayer, (CMusicPlayer *)nullptr);
|
||||
MESSAGE3(CStatusChangeMsg, int, oldStatus, 0, int, newStatus, 0, bool, success, false);
|
||||
MESSAGE1(CStopMusicMsg, CMusicPlayer *, musicPlayer, (CMusicPlayer *)nullptr);
|
||||
|
@ -194,6 +194,10 @@ void CPetControl::setActiveNPC(CTrueTalkNPC *npc) {
|
||||
}
|
||||
}
|
||||
|
||||
void CPetControl::setActiveNPC(const CString &name) {
|
||||
_conversations.setActiveNPC(name);
|
||||
}
|
||||
|
||||
void CPetControl::refreshNPC() {
|
||||
_conversations.setNPC(_activeNPCName);
|
||||
}
|
||||
@ -660,6 +664,10 @@ void CPetControl::convResetDials(int flag) {
|
||||
_conversations.resetDials(_activeNPCName);
|
||||
}
|
||||
|
||||
void CPetControl::resetDials0() {
|
||||
_conversations.resetDials0();
|
||||
}
|
||||
|
||||
int CPetControl::getMailDest(const CRoomFlags &roomFlags) const {
|
||||
if (!roomFlags.isSuccUBusRoomFlags())
|
||||
return roomFlags.getPassengerClassNum();
|
||||
|
@ -358,9 +358,7 @@ public:
|
||||
/**
|
||||
* Sets the active NPC
|
||||
*/
|
||||
void setActiveNPC(const CString &name) {
|
||||
_conversations.setActiveNPC(name);
|
||||
}
|
||||
void setActiveNPC(const CString &name);
|
||||
|
||||
/**
|
||||
* Sets the actie NPC
|
||||
@ -387,7 +385,7 @@ public:
|
||||
/**
|
||||
* Resets the conversation dials back to 0 position
|
||||
*/
|
||||
void resetDials0() { _conversations.resetDials0(); }
|
||||
void resetDials0();
|
||||
|
||||
/**
|
||||
* Resets the dial display in the conversation tab to reflect new values
|
||||
|
@ -99,16 +99,6 @@ private:
|
||||
*/
|
||||
void summonBot(const CString &name);
|
||||
|
||||
/**
|
||||
* Starts the NPC timer
|
||||
*/
|
||||
void startNPCTimer();
|
||||
|
||||
/**
|
||||
* Stops the NPC timer
|
||||
*/
|
||||
void stopNPCTimer();
|
||||
|
||||
/**
|
||||
* Get the TrueTalk script associated with a given NPC
|
||||
*/
|
||||
@ -260,6 +250,16 @@ public:
|
||||
* Adds a line to the log
|
||||
*/
|
||||
void addLine(const CString &line);
|
||||
|
||||
/**
|
||||
* Starts the NPC timer
|
||||
*/
|
||||
void startNPCTimer();
|
||||
|
||||
/**
|
||||
* Stops the NPC timer
|
||||
*/
|
||||
void stopNPCTimer();
|
||||
};
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
Loading…
x
Reference in New Issue
Block a user