raze/source/core/gamecontrol.h

240 lines
5 KiB
C
Raw Normal View History

#pragma once
#include <memory>
#include "c_cvars.h"
#include "zstring.h"
#include "inputstate.h"
#include "gamecvars.h"
#include "tarray.h"
#include "name.h"
#include "memarena.h"
#include "stats.h"
#include "i_time.h"
#include "palentry.h"
extern FString currentGame;
extern FString LumpFilter;
extern int PlayClock;
class FArgs;
extern bool GUICapture;
extern bool AppActive;
extern cycle_t drawtime, actortime, thinktime, gameupdatetime;
extern bool r_NoInterpolate;
extern bool crouch_toggle;
struct MapRecord;
extern MapRecord* g_nextmap;
2020-10-08 20:20:41 +00:00
extern int g_nextskill;
extern FMemArena dump; // this is for memory blocks than cannot be deallocated without some huge effort. Put them in here so that they do not register on shutdown.
2019-10-31 23:32:56 +00:00
int CONFIG_Init();
// I am not sure if anything below will survive for long...
#define MAXMOUSEAXES 2
#define MAXMOUSEDIGITAL (MAXMOUSEAXES*2)
// default mouse scale
#define DEFAULTMOUSEANALOGUESCALE 65536
// default joystick settings
#define DEFAULTJOYSTICKANALOGUESCALE 65536
#define DEFAULTJOYSTICKANALOGUEDEAD 1000
#define DEFAULTJOYSTICKANALOGUESATURATE 9500
void CONFIG_SetupJoystick(void);
void CONFIG_SetGameControllerDefaultsClear();
extern FStringCVar* const CombatMacros[];
void CONFIG_ReadCombatMacros();
int GameMain();
int GetAutomapZoom(int gZoom);
void DrawCrosshair(int deftile, int health, double xdelta, double ydelta, double scale, PalEntry color = 0xffffffff);
void updatePauseStatus();
void DeferedStartGame(MapRecord* map, int skill, bool nostopsound = false);
void ChangeLevel(MapRecord* map, int skill);
void CompleteLevel(MapRecord* map);
struct UserConfig
{
FString gamegrp;
FString CommandMap;
FString UserDef;
FString DefaultDef;
FString DefaultCon;
FString CommandDemo;
FString CommandName;
FString CommandIni;
std::unique_ptr<FArgs> AddDefs;
std::unique_ptr<FArgs> AddCons;
std::unique_ptr<FArgs> AddFiles;
std::unique_ptr<FArgs> AddFilesPre; //To be added before the main directory. Only for legacy options.
std::unique_ptr<FArgs> AddArt;
TArray<FString> toBeDeleted;
bool nomonsters = false;
bool nosound = false;
//bool nomusic = false;
bool nologo = false;
int setupstate = -1;
void ProcessOptions();
};
extern UserConfig userConfig;
extern int nomusic;
extern bool nosound;
inline bool MusicEnabled()
{
return mus_enabled && !nomusic;
}
inline bool SoundEnabled()
{
return snd_enabled && !nosound;
}
2019-10-30 17:09:00 +00:00
enum
{
GAMEFLAG_DUKE = 0x00000001,
GAMEFLAG_NAM = 0x00000002,
GAMEFLAG_NAPALM = 0x00000004,
GAMEFLAG_WW2GI = 0x00000008,
GAMEFLAG_ADDON = 0x00000010,
GAMEFLAG_SHAREWARE = 0x00000020,
GAMEFLAG_DUKEBETA = 0x00000060, // includes 0x20 since it's a shareware beta
GAMEFLAG_PLUTOPAK = 0x00000080,
2019-10-30 17:09:00 +00:00
GAMEFLAG_RR = 0x00000100,
GAMEFLAG_RRRA = 0x00000200,
GAMEFLAG_RRALL = GAMEFLAG_RR | GAMEFLAG_RRRA,
2020-02-26 19:16:27 +00:00
GAMEFLAG_BLOOD = 0x00000800,
GAMEFLAG_SW = 0x00001000,
GAMEFLAG_POWERSLAVE = 0x00002000,
GAMEFLAG_EXHUMED = 0x00004000,
GAMEFLAG_PSEXHUMED = GAMEFLAG_POWERSLAVE | GAMEFLAG_EXHUMED, // the two games really are the same, except for the name and the publisher.
GAMEFLAG_WORLDTOUR = 0x00008000,
GAMEFLAG_DUKEDC = 0x00010000,
GAMEFLAG_DUKECOMPAT = GAMEFLAG_DUKE | GAMEFLAG_NAM | GAMEFLAG_NAPALM | GAMEFLAG_WW2GI | GAMEFLAG_RRALL,
GAMEFLAGMASK = 0x0000FFFF, // flags allowed from grpinfo
2019-10-30 17:09:00 +00:00
// We still need these for the parsers.
GAMEFLAG_FURY = 0,
GAMEFLAG_DEER = 0,
2019-10-30 23:41:56 +00:00
};
struct GrpInfo
{
FString name;
FString scriptname;
FString defname;
FString rtsname;
FString gamefilter;
uint32_t CRC = 0;
uint32_t dependencyCRC = 0;
size_t size = 0;
int flags = 0;
bool loaddirectory = false;
bool isAddon = false;
int index = -1;
TArray<FString> mustcontain;
TArray<FString> tobedeleted;
2019-10-30 23:41:56 +00:00
TArray<FString> loadfiles;
TArray<FString> loadart;
uint32_t FgColor = 0, BgColor = 0;
2019-10-30 23:41:56 +00:00
};
struct GrpEntry
{
FString FileName;
GrpInfo FileInfo;
};
extern int g_gameType;
const char* G_DefaultDefFile(void);
const char* G_DefFile(void);
void LoadDefinitions();
2019-10-30 23:41:56 +00:00
// game check shortcuts
inline bool isNam()
{
return g_gameType & (GAMEFLAG_NAM | GAMEFLAG_NAPALM);
}
2020-05-08 22:34:48 +00:00
inline bool isNamWW2GI()
{
return g_gameType & (GAMEFLAG_NAM | GAMEFLAG_NAPALM |GAMEFLAG_WW2GI);
}
inline bool isWW2GI()
{
return g_gameType & (GAMEFLAG_WW2GI);
}
inline bool isRR()
{
return g_gameType & (GAMEFLAG_RRALL);
}
inline bool isRRRA()
{
return g_gameType & (GAMEFLAG_RRRA);
}
inline bool isWorldTour()
{
return g_gameType & GAMEFLAG_WORLDTOUR;
}
inline bool isPlutoPak()
{
return g_gameType & GAMEFLAG_PLUTOPAK;
}
inline bool isShareware()
{
return g_gameType & GAMEFLAG_SHAREWARE;
}
inline bool isBlood()
{
return g_gameType & GAMEFLAG_BLOOD;
}
2019-10-30 23:41:56 +00:00
TArray<GrpEntry> GrpScan();
void S_PauseSound(bool notmusic, bool notsfx);
void S_ResumeSound(bool notsfx);
void S_SetSoundPaused(int state);
void G_FatalEngineError(void);
enum
{
MaxSmoothRatio = FRACUNIT
};
FString G_GetDemoPath();
enum
{
PAUSESFX_MENU = 1,
PAUSESFX_CONSOLE = 2
};
extern int paused;
extern int chatmodeon;
extern bool sendPause;
extern int lastTic;
extern int PlayClock;