Skip to content

Expose VFX and visual functions from k_kart.c to Lua

Summary

This MR adds exposes nearly all VFX functions from the k_kart.c file for Lua to use. It also fixes K_SpawnSparkleTrail crashing if used in a non-player mobj, and adds an INLEVEL check to K_DoInstashield.

The functions exposed are:

  • int K_GetPlayerDontDrawFlag(player_t player)
  • void K_KartPainEnergyFling(player_t player)
  • void K_SpawnDashDustRelease(player_t player)
  • void K_SpawnDriftBoostClip(player_t player)
  • void K_SpawnDriftBoostClipSpark(mobj_t clip)
  • void K_SpawnNormalSpeedLines(player_t player)
  • void K_SpawnGardenTopSpeedLines(player_t player)
  • void K_SpawnInvincibilitySpeedLines(mobj_t mobj)
  • void K_SpawnBumpEffect(mobj_t mobj)
  • void K_SpawnLandMineExplosion(mobj_t mobj, skincolornum_t color, tic_t delay)
  • void K_MineFlashScreen(mobj_t source)
  • void K_SpawnDraftDust(mobj_t mobj)
  • void K_SpawnMagicianParticles(mobj_t mobj, INT32 spread)
  • void K_Squish(mobj_t mobj)
  • int K_DriftSparkColor(player_t player, INT32 charge)
  • int K_StairJankFlip(INT32 value)
  • void K_SpawnDriftBoostExplosion(player_t player, UINT8 stage)
  • void K_SpawnDriftElectricSparks(player_t player, skincolornum_t color, boolean shockwave)
  • void K_SpawnWaterRunParticles(mobj_t mobj)
  • int K_GetInvincibilityItemFrame()
  • int K_GetOrbinautItemFrame(UINT8 count)
  • void K_UpdateMobjItemOverlay(mobj_t part, SINT8 itemType, UINT8 itemCount)

Testing

Demonstration:

ringracers0628

Testing environment: ringracers_visualFunctionsLua.exe -console -skipintro -warp RR_TESTRUN +addfile vfxfuncs.lua

I used a script, vfxfuncs.lua, to test all functions. Namely:

  • dontdrawflag: tests K_GetPlayerDontDrawFlag by printing each display player's DONTDRAW flag.
  • painenergyfling: runs K_KartPainEnergyFling on the player.
  • dashdustrelease: runs K_SpawnDashDustRelease on the player.
  • driftboostclip: runs K_SpawnDriftBoostClip on the player.
  • driftboostclipspark: runs K_SpawnDriftBoostClipSpark on the player's mobj.
  • normalspeedlines: runs K_SpawnNormalSpeedLines on the player.
  • gardentopspeedlines: runs K_SpawnGardenTopSpeedLines on the player.
  • invincibilityspeedlines: runs K_SpawnInvincibilitySpeedLines on the player's mobj.
  • bump: runs K_SpawnBumpEffect on the player's mobj.
  • spawnlandmineexplosion [delay]: runs K_SpawnLandMineExplosion on the player. Optionally, a value can be set to change the explosion delay, defaults to 0.
  • mineflash: runs K_MineFlashScreen on the player's mobj.
  • draftdust: runs K_SpawnDraftDust on the player's mobj.
  • magiparticles [spread]: runs K_SpawnMagicianParticles on the player's mobj. Optionally, a value can be set to change the spread of the particles, defaults to 5.
  • squishier: runs K_Squish on the player, as well as making the player squisher-looking. Run the command again to disable it.
  • wobble: runs K_StairJankFlip on the player's sprite offsets every tic. Run the command again to disable it.
  • dbexplosion [stage]: runs K_SpawnDriftBoostExplosion on the player. Optionally, a value can be set to change the drift boost stage, from 0 to 4. Defaults to 0.
  • electricsparks [stage] [shockwave]: runs K_SpawnDriftElectricSparks on the player. Optionally, a value can be set to change the color of the sparks, and a boolean can be set (true, false) to enable the shockwave effect. Defaults to 1 and false respectively.
  • waterrunparticles: runs K_SpawnWaterRunParticles on the player's mobj.
  • orbinautitemframe [value]: prints the value from K_GetOrbinautItemFrame depending on the input given, defaults to 1.
  • updatemobjitemoverlay [itemtype] [itemcount]: runs K_UpdateMobjItemOverlay on the player, giving the player flags based on the values given. Defaults to 0 and 0 respectively.
  • In addition, the HUD displays values related to K_DriftSparkColor and K_GetInvincibilityItemFrame respectively.

Changelog:

  • Lua: Fixed K_SpawnSparkleTrail crashing when it is used on a non-player mobj.
  • Lua: Added INLEVEL check to K_DoInstashield.
  • Lua: Exposed int K_GetPlayerDontDrawFlag(player_t player)
  • Lua: Exposed void K_KartPainEnergyFling(player_t player)
  • Lua: Exposed void K_SpawnDashDustRelease(player_t player)
  • Lua: Exposed void K_SpawnDriftBoostClip(player_t player)
  • Lua: Exposed void K_SpawnDriftBoostClipSpark(mobj_t clip)
  • Lua: Exposed void K_SpawnNormalSpeedLines(player_t player)
  • Lua: Exposed void K_SpawnGardenTopSpeedLines(player_t player)
  • Lua: Exposed void K_SpawnInvincibilitySpeedLines(mobj_t mobj)
  • Lua: Exposed void K_SpawnBumpEffect(mobj_t mobj)
  • Lua: Exposed void K_SpawnLandMineExplosion(mobj_t mobj, skincolornum_t color, tic_t delay)
  • Lua: Exposed void K_MineFlashScreen(mobj_t source)
  • Lua: Exposed void K_SpawnDraftDust(mobj_t mobj)
  • Lua: Exposed void K_SpawnMagicianParticles(mobj_t mobj, INT32 spread)
  • Lua: Exposed void K_Squish(mobj_t mobj)
  • Lua: Exposed int K_DriftSparkColor(player_t player, INT32 charge)
  • Lua: Exposed int K_StairJankFlip(INT32 value)
  • Lua: Exposed void K_SpawnDriftBoostExplosion(player_t player, UINT8 stage)
  • Lua: Exposed void K_SpawnDriftElectricSparks(player_t player, skincolornum_t color, boolean shockwave)
  • Lua: Exposed void K_SpawnWaterRunParticles(mobj_t mobj)
  • Lua: Exposed int K_GetInvincibilityItemFrame()
  • Lua: Exposed int K_GetOrbinautItemFrame(UINT8 count)
  • Lua: Exposed void K_UpdateMobjItemOverlay(mobj_t part, SINT8 itemType, UINT8 itemCount)

Merge request reports

Loading