430 lines
9.5 KiB
C++
430 lines
9.5 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/>.
|
|
*
|
|
*/
|
|
|
|
#ifndef NUVIE_CORE_GAME_H
|
|
#define NUVIE_CORE_GAME_H
|
|
|
|
#include "ultima/shared/std/containers.h"
|
|
#include "ultima/shared/std/string.h"
|
|
#include "ultima/nuvie/core/nuvie_defs.h"
|
|
|
|
namespace Ultima {
|
|
namespace Nuvie {
|
|
|
|
class Configuration;
|
|
class Script;
|
|
class Screen;
|
|
class Background;
|
|
class GamePalette;
|
|
class FontManager;
|
|
class Dither;
|
|
class TileManager;
|
|
class ObjManager;
|
|
class ActorManager;
|
|
class Magic;
|
|
class Map;
|
|
class MapWindow;
|
|
class MsgScroll;
|
|
class Player;
|
|
class Party;
|
|
class Converse;
|
|
class ConverseGump;
|
|
class Cursor;
|
|
class GameClock;
|
|
class ViewManager;
|
|
class Portrait;
|
|
class UseCode;
|
|
class Events;
|
|
class GUI;
|
|
class EffectManager;
|
|
class SoundManager;
|
|
class EggManager;
|
|
class CommandBar;
|
|
class Weather;
|
|
class Book;
|
|
class KeyBinder;
|
|
|
|
typedef enum {
|
|
PAUSE_UNPAUSED = 0x00,
|
|
PAUSE_USER = 0x01, /* Don't allow user-input */
|
|
PAUSE_ANIMS = 0x02, /* TileManager & Palette */
|
|
PAUSE_WORLD = 0x04, /* game time doesn't pass, freeze actors */
|
|
PAUSE_ALL = 0xFF
|
|
} GamePauseState;
|
|
|
|
class Game {
|
|
private:
|
|
nuvie_game_t game_type;
|
|
uint8 game_style; //new, original, orig_plus_cutoff_map, or orig_plus_full_map
|
|
static Game *game;
|
|
Configuration *config;
|
|
Script *script;
|
|
Screen *screen;
|
|
Background *background;
|
|
GamePalette *palette;
|
|
Dither *dither;
|
|
FontManager *font_manager;
|
|
TileManager *tile_manager;
|
|
ObjManager *obj_manager;
|
|
ActorManager *actor_manager;
|
|
Magic *magic;
|
|
Map *game_map;
|
|
MapWindow *map_window;
|
|
MsgScroll *scroll;
|
|
Player *player;
|
|
Party *party;
|
|
Converse *converse;
|
|
ConverseGump *conv_gump;
|
|
CommandBar *command_bar;
|
|
CommandBar *new_command_bar;
|
|
|
|
ViewManager *view_manager;
|
|
EffectManager *effect_manager;
|
|
SoundManager *sound_manager;
|
|
EggManager *egg_manager;
|
|
|
|
GameClock *_clock;
|
|
Portrait *portrait;
|
|
UseCode *usecode;
|
|
|
|
Weather *weather;
|
|
|
|
Cursor *cursor;
|
|
|
|
Events *event;
|
|
|
|
GUI *gui;
|
|
|
|
Book *book;
|
|
KeyBinder *keybinder;
|
|
|
|
GamePauseState pause_flags;
|
|
uint16 game_width;
|
|
uint16 game_height;
|
|
uint16 game_x_offset;
|
|
uint16 game_y_offset;
|
|
uint16 pause_user_count;
|
|
uint16 converse_gump_width;
|
|
uint16 min_converse_gump_width;
|
|
uint8 ignore_event_delay; // (stack) if non-zero, Events will not periodically wait for NUVIE_INTERVAL
|
|
bool is_using_hackmove;
|
|
bool dragging_enabled;
|
|
bool cheats_enabled;
|
|
bool unlimited_casting;
|
|
bool god_mode_enabled;
|
|
bool armageddon;
|
|
bool ethereal;
|
|
bool using_text_gumps;
|
|
bool open_containers; //doubleclick
|
|
ConverseGumpType converse_gump_type;
|
|
bool roof_mode;
|
|
bool free_balloon_movement;
|
|
bool force_solid_converse_bg;
|
|
bool _playing;
|
|
|
|
public:
|
|
Game(Configuration *cfg, Events *evt, Screen *scr, GUI *g, nuvie_game_t type, SoundManager *sm);
|
|
~Game();
|
|
|
|
bool loadGame(Script *s);
|
|
void init_cursor();
|
|
void init_game_style();
|
|
void play();
|
|
void update_once(bool process_gui_input);
|
|
|
|
void update_once_display();
|
|
void update_until_converse_finished();
|
|
|
|
bool isLoaded() const {
|
|
return script != nullptr;
|
|
}
|
|
GamePauseState get_pause_flags() const {
|
|
return pause_flags;
|
|
}
|
|
void set_pause_flags(GamePauseState state);
|
|
void unpause_all();
|
|
void unpause_user();
|
|
void unpause_anims();
|
|
void unpause_world();
|
|
void pause_all();
|
|
void pause_user();
|
|
void pause_anims();
|
|
void pause_world();
|
|
|
|
bool paused() const {
|
|
return pause_flags;
|
|
}
|
|
bool all_paused() const {
|
|
return (pause_flags & PAUSE_ALL);
|
|
}
|
|
bool user_paused() const {
|
|
return (pause_flags & PAUSE_USER);
|
|
}
|
|
bool anims_paused() const {
|
|
return (pause_flags & PAUSE_ANIMS);
|
|
}
|
|
bool world_paused() const{
|
|
return (pause_flags & PAUSE_WORLD);
|
|
}
|
|
|
|
void quit() {
|
|
_playing = false;
|
|
}
|
|
|
|
bool shouldQuit() const;
|
|
|
|
bool set_mouse_pointer(uint8 ptr_num);
|
|
void dont_wait_for_interval();
|
|
void wait_for_interval();
|
|
void time_changed();
|
|
void stats_changed();
|
|
|
|
void init_new_command_bar();
|
|
void delete_new_command_bar();
|
|
nuvie_game_t get_game_type() const {
|
|
return game_type;
|
|
}
|
|
uint8 get_game_style() const {
|
|
return game_style;
|
|
}
|
|
bool is_original_plus() const {
|
|
return (game_style == NUVIE_STYLE_ORIG_PLUS_CUTOFF_MAP || game_style == NUVIE_STYLE_ORIG_PLUS_FULL_MAP);
|
|
}
|
|
bool is_original_plus_cutoff_map() const {
|
|
return (game_style == NUVIE_STYLE_ORIG_PLUS_CUTOFF_MAP);
|
|
}
|
|
bool is_original_plus_full_map() const {
|
|
return (game_style == NUVIE_STYLE_ORIG_PLUS_FULL_MAP);
|
|
}
|
|
bool is_new_style() const {
|
|
return (game_style == NUVIE_STYLE_NEW);
|
|
}
|
|
bool is_orig_style() const {
|
|
return (game_style == NUVIE_STYLE_ORIG);
|
|
}
|
|
bool doubleclick_opens_containers();
|
|
void set_doubleclick_opens_containers(bool val) {
|
|
open_containers = val;
|
|
}
|
|
void set_using_text_gumps(bool val) {
|
|
using_text_gumps = val;
|
|
}
|
|
bool is_using_text_gumps() const {
|
|
return (using_text_gumps || is_new_style());
|
|
}
|
|
bool is_roof_mode() const {
|
|
return roof_mode;
|
|
}
|
|
void set_roof_mode(bool val) {
|
|
roof_mode = val;
|
|
}
|
|
bool using_hackmove();
|
|
void set_hackmove(bool hackmove);
|
|
uint8 is_dragging_enabled() {
|
|
return dragging_enabled;
|
|
}
|
|
void set_dragging_enabled(bool drag) {
|
|
dragging_enabled = drag;
|
|
}
|
|
bool is_god_mode_enabled() const {
|
|
return (god_mode_enabled && cheats_enabled);
|
|
}
|
|
bool toggle_god_mode() {
|
|
return (god_mode_enabled = !god_mode_enabled);
|
|
}
|
|
bool are_cheats_enabled() const {
|
|
return cheats_enabled;
|
|
}
|
|
void set_cheats_enabled(bool cheat) {
|
|
cheats_enabled = cheat;
|
|
}
|
|
bool has_unlimited_casting() const {
|
|
return (unlimited_casting && cheats_enabled);
|
|
}
|
|
void set_unlimited_casting(bool unlimited) {
|
|
unlimited_casting = unlimited;
|
|
}
|
|
bool is_armageddon() const {
|
|
return armageddon;
|
|
}
|
|
void set_armageddon(bool val) {
|
|
armageddon = val;
|
|
}
|
|
bool is_ethereal() const {
|
|
return ethereal;
|
|
}
|
|
void set_ethereal(bool val) {
|
|
ethereal = val;
|
|
}
|
|
ConverseGumpType get_converse_gump_type() const {
|
|
return converse_gump_type;
|
|
}
|
|
void set_converse_gump_type(ConverseGumpType new_type);
|
|
bool using_new_converse_gump();
|
|
void set_free_balloon_movement(bool val) {
|
|
free_balloon_movement = val;
|
|
}
|
|
bool has_free_balloon_movement() const {
|
|
return free_balloon_movement;
|
|
}
|
|
bool is_forcing_solid_converse_bg() const {
|
|
return force_solid_converse_bg;
|
|
}
|
|
uint16 get_converse_gump_width() const {
|
|
return converse_gump_width;
|
|
}
|
|
uint16 get_min_converse_gump_width() const {
|
|
return min_converse_gump_width;
|
|
}
|
|
uint16 get_game_width() const {
|
|
return game_width;
|
|
}
|
|
uint16 get_game_height() const {
|
|
return game_height;
|
|
}
|
|
uint16 get_game_x_offset() const {
|
|
return game_x_offset;
|
|
}
|
|
uint16 get_game_y_offset() const {
|
|
return game_y_offset;
|
|
}
|
|
Common::Path get_data_file_path(const Common::Path &datafile);
|
|
|
|
/* Return instances of Game classes */
|
|
static Game *get_game() {
|
|
return game;
|
|
}
|
|
Configuration *get_config() {
|
|
return config;
|
|
}
|
|
Script *get_script() {
|
|
return script;
|
|
}
|
|
Screen *get_screen() {
|
|
return screen;
|
|
}
|
|
Background *get_background() {
|
|
return background;
|
|
}
|
|
GamePalette *get_palette() {
|
|
return palette;
|
|
}
|
|
Dither *get_dither() {
|
|
return dither;
|
|
}
|
|
FontManager *get_font_manager() {
|
|
return font_manager;
|
|
}
|
|
TileManager *get_tile_manager() {
|
|
return tile_manager;
|
|
}
|
|
ObjManager *get_obj_manager() {
|
|
return obj_manager;
|
|
}
|
|
ActorManager *get_actor_manager() {
|
|
return actor_manager;
|
|
}
|
|
EggManager *get_egg_manager() {
|
|
return egg_manager;
|
|
}
|
|
Magic *get_magic() {
|
|
return magic;
|
|
}
|
|
Map *get_game_map() {
|
|
return game_map;
|
|
}
|
|
MapWindow *get_map_window() {
|
|
return map_window;
|
|
}
|
|
MsgScroll *get_scroll() {
|
|
return scroll;
|
|
}
|
|
Player *get_player() {
|
|
return player;
|
|
}
|
|
Party *get_party() {
|
|
return party;
|
|
}
|
|
Converse *get_converse() {
|
|
return converse;
|
|
}
|
|
ConverseGump *get_converse_gump() {
|
|
return conv_gump;
|
|
}
|
|
ViewManager *get_view_manager() {
|
|
return view_manager;
|
|
}
|
|
GameClock *get_clock() {
|
|
return _clock;
|
|
}
|
|
Portrait *get_portrait() {
|
|
return portrait;
|
|
}
|
|
UseCode *get_usecode() {
|
|
return usecode;
|
|
}
|
|
Events *get_event() {
|
|
return event;
|
|
}
|
|
GUI *get_gui() {
|
|
return gui;
|
|
}
|
|
SoundManager *get_sound_manager() {
|
|
return sound_manager;
|
|
}
|
|
|
|
Cursor *get_cursor() {
|
|
return cursor;
|
|
}
|
|
EffectManager *get_effect_manager() {
|
|
return effect_manager;
|
|
}
|
|
CommandBar *get_command_bar() {
|
|
return command_bar;
|
|
}
|
|
CommandBar *get_new_command_bar() {
|
|
return new_command_bar;
|
|
}
|
|
Weather *get_weather() {
|
|
return weather;
|
|
}
|
|
|
|
Book *get_book() {
|
|
return book;
|
|
}
|
|
KeyBinder *get_keybinder() {
|
|
return keybinder;
|
|
}
|
|
protected:
|
|
void init_converse();
|
|
void init_converse_gump_settings();
|
|
|
|
private:
|
|
void update_once(bool process_gui_input, bool run_converse);
|
|
};
|
|
|
|
extern uint getRandom(uint maxVal);
|
|
|
|
} // End of namespace Nuvie
|
|
} // End of namespace Ultima
|
|
|
|
#endif
|