diff --git a/Source/doom.cpp b/Source/doom.cpp index c4052eff2..4022ac43e 100644 --- a/Source/doom.cpp +++ b/Source/doom.cpp @@ -3,7 +3,11 @@ int doom_quest_time; int doom_stars_drawn; BYTE *pDoomCel; +#ifdef HELLFIRE +BOOLEAN doomflag; +#else BOOL doomflag; +#endif int DoomQuestState; /* @@ -35,18 +39,67 @@ int doom_get_frame_from_time() return DoomQuestState / 1200; } -void doom_alloc_cel() +void doom_cleanup() { - pDoomCel = DiabloAllocPtr(229376); +#ifdef HELLFIRE + if (pDoomCel) { + MemFreeDbg(pDoomCel); + pDoomCel = NULL; + } +#else + MemFreeDbg(pDoomCel); +#endif } -void doom_cleanup() +void doom_init() { - MemFreeDbg(pDoomCel); +#ifdef HELLFIRE + if (doom_alloc_cel()) { + doom_quest_time = doom_get_frame_from_time() == 31 ? 31 : 0; + if (doom_load_graphics()) { + doomflag = TRUE; + } else { + doom_close(); + } + } +#else + doomflag = TRUE; + doom_alloc_cel(); + doom_quest_time = doom_get_frame_from_time() == 31 ? 31 : 0; + doom_load_graphics(); +#endif +} + +#ifdef HELLFIRE +BOOLEAN doom_alloc_cel() +#else +void doom_alloc_cel() +#endif +{ +#ifdef HELLFIRE + doom_cleanup(); + pDoomCel = DiabloAllocPtr(0x39000); + return pDoomCel ? TRUE : FALSE; +#else + pDoomCel = DiabloAllocPtr(0x38000); +#endif } +#ifdef HELLFIRE +BOOLEAN doom_load_graphics() +#else void doom_load_graphics() +#endif { +#ifdef HELLFIRE + BOOLEAN ret; + + ret = FALSE; + strcpy(tempstr, "Items\\Map\\MapZtown.CEL"); + if (LoadFileWithMem(tempstr, pDoomCel)) + ret = TRUE; + return ret; +#else if (doom_quest_time == 31) { strcpy(tempstr, "Items\\Map\\MapZDoom.CEL"); } else if (doom_quest_time < 10) { @@ -55,22 +108,19 @@ void doom_load_graphics() sprintf(tempstr, "Items\\Map\\MapZ00%i.CEL", doom_quest_time); } LoadFileWithMem(tempstr, pDoomCel); -} - -void doom_init() -{ - doomflag = TRUE; - doom_alloc_cel(); - doom_quest_time = doom_get_frame_from_time() == 31 ? 31 : 0; - doom_load_graphics(); +#endif } void doom_close() { +#ifndef HELLFIRE if (doomflag) { +#endif doomflag = FALSE; doom_cleanup(); +#ifndef HELLFIRE } +#endif } void doom_draw() @@ -78,7 +128,7 @@ void doom_draw() if (!doomflag) { return; } - +#ifndef HELLFIRE if (doom_quest_time != 31) { doom_stars_drawn++; if (doom_stars_drawn >= 5) { @@ -90,6 +140,6 @@ void doom_draw() doom_load_graphics(); } } - +#endif CelDecodeOnly(SCREEN_X, PANEL_Y - 1, pDoomCel, 1, SCREEN_WIDTH); } diff --git a/Source/doom.h b/Source/doom.h index 460a4e7ec..af816bf96 100644 --- a/Source/doom.h +++ b/Source/doom.h @@ -5,7 +5,11 @@ extern int doom_quest_time; extern int doom_stars_drawn; extern BYTE *pDoomCel; -extern int doomflag; +#ifdef HELLFIRE +extern BOOLEAN doomflag; +#else +extern BOOL doomflag; +#endif extern int DoomQuestState; /* @@ -13,10 +17,15 @@ void doom_reset_state(); void doom_play_movie(); */ int doom_get_frame_from_time(); -void doom_alloc_cel(); void doom_cleanup(); -void doom_load_graphics(); void doom_init(); +#ifdef HELLFIRE +BOOLEAN doom_alloc_cel(); +BOOLEAN doom_load_graphics(); +#else +void doom_alloc_cel(); +void doom_load_graphics(); +#endif void doom_close(); void doom_draw();