TITANIC: Implemented more game classes
This commit is contained in:
parent
9ebd75742e
commit
e7d0047b53
24 changed files with 560 additions and 50 deletions
|
@ -21,9 +21,17 @@
|
|||
*/
|
||||
|
||||
#include "titanic/carry/fruit.h"
|
||||
#include "titanic/npcs/character.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CFruit, CCarry)
|
||||
ON_MESSAGE(UseWithCharMsg)
|
||||
ON_MESSAGE(LemonFallsFromTreeMsg)
|
||||
ON_MESSAGE(UseWithOtherMsg)
|
||||
ON_MESSAGE(FrameMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CFruit::CFruit() : CCarry(), _field12C(0),
|
||||
_field130(0), _field134(0), _field138(0) {
|
||||
}
|
||||
|
@ -48,4 +56,43 @@ void CFruit::load(SimpleFile *file) {
|
|||
CCarry::load(file);
|
||||
}
|
||||
|
||||
bool CFruit::UseWithCharMsg(CUseWithCharMsg *msg) {
|
||||
if (msg->_character->isEquals("Barbot") && msg->_character->_visible) {
|
||||
CActMsg actMsg("Fruit");
|
||||
actMsg.execute(msg->_character);
|
||||
_fieldE0 = 0;
|
||||
setVisible(false);
|
||||
return true;
|
||||
} else {
|
||||
return CCarry::UseWithCharMsg(msg);
|
||||
}
|
||||
}
|
||||
|
||||
bool CFruit::LemonFallsFromTreeMsg(CLemonFallsFromTreeMsg *msg) {
|
||||
setVisible(true);
|
||||
dragMove(msg->_pt);
|
||||
_field130 = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CFruit::UseWithOtherMsg(CUseWithOtherMsg *msg) {
|
||||
petAddToInventory();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CFruit::FrameMsg(CFrameMsg *msg) {
|
||||
if (_field130) {
|
||||
if (_bounds.top > 240) {
|
||||
_field130 = 0;
|
||||
_field134 = 1;
|
||||
}
|
||||
|
||||
makeDirty();
|
||||
_bounds.top += 3;
|
||||
makeDirty();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CFruit : public CCarry {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool UseWithCharMsg(CUseWithCharMsg *msg);
|
||||
bool LemonFallsFromTreeMsg(CLemonFallsFromTreeMsg *msg);
|
||||
bool UseWithOtherMsg(CUseWithOtherMsg *msg);
|
||||
bool FrameMsg(CFrameMsg *msg);
|
||||
private:
|
||||
int _field12C;
|
||||
int _field130;
|
||||
|
|
|
@ -21,9 +21,21 @@
|
|||
*/
|
||||
|
||||
#include "titanic/carry/glass.h"
|
||||
#include "titanic/carry/chicken.h"
|
||||
#include "titanic/game/sauce_dispensor.h"
|
||||
#include "titanic/npcs/character.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGlass, CCarry)
|
||||
ON_MESSAGE(UseWithOtherMsg)
|
||||
ON_MESSAGE(UseWithCharMsg)
|
||||
ON_MESSAGE(ActMsg)
|
||||
ON_MESSAGE(MouseDragEndMsg)
|
||||
ON_MESSAGE(TurnOn)
|
||||
ON_MESSAGE(TurnOff)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CGlass::CGlass() : CCarry(), _string6("None") {
|
||||
}
|
||||
|
||||
|
@ -39,4 +51,108 @@ void CGlass::load(SimpleFile *file) {
|
|||
CCarry::load(file);
|
||||
}
|
||||
|
||||
bool CGlass::UseWithOtherMsg(CUseWithOtherMsg *msg) {
|
||||
CSauceDispensor *dispensor = dynamic_cast<CSauceDispensor *>(msg->_other);
|
||||
CChicken *chicken = dynamic_cast<CChicken *>(msg->_other);
|
||||
|
||||
if (dispensor && _string6 != "None") {
|
||||
CUse useMsg(this);
|
||||
useMsg.execute(dispensor);
|
||||
} else if (msg->_other->isEquals("Chicken") && _string6 != "None") {
|
||||
if (chicken->_string6 != "None") {
|
||||
if (!chicken->_field12C) {
|
||||
CActMsg actMsg(_string6);
|
||||
actMsg.execute("Chicken");
|
||||
}
|
||||
|
||||
_string6 = "None";
|
||||
loadFrame(0);
|
||||
_visibleFrame = 0;
|
||||
}
|
||||
|
||||
petAddToInventory();
|
||||
} else if (msg->_other->isEquals("Napkin") && _string6 != "None") {
|
||||
petAddToInventory();
|
||||
_string6 = "None";
|
||||
loadFrame(0);
|
||||
_visibleFrame = 0;
|
||||
} else {
|
||||
petAddToInventory();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlass::UseWithCharMsg(CUseWithCharMsg *msg) {
|
||||
if (msg->_character->isEquals("Barbot") && msg->_character->_visible) {
|
||||
CActMsg actMsg(_string6);
|
||||
setVisible(false);
|
||||
|
||||
if (_string6 != "Bird")
|
||||
setPosition(_origPos);
|
||||
|
||||
actMsg.execute(msg->_character);
|
||||
} else {
|
||||
petAddToInventory();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlass::ActMsg(CActMsg *msg) {
|
||||
if (msg->_action == "GoToPET") {
|
||||
setVisible(true);
|
||||
petAddToInventory();
|
||||
} else if (msg->_action == "Mustard") {
|
||||
_string6 = "Mustard";
|
||||
loadFrame(1);
|
||||
_visibleFrame = 1;
|
||||
} else if (msg->_action == "Tomato") {
|
||||
_string6 = "Tomato";
|
||||
loadFrame(2);
|
||||
_visibleFrame = 2;
|
||||
} else if (msg->_action == "Bird") {
|
||||
_string6 = "Bird";
|
||||
loadFrame(3);
|
||||
_visibleFrame = 3;
|
||||
} else if (msg->_action == "InTitilator") {
|
||||
_string6 = "None";
|
||||
loadFrame(0);
|
||||
_visibleFrame = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlass::MouseDragEndMsg(CMouseDragEndMsg *msg) {
|
||||
showMouse();
|
||||
if (msg->_dropTarget) {
|
||||
error("TODO: See what drop target is");
|
||||
CCharacter *npc = dynamic_cast<CCharacter *>(msg->_dropTarget);
|
||||
if (npc) {
|
||||
CUseWithCharMsg useMsg(npc);
|
||||
useMsg.execute(this);
|
||||
} else {
|
||||
CUseWithOtherMsg otherMsg(npc);
|
||||
otherMsg.execute(this);
|
||||
}
|
||||
} else if (compareViewNameTo(_fullViewName) && msg->_mousePos.y < 360) {
|
||||
setPosition(_origPos);
|
||||
} else {
|
||||
petAddToInventory();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlass::TurnOn(CTurnOn *msg) {
|
||||
setVisible(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlass::TurnOff(CTurnOff *msg) {
|
||||
setVisible(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,13 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGlass : public CCarry {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool UseWithOtherMsg(CUseWithOtherMsg *msg);
|
||||
bool UseWithCharMsg(CUseWithCharMsg *msg);
|
||||
bool ActMsg(CActMsg *msg);
|
||||
bool MouseDragEndMsg(CMouseDragEndMsg *msg);
|
||||
bool TurnOn(CTurnOn *msg);
|
||||
bool TurnOff(CTurnOff *msg);
|
||||
private:
|
||||
CString _string6;
|
||||
public:
|
||||
|
|
|
@ -21,9 +21,14 @@
|
|||
*/
|
||||
|
||||
#include "titanic/game/floor_indicator.h"
|
||||
#include "titanic/pet_control/pet_control.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CFloorIndicator, CGameObject)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CFloorIndicator::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
CGameObject::save(file, indent);
|
||||
|
@ -34,4 +39,10 @@ void CFloorIndicator::load(SimpleFile *file) {
|
|||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CFloorIndicator::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
int floorNum = MAX(1, getPetControl()->getRoomsFloorNum());
|
||||
loadFrame(floorNum - 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CFloorIndicator : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
|
|
@ -24,16 +24,42 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGamesConsole, CBackground)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
ON_MESSAGE(LeaveViewMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CGamesConsole::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_fieldE0, indent);
|
||||
file->writeNumberLine(_active, indent);
|
||||
CBackground::save(file, indent);
|
||||
}
|
||||
|
||||
void CGamesConsole::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_fieldE0 = file->readNumber();
|
||||
_active = file->readNumber();
|
||||
CBackground::load(file);
|
||||
}
|
||||
|
||||
bool CGamesConsole::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
if (_active) {
|
||||
playMovie(23, 44, 0);
|
||||
_active = false;
|
||||
} else {
|
||||
playMovie(0, 23, 0);
|
||||
_active = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGamesConsole::LeaveViewMsg(CLeaveViewMsg *msg) {
|
||||
if (_active) {
|
||||
_active = false;
|
||||
playMovie(23, 44, MOVIE_GAMESTATE);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,11 +28,14 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGamesConsole : public CBackground {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
bool LeaveViewMsg(CLeaveViewMsg *msg);
|
||||
public:
|
||||
int _fieldE0;
|
||||
bool _active;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CGamesConsole() : CBackground(), _fieldE0(0) {}
|
||||
CGamesConsole() : CBackground(), _active(false) {}
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
|
|
@ -21,34 +21,80 @@
|
|||
*/
|
||||
|
||||
#include "titanic/game/get_lift_eye2.h"
|
||||
#include "titanic/game/transport/lift.h"
|
||||
#include "titanic/core/project_item.h"
|
||||
#include "titanic/pet_control/pet_control.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
CString *CGetLiftEye2::_v1;
|
||||
BEGIN_MESSAGE_MAP(CGetLiftEye2, CGameObject)
|
||||
ON_MESSAGE(ActMsg)
|
||||
ON_MESSAGE(EnterRoomMsg)
|
||||
ON_MESSAGE(VisibleMsg)
|
||||
ON_MESSAGE(MouseDragStartMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CString *CGetLiftEye2::_destObject;
|
||||
|
||||
void CGetLiftEye2::init() {
|
||||
_v1 = new CString();
|
||||
_destObject = new CString();
|
||||
}
|
||||
|
||||
void CGetLiftEye2::deinit() {
|
||||
delete _v1;
|
||||
delete _destObject;
|
||||
}
|
||||
|
||||
void CGetLiftEye2::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeQuotedLine(*_v1, indent);
|
||||
file->writeQuotedLine(*_destObject, indent);
|
||||
CGameObject::save(file, indent);
|
||||
}
|
||||
|
||||
void CGetLiftEye2::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
*_v1 = file->readString();
|
||||
*_destObject = file->readString();
|
||||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CGetLiftEye2::EnterRoomMsg(CEnterRoomMsg *msg) {
|
||||
warning("CGetLiftEye2::handleEvent");
|
||||
bool CGetLiftEye2::ActMsg(CActMsg *msg) {
|
||||
*_destObject = msg->_action;
|
||||
setVisible(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGetLiftEye2::EnterRoomMsg(CEnterRoomMsg *msg) {
|
||||
CPetControl *pet = getPetControl();
|
||||
if (pet->getRoomsElevatorNum() == 4 && CLift::_v1 == 1 && !CLift::_v6) {
|
||||
_cursorId = CURSOR_HAND;
|
||||
setVisible(true);
|
||||
} else {
|
||||
_cursorId = CURSOR_ARROW;
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGetLiftEye2::VisibleMsg(CVisibleMsg *msg) {
|
||||
setVisible(true);
|
||||
_cursorId = CURSOR_HAND;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGetLiftEye2::MouseDragStartMsg(CMouseDragStartMsg *msg) {
|
||||
if (checkPoint(msg->_mousePos, false, true)) {
|
||||
_cursorId = CURSOR_ARROW;
|
||||
setVisible(false);
|
||||
CActMsg actMsg("EyeNotHead");
|
||||
actMsg.execute(*_destObject);
|
||||
CPassOnDragStartMsg dragMsg(msg->_mousePos, 1);
|
||||
dragMsg.execute(*_destObject);
|
||||
|
||||
msg->_dragItem = getRoot()->findByName(*_destObject);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,9 +28,13 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGetLiftEye2 : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool ActMsg(CActMsg *msg);
|
||||
bool EnterRoomMsg(CEnterRoomMsg *msg);
|
||||
bool VisibleMsg(CVisibleMsg *msg);
|
||||
bool MouseDragStartMsg(CMouseDragStartMsg *msg);
|
||||
public:
|
||||
static CString *_v1;
|
||||
static CString *_destObject;
|
||||
public:
|
||||
CLASSDEF;
|
||||
static void init();
|
||||
|
|
|
@ -24,6 +24,11 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGlassSmasher, CGameObject)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CGlassSmasher::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
CGameObject::save(file, indent);
|
||||
|
@ -34,4 +39,18 @@ void CGlassSmasher::load(SimpleFile *file) {
|
|||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CGlassSmasher::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
setVisible(true);
|
||||
playSound("b#40.wav");
|
||||
playMovie(MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGlassSmasher::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
setVisible(false);
|
||||
CVisibleMsg visibleMsg(true);
|
||||
visibleMsg.execute("LongStickDispenser");
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGlassSmasher : public CGameObject {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
|
|
@ -24,12 +24,16 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGondolierBase, CGameObject)
|
||||
ON_MESSAGE(PuzzleSolvedMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
int CGondolierBase::_v1;
|
||||
int CGondolierBase::_v2;
|
||||
int CGondolierBase::_v3;
|
||||
bool CGondolierBase::_puzzleSolved;
|
||||
int CGondolierBase::_volume1;
|
||||
int CGondolierBase::_v4;
|
||||
int CGondolierBase::_v5;
|
||||
int CGondolierBase::_v6;
|
||||
int CGondolierBase::_volume2;
|
||||
int CGondolierBase::_v7;
|
||||
int CGondolierBase::_v8;
|
||||
int CGondolierBase::_v9;
|
||||
|
@ -38,11 +42,11 @@ int CGondolierBase::_v10;
|
|||
void CGondolierBase::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_v1, indent);
|
||||
file->writeNumberLine(_v2, indent);
|
||||
file->writeNumberLine(_v3, indent);
|
||||
file->writeNumberLine(_puzzleSolved, indent);
|
||||
file->writeNumberLine(_volume1, indent);
|
||||
file->writeNumberLine(_v4, indent);
|
||||
file->writeNumberLine(_v5, indent);
|
||||
file->writeNumberLine(_v6, indent);
|
||||
file->writeNumberLine(_volume2, indent);
|
||||
file->writeNumberLine(_v7, indent);
|
||||
file->writeNumberLine(_v8, indent);
|
||||
file->writeNumberLine(_v9, indent);
|
||||
|
@ -54,11 +58,11 @@ void CGondolierBase::save(SimpleFile *file, int indent) {
|
|||
void CGondolierBase::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_v1 = file->readNumber();
|
||||
_v2 = file->readNumber();
|
||||
_v3 = file->readNumber();
|
||||
_puzzleSolved = file->readNumber();
|
||||
_volume1 = file->readNumber();
|
||||
_v4 = file->readNumber();
|
||||
_v5 = file->readNumber();
|
||||
_v6 = file->readNumber();
|
||||
_volume2 = file->readNumber();
|
||||
_v7 = file->readNumber();
|
||||
_v8 = file->readNumber();
|
||||
_v9 = file->readNumber();
|
||||
|
@ -67,4 +71,9 @@ void CGondolierBase::load(SimpleFile *file) {
|
|||
CGameObject::load(file);
|
||||
}
|
||||
|
||||
bool CGondolierBase::PuzzleSolvedMsg(CPuzzleSolvedMsg *msg) {
|
||||
_puzzleSolved = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGondolierBase : public CGameObject {
|
||||
private:
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool PuzzleSolvedMsg(CPuzzleSolvedMsg *msg);
|
||||
protected:
|
||||
static int _v1;
|
||||
static int _v2;
|
||||
static int _v3;
|
||||
static bool _puzzleSolved;
|
||||
static int _volume1;
|
||||
static int _v4;
|
||||
static int _v5;
|
||||
static int _v6;
|
||||
static int _volume2;
|
||||
static int _v7;
|
||||
static int _v8;
|
||||
static int _v9;
|
||||
|
|
|
@ -24,6 +24,12 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGondolierChest, CGondolierBase)
|
||||
ON_MESSAGE(MouseButtonDownMsg)
|
||||
ON_MESSAGE(MovieEndMsg)
|
||||
ON_MESSAGE(MouseDragStartMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CGondolierChest::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
CGondolierBase::save(file, indent);
|
||||
|
@ -34,4 +40,27 @@ void CGondolierChest::load(SimpleFile *file) {
|
|||
CGondolierBase::load(file);
|
||||
}
|
||||
|
||||
bool CGondolierChest::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
|
||||
if (!_v1)
|
||||
playMovie(0, 14, MOVIE_NOTIFY_OBJECT);
|
||||
else if (msg->_mousePos.y < 330)
|
||||
return false;
|
||||
else if (!_v8 && !_v5) {
|
||||
playMovie(14, 29, 0);
|
||||
_v1 = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierChest::MovieEndMsg(CMovieEndMsg *msg) {
|
||||
if (msg->_endFrame == 14)
|
||||
_v1 = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierChest::MouseDragStartMsg(CMouseDragStartMsg *msg) {
|
||||
return false;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,10 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGondolierChest : public CGondolierBase {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
|
||||
bool MovieEndMsg(CMovieEndMsg *msg);
|
||||
bool MouseDragStartMsg(CMouseDragStartMsg *msg);
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
|
|
@ -24,16 +24,35 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGondolierFace, CGondolierBase)
|
||||
ON_MESSAGE(EnterViewMsg)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CGondolierFace::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_fieldBC, indent);
|
||||
file->writeNumberLine(_flag, indent);
|
||||
CGondolierBase::save(file, indent);
|
||||
}
|
||||
|
||||
void CGondolierFace::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_fieldBC = file->readNumber();
|
||||
_flag = file->readNumber();
|
||||
CGondolierBase::load(file);
|
||||
}
|
||||
|
||||
bool CGondolierFace::EnterViewMsg(CEnterViewMsg *msg) {
|
||||
if (_flag)
|
||||
playMovie(MOVIE_REPEAT);
|
||||
else
|
||||
setVisible(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierFace::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
_flag = msg->_newStatus != 1;
|
||||
setVisible(_flag);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,11 +28,14 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGondolierFace : public CGondolierBase {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool EnterViewMsg(CEnterViewMsg *msg);
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
private:
|
||||
int _fieldBC;
|
||||
bool _flag;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CGondolierFace() : CGondolierBase(), _fieldBC(0) {}
|
||||
CGondolierFace() : CGondolierBase(), _flag(true) {}
|
||||
|
||||
/**
|
||||
* Save the data for the class to file
|
||||
|
|
|
@ -25,20 +25,30 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGondolierMixer, CGondolierBase)
|
||||
ON_MESSAGE(EnterRoomMsg)
|
||||
ON_MESSAGE(LeaveRoomMsg)
|
||||
ON_MESSAGE(TurnOn)
|
||||
ON_MESSAGE(TurnOff)
|
||||
ON_MESSAGE(SetVolumeMsg)
|
||||
ON_MESSAGE(SignalObject)
|
||||
ON_MESSAGE(LoadSuccessMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
CGondolierMixer::CGondolierMixer() : CGondolierBase(),
|
||||
_string1("c#0.wav"), _string2("c#1.wav"),
|
||||
_fieldBC(-1), _fieldC0(-1), _fieldC4(0), _fieldC8(0),
|
||||
_fieldE4(0) {
|
||||
_soundName1("c#0.wav"), _soundName2("c#1.wav"),
|
||||
_soundHandle1(-1), _soundHandle2(-1), _fieldC4(0), _fieldC8(0),
|
||||
_fieldE4(false) {
|
||||
}
|
||||
|
||||
void CGondolierMixer::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_fieldBC, indent);
|
||||
file->writeNumberLine(_fieldC0, indent);
|
||||
file->writeNumberLine(_soundHandle1, indent);
|
||||
file->writeNumberLine(_soundHandle2, indent);
|
||||
file->writeNumberLine(_fieldC4, indent);
|
||||
file->writeNumberLine(_fieldC8, indent);
|
||||
file->writeQuotedLine(_string1, indent);
|
||||
file->writeQuotedLine(_string2, indent);
|
||||
file->writeQuotedLine(_soundName1, indent);
|
||||
file->writeQuotedLine(_soundName2, indent);
|
||||
file->writeNumberLine(_fieldE4, indent);
|
||||
|
||||
CGondolierBase::save(file, indent);
|
||||
|
@ -46,12 +56,12 @@ void CGondolierMixer::save(SimpleFile *file, int indent) {
|
|||
|
||||
void CGondolierMixer::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_fieldBC = file->readNumber();
|
||||
_fieldC0 = file->readNumber();
|
||||
_soundHandle1 = file->readNumber();
|
||||
_soundHandle2 = file->readNumber();
|
||||
_fieldC4 = file->readNumber();
|
||||
_fieldC8 = file->readNumber();
|
||||
_string1 = file->readString();
|
||||
_string2 = file->readString();
|
||||
_soundName1 = file->readString();
|
||||
_soundName2 = file->readString();
|
||||
_fieldE4 = file->readNumber();
|
||||
|
||||
CGondolierBase::load(file);
|
||||
|
@ -59,10 +69,126 @@ void CGondolierMixer::load(SimpleFile *file) {
|
|||
|
||||
bool CGondolierMixer::EnterRoomMsg(CEnterRoomMsg *msg) {
|
||||
CRoomItem *parentRoom = dynamic_cast<CRoomItem *>(getParent());
|
||||
if (parentRoom == msg->_newRoom)
|
||||
msg->execute(parentRoom);
|
||||
if (parentRoom == msg->_newRoom) {
|
||||
CTurnOn onMsg;
|
||||
onMsg.execute(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::LeaveRoomMsg(CLeaveRoomMsg *msg) {
|
||||
CRoomItem *parentRoom = dynamic_cast<CRoomItem *>(getParent());
|
||||
if (parentRoom == msg->_oldRoom) {
|
||||
CTurnOff offMsg;
|
||||
offMsg.execute(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::TurnOn(CTurnOn *msg) {
|
||||
if (!_puzzleSolved) {
|
||||
if (_soundHandle1 == -1) {
|
||||
_soundHandle1 = playSound(_soundName1, _volume1 * _v4 / 10, 0, true);
|
||||
_fieldE4 = true;
|
||||
}
|
||||
|
||||
if (_soundHandle2 == -1) {
|
||||
_soundHandle2 = playSound(_soundName1, _volume2 * _v7 / 10, 0, true);
|
||||
_fieldE4 = true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::TurnOff(CTurnOff *msg) {
|
||||
if (_soundHandle1 != -1) {
|
||||
if (isSoundActive(_soundHandle1))
|
||||
stopSound(_soundHandle1, 2);
|
||||
|
||||
_soundHandle1 = -1;
|
||||
_fieldE4 = false;
|
||||
}
|
||||
|
||||
if (_soundHandle2 != -1) {
|
||||
if (isSoundActive(_soundHandle2))
|
||||
stopSound(_soundHandle2, 2);
|
||||
|
||||
_soundHandle2 = -1;
|
||||
_fieldE4 = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::SetVolumeMsg(CSetVolumeMsg *msg) {
|
||||
if (!_puzzleSolved) {
|
||||
_volume1 = _volume2 = msg->_volume;
|
||||
|
||||
if (_soundHandle1 != -1 && isSoundActive(_soundHandle1))
|
||||
setSoundVolume(_soundHandle1, msg->_volume * _v4 / 10, 2);
|
||||
if (_soundHandle2 != -1 && isSoundActive(_soundHandle2))
|
||||
setSoundVolume(_soundHandle2, msg->_volume * _v7 / 10, 2);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::SignalObject(CSignalObject *msg) {
|
||||
if (!_puzzleSolved) {
|
||||
if (msg->_strValue == "Fly") {
|
||||
_v4 = CLIP(msg->_numValue, 0, 10);
|
||||
|
||||
if (!_v8) {
|
||||
_v7 = 10 - _v4;
|
||||
CStatusChangeMsg statusMsg;
|
||||
statusMsg._newStatus = _v7;
|
||||
statusMsg.execute("GondolierRightLever");
|
||||
}
|
||||
}
|
||||
|
||||
if (msg->_strValue == "Tos") {
|
||||
_v7 = CLIP(msg->_numValue, 0, 10);
|
||||
|
||||
if (!_v5) {
|
||||
_v4 = 10 - _v7;
|
||||
CStatusChangeMsg statusMsg;
|
||||
statusMsg._newStatus = _v4;
|
||||
statusMsg.execute("GondolierLeftLever");
|
||||
}
|
||||
}
|
||||
|
||||
if (!_v4 && !_v7 && _v5 && _v8) {
|
||||
_puzzleSolved = true;
|
||||
CStatusChangeMsg statusMsg;
|
||||
statusMsg._newStatus = 1;
|
||||
statusMsg.execute("GondolierFace");
|
||||
CTurnOff offMsg;
|
||||
offMsg.execute(this);
|
||||
CVisibleMsg visibleMsg;
|
||||
visibleMsg.execute("Mouth");
|
||||
|
||||
playSound("z#47.wav");
|
||||
} else {
|
||||
CSetVolumeMsg volumeMsg(_volume1, 2);
|
||||
volumeMsg.execute(this);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGondolierMixer::LoadSuccessMsg(CLoadSuccessMsg *msg) {
|
||||
if (_fieldE4) {
|
||||
_fieldE4 = 0;
|
||||
_soundHandle1 = _soundHandle2 = -1;
|
||||
CTurnOn onMsg;
|
||||
onMsg.execute(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -29,15 +29,22 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGondolierMixer : public CGondolierBase {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool EnterRoomMsg(CEnterRoomMsg *msg);
|
||||
bool LeaveRoomMsg(CLeaveRoomMsg *msg);
|
||||
bool TurnOn(CTurnOn *msg);
|
||||
bool TurnOff(CTurnOff *msg);
|
||||
bool SetVolumeMsg(CSetVolumeMsg *msg);
|
||||
bool SignalObject(CSignalObject *msg);
|
||||
bool LoadSuccessMsg(CLoadSuccessMsg *msg);
|
||||
private:
|
||||
int _fieldBC;
|
||||
int _fieldC0;
|
||||
int _soundHandle1;
|
||||
int _soundHandle2;
|
||||
int _fieldC4;
|
||||
int _fieldC8;
|
||||
CString _string1;
|
||||
CString _string2;
|
||||
int _fieldE4;
|
||||
CString _soundName1;
|
||||
CString _soundName2;
|
||||
bool _fieldE4;
|
||||
public:
|
||||
CLASSDEF;
|
||||
CGondolierMixer();
|
||||
|
|
|
@ -251,7 +251,7 @@ bool CTelevision::MovieEndMsg(CMovieEndMsg *msg) {
|
|||
loadFrame(502);
|
||||
else
|
||||
warning("There is currently nothing available for your viewing pleasure on this channel.");
|
||||
} else if (_fieldE0 == 5 && *CGetLiftEye2::_v1 != "NULL") {
|
||||
} else if (_fieldE0 == 5 && *CGetLiftEye2::_destObject != "NULL") {
|
||||
loadFrame(393 + _v4);
|
||||
} else {
|
||||
warning("There is currently nothing available for your viewing pleasure on this channel.");
|
||||
|
|
|
@ -24,14 +24,31 @@
|
|||
|
||||
namespace Titanic {
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGondolier, CTransport)
|
||||
ON_MESSAGE(StatusChangeMsg)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
int CGondolier::_v1;
|
||||
int CGondolier::_v2;
|
||||
|
||||
void CGondolier::save(SimpleFile *file, int indent) {
|
||||
file->writeNumberLine(1, indent);
|
||||
file->writeNumberLine(_v1, indent);
|
||||
file->writeNumberLine(_v2, indent);
|
||||
CTransport::save(file, indent);
|
||||
}
|
||||
|
||||
void CGondolier::load(SimpleFile *file) {
|
||||
file->readNumber();
|
||||
_v1 = file->readNumber();
|
||||
_v2 = file->readNumber();
|
||||
CTransport::load(file);
|
||||
}
|
||||
|
||||
bool CGondolier::StatusChangeMsg(CStatusChangeMsg *msg) {
|
||||
CShowTextMsg textMsg("Only First Class passengers are allowed to use the Gondoliers.");
|
||||
textMsg.execute("PET");
|
||||
return true;
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
namespace Titanic {
|
||||
|
||||
class CGondolier : public CTransport {
|
||||
DECLARE_MESSAGE_MAP;
|
||||
bool StatusChangeMsg(CStatusChangeMsg *msg);
|
||||
private:
|
||||
static int _v1;
|
||||
static int _v2;
|
||||
public:
|
||||
CLASSDEF;
|
||||
|
||||
|
|
|
@ -236,7 +236,7 @@ MESSAGE2(CEnterRoomMsg, CRoomItem *, oldRoom, nullptr, CRoomItem *, newRoom, nul
|
|||
MESSAGE2(CEnterViewMsg, CViewItem *, oldView, nullptr, CViewItem *, newView, nullptr);
|
||||
MESSAGE0(CErasePhonographCylinderMsg);
|
||||
MESSAGE1(CFrameMsg, uint, ticks, 0);
|
||||
MESSAGE2(CFreshenCookieMsg, int, value1, 0, int, value2, 0);
|
||||
MESSAGE2(CFreshenCookieMsg, int, value1, 0, int, value2, 1);
|
||||
MESSAGE1(CGetChevClassBits, int, classBits, 0);
|
||||
MESSAGE1(CGetChevClassNum, int, classNum, 0);
|
||||
MESSAGE2(CGetChevCodeFromRoomNameMsg, CString, roomName, "", uint, chevCode, 0);
|
||||
|
@ -255,7 +255,7 @@ MESSAGE1(CKeyCharMsg, int, key, 32);
|
|||
MESSAGE2(CLeaveNodeMsg, CNodeItem *, oldNode, nullptr, CNodeItem *, newNode, nullptr);
|
||||
MESSAGE2(CLeaveRoomMsg, CRoomItem *, oldRoom, nullptr, CRoomItem *, newRoom, nullptr);
|
||||
MESSAGE2(CLeaveViewMsg, CViewItem *, oldView, nullptr, CViewItem *, newView, nullptr);
|
||||
MESSAGE2(CLemonFallsFromTreeMsg, int, value1, 0, int, value2, 0);
|
||||
MESSAGE1(CLemonFallsFromTreeMsg, Point, pt, Point());
|
||||
MESSAGE1(CLoadSuccessMsg, int, ticks, 0);
|
||||
MESSAGE1(CLockPhonographMsg, int, value, 0);
|
||||
MESSAGE0(CMaitreDDefeatedMsg);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue