mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
SW: Fix saves
Dynamically-allocated structs strike again. git-svn-id: https://svn.eduke32.com/eduke32@8325 1a8010ca-5511-0410-912e-c29ae57300e0 # Conflicts: # source/sw/src/saveable.h
This commit is contained in:
parent
0a70c5e55f
commit
d4eb10d10d
3 changed files with 24 additions and 17 deletions
|
@ -4810,23 +4810,20 @@ void G_Polymer_UnInit(void) { }
|
|||
|
||||
#include "saveable.h"
|
||||
|
||||
static saveable_data saveable_build_data[] =
|
||||
{
|
||||
SAVE_DATA(sector),
|
||||
SAVE_DATA(sprite),
|
||||
SAVE_DATA(wall)
|
||||
};
|
||||
saveable_module saveable_build{};
|
||||
|
||||
saveable_module saveable_build =
|
||||
void Saveable_Init_Dynamic()
|
||||
{
|
||||
// code
|
||||
NULL,
|
||||
0,
|
||||
static saveable_data saveable_build_data[] =
|
||||
{
|
||||
{sector, MAXSECTORS*sizeof(sectortype)},
|
||||
{sprite, MAXSPRITES*sizeof(spritetype)},
|
||||
{wall, MAXWALLS*sizeof(walltype)},
|
||||
};
|
||||
|
||||
// data
|
||||
saveable_build_data,
|
||||
NUM_SAVEABLE_ITEMS(saveable_build_data)
|
||||
};
|
||||
saveable_build.data = saveable_build_data;
|
||||
saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data);
|
||||
}
|
||||
|
||||
/*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; }
|
||||
/*extern*/ void GameInterface::set_hud_layout(int requested_size) { /* the relevant setting is gs.BorderNum */}
|
||||
|
|
|
@ -38,6 +38,8 @@ void Saveable_Init(void)
|
|||
{
|
||||
if (nummodules > 0) return;
|
||||
|
||||
Saveable_Init_Dynamic();
|
||||
|
||||
#define MODULE(x) { \
|
||||
extern saveable_module saveable_ ## x; \
|
||||
saveablemodules[nummodules++] = &saveable_ ## x; \
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#ifndef SAVEABLE_H
|
||||
#define SAVEABLE_H
|
||||
|
||||
#include "compat.h"
|
||||
|
||||
typedef void *saveable_code;
|
||||
|
||||
|
@ -42,10 +43,16 @@ typedef struct
|
|||
unsigned int numdata;
|
||||
} saveable_module;
|
||||
|
||||
#define SAVE_CODE(s) (void*)s
|
||||
#define SAVE_DATA(s) { (void*)&s, sizeof(s) }
|
||||
template <typename T>
|
||||
static FORCE_INLINE constexpr enable_if_t<!std::is_pointer<T>::value, size_t> SAVE_SIZEOF(T const & obj) noexcept
|
||||
{
|
||||
return sizeof(obj);
|
||||
}
|
||||
|
||||
#define NUM_SAVEABLE_ITEMS(x) (sizeof(x)/sizeof(x[0]))
|
||||
#define SAVE_CODE(s) (void*)(s)
|
||||
#define SAVE_DATA(s) { (void*)&(s), SAVE_SIZEOF(s) }
|
||||
|
||||
#define NUM_SAVEABLE_ITEMS(x) ARRAY_SIZE(x)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -61,6 +68,7 @@ typedef struct
|
|||
} saveddatasym;
|
||||
|
||||
void Saveable_Init(void);
|
||||
void Saveable_Init_Dynamic(void);
|
||||
|
||||
int Saveable_FindCodeSym(void *ptr, savedcodesym *sym);
|
||||
int Saveable_FindDataSym(void *ptr, saveddatasym *sym);
|
||||
|
|
Loading…
Reference in a new issue