aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/television.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-03-24 22:09:49 -0400
committerPaul Gilbert2016-03-24 22:09:49 -0400
commit02b46202bec88eb21b322fb9480de9eb8965dd01 (patch)
treebea7cd9ed24fedd7eda3ada5f3a06f4fa9652ed0 /engines/titanic/game/television.cpp
parentf0a6cf38cff8e79a579454af5bf22d264de3d7f7 (diff)
downloadscummvm-rg350-02b46202bec88eb21b322fb9480de9eb8965dd01.tar.gz
scummvm-rg350-02b46202bec88eb21b322fb9480de9eb8965dd01.tar.bz2
scummvm-rg350-02b46202bec88eb21b322fb9480de9eb8965dd01.zip
TITANIC: Implementing more CTelevision message handlers
Diffstat (limited to 'engines/titanic/game/television.cpp')
-rw-r--r--engines/titanic/game/television.cpp74
1 files changed, 68 insertions, 6 deletions
diff --git a/engines/titanic/game/television.cpp b/engines/titanic/game/television.cpp
index 08f29df7f9..e7a1b8dbb4 100644
--- a/engines/titanic/game/television.cpp
+++ b/engines/titanic/game/television.cpp
@@ -32,7 +32,7 @@ int CTelevision::_v5;
int CTelevision::_v6;
CTelevision::CTelevision() : CBackground(), _fieldE0(1),
- _fieldE4(7), _fieldE8(0), _fieldEC(0), _fieldF0(0) {
+ _fieldE4(7), _isOn(false), _fieldEC(0), _fieldF0(0) {
}
void CTelevision::save(SimpleFile *file, int indent) const {
@@ -41,7 +41,7 @@ void CTelevision::save(SimpleFile *file, int indent) const {
file->writeNumberLine(_v1, indent);
file->writeNumberLine(_fieldE4, indent);
file->writeNumberLine(_v2, indent);
- file->writeNumberLine(_fieldE8, indent);
+ file->writeNumberLine(_isOn, indent);
file->writeNumberLine(_v3, indent);
file->writeNumberLine(_fieldEC, indent);
file->writeNumberLine(_v4, indent);
@@ -58,7 +58,7 @@ void CTelevision::load(SimpleFile *file) {
_v1 = file->readNumber();
_fieldE4 = file->readNumber();
_v2 = file->readNumber();
- _fieldE8 = file->readNumber();
+ _isOn = file->readNumber() != 0;
_v3 = file->readNumber();
_fieldEC = file->readNumber();
_v4 = file->readNumber();
@@ -71,14 +71,14 @@ void CTelevision::load(SimpleFile *file) {
bool CTelevision::handleMessage(CLeaveViewMsg &msg) {
clearPet();
- if (_fieldE8) {
+ if (_isOn) {
if (soundFn1(_fieldF0))
soundFn2(_fieldF0, 0);
loadFrame(622);
stopMovie();
set5C(0);
- _fieldE8 = 0;
+ _isOn = false;
if (compareRoomNameTo("CSGState")) {
CVisibleMsg visibleMsg(1, 0);
@@ -90,26 +90,88 @@ bool CTelevision::handleMessage(CLeaveViewMsg &msg) {
}
bool CTelevision::handleMessage(CChangeSeasonMsg &msg) {
+ if (msg._season.compareTo("Autumn")) {
+ _v1 = 545;
+ _v3 = 0;
+ } else if (msg._season.compareTo("Winter")) {
+ _v1 = 503;
+ _v3 = 0;
+ } else if (msg._season.compareTo("Spring")) {
+ _v1 = 517;
+ _v3 = 0;
+ } else if (msg._season.compareTo("Winter")) {
+ _v1 = 531;
+ _v3 = 0;
+ }
+
return true;
}
bool CTelevision::handleMessage(CEnterViewMsg &msg) {
+ petFn1(2);
+ petFn2(2);
+ petFn3(0);
+ set5C(0);
+ _fieldE0 = 1;
+
return true;
}
+static const int FRAMES1[9] = { 0, 0, 56, 112, 168, 224, 280, 336, 392 };
+static const int FRAMES2[8] = { 0, 55, 111, 167, 223, 279, 335, 391 };
+
bool CTelevision::handleMessage(CPETUpMsg &msg) {
+ if (msg._name == "Television" && _isOn) {
+ if (soundFn1(_fieldF0))
+ soundFn2(_fieldF0, 0);
+
+ _fieldE0 = _fieldE0 % _fieldE4 + 1;
+ stopMovie();
+ fn1(FRAMES1[_fieldE0], FRAMES2[_fieldE0], 4);
+ }
+
return true;
}
bool CTelevision::handleMessage(CPETDownMsg &msg) {
- return true;
+ if (msg._name == "Television" && _isOn) {
+ if (soundFn1(_fieldF0))
+ soundFn2(_fieldF0, 0);
+ if (--_fieldE0 < 1)
+ _fieldE0 += _fieldE4;
+
+ _fieldE0 = _fieldE0 % _fieldE4 + 1;
+ stopMovie();
+ fn1(FRAMES1[_fieldE0], FRAMES2[_fieldE0], 4);
+ }
+
+ return true;
}
bool CTelevision::handleMessage(CStatusChangeMsg &msg) {
+ if (_isOn) {
+ stopMovie();
+ // TODO:
+ }
+ warning("TODO");
+
return true;
}
bool CTelevision::handleMessage(CActMsg &msg) {
+ if (msg._action == "TurnTVOnOff") {
+ _isOn = !_isOn;
+ if (_isOn) {
+ set5C(true);
+ CStatusChangeMsg changeMsg;
+ changeMsg.execute(this);
+ } else {
+ // TODO: Should 5C be a boolean?
+ set5C(_isOn);
+ stopMovie();
+ }
+ }
+
return true;
}