raze-gles/source/exhumed/src/exhumed.h
Christoph Oelckers 435e13dfa4 cleanup of the timer interface.
* rewrote all uses of timerSetCallback. Most were unnecessary or long obsolete, the sound updates need to run per frame, not per tic and the UI tickers need to be handled in the main loop anyway.
* Use a more precise timer to animate the menu transition.
* uncouple other menu animations from the game timer.
2020-08-25 19:42:11 +02:00

311 lines
6.7 KiB
C++

//-------------------------------------------------------------------------
/*
Copyright (C) 2010-2019 EDuke32 developers and contributors
Copyright (C) 2019 sirlemonhead, Nuke.YKT
This file is part of PCExhumed.
PCExhumed is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#ifndef __exhumed_h__
#define __exhumed_h__
#include "compat.h"
#include "baselayer.h"
#include "v_text.h"
#include "printf.h"
#include "gamecvars.h"
#include "m_argv.h"
#include "gamecontrol.h"
#include "c_buttons.h"
#include <algorithm>
#include "tarray.h"
#include "zstring.h"
#include "filesystem.h"
#include "screenjob.h"
#include "gamestruct.h"
BEGIN_PS_NS
// Order is that of EDuke32 by necessity because it exposes the key binds to scripting by index instead of by name.
enum GameFunction_t
{
gamefunc_Move_Forward,
gamefunc_Move_Backward,
gamefunc_Turn_Left,
gamefunc_Turn_Right,
gamefunc_Strafe,
gamefunc_Fire,
gamefunc_Open,
gamefunc_Run,
gamefunc_Alt_Fire, // Duke3D, Blood
gamefunc_Jump,
gamefunc_Crouch,
gamefunc_Look_Up,
gamefunc_Look_Down,
gamefunc_Look_Left,
gamefunc_Look_Right,
gamefunc_Strafe_Left,
gamefunc_Strafe_Right,
gamefunc_Aim_Up,
gamefunc_Aim_Down,
gamefunc_SendMessage,
gamefunc_Shrink_Screen,
gamefunc_Enlarge_Screen,
gamefunc_Show_Opponents_Weapon,
gamefunc_See_Coop_View,
gamefunc_Mouse_Aiming,
gamefunc_Dpad_Select,
gamefunc_Dpad_Aiming,
gamefunc_Last_Weapon,
gamefunc_Alt_Weapon,
gamefunc_Third_Person_View,
gamefunc_Toggle_Crouch, // This is the last one used by EDuke32.
NUM_ACTIONS,
};
#define kTimerTicks 120
#ifdef __WATCOMC__
void handleevents();
#endif
enum basepal_t {
BASEPAL = 0,
ANIMPAL,
BASEPALCOUNT
};
void ExitGame();
void ShutDown(void);
void DebugOut(const char *fmt, ...);
int ExhumedMain(int argc, char *argv[]);
void ResetEngine();
void SetHiRes();
void BlackOut();
void DoGameOverScene(bool finallevel);
void DoAfterCinemaScene(int nLevel, TArray<JobDesc> &jobs);
void DoBeforeCinemaScene(int nLevel, TArray<JobDesc>& jobs);
int Query(short n, short l, ...);
extern unsigned char curpal[];
void TintPalette(int a, int b, int c);
//void MySetPalette(unsigned char *palette);
//void GetCurPal(unsigned char *palette);
void EraseScreen(int eax);
void mychangespritesect(int nSprite, int nSector);
void mydeletesprite(int nSprite);
void GrabPalette();
void mysetbrightness(char nBrightness);
void StartFadeIn();
void InitSpiritHead();
// TODO - relocate
void StatusMessage(int messageTime, const char *fmt, ...);
int DoSpiritHead();
void HandleAsync();
void CheckKeys();
void CheckKeys2();
void GameTicker();
void InitLevel(int);
void InitNewGame();
void startmainmenu();
int showmap(short nLevel, short nLevelNew, short nLevelBest);
void menu_DoPlasma();
void menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest, TArray<JobDesc>& jobs);
void DoEnergyTile();
void InitEnergyTile();
extern int EndLevel;
extern int32_t g_commandSetup;
extern int32_t g_noSetup;
extern char sHollyStr[];
extern int selectedlevelnew;
extern int GameAction;
extern int localclock;
extern int moveframes;
extern int nNetPlayerCount;
extern int htimer;
extern int nNetTime;
extern short nTotalPlayers;
extern short nFontFirstChar;
extern short nBackgroundPic;
extern short nShadowPic;
extern short nCreaturesTotal, nCreaturesKilled;
extern int leveltime;
extern int lLocalButtons;
extern short nEnergyTowers;
extern short nEnergyChan;
extern short nSpiritSprite;
extern short bInDemo;
extern short nFreeze;
extern short nCurBodyNum;
extern short nBodyTotal;
extern short bSnakeCam;
extern uint8_t nCinemaSeen;
extern short nButtonColor;
extern short nHeadStage;
extern short lastfps;
extern int flash;
extern short nLocalSpr;
extern short nSnakeCam;
extern short bCoordinates;
extern int totalmoves;
extern int lCountDown;
extern short nAlarmTicks;
extern short nRedTicks;
extern short nClockVal;
extern short bSlipMode;
extern int bVanilla;
extern short bInMove;
#define POWERSLAVE (g_gameType & GAMEFLAG_POWERSLAVE)
#define EXHUMED (g_gameType & GAMEFLAG_EXHUMED)
#define ISDEMOVER (g_gameType & GAMEFLAG_SHAREWARE)
extern double g_frameDelay;
enum {
kPalNormal = 0,
kPalNoDim,
kPalTorch,
kPalNoTorch,
kPalBrite,
kPalRedBrite,
kPalGreenBrite,
kPalNormal2,
kPalNoDim2,
kPalTorch2,
kPalNoTorch2,
kPalBrite2
};
class TextOverlay
{
double nCrawlY;
short nLeft[50];
int nHeight;
int lastclock;
TArray<FString> screentext;
public:
void Start(int starttime);
void ComputeCinemaText();
void ReadyCinemaText(uint16_t nVal);
void DisplayText();
bool AdvanceCinemaText(int totalclock);
};
extern char g_modDir[BMAX_PATH];
void G_LoadGroupsInDir(const char* dirname);
void G_DoAutoload(const char* dirname);
void DrawRel(int tile, double x, double y, int shade = 0);
// savegame.
int savegame(int nSlot);
int loadgame(int nSlot);
const uint32_t kSpiritX = 106;
const uint32_t kSpiritY = 97;
const uint32_t WorktileSize = kSpiritX * 2 * kSpiritY * 2;
struct SavegameHelper
{
FString Name;
TArray<std::pair<void*, size_t>> Elements;
SavegameHelper(const char* name, ...);
void Load();
void Save();
};
#define SV(v) &v, sizeof(v)
#define SA(a) &a, sizeof(a)
struct GameInterface : ::GameInterface
{
const char* Name() override { return "Exhumed"; }
void app_init() override;
void RunGameFrame() override;
bool GenerateSavePic() override;
void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override;
void MenuOpened() override;
void MenuSound(EMenuSounds snd) override;
void MenuClosed() override;
void StartGame(FNewGameStartup& gs) override;
FSavegameInfo GetSaveSig() override;
void DrawMenuCaption(const DVector2& origin, const char* text) override;
bool LoadGame(FSaveGameNode* sv) override;
bool SaveGame(FSaveGameNode* sv) override;
bool CanSave() override;
ReservedSpace GetReservedScreenSpace(int viewsize) override { return { 0, 24 }; }
void clearlocalinputstate() override;
FString statFPS() override;
::GameStats getStats() override;
};
END_PS_NS
#endif