The source project of this merge request has been removed.
Expose gameplay helpers from k_kart.c to Lua
Summary
This MR exposes most gameplay helpers from k_kart.c
(and some from p_tick.c
and p_user.c
) to Lua, as well as giving K_KartBouncing
its return value and a INLEVEL check. There's a lot of functions, but this MR contains very simple ones that return a value or do something simple, so it should be relatively easy to review.
It exposes the following:
boolean K_IsDuelItem(mobjtype_t type)
fixed_t K_GetMobjWeight(mobj_t mobj, mobj_t against)
fixed_t K_GetKartGameSpeedScalar(SINT8 value)
angle_t K_ReflectAngle(angle_t angle, angle_t against, fixed_t maxspeed, fixed_t yourspeed)
void P_SetPlayerAngle(player_t player, angle_t angle)
void P_ForceLocalAngle(player_t player, angle_t angle)
boolean P_MobjIsFrozen(mobj_t mobj)
void P_SetFreezeLevel(boolean value)
boolean P_MobjIsFrozen(mobj_t mobj)
void K_FlipFromObject(mobj_t mo, mobj_t master)
void K_GenericExtraFlagsNoZAdjust(mobj_t mo, mobj_t master)
boolean K_PressingEBrake(player_t player)
angle_t K_MomentumAngleEx(mobj_t mo, fixed_t threshold)
angle_t K_MomentumAngleReal(mobj_t mo)
angle_t K_MomentumAngle(mobj_t mo)
void K_RemoveGrowShrink(player_t player)
boolean K_IsBigger(mobj_t compare, mobj_t other)
angle_t K_StumbleSlope(angle_t angle, angle_t pitch, angle_t roll)
boolean K_CheckStumble(player_t player, angle_t oldPitch, angle_t oldRoll, boolean fromAir)
boolean K_CheckPlayersRespawnColliding(player_t player, fixed_t x, fixed_t y)
void K_DropPaperItem(player_t player, UINT8 itemtype, UINT16 itemamount)
void K_DropRocketSneaker(player_t player)
void K_DropKitchenSink(player_t player)
boolean K_ApplyOffroad(player_t player)
boolean K_SlopeResistance(player_t player)
fixed_t K_PlayerTripwireSpeedThreshold(player_t player)
tripwirepass_t K_TripwirePassConditions(player_t player)
boolean K_TripwirePass(player_t player)
boolean K_MovingHorizontally(mobj_t mobj)
boolean K_WaterRun(mobj_t mobj)
boolean K_WaterSkip(mobj_t mobj)
boolean K_IsRidingFloatingTop(player_t player)
boolean K_IsHoldingDownTop(player_t player)
mobj_t K_GetGardenTop(player_t player)
INT16 K_GetSpindashChargeTime(player_t player)
fixed_t K_GetSpindashChargeSpeed(player_t player)
fixed_t K_GrowShrinkSpeedMul(player_t player)
fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed)
boolean K_PlayerShrinkCheat(player_t player)
void K_UpdateShrinkCheat(player_t player)
boolean K_KartKickstart(player_t player)
SINT8 K_GetForwardMove(player_t player)
fixed_t K_GetNewSpeed(player_t player)
fixed_t K_3dKartMovement(player_t player);
boolean K_PlayerEBrake(player_t player)
SINT8 K_Sliptiding(player_t player)
fixed_t K_PlayerBaseFriction(player_t player, fixed_t original)
fixed_t K_DefaultPlayerRadius(player_t player)
fixed_t K_ItemScaleForPlayer(player_t player)
void K_SetItemOut(player_t player)
void K_UnsetItemOut(player_t player)
tic_t K_TimeLimitForGametype()
UINT32 K_PointLimitForGametype()
boolean K_Cooperative()
boolean K_isPlayerInSpecialState(player_t p)
boolean K_IsPlayingDisplayPlayer(player_t player)
boolean K_PlayerCanPunt(player_t player)
void K_MakeObjectReappear(mobj_t mo)
void K_BumperInflate(player_t player)
boolean K_ThunderDome()
boolean K_PlayerCanUseItem(player_t player)
Testing
Testing environment: ringracers_gameplayHelpersLua.exe -console -skipintro -warp RR_TESTRUN +addfile helperfuncs.lua
I used a script, helperfuncs.lua, to test all of the additions. Namely:
- There's a HUD hook that displays most values.
funchelperhuddebug
controls whether it displays nothing, the first or second page (asfunchelperhuddebug 0
,funchelperhuddebug 1
andfunchelperhuddebug 2
respectively.-
funchelperhuddebug 1
displays the return values of:P_LevelIsFrozen
,K_PressingEBrake
,K_MomentumAngleEx
(second value set to 12 FU),K_MomentumAngleReal
,K_MomentumAngle
,K_StumbleSlope
,K_ApplyOffroad
,K_SlopeResistance
,K_PlayerTripwireSpeedThreshold
(as a %),K_TripwirePass
,K_TripwirePassConditions
(as a string),K_MovingHorizontally
,K_WaterRun
,K_WaterSkip
,K_IsRidingFloatingTop
,K_IsHoldingDownTop
,K_GetGardenTop
,K_GetSpindashChargeTime
andK_GetSpindashChargeSpeed
. -
funchelperhuddebug 1
displays the return values of:K_GrowShrinkSpeedMul
,K_PlayerShrinkCheat
,K_KartKickstart
,K_GetForwardMove
,K_GetNewSpeed
,K_3dKartMovement
,K_PlayerEBrake
,K_Sliptiding
,K_PlayerBaseFriction
,K_IsSPBInGame
,K_DefaultPlayerRadius
,K_ItemScaleForPlayer
,K_TimeLimitForGametype
,K_PointLimitForGametype
,K_Cooperative
,K_isPlayerInSpecialState
,K_IsPlayingDisplayPlayer
,K_PlayerCanPunt
,K_ThunderDome
andK_PlayerCanUseItem
.
-
- There's the following commands that test various functions:
-
gamespeedscalar (value)
:- Prints the game speed scalar based on the value (usually
gamespeed
). - Examples are
gamespeedscalar 0
,gamespeedscalar 1
.gamespeedscalar 2
,gamespeedscalar 3
. - Tests
K_GetKartGameSpeedScalar
.
- Prints the game speed scalar based on the value (usually
-
reflectangle (angle) (against) [maxspeed] [yourspeed]
:- Prints the reflected angle between the first and second angle set.
maxspeed
andyourspeed
are optional. - Example:
reflectangle 45 90
orreflectangle 45 90 60 120
. - Tests
K_ReflectAngle
.
- Prints the reflected angle between the first and second angle set.
-
setplayerangle (angle)
:- Sets the player's angle.
- Examples:
setplayerangle 0
,setplayerangle 180
. - Tests
P_SetPlayerAngle
.
-
forceplayerangle (angle)
:- Sets the player camera's angle.
- Examples:
setplayerangle 0
,setplayerangle 180
. - Tests
P_ForceLocalAngle
.
-
amifrozen
:- Returns whether the player is frozen or not. (use
freezelevel
as well to test this). - Tests
P_MobjIsFrozen
.
- Returns whether the player is frozen or not. (use
-
freezelevel (true/false)
:- Freezes the level or not.
- Examples:
freezelevel true
,freezelevel false
. - Tests
P_SetFreezeLevel
.
-
flipfrommaster (node)
:- Makes a player take on the calling player's flip status.
- Example:
flipfrommaster 1
,flipfrommaster 2
. Usegravflip
and then use this function for the best results. - Tests
K_FlipFromObject
.
-
matchgenericflags (node)
:- Makes a player take on the calling player's generic extra flags.
- Examples:
flipfrommaster 1
,flipfrommaster 2
. Usegravflip
and then use this function for the best results. - Tests
K_GenericExtraFlagsNoZAdjust
.
-
removegrowshrink
:- Removes the grow/shrink status from the player. Use
give grow
, use Grow and then useremovegrowshrink
for best results. - Tests
K_RemoveGrowShrink
.
- Removes the grow/shrink status from the player. Use
-
checkstumble (pitch) (roll) (fromAir)
:- Checks whether the player would stumble from the values given.
- Example:
checkstumble 90 0 true
. - Tests
K_CheckStumble
.
-
checkplayersrespawncollide [node]
:- Check whether respawning where a player is would make them collide.
- Examples:
checkplayersrespawncollide
,checkplayersrespawncollide 1
. - Tests
K_CheckPlayersRespawnColliding
.
-
dropkartitem [type] [amount]
:- Drops a paper kart item from the player's position.
- Examples
dropkartitem
,dropkartitem 6 3
. - Tests
K_DropPaperItem
.
-
droprocketsneakers
:- Drops a player's rocket sneakers, if they have them. Do
give rocketsneakers
, deploy the Rocket Sneakers, then usedroprocketsneakers
for the best results. - Tests
K_DropRocketSneaker
.
- Drops a player's rocket sneakers, if they have them. Do
-
dropkitchensink
:- Drops a player's kitchen sink, if they have one. Do
give kitchensink
, deploy the Kitchen Sink, then usedropkitchensink
for the best results. - Tests
K_DropKitchenSink
.
- Drops a player's kitchen sink, if they have one. Do
-
kartspeedfromstat
:- Prints the kart speed from the specific speed stat.
- Examples:
kartspeedfromstat 1
,kartspeedfromstat 9
. - Tests
K_GetKartSpeedFromStat
.
-
updateshrinkme
:- Updates the player's
shrinkme
status and prints it on the console. Doshrinkme
then useupdateshrinkme
for the best results. - Tests
K_UpdateShrinkCheat
.
- Updates the player's
-
setitemout
:- Sets the player's "item out" status and prints it.
- Example:
setitemout
. - Tests
K_SetItemOut
.
-
unsetitemout
:- Unsets the player's "item out" status and prints it.
- Example:
unsetitemout
. - Tests
K_UnsetItemOut
.
-
makemereappear
:- Acts as if the player got punted.
- Example:
makemereappear
. - Tests
K_MakeObjectReappear
.
-
bumperinflate
:- Acts as if the player has bumpers and are being inflated.
- Example:
bumperinflate
. - Tests
K_BumperInflate
.
-
isduelitem (value)
:- Prints if a specific object is considered a duel item.
- Example:
isduelitem MT_ORBINAUT
,isduelitem MT_BANANA
. - Tests
K_IsDuelItem
.
-
- The script has a
MobjMoveCollide
hook that does the following:- When a player bonks on something, it prints the mobj's weight (
K_GetMobjWeight
). - When a player bonks into another player, it uses
K_KartBouncing
and uses its return value, then compares if they're bigger or not usingK_IsBigger
.
- When a player bonks on something, it prints the mobj's weight (
Changelog
- Lua:
K_KartBouncing
now has return value and INLEVEL check. - Lua: Exposed
boolean K_IsDuelItem(mobjtype_t type)
- Lua: Exposed
fixed_t K_GetMobjWeight(mobj_t mobj, mobj_t against)
- Lua: Exposed
fixed_t K_GetKartGameSpeedScalar(SINT8 value)
- Lua: Exposed
angle_t K_ReflectAngle(angle_t angle, angle_t against, fixed_t maxspeed, fixed_t yourspeed)
- Lua: Exposed
void P_SetPlayerAngle(player_t player, angle_t angle)
- Lua: Exposed
void P_ForceLocalAngle(player_t player, angle_t angle)
- Lua: Exposed
boolean P_MobjIsFrozen(mobj_t mobj)
- Lua: Exposed
void P_SetFreezeLevel(boolean value)
- Lua: Exposed
boolean P_MobjIsFrozen(mobj_t mobj)
- Lua: Exposed
void K_FlipFromObject(mobj_t mo, mobj_t master)
- Lua: Exposed
void K_GenericExtraFlagsNoZAdjust(mobj_t mo, mobj_t master)
- Lua: Exposed
boolean K_PressingEBrake(player_t player)
- Lua: Exposed
angle_t K_MomentumAngleEx(mobj_t mo, fixed_t threshold)
- Lua: Exposed
angle_t K_MomentumAngleReal(mobj_t mo)
- Lua: Exposed
angle_t K_MomentumAngle(mobj_t mo)
- Lua: Exposed
void K_RemoveGrowShrink(player_t player)
- Lua: Exposed
boolean K_IsBigger(mobj_t compare, mobj_t other)
- Lua: Exposed
angle_t K_StumbleSlope(angle_t angle, angle_t pitch, angle_t roll)
- Lua: Exposed
boolean K_CheckStumble(player_t player, angle_t oldPitch, angle_t oldRoll, boolean fromAir)
- Lua: Exposed
boolean K_CheckPlayersRespawnColliding(player_t player, fixed_t x, fixed_t y)
- Lua: Exposed
void K_DropPaperItem(player_t player, UINT8 itemtype, UINT16 itemamount)
- Lua: Exposed
void K_DropRocketSneaker(player_t player)
- Lua: Exposed
void K_DropKitchenSink(player_t player)
- Lua: Exposed
boolean K_ApplyOffroad(player_t player)
- Lua: Exposed
boolean K_SlopeResistance(player_t player)
- Lua: Exposed
fixed_t K_PlayerTripwireSpeedThreshold(player_t player)
- Lua: Exposed
tripwirepass_t K_TripwirePassConditions(player_t player)
- Lua: Exposed
boolean K_TripwirePass(player_t player)
- Lua: Exposed
boolean K_MovingHorizontally(mobj_t mobj)
- Lua: Exposed
boolean K_WaterRun(mobj_t mobj)
- Lua: Exposed
boolean K_WaterSkip(mobj_t mobj)
- Lua: Exposed
boolean K_IsRidingFloatingTop(player_t player)
- Lua: Exposed
boolean K_IsHoldingDownTop(player_t player)
- Lua: Exposed
mobj_t K_GetGardenTop(player_t player)
- Lua: Exposed
INT16 K_GetSpindashChargeTime(player_t player)
- Lua: Exposed
fixed_t K_GetSpindashChargeSpeed(player_t player)
- Lua: Exposed
fixed_t K_GrowShrinkSpeedMul(player_t player)
- Lua: Exposed
fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed)
- Lua: Exposed
boolean K_PlayerShrinkCheat(player_t player)
- Lua: Exposed
void K_UpdateShrinkCheat(player_t player)
- Lua: Exposed
boolean K_KartKickstart(player_t player)
- Lua: Exposed
SINT8 K_GetForwardMove(player_t player)
- Lua: Exposed
fixed_t K_GetNewSpeed(player_t player)
- Lua: Exposed
fixed_t K_3dKartMovement(player_t player);
- Lua: Exposed
boolean K_PlayerEBrake(player_t player)
- Lua: Exposed
SINT8 K_Sliptiding(player_t player)
- Lua: Exposed
fixed_t K_PlayerBaseFriction(player_t player, fixed_t original)
- Lua: Exposed
fixed_t K_DefaultPlayerRadius(player_t player)
- Lua: Exposed
fixed_t K_ItemScaleForPlayer(player_t player)
- Lua: Exposed
void K_SetItemOut(player_t player)
- Lua: Exposed
void K_UnsetItemOut(player_t player)
- Lua: Exposed
tic_t K_TimeLimitForGametype()
- Lua: Exposed
UINT32 K_PointLimitForGametype()
- Lua: Exposed
boolean K_Cooperative()
- Lua: Exposed
boolean K_isPlayerInSpecialState(player_t p)
- Lua: Exposed
boolean K_IsPlayingDisplayPlayer(player_t player)
- Lua: Exposed
boolean K_PlayerCanPunt(player_t player)
- Lua: Exposed
void K_MakeObjectReappear(mobj_t mo)
- Lua: Exposed
void K_BumperInflate(player_t player)
- Lua: Exposed
boolean K_ThunderDome()
- Lua: Exposed
boolean K_PlayerCanUseItem(player_t player)
Edited by JugadorXEI