mirror of
https://github.com/ZDoom/Raze.git
synced 2025-01-18 22:51:50 +00:00
- GC setup for Duke.
This commit is contained in:
parent
5d09748af9
commit
fa62b20d76
6 changed files with 50 additions and 14 deletions
|
@ -158,6 +158,10 @@ namespace GC
|
||||||
{
|
{
|
||||||
MarkArray((DObject **)(obj), count);
|
MarkArray((DObject **)(obj), count);
|
||||||
}
|
}
|
||||||
|
template<class T> void MarkArray(TObjPtr<T>* obj, size_t count)
|
||||||
|
{
|
||||||
|
MarkArray((DObject**)(obj), count);
|
||||||
|
}
|
||||||
template<class T> void MarkArray(TArray<T> &arr)
|
template<class T> void MarkArray(TArray<T> &arr)
|
||||||
{
|
{
|
||||||
MarkArray(&arr[0], arr.Size());
|
MarkArray(&arr[0], arr.Size());
|
||||||
|
|
|
@ -47,6 +47,12 @@ void SetDispatcher();
|
||||||
void InitCheats();
|
void InitCheats();
|
||||||
int registerosdcommands(void);
|
int registerosdcommands(void);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// DObject stuff - everything GC related.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DDukeActor, false, true)
|
IMPLEMENT_CLASS(DDukeActor, false, true)
|
||||||
IMPLEMENT_POINTERS_START(DDukeActor)
|
IMPLEMENT_POINTERS_START(DDukeActor)
|
||||||
IMPLEMENT_POINTER(ownerActor)
|
IMPLEMENT_POINTER(ownerActor)
|
||||||
|
@ -64,6 +70,32 @@ size_t DDukeActor::PropagateMark()
|
||||||
return uservars.Size() + Super::PropagateMark();
|
return uservars.Size() + Super::PropagateMark();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void markgcroots()
|
||||||
|
{
|
||||||
|
GC::Mark(camsprite);
|
||||||
|
GC::Mark(BellSprite);
|
||||||
|
GC::MarkArray(spriteq, countof(spriteq));
|
||||||
|
GC::Mark(currentCommentarySprite);
|
||||||
|
GC::Mark(ud.cameraactor);
|
||||||
|
for (auto& crn : cranes) GC::Mark(crn.poleactor);
|
||||||
|
for (auto& pl : ps)
|
||||||
|
{
|
||||||
|
GC::Mark(pl.actor);
|
||||||
|
GC::Mark(pl.actorsqu);
|
||||||
|
GC::Mark(pl.wackedbyactor);
|
||||||
|
GC::Mark(pl.on_crane);
|
||||||
|
GC::Mark(pl.holoduke_on);
|
||||||
|
GC::Mark(pl.somethingonplayer);
|
||||||
|
GC::Mark(pl.access_spritenum);
|
||||||
|
GC::Mark(pl.dummyplayersprite);
|
||||||
|
GC::Mark(pl.newOwner);
|
||||||
|
for (auto& var : pl.uservars)
|
||||||
|
{
|
||||||
|
var.Mark();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// game specific command line args go here.
|
// game specific command line args go here.
|
||||||
|
@ -303,6 +335,7 @@ int GameInterface::GetCurrentSkill()
|
||||||
void GameInterface::app_init()
|
void GameInterface::app_init()
|
||||||
{
|
{
|
||||||
SetupActors(RUNTIME_CLASS(DDukeActor));
|
SetupActors(RUNTIME_CLASS(DDukeActor));
|
||||||
|
GC::AddMarkerFunc(markgcroots);
|
||||||
|
|
||||||
if (isRR()) C_SetNotifyFontScale(0.5);
|
if (isRR()) C_SetNotifyFontScale(0.5);
|
||||||
ud.god = 0;
|
ud.god = 0;
|
||||||
|
|
|
@ -56,7 +56,6 @@ player_struct ps[MAXPLAYERS];
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
int lastvisinc; // weapon flash
|
int lastvisinc; // weapon flash
|
||||||
DDukeActor* camsprite; // active camera
|
|
||||||
int earthquaketime;
|
int earthquaketime;
|
||||||
int global_random; // readonly - one single global per-frame random value. Ugh...
|
int global_random; // readonly - one single global per-frame random value. Ugh...
|
||||||
|
|
||||||
|
@ -69,7 +68,6 @@ int hulkspawn; // Spawn a hulk?
|
||||||
int lastlevel; // Set at the end of RRRA's E2L7.
|
int lastlevel; // Set at the end of RRRA's E2L7.
|
||||||
short fakebubba_spawn, mamaspawn_count, banjosound; // RRRA special effects
|
short fakebubba_spawn, mamaspawn_count, banjosound; // RRRA special effects
|
||||||
short BellTime;
|
short BellTime;
|
||||||
DDukeActor* BellSprite /* word_119BE0*/;
|
|
||||||
int WindTime, WindDir;
|
int WindTime, WindDir;
|
||||||
uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
||||||
|
|
||||||
|
@ -93,7 +91,6 @@ bool sound445done; // used in checksectors_r. This was local state inside
|
||||||
|
|
||||||
int spriteqamount = 64; // internal sprite queue
|
int spriteqamount = 64; // internal sprite queue
|
||||||
int spriteqloc;
|
int spriteqloc;
|
||||||
DDukeActor* spriteq[1024];
|
|
||||||
animwalltype animwall[MAXANIMWALLS]; // animated walls
|
animwalltype animwall[MAXANIMWALLS]; // animated walls
|
||||||
int numanimwalls;
|
int numanimwalls;
|
||||||
int animatecnt; // sector plane movement
|
int animatecnt; // sector plane movement
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "d_net.h"
|
#include "d_net.h"
|
||||||
|
#include "serialize_obj.h"
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
|
@ -44,6 +45,12 @@ struct DukeGameInfo
|
||||||
|
|
||||||
extern DukeGameInfo gs;
|
extern DukeGameInfo gs;
|
||||||
|
|
||||||
|
inline TObjPtr<DDukeActor*> camsprite;
|
||||||
|
inline TObjPtr<DDukeActor*> BellSprite;
|
||||||
|
inline TObjPtr<DDukeActor*> spriteq[1024];
|
||||||
|
inline TObjPtr<DDukeActor*> currentCommentarySprite;
|
||||||
|
|
||||||
|
|
||||||
extern int otherp; // transient helper, MP only
|
extern int otherp; // transient helper, MP only
|
||||||
extern int actor_tog; // cheat state
|
extern int actor_tog; // cheat state
|
||||||
extern intptr_t apScriptGameEvent[];
|
extern intptr_t apScriptGameEvent[];
|
||||||
|
@ -64,7 +71,6 @@ extern animwalltype animwall[MAXANIMWALLS];
|
||||||
extern int numanimwalls;
|
extern int numanimwalls;
|
||||||
extern int animatecnt;
|
extern int animatecnt;
|
||||||
extern int numclouds;
|
extern int numclouds;
|
||||||
extern DDukeActor* camsprite;
|
|
||||||
extern int numcyclers;
|
extern int numcyclers;
|
||||||
extern int earthquaketime;
|
extern int earthquaketime;
|
||||||
extern int global_random;
|
extern int global_random;
|
||||||
|
@ -91,7 +97,6 @@ extern float cloudx;
|
||||||
extern float cloudy;
|
extern float cloudy;
|
||||||
extern int cloudclock;
|
extern int cloudclock;
|
||||||
|
|
||||||
extern DDukeActor *spriteq[1024];
|
|
||||||
extern Cycler cyclers[MAXCYCLERS];
|
extern Cycler cyclers[MAXCYCLERS];
|
||||||
extern sectortype* mirrorsector[64];
|
extern sectortype* mirrorsector[64];
|
||||||
extern walltype* mirrorwall[64];
|
extern walltype* mirrorwall[64];
|
||||||
|
@ -121,7 +126,6 @@ extern TArray<CraneDef> cranes;
|
||||||
extern int WindTime, WindDir;
|
extern int WindTime, WindDir;
|
||||||
extern short fakebubba_spawn, mamaspawn_count, banjosound;
|
extern short fakebubba_spawn, mamaspawn_count, banjosound;
|
||||||
extern short BellTime;
|
extern short BellTime;
|
||||||
extern DDukeActor* BellSprite /* word_119BE0*/;
|
|
||||||
extern uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
extern uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
||||||
extern uint32_t everyothertime;
|
extern uint32_t everyothertime;
|
||||||
extern player_orig po[MAXPLAYERS];
|
extern player_orig po[MAXPLAYERS];
|
||||||
|
|
|
@ -55,8 +55,6 @@ CVAR(Bool, wt_commentary, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
static FSoundID currentCommentarySound;
|
static FSoundID currentCommentarySound;
|
||||||
static DDukeActor* currentCommentarySprite; // todo: GC this once actors become objects
|
|
||||||
|
|
||||||
|
|
||||||
void UnmuteSounds()
|
void UnmuteSounds()
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,7 @@ class DDukeActor : public DCoreActor
|
||||||
public:
|
public:
|
||||||
uint8_t cgg;
|
uint8_t cgg;
|
||||||
uint8_t spriteextra; // moved here for easier maintenance. This was originally a hacked in field in the sprite structure called 'filler'.
|
uint8_t spriteextra; // moved here for easier maintenance. This was originally a hacked in field in the sprite structure called 'filler'.
|
||||||
DDukeActor* ownerActor, * hitOwnerActor;
|
TObjPtr<DDukeActor*> ownerActor, hitOwnerActor;
|
||||||
short picnum, ang, extra, movflag;
|
short picnum, ang, extra, movflag;
|
||||||
short tempang, dispicnum;
|
short tempang, dispicnum;
|
||||||
short timetosleep;
|
short timetosleep;
|
||||||
|
@ -49,7 +49,7 @@ public:
|
||||||
walltype* temp_walls[2]; // SE20 + SE128
|
walltype* temp_walls[2]; // SE20 + SE128
|
||||||
sectortype* temp_sect, *actorstayput;
|
sectortype* temp_sect, *actorstayput;
|
||||||
|
|
||||||
DDukeActor* temp_actor, *seek_actor;
|
TObjPtr<DDukeActor*> temp_actor, seek_actor;
|
||||||
spritetype* s; // direct reference to the corresponding sprite.
|
spritetype* s; // direct reference to the corresponding sprite.
|
||||||
|
|
||||||
TArray<GameVarValue> uservars;
|
TArray<GameVarValue> uservars;
|
||||||
|
@ -163,7 +163,7 @@ struct user_defs
|
||||||
int m_ffire, ffire, m_player_skill, multimode;
|
int m_ffire, ffire, m_player_skill, multimode;
|
||||||
int player_skill, marker;
|
int player_skill, marker;
|
||||||
|
|
||||||
DDukeActor* cameraactor;
|
TObjPtr<DDukeActor*> cameraactor;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ struct CraneDef
|
||||||
{
|
{
|
||||||
int x, y, z;
|
int x, y, z;
|
||||||
int polex, poley;
|
int polex, poley;
|
||||||
DDukeActor* poleactor;
|
TObjPtr<DDukeActor*> poleactor;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct player_struct
|
struct player_struct
|
||||||
|
@ -227,7 +227,8 @@ struct player_struct
|
||||||
sectortype* cursector;
|
sectortype* cursector;
|
||||||
sectortype* one_parallax_sectnum; // wall + sector references. Make them pointers later?
|
sectortype* one_parallax_sectnum; // wall + sector references. Make them pointers later?
|
||||||
walltype* access_wall;
|
walltype* access_wall;
|
||||||
DDukeActor* actor;
|
TObjPtr<DDukeActor*> actor;
|
||||||
|
TObjPtr<DDukeActor*> actorsqu, wackedbyactor, on_crane, holoduke_on, somethingonplayer, access_spritenum, dummyplayersprite, newOwner;
|
||||||
|
|
||||||
short last_extra, subweapon;
|
short last_extra, subweapon;
|
||||||
short ammo_amount[MAX_WEAPONS], frag, fraggedself;
|
short ammo_amount[MAX_WEAPONS], frag, fraggedself;
|
||||||
|
@ -241,7 +242,6 @@ struct player_struct
|
||||||
short cheat_phase;
|
short cheat_phase;
|
||||||
short extra_extra8, quick_kick, last_quick_kick;
|
short extra_extra8, quick_kick, last_quick_kick;
|
||||||
short heat_amount, timebeforeexit, customexitsound;
|
short heat_amount, timebeforeexit, customexitsound;
|
||||||
DDukeActor* actorsqu, *wackedbyactor, *on_crane, *holoduke_on, *somethingonplayer, *access_spritenum, *dummyplayersprite, *newOwner;
|
|
||||||
|
|
||||||
short weaprecs[256], weapreccnt;
|
short weaprecs[256], weapreccnt;
|
||||||
unsigned int interface_toggle_flag;
|
unsigned int interface_toggle_flag;
|
||||||
|
|
Loading…
Reference in a new issue