diff options
Diffstat (limited to 'engines/titanic/core/game_object.cpp')
-rw-r--r-- | engines/titanic/core/game_object.cpp | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index 3a5f6567a6..3e1cb0858c 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -59,11 +59,11 @@ CGameObject::CGameObject(): CNamedItem() { _field34 = 0; _field38 = 0; _field3C = 0; - _field40 = 0; + _nonvisual = false; _field44 = 0xF0; _field48 = 0xF0; _field4C = 0xFF; - _isMail = false; + _isPendingMail = false; _destRoomFlags = 0; _roomFlags = 0; _visible = true; @@ -106,7 +106,7 @@ void CGameObject::save(SimpleFile *file, int indent) { file->writeNumberLine(_cursorId, indent + 1); _movieClips.save(file, indent + 1); file->writeNumberLine(_field60, indent + 1); - file->writeNumberLine(_field40, indent + 1); + file->writeNumberLine(_nonvisual, indent + 1); file->writeQuotedLine(_resource, indent + 1); file->writeBounds(_bounds, indent + 1); @@ -119,7 +119,7 @@ void CGameObject::save(SimpleFile *file, int indent) { file->writeNumberLine(_field4C, indent + 1); file->writeNumberLine(_fieldB8, indent + 1); file->writeNumberLine(_visible, indent + 1); - file->writeNumberLine(_isMail, indent + 1); + file->writeNumberLine(_isPendingMail, indent + 1); file->writeNumberLine(_destRoomFlags, indent + 1); file->writeNumberLine(_roomFlags, indent + 1); @@ -157,7 +157,7 @@ void CGameObject::load(SimpleFile *file) { // Deliberate fall-through case 3: - _field40 = file->readNumber(); + _nonvisual = file->readNumber(); // Deliberate fall-through case 2: @@ -174,7 +174,7 @@ void CGameObject::load(SimpleFile *file) { _field4C = file->readNumber(); _fieldB8 = file->readNumber(); _visible = file->readNumber() != 0; - _isMail = file->readNumber(); + _isPendingMail = file->readNumber(); _destRoomFlags = file->readNumber(); _roomFlags = file->readNumber(); @@ -203,8 +203,8 @@ void CGameObject::draw(CScreenManager *screenManager) { return; } - if (_field40) { - // If a text object is defined, handle drawing it + if (_nonvisual) { + // If a text is defined, handle drawing it if (_text && _bounds.intersects(getGameManager()->_bounds)) _text->draw(screenManager); @@ -265,11 +265,11 @@ void CGameObject::stopMovie() { _surface->stopMovie(); } -bool CGameObject::checkPoint(const Point &pt, bool ignore40, bool visibleOnly) { +bool CGameObject::checkPoint(const Point &pt, bool ignoreSurface, bool visibleOnly) { if ((!_visible && visibleOnly) || !_bounds.contains(pt)) return false; - if (ignore40 || _field40) + if (ignoreSurface || _nonvisual) return true; if (!_surface) { @@ -548,6 +548,10 @@ void CGameObject::sound8(bool flag) const { } void CGameObject::setVisible(bool val) { + if (_name.contains("ylinder")) { + warning("TODO"); + } + if (val != _visible) { _visible = val; makeDirty(); @@ -867,10 +871,10 @@ CViewItem *CGameObject::parseView(const CString &viewString) { // Ensure we have the specified room if (project) { - if (room->getName() != roomName) { + if (room->getName().compareToIgnoreCase(roomName)) { // Scan for the correct room for (room = project->findFirstRoom(); - room && room->getName() != roomName; + room && room->getName().compareToIgnoreCase(roomName); room = project->findNextRoom(room)) ; } } @@ -879,13 +883,13 @@ CViewItem *CGameObject::parseView(const CString &viewString) { // Find the designated node within the room CNodeItem *node = dynamic_cast<CNodeItem *>(room->findChildInstanceOf(CNodeItem::_type)); - while (node && node->getName() != nodeName) + while (node && node->getName().compareToIgnoreCase(nodeName)) node = dynamic_cast<CNodeItem *>(room->findNextInstanceOf(CNodeItem::_type, node)); if (!node) return nullptr; CViewItem *view = dynamic_cast<CViewItem *>(node->findChildInstanceOf(CViewItem::_type)); - while (view && view->getName() != viewName) + while (view && view->getName().compareToIgnoreCase(viewName)) view = dynamic_cast<CViewItem *>(node->findNextInstanceOf(CViewItem::_type, view)); if (!view) return nullptr; @@ -1046,12 +1050,12 @@ Season CGameObject::stateGetSeason() const { return getGameManager()->_gameState._seasonNum; } -void CGameObject::stateSet24() { - getGameManager()->_gameState.set24(1); +void CGameObject::stateSetParrotMet() { + getGameManager()->_gameState.setParrotMet(true); } -int CGameObject::stateGet24() const { - return getGameManager()->_gameState.get24(); +bool CGameObject::stateGetParrotMet() const { + return getGameManager()->_gameState.getParrotMet(); } void CGameObject::stateInc38() { @@ -1081,10 +1085,11 @@ void CGameObject::setMovieFrameRate(double rate) { void CGameObject::setText(const CString &str, int border, int borderRight) { if (!_text) - _text = new CPetText(); + _text = new CTextControl(); _textBorder = border; _textBorderRight = borderRight; + setTextBounds(); _text->setText(str); CScreenManager *screenManager = getGameManager()->setScreenManager(); _text->scrollToTop(screenManager); @@ -1092,7 +1097,7 @@ void CGameObject::setText(const CString &str, int border, int borderRight) { void CGameObject::setTextHasBorders(bool hasBorders) { if (!_text) - _text = new CPetText(); + _text = new CTextControl(); _text->setHasBorder(hasBorders); } @@ -1108,14 +1113,14 @@ void CGameObject::setTextBounds() { void CGameObject::setTextColor(byte r, byte g, byte b) { if (!_text) - _text = new CPetText(); + _text = new CTextControl(); _text->setColor(r, g, b); } void CGameObject::setTextFontNumber(int fontNumber) { if (!_text) - _text = new CPetText(); + _text = new CTextControl(); _text->setFontNumber(fontNumber); } @@ -1132,11 +1137,13 @@ CTextCursor *CGameObject::getTextCursor() const { void CGameObject::scrollTextUp() { if (_text) _text->scrollUp(CScreenManager::_screenManagerPtr); + makeDirty(); } void CGameObject::scrollTextDown() { if (_text) _text->scrollDown(CScreenManager::_screenManagerPtr); + makeDirty(); } void CGameObject::lockMouse() { @@ -1451,10 +1458,10 @@ CGameObject *CGameObject::findMail(uint roomFlags) const { return mailMan ? mailMan->findMail(roomFlags) : nullptr; } -void CGameObject::removeMail(uint destRoomFlags, uint newRoomFlags) { +void CGameObject::sendMail(uint currRoomFlags, uint newRoomFlags) { CMailMan *mailMan = getMailMan(); if (mailMan) - mailMan->removeMail(destRoomFlags, newRoomFlags); + mailMan->sendMail(currRoomFlags, newRoomFlags); } void CGameObject::resetMail() { @@ -1604,10 +1611,10 @@ int CGameObject::petGetRoomsWellEntry() const { return petControl ? petControl->getRoomsWellEntry() : 0; } -void CGameObject::petSetRooms1D4(int v) { +void CGameObject::petSetRoomsElevatorBroken(bool flag) { CPetControl *pet = getPetControl(); if (pet) - pet->setRooms1D4(v); + pet->setRoomsElevatorBroken(flag); } void CGameObject::petOnSummonBot(const CString &name, int val) { |