Add teamscores to Lua

This commit is contained in:
Lactozilla 2023-08-06 00:34:01 -03:00
parent a927a4f56b
commit 073e866842
4 changed files with 57 additions and 16 deletions

View file

@ -2371,19 +2371,12 @@ static int team_num(lua_State *L)
return 1;
}
static int teamlist_len(lua_State *L)
{
teamlist_t *teamlist = *((teamlist_t **)luaL_checkudata(L, 1, META_TEAMLIST));
lua_pushinteger(L, teamlist->num);
return 1;
}
static int teamlist_get(lua_State *L)
{
teamlist_t *teamlist = *((teamlist_t **)luaL_checkudata(L, 1, META_TEAMLIST));
int i = luaL_checkinteger(L, 2);
if (i < 0 || i > teamlist->num)
return luaL_error(L, "list index %d out of range (1 - %d)", i, teamlist->num);
if (i <= 0 || i > teamlist->num)
return luaL_error(L, "array index %d out of range (1 - %d)", i, teamlist->num);
lua_pushinteger(L, teamlist->list[i - 1]);
return 1;
}
@ -2392,15 +2385,49 @@ static int teamlist_set(lua_State *L)
{
teamlist_t *teamlist = *((teamlist_t **)luaL_checkudata(L, 1, META_TEAMLIST));
int i = luaL_checkinteger(L, 2);
if (i < 0 || i > teamlist->num)
return luaL_error(L, "list index %d out of range (1 - %d)", i, teamlist->num);
int team = luaL_checkinteger(L, 3);
if (i <= 0 || i > teamlist->num)
return luaL_error(L, "array index %d out of range (1 - %d)", i, teamlist->num);
if (team < 0 || team >= numteams)
return luaL_error(L, "team index %d out of range (0 - %d)", i, numteams - 1);
teamlist->list[i - 1] = (UINT8)team;
return 0;
}
static int teamlist_len(lua_State *L)
{
teamlist_t *teamlist = *((teamlist_t **)luaL_checkudata(L, 1, META_TEAMLIST));
lua_pushinteger(L, teamlist->num);
return 1;
}
static int teamscores_get(lua_State *L)
{
UINT32 *scoreslist = *((UINT32 **)luaL_checkudata(L, 1, META_TEAMSCORES));
int i = luaL_checkinteger(L, 2);
if (i < 0 || i >= numteams)
return luaL_error(L, "array index %d out of range (0 - %d)", i, numteams - 1);
lua_pushinteger(L, scoreslist[i]);
return 1;
}
static int teamscores_set(lua_State *L)
{
UINT32 *scoreslist = *((UINT32 **)luaL_checkudata(L, 1, META_TEAMSCORES));
int i = luaL_checkinteger(L, 2);
UINT32 score = (UINT32)luaL_checkinteger(L, 3);
if (i < 0 || i >= numteams)
return luaL_error(L, "array index %d out of range (0 - %d)", i, numteams - 1);
scoreslist[i] = score;
return 0;
}
static int teamscores_len(lua_State *L)
{
lua_pushinteger(L, numteams);
return 1;
}
//////////////////////////////
//
// Now push all these functions into the Lua state!
@ -2421,6 +2448,7 @@ int LUA_InfoLib(lua_State *L)
LUA_RegisterUserdataMetatable(L, META_GAMETYPE, gametype_get, gametype_set, gametype_num);
LUA_RegisterUserdataMetatable(L, META_TEAM, team_get, team_set, team_num);
LUA_RegisterUserdataMetatable(L, META_TEAMLIST, teamlist_get, teamlist_set, teamlist_len);
LUA_RegisterUserdataMetatable(L, META_TEAMSCORES, teamscores_get, teamscores_set, teamscores_len);
LUA_RegisterUserdataMetatable(L, META_SKINCOLOR, skincolor_get, skincolor_set, skincolor_num);
LUA_RegisterUserdataMetatable(L, META_COLORRAMP, colorramp_get, colorramp_set, colorramp_len);
LUA_RegisterUserdataMetatable(L, META_SFXINFO, sfxinfo_get, sfxinfo_set, sfxinfo_num);
@ -2439,7 +2467,6 @@ int LUA_InfoLib(lua_State *L)
LUA_RegisterGlobalUserdata(L, "mobjinfo", lib_getMobjInfo, lib_setMobjInfo, lib_mobjinfolen);
LUA_RegisterGlobalUserdata(L, "gametypes", lib_getGametypes, NULL, lib_gametypeslen);
LUA_RegisterGlobalUserdata(L, "teams", lib_getTeams, lib_setTeams, lib_teamslen);
// LUA_RegisterGlobalUserdata(L, "gametypes", lib_getGametypes, NULL, lib_gametypeslen);
LUA_RegisterGlobalUserdata(L, "skincolors", lib_getSkinColor, lib_setSkinColor, lib_skincolorslen);
LUA_RegisterGlobalUserdata(L, "spriteinfo", lib_getSpriteInfo, lib_setSpriteInfo, lib_spriteinfolen);
LUA_RegisterGlobalUserdata(L, "sfxinfo", lib_getSfxInfo, lib_setSfxInfo, lib_sfxlen);

