Expose the Arrow Bullet scalar to Lua

Very much for prototyping reasons
This commit is contained in:
yamamama 2025-12-26 01:12:18 -05:00
parent 21918df5f3
commit 8bb3482bc5
3 changed files with 24 additions and 3 deletions

View file

@ -1497,6 +1497,17 @@ static int lib_pNukeEnemies(lua_State *L)
return 0;
}
static int lib_pKartAltShrinkAuraScalar(lua_State *L)
{
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
//HUDSAFE
if (!player)
return LUA_ErrInvalid(L, "player_t");
lua_pushinteger(L, P_KartAltShrinkAuraScalar(player));
return 1;
}
// P_MAP
///////////
@ -5517,6 +5528,7 @@ static luaL_Reg lib[] = {
{"P_ReturnThrustX",lib_pReturnThrustX},
{"P_ReturnThrustY",lib_pReturnThrustY},
{"P_NukeEnemies",lib_pNukeEnemies},
{"P_KartAltShrinkAuraScalar", lib_pKartAltShrinkAuraScalar},
// p_map
{"P_CheckPosition",lib_pCheckPosition},

View file

@ -215,6 +215,7 @@ void P_HaltPlayerOrbit(player_t *player);
void P_ExitPlayerOrbit(player_t *player);
boolean P_PlayerOrbit(player_t *player);
fixed_t P_KartAltShrinkAuraScalar(player_t *player);
void P_MovePlayer(player_t *player);
void P_PlayerThink(player_t *player);
void P_PlayerAfterThink(player_t *player);

View file

@ -2181,6 +2181,16 @@ static void P_UpdatePlayerAngle(player_t *player)
P_UpdatePlayerAiming(player);
}
#define MINAURAPCT (cv_kartaltshrink_arrowbulletthres.value - (FRACUNIT / 4))
#define AURA_DIFF (max(1, (FRACUNIT << 1) - MINAURAPCT))
fixed_t P_KartAltShrinkAuraScalar(player_t *player)
{
if ((!player) || (!player->mo) || (P_MobjWasRemoved(player->mo)))
return 0;
return FixedDiv(min(max(0, K_GetSpeedPercentage(player) - MINAURAPCT), (FRACUNIT << 1)), AURA_DIFF);
}
//
// P_MovePlayer
void P_MovePlayer(player_t *player)
@ -2317,12 +2327,10 @@ void P_MovePlayer(player_t *player)
K_SpawnSparkleTrail(player->mo);
}
#define MINAURAPCT (cv_kartaltshrink_arrowbulletthres.value - (FRACUNIT / 4))
#define AURA_DIFF (max(1, (FRACUNIT << 1) - MINAURAPCT))
// The Arrow Bullet aura should spawn before you actually enter the Arrow Bullet state.
if (cv_kartaltshrink_arrowbullet.value && K_IsAltShrunk(player) && (K_GetSpeedPercentage(player) >= MINAURAPCT))
{
fixed_t aura_scalar = FixedDiv(min(max(0, K_GetSpeedPercentage(player) - MINAURAPCT), (FRACUNIT << 1)), AURA_DIFF);
fixed_t aura_scalar = P_KartAltShrinkAuraScalar(player);
INT32 auravis = 10 - FixedMul(7, Easing_OutCubic(aura_scalar, 0, FRACUNIT));
auravis = min(9, max(1, auravis)) << FF_TRANSSHIFT;