aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/core
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/core')
-rw-r--r--engines/titanic/core/background.cpp2
-rw-r--r--engines/titanic/core/game_object.cpp87
-rw-r--r--engines/titanic/core/game_object.h48
-rw-r--r--engines/titanic/core/saveable_object.cpp2
-rw-r--r--engines/titanic/core/tree_item.cpp2
-rw-r--r--engines/titanic/core/turn_on_turn_off.cpp4
-rw-r--r--engines/titanic/core/view_item.cpp2
7 files changed, 81 insertions, 66 deletions
diff --git a/engines/titanic/core/background.cpp b/engines/titanic/core/background.cpp
index 9f22f1e992..d6419f23db 100644
--- a/engines/titanic/core/background.cpp
+++ b/engines/titanic/core/background.cpp
@@ -58,7 +58,7 @@ void CBackground::load(SimpleFile *file) {
bool CBackground::StatusChangeMsg(CStatusChangeMsg *msg) {
setVisible(true);
if (_isBlocking) {
- playMovie(_startFrame, _endFrame, MOVIE_GAMESTATE);
+ playMovie(_startFrame, _endFrame, MOVIE_WAIT_FOR_FINISH);
} else {
playMovie(_startFrame, _endFrame, 0);
}
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp
index af7020532c..314746e496 100644
--- a/engines/titanic/core/game_object.cpp
+++ b/engines/titanic/core/game_object.cpp
@@ -56,26 +56,25 @@ void CGameObject::deinit() {
CGameObject::CGameObject(): CNamedItem() {
_bounds = Rect(0, 0, 15, 15);
- _field34 = 0;
- _field38 = 0;
- _field3C = 0;
+ _unused1 = 0;
+ _unused2 = 0;
+ _unused3 = 0;
_nonvisual = false;
- _field44 = 0xF0;
- _field48 = 0xF0;
- _field4C = 0xFF;
+ _toggleR = 0xF0;
+ _toggleG = 0xF0;
+ _toggleB = 0xFF;
_isPendingMail = false;
_destRoomFlags = 0;
_roomFlags = 0;
_visible = true;
- _field60 = 0;
+ _handleMouseFlag = false;
_cursorId = CURSOR_ARROW;
_initialFrame = 0;
_frameNumber = -1;
_text = nullptr;
_textBorder = _textBorderRight = 0;
- _field9C = 0;
_surface = nullptr;
- _fieldB8 = 0;
+ _unused4 = 0;
}
CGameObject::~CGameObject() {
@@ -105,19 +104,19 @@ void CGameObject::save(SimpleFile *file, int indent) {
file->writeNumberLine(getMovieFrame(), indent + 1);
file->writeNumberLine(_cursorId, indent + 1);
_movieClips.save(file, indent + 1);
- file->writeNumberLine(_field60, indent + 1);
+ file->writeNumberLine(_handleMouseFlag, indent + 1);
file->writeNumberLine(_nonvisual, indent + 1);
file->writeQuotedLine(_resource, indent + 1);
file->writeBounds(_bounds, indent + 1);
- file->writeFloatLine(_field34, indent + 1);
- file->writeFloatLine(_field38, indent + 1);
- file->writeFloatLine(_field3C, indent + 1);
+ file->writeFloatLine(_unused1, indent + 1);
+ file->writeFloatLine(_unused2, indent + 1);
+ file->writeFloatLine(_unused3, indent + 1);
- file->writeNumberLine(_field44, indent + 1);
- file->writeNumberLine(_field48, indent + 1);
- file->writeNumberLine(_field4C, indent + 1);
- file->writeNumberLine(_fieldB8, indent + 1);
+ file->writeNumberLine(_toggleR, indent + 1);
+ file->writeNumberLine(_toggleG, indent + 1);
+ file->writeNumberLine(_toggleB, indent + 1);
+ file->writeNumberLine(_unused4, indent + 1);
file->writeNumberLine(_visible, indent + 1);
file->writeNumberLine(_isPendingMail, indent + 1);
file->writeNumberLine(_destRoomFlags, indent + 1);
@@ -153,7 +152,7 @@ void CGameObject::load(SimpleFile *file) {
// Deliberate fall-through
case 4:
- _field60 = file->readNumber();
+ _handleMouseFlag = file->readNumber();
// Deliberate fall-through
case 3:
@@ -166,13 +165,13 @@ void CGameObject::load(SimpleFile *file) {
case 1:
_bounds = file->readBounds();
- _field34 = file->readFloat();
- _field38 = file->readFloat();
- _field3C = file->readFloat();
- _field44 = file->readNumber();
- _field48 = file->readNumber();
- _field4C = file->readNumber();
- _fieldB8 = file->readNumber();
+ _unused1 = file->readFloat();
+ _unused2 = file->readFloat();
+ _unused3 = file->readFloat();
+ _toggleR = file->readNumber();
+ _toggleG = file->readNumber();
+ _toggleB = file->readNumber();
+ _unused4 = file->readNumber();
_visible = file->readNumber() != 0;
_isPendingMail = file->readNumber();
_destRoomFlags = file->readNumber();
@@ -543,15 +542,11 @@ void CGameObject::setGlobalSoundVolume(int mode, uint seconds, int handleIndex)
}
}
-void CGameObject::sound8(bool flag) const {
- getGameManager()->_sound.stopChannel(flag ? 3 : 0);
+void CGameObject::stopSoundChannel(bool channel3) {
+ getGameManager()->_sound.stopChannel(channel3 ? 3 : 0);
}
void CGameObject::setVisible(bool val) {
- if (_name.contains("ylinder")) {
- warning("TODO");
- }
-
if (val != _visible) {
_visible = val;
makeDirty();
@@ -611,7 +606,7 @@ void CGameObject::playMovie(uint flags) {
CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr;
if (_surface) {
_surface->playMovie(flags, obj);
- if (flags & MOVIE_GAMESTATE)
+ if (flags & MOVIE_WAIT_FOR_FINISH)
getGameManager()->_gameState.addMovie(_surface->_movie);
}
}
@@ -627,7 +622,7 @@ void CGameObject::playMovie(int startFrame, int endFrame, uint flags) {
CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr;
if (_surface) {
_surface->playMovie(startFrame, endFrame, flags, obj);
- if (flags & MOVIE_GAMESTATE)
+ if (flags & MOVIE_WAIT_FOR_FINISH)
getGameManager()->_gameState.addMovie(_surface->_movie);
}
}
@@ -644,7 +639,7 @@ void CGameObject::playMovie(int startFrame, int endFrame, int initialFrame, uint
CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr;
if (_surface) {
_surface->playMovie(startFrame, endFrame, initialFrame, flags, obj);
- if (flags & MOVIE_GAMESTATE)
+ if (flags & MOVIE_WAIT_FOR_FINISH)
getGameManager()->_gameState.addMovie(_surface->_movie);
}
}
@@ -1058,12 +1053,12 @@ bool CGameObject::stateGetParrotMet() const {
return getGameManager()->_gameState.getParrotMet();
}
-void CGameObject::stateInc38() {
- getGameManager()->_gameState.inc38();
+void CGameObject::incParrotResponse() {
+ getGameManager()->_gameState.incParrotResponse();
}
-int CGameObject::stateGet38() const {
- return getGameManager()->_gameState._field38;
+int CGameObject::getParrotResponse() const {
+ return getGameManager()->_gameState._parrotResponseIndex;
}
void CGameObject::quitGame() {
@@ -1373,11 +1368,11 @@ void CGameObject::createCredits() {
_credits->load(this, screenManager, _bounds);
}
-void CGameObject::fn10(int v1, int v2, int v3) {
+void CGameObject::setToggleColor(byte r, byte g, byte b) {
makeDirty();
- _field44 = v1;
- _field48 = v2;
- _field4C = v3;
+ _toggleR = r;
+ _toggleG = g;
+ _toggleB = b;
}
void CGameObject::movieSetAudioTiming(bool flag) {
@@ -1429,8 +1424,8 @@ bool CGameObject::compareRoomFlags(RoomFlagsComparison compareType, uint flags1,
}
}
-void CGameObject::setState1C(bool flag) {
- getGameManager()->_gameState._field1C = flag;
+void CGameObject::stateSetSoundMakerAllowed(bool flag) {
+ getGameManager()->_gameState._soundMakerAllowed = flag;
}
void CGameObject::addMail(uint destRoomFlags) {
@@ -1648,9 +1643,9 @@ void CGameObject::starFn1(int v) {
starControl->fn1(v);
}
-bool CGameObject::starFn2() {
+bool CGameObject::starIsSolved() const {
CStarControl *starControl = getStarControl();
- return starControl ? starControl->fn4() : false;
+ return starControl ? starControl->isSolved() : false;
}
/*------------------------------------------------------------------------*/
diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h
index a56095c60f..b214cf8c9e 100644
--- a/engines/titanic/core/game_object.h
+++ b/engines/titanic/core/game_object.h
@@ -77,13 +77,11 @@ private:
protected:
static CCreditText *_credits;
protected:
- double _field34;
- double _field38;
- double _field3C;
+ double _unused1;
+ double _unused2;
+ double _unused3;
bool _nonvisual;
- int _field44;
- int _field48;
- int _field4C;
+ byte _toggleR, _toggleG, _toggleB;
CMovieClipList _movieClips;
int _initialFrame;
CMovieRangeInfoList _movieRangeInfoList;
@@ -91,11 +89,10 @@ protected:
CTextControl *_text;
uint _textBorder;
uint _textBorderRight;
- int _field9C;
Common::Point _savedPos;
CVideoSurface *_surface;
CString _resource;
- int _fieldB8;
+ int _unused4;
protected:
/**
* Saves the current position the object is located at
@@ -277,7 +274,10 @@ protected:
*/
void setGlobalSoundVolume(int mode, uint seconds, int handleIndex);
- void sound8(bool flag) const;
+ /**
+ * Stops sound channel 3 or 0
+ */
+ void stopSoundChannel(bool channel3);
/**
* Adds a timer
@@ -462,7 +462,11 @@ protected:
*/
void setPassengerClass(PassengerClass newClass);
- void fn10(int v1, int v2, int v3);
+ /**
+ * Sets color RGB for toggles
+ * @remarks The color set isn't actually used anywhere
+ */
+ void setToggleColor(byte r, byte g, byte b);
/**
* Gets the duration of a specified clip in milliseconds
@@ -523,7 +527,7 @@ public:
bool _isPendingMail;
uint _destRoomFlags;
uint _roomFlags;
- int _field60;
+ bool _handleMouseFlag;
CursorId _cursorId;
bool _visible;
public:
@@ -942,7 +946,11 @@ public:
CStarControl *getStarControl() const;
void starFn1(int v);
- bool starFn2();
+
+ /**
+ * Returns true if the starmap puzzle has been solved
+ */
+ bool starIsSolved() const;
/*--- CTrueTalkManager Methods ---*/
@@ -987,7 +995,10 @@ public:
/*--- CGameState Methods ---*/
- void setState1C(bool flag);
+ /**
+ * Sets whether a background sound maker is allowed for the rooms if available
+ */
+ void stateSetSoundMakerAllowed(bool flag);
/**
* Change to the next season
@@ -1009,8 +1020,15 @@ public:
*/
bool stateGetParrotMet() const;
- void stateInc38();
- int stateGet38() const;
+ /**
+ * Moves the parrot to the next idle response
+ */
+ void incParrotResponse();
+
+ /**
+ * Gets the index to use for parrot idle responses
+ */
+ int getParrotResponse() const;
/**
* Gets the game state node changed counter
diff --git a/engines/titanic/core/saveable_object.cpp b/engines/titanic/core/saveable_object.cpp
index 8bb8a92b7f..0257f6a087 100644
--- a/engines/titanic/core/saveable_object.cpp
+++ b/engines/titanic/core/saveable_object.cpp
@@ -955,6 +955,7 @@ DEFFN(CUseWithCharMsg);
DEFFN(CUseWithOtherMsg);
DEFFN(CVirtualKeyCharMsg);
DEFFN(CVisibleMsg);
+DEFFN(CCheckCodeWheelsMsg);
DEFFN(CEnterBombRoom);
DEFFN(CEnterBridge);
@@ -1538,6 +1539,7 @@ void CSaveableObject::initClassList() {
ADDFN(CUseWithOtherMsg, CMessage);
ADDFN(CVirtualKeyCharMsg, CMessage);
ADDFN(CVisibleMsg, CMessage);
+ ADDFN(CCheckCodeWheelsMsg, CMessage);
ADDFN(CMovePlayerTo, CGameObject);
ADDFN(CMovePlayerToFrom, CGameObject);
diff --git a/engines/titanic/core/tree_item.cpp b/engines/titanic/core/tree_item.cpp
index 97d06d7bbe..b9b9aca67f 100644
--- a/engines/titanic/core/tree_item.cpp
+++ b/engines/titanic/core/tree_item.cpp
@@ -274,7 +274,7 @@ CNamedItem *CTreeItem::findByName(const CString &name, bool subMatch) {
itemName.toLowercase();
if (subMatch) {
- if (itemName.left(name.size()).compareTo(nameLower))
+ if (!itemName.left(nameLower.size()).compareTo(nameLower))
return dynamic_cast<CNamedItem *>(treeItem);
} else {
if (!itemName.compareTo(nameLower))
diff --git a/engines/titanic/core/turn_on_turn_off.cpp b/engines/titanic/core/turn_on_turn_off.cpp
index a6051c7c6f..3c1e623b6e 100644
--- a/engines/titanic/core/turn_on_turn_off.cpp
+++ b/engines/titanic/core/turn_on_turn_off.cpp
@@ -58,7 +58,7 @@ void CTurnOnTurnOff::load(SimpleFile *file) {
bool CTurnOnTurnOff::TurnOn(CTurnOn *msg) {
if (!_isOn) {
if (_isBlocking)
- playMovie(_startFrameOn, _endFrameOn, MOVIE_GAMESTATE);
+ playMovie(_startFrameOn, _endFrameOn, MOVIE_WAIT_FOR_FINISH);
else
playMovie(_startFrameOn, _endFrameOn, MOVIE_NOTIFY_OBJECT);
_isOn = true;
@@ -70,7 +70,7 @@ bool CTurnOnTurnOff::TurnOn(CTurnOn *msg) {
bool CTurnOnTurnOff::TurnOff(CTurnOff *msg) {
if (_isOn) {
if (_isBlocking)
- playMovie(_startFrameOff, _endFrameOff, MOVIE_GAMESTATE);
+ playMovie(_startFrameOff, _endFrameOff, MOVIE_WAIT_FOR_FINISH);
else
playMovie(_startFrameOff, _endFrameOff, MOVIE_NOTIFY_OBJECT);
_isOn = false;
diff --git a/engines/titanic/core/view_item.cpp b/engines/titanic/core/view_item.cpp
index 9109bcc5b2..15d187e194 100644
--- a/engines/titanic/core/view_item.cpp
+++ b/engines/titanic/core/view_item.cpp
@@ -260,7 +260,7 @@ bool CViewItem::handleMouseMsg(CMouseMsg *msg, bool flag) {
CGameObject *gameObject = dynamic_cast<CGameObject *>(treeItem);
if (gameObject) {
if (gameObject->checkPoint(msg->_mousePos, false, true) &&
- (!flag || !gameObject->_field60)) {
+ (!flag || !gameObject->_handleMouseFlag)) {
if (gameObjects.size() < 256)
gameObjects.push_back(gameObject);
}