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.
funchelperhuddebugcontrols whether it displays nothing, the first or second page (asfunchelperhuddebug 0,funchelperhuddebug 1andfunchelperhuddebug 2respectively.-
funchelperhuddebug 1displays 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_GetSpindashChargeTimeandK_GetSpindashChargeSpeed. -
funchelperhuddebug 1displays 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_ThunderDomeandK_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.
maxspeedandyourspeedare optional. - Example:
reflectangle 45 90orreflectangle 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
freezelevelas 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. Usegravflipand 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. Usegravflipand 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 useremovegrowshrinkfor 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 usedroprocketsneakersfor 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 usedropkitchensinkfor 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
shrinkmestatus and prints it on the console. Doshrinkmethen useupdateshrinkmefor 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
MobjMoveCollidehook 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_KartBouncingand 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_KartBouncingnow 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

