#ifndef ONI_H
#error Do not include this file directly, include Oni/Oni.h instead!
#endif

#ifndef SYMBOLS_VAR_H
#define SYMBOLS_VAR_H

//Define variables of Oni: #define VARNAME (*((TYPE*)ADDRESS))

// AIs are deaf (ger: "taub")
#define ai2_deaf			(*((onibool*)0x005ec0c1))

// Option "debug" ... but what does it do?
#define AKgDebug_DebugMaps	(*((onibool*)0x006b2204))

// Option "debugfiles" ... but what does it do?
#define BFgDebugFileEnable	(*((onibool*)0x0055c8d0))

// Command line instance
#define COgCommandLine		(*((void**)0x00571b74))
#define COgConsoleLines		(*((void**)0x005cb468))

// Default console text color
#define COgDefaultTextShade	(*((uint32_t*)0x00533f70))

// Default console text shadow color
#define COgDefaultTextShadow	(*((uint32_t*)0x00533f74))

// Console text fade timeout
#define COgFadeTimeValue	(*((uint32_t*)0x00533f68))

// Game termination flag (ONiRunGame loops on it).
#define ONgTerminateGame	(*((UUtBool*)0x00630ffd))

// Window manager is running (drawing and updating windows).
#define WMgActive			(*((UUtBool*)0x005e99a0))

// Set by WinMain, used by UUrPlatform_Initialize and ONrPlatform_Initialize,
// which copies it into ONgPlatformData.
#define ONgInstance			(*((HINSTANCE*)0x0061f9e4))

// Keeps initial gamma ramp value (before any change).
#define GLgInitialGammaRamp	(((M3tWin32GammaRamp*)0x0055fdfc))

// Nonzero when gamma ramp was successfully read into GLgInitialGammaRamp.
#define GLgGammaRampValid	(*((int*)0x005603fc))

// OpenGL: list of pointers to opengl32.dll functions (and a few functions from GL extensions)
#define gl_api				(*((gl_api_t**)0x00560604))

// OpenGL render engine descriptor (resolutions, flags, context methods)
#define gl				(*((gl_engine_t**)0x00560600))

// Initial display mode (saved by gl_library_is_loaded).
#define GLgInitialMode		(*((DEVMODE*)0x0055fd60))

// False to prevent Oni from changing display settings (however Bink
// player does not respect this setting).
#define M3gResolutionSwitch	(*((onibool*)0x00531634))

// Startup.txt file handle
#define ONgFileStartup		(*((FILE**)0x005711b8))

// Current GameState
#define ONgGameState		(*((GameState**)0x005ece7c))

// Current ONtPlatformData
#define ONgPlatformData		(*((ONtPlatformData*)0x00631008))

// Load non levelX_final-files yes/no
#define opt_ignore_private_data	(*((onibool*)0x006370f0))

// Play sound yes/no
#define opt_sound			(*((onibool*)0x006370fc))

// Option "findsounds" ... but what does it do?
#define SSgSearchOnDisk		(*((onibool*)0x005eb758))

// OBJgTriggerVolume_Visible - bsl var to show trigger volumes
#define OBJgTriggerVolume_Visible	(*((bool*)0x005ec6c4))

//#define OBJgFlag_DrawFlags	(*((void*)0x005ec624))
//#define OBJgFlag_ViewPrefix	(*((void*)0x005ec650))
//#define OBJgFlag_DrawNameDistance	(*((void*)0x005ec634))

// Oni's platform input system stores the window HWND in this global
#define LIgPlatform_HWND (*((HWND *)0x0055cae8))

// Is Oni's input system active? True in gameplay and false in menus.
// LIrPlatform_Mode_Set gets called when this changes.
#define LIgMode_Internal (*((UUtBool *)0x0055fd40))

// List of bindings from Oni's internal key codes to LItActionDescriptions
#define LIgBindingArray ((LItBinding *)0x0055fa20)

// Is "Invert Mouse" checked in the Options menu? If so, platform specific input
// code should invert the cursor's Y offset when building LItActionBuffers.
#define LIgMode_InvertMouse (*((UUtBool *)0x0052ecf4))

// This is a map from DirectInput scan codes to Oni's internal key codes, the
// latter of which mostly match ASCII for a US keyboard layout. DirectInput scan
// codes are mostly the same as the PS2 make codes that Windows uses in other
// APIs except that extended keys are represented by bit 0x80 being set.
#define LIgPlatform_ScanCodeToChar ((uint8_t *)0x005292b8)

// Script variable to enable/disable centering the cursor in the window when
// processing input. On by default.
#define LIgCenterCursor (*((int *)0x0052d88d))

// List of bindable input actions
#define LIgActionDescriptions ((LItActionDescription*)0x0052db18)

#endif
