Initial commit

This commit is contained in:
2026-02-02 04:50:13 +01:00
commit 5b11698731
22592 changed files with 7677434 additions and 0 deletions

View File

@@ -0,0 +1,180 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "titanic/game/sgt/sgt_state_room.h"
#include "titanic/pet_control/pet_control.h"
#include "titanic/translation.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->_bedhead = "Closed";
}
void CSGTStateRoom::deinit() {
delete _statics;
}
CSGTStateRoom::CSGTStateRoom() : CBackground(), _isClosed(true),
_displayFlag(true), _savedFrame(0), _savedIsClosed(true), _savedVisible(true) {
}
void CSGTStateRoom::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
file->writeQuotedLine(_statics->_bedhead, indent);
file->writeQuotedLine(_statics->_bedfoot, indent);
file->writeQuotedLine(_statics->_vase, indent);
file->writeQuotedLine(_statics->_tv, indent);
file->writeQuotedLine(_statics->_desk, indent);
file->writeQuotedLine(_statics->_chestOfDrawers, indent);
file->writeQuotedLine(_statics->_drawer, indent);
file->writeQuotedLine(_statics->_armchair, indent);
file->writeQuotedLine(_statics->_deskchair, indent);
file->writeQuotedLine(_statics->_washstand, indent);
file->writeQuotedLine(_statics->_basin, indent);
file->writeQuotedLine(_statics->_toilet, indent);
file->writeNumberLine(_isClosed, indent);
file->writeNumberLine(_displayFlag, indent);
file->writeNumberLine(_statics->_announcementFlag, indent);
file->writeNumberLine(_statics->_roomFlags, indent);
file->writeNumberLine(_savedFrame, indent);
file->writeNumberLine(_savedIsClosed, indent);
file->writeNumberLine(_savedVisible, indent);
CBackground::save(file, indent);
}
void CSGTStateRoom::load(SimpleFile *file) {
file->readNumber();
_statics->_bedhead = file->readString();
_statics->_bedfoot = file->readString();
_statics->_vase = file->readString();
_statics->_tv = file->readString();
_statics->_desk = file->readString();
_statics->_chestOfDrawers = file->readString();
_statics->_drawer = file->readString();
_statics->_armchair = file->readString();
_statics->_deskchair = file->readString();
_statics->_washstand = file->readString();
_statics->_basin = file->readString();
_statics->_toilet = file->readString();
_isClosed = file->readNumber();
_displayFlag = file->readNumber();
_statics->_announcementFlag = file->readNumber();
_statics->_roomFlags = file->readNumber();
_savedFrame = file->readNumber();
_savedIsClosed = file->readNumber();
_savedVisible = file->readNumber();
CBackground::load(file);
}
bool CSGTStateRoom::ActMsg(CActMsg *msg) {
CPetControl *pet = getPetControl();
uint roomFlags = pet->getRoomFlags();
uint assignedRoom = pet->getAssignedRoomFlags();
if (roomFlags != assignedRoom) {
petDisplayMessage(NOT_YOUR_ASSIGNED_ROOM);
} else if (_isClosed) {
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) {
CPetControl *pet = getPetControl();
// WORKAROUND: Correctly show SGT furniture states in assigned stateroom
// even when the user has already upgraded to 2nd or 1st class
if (pet->isInAssignedRoom()) {
loadFrame(_savedFrame);
_isClosed = _savedIsClosed;
setVisible(_savedVisible);
if (isEquals("Desk") && _statics->_desk == "Closed")
loadFrame(1);
}
if (isEquals("Drawer")) {
petSetArea(PET_REMOTE);
if (pet->isInAssignedRoom() && getPassengerClass() == 3
&& _statics->_announcementFlag) {
// Congratulations, you may have won an upgrade
playSound(TRANSLATE("b#21.wav", "b#2.wav"));
_statics->_announcementFlag = false;
}
_statics->_drawer = "Closed";
setVisible(false);
_isClosed = true;
} else if (!pet->isInAssignedRoom()) {
loadFrame(0);
if (_displayFlag) {
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) {
_savedFrame = getMovieFrame();
_savedIsClosed = _isClosed;
_savedVisible = _visible;
}
_statics->_roomFlags = roomFlags;
return true;
}
} // End of namespace Titanic