Skip to content

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

Some pictures: ringracers0472 ringracers0474

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 (as funchelperhuddebug 0, funchelperhuddebug 1 and funchelperhuddebug 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 and K_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 and K_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.
    • reflectangle (angle) (against) [maxspeed] [yourspeed]:
      • Prints the reflected angle between the first and second angle set. maxspeed and yourspeed are optional.
      • Example: reflectangle 45 90 or reflectangle 45 90 60 120.
      • Tests K_ReflectAngle.
    • 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.
    • 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. Use gravflip 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. Use gravflip 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 use removegrowshrink for best results.
      • Tests K_RemoveGrowShrink.
    • 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 use droprocketsneakers for the best results.
      • Tests K_DropRocketSneaker.
    • dropkitchensink:
      • Drops a player's kitchen sink, if they have one. Do give kitchensink, deploy the Kitchen Sink, then use dropkitchensink for the best results.
      • Tests K_DropKitchenSink.
    • 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. Do shrinkme then use updateshrinkme for the best results.
      • Tests K_UpdateShrinkCheat.
    • 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 using K_IsBigger.

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

Merge request reports

Loading