diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 900cfdf55..8ed5ba76b 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -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; diff --git a/src/p_saveg.c b/src/p_saveg.c index b608e3724..d7ccb81f7 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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); diff --git a/src/p_spec.c b/src/p_spec.c index c993fa684..b841cc5da 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -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;