Devilution
Diablo devolved - magic behind the 1996 computer game
|
Go to the documentation of this file.
2 #include "../3rdParty/Storm/Source/storm.h"
3 #include "../DiabloUI/diabloui.h"
9 #define PASSWORD_SINGLE "adslhfb1"
10 #define PASSWORD_MULTI "lshbkfg1"
12 #define PASSWORD_SINGLE "xrgyrkj1"
13 #define PASSWORD_MULTI "szqnlsk1"
56 memcpy(packed, pPack,
sizeof(*pPack));
57 codec_encode(packed,
sizeof(*pPack), packed_len, password);
64 char FileName[MAX_PATH];
67 if (
OpenMPQ(FileName, save_num))
78 const char *fmt =
"%sshare_%d.sv";
83 const char *fmt =
"%smulti_%d.sv";
86 fmt =
"%ssingle_%d.sv";
89 GetPrefPath(path, MAX_PATH);
90 snprintf(pszBuf, MAX_PATH, fmt, path, save_num);
95 char FileName[MAX_PATH];
111 if (dst != NULL && len) {
112 if (UiCreatePlayerDescription(&uihero,
GAME_ID, desc) == 0)
114 SStrCopy(dst, desc, len);
128 if (!strcasecmp(name_1,
plr[i]._pName)) {
143 if (!strcasecmp(
gszHero, name_1))
158 memset(heroinfo, 0,
sizeof(*heroinfo));
160 heroinfo->
name[
sizeof(heroinfo->
name) - 1] =
'\0';
193 char FileName[MAX_PATH];
194 char NewFileName[MAX_PATH];
209 ui_add_hero_info(&uihero);
224 if (!SFileOpenFileEx(archive,
"hero", 0, &file)) {
234 dwlen = SFileGetFileSize(file, NULL);
238 if (SFileReadFile(file, buf, dwlen, &read, NULL)) {
240 if (read ==
sizeof(*pPack)) {
241 memcpy(pPack, buf,
sizeof(*pPack));
248 SFileCloseFile(file);
258 char SrcStr[MAX_PATH];
262 if (SFileOpenArchive(SrcStr, 0x7000,
FS_PC, &archive))
269 SFileCloseArchive(hsArchive);
279 if (!SFileOpenFileEx(hsArchive,
"game", 0, &file))
282 SFileCloseFile(file);
304 else if (player_class_nr ==
UI_ROGUE)
356 }
else if (lvl == 34)
363 sprintf(dst, fmt, lvl);
370 char FileName[MAX_PATH];
376 RemoveFile(FileName);
417 app_fatal(
"Unable to read to save file archive");
441 app_fatal(
"Unable to write to save file archive");
453 else if (dwIndex < 34) {
459 sprintf(szTemp, fmt, dwIndex);
465 DWORD dwChar, dwIndex;
467 char szTemp[MAX_PATH];
468 char szPerm[MAX_PATH];
474 app_fatal(
"Unable to write to save file archive");
497 else if (dwIndex < 34) {
503 sprintf(szPerm, fmt, dwIndex);
510 char FileName[MAX_PATH];
522 app_fatal(
"Unable to write so save file archive");
534 DWORD save_num, nread;
535 char FileName[MAX_PATH];
536 HANDLE archive, save;
543 app_fatal(
"Unable to open save file archive");
545 if (!SFileOpenFileEx(archive, FileName, 0, &save))
548 *pdwLen = SFileGetFileSize(save, NULL);
553 if (!SFileReadFile(save, buf, *pdwLen, &nread, NULL))
555 SFileCloseFile(save);
576 static int save_prev_tc;
579 int tick = SDL_GetTicks();
580 if (force_save || tick - save_prev_tc > 60000) {
void pfile_write_save_file(const char *pszName, BYTE *pbData, DWORD dwLen, DWORD qwLen)
BOOL pfile_create_player_description(char *dst, DWORD len)
BOOL mpqapi_flush_and_close(const char *pszArchive, BOOL bFree, DWORD dwChar)
void pfile_read_player_from_save()
void GetPermLevelNames(char *szPerm)
void pfile_update(BOOL force_save)
void pfile_rename_temp_to_perm()
BOOL pfile_ui_save_create(_uiheroinfo *heroinfo)
void pfile_strcpy(char *dst, const char *src)
BYTE gbMaxPlayers
Specifies the maximum number of players in a game, where 1 represents a single player game and 4 repr...
void pfile_flush(BOOL is_single_player, DWORD save_num)
BOOL pfile_rename_hero(const char *name_1, const char *name_2)
void mpqapi_remove_hash_entries(BOOL(*fnGetName)(DWORD, char *))
void app_fatal(const char *pszFmt,...)
#define DEVILUTION_END_NAMESPACE
BOOL OpenMPQ(const char *pszArchive, DWORD dwChar)
BOOL mpqapi_write_file(const char *pszName, const BYTE *pbData, DWORD dwLen)
BOOL pfile_get_file_name(DWORD lvl, char *dst)
void pfile_encode_hero(const PkPlayerStruct *pPack)
void UnPackPlayer(PkPlayerStruct *pPack, int pnum, BOOL killok)
BOOL pfile_archive_contains_game(HANDLE hsArchive, DWORD save_num)
BOOL pfile_read_hero(HANDLE archive, PkPlayerStruct *pPack)
BOOL GetTempSaveNames(DWORD dwIndex, char *szTemp)
BYTE * pfile_read(const char *pszName, DWORD *pdwLen)
void pfile_get_game_name(char *dst)
BOOL mpqapi_has_file(const char *pszName)
void mpqapi_remove_hash_entry(const char *pszName)
DWORD pfile_get_save_num_from_name(const char *name)
DWORD codec_get_encoded_len(DWORD dwSrcBytes)
void GetTempLevelNames(char *szTemp)
BYTE game_2_ui_class(const PlayerStruct *p)
BOOL pfile_open_archive(BOOL update, DWORD save_num)
void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile)
void codec_encode(BYTE *pbSrcDst, DWORD size, int size_64, char *pszPassword)
BOOL GetPermSaveNames(DWORD dwIndex, char *szPerm)
BYTE * DiabloAllocPtr(DWORD dwBytes)
Multithreaded safe malloc.
void mpqapi_rename(char *pszOld, char *pszNew)
void pfile_remove_temp_files()
BOOL pfile_ui_set_hero_infos(BOOL(*ui_add_hero_info)(_uiheroinfo *))
void pfile_get_save_path(char *pszBuf, DWORD dwBufSize, DWORD save_num)
void CreatePlayer(int pnum, char c)
void mem_free_dbg(void *p)
Multithreaded safe memfree.
char pfile_get_player_class(unsigned int player_class_nr)
HANDLE pfile_open_save_archive(BOOL *showFixedMsg, DWORD save_num)
BOOL pfile_delete_save(_uiheroinfo *hero_info)
int codec_decode(BYTE *pbSrcDst, DWORD size, char *pszPassword)
void pfile_SFileCloseArchive(HANDLE hsArchive)
BOOL pfile_ui_set_class_stats(unsigned int player_class_nr, _uidefaultstats *class_stats)
void PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield)
char _pName[PLR_NAME_LEN]
static char hero_names[MAX_CHARACTERS][PLR_NAME_LEN]
List of character names for the character selection screen.
PlayerStruct plr[MAX_PLRS]
DEVILUTION_BEGIN_NAMESPACE char gszHero[16]