mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +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"
|
#include "saveable.h"
|
||||||
|
|
||||||
|
saveable_module saveable_build{};
|
||||||
|
|
||||||
|
void Saveable_Init_Dynamic()
|
||||||
|
{
|
||||||
static saveable_data saveable_build_data[] =
|
static saveable_data saveable_build_data[] =
|
||||||
{
|
{
|
||||||
SAVE_DATA(sector),
|
{sector, MAXSECTORS*sizeof(sectortype)},
|
||||||
SAVE_DATA(sprite),
|
{sprite, MAXSPRITES*sizeof(spritetype)},
|
||||||
SAVE_DATA(wall)
|
{wall, MAXWALLS*sizeof(walltype)},
|
||||||
};
|
};
|
||||||
|
|
||||||
saveable_module saveable_build =
|
saveable_build.data = saveable_build_data;
|
||||||
{
|
saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data);
|
||||||
// code
|
}
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
|
|
||||||
// data
|
|
||||||
saveable_build_data,
|
|
||||||
NUM_SAVEABLE_ITEMS(saveable_build_data)
|
|
||||||
};
|
|
||||||
|
|
||||||
/*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; }
|
/*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 */}
|
/*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;
|
if (nummodules > 0) return;
|
||||||
|
|
||||||
|
Saveable_Init_Dynamic();
|
||||||
|
|
||||||
#define MODULE(x) { \
|
#define MODULE(x) { \
|
||||||
extern saveable_module saveable_ ## x; \
|
extern saveable_module saveable_ ## x; \
|
||||||
saveablemodules[nummodules++] = &saveable_ ## x; \
|
saveablemodules[nummodules++] = &saveable_ ## x; \
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#ifndef SAVEABLE_H
|
#ifndef SAVEABLE_H
|
||||||
#define SAVEABLE_H
|
#define SAVEABLE_H
|
||||||
|
|
||||||
|
#include "compat.h"
|
||||||
|
|
||||||
typedef void *saveable_code;
|
typedef void *saveable_code;
|
||||||
|
|
||||||
|
@ -42,10 +43,16 @@ typedef struct
|
||||||
unsigned int numdata;
|
unsigned int numdata;
|
||||||
} saveable_module;
|
} saveable_module;
|
||||||
|
|
||||||
#define SAVE_CODE(s) (void*)s
|
template <typename T>
|
||||||
#define SAVE_DATA(s) { (void*)&s, sizeof(s) }
|
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
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -61,6 +68,7 @@ typedef struct
|
||||||
} saveddatasym;
|
} saveddatasym;
|
||||||
|
|
||||||
void Saveable_Init(void);
|
void Saveable_Init(void);
|
||||||
|
void Saveable_Init_Dynamic(void);
|
||||||
|
|
||||||
int Saveable_FindCodeSym(void *ptr, savedcodesym *sym);
|
int Saveable_FindCodeSym(void *ptr, savedcodesym *sym);
|
||||||
int Saveable_FindDataSym(void *ptr, saveddatasym *sym);
|
int Saveable_FindDataSym(void *ptr, saveddatasym *sym);
|
||||||
|
|
Loading…
Reference in a new issue