ReSkate mods / MSC_Midnight_Skate_Club

MSC Fireball

MSC Fireball multiplayer trick-triggered projectile battles, lives and power-ups with native Throwdown card and MSC activity rewards.

by MSC_Midnight_Skate_Club · v0.1.7 · 1 MB · 89 downloads · updated Oct 28, 2026

How to installDownload .zip (v0.1.7)Thunderstore page

MSC Fireball icon

From the author's README on Thunderstore

STILL WIP THIS MAY CONTAIN BUGS AND IS NOT A FINAL VERSION!

MSC Fireball is a ReSkate Luau multiplayer minigame. Complete a trick-stick flick and pop off the ground to fire travelling fireballs; shoot opponents off their boards, collect power-ups and survive with the most lives. It has a separate MSC lobby, match HUD, countdown and five-second results screen. It does not change ordinary ReSkate Throwdowns.

Install

Install the MSC_Fireball folder from the release ZIP:

  • Clients: ReSkate/Mods/MSC_Fireball/
  • Dedicated server: your ReSkate server's Plugins/MSC_Fireball/ directory.

Install the same version on the server and all participating clients. The dedicated server must support ReSkate Luau plugins and be running an MSC wallet bridge for MSC points payouts. The minigame itself needs no additional native DLL.

Host a game

Open Throwdowns → MSC Fireball or Insert → MSC Fireball. Set the number of players, round time, lives, and power-ups; then place a marker at your position. Press E / X to place it; Backspace / B cancels placement. Other players skate to your marker and press E / X to join. At least two players must join before the host can select START MSC FIREBALL. The server runs a 3, 2, 1, GO countdown. At match start, each enrolled player is teleported to the Fireball flag (assuming the client has the plugin and the skater is loaded).

The native Throwdowns card is only the way into this private custom lobby. The game's server manages its own match and results; it does not register an ordinary active native Throwdown.

Fireball controls and rules

  • Tail-pop trick-stick flick: fire forwards once the game confirms the skater has popped into the air. Flicking while still preparing a trick will not fire; landing the trick is not required.
  • Nose pops and plain ollies: do not fire. A valid tail-based flip/shuv flick with lateral stick travel fires only forwards, following a real pop.
  • Holding the stick does not fire repeatedly. A deliberate flick is queued until a real launch event confirms the pop; it does not depend on the airborne flag changing in the same tick. Additional distinct flicks can fire during the jump. Fast qualifying flicks can wait briefly for the 350 ms shot window instead of being lost.
  • A confirmed hit removes one life, applies an on-board knockback impulse (subject to server boost permissions) then requests a local bail on the victim's client, and grants about 3.5 seconds of hit protection. Triple Shot cannot cost three lives with one impact.
  • Fireballs start near the skateboard but travel in the skater's world-facing direction (skater.heading), independent of how the deck rotates during tricks. Clients align visual trajectories to server time and periodic server position corrections; only the server adjudicates hits.
  • The last surviving skater wins. If the match timer runs out, more lives wins, followed by KOs and confirmed hits. A tie/no combat has no single winner.
  • Start / Options opens the match/quit interface; Insert → MSC Fireball also offers match controls. The host may end a match, but doing so cancels all payouts. While a round is active, Return to Fireball Start in the match menu sends you back to the Fireball flag, with a 12-second cooldown. The game's separate native Return to Marker position cannot be set by a Luau plugin and remains unchanged.

Hearts over skaters

During Fireball matches, other participants show remaining lives above their native ReSkate nametags, using the same reskate.session.tag() API that MSC Tag uses for its IT marker. It supports printable ASCII (16 characters maximum), so hearts appear as <3 <3 <3 for three lives, or a compact <3 xN when more than five remain. Following a confirmed hit, one briefly appears broken as </3, and a cracked graphical heart falls near the skater. The game cannot position custom graphical icons at the exact native nametag anchor using the current Luau API. Your own remaining lives continue to appear in the Fireball HUD; native life tags disappear on leaving the match.

Power-ups

Power-ups are ON by default, and the host can turn them OFF. The host's client samples the ground around the flag to create up to six pickup positions. If that location has no valid nearby ground raycast hits, no pickups will appear at that spot; try another flag location.

  • Rapid Fireball: fireballs travel faster for 12 seconds.
  • Triple Shot: one trick input creates three angled fireballs for 12 seconds.
  • Speed Boost: faster rolling for 8 seconds. ReSkate may reject this if the session host has disabled boosts.

Power-ups spawn at the start and respawn 15 seconds after collection. A player carries one effect at a time; collecting another replaces it. Effects are cleared when a match ends or a player is eliminated.

