Files
scummvm-cursorfix/engines/glk/adrift/scgamest.h
2026-02-02 04:50:13 +01:00

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