Initial commit
This commit is contained in:
270
engines/toon/state.cpp
Normal file
270
engines/toon/state.cpp
Normal file
@@ -0,0 +1,270 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*
|
||||
* This file is dual-licensed.
|
||||
* In addition to the GPLv3 license mentioned above, MojoTouch has
|
||||
* exclusively licensed this code on March 23th, 2024, to be used in
|
||||
* closed-source products.
|
||||
* Therefore, any contributions (commits) to it will also be dual-licensed.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/debug.h"
|
||||
|
||||
#include "toon/state.h"
|
||||
#include "toon/toon.h"
|
||||
|
||||
namespace Toon {
|
||||
|
||||
void Location::save(Common::WriteStream *stream) {
|
||||
stream->write(_cutaway, 64);
|
||||
stream->write(_music, 64);
|
||||
stream->write(_name, 64);
|
||||
stream->writeSint16BE(_numRifBoxes);
|
||||
stream->writeSint16BE(_numSceneAnimations);
|
||||
stream->writeSByte(_visited);
|
||||
|
||||
for (int32 i = 0; i < _numRifBoxes * 2; i++) {
|
||||
stream->writeSint16BE(_rifBoxesFlags[i]);
|
||||
}
|
||||
}
|
||||
void Location::load(Common::ReadStream *stream) {
|
||||
stream->read(_cutaway, 64);
|
||||
stream->read(_music, 64);
|
||||
stream->read(_name, 64);
|
||||
_numRifBoxes = stream->readSint16BE();
|
||||
_numSceneAnimations = stream->readSint16BE();
|
||||
_visited = stream->readSByte();
|
||||
|
||||
for (int32 i = 0; i < _numRifBoxes * 2; i++) {
|
||||
_rifBoxesFlags[i] = stream->readSint16BE();
|
||||
}
|
||||
}
|
||||
|
||||
State::State(void) {
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
_locations[i]._visited = false;
|
||||
_locations[i]._numSceneAnimations = 0;
|
||||
_locations[i]._numRifBoxes = 0;
|
||||
}
|
||||
|
||||
memset(_gameFlag, 0, sizeof(_gameFlag));
|
||||
memset(_gameGlobalData, -1, sizeof(_gameGlobalData));
|
||||
|
||||
for (int32 i = 0; i < 2; i++) {
|
||||
_timerEnabled[i] = false;
|
||||
_timerTimeout[i] = 0;
|
||||
_timerDelay[i] = -1;
|
||||
}
|
||||
|
||||
_lastVisitedScene = -1;
|
||||
_currentScene = -1;
|
||||
|
||||
_currentScrollLock = false;
|
||||
_currentScrollValue = 0;
|
||||
|
||||
_gameTimer = 0;
|
||||
_currentChapter = 1;
|
||||
|
||||
_showConversationIcons = false;
|
||||
|
||||
_inMenu = false;
|
||||
_inCloseUp = false;
|
||||
_inConversation = false;
|
||||
|
||||
_mouseState = -1;
|
||||
_mouseHidden = false;
|
||||
|
||||
_firstConverstationLine = false;
|
||||
|
||||
_sackVisible = false; // to change
|
||||
_inCutaway = false;
|
||||
|
||||
_inInventory = false;
|
||||
_numInventoryItems = 0; //To chhange
|
||||
_numConfiscatedInventoryItems = 0;
|
||||
|
||||
_nextSpecialEnterX = -1;
|
||||
_nextSpecialEnterY = -1;
|
||||
|
||||
#if 0
|
||||
for (int i = 0; i < 30; i++) {
|
||||
_inventory[i] = 90 + i;
|
||||
if (_inventory[i] == 41)
|
||||
_inventory[i] = 42;
|
||||
}
|
||||
|
||||
_inventory[0] = 53;
|
||||
_inventory[1] = 22;
|
||||
_inventory[2] = 93;
|
||||
_inventory[3] = 49;
|
||||
_inventory[4] = 47;
|
||||
_inventory[5] = 14;
|
||||
_numInventoryItems = 6; //To change
|
||||
#endif
|
||||
|
||||
memset(_conversationState, 0, sizeof(Conversation) * 60);
|
||||
|
||||
_conversationData = nullptr;
|
||||
_currentConversationId = -1;
|
||||
_exitConversation = true;
|
||||
}
|
||||
|
||||
State::~State(void) {
|
||||
}
|
||||
|
||||
int32 State::getGameFlag(int32 flagId) {
|
||||
return (_gameFlag[flagId >> 3] & (1 << (flagId & 7))) != 0;
|
||||
}
|
||||
|
||||
bool State::hasItemInInventory(int32 item) {
|
||||
debugC(1, kDebugState, "hasItemInInventory(%d)", item);
|
||||
|
||||
for (int32 i = 0; i < _numInventoryItems; i++) {
|
||||
if (_inventory[i] == item)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void State::save(Common::WriteStream *stream) {
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
_locations[i].save(stream);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
stream->writeSint16BE(_gameGlobalData[i]);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
stream->writeSint16BE(_gameFlag[i]);
|
||||
}
|
||||
|
||||
stream->writeSint16BE(_lastVisitedScene);
|
||||
stream->writeSint16BE(_currentScene);
|
||||
stream->writeSint16BE(_currentScrollValue);
|
||||
stream->writeSByte(_currentScrollLock);
|
||||
|
||||
for (int32 i = 0; i < 35; i++) {
|
||||
stream->writeSint16BE(_inventory[i]);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 35; i++) {
|
||||
stream->writeSint16BE(_confiscatedInventory[i]);
|
||||
}
|
||||
|
||||
stream->writeSint32BE(_numInventoryItems);
|
||||
stream->writeSint32BE(_numConfiscatedInventoryItems);
|
||||
|
||||
stream->writeSByte(_inCloseUp);
|
||||
stream->writeSByte(_inCutaway);
|
||||
stream->writeSByte(_inConversation);
|
||||
stream->writeSByte(_inInventory);
|
||||
stream->writeSByte(_showConversationIcons);
|
||||
|
||||
stream->writeSint16BE(_mouseState);
|
||||
|
||||
stream->writeSint16BE(_currentConversationId);
|
||||
stream->writeSByte(_firstConverstationLine);
|
||||
stream->writeSByte(_exitConversation);
|
||||
stream->writeSByte(_mouseHidden);
|
||||
stream->writeSByte(_sackVisible);
|
||||
stream->writeSint32BE(_gameTimer);
|
||||
stream->writeSByte(_currentChapter);
|
||||
|
||||
stream->writeByte(_timerEnabled[0]);
|
||||
stream->writeByte(_timerEnabled[1]);
|
||||
|
||||
stream->writeSint32BE(_timerTimeout[0]);
|
||||
stream->writeSint32BE(_timerTimeout[1]);
|
||||
|
||||
stream->writeSint32BE(_timerDelay[0]);
|
||||
stream->writeSint32BE(_timerDelay[1]);
|
||||
}
|
||||
|
||||
void State::load(Common::ReadStream *stream) {
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
_locations[i].load(stream);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
_gameGlobalData[i] = stream->readSint16BE();
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
_gameFlag[i] = stream->readSint16BE();
|
||||
}
|
||||
|
||||
_lastVisitedScene = stream->readSint16BE();
|
||||
_currentScene = stream->readSint16BE();
|
||||
_currentScrollValue = stream->readSint16BE();
|
||||
_currentScrollLock = stream->readSByte();
|
||||
|
||||
for (int32 i = 0; i < 35; i++) {
|
||||
_inventory[i] = stream->readSint16BE();
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 35; i++) {
|
||||
_confiscatedInventory[i] = stream->readSint16BE();
|
||||
}
|
||||
|
||||
_numInventoryItems = stream->readSint32BE();
|
||||
_numConfiscatedInventoryItems = stream->readSint32BE();
|
||||
|
||||
_inCloseUp = stream->readSByte();
|
||||
_inCutaway = stream->readSByte();
|
||||
_inConversation = stream->readSByte();
|
||||
_inInventory = stream->readSByte();
|
||||
_showConversationIcons = stream->readSByte();
|
||||
|
||||
_mouseState = stream->readSint16BE();
|
||||
|
||||
_currentConversationId = stream->readSint16BE();
|
||||
_firstConverstationLine = stream->readSByte();
|
||||
_exitConversation = stream->readSByte();
|
||||
_mouseHidden = stream->readSByte();
|
||||
_sackVisible = stream->readSByte();
|
||||
_gameTimer = stream->readSint32BE();
|
||||
_currentChapter = stream->readSByte();
|
||||
|
||||
_timerEnabled[0] = stream->readByte();
|
||||
_timerEnabled[1] = stream->readByte();
|
||||
|
||||
_timerTimeout[0] = stream->readSint32BE();
|
||||
_timerTimeout[1] = stream->readSint32BE();
|
||||
|
||||
_timerDelay[0] = stream->readSint32BE();
|
||||
_timerDelay[1] = stream->readSint32BE();
|
||||
}
|
||||
|
||||
void State::loadConversations(Common::ReadStream *stream) {
|
||||
for (int32 i = 0; i < 60; i++) {
|
||||
_conversationState[i].load(stream, _conversationData);
|
||||
}
|
||||
}
|
||||
|
||||
void State::saveConversations(Common::WriteStream *stream) {
|
||||
for (int32 i = 0; i < 60; i++) {
|
||||
_conversationState[i].save(stream, _conversationData);
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Toon
|
||||
Reference in New Issue
Block a user