View file

@ -32,6 +32,7 @@ extern boolean ignoregameinputs;
#define META_GAMETYPE "GAMETYPE_T*"
#define META_TEAM "TEAM_T*"
#define META_TEAMLIST "TEAMLIST_T*"
#define META_TEAMSCORES "TEAMSCORES"
#define META_PIVOTLIST "SPRITEFRAMEPIVOT_T[]"
#define META_FRAMEPIVOT "SPRITEFRAMEPIVOT_T*"

View file

@ -219,6 +219,9 @@ int LUA_PushGlobals(lua_State *L, const char *word)
} else if (fastcmp(word,"redscore")) {
lua_pushinteger(L, teamscores[G_GetTeam(1)]);
return 1;
} else if (fastcmp(word,"teamscores")) {
LUA_PushUserdata(L, teamscores, META_TEAMSCORES);
return 1;
} else if (fastcmp(word,"timelimit")) {
lua_pushinteger(L, cv_timelimit.value);
return 1;
@ -999,6 +1002,7 @@ enum
ARCH_SKIN,
ARCH_GAMETYPE,
ARCH_TEAM,
ARCH_TEAMSCORES,
ARCH_TEND=0xFF,
};
@ -1030,6 +1034,7 @@ static const struct {
{META_SKIN, ARCH_SKIN},
{META_GAMETYPE, ARCH_GAMETYPE},
{META_TEAM, ARCH_TEAM},
{META_TEAMSCORES, ARCH_TEAMSCORES},
{NULL, ARCH_NULL}
};
@ -1372,6 +1377,11 @@ static UINT8 ArchiveValue(int TABLESINDEX, int myindex)
WRITEUINT8(save_p, team - teams);
break;
}
case ARCH_TEAMSCORES:
{
WRITEUINT8(save_p, ARCH_TEAMSCORES);
break;
}
default:
WRITEUINT8(save_p, ARCH_NULL);
return 2;
@ -1627,6 +1637,9 @@ static UINT8 UnArchiveValue(int TABLESINDEX)
case ARCH_TEAM:
LUA_PushUserdata(gL, &teams[READUINT8(save_p)], META_TEAM);
break;
case ARCH_TEAMSCORES:
LUA_PushUserdata(gL, teamscores, META_TEAMSCORES);
break;
case ARCH_TEND:
return 1;
}

View file

@ -2439,13 +2439,13 @@ static void ST_drawTeamHUD(void)
if (gametyperules & GTR_TEAMFLAGS)
{
bmatcico = ST_GetCurrentTeamIconImage(1, TEAM_ICON_FLAG);
rmatcico = ST_GetCurrentTeamIconImage(2, TEAM_ICON_FLAG);
rmatcico = ST_GetCurrentTeamIconImage(1, TEAM_ICON_FLAG);
bmatcico = ST_GetCurrentTeamIconImage(2, TEAM_ICON_FLAG);
}
else
{
bmatcico = ST_GetCurrentTeamIconImage(1, TEAM_ICON);
rmatcico = ST_GetCurrentTeamIconImage(2, TEAM_ICON);
rmatcico = ST_GetCurrentTeamIconImage(1, TEAM_ICON);
bmatcico = ST_GetCurrentTeamIconImage(2, TEAM_ICON);
}
V_DrawSmallScaledPatch(BASEVIDWIDTH/2 - SEP - (bmatcico->width / 4), 4, V_HUDTRANS|V_PERPLAYER|V_SNAPTOTOP, bmatcico);