189 lines
4.9 KiB
C++
189 lines
4.9 KiB
C++
/* 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 "glk/adrift/scare.h"
|
|
#include "glk/adrift/scprotos.h"
|
|
|
|
#ifndef ADRIFT_GAMESTATE_H
|
|
#define ADRIFT_GAMESTATE_H
|
|
|
|
namespace Glk {
|
|
namespace Adrift {
|
|
|
|
/* Room state structure, tracks rooms visited by the player. */
|
|
struct sc_roomstate_s {
|
|
sc_bool visited;
|
|
};
|
|
typedef sc_roomstate_s sc_roomstate_t;
|
|
|
|
/*
|
|
* Object state structure, tracks object movement, position, parent, openness
|
|
* for openable objects, state for stateful objects, and whether seen or not
|
|
* by the player. The enumerations are values assigned to position when the
|
|
* object is other than just "in a room"; otherwise position contains the
|
|
* room number + 1.
|
|
*/
|
|
enum {
|
|
OBJ_HIDDEN = -1, OBJ_HELD_PLAYER = 0, OBJ_HELD_NPC = -200, OBJ_WORN_PLAYER = -100,
|
|
OBJ_WORN_NPC = -300, OBJ_PART_PLAYER = -30, OBJ_PART_NPC = -30, OBJ_ON_OBJECT = -20,
|
|
OBJ_IN_OBJECT = -10
|
|
};
|
|
struct sc_objectstate_s {
|
|
sc_int position;
|
|
sc_int parent;
|
|
sc_int openness;
|
|
sc_int state;
|
|
sc_bool seen;
|
|
sc_bool unmoved;
|
|
sc_bool static_unmoved;
|
|
};
|
|
typedef sc_objectstate_s sc_objectstate_t;
|
|
|
|
/* Task state structure, tracks task done, and if task scored. */
|
|
struct sc_taskstate_s {
|
|
sc_bool done;
|
|
sc_bool scored;
|
|
};
|
|
|
|
typedef sc_taskstate_s sc_taskstate_t;
|
|
|
|
/* Event state structure, holds event state, and timing information. */
|
|
enum {
|
|
ES_WAITING = 1,
|
|
ES_RUNNING = 2, ES_AWAITING = 3, ES_FINISHED = 4, ES_PAUSED = 5
|
|
};
|
|
struct sc_eventstate_s {
|
|
sc_int state;
|
|
sc_int time;
|
|
};
|
|
typedef sc_eventstate_s sc_eventstate_t;
|
|
|
|
/*
|
|
* NPC state structure, tracks the NPC location and position, any parent
|
|
* object, whether the NPC seen, and if the NPC walks, the count of walk
|
|
* steps and a steps array sized to this count.
|
|
*/
|
|
struct sc_npcstate_s {
|
|
sc_int location;
|
|
sc_int position;
|
|
sc_int parent;
|
|
sc_int walkstep_count;
|
|
sc_int *walksteps;
|
|
sc_bool seen;
|
|
};
|
|
typedef sc_npcstate_s sc_npcstate_t;
|
|
|
|
/*
|
|
* Resource tracking structure, holds the resource name, including any
|
|
* trailing "##" for looping sounds, its offset into the game file, and its
|
|
* length. Two resources are held -- active, and requested. The game main
|
|
* loop compares the two, and notifies the interface on a change.
|
|
*/
|
|
struct sc_resource_s {
|
|
const sc_char *name;
|
|
sc_int offset;
|
|
sc_int length;
|
|
};
|
|
typedef sc_resource_s sc_resource_t;
|
|
|
|
/*
|
|
* Overall game state structure. Arrays are malloc'ed for the appropriate
|
|
* number of each of the above state structures.
|
|
*/
|
|
struct sc_game_s {
|
|
sc_uint magic;
|
|
|
|
/* References to assorted helper subsystems. */
|
|
sc_var_setref_t vars;
|
|
sc_prop_setref_t bundle;
|
|
sc_filterref_t filter;
|
|
sc_memo_setref_t memento;
|
|
sc_debuggerref_t debugger;
|
|
|
|
/* Undo information, also used by the debugger. */
|
|
struct sc_game_s *temporary;
|
|
struct sc_game_s *undo;
|
|
sc_bool undo_available;
|
|
|
|
/* Basic game state -- rooms, objects, and so on. */
|
|
sc_int room_count;
|
|
sc_roomstate_t *rooms;
|
|
sc_int object_count;
|
|
sc_objectstate_t *objects;
|
|
sc_int task_count;
|
|
sc_taskstate_t *tasks;
|
|
sc_int event_count;
|
|
sc_eventstate_t *events;
|
|
sc_int npc_count;
|
|
sc_npcstate_t *npcs;
|
|
sc_int playerroom;
|
|
sc_int playerposition;
|
|
sc_int playerparent;
|
|
sc_int turns;
|
|
sc_int score;
|
|
sc_bool bold_room_names;
|
|
sc_bool verbose;
|
|
sc_bool notify_score_change;
|
|
sc_char *current_room_name;
|
|
sc_char *status_line;
|
|
sc_char *title;
|
|
sc_char *author;
|
|
sc_char *hint_text;
|
|
|
|
/* Resource management data. */
|
|
sc_resource_t requested_sound;
|
|
sc_resource_t requested_graphic;
|
|
sc_bool stop_sound;
|
|
sc_bool sound_active;
|
|
|
|
sc_resource_t playing_sound;
|
|
sc_resource_t displayed_graphic;
|
|
|
|
/* Game running and game completed flags. */
|
|
sc_bool is_running;
|
|
sc_bool has_completed;
|
|
|
|
/* Player's setting for waitturns; overrides the game's. */
|
|
sc_int waitturns;
|
|
|
|
/* Miscellaneous library and main loop conveniences. */
|
|
sc_int waitcounter;
|
|
sc_bool has_notified;
|
|
sc_bool is_admin;
|
|
sc_bool do_again;
|
|
sc_int redo_sequence;
|
|
sc_bool do_restart;
|
|
sc_bool do_restore;
|
|
sc_bool *object_references;
|
|
sc_bool *multiple_references;
|
|
sc_bool *npc_references;
|
|
sc_int it_object;
|
|
sc_int him_npc;
|
|
sc_int her_npc;
|
|
sc_int it_npc;
|
|
};
|
|
typedef sc_game_s sc_game_t;
|
|
|
|
} // End of namespace Adrift
|
|
} // End of namespace Glk
|
|
|
|
#endif
|