aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/supernova/state.h')
-rw-r--r--engines/supernova/state.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
new file mode 100644
index 0000000000..bb0b933b00
--- /dev/null
+++ b/engines/supernova/state.h
@@ -0,0 +1,234 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SUPERNOVA_STATE_H
+#define SUPERNOVA_STATE_H
+
+#include "common/rect.h"
+#include "common/keyboard.h"
+#include "supernova/rooms.h"
+
+namespace Supernova {
+
+const int32 kMaxTimerValue = 0x7FFFFFFF;
+
+enum EventFunction { kNoFn, kSupernovaFn, kGuardReturnedFn, kGuardWalkFn, kTaxiFn, kSearchStartFn };
+
+struct GameState {
+ int32 _time;
+ int32 _timeSleep;
+ int32 _timeAlarm;
+ int32 _eventTime;
+ EventFunction _eventCallback;
+ int32 _arrivalDaysLeft;
+ int32 _shipEnergyDaysLeft;
+ int32 _landingModuleEnergyDaysLeft;
+ uint16 _greatFlag;
+ int16 _timeRobot;
+ int16 _money;
+ byte _coins;
+ byte _shoes;
+ byte _origin;
+ byte _destination;
+ byte _language;
+ bool _corridorSearch;
+ bool _alarmOn;
+ bool _terminalStripConnected;
+ bool _terminalStripWire;
+ bool _cableConnected;
+ bool _powerOff;
+ bool _dream;
+ bool _nameSeen[4];
+ bool _playerHidden;
+};
+
+class Inventory {
+public:
+ Inventory(int &inventoryScroll)
+ : _numObjects(0)
+ , _inventoryScroll(inventoryScroll)
+ {}
+
+ void add(Object &obj);
+ void remove(Object &obj);
+ void clear();
+ Object *get(int index) const;
+ Object *get(ObjectID id) const;
+ int getSize() const { return _numObjects; }
+
+private:
+ Object *_inventory[kMaxCarry];
+ int &_inventoryScroll;
+ int _numObjects;
+};
+
+class GuiElement : public Common::Rect {
+public:
+ GuiElement();
+
+ void setSize(int x1, int y1, int x2, int y2);
+ void setText(const char *text);
+ void setTextPosition(int x, int y);
+ void setColor(int bgColor, int textColor, int bgColorHighlighted, int textColorHightlighted);
+ void setHighlight(bool isHighlighted);
+
+ Common::Point _textPosition;
+ char _text[128];
+ int _bgColor;
+ int _textColor;
+ int _bgColorNormal;
+ int _bgColorHighlighted;
+ int _textColorNormal;
+ int _textColorHighlighted;
+ bool _isHighlighted;
+};
+
+class GameManager {
+public:
+ GameManager(SupernovaEngine *vm);
+ ~GameManager();
+
+ void processInput(Common::KeyState &state);
+ void processInput();
+ void executeRoom();
+ bool serialize(Common::WriteStream *out);
+ bool deserialize(Common::ReadStream *in, int version);
+
+ static StringID guiCommands[];
+ static StringID guiStatusCommands[];
+ SupernovaEngine *_vm;
+ Common::KeyState _key;
+ Common::EventType _mouseClickType;
+ bool _mouseClicked;
+ bool _keyPressed;
+ int _mouseX;
+ int _mouseY;
+ int _mouseField;
+ Room *_currentRoom;
+ bool _newRoom;
+ Room *_rooms[NUMROOMS];
+ Inventory _inventory;
+ GameState _state;
+ bool _processInput;
+ bool _guiEnabled;
+ bool _animationEnabled;
+ byte _roomBrightness;
+ Action _inputVerb;
+ Object *_currentInputObject;
+ Object *_inputObject[2];
+ bool _waitEvent;
+ int32 _oldTime;
+ uint _timePaused;
+ bool _timerPaused;
+ int32 _timer1;
+ int32 _animationTimer;
+ int _inventoryScroll;
+ int _exitList[25];
+ GuiElement _guiCommandButton[10];
+ GuiElement _guiInventory[8];
+ GuiElement _guiInventoryArrow[2];
+ // 0 PC Speaker | 1 SoundBlaster | 2 No Sound
+ int _soundDevice;
+ // Dialog
+ int _currentSentence;
+ int _sentenceNumber[6];
+ StringID _texts[6];
+ byte _rows[6];
+ byte _rowsStart[6];
+
+ void takeObject(Object &obj);
+
+ void initState();
+ void initRooms();
+ void destroyRooms();
+ void initGui();
+ bool genericInteract(Action verb, Object &obj1, Object &obj2);
+ bool isHelmetOff();
+ void great(uint number);
+ bool airless();
+ void shock();
+ Common::EventType getMouseInput();
+ uint16 getKeyInput(bool blockForPrintChar = false);
+ void getInput();
+ void mouseInput3();
+ void wait2(int ticks);
+ void waitOnInput(int ticks);
+ bool waitOnInput(int ticks, Common::KeyCode &keycode);
+ void turnOff();
+ void turnOn();
+ void screenShake();
+ void roomBrightness();
+ void showMenu();
+ void animationOff();
+ void animationOn();
+ void openLocker(const Room *room, Object *obj, Object *lock, int section);
+ void closeLocker(const Room *room, Object *obj, Object *lock, int section);
+ void edit(Common::String &input, int x, int y, uint length);
+ int invertSection(int section);
+ void drawMapExits();
+ void drawStatus();
+ void drawCommandBox();
+ void drawInventory();
+ void changeRoom(RoomID id);
+ void resetInputState();
+ void handleInput();
+ void handleTime();
+ void pauseTimer(bool pause);
+ void loadTime();
+ void saveTime();
+ void setAnimationTimer(int ticks);
+ void dead(StringID messageId);
+ int dialog(int num, byte rowLength[6], StringID text[6], int number);
+ void sentence(int number, bool brightness);
+ void say(StringID textId);
+ void say(const char *text);
+ void reply(StringID textId, int aus1, int aus2);
+ void reply(const char *text, int aus1, int aus2);
+ void mousePosDialog(int x, int y);
+ void shot(int a, int b);
+ void takeMoney(int amount);
+ void search(int time);
+ void startSearch();
+ void guardNoticed();
+ void busted(int i);
+ void corridorOnEntrance();
+ void telomat(int number);
+ void novaScroll();
+ void supernovaEvent();
+ void guardReturnedEvent();
+ void walk(int a);
+ void guardWalkEvent();
+ void taxiEvent();
+ void searchStartEvent();
+ void outro();
+ void guardShot();
+ void guard3Shot();
+ void alarm();
+ void alarmSound();
+
+private:
+ int _prevImgId;
+};
+
+}
+
+#endif // SUPERNOVA_STATE_H