Backwards compat for certain powers

This commit is contained in:
NepDisk 2025-05-28 13:38:00 -04:00
parent 6d071fd23a
commit 156fddad1c
3 changed files with 37 additions and 2 deletions

View file

@ -1772,6 +1772,9 @@ static int power_get(lua_State *L)
case pw_nocontrol:
lua_pushinteger(L, plr->nocontrol);
return 1;
case pw_emeralds:
lua_pushinteger(L, plr->emeralds);
return 1;
default:
lua_pushinteger(L, powers[p]);
return 1;
@ -1801,6 +1804,9 @@ static int power_set(lua_State *L)
case pw_nocontrol:
plr->nocontrol = i;
break;
case pw_emeralds:
plr->emeralds = i;
break;
default:
powers[p] = i;
break;

View file

@ -229,6 +229,11 @@ static void P_NetArchivePlayers(savebuffer_t *save)
if (flags & FOLLOWER)
WRITEUINT32(save->p, players[i].follower->mobjnum);
for (j = 0; j < NUMPOWERS; j++)
WRITEUINT16(save->p, players[i].powers[j]);
for (j = 0; j < NUMKARTSTUFF; j++)
WRITEINT32(save->p, players[i].kartstuff[j]);
WRITEUINT16(save->p, players[i].nocontrol);
WRITEUINT8(save->p, players[i].carry);
WRITEUINT16(save->p, players[i].dye);
@ -560,6 +565,11 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
if (flags & FOLLOWER)
players[i].follower = (mobj_t *)(size_t)READUINT32(save->p);
for (j = 0; j < NUMPOWERS; j++)
players[i].powers[j] = READUINT16(save->p);
for (j = 0; j < NUMKARTSTUFF; j++)
players[i].kartstuff[j] = READINT32(save->p);
players[i].nocontrol = READUINT16(save->p);
players[i].carry = READUINT8(save->p);
players[i].dye = READUINT16(save->p);

View file

@ -3220,11 +3220,30 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
case 434: // Custom Power
if (mo && mo->player)
{
powertype_t power = line->stringargs[0] ? get_number(line->stringargs[0]) : 0;
INT32 value = line->stringargs[1] ? get_number(line->stringargs[1]) : 0;
powertype_t power = stringargs[0] ? get_number(stringargs[0]) : 0;
INT32 value = stringargs[1] ? get_number(stringargs[1]) : 0;
if (value == -1) // 'Infinite'
value = UINT16_MAX;
if (stringargs[0])
{
if (strcasecmp(stringargs[0], "PW_FLASHING"))
{
mo->player->flashing = value;
break;
}
else if (strcasecmp(stringargs[0], "PW_NOCONTROL"))
{
mo->player->nocontrol = value;
break;
}
else if (strcasecmp(stringargs[0], "PW_EMERALDS"))
{
mo->player->emeralds = value;
break;
}
}
mo->player->powers[power] = value;
}
break;