Added freeslots for SPR2.
Make sure your MAINCFG / LUA lump comes _before_ the S_SKIN section.
This commit is contained in:
parent
79aaa00d14
commit
14e8ac702f
|
@ -671,6 +671,22 @@ static void readfreeslots(MYFILE *f)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (fastcmp(type, "SPR2_"))
|
||||||
|
{
|
||||||
|
// Search if we already have an SPR2 by that name...
|
||||||
|
for (i = SPR_FIRSTFREESLOT; i < free_spr2; i++)
|
||||||
|
if (memcmp(spr2names[i],word,4) == 0)
|
||||||
|
break;
|
||||||
|
// We found it? (Two mods using the same SPR2 name?) Then don't allocate another one.
|
||||||
|
if (i != free_spr2)
|
||||||
|
continue;
|
||||||
|
// Copy in the spr2 name and increment free_spr2.
|
||||||
|
if (free_spr2 < NUMPLAYERSPRITES) {
|
||||||
|
strncpy(spr2names[free_spr2],word,4);
|
||||||
|
spr2names[free_spr2++][4] = 0;
|
||||||
|
} else
|
||||||
|
CONS_Alert(CONS_WARNING, "Ran out of free SPR2 slots!\n");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
deh_warning("Freeslots: unknown enum class '%s' for '%s_%s'", type, type, word);
|
deh_warning("Freeslots: unknown enum class '%s' for '%s_%s'", type, type, word);
|
||||||
}
|
}
|
||||||
|
@ -8292,7 +8308,7 @@ static inline int lib_freeslot(lua_State *L)
|
||||||
lua_pushinteger(L, sfx);
|
lua_pushinteger(L, sfx);
|
||||||
r++;
|
r++;
|
||||||
} else
|
} else
|
||||||
return r;
|
CONS_Alert(CONS_WARNING, "Ran out of free SFX slots!\n");
|
||||||
}
|
}
|
||||||
else if (fastcmp(type, "SPR"))
|
else if (fastcmp(type, "SPR"))
|
||||||
{
|
{
|
||||||
|
@ -8319,7 +8335,7 @@ static inline int lib_freeslot(lua_State *L)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (j > SPR_LASTFREESLOT)
|
if (j > SPR_LASTFREESLOT)
|
||||||
return r;
|
CONS_Alert(CONS_WARNING, "Ran out of free sprite slots!\n");
|
||||||
}
|
}
|
||||||
else if (fastcmp(type, "S"))
|
else if (fastcmp(type, "S"))
|
||||||
{
|
{
|
||||||
|
@ -8334,7 +8350,7 @@ static inline int lib_freeslot(lua_State *L)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == NUMSTATEFREESLOTS)
|
if (i == NUMSTATEFREESLOTS)
|
||||||
return r;
|
CONS_Alert(CONS_WARNING, "Ran out of free State slots!\n");
|
||||||
}
|
}
|
||||||
else if (fastcmp(type, "MT"))
|
else if (fastcmp(type, "MT"))
|
||||||
{
|
{
|
||||||
|
@ -8349,7 +8365,26 @@ static inline int lib_freeslot(lua_State *L)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == NUMMOBJFREESLOTS)
|
if (i == NUMMOBJFREESLOTS)
|
||||||
return r;
|
CONS_Alert(CONS_WARNING, "Ran out of free MobjType slots!\n");
|
||||||
|
}
|
||||||
|
else if (fastcmp(type, "SPR2"))
|
||||||
|
{
|
||||||
|
// Search if we already have an SPR2 by that name...
|
||||||
|
enum playersprite i;
|
||||||
|
for (i = SPR_FIRSTFREESLOT; i < free_spr2; i++)
|
||||||
|
if (memcmp(spr2names[i],word,4) == 0)
|
||||||
|
break;
|
||||||
|
// We don't, so allocate a new one.
|
||||||
|
if (i == free_spr2) {
|
||||||
|
if (free_spr2 < NUMPLAYERSPRITES)
|
||||||
|
{
|
||||||
|
CONS_Printf("Sprite SPR2_%s allocated.\n",word);
|
||||||
|
strncpy(spr2names[free_spr2],word,4);
|
||||||
|
spr2names[free_spr2++][4] = 0;
|
||||||
|
} else
|
||||||
|
CONS_Alert(CONS_WARNING, "Ran out of free SPR2 slots!\n");
|
||||||
|
}
|
||||||
|
r++;
|
||||||
}
|
}
|
||||||
Z_Free(s);
|
Z_Free(s);
|
||||||
lua_remove(L, 1);
|
lua_remove(L, 1);
|
||||||
|
@ -8516,7 +8551,7 @@ static inline int lib_getenum(lua_State *L)
|
||||||
}
|
}
|
||||||
else if (fastncmp("SPR2_",word,4)) {
|
else if (fastncmp("SPR2_",word,4)) {
|
||||||
p = word+5;
|
p = word+5;
|
||||||
for (i = 0; i < NUMPLAYERSPRITES; i++)
|
for (i = 0; i < free_spr2; i++)
|
||||||
if (!spr2names[i][4])
|
if (!spr2names[i][4])
|
||||||
{
|
{
|
||||||
// special 3-char cases, e.g. SPR2_RUN
|
// special 3-char cases, e.g. SPR2_RUN
|
||||||
|
|
|
@ -99,6 +99,7 @@ char spr2names[NUMPLAYERSPRITES][5] =
|
||||||
"SRID",
|
"SRID",
|
||||||
"SFLT"
|
"SFLT"
|
||||||
};
|
};
|
||||||
|
enum playersprite free_spr2 = SPR2_FIRSTFREESLOT;
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
state_t states[NUMSTATES] =
|
state_t states[NUMSTATES] =
|
||||||
|
|
|
@ -618,6 +618,8 @@ enum playersprite
|
||||||
SPR2_SRID,
|
SPR2_SRID,
|
||||||
SPR2_SFLT,
|
SPR2_SFLT,
|
||||||
|
|
||||||
|
SPR2_FIRSTFREESLOT,
|
||||||
|
SPR2_LASTFREESLOT = SPR2_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
|
||||||
NUMPLAYERSPRITES
|
NUMPLAYERSPRITES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3528,8 +3530,9 @@ typedef struct
|
||||||
|
|
||||||
extern state_t states[NUMSTATES];
|
extern state_t states[NUMSTATES];
|
||||||
extern char sprnames[NUMSPRITES + 1][5];
|
extern char sprnames[NUMSPRITES + 1][5];
|
||||||
char spr2names[NUMPLAYERSPRITES][5];
|
extern char spr2names[NUMPLAYERSPRITES][5];
|
||||||
extern state_t *astate;
|
extern state_t *astate;
|
||||||
|
extern enum playersprite free_spr2;
|
||||||
|
|
||||||
typedef enum mobj_type
|
typedef enum mobj_type
|
||||||
{
|
{
|
||||||
|
|
|
@ -105,7 +105,7 @@ static int lib_getSpr2name(lua_State *L)
|
||||||
if (lua_isnumber(L, 1))
|
if (lua_isnumber(L, 1))
|
||||||
{
|
{
|
||||||
i = lua_tonumber(L, 1);
|
i = lua_tonumber(L, 1);
|
||||||
if (i > NUMPLAYERSPRITES)
|
if (i >= free_spr2)
|
||||||
return 0;
|
return 0;
|
||||||
lua_pushlstring(L, spr2names[i], 4);
|
lua_pushlstring(L, spr2names[i], 4);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -113,7 +113,7 @@ static int lib_getSpr2name(lua_State *L)
|
||||||
else if (lua_isstring(L, 1))
|
else if (lua_isstring(L, 1))
|
||||||
{
|
{
|
||||||
const char *name = lua_tostring(L, 1);
|
const char *name = lua_tostring(L, 1);
|
||||||
for (i = 0; i < NUMPLAYERSPRITES; i++)
|
for (i = 0; i < free_spr2; i++)
|
||||||
if (fastcmp(name, spr2names[i]))
|
if (fastcmp(name, spr2names[i]))
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, i);
|
lua_pushinteger(L, i);
|
||||||
|
@ -125,7 +125,7 @@ static int lib_getSpr2name(lua_State *L)
|
||||||
|
|
||||||
static int lib_spr2namelen(lua_State *L)
|
static int lib_spr2namelen(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, NUMPLAYERSPRITES);
|
lua_pushinteger(L, free_spr2);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2671,7 +2671,7 @@ next_token:
|
||||||
if (z < lastlump) lastlump = z;
|
if (z < lastlump) lastlump = z;
|
||||||
|
|
||||||
// load all sprite sets we are aware of.
|
// load all sprite sets we are aware of.
|
||||||
for (sprite2 = 0; sprite2 < NUMPLAYERSPRITES; sprite2++)
|
for (sprite2 = 0; sprite2 < free_spr2; sprite2++)
|
||||||
R_AddSingleSpriteDef(spr2names[sprite2], &skin->sprites[sprite2], wadnum, lump, lastlump);
|
R_AddSingleSpriteDef(spr2names[sprite2], &skin->sprites[sprite2], wadnum, lump, lastlump);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue