-
Notifications
You must be signed in to change notification settings - Fork 748
/
diablo.h
132 lines (114 loc) · 3.22 KB
/
diablo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
* @file diablo.h
*
* Interface of the main game initialization functions.
*/
#pragma once
#include <cstdint>
#ifdef _DEBUG
#include "monstdat.h"
#endif
#include "init.h"
#include "levels/gendung.h"
#include "utils/attributes.h"
#include "utils/endian.hpp"
namespace devilution {
constexpr uint32_t GameIdDiabloFull = LoadBE32("DRTL");
constexpr uint32_t GameIdDiabloSpawn = LoadBE32("DSHR");
constexpr uint32_t GameIdHellfireFull = LoadBE32("HRTL");
constexpr uint32_t GameIdHellfireSpawn = LoadBE32("HSHR");
#define GAME_ID (gbIsHellfire ? (gbIsSpawn ? GameIdHellfireSpawn : GameIdHellfireFull) : (gbIsSpawn ? GameIdDiabloSpawn : GameIdDiabloFull))
#define NUMLEVELS 25
enum clicktype : int8_t {
CLICK_NONE,
CLICK_LEFT,
CLICK_RIGHT,
};
/**
* @brief Specifices what game logic step is currently executed
*/
enum class GameLogicStep : uint8_t {
None,
ProcessPlayers,
ProcessMonsters,
ProcessObjects,
ProcessMissiles,
ProcessItems,
ProcessTowners,
ProcessItemsTown,
ProcessMissilesTown,
};
enum class MouseActionType : uint8_t {
None,
Walk,
Spell,
SpellMonsterTarget,
SpellPlayerTarget,
Attack,
AttackMonsterTarget,
AttackPlayerTarget,
OperateObject,
};
extern uint32_t DungeonSeeds[NUMLEVELS];
extern std::optional<uint32_t> LevelSeeds[NUMLEVELS];
extern Point MousePosition;
extern DVL_API_FOR_TEST bool gbRunGame;
extern bool gbRunGameResult;
extern bool ReturnToMainMenu;
extern bool gbProcessPlayers;
extern DVL_API_FOR_TEST bool gbLoadGame;
extern bool cineflag;
/* These are defined in fonts.h */
extern void FontsCleanup();
extern DVL_API_FOR_TEST int PauseMode;
extern bool gbBard;
extern bool gbBarbarian;
/**
* @brief Don't load UI or show Messageboxes or other user-interaction. Needed for UnitTests.
*/
extern DVL_API_FOR_TEST bool HeadlessMode;
extern clicktype sgbMouseDown;
extern uint16_t gnTickDelay;
extern char gszProductName[64];
extern MouseActionType LastMouseButtonAction;
void InitKeymapActions();
void SetCursorPos(Point position);
void FreeGameMem();
bool StartGame(bool bNewGame, bool bSinglePlayer);
[[noreturn]] void diablo_quit(int exitStatus);
int DiabloMain(int argc, char **argv);
bool TryIconCurs();
void diablo_pause_game();
bool diablo_is_focused();
void diablo_focus_pause();
void diablo_focus_unpause();
bool PressEscKey();
void DisableInputEventHandler(const SDL_Event &event, uint16_t modState);
void LoadGameLevel(bool firstflag, lvl_entry lvldir);
bool IsDiabloAlive(bool playSFX);
void PrintScreen(SDL_Keycode vkey);
/**
* @param bStartup Process additional ticks before returning
*/
bool game_loop(bool bStartup);
void diablo_color_cyc_logic();
/* rdata */
#ifdef _DEBUG
extern bool DebugDisableNetworkTimeout;
#endif
struct QuickMessage {
/** Config variable names for quick message */
const char *const key;
/** Default quick message */
const char *const message;
};
constexpr size_t QUICK_MESSAGE_OPTIONS = 10;
extern QuickMessage QuickMessages[QUICK_MESSAGE_OPTIONS];
/**
* @brief Specifices what game logic step is currently executed
*/
extern GameLogicStep gGameLogicStep;
#ifdef __UWP__
void setOnInitialized(void (*)());
#endif
} // namespace devilution