01 / Space
Gravity Dash
ReleasedA gravity-changing runner with connected race courses, Lucky Block power-ups, a currency shop, and collectible cosmetics.
Playback is unavailable. Open the original capture.
I made these hobby projects independently, including the builds, UI, gameplay, and supporting code. Libraries and adapted techniques are credited where relevant.
Run across walls, then make the character your own
Race through connected rooms as gravity changes, grabbing power-ups from Lucky Blocks, from homing projectiles to thrown bombs. Away from the course, spend in-game currency on rotating crates and manage collected cosmetics.
How changing gravity affects the game
The game checks nearby surfaces, decides which way is down, and updates movement and animation. Connected course rooms share a common way to measure progress.
- 01 / Check nearby surfacesCombine the directions of nearby surfaces to determine gravity.
- 02 / Update the characterUse that gravity direction for movement, orientation, and animation.
- 03 / Connect the courseAlign room entrances and exits, then record progress along the route.
A simplified explanation based on the project code.
Custom movement, generated courses, and the features around the race.
Movement and generated courses
Run along floors, walls, and ceilings through courses assembled from connected rooms.
Power-ups and abilities
Lucky Blocks along the course hand out twelve power-ups, from bombs and forced gravity flips to shields, invisibility, and speed boosts. The odds shift with race position, favoring catch-up items for players at the back.
Projectiles
Homing shots lock on to a racer near your aim, curve toward them along an arc that bends with your current gravity, and follow them as they move. Bombs are thrown to a landing point. Players being aimed at get an on-screen warning that grows more urgent as the shot closes in.
Currencies, shop, and cosmetics
A coins-and-keys economy connects the shop, rotating cosmetic crates, and player inventory.
Saved player profiles
Cosmetic and progression changes share a saved player profile.
MORE FROM THE GAME
Short gameplay demonstrations
Playback is unavailable. Open the original capture.

Playback is unavailable. Open the original capture.
Have a feature in mind?
Tell me what you want players to be able to do. I can discuss the implementation and answer detailed questions about this project.
Discuss your project ↗How it works — optional technical details
01 / IMPLEMENTATION
Movement and animation on different surfaces
The character’s movement and animations follow its changing sense of down.
Reviewed in project codeTechnical details
The controller consumes combined surface normals and drives a custom VectorForce / BodyGyro rig. StateTracker projects velocity onto the current gravity axis to distinguish running, jumping, and free fall. Exclusion tags keep solid containment geometry from accidentally redirecting gravity; round boundaries explicitly reset the controller.
Limitations
The surface-sampling technique is adapted from a credited DevForum example. The work shown here is the controller built around it: switching between surfaces, resetting cleanly and handling the edge cases.
02 / IMPLEMENTATION
Building connected race courses
Room layouts connect to form courses with changes in direction and elevation.
Reviewed in project codeTechnical details
Entrance and Exit transforms align consecutive room templates. StartArc, RoomLength, and CheckpointArc let progress, checkpoints, and culling share a monotonic arc coordinate. An occupancy guard prevents culling a room containing a living player. seedFromExisting can reconstruct an unordered room chain through greedy position/orientation matching.
Limitations
Rebuilding the room chain is verified in the code. No generation-speed or performance figures are claimed.
03 / IMPLEMENTATION
Homing shots and thrown bombs
Homing shots curve toward a locked target and follow it as it moves, bombs are thrown to a landing point, and only the players being aimed at see a warning.
Reviewed in project codeTechnical details
TargetingSystem locks on to the candidate nearest the aim point, inside a screen radius that shrinks with distance, after range, line-of-sight, visibility, and health checks. BezierProjectile flies a quadratic Bezier whose control point is recomputed every frame from the target's current position, so the arc bends to follow a moving target; the arc's offset is built from the thrower's current gravity direction rather than world up, and it flattens as the shot closes in. The Homing Projectile and the Gravity Distortion attack share this path, and an unlocked Homing Projectile travels straight with a swept raycast each frame. For other players, the power-up companion flies the same trajectory, timed from the server clock. Hostile trajectories are tagged on the server: homing shots warn only the locked target and bombs warn players near the landing point, through an indicator that tracks the projectile, pins to the screen edge when it is off-screen, and intensifies as it closes.
Limitations
Hits are detected on the thrower’s side. The server checks every claimed hit (a live round, range, damage amount, a per-target cooldown and a matching power-up grant) but does not re-simulate the flight or re-check line of sight at impact.
04 / IMPLEMENTATION
Authorizing power-ups on the server
Bombs, gravity flips, shields, and invisibility behave normally; the checks behind them are invisible.
Reviewed in project codeTechnical details
CombatAuthService treats a server-observed Tool.Activated as the root of authority, because a client cannot fire that server-side event by calling a remote. Each real activation mints short-lived grants scoped to one tool and one character instance, so they do not survive a respawn. Damage grants are payload-locked: the requested damage, stagger, and damage type must match the profile of the tool that minted them. Buffs such as invisibility and shields are applied and expired by the server. Cosmetic effect broadcasts draw on a separate budget, so visual effects cannot be spammed at other players through the effects remote.
Limitations
This limits what a modified client can trigger, but it is not a complete anti-cheat. Grants are budgeted per activation with a cap on stacking, rather than tied to one specific hit.
Attribution. The surface-detection method is adapted from EmilyBendsSpace’s DevForum gravity-controller example. My work here covers integrating that method with movement, animation, and the rest of the game.
NEXT PROJECT / Time