mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-21 18:32:08 +00:00
Merge branch 'fix-1263' into 'next'
Fix #1263 Closes #1263 See merge request STJr/SRB2!2472
This commit is contained in:
commit
b2fa2cfbd8
5 changed files with 59 additions and 17 deletions
|
@ -184,8 +184,10 @@ static const struct {
|
|||
{META_SKIN, "skin_t"},
|
||||
{META_POWERS, "player_t.powers"},
|
||||
{META_SOUNDSID, "skin_t.soundsid"},
|
||||
{META_SKINSPRITES, "skin_t.sprites"},
|
||||
{META_SKINSPRITESLIST, "skin_t.sprites[]"},
|
||||
|
||||
{META_SKINSPRITES, "skin_t.skinsprites"},
|
||||
{META_SKINSPRITESLIST, "skin_t.skinsprites[]"},
|
||||
{META_SKINSPRITESCOMPAT, "skin_t.sprites"}, // TODO: 2.3: Delete
|
||||
|
||||
{META_VERTEX, "vertex_t"},
|
||||
{META_LINE, "line_t"},
|
||||
|
|
|
@ -42,8 +42,9 @@ extern boolean ignoregameinputs;
|
|||
#define META_SKIN "SKIN_T*"
|
||||
#define META_POWERS "PLAYER_T*POWERS"
|
||||
#define META_SOUNDSID "SKIN_T*SOUNDSID"
|
||||
#define META_SKINSPRITES "SKIN_T*SPRITES"
|
||||
#define META_SKINSPRITESLIST "SKIN_T*SPRITES[]"
|
||||
#define META_SKINSPRITES "SKIN_T*SKINSPRITES"
|
||||
#define META_SKINSPRITESLIST "SKIN_T*SKINSPRITES[]"
|
||||
#define META_SKINSPRITESCOMPAT "SKIN_T*SPRITES" // TODO: 2.3: Delete
|
||||
|
||||
#define META_VERTEX "VERTEX_T*"
|
||||
#define META_LINE "LINE_T*"
|
||||
|
|
|
@ -54,7 +54,8 @@ enum skin {
|
|||
skin_contspeed,
|
||||
skin_contangle,
|
||||
skin_soundsid,
|
||||
skin_sprites,
|
||||
skin_sprites, // TODO: 2.3: Delete
|
||||
skin_skinsprites,
|
||||
skin_supersprites,
|
||||
skin_natkcolor
|
||||
};
|
||||
|
@ -95,7 +96,8 @@ static const char *const skin_opt[] = {
|
|||
"contspeed",
|
||||
"contangle",
|
||||
"soundsid",
|
||||
"sprites",
|
||||
"sprites", // TODO: 2.3: Delete
|
||||
"skinsprites",
|
||||
"supersprites",
|
||||
"natkcolor",
|
||||
NULL};
|
||||
|
@ -219,7 +221,10 @@ static int skin_get(lua_State *L)
|
|||
case skin_soundsid:
|
||||
LUA_PushUserdata(L, skin->soundsid, META_SOUNDSID);
|
||||
break;
|
||||
case skin_sprites:
|
||||
case skin_sprites: // TODO: 2.3: Delete
|
||||
LUA_PushUserdata(L, skin->sprites_compat, META_SKINSPRITESCOMPAT);
|
||||
break;
|
||||
case skin_skinsprites:
|
||||
LUA_PushUserdata(L, skin->sprites, META_SKINSPRITES);
|
||||
break;
|
||||
case skin_supersprites:
|
||||
|
@ -338,15 +343,7 @@ static int soundsid_num(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
enum spritesopt {
|
||||
numframes = 0
|
||||
};
|
||||
|
||||
static const char *const sprites_opt[] = {
|
||||
"numframes",
|
||||
NULL};
|
||||
|
||||
// skin.sprites[i] -> sprites[i]
|
||||
// skin.skinsprites[i] -> sprites[i]
|
||||
static int lib_getSkinSprite(lua_State *L)
|
||||
{
|
||||
spritedef_t *sksprites = *(spritedef_t **)luaL_checkudata(L, 1, META_SKINSPRITES);
|
||||
|
@ -359,13 +356,43 @@ static int lib_getSkinSprite(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// #skin.sprites -> NUMPLAYERSPRITES
|
||||
// #skin.skinsprites -> NUMPLAYERSPRITES
|
||||
static int lib_numSkinsSprites(lua_State *L)
|
||||
{
|
||||
lua_pushinteger(L, NUMPLAYERSPRITES);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TODO: 2.3: Delete
|
||||
// skin.sprites[i] -> sprites[i]
|
||||
static int lib_getSkinSpriteCompat(lua_State *L)
|
||||
{
|
||||
spritedef_t *sksprites = *(spritedef_t **)luaL_checkudata(L, 1, META_SKINSPRITESCOMPAT);
|
||||
playersprite_t i = luaL_checkinteger(L, 2);
|
||||
|
||||
if (i < 0 || i >= NUMPLAYERSPRITES*2)
|
||||
return luaL_error(L, "skin sprites index %d out of range (0 - %d)", i, (NUMPLAYERSPRITES*2)-1);
|
||||
|
||||
LUA_PushUserdata(L, &sksprites[i], META_SKINSPRITESLIST);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TODO: 2.3: Delete
|
||||
// #skin.sprites -> NUMPLAYERSPRITES*2
|
||||
static int lib_numSkinsSpritesCompat(lua_State *L)
|
||||
{
|
||||
lua_pushinteger(L, NUMPLAYERSPRITES*2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
enum spritesopt {
|
||||
numframes = 0
|
||||
};
|
||||
|
||||
static const char *const sprites_opt[] = {
|
||||
"numframes",
|
||||
NULL};
|
||||
|
||||
static int sprite_get(lua_State *L)
|
||||
{
|
||||
spritedef_t *sprite = *(spritedef_t **)luaL_checkudata(L, 1, META_SKINSPRITESLIST);
|
||||
|
@ -387,6 +414,7 @@ int LUA_SkinLib(lua_State *L)
|
|||
LUA_RegisterUserdataMetatable(L, META_SOUNDSID, soundsid_get, NULL, soundsid_num);
|
||||
LUA_RegisterUserdataMetatable(L, META_SKINSPRITES, lib_getSkinSprite, NULL, lib_numSkinsSprites);
|
||||
LUA_RegisterUserdataMetatable(L, META_SKINSPRITESLIST, sprite_get, NULL, NULL);
|
||||
LUA_RegisterUserdataMetatable(L, META_SKINSPRITESCOMPAT, lib_getSkinSpriteCompat, NULL, lib_numSkinsSpritesCompat); // TODO: 2.3: Delete
|
||||
|
||||
skin_fields_ref = Lua_CreateFieldTable(L, skin_opt);
|
||||
|
||||
|
|
|
@ -636,6 +636,14 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
|
|||
|
||||
if (skin->sprites[0].numframes == 0)
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No frames found for sprite SPR2_%s\n"), spr2names[0]);
|
||||
|
||||
// TODO: 2.3: Delete
|
||||
memcpy(&skin->sprites_compat[start_spr2],
|
||||
&skin->sprites[start_spr2],
|
||||
sizeof(spritedef_t) * (free_spr2 - start_spr2));
|
||||
memcpy(&skin->sprites_compat[start_spr2 + NUMPLAYERSPRITES],
|
||||
&skin->super.sprites[start_spr2],
|
||||
sizeof(spritedef_t) * (free_spr2 - start_spr2));
|
||||
}
|
||||
|
||||
// returns whether found appropriate property
|
||||
|
|
|
@ -88,6 +88,9 @@ typedef struct
|
|||
spritedef_t sprites[NUMPLAYERSPRITES];
|
||||
spriteinfo_t sprinfo[NUMPLAYERSPRITES];
|
||||
} super;
|
||||
|
||||
// TODO: 2.3: Delete
|
||||
spritedef_t sprites_compat[NUMPLAYERSPRITES * 2];
|
||||
} skin_t;
|
||||
|
||||
/// Externs
|
||||
|
|
Loading…
Reference in a new issue