MSC rewards

Server-side MSC wallet payouts reuse the existing reskate.server.msc_skate_reward interface. A naturally completed round must have two or more enrolled participants, at least one legitimate combat hit, and exactly one winner; it offers 100 MSC per other player enrolled at match start. No rewards are issued on manual cancellation, premature departure, idle rounds or ties. Reward status is displayed only after the wallet bridge confirms payment. The MSC wallet bridge is not provided by this plugin.

Known requirements and limits

This is an initial 0.1.6 test build, not a live-verified release. The Luau source passes syntax checks and mock multiplayer/input tests, but in-game calibration and live multiplayer testing are required before public deployment.

  • Confirm firing direction follows the skater heading when the board spins or rotates. Shots are never driven by the deck heading.
  • Confirm each participating client accepts the match-owned start teleport, including when the server has general teleporting disabled. The game cannot overwrite ReSkate's separate native Return to Marker.
  • Confirm the documented launch event and airborne transition across normal and grind pops, and validate trick-stick gesture thresholds across regular, goofy, switch, fakie and flip/shuvit inputs. The implementation detects the deepest initial stick pole followed by a deliberate outward flick; unusual gesture patterns and device-specific deadzones still require live testing.
  • The server validates projectile sweeps against moving skater position samples; player-body raycasts and map collision are client-side. The shooter's world.probe checks from its last confirmed-clear point; unavailable queries are retried without skipping untested distance. Hits near visible skaters are ambiguous and not reported as definite walls. Dedicated-server map-collision verification is still unavailable. Projectile hit registration under latency requires testing.
  • The server cannot independently prove which physical trick input occurred. It validates membership, rate, position, range, active power-up rules and forward-only firing, but a modified client could fabricate qualifying shots.
  • reskate.skater.wipeout() can be refused during a native Throwdown and can be suppressed by No Bail. MSC Fireball releases its native registration, but real multiplayer testing must establish that forced bails happen for participants with normal bail settings. The server remains authoritative for life deductions.
  • Speed Boost requires that the session host allow boosts. The UI reports rejection if ReSkate denies the cruise request.
  • MSC points require a compatible MSC wallet bridge. Mock tests cannot prove production bridge acceptance.

Files

plugin/main.lua selects client/server. player.lua manages private lobby and controls; hearts.luau provides Tag-based nametag life labels and falling damage feedback; combat.luau handles input, local rendering and local forced wipeouts; server.lua owns rooms, lives, pickups, scoring and payouts; projectiles.luau handles server projectile trajectories and collision checks. network.luau, lobby_menu.luau, hud.luau, spawn.luau, and flag.luau reuse the proven MSC game architecture.

Audio

The packaged original sounds/fireball-fire.wav and sounds/fireball-hit.wav play on shot release and confirmed impacts, respectively. ReSkate limits each plugin to eight simultaneous sounds and twenty starts per second.

v0.1.6 world probe wall validation

  • Use world.probe for shooter-side scenery obstruction, with distinct clear, hit and unavailable results.
  • Catch up from the server-accepted muzzle after delayed shot acknowledgement; no unchecked initial travel gap.
  • Retry unavailable intervals rather than assuming a clear path; log sustained failures sparingly.
  • Avoid falsely classifying proximity to skaters as definite wall hits; server remains authoritative for damage.
  • Preserve existing client/player damage rules, lobby, rewards, power-ups, sounds and gestures.

v0.1.5 firing reliability

Flick detection accepts diagonal starts and keeps the gesture alive briefly through neutral, while still excluding plain vertical ollies. A confirmed launch event permits firing without requiring the separate airborne state to update in the same frame. Server acceptance allows bounded position/heading latency; the client logs a MSC Fireball shot #... rejected: ... line if the server explicitly refuses a shot. Logs help separate an input-detection issue from a server rejection. Real controllers and remote network conditions still need testing.

Install MSC Fireball

You need ReSkate and your own copy of skate. on Steam.

  1. Open ReSkateLauncher.exe and go to MODS.
  2. Search for MSC Fireball and click install. The launcher also installs anything it depends on.
  3. Press PLAY. In game, the MODS tab of the ReSkate menu (Insert) turns it on and off.

Or install it by hand: download the .zip and drop it on the launcher window, or unzip it into its own folder in Mods\ beside Skate.exe.

Maps show up in the ReSkate menu's level list. To join a server running a custom map, you need the same map installed. If the game won't load after installing, see known issues.

skatemods doesn't host or review this mod. The download comes straight from Thunderstore. Only install mods you trust, because scripts can run code.