diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 76a6949f8..843687a92 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -260,6 +260,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi ShowCursor(FALSE); srand(GetTickCount()); InitHash(); +#ifdef HELLFIRE + alloc_plr(); +#endif fault_get_filter(); bNoEvent = diablo_get_not_running(); @@ -1901,3 +1904,38 @@ void diablo_color_cyc_logic() } } } + +#ifdef HELLFIRE +void alloc_plr() +{ + plr = get_plr_mem(NULL); + + if(plr == NULL) { + app_fatal("Unable to initialize memory"); + } + + memset(plr, 0, sizeof(PlayerStruct) * MAX_PLRS); +} + +PlayerStruct *get_plr_mem(PlayerStruct *p) +{ + void *r; + PlayerStruct *pPlayer; + + r = malloc(rand() & 0x7FFF); + pPlayer = (PlayerStruct *)malloc(sizeof(PlayerStruct) * MAX_PLRS); + + if(r != NULL) { + free(r); + } + if(pPlayer == NULL) { + return p; + } + if(p != NULL) { + memcpy(pPlayer, p, sizeof(PlayerStruct) * MAX_PLRS); + free(p); + } + + return pPlayer; +} +#endif diff --git a/Source/diablo.h b/Source/diablo.h index b05a188f8..829b7bafe 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -148,6 +148,10 @@ void game_loop(BOOL bStartup); void game_logic(); void timeout_cursor(BOOL bTimeout); void diablo_color_cyc_logic(); +#ifdef HELLFIRE +void alloc_plr(); +PlayerStruct *get_plr_mem(PlayerStruct *p); +#endif /* data */ diff --git a/Source/player.cpp b/Source/player.cpp index d4e7051ca..7de84291d 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -6,7 +6,11 @@ int plr_wframe_size; BYTE plr_gfx_flag = 0; int plr_aframe_size; int myplr; +#ifdef HELLFIRE +PlayerStruct *plr; +#else PlayerStruct plr[MAX_PLRS]; +#endif int plr_fframe_size; int plr_qframe_size; BOOL deathflag; diff --git a/Source/player.h b/Source/player.h index 964171fa5..5b1b60df5 100644 --- a/Source/player.h +++ b/Source/player.h @@ -7,7 +7,11 @@ extern int plr_wframe_size; extern BYTE plr_gfx_flag; extern int plr_aframe_size; extern int myplr; +#ifdef HELLFIRE +extern PlayerStruct *plr; +#else extern PlayerStruct plr[MAX_PLRS]; +#endif extern int plr_fframe_size; extern int plr_qframe_size; extern BOOL deathflag; diff --git a/defs.h b/defs.h index fc2a2bffe..a3434292d 100644 --- a/defs.h +++ b/defs.h @@ -49,7 +49,11 @@ #define VOLUME_MAX 0 // todo: enums +#ifdef HELLFIRE +#define NUMLEVELS 25 +#else #define NUMLEVELS 17 +#endif // from diablo 2 beta #define MAXEXP 2000000000 diff --git a/structs.h b/structs.h index 28f7e40f7..5f7ffed64 100644 --- a/structs.h +++ b/structs.h @@ -163,6 +163,9 @@ typedef struct ItemStruct { BOOL _iStatFlag; int IDidx; int offs016C; // _oldlight or _iInvalid +#ifdef HELLFIRE + int field_170; +#endif } ItemStruct; //////////////////////////////////////////////////