Browse Source

Handle hellfire save game differences

pull/882/head
Anders Jenbo 6 years ago
parent
commit
57f0f5f4c7
  1. 41
      Source/loadsave.cpp
  2. 16
      Source/pfile.cpp
  3. 11
      Source/player.cpp
  4. 14
      structs.h

41
Source/loadsave.cpp

@ -288,7 +288,6 @@ void CopyInt64(const void *src, void *dst)
void LoadPlayer(int i)
{
PlayerStruct *pPlayer = &plr[i];
char tempChar;
CopyInt(tbuff, &pPlayer->_pmode);
CopyBytes(tbuff, MAX_PATH_LENGTH, pPlayer->walkpath);
@ -456,9 +455,7 @@ void LoadPlayer(int i)
CopyInt(tbuff, &pPlayer->_pIGetHit);
CopyChar(tbuff, &pPlayer->_pISplLvlAdd);
CopyChar(tbuff, &pPlayer->_pISplCost);
CopyChar(tbuff, &tempChar);
pPlayer->pDifficulty = tempChar & 3; // Use 2 alignment bits for difficulty
tbuff += 1; // Alignment
tbuff += 2; // Alignment
CopyInt(tbuff, &pPlayer->_pISplDur);
CopyInt(tbuff, &pPlayer->_pIEnAc);
CopyInt(tbuff, &pPlayer->_pIFMinDam);
@ -469,13 +466,26 @@ void LoadPlayer(int i)
CopyChar(tbuff, &pPlayer->pTownWarps);
CopyChar(tbuff, &pPlayer->pDungMsgs);
CopyChar(tbuff, &pPlayer->pLvlLoad);
#ifdef HELLFIRE
CopyChar(tbuff, &pPlayer->pDungMsgs2);
pPlayer->pBattleNet = false;
#else
CopyChar(tbuff, &pPlayer->pBattleNet);
#endif
CopyChar(tbuff, &pPlayer->pManaShield);
#ifndef HELLFIRE
CopyBytes(tbuff, 3, &pPlayer->bReserved);
CopyShorts(tbuff, 8, &pPlayer->wReserved);
#else
CopyChar(tbuff, &pPlayer->pDungMsgs2);
CopyBytes(tbuff, 2, &pPlayer->bReserved);
#endif
CopyShort(tbuff, &pPlayer->wReflection);
CopyShorts(tbuff, 7, &pPlayer->wReserved);
CopyInt(tbuff, &pPlayer->pDiabloKillLevel);
CopyInts(tbuff, 7, &pPlayer->dwReserved);
CopyInt(tbuff, &pPlayer->pDifficulty);
CopyInt(tbuff, &pPlayer->pDamAcFlags);
CopyInts(tbuff, 5, &pPlayer->dwReserved);
// Omit pointer _pNData
// Omit pointer _pWData
@ -1024,7 +1034,6 @@ void OSave(BOOL v)
void SavePlayer(int i)
{
PlayerStruct *pPlayer = &plr[i];
char tempChar;
CopyInt(&pPlayer->_pmode, tbuff);
CopyBytes(&pPlayer->walkpath, MAX_PATH_LENGTH, tbuff);
@ -1190,9 +1199,7 @@ void SavePlayer(int i)
CopyChar(&pPlayer->_pISplLvlAdd, tbuff);
CopyChar(&pPlayer->_pISplCost, tbuff);
tempChar = pPlayer->pDifficulty & 3; // Use 2 alignment bits for difficulty
CopyChar(&tempChar, tbuff);
tbuff += 1; // Alignment
tbuff += 2; // Alignment
CopyInt(&pPlayer->_pISplDur, tbuff);
CopyInt(&pPlayer->_pIEnAc, tbuff);
CopyInt(&pPlayer->_pIFMinDam, tbuff);
@ -1203,13 +1210,21 @@ void SavePlayer(int i)
CopyChar(&pPlayer->pTownWarps, tbuff);
CopyChar(&pPlayer->pDungMsgs, tbuff);
CopyChar(&pPlayer->pLvlLoad, tbuff);
#ifdef HELLFIRE
CopyChar(&pPlayer->pDungMsgs2, tbuff);
#else
CopyChar(&pPlayer->pBattleNet, tbuff);
#endif
CopyChar(&pPlayer->pManaShield, tbuff);
CopyBytes(&pPlayer->bReserved, 3, tbuff);
CopyShorts(&pPlayer->wReserved, 8, tbuff);
CopyChar(&pPlayer->pDungMsgs2, tbuff);
CopyBytes(&pPlayer->bReserved, 2, tbuff);
CopyShort(&pPlayer->wReflection, tbuff);
CopyShorts(&pPlayer->wReserved, 7, tbuff);
CopyInt(&pPlayer->pDiabloKillLevel, tbuff);
CopyInts(&pPlayer->dwReserved, 7, tbuff);
CopyInt(&pPlayer->pDifficulty, tbuff);
CopyInt(&pPlayer->pDamAcFlags, tbuff);
CopyInts(&pPlayer->dwReserved, 5, tbuff);
// Omit pointer _pNData
// Omit pointer _pWData

16
Source/pfile.cpp

@ -80,15 +80,31 @@ void pfile_get_save_path(char *pszBuf, DWORD dwBufSize, DWORD save_num)
char path[MAX_PATH];
#ifdef SPAWN
#ifdef HELLFIRE
const char *fmt = "%sshare_%d.hsv";
#else
const char *fmt = "%sshare_%d.sv";
#endif
if (gbMaxPlayers <= 1)
#ifdef HELLFIRE
fmt = "%sspawn%d.hsv";
#else
fmt = "%sspawn%d.sv";
#endif
#else
#ifdef HELLFIRE
const char *fmt = "%shrinfo_%d.drv";
#else
const char *fmt = "%smulti_%d.sv";
#endif
if (gbMaxPlayers <= 1)
#ifdef HELLFIRE
fmt = "%ssingle_%d.hsv";
#else
fmt = "%ssingle_%d.sv";
#endif
#endif
GetPrefPath(path, MAX_PATH);

11
Source/player.cpp

@ -695,16 +695,9 @@ void SetPlrAnims(int pnum)
void ClearPlrRVars(PlayerStruct *p)
{
// TODO: Missing debug assert p != NULL
#ifdef HELLFIRE
p->pManaShield = 0;
#endif
p->bReserved[0] = 0;
p->bReserved[1] = 0;
p->bReserved[2] = 0;
#ifndef HELLFIRE
p->wReflection = 0;
#endif
p->wReserved[0] = 0;
p->wReserved[1] = 0;
p->wReserved[2] = 0;
@ -713,10 +706,6 @@ void ClearPlrRVars(PlayerStruct *p)
p->wReserved[5] = 0;
p->wReserved[6] = 0;
#ifndef HELLFIRE
p->pDifficulty = 0;
p->pDamAcFlags = 0;
#endif
p->dwReserved[0] = 0;
p->dwReserved[1] = 0;
p->dwReserved[2] = 0;

14
structs.h

@ -343,13 +343,10 @@ typedef struct PlayerStruct {
unsigned char pTownWarps;
unsigned char pDungMsgs;
unsigned char pLvlLoad;
#ifdef HELLFIRE
unsigned char pDungMsgs2;
#else
unsigned char pBattleNet;
#endif
BOOLEAN pManaShield;
char bReserved[3];
unsigned char pDungMsgs2;
char bReserved[2];
short wReflection;
short wReserved[7];
DWORD pDiabloKillLevel;
@ -1485,13 +1482,10 @@ typedef struct PkPlayerStruct {
char pTownWarps;
char pDungMsgs;
char pLvlLoad;
#ifdef HELLFIRE
unsigned char pDungMsgs2;
#else
char pBattleNet;
#endif
BOOLEAN pManaShield;
char bReserved[3];
unsigned char pDungMsgs2;
char bReserved[2];
short wReflection;
short wReserved[7];
DWORD pDiabloKillLevel;

Loading…
Cancel
Save