[Scummvm-cvs-logs] scummvm master -> cd8415cfd6e51ef8ab2d4e51ddb4a120253e3b96

dreammaster dreammaster at scummvm.org
Fri Aug 19 05:53:06 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
cd8415cfd6 TITANIC: Implementing game classes


Commit: cd8415cfd6e51ef8ab2d4e51ddb4a120253e3b96
    https://github.com/scummvm/scummvm/commit/cd8415cfd6e51ef8ab2d4e51ddb4a120253e3b96
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-08-18T23:52:58-04:00

Commit Message:
TITANIC: Implementing game classes

Changed paths:
    engines/titanic/game/desk_click_responder.cpp
    engines/titanic/game/desk_click_responder.h
    engines/titanic/game/sgt/desk.cpp
    engines/titanic/game/sgt/desk.h
    engines/titanic/game/sgt/deskchair.cpp
    engines/titanic/game/sgt/deskchair.h
    engines/titanic/game/sgt/sgt_state_room.cpp
    engines/titanic/game/sgt/sgt_state_room.h
    engines/titanic/messages/door_auto_sound_event.cpp
    engines/titanic/messages/door_auto_sound_event.h



diff --git a/engines/titanic/game/desk_click_responder.cpp b/engines/titanic/game/desk_click_responder.cpp
index d9b2cb6..2cd5d1e 100644
--- a/engines/titanic/game/desk_click_responder.cpp
+++ b/engines/titanic/game/desk_click_responder.cpp
@@ -21,13 +21,19 @@
  */
 
 #include "titanic/game/desk_click_responder.h"
+#include "titanic/titanic.h"
 
 namespace Titanic {
 
+BEGIN_MESSAGE_MAP(CDeskClickResponder, CClickResponder)
+	ON_MESSAGE(MouseButtonDownMsg)
+	ON_MESSAGE(LoadSuccessMsg)
+END_MESSAGE_MAP()
+
 void CDeskClickResponder::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	file->writeNumberLine(_fieldD4, indent);
-	file->writeNumberLine(_fieldD8, indent);
+	file->writeNumberLine(_ticks, indent);
 
 	CClickResponder::save(file, indent);
 }
@@ -35,9 +41,28 @@ void CDeskClickResponder::save(SimpleFile *file, int indent) {
 void CDeskClickResponder::load(SimpleFile *file) {
 	file->readNumber();
 	_fieldD4 = file->readNumber();
-	_fieldD8 = file->readNumber();
+	_ticks = file->readNumber();
 
 	CClickResponder::load(file);
 }
 
+bool CDeskClickResponder::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+	_fieldD4 = (_fieldD4 + 1) % 3;
+	if (_fieldD4)
+		return CClickResponder::MouseButtonDownMsg(msg);
+
+	uint ticks = g_vm->_events->getTicksCount();
+	if (!_ticks || ticks > (_ticks + 4000)) {
+		playSound("a#22.wav");
+		_ticks = ticks;
+	}
+
+	return true;
+}
+
+bool CDeskClickResponder::LoadSuccessMsg(CLoadSuccessMsg *msg) {
+	_ticks = 0;
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/game/desk_click_responder.h b/engines/titanic/game/desk_click_responder.h
index 12825ba..13cf7f4 100644
--- a/engines/titanic/game/desk_click_responder.h
+++ b/engines/titanic/game/desk_click_responder.h
@@ -28,9 +28,12 @@
 namespace Titanic {
 
 class CDeskClickResponder : public CClickResponder {
+	DECLARE_MESSAGE_MAP;
+	bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
+	bool LoadSuccessMsg(CLoadSuccessMsg *msg);
 protected:
 	int _fieldD4;
-	int _fieldD8;
+	uint _ticks;
 public:
 	CLASSDEF;
 
diff --git a/engines/titanic/game/sgt/desk.cpp b/engines/titanic/game/sgt/desk.cpp
index 4dd0fda..51be14a 100644
--- a/engines/titanic/game/sgt/desk.cpp
+++ b/engines/titanic/game/sgt/desk.cpp
@@ -24,6 +24,12 @@
 
 namespace Titanic {
 
+BEGIN_MESSAGE_MAP(CDesk, CSGTStateRoom)
+	ON_MESSAGE(TurnOn)
+	ON_MESSAGE(TurnOff)
+	ON_MESSAGE(MovieEndMsg)
+END_MESSAGE_MAP()
+
 void CDesk::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	CSGTStateRoom::save(file, indent);
@@ -34,4 +40,44 @@ void CDesk::load(SimpleFile *file) {
 	CSGTStateRoom::load(file);
 }
 
+bool CDesk::TurnOn(CTurnOn *msg) {
+	if (_statics->_v5 == "Closed" && _statics->_v1 == "RestingG"
+			&& _statics->_v1 == "OpenWrong") {
+		_statics->_v5 = "Open";
+		_fieldE0 = false;
+		_startFrame = 1;
+		_endFrame = 26;
+		playMovie(1, 26, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+		playSound("b#12.wav");
+	}
+
+	return true;
+}
+
+bool CDesk::TurnOff(CTurnOff *msg) {
+	if (_statics->_v5 == "Open" && _statics->_v6 == "Closed"
+			&& _statics->_v1 == "Open") {
+		CVisibleMsg visibleMsg(false);
+		visibleMsg.execute("ChestOfDrawers");
+
+		_statics->_v5 = "Closed";
+		_fieldE0 = true;
+		_startFrame = 26;
+		_endFrame = 51;
+		playMovie(26, 51, MOVIE_GAMESTATE);
+		playSound("b#9.wav");
+	}
+
+	return true;
+}
+
+bool CDesk::MovieEndMsg(CMovieEndMsg *msg) {
+	if (_statics->_v5 == "Open") {
+		CVisibleMsg visibleMsg(true);
+		visibleMsg.execute("ChestOfDrawers");
+	}
+
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/game/sgt/desk.h b/engines/titanic/game/sgt/desk.h
index 77b5fa1..8b9e1fe 100644
--- a/engines/titanic/game/sgt/desk.h
+++ b/engines/titanic/game/sgt/desk.h
@@ -28,6 +28,10 @@
 namespace Titanic {
 
 class CDesk : public CSGTStateRoom {
+	DECLARE_MESSAGE_MAP;
+	bool TurnOn(CTurnOn *msg);
+	bool TurnOff(CTurnOff *msg);
+	bool MovieEndMsg(CMovieEndMsg *msg);
 public:
 	CLASSDEF;
 
diff --git a/engines/titanic/game/sgt/deskchair.cpp b/engines/titanic/game/sgt/deskchair.cpp
index a4a2bad..7f64c2e 100644
--- a/engines/titanic/game/sgt/deskchair.cpp
+++ b/engines/titanic/game/sgt/deskchair.cpp
@@ -24,6 +24,13 @@
 
 namespace Titanic {
 
+BEGIN_MESSAGE_MAP(CDeskchair, CSGTStateRoom)
+	ON_MESSAGE(TurnOn)
+	ON_MESSAGE(TurnOff)
+	ON_MESSAGE(ActMsg)
+	ON_MESSAGE(MovieEndMsg)
+END_MESSAGE_MAP()
+
 void CDeskchair::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	CSGTStateRoom::save(file, indent);
@@ -34,4 +41,49 @@ void CDeskchair::load(SimpleFile *file) {
 	CSGTStateRoom::load(file);
 }
 
+bool CDeskchair::TurnOn(CTurnOn *msg) {
+	if (_statics->_v8 == "Closed" && _statics->_v9 == "Closed") {
+		setVisible(true);
+		_statics->_v9 = "Open";
+		_fieldE0 = false;
+		_startFrame = 0;
+		_endFrame = 16;
+		playMovie(0, 16, MOVIE_GAMESTATE);
+		playSound("b#8.wav");
+	}
+
+	return true;
+}
+
+bool CDeskchair::TurnOff(CTurnOff *msg) {
+	if (_statics->_v9 == "Open") {
+		_statics->_v9 = "Closed";
+		_fieldE0 = true;
+		_startFrame = 16;
+		_endFrame = 32;
+		playMovie(16, 32, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+		playSound("b#2.wav");
+	}
+
+	return true;
+}
+
+bool CDeskchair::ActMsg(CActMsg *msg) {
+	if (msg->_action == "Smash") {
+		setVisible(false);
+		_statics->_v9 = "Closed";
+		_fieldE0 = true;
+		loadFrame(0);
+		return true;
+	} else {
+		return CSGTStateRoom::ActMsg(msg);
+	}
+}
+
+bool CDeskchair::MovieEndMsg(CMovieEndMsg *msg) {
+	if (_statics->_v9 == "Closed")
+		setVisible(false);
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/game/sgt/deskchair.h b/engines/titanic/game/sgt/deskchair.h
index 5181b65..6e7bbe4 100644
--- a/engines/titanic/game/sgt/deskchair.h
+++ b/engines/titanic/game/sgt/deskchair.h
@@ -28,6 +28,11 @@
 namespace Titanic {
 
 class CDeskchair : public CSGTStateRoom {
+	DECLARE_MESSAGE_MAP;
+	bool TurnOn(CTurnOn *msg);
+	bool TurnOff(CTurnOff *msg);
+	bool ActMsg(CActMsg *msg);
+	bool MovieEndMsg(CMovieEndMsg *msg);
 public:
 	CLASSDEF;
 
diff --git a/engines/titanic/game/sgt/sgt_state_room.cpp b/engines/titanic/game/sgt/sgt_state_room.cpp
index 55f08de..c089e40 100644
--- a/engines/titanic/game/sgt/sgt_state_room.cpp
+++ b/engines/titanic/game/sgt/sgt_state_room.cpp
@@ -21,17 +21,22 @@
  */
 
 #include "titanic/game/sgt/sgt_state_room.h"
+#include "titanic/pet_control/pet_control.h"
 
 namespace Titanic {
 
 BEGIN_MESSAGE_MAP(CSGTStateRoom, CBackground)
+	ON_MESSAGE(ActMsg)
+	ON_MESSAGE(VisibleMsg)
 	ON_MESSAGE(EnterRoomMsg)
+	ON_MESSAGE(LeaveRoomMsg)
 END_MESSAGE_MAP()
 
 CSGTStateRoomStatics *CSGTStateRoom::_statics;
 
 void CSGTStateRoom::init() {
 	_statics = new CSGTStateRoomStatics();
+	_statics->_v1 = "Closed";
 }
 
 void CSGTStateRoom::deinit() {
@@ -94,8 +99,80 @@ void CSGTStateRoom::load(SimpleFile *file) {
 	CBackground::load(file);
 }
 
+bool CSGTStateRoom::ActMsg(CActMsg *msg) {
+	CPetControl *pet = getPetControl();
+	uint roomFlags = pet->getRoomFlags();
+	uint assignedRoom = pet->getAssignedRoomFlags();
+
+	if (roomFlags != assignedRoom) {
+		petDisplayMessage("This is not your assigned room. Please do not enjoy.");
+	} else if (_fieldE0) {
+		CTurnOn onMsg;
+		onMsg.execute(this);
+	} else {
+		CTurnOff offMsg;
+		offMsg.execute(this);
+	}
+
+	return true;
+}
+
+bool CSGTStateRoom::VisibleMsg(CVisibleMsg *msg) {
+	setVisible(msg->_visible);
+	return true;
+}
+
 bool CSGTStateRoom::EnterRoomMsg(CEnterRoomMsg *msg) {
-	warning("CSGTStateRoom::handleEvent");
+	CPetControl *pet = getPetControl();
+	uint roomFlags = pet->getRoomFlags();
+	uint assignedRoom = pet->getAssignedRoomFlags();
+
+	if (roomFlags == assignedRoom) {
+		loadFrame(_fieldE8);
+		_fieldE0 = _fieldEC;
+		setVisible(_fieldF0);
+
+		if (isEquals("Desk") && _statics->_v5 == "Closed")
+			loadFrame(1);
+	}
+
+	if (isEquals("Drawer")) {
+		petSetArea(PET_REMOTE);
+		if (roomFlags == assignedRoom && getPassengerClass() == 3
+				&& _statics->_v13) {
+			playSound("b#21.wav");
+			_statics->_v13 = 0;
+		}
+
+		_statics->_v7 = "Closed";
+		setVisible(false);
+		_fieldE0 = true;
+	} else if (roomFlags != assignedRoom) {
+		loadFrame(0);
+		if (_fieldE4) {
+			setVisible(true);
+			if (isEquals("Desk"))
+				loadFrame(1);
+		} else {
+			setVisible(false);
+		}
+	}
+
+	return true;
+}
+
+bool CSGTStateRoom::LeaveRoomMsg(CLeaveRoomMsg *msg) {
+	CPetControl *pet = getPetControl();
+	uint roomFlags = pet->getRoomFlags();
+	uint assignedRoom = pet->getAssignedRoomFlags();
+
+	if (roomFlags == assignedRoom) {
+		_fieldE8 = getMovieFrame();
+		_fieldEC = _fieldE0;
+		_fieldF0 = _visible;
+	}
+
+	_statics->_v14 = roomFlags;
 	return true;
 }
 
diff --git a/engines/titanic/game/sgt/sgt_state_room.h b/engines/titanic/game/sgt/sgt_state_room.h
index d9ffdb8..3975f7b 100644
--- a/engines/titanic/game/sgt/sgt_state_room.h
+++ b/engines/titanic/game/sgt/sgt_state_room.h
@@ -47,15 +47,18 @@ struct CSGTStateRoomStatics {
 
 class CSGTStateRoom : public CBackground {
 	DECLARE_MESSAGE_MAP;
+	bool ActMsg(CActMsg *msg);
+	bool VisibleMsg(CVisibleMsg *msg);
 	bool EnterRoomMsg(CEnterRoomMsg *msg);
+	bool LeaveRoomMsg(CLeaveRoomMsg *msg);
 protected:
 	static CSGTStateRoomStatics *_statics;
 protected:
-	int _fieldE0;
+	bool _fieldE0;
 	int _fieldE4;
 	int _fieldE8;
-	int _fieldEC;
-	int _fieldF0;
+	bool _fieldEC;
+	bool _fieldF0;
 public:
 	CLASSDEF;
 	CSGTStateRoom();
diff --git a/engines/titanic/messages/door_auto_sound_event.cpp b/engines/titanic/messages/door_auto_sound_event.cpp
index b9cedae..7618577 100644
--- a/engines/titanic/messages/door_auto_sound_event.cpp
+++ b/engines/titanic/messages/door_auto_sound_event.cpp
@@ -24,6 +24,12 @@
 
 namespace Titanic {
 
+BEGIN_MESSAGE_MAP(CDoorAutoSoundEvent, CAutoSoundEvent)
+	ON_MESSAGE(PreEnterNodeMsg)
+	ON_MESSAGE(LeaveNodeMsg)
+	ON_MESSAGE(TimerMsg)
+END_MESSAGE_MAP()
+
 void CDoorAutoSoundEvent::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	file->writeQuotedLine(_string1, indent);
@@ -44,4 +50,16 @@ void CDoorAutoSoundEvent::load(SimpleFile *file) {
 	CAutoSoundEvent::load(file);
 }
 
+bool CDoorAutoSoundEvent::PreEnterNodeMsg(CPreEnterNodeMsg *msg) {
+	return true;
+}
+
+bool CDoorAutoSoundEvent::LeaveNodeMsg(CLeaveNodeMsg *msg) {
+	return true;
+}
+
+bool CDoorAutoSoundEvent::TimerMsg(CTimerMsg *msg) {
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/messages/door_auto_sound_event.h b/engines/titanic/messages/door_auto_sound_event.h
index e6ea1b0..8b064a7 100644
--- a/engines/titanic/messages/door_auto_sound_event.h
+++ b/engines/titanic/messages/door_auto_sound_event.h
@@ -28,6 +28,10 @@
 namespace Titanic {
 
 class CDoorAutoSoundEvent : public CAutoSoundEvent {
+	DECLARE_MESSAGE_MAP;
+	bool PreEnterNodeMsg(CPreEnterNodeMsg *msg);
+	bool LeaveNodeMsg(CLeaveNodeMsg *msg);
+	bool TimerMsg(CTimerMsg *msg);
 public:
 	CString _string1;
 	CString _string2;






More information about the Scummvm-git-logs mailing list