mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 21:59:17 +00:00
808e365805
This mistake was introduced early on in 7ed5186 and not fixed still in the later fix 38d0dd3 From upstream 1f27837ef14585d8050a4b49b46faa002f87a881
1426 lines
34 KiB
C++
1426 lines
34 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 AGS_GLOBALS_H
|
|
#define AGS_GLOBALS_H
|
|
|
|
#include "ags/shared/core/platform.h"
|
|
#define AGS_PLATFORM_DEFINES_PSP_VARS (AGS_PLATFORM_OS_IOS || AGS_PLATFORM_OS_ANDROID)
|
|
|
|
#include "ags/lib/std/queue.h"
|
|
#include "ags/shared/ac/game_version.h"
|
|
#include "ags/shared/ac/keycode.h"
|
|
#include "ags/shared/util/stdio_compat.h"
|
|
#include "ags/shared/util/string.h"
|
|
#include "ags/shared/util/string_types.h"
|
|
#include "ags/shared/util/version.h"
|
|
#include "ags/shared/font/wfn_font.h"
|
|
#include "ags/shared/gui/gui_main.h"
|
|
#include "ags/shared/script/cc_script.h"
|
|
#include "ags/engine/ac/event.h"
|
|
#include "ags/engine/ac/runtime_defines.h"
|
|
#include "ags/engine/ac/walk_behind.h"
|
|
#include "ags/engine/main/engine.h"
|
|
#include "ags/engine/main/graphics_mode.h"
|
|
#include "ags/engine/media/audio/audio_defines.h"
|
|
#include "ags/engine/script/script.h"
|
|
#include "ags/engine/script/script_runtime.h"
|
|
#include "ags/lib/std/array.h"
|
|
#include "ags/lib/std/chrono.h"
|
|
#include "ags/lib/std/memory.h"
|
|
#include "ags/lib/std/set.h"
|
|
#include "ags/lib/allegro/color.h"
|
|
#include "ags/lib/allegro/fixed.h"
|
|
#include "ags/lib/allegro/aintern.h"
|
|
#include "common/events.h"
|
|
|
|
namespace Common {
|
|
class DumpFile;
|
|
}
|
|
|
|
namespace AGS3 {
|
|
|
|
#define MAXCURSORS 20
|
|
|
|
using String = AGS::Shared::String;
|
|
using Version = AGS::Shared::Version;
|
|
|
|
namespace AGS {
|
|
namespace Shared {
|
|
|
|
class AssetManager;
|
|
class Bitmap;
|
|
class DebugManager;
|
|
struct Font;
|
|
class GUIButton;
|
|
class GUIInvWindow;
|
|
class GUILabel;
|
|
class GUIListBox;
|
|
class GUISlider;
|
|
class GUITextBox;
|
|
struct InteractionVariable;
|
|
struct PlaneScaling;
|
|
class RoomStruct;
|
|
class SpriteCache;
|
|
struct Translation;
|
|
|
|
} // namespace Shared
|
|
|
|
namespace Engine {
|
|
|
|
class ConsoleOutputTarget;
|
|
struct GfxFilterInfo;
|
|
class IDriverDependantBitmap;
|
|
class IGfxDriverFactory;
|
|
class IGraphicsDriver;
|
|
class LogFile;
|
|
class MessageBuffer;
|
|
|
|
} // namespace Engine
|
|
} // namespace AGS
|
|
|
|
namespace Plugins {
|
|
namespace Core {
|
|
class EngineExports;
|
|
} // namespace Core
|
|
} // namespace Plugins
|
|
|
|
class IRouteFinder;
|
|
class Navigation;
|
|
class SplitLines;
|
|
class TTFFontRenderer;
|
|
class WFNFontRenderer;
|
|
|
|
struct AGSDeSerializer;
|
|
struct AGSPlatformDriver;
|
|
struct AGSStaticObject;
|
|
struct AmbientSound;
|
|
struct AnimatingGUIButton;
|
|
struct CachedActSpsData;
|
|
struct CCAudioChannel;
|
|
struct CCAudioClip;
|
|
struct CCCharacter;
|
|
struct CCDialog;
|
|
struct CCDynamicArray;
|
|
struct CCGUI;
|
|
struct CCGUIObject;
|
|
struct CCHotspot;
|
|
struct ccInstance;
|
|
struct CCInventory;
|
|
struct CCObject;
|
|
struct CCRegion;
|
|
struct CharacterCache;
|
|
struct CharacterExtras;
|
|
struct CharacterInfo;
|
|
struct color;
|
|
struct COLOR_MAP;
|
|
struct CSCIMessage;
|
|
struct DialogTopic;
|
|
struct DirtyRects;
|
|
struct EnginePlugin;
|
|
struct ExecutingScript;
|
|
struct EventHappened;
|
|
struct GameSetup;
|
|
struct GameSetupStruct;
|
|
struct GameState;
|
|
struct IAGSEditorDebugger;
|
|
struct ICCStringClass;
|
|
struct ManagedObjectPool;
|
|
struct Mouse;
|
|
struct MoveList;
|
|
struct NewControl;
|
|
struct NonBlockingScriptFunction;
|
|
struct ObjectCache;
|
|
struct OnScreenWindow;
|
|
struct PluginObjectReader;
|
|
struct Point;
|
|
struct ResourcePaths;
|
|
struct RGB_MAP;
|
|
struct RoomCameraDrawData;
|
|
struct RoomObject;
|
|
struct RoomStatus;
|
|
struct RuntimeScriptValue;
|
|
struct ScreenOverlay;
|
|
struct ScriptAudioChannel;
|
|
struct ScriptDialog;
|
|
struct ScriptDialogOptionsRendering;
|
|
struct ScriptDrawingSurface;
|
|
struct ScriptError;
|
|
struct ScriptGUI;
|
|
struct ScriptHotspot;
|
|
struct ScriptInvItem;
|
|
struct ScriptMouse;
|
|
struct ScriptObject;
|
|
struct ScriptPosition;
|
|
struct ScriptRegion;
|
|
struct ScriptString;
|
|
struct ScriptSystem;
|
|
struct SOUNDCLIP;
|
|
struct SpeechLipSyncLine;
|
|
struct SpriteListEntry;
|
|
struct StaticArray;
|
|
struct StaticGame;
|
|
struct SystemImports;
|
|
struct TopBarSettings;
|
|
struct ViewStruct;
|
|
|
|
class Globals {
|
|
public:
|
|
/**
|
|
* @defgroup agsglobals AGS Globals
|
|
* @ingroup agsengine
|
|
* @brief Globals for the AGS engine
|
|
*/
|
|
|
|
/**
|
|
* @defgroup agsallegroglobals Allegro globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _errnum = 0;
|
|
int *_allegro_errno = &_errnum;
|
|
|
|
int __color_depth = 0;
|
|
int __rgb_r_shift_15 = DEFAULT_RGB_R_SHIFT_15; /* truecolor pixel format */
|
|
int __rgb_g_shift_15 = DEFAULT_RGB_G_SHIFT_15;
|
|
int __rgb_b_shift_15 = DEFAULT_RGB_B_SHIFT_15;
|
|
int __rgb_r_shift_16 = DEFAULT_RGB_R_SHIFT_16;
|
|
int __rgb_g_shift_16 = DEFAULT_RGB_G_SHIFT_16;
|
|
int __rgb_b_shift_16 = DEFAULT_RGB_B_SHIFT_16;
|
|
int __rgb_r_shift_24 = DEFAULT_RGB_R_SHIFT_24;
|
|
int __rgb_g_shift_24 = DEFAULT_RGB_G_SHIFT_24;
|
|
int __rgb_b_shift_24 = DEFAULT_RGB_B_SHIFT_24;
|
|
int __rgb_r_shift_32 = DEFAULT_RGB_R_SHIFT_32;
|
|
int __rgb_g_shift_32 = DEFAULT_RGB_G_SHIFT_32;
|
|
int __rgb_b_shift_32 = DEFAULT_RGB_B_SHIFT_32;
|
|
int __rgb_a_shift_32 = DEFAULT_RGB_A_SHIFT_32;
|
|
|
|
RGB_MAP *_rgb_map = nullptr;
|
|
COLOR_MAP *_color_map = nullptr;
|
|
int _trans_blend_alpha = 0;
|
|
int _trans_blend_red = 0;
|
|
int _trans_blend_green = 0;
|
|
int _trans_blend_blue = 0;
|
|
BlenderMode __blender_mode = kRgbToRgbBlender;
|
|
/* current format information and worker routines */
|
|
int _utype = U_UTF8;
|
|
|
|
/* default palette structures */
|
|
PALETTE _black_palette;
|
|
PALETTE _current_palette;
|
|
PALETTE _prev_current_palette;
|
|
|
|
volatile int _mouse_x = 0; // X position
|
|
volatile int _mouse_y = 0; // Y position
|
|
volatile int _mouse_z = 0; // Mouse wheel vertical
|
|
volatile int _mouse_b = 0; // Mouse buttons bitflags
|
|
volatile int _mouse_pos = 0; // X position in upper 16 bits, Y in lower 16
|
|
|
|
// Accumulated absolute and relative mouse device motion.
|
|
// May be retrieved by calling *acquire_absxy and *acquire_relxy functions,
|
|
// after which these are reset, until next motion event is received.
|
|
volatile int _sys_mouse_x = 0; // mouse x position
|
|
volatile int _sys_mouse_y = 0; // mouse y position
|
|
volatile int _sys_mouse_z = 0; // mouse wheel position
|
|
|
|
volatile int _freeze_mouse_flag = 0;
|
|
|
|
// Relative x and y deltas
|
|
int _mouse_accum_relx = 0, _mouse_accum_rely = 0;
|
|
|
|
int _mouse_button_state = 0;
|
|
int _mouse_accum_button_state = 0;
|
|
uint32 _mouse_clear_at_time = 0;
|
|
eAGSMouseButton _wasbutdown = kMouseNone;
|
|
int _wasongui = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsstaticobjectglobals agsstaticobject globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::unique_ptr<Shared::AssetManager> *_AssetMgr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsplatformdriverglobals agsplatformdriver globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// We don't have many places where we delay longer than a frame, but where we
|
|
// do, we should give the audio layer a chance to update.
|
|
// 16 milliseconds is rough period for 60fps
|
|
const std::chrono::milliseconds _MaximumDelayBetweenPolling = std::chrono::milliseconds(16);
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agspluginglobals agsplugin globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Shared::Bitmap *_glVirtualScreenWrap;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsstaticobjectglobals agsstaticobject globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGSStaticObject *_GlobalStaticManager;
|
|
StaticGame *_GameStaticManager;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsaudioglobals audio globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::array<SOUNDCLIP *> *_audioChannels;
|
|
std::array<AmbientSound> *_ambient;
|
|
|
|
ScriptAudioChannel *_scrAudioChannel;
|
|
int _reserved_channel_count = 0;
|
|
|
|
// This is an indicator of a music played by an old audio system
|
|
// (to distinguish from the new system API)
|
|
int _current_music_type = 0;
|
|
// _G(crossFading) is >0 (channel number of new track), or -1 (old
|
|
// track fading out, no new track)
|
|
int _crossFading = 0, _crossFadeVolumePerStep = 0, _crossFadeStep = 0;
|
|
int _crossFadeVolumeAtStart = 0;
|
|
SOUNDCLIP *_cachedQueuedMusic = nullptr;
|
|
|
|
// Music update is scheduled when the voice speech stops;
|
|
// we do a small delay before reverting any volume adjustments
|
|
bool _music_update_scheduled = false;
|
|
uint32 _music_update_at = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsbuttonglobals button globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AnimatingGUIButton> *_animbuts;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_dynamicarrayglobals cc_dynamicarray globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
CCDynamicArray *_globalDynamicArray;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_dynamicobjectglobals cc_dynamicobject globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
ICCStringClass *_stringClassImpl = nullptr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_commonglobals cc_common globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
ScriptError *_ccError;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_instanceglobals cc_instance globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// Instance thread stack holds a list of running or suspended script instances;
|
|
// In AGS currently only one thread is running, others are waiting in the queue.
|
|
// An example situation is repeatedly_execute_always callback running while
|
|
// another instance is waiting at the blocking action or Wait().
|
|
std::deque<ccInstance *> *_InstThreads;
|
|
// [IKM] 2012-10-21:
|
|
// NOTE: This is temporary solution (*sigh*, one of many) which allows certain
|
|
// exported functions return value as a RuntimeScriptValue object;
|
|
// Of 2012-12-20: now used only for plugin exports
|
|
RuntimeScriptValue *_GlobalReturnValue;
|
|
Common::DumpFile *_scriptDumpFile = nullptr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_optionsglobals cc_options globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _ccCompOptions;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_scriptglobals cc_script globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// currently executed line
|
|
int _currentline = 0;
|
|
// script file format signature
|
|
const char *_scfilesig = "SCOM";
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscc_serializerglobals cc_serializer globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGSDeSerializer *_ccUnserializer;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscharacterglobals character globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _use_cdplayer = 0;
|
|
bool _triedToUseCdAudioCommand = false;
|
|
int _need_to_stop_cd = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscharacterglobals character globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
CharacterInfo *_playerchar = nullptr;
|
|
int32_t _sc_PlayerCharPtr = 0;
|
|
int _char_lowest_yp = 0;
|
|
|
|
// Sierra-style speech settings
|
|
int _face_talking = -1, _facetalkview = 0, _facetalkwait = 0, _facetalkframe = 0;
|
|
int _facetalkloop = 0, _facetalkrepeat = 0, _facetalkAllowBlink = 1;
|
|
int _facetalkBlinkLoop = 0;
|
|
CharacterInfo *_facetalkchar = nullptr;
|
|
// Do override default portrait position during QFG4-style speech overlay update
|
|
bool _facetalk_qfg4_override_placement_x = false;
|
|
bool _facetalk_qfg4_override_placement_y = false;
|
|
|
|
// lip-sync speech settings
|
|
int _loops_per_character = 0, _text_lips_offset = 0, _char_speaking = -1;
|
|
int _char_thinking = -1;
|
|
const char *_text_lips_text = nullptr;
|
|
SpeechLipSyncLine *_splipsync = nullptr;
|
|
int _numLipLines = 0, _curLipLine = -1, _curLipLinePhoneme = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agscscdialogglobals cscdialog globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _windowbackgroundcolor, _pushbuttondarkcolor;
|
|
int _pushbuttonlightcolor;
|
|
int _topwindowhandle = -1;
|
|
int _cbuttfont = 0;
|
|
int _acdialog_font = 0;
|
|
int _smcode = 0;
|
|
int _controlid = 0;
|
|
NewControl **_vobjs;
|
|
OnScreenWindow *_oswi;
|
|
|
|
int _windowcount = 0, _curswas = 0;
|
|
int _win_x = 0, _win_y = 0, _win_width = 0, _win_height = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdebugglobals debug globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _editor_debugging_enabled = 0;
|
|
int _editor_debugging_initialized = 0;
|
|
char _editor_debugger_instance_token[100];
|
|
IAGSEditorDebugger *_editor_debugger = nullptr;
|
|
int _break_on_next_script_step = 0;
|
|
volatile int _game_paused_in_debugger = 0;
|
|
|
|
struct Breakpoint {
|
|
char scriptName[80] = { 0 };
|
|
int lineNumber = 0;
|
|
};
|
|
|
|
std::vector<Breakpoint> _breakpoints;
|
|
|
|
int _debug_flags = 0;
|
|
|
|
String *_debug_line;
|
|
int _first_debug_line = 0, _last_debug_line = 0, _display_console = 0;
|
|
|
|
float _fps;
|
|
int _display_fps;
|
|
std::unique_ptr<AGS::Engine::MessageBuffer> *_DebugMsgBuff;
|
|
std::unique_ptr<AGS::Engine::LogFile> *_DebugLogFile;
|
|
std::unique_ptr<AGS::Engine::ConsoleOutputTarget> *_DebugConsole;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdebugglobals debug globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Shared::DebugManager *_DbgMgr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdialogglobals dialog globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<DialogTopic> _dialog;
|
|
ScriptDialogOptionsRendering *_ccDialogOptionsRendering;
|
|
ScriptDrawingSurface *_dialogOptionsRenderingSurface = nullptr;
|
|
|
|
// identifier (username) of the voice pak
|
|
String _VoicePakName;
|
|
// parent part to use when making voice asset names
|
|
String _VoiceAssetPath;
|
|
int _said_speech_line = 0; // used while in dialog to track whether screen needs updating
|
|
int _said_text = 0;
|
|
int _longestline = 0;
|
|
// Old dialog support
|
|
std::vector<std::vector<uint8_t>> _old_dialog_scripts;
|
|
std::vector<String> _old_speech_lines;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdisplayglobals display globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _display_message_aschar = 0;
|
|
int _source_text_length = -1;
|
|
|
|
TopBarSettings *_topBar;
|
|
struct DisplayVars {
|
|
int lineheight = 0; // font's height of single line
|
|
int linespacing = 0; // font's line spacing
|
|
int fulltxtheight = 0; // total height of all the text
|
|
} _disp;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdrawglobals draw globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<RoomCameraDrawData> *_CameraDrawData;
|
|
// Two lists of sprites to push into renderer during next render pass
|
|
// thingsToDrawList - is the main list, unsorted, drawn in the index order
|
|
std::vector<SpriteListEntry> *_thingsToDrawList;
|
|
std::vector<SpriteListEntry> *_sprlist;
|
|
|
|
AGS::Engine::IGraphicsDriver *_gfxDriver = nullptr;
|
|
AGS::Engine::IDriverDependantBitmap *_blankImage = nullptr;
|
|
AGS::Engine::IDriverDependantBitmap *_blankSidebarImage = nullptr;
|
|
AGS::Engine::IDriverDependantBitmap *_debugConsole = nullptr;
|
|
|
|
// actsps is used for temporary storage of the bitamp and texture
|
|
// of the latest version of the sprite (room objects and characters);
|
|
// objects sprites begin with index 0, characters are after ACTSP_OBJSOFF
|
|
std::vector<ObjTexture> *_actsps;
|
|
// Walk-behind textures (3D renderers only)
|
|
std::vector<ObjTexture> *_walkbehindobj;
|
|
// GUI surfaces
|
|
std::vector<ObjTexture> *_guibg;
|
|
// GUI control surfaces
|
|
std::vector<ObjTexture> *_guiobjbg;
|
|
// first control texture index of each GUI
|
|
std::vector<int> *_guiobjddbref;
|
|
// Overlay's cached transformed bitmap, for software mode
|
|
std::vector<std::unique_ptr<Shared::Bitmap> > *_overlaybmp;
|
|
// For debugging room masks
|
|
ObjTexture *_debugRoomMaskObj;
|
|
ObjTexture *_debugMoveListObj;
|
|
RoomAreaMask _debugRoomMask = kRoomAreaNone;
|
|
int _debugMoveListChar = -1;
|
|
|
|
bool _current_background_is_dirty = false;
|
|
// Room background sprite
|
|
AGS::Engine::IDriverDependantBitmap *_roomBackgroundBmp = nullptr;
|
|
AGS::Shared::Bitmap *_debugConsoleBuffer = nullptr;
|
|
// whether there are currently remnants of a DisplaySpeech
|
|
bool _screen_is_dirty = false;
|
|
AGS::Shared::Bitmap *_raw_saved_screen = nullptr;
|
|
AGS::Shared::Bitmap **_dynamicallyCreatedSurfaces = nullptr;
|
|
int _places_r = 3, _places_g = 2, _places_b = 3;
|
|
color *_palette;
|
|
COLOR_MAP *_maincoltable;
|
|
|
|
std::vector<Engine::IDriverDependantBitmap *> *_guiobjddb;
|
|
std::vector<Point> *_guiobjoff; // because surface may be larger than logical position
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsdraw_softwareglobals draw_software globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// Dirty rects for the game screen background (black screen);
|
|
// these are used when the room viewport does not cover whole screen,
|
|
// so that we know when to paint black after mouse cursor and gui.
|
|
DirtyRects *_BlackRects;
|
|
Point *_GlobalOffs;
|
|
// Dirty rects object for the single room camera
|
|
std::vector<DirtyRects> *_RoomCamRects;
|
|
// Saved room camera offsets to know if we must invalidate whole surface.
|
|
// TODO: if we support rotation then we also need to compare full transform!
|
|
std::vector<std::pair<int, int> > *_RoomCamPositions;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsengineglobals engine globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
bool _check_dynamic_sprites_at_exit = true;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsengineglobals engine globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
ResourcePaths *_ResPaths;
|
|
t_engine_pre_init_callback _engine_pre_init_callback = nullptr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsengine_setupglobals engine_setup globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _convert_16bit_bgr = 0;
|
|
|
|
/**@}*/
|
|
|
|
|
|
/**
|
|
* @defgroup agseventglobals event globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _in_enters_screen = 0, _done_es_error = 0;
|
|
int _in_leaves_screen = -1;
|
|
|
|
std::vector<EventHappened> *_events;
|
|
|
|
const char *_evblockbasename = nullptr;
|
|
int _evblocknum = 0;
|
|
|
|
int _inside_processevent = 0;
|
|
int _eventClaimed = 0;
|
|
|
|
const char *_tsnames[TS_NUM] = { nullptr, REP_EXEC_NAME, "on_key_press", "on_mouse_click", "on_text_input" };
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsfileglobals file globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// TODO: the asset path configuration should certainly be revamped at some
|
|
// point, with uniform method of configuring auxiliary paths and packages.
|
|
// Installation directory, may contain absolute or relative path
|
|
String _installDirectory;
|
|
// Installation directory, containing audio files
|
|
String _installAudioDirectory;
|
|
// Installation directory, containing voice-over files
|
|
String _installVoiceDirectory;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsfontsglobals fonts globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::Font> *_fonts;
|
|
TTFFontRenderer *_ttfRenderer;
|
|
WFNFontRenderer *_wfnRenderer;
|
|
SplitLines *_Lines;
|
|
const WFNChar _emptyChar; // a dummy character to substitute bad symbols
|
|
Shared::Bitmap _wputblock_wrapper; // [IKM] argh! :[
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgameglobals game globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
GameSetupStruct *_game;
|
|
GameState *_play;
|
|
AGS::Shared::SpriteCache *_spriteset;
|
|
AGS::Shared::RoomStruct *_thisroom;
|
|
RoomStatus *_troom; // used for non-saveable rooms, eg. intro
|
|
|
|
std::vector<AGS::Shared::GUIMain> *_guis;
|
|
CCGUIObject *_ccDynamicGUIObject;
|
|
CCCharacter *_ccDynamicCharacter;
|
|
CCHotspot *_ccDynamicHotspot;
|
|
CCRegion *_ccDynamicRegion;
|
|
CCInventory *_ccDynamicInv;
|
|
CCGUI *_ccDynamicGUI;
|
|
CCObject *_ccDynamicObject;
|
|
CCDialog *_ccDynamicDialog;
|
|
CCAudioClip *_ccDynamicAudioClip;
|
|
CCAudioChannel *_ccDynamicAudio;
|
|
ScriptString *_myScriptStringImpl;
|
|
|
|
// TODO: IMPORTANT!!
|
|
// we cannot simply replace these arrays with vectors, or other C++ containers,
|
|
// until we implement safe management of such containers in script exports
|
|
// system. Noteably we would need an alternate to StaticArray class to track
|
|
// access to their elements.
|
|
ScriptObject *_scrObj;
|
|
ScriptGUI *_scrGui = nullptr;
|
|
ScriptHotspot *_scrHotspot;
|
|
ScriptRegion *_scrRegion;
|
|
ScriptInvItem *_scrInv;
|
|
ScriptDialog *_scrDialog = nullptr;
|
|
std::vector<ViewStruct> *_views;
|
|
// Cached character and object states, used to determine
|
|
// whether these require texture update
|
|
std::vector<ObjectCache> *_charcache;
|
|
ObjectCache *_objcache;
|
|
std::vector<Point> *_screenovercache;
|
|
std::vector<CharacterExtras> *_charextra;
|
|
// MoveLists for characters and room objects; NOTE: 1-based array!
|
|
// object sprites begin with index 1, characters are after MAX_ROOM_OBJECTS + 1
|
|
std::vector<MoveList> *_mls;
|
|
|
|
GameSetup *_usetup;
|
|
AGS::Shared::String _saveGameDirectory;
|
|
AGS::Shared::String _saveGameSuffix;
|
|
bool _want_exit = false;
|
|
bool _abort_engine = false;
|
|
AGSPlatformDriver *_platform = nullptr;
|
|
|
|
RoomObject *_objs = nullptr;
|
|
RoomStatus *_croom = nullptr;
|
|
|
|
volatile int _switching_away_from_game = 0;
|
|
volatile bool _switched_away = false;
|
|
int _frames_per_second = 40;
|
|
int _displayed_room = -10, _starting_room = -1;
|
|
int _in_new_room = 0, _new_room_was = 0; // 1 in new room, 2 first time in new room, 3 loading saved game
|
|
int _new_room_pos = 0;
|
|
int _new_room_x = SCR_NO_VALUE, _new_room_y = SCR_NO_VALUE;
|
|
int _new_room_loop = SCR_NO_VALUE;
|
|
bool _proper_exit = true;
|
|
int _our_eip = 0;
|
|
|
|
int _oldmouse = 0;
|
|
// Data format version of the loaded game
|
|
GameDataVersion _loaded_game_file_version = kGameVersion_Undefined;
|
|
// The version of the engine the loaded game was compiled for (if available)
|
|
Version _game_compiled_version;
|
|
int _game_paused = 0;
|
|
unsigned int _load_new_game = 0;
|
|
int _load_new_game_restore = -1;
|
|
// TODO: refactor these global vars into function arguments
|
|
int _getloctype_index = 0, _getloctype_throughgui = 0;
|
|
char _gamefilenamebuf[200] = { 0 };
|
|
int _gameHasBeenRestored = 0;
|
|
int _oldeip = 0;
|
|
int _game_update_suspend = 0;
|
|
bool _new_room_placeonwalkable = false;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgame_initglobals game_init globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
StaticArray *_StaticCharacterArray;
|
|
StaticArray *_StaticObjectArray;
|
|
StaticArray *_StaticGUIArray;
|
|
StaticArray *_StaticHotspotArray;
|
|
StaticArray *_StaticRegionArray;
|
|
StaticArray *_StaticInventoryArray;
|
|
StaticArray *_StaticDialogArray;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgame_runglobals game_run globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// Following struct instructs the engine to run game loops until
|
|
// certain condition is not fullfilled.
|
|
struct RestrictUntil {
|
|
int type = 0; // type of condition, UNTIL_* constant
|
|
int disabled_for = 0; // FOR_* constant
|
|
// pointer to the test variable
|
|
const void *data_ptr = nullptr;
|
|
// other values used for a test, depend on type
|
|
int data1 = 0;
|
|
int data2 = 0;
|
|
} _restrict_until;
|
|
|
|
unsigned int _loopcounter = 0;
|
|
unsigned int _lastcounter = 0;
|
|
int _numEventsAtStartOfFunction = 0;
|
|
uint32 _t1 = 0; // timer for FPS
|
|
int _old_key_shifts = 0; // for saving shift modes
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgfxfilter_aad3dglobals gfxfilter_aad3d globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
const AGS::Engine::GfxFilterInfo *_aad3dFilterInfo;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgfxfilter_allegroglobals gfxfilter_allegro globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
const AGS::Engine::GfxFilterInfo *_allegroFilterInfo;
|
|
AGS::Engine::GfxFilterInfo *_scummvmGfxFilter;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgfxfilter_allegroglobals gfxfilter_allegro globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
const AGS::Engine::GfxFilterInfo *_hqxFilterInfo;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgfxfilter_d3dglobals gfxfilter_d3d globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
const AGS::Engine::GfxFilterInfo *_d3dFilterInfo;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsglobal_dialogglobals global_dialog globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
ScriptPosition *_last_in_dialog_request_script_pos;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsglobal_objectglobals global_object globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// Used for deciding whether a char or obj was closer
|
|
int _obj_lowest_yp = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsgraphics_modeglobals graphics_mode globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Engine::IGfxDriverFactory *_GfxFactory = nullptr;
|
|
|
|
// Last saved fullscreen and windowed configs; they are used when switching
|
|
// between between fullscreen and windowed modes at runtime.
|
|
// If particular mode is modified, e.g. by script command, related config should be overwritten.
|
|
ActiveDisplaySetting *_SavedFullscreenSetting;
|
|
ActiveDisplaySetting *_SavedWindowedSetting;
|
|
// Current frame scaling setup
|
|
FrameScaleDef _CurFrameSetup = kFrame_Undefined;
|
|
// The game-to-screen transformation
|
|
AGS::Shared::PlaneScaling *_GameScaling;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguiglobals gui globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _ifacepopped = -1; // currently displayed pop-up GUI (-1 if none)
|
|
int _mouse_on_iface = -1; // mouse cursor is over this interface
|
|
int _mouse_ifacebut_xoffs = -1, _mouse_ifacebut_yoffs = -1;
|
|
int _eip_guinum = 0, _eip_guiobj = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguibuttonglobals guibutton globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUIButton> *_guibuts;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguidialogglobals guidialog globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// TODO: store drawing surface inside old gui classes instead
|
|
int _windowPosX = 0, _windowPosY = 0, _windowPosWidth = 0, _windowPosHeight = 0;
|
|
AGS::Shared::Bitmap *_windowBuffer = nullptr;
|
|
AGS::Engine::IDriverDependantBitmap *_dialogDDB = nullptr;
|
|
|
|
#define MAXSAVEGAMES_20 20
|
|
int _myscrnwid = 320, _myscrnhit = 200;
|
|
char *_lpTemp = nullptr, *_lpTemp2 = nullptr;
|
|
int _numsaves = 0, _toomanygames = 0;
|
|
int _filenumbers[MAXSAVEGAMES_20];
|
|
unsigned long _filedates[MAXSAVEGAMES_20];
|
|
char _bufTemp[260], _buffer2[260];
|
|
char _buff[200];
|
|
CSCIMessage *_smes;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguiinvglobals guiinv globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUIInvWindow> *_guiinv;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguilabelglobals guilabel globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUILabel> *_guilabels;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguilistboxglobals guilistbox globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUIListBox> *_guilist;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguimainglobals guimain globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _guis_need_update = 1;
|
|
int _all_buttons_disabled = -1, _gui_inv_pic = -1;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguisliderglobals guislider globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUISlider> *_guislider;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsguitextboxglobals guitextbox globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<AGS::Shared::GUITextBox> *_guitext;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsinteractionsglobals interactions globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Shared::InteractionVariable *_globalvars;
|
|
int _numGlobalVars = 1;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsinvwindowglobals invwindow globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _in_inv_screen = 0, _inv_screen_newroom = -1;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agslzwglobals lzw globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
uint8_t *_lzbuffer = nullptr;
|
|
int *_node = nullptr;
|
|
int _pos = 0;
|
|
size_t _outbytes = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsmainglobals main globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
String _appPath;
|
|
String _appDirectory; // Needed for library loading
|
|
String _cmdGameDataPath;
|
|
|
|
// Startup flags, set from parameters to engine
|
|
int _override_start_room = 0;
|
|
bool _justDisplayHelp = false;
|
|
bool _justDisplayVersion = false;
|
|
bool _justRunSetup = false;
|
|
bool _justTellInfo = false;
|
|
std::set<String> _tellInfoKeys;
|
|
int _loadSaveGameOnStartup = -1;
|
|
|
|
#if 0
|
|
//! AGS_PLATFORM_DEFINES_PSP_VARS
|
|
int _psp_rotation = 0;
|
|
int _psp_gfx_renderer = 0;
|
|
int _psp_gfx_scaling = 1;
|
|
int _psp_gfx_smoothing = 0;
|
|
int _psp_gfx_super_sampling = 1;
|
|
int _psp_gfx_smooth_sprites = 0;
|
|
#endif
|
|
|
|
// Current engine version
|
|
Version _EngineVersion;
|
|
// Lowest savedgame version, accepted by this engine
|
|
Version _SavedgameLowestBackwardCompatVersion;
|
|
// Lowest engine version, which would accept current savedgames
|
|
Version _SavedgameLowestForwardCompatVersion;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsmanagedobjectpoolglobals managedobjectpool globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
ManagedObjectPool *_pool;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsmouseglobals mouse globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int8 _currentcursor = 0;
|
|
// virtual mouse cursor coordinates
|
|
int _mousex = 0, _mousey = 0, _numcurso = -1, _hotx = 0, _hoty = 0;
|
|
// real mouse coordinates and bounds (in window coords)
|
|
int _real_mouse_x = 0, _real_mouse_y = 0;
|
|
int _boundx1 = 0, _boundx2 = 99999, _boundy1 = 0, _boundy2 = 99999;
|
|
int8 _ignore_bounds = 0;
|
|
AGS::Shared::Bitmap *_mousecurs[MAXCURSORS];
|
|
|
|
ScriptMouse *_scmouse;
|
|
int _cur_mode = 0, _cur_cursor = 0;
|
|
int _mouse_frame = 0, _mouse_delay = 0;
|
|
int _lastmx = -1, _lastmy = -1;
|
|
int8 _alpha_blend_cursor = 0;
|
|
AGS::Shared::Bitmap *_dotted_mouse_cursor = nullptr;
|
|
AGS::Engine::IDriverDependantBitmap *_mouseCursor = nullptr;
|
|
AGS::Shared::Bitmap *_blank_mouse_cursor = nullptr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsmousew32globals mousew32 globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _butwas = 0;
|
|
int _hotxwas = 0, _hotywas = 0;
|
|
Mouse *_mouse;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsoverlayglobals overlay globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::vector<ScreenOverlay> *_screenover;
|
|
int _is_complete_overlay = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsquitglobals quit globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
PluginObjectReader *_pluginReaders;
|
|
int _numPluginReaders = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsquitglobals quit globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
bool _handledErrorInEditor = false;
|
|
char _return_to_roomedit[30] = { '\0' };
|
|
char _return_to_room[150] = { '\0' };
|
|
char _quit_message[256] = { '\0' };
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsroomglobals room globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
RGB_MAP *_rgb_table; // for 256-col antialiasing
|
|
int _new_room_flags = 0;
|
|
int _gs_to_newroom = -1;
|
|
int _bg_just_changed = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsroute_finder_implglobals route_finder_impl globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int32_t *_navpoints;
|
|
Navigation *_nav;
|
|
int _num_navpoints = 0;
|
|
fixed _move_speed_x = 0, _move_speed_y = 0;
|
|
AGS::Shared::Bitmap *_wallscreen = nullptr;
|
|
int _lastcx = 0, _lastcy = 0;
|
|
std::unique_ptr<IRouteFinder> *_route_finder_impl;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsscreenglobals screen globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
// Screenshot made in the last room, used during some of the transition effects
|
|
AGS::Shared::Bitmap *_saved_viewport_bitmap = nullptr;
|
|
color *_old_palette;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsscriptglobal script globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
ExecutingScript *_scripts;
|
|
ExecutingScript *_curscript = nullptr;
|
|
|
|
PScript *_gamescript;
|
|
PScript *_dialogScriptsScript;
|
|
ccInstance *_gameinst = nullptr, *_roominst = nullptr;
|
|
ccInstance *_dialogScriptsInst = nullptr;
|
|
ccInstance *_gameinstFork = nullptr, *_roominstFork = nullptr;
|
|
|
|
int _num_scripts = 0;
|
|
int _post_script_cleanup_stack = 0;
|
|
|
|
int _inside_script = 0, _in_graph_script = 0;
|
|
int _no_blocking_functions = 0; // set to 1 while in rep_Exec_always
|
|
|
|
NonBlockingScriptFunction *_repExecAlways;
|
|
NonBlockingScriptFunction *_lateRepExecAlways;
|
|
NonBlockingScriptFunction *_getDialogOptionsDimensionsFunc;
|
|
NonBlockingScriptFunction *_renderDialogOptionsFunc;
|
|
NonBlockingScriptFunction *_getDialogOptionUnderCursorFunc;
|
|
NonBlockingScriptFunction *_runDialogOptionMouseClickHandlerFunc;
|
|
NonBlockingScriptFunction *_runDialogOptionKeyPressHandlerFunc;
|
|
NonBlockingScriptFunction *_runDialogOptionTextInputHandlerFunc;
|
|
NonBlockingScriptFunction *_runDialogOptionRepExecFunc;
|
|
NonBlockingScriptFunction *_runDialogOptionCloseFunc;
|
|
|
|
ScriptSystem *_scsystem;
|
|
|
|
std::vector<PScript> *_scriptModules;
|
|
std::vector<ccInstance *> *_moduleInst;
|
|
std::vector<ccInstance *> *_moduleInstFork;
|
|
std::vector<RuntimeScriptValue> *_moduleRepExecAddr;
|
|
size_t _numScriptModules = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsscript_runtimeglobals script_runtime globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
new_line_hook_type _new_line_hook = nullptr;
|
|
// Minimal timeout: how much time may pass without any engine update
|
|
// before we want to check on the situation and do system poll
|
|
unsigned _timeoutCheckMs = 60u;
|
|
// Critical timeout: how much time may pass without any engine update
|
|
// before we abort or post a warning
|
|
unsigned _timeoutAbortMs = 0u;
|
|
// Maximal while loops without any engine update in between,
|
|
// after which the interpreter will abort
|
|
unsigned _maxWhileLoops = 0u;
|
|
ccInstance *_loadedInstances[MAX_LOADED_INSTANCES];
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agsstringglobals string globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
int _MAXSTRLEN = MAX_MAXSTRLEN;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agssystemimportsglobals systemimports globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
SystemImports *_simp;
|
|
SystemImports *_simp_for_plugin;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agssys_eventsglobals sys_events globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
Plugins::Core::EngineExports *_engineExports;
|
|
Common::Array<EnginePlugin> *_plugins;
|
|
int _pluginsWantingDebugHooks = 0;
|
|
long _pl_file_handle = -1;
|
|
AGS::Shared::Stream *_pl_file_stream = nullptr;
|
|
|
|
eAGSMouseButton _pluginSimulatedClick = kMouseNone;
|
|
int _mouse_z_was = 0;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agstimerglobals timer globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
std::chrono::microseconds _tick_duration = std::chrono::microseconds(1000000LL / 40);
|
|
bool _framerate_maxed = false;
|
|
int _framerate = 0;
|
|
|
|
uint32 _last_tick_time = 0; // AGS_Clock::now();
|
|
uint32 _next_frame_timestamp = 0; // AGS_Clock::now();
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agstranslationglobals translation globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Shared::Translation *_trans;
|
|
AGS::Shared::StringMap *_transtree = nullptr;
|
|
String _trans_name, _trans_filename;
|
|
long _lang_offs_start = 0;
|
|
char _transFileName[MAX_PATH_SZ] = { 0 };
|
|
std::vector<uint16> _wcsbuf; // widechar buffer
|
|
std::vector<char> _mbbuf; // utf8 buffer
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agswalkableareaglobals walkablearea globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
AGS::Shared::Bitmap *_walkareabackup = nullptr, *_walkable_areas_temp = nullptr;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agswalkbehindglobals walkbehind globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
char *_walkBehindExists = nullptr; // whether a WB area is in this column
|
|
int *_walkBehindStartY = nullptr, *_walkBehindEndY = nullptr;
|
|
int8 _noWalkBehindsAtAll = 0;
|
|
int _walkBehindLeft[MAX_WALK_BEHINDS], _walkBehindTop[MAX_WALK_BEHINDS];
|
|
int _walkBehindRight[MAX_WALK_BEHINDS], _walkBehindBottom[MAX_WALK_BEHINDS];
|
|
AGS::Engine::IDriverDependantBitmap *_walkBehindBitmap[MAX_WALK_BEHINDS];
|
|
int _walkBehindsCachedForBgNum = 0;
|
|
WalkBehindMethodEnum _walkBehindMethod = DrawOverCharSprite;
|
|
int _walk_behind_baselines_changed = 0;
|
|
Rect _walkBehindAABB[MAX_WALK_BEHINDS]; // WB bounding box
|
|
std::vector<WalkBehindColumn> _walkBehindCols; // precalculated WB positions
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* @defgroup agswordsdictionaryglobals wordsdictionary globals
|
|
* @ingroup agsglobals
|
|
* @{
|
|
*/
|
|
|
|
const char *_passwencstring = "Avis Durgan";
|
|
|
|
/**@}*/
|
|
|
|
public:
|
|
Globals();
|
|
~Globals();
|
|
};
|
|
|
|
extern Globals *g_globals;
|
|
|
|
// Macro for accessing a globals member
|
|
#define _G(FIELD) (::AGS3::g_globals->_##FIELD)
|
|
// Macro for accessing a globals member that was an object in the original,
|
|
// but is a pointer to the object in ScummVM, so that we don't need to
|
|
// provide the full class/struct definition here in the header file
|
|
#define _GP(FIELD) (*::AGS3::g_globals->_##FIELD)
|
|
|
|
} // namespace AGS3
|
|
|
|
#endif
|