Imagine relying on C23 features

This commit is contained in:
GenericHeroGuy 2025-02-23 16:47:59 +01:00
parent 3161bf2a5d
commit 244cfa9538
5 changed files with 21 additions and 6 deletions

View file

@ -308,6 +308,7 @@ target_compile_options(SRB2SDL2 PRIVATE
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,9.1.0>:
-Wno-error=address-of-packed-member
-Wc11-c2x-compat
>
>

View file

@ -83,11 +83,11 @@ playersprite_t spr2defaults[NUMPLAYERSPRITES] = {
};
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
state_t states[NUMSTATES] = {};
state_t states[NUMSTATES] = {0};
mobjinfo_t mobjinfo[NUMMOBJTYPES] = {};
mobjinfo_t mobjinfo[NUMMOBJTYPES] = {0};
skincolor_t skincolors[MAXSKINCOLORS] = {};
skincolor_t skincolors[MAXSKINCOLORS] = {0};
/** Patches the mobjinfo, state, and skincolor tables.
* Free slots are emptied out and set to initial values.

View file

@ -294,12 +294,14 @@ static int mobj_get(lua_State *L)
lua_pushinteger(L, mo->sprite);
break;
case mobj_frame:
{
UINT32 frame = mo->frame;
// translate SPR2 back to frames
if (lua_compatmode && mo->sprite == SPR_PLAY)
frame = (frame & ~FF_FRAMEMASK) | spr2frame(mo->sprite2, mo->frame);
lua_pushinteger(L, frame);
break;
}
case mobj_sprite2:
lua_pushinteger(L, mo->sprite2);
break;
@ -369,17 +371,21 @@ static int mobj_get(lua_State *L)
lua_pushinteger(L, mo->flags);
break;
case mobj_flags2:
{
UINT32 flags2 = mo->flags2;
if (lua_compatmode && (mo->renderflags & RF_DONTDRAW) == RF_DONTDRAW)
flags2 |= MF2_DONTDRAW;
lua_pushinteger(L, flags2);
break;
}
case mobj_eflags:
UINT32 eflags = mo->eflags;
{
UINT32 eflags = mo->eflags; // yes, not UINT16
if (lua_compatmode)
eflags |= (~mo->renderflags & RF_DONTDRAW);
lua_pushinteger(L, eflags);
break;
}
case mobj_renderflags:
lua_pushinteger(L, mo->renderflags);
break;
@ -677,11 +683,13 @@ static int mobj_set(lua_State *L)
mo->rollangle = luaL_checkangle(L, 3);
break;
case mobj_sprite:
{
spritenum_t newsprite = luaL_checkinteger(L, 3);
if (lua_compatmode && mo->sprite != SPR_PLAY && newsprite == SPR_PLAY)
frame2spr2(mo, mo->frame);
mo->sprite = newsprite;
break;
}
case mobj_frame:
// Check for SPR2
if (lua_compatmode && mo->sprite == SPR_PLAY)
@ -795,6 +803,7 @@ static int mobj_set(lua_State *L)
break;
}
case mobj_flags2:
{
UINT32 flags2 = luaL_checkinteger(L, 3);
if (lua_compatmode)
{
@ -805,12 +814,15 @@ static int mobj_set(lua_State *L)
}
mo->flags2 = flags2;
break;
}
case mobj_eflags:
{
UINT32 eflags = luaL_checkinteger(L, 3);
if (lua_compatmode)
mo->renderflags = (mo->renderflags & ~RF_DONTDRAW) | (~eflags & RF_DONTDRAW); // eeeyup.
mo->eflags = (UINT16)eflags;
break;
}
case mobj_renderflags:
mo->renderflags = (UINT32)luaL_checkinteger(L, 3);
break;

View file

@ -473,7 +473,7 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
size_t i;
spritedef_t *sd;
spriteframe_t *sf;
spritedef_t tmp = {};
spritedef_t tmp = {0};
const char *sprname = W_CheckNameForNumPwad(wadnum, *lump);
R_AddSingleSpriteDef(sprname, &tmp, wadnum, *lump, *lastlump);
@ -557,7 +557,7 @@ static void R_IHateThatHedgehog(UINT16 wadnum)
UINT16 lump = W_CheckNumForNamePwad("S_START", wadnum, 0);
if (lump == INT16_MAX)
I_Error("R_IHateThatHedgehog: could not find the hedgehog");
R_LoadSkinSprites(wadnum, &lump, &(UINT16){}, skin);
R_LoadSkinSprites(wadnum, &lump, &(UINT16){0}, skin);
#ifdef SKINVALUES
skin_cons_t[0].value = 0;

View file

@ -53,6 +53,8 @@ sfxinfo_t S_sfx[NUMSFX] =
// skin sounds free slots to add sounds at run time (Boris HACK!!!)
// initialized to NULL
0
};
static char soundnames[NUMSFX][7] = {