From 8bb3482bc5b3917ffd393cb9f876febbb77a6647 Mon Sep 17 00:00:00 2001 From: yamamama Date: Fri, 26 Dec 2025 01:12:18 -0500 Subject: [PATCH] Expose the Arrow Bullet scalar to Lua Very much for prototyping reasons --- src/lua_baselib.c | 12 ++++++++++++ src/p_local.h | 1 + src/p_user.c | 14 +++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 5d3b23003..f07c9b597 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -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}, diff --git a/src/p_local.h b/src/p_local.h index 847042a24..6db4dfb3d 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -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); diff --git a/src/p_user.c b/src/p_user.c index 62d7010a8..eb1997e52 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -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;