Devilution
Diablo devolved - magic behind the 1996 computer game
|
Go to the documentation of this file.
7 #include "../3rdParty/Storm/Source/storm.h"
8 #include "../DiabloUI/diabloui.h"
58 int debug_mode_key_inverted_v;
59 int debug_mode_dollar_sign;
75 "I need help! Come Here!",
77 "Here's something for you.",
113 fExitProgram = FALSE;
116 if (!
NetInit(bSinglePlayer, &fExitProgram)) {
193 while (PeekMessage(&msg)) {
194 if (msg.message == WM_QUIT) {
199 TranslateMessage(&msg);
200 DispatchMessage(&msg);
277 SFileEnableDirectAccess(TRUE);
307 if (getIniBool(
"Diablo",
"Intro",
true)) {
309 setIniValue(
"Diablo",
"Intro",
"0");
329 if (SDL_WasInit(SDL_INIT_EVERYTHING & ~SDL_INIT_HAPTIC))
352 printf(
"Options:\n");
353 printf(
" %-20s %-30s\n",
"-h, --help",
"Print this message and exit");
354 printf(
" %-20s %-30s\n",
"--version",
"Print the version and exit");
355 printf(
" %-20s %-30s\n",
"--data-dir",
"Specify the folder of diabdat.mpq");
356 printf(
" %-20s %-30s\n",
"-n",
"Skip startup videos");
357 printf(
" %-20s %-30s\n",
"-f",
"Display frames per second");
358 printf(
" %-20s %-30s\n",
"-x",
"Run in windowed mode");
360 printf(
"\nDebug options:\n");
361 printf(
" %-20s %-30s\n",
"-d",
"Increaased item drops");
362 printf(
" %-20s %-30s\n",
"-w",
"Enable cheats");
363 printf(
" %-20s %-30s\n",
"-$",
"Enable god mode");
364 printf(
" %-20s %-30s\n",
"-^",
"Enable god mode and debug tools");
366 printf(
" %-20s %-30s\n",
"-v",
"Highlight visibility");
367 printf(
" %-20s %-30s\n",
"-i",
"Ignore network timeout");
369 printf(
" %-20s %-30s\n",
"-l <##> <##>",
"Start in level as type");
370 printf(
" %-20s %-30s\n",
"-m <##>",
"Add debug monster, up to 10 allowed");
371 printf(
" %-20s %-30s\n",
"-q <#>",
"Force a certain quest");
372 printf(
" %-20s %-30s\n",
"-r <##########>",
"Set map seed");
373 printf(
" %-20s %-30s\n",
"-t <##>",
"Set current quest level");
375 printf(
"\nReport bugs at https://github.com/diasurgical/devilutionX/\n");
381 for (
int i = 1; i < argc; i++) {
382 if (strcasecmp(
"-h", argv[i]) == 0 || strcasecmp(
"--help", argv[i]) == 0) {
384 }
else if (strcasecmp(
"--version", argv[i]) == 0) {
385 printf(
"%s v%s\n", PROJECT_NAME, PROJECT_VERSION);
387 }
else if (strcasecmp(
"--data-dir", argv[i]) == 0) {
388 basePath = argv[++i];
390 if (basePath.back() !=
'\\')
393 if (basePath.back() !=
'/')
396 }
else if (strcasecmp(
"-n", argv[i]) == 0) {
398 }
else if (strcasecmp(
"-f", argv[i]) == 0) {
400 }
else if (strcasecmp(
"-x", argv[i]) == 0) {
403 }
else if (strcasecmp(
"-^", argv[i]) == 0) {
404 debug_mode_key_inverted_v = 1;
405 }
else if (strcasecmp(
"-$", argv[i]) == 0) {
406 debug_mode_dollar_sign = 1;
411 }
else if (strcasecmp(
"-d", argv[i]) == 0) {
412 debug_mode_key_d = 1;
413 }
else if (strcasecmp(
"-i", argv[i]) == 0) {
414 debug_mode_key_i = 1;
419 }
else if (strcasecmp(
"-l", argv[i]) == 0) {
425 }
else if (strcasecmp(
"-m", argv[i]) == 0) {
428 }
else if (strcasecmp(
"-q", argv[i]) == 0) {
429 questdebug = SDL_atoi(argv[++i]);
430 }
else if (strcasecmp(
"-r", argv[i]) == 0) {
432 }
else if (strcasecmp(
"-s", argv[i]) == 0) {
433 debug_mode_key_s = 1;
434 }
else if (strcasecmp(
"-t", argv[i]) == 0) {
438 }
else if (strcasecmp(
"-v", argv[i]) == 0) {
440 }
else if (strcasecmp(
"-w", argv[i]) == 0) {
441 debug_mode_key_w = 1;
444 printf(
"unrecognized option '%s'\n", argv[i]);
511 MouseX = (short)(lParam & 0xffff);
512 MouseY = (short)((lParam >> 16) & 0xffff);
546 case WM_CAPTURECHANGED:
547 if (hWnd == (HWND)lParam)
556 LRESULT
GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
573 if (wParam == SC_CLOSE) {
611 case WM_CAPTURECHANGED:
612 if (hWnd != (HWND)lParam) {
714 }
else if (
pcursobj != -1 && (!bShift || bNear &&
object[
pcursobj]._oBreak == 1)) {
866 if (vkey == VK_SNAPSHOT)
883 if (vkey == VK_F10) {
886 if (vkey == VK_F11) {
889 if (vkey == VK_F12) {
892 if (vkey == VK_RETURN) {
895 if (vkey != VK_ESCAPE) {
899 if (vkey == VK_ESCAPE) {
910 if (vkey == VK_PAUSE) {
918 if (vkey == VK_RETURN) {
919 if (GetAsyncKeyState(VK_MENU) & 0x8000) {
928 }
else if (vkey == VK_F1) {
954 else if (vkey == VK_F2) {
958 else if (vkey == VK_F3) {
962 "IDX = %i : Seed = %i : CF = %i",
973 else if (vkey == VK_F4) {
977 else if (vkey == VK_F5) {
984 }
else if (vkey == VK_F6) {
991 }
else if (vkey == VK_F7) {
998 }
else if (vkey == VK_F8) {
1005 }
else if (vkey == VK_F9) {
1007 }
else if (vkey == VK_F10) {
1009 }
else if (vkey == VK_F11) {
1011 }
else if (vkey == VK_F12) {
1013 }
else if (vkey == VK_UP) {
1023 }
else if (vkey == VK_DOWN) {
1033 }
else if (vkey == VK_PRIOR) {
1037 }
else if (vkey == VK_NEXT) {
1041 }
else if (vkey == VK_LEFT) {
1045 }
else if (vkey == VK_RIGHT) {
1049 }
else if (vkey == VK_TAB) {
1051 }
else if (vkey == VK_SPACE) {
1097 if ((
char)vkey ==
'p' || (
char)vkey ==
'P') {
1251 if (debug_mode_key_inverted_v || debug_mode_key_w) {
1263 if (debug_mode_key_inverted_v) {
1264 if (arrowdebug > 2) {
1267 if (arrowdebug == 0) {
1271 if (arrowdebug == 1) {
1274 if (arrowdebug == 2) {
1281 if (
currlevel == 0 && debug_mode_key_w) {
1282 SetAllSpellsCheat();
1286 if (
currlevel == 0 && debug_mode_key_w) {
1291 if (
currlevel == 0 && debug_mode_key_w) {
1296 if (debug_mode_key_inverted_v) {
1302 PrintDebugPlayer(TRUE);
1305 PrintDebugPlayer(FALSE);
1309 if (debug_mode_key_inverted_v) {
1330 if (debug_mode_key_inverted_v) {
1338 if (
currlevel == 0 && debug_mode_key_w) {
1343 if (
currlevel == 0 && debug_mode_key_w) {
1533 if (
plr[i].plractive)
1569 for (i = 0; i <
MAXDUNX; i++) {
1637 if (
plr[i]._pHitPoints > 0) {
1678 i = bStartup ? 60 : 3;
1718 if (debug_mode_key_inverted_v && GetAsyncKeyState(VK_SHIFT) & 0x8000) {
void ReleaseKey(int vkey)
void control_release_talk_btn()
QuestStruct quests[MAXQUESTS]
void CreateL5Dungeon(DWORD rseed, int entry)
void InitPlrGFXMem(int pnum)
void DoRepair(int pnum, int cii)
int glMid2Seed[NUMLEVELS]
void ShowProgress(unsigned int uMsg)
void play_movie(char *pszMovie, BOOL user_can_close)
BOOL pfile_create_player_description(char *dst, DWORD len)
BOOL control_talk_last_key(int vkey)
void NetSendCmdLocParam1(BOOL bHiPri, BYTE bCmd, BYTE x, BYTE y, WORD wParam1)
BOOL UseInvItem(int pnum, int cii)
void DoPanBtn()
Checks if the mouse cursor is within any of the panel buttons and flag it if so.
LRESULT GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
void DoRecharge(int pnum, int cii)
void control_check_btn_press()
WNDPROC SetWindowProc(WNDPROC NewProc)
void SetRndSeed(int s)
Set the RNG seed.
void finish_simulated_mouse_clicks(int current_mouse_x, int current_mouse_y)
void nthread_ignore_mutex(BOOL bStart)
void FreePlayerGFX(int pnum)
BOOL palette_get_color_cycling()
BYTE dungeon[DMAXX][DMAXY]
void effects_cleanup_sfx()
char pcursinvitem
inv_item value
void PaletteFadeIn(int fr)
void HoldThemeRooms()
HoldThemeRooms marks theme rooms as populated.
void music_start(int nTrack)
ItemStruct item[MAXITEMS+1]
static void print_help_and_exit()
void CheckInvScrn()
Check for interactions with belt.
void NetSendCmdLocParam2(BOOL bHiPri, BYTE bCmd, BYTE x, BYTE y, WORD wParam1, WORD wParam2)
void CreateL3Dungeon(DWORD rseed, int entry)
BOOL CanTalkToMonst(int m)
void CheckBtnUp()
Check if the mouse is within a control panel button that's flagged.
void game_loop(BOOL bStartup)
void NetSendCmdString(int pmask, const char *pszStr)
int gnLevelTypeTbl[NUMLEVELS]
BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram)
LRESULT DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL automapflag
Specifies whether the automap is enabled.
void InitDungMsgs(int pnum)
void pfile_update(BOOL force_save)
void plrctrls_after_game_logic()
void CreateL4Dungeon(DWORD rseed, int entry)
void CheckIdentify(int pnum, int cii)
void control_drop_gold(char vkey)
DEVILUTION_BEGIN_NAMESPACE SpellData spelldata[]
Data related to each spell ID.
BOOL fullscreen
Specifies whether to give the game exclusive access to the screen, as needed for efficient rendering ...
BYTE gbMaxPlayers
Specifies the maximum number of players in a game, where 1 represents a single player game and 4 repr...
void LoadRndLvlPal(int l)
BOOLEAN _pLvlVisited[NUMLEVELS]
void control_type_message()
void CreateThemeRooms()
CreateThemeRooms adds thematic elements to rooms.
char gszVersionNumber[MAX_PATH]
defined in dx.cpp
void NetSendCmdParam1(BOOL bHiPri, BYTE bCmd, WORD wParam1)
BOOL control_presskeys(int vkey)
BOOL LeftMouseDown(int wParam)
void app_fatal(const char *pszFmt,...)
BOOL control_check_talk_btn()
#define DEVILUTION_END_NAMESPACE
BOOL nthread_has_500ms_passed(BOOL unused)
BOOL FriendlyMode
Specifies whether players are in non-PvP mode.
void timeout_cursor(BOOL bTimeout)
void AddPanelString(char *str, BOOL just)
void palette_update_caves()
void start_game(unsigned int uMsg)
BYTE * LoadFileInMem(char *pszName, DWORD *pdwFileLen)
Load a file in to a buffer.
static void GetMousePos(LPARAM lParam)
int glMid3Seed[NUMLEVELS]
BOOL PressSysKey(int wParam)
char gszProductName[MAX_PATH]
void diablo_color_cyc_logic()
DEVILUTION_BEGIN_NAMESPACE void ReadOnlyTest()
int GetRndSeed()
Get the current RNG seed.
int GetSpellLevel(int id, int sn)
void DoSpeedBook()
Draws the "Speed Book": the rows of known spells for quick-setting a spell that show up when you clic...
void NetSendCmdParam3(BOOL bHiPri, BYTE bCmd, WORD wParam1, WORD wParam2, WORD wParam3)
void LoadGameLevel(BOOL firstflag, int lvldir)
void ToggleSpell(int slot)
void NetSendCmd(BOOL bHiPri, BYTE bCmd)
void SyncInitPlrPos(int pnum)
void run_game_loop(unsigned int uMsg)
DEVILUTION_BEGIN_NAMESPACE BOOL invflag
DWORD glSeedTbl[NUMLEVELS]
void CreateTown(int entry)
Initialize town level.
void plrctrls_after_check_curs_move()
BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer)
void PaletteFadeOut(int fr)
void CreateL2Dungeon(DWORD rseed, int entry)
void diablo_quit(int exitStatus)
void control_update_life_mana()
void FillSolidBlockTbls()
void diablo_hotkey_msg(DWORD dwMsg)
void track_repeat_walk(BOOL rep)
void SetSpeedSpell(int slot)
DEVILUTION_BEGIN_NAMESPACE SDL_Window * ghMainWnd
int glMid1Seed[NUMLEVELS]
BOOL was_archives_init
To know if these things have been done when we get to the diablo_deinit() function.
BOOL LeftMouseCmd(BOOL bShift)
char * spszMsgTbl[4]
Default quick messages.
void diablo_init_screen()
int DiabloMain(int argc, char **argv)
char * spszMsgHotKeyTbl[4]
INI files variable names for quick message keys.
char dPlayer[MAXDUNX][MAXDUNY]
char dFlags[MAXDUNX][MAXDUNY]
LRESULT MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
void NetSendCmdLoc(BOOL bHiPri, BYTE bCmd, BYTE x, BYTE y)
static bool ProcessInput()
void CreateLevel(int lvldir)
void multi_process_network_packets()
void diablo_parse_flags(int argc, char **argv)
void InitPlayerGFX(int pnum)
PlayerStruct plr[MAX_PLRS]
void lighting_color_cycling()
void control_reset_talk()
void init_create_window()
void InitPlayer(int pnum, BOOL FirstTime)
void NetSendCmdPItem(BOOL bHiPri, BYTE bCmd, BYTE x, BYTE y)