Josh Creek 3d6906b981 feat(multiplayer): Phase 5 tasks 5.2-5.5 - clock, kickoff, goals, full time
Implements the rest of the §6.2 lifecycle on top of 5.1's state machine.

5.3 kickoff: the server resets every body and broadcasts the RESULTING
transforms, never a seed - §1's locked decision, because shared-seed
determinism needs both sides to consume the RNG stream in identical
order forever and the first randf() added to the reset path desyncs
silently. Countdown is derived from server_tick on both peers, and a
kickoff that lands after its own resume tick applies immediately and
skips the countdown rather than scheduling into the past.

5.4 goals: goal_scored(scoring_team, score, goal_tick, resume_tick).
Score is authoritative at sensor time, before any presentation. The
reset moved OUT of the sensor path and into the kickoff at resume_tick,
which is what stops the server resetting while clients are still
mid-celebration. Engine.time_scale is never touched.

5.2 clock: tick-derived, no Timer and no _process polling. The goal
pause shifts the absolute end_tick by (resume_tick - goal_tick) rather
than pausing anything, so no float drift accumulates across goals.

5.5 full time: clock expiry -> FULL_TIME -> sudden death on a draw or
RESULTS, golden goal in overtime, then LOBBY on both peers - clients
return to the lobby, not the main menu. get_tree().paused is never used.

Four bugs found and fixed while building this, each by a failing run
rather than by inspection:

- Tick order was load-bearing: _update_kickoff_countdown() clears the
  same _kickoff_resume_tick that _update_match_state() reads to leave
  WARMUP, so running the countdown first wiped the transition condition
  and the match sat frozen in WARMUP forever.
- _apply_match_state resets _state_deadline_tick on every transition, so
  a GOAL_PAUSE deadline assigned before _set_match_state was wiped and
  the match never resumed. Deadlines are now owned by _apply_match_state.
- Freezing "all bodies" is wrong on a client. Remote ships and the ball
  are permanently FREEZE_MODE_KINEMATIC and transform-driven; freezing
  them all unfroze the remote ones on the way back out, so they fell
  under gravity while the interpolator fought them - 210 hard snaps and
  an infinite p99. A client now freezes only the one body it simulates.
- A frozen body never runs _integrate_forces, so the queued kickoff
  teleport was stranded by an immediate set_deferred("freeze", true).
  Freeze now happens on a strictly later tick, the same pattern Phase 2
  used for _pending_reset_gen_bump_tick.

Prediction and reconciliation are suspended while the match is not live:
during a countdown or goal pause the local ship is frozen on both peers,
and running delta transport over those frozen states produced a p95
position error of 2.4e10 m. Input keeps flowing so the server's jitter
buffer does not starve into `stalled`.

Also fixed: a kickoff can arrive before match_config, and body order is
slot order - applying it early placed the BALL at positions[0], on top
of the first ship, which the ball-cam reported as "target vector can't
be zero" 95 times. It is now held until the roster exists.

Test changes: the ball-contact scenario steered by a hand-tuned fixed
heading, which 5.3 broke because kickoff applies KICKOFF_YAW_JITTER - it
flew past the ball in 3/3 runs. It now closes the loop on the actual
bearing using real input actions. Assertions that read a frozen ship
(freeze, thrust) are gated on the match being live, and the hooks now
survive the scene teardown at RESULTS instead of hanging on freed
objects for the full timeout.

Regression: 81 unit tests; free-flight LAN p99 0.143m and 80±20ms, both
0 hard snaps; transition gate 0.00%; ball contact 3/3; two-bot CI.
2026-08-21 10:01:39 +01:00

Cosmic Clash

In "Cosmic Clash," the heart-pounding action takes place in variable gravity environments where vehicles hover just above the ground. In this thrilling spiritual successor to Rocket League, players engage in high-speed, gravity-defying matches set in the far reaches of space. Each pitch is situated in a unique environment or planet, offering breathtaking vistas and challenging terrain. But instead of cars, competitors pilot rocket-powered ships, each equipped with its own set of customisable features and special abilities.

Ships hover just above the ground, defying the laws of physics and adding an extra layer of intensity to the gameplay. With no friction to hold them back, players must master the art of control as they glide effortlessly across the pitch, executing precise manoeuvres and lightning-fast aerial tricks. With precise control and lightning-fast reflexes, players boost, drift, slam and even turn upside down on their way to victory, scoring epic goals against their opponents.

Whether you're soaring through asteroid fields, navigating treacherous alien landscapes, or battling in the depths of cosmic storms, "Cosmic Clash" delivers non-stop action and adrenaline-pumping excitement that's out of this world! Get ready to take your skills to the stars and dominate the galaxy in the ultimate celestial showdown!

Reason for being

Since Epic Games bought Psyonix, Rocket League has never been the same, and rather than releasing an Unreal Engine 5 version of the game, or giving any meaningful updates, instead item trading was removed and 'Rocket Racing' was added to Fortnite. With no one else stepping up to the plate, it falls to the Open Source Community to come up with a spiritual successor, to keep the spirit of the game alive.

Legality

The concept of 'vehicle soccer' cannot be copyrighted, but the original expression of ideas such as the specific code, art, music and narrative of a game can be. So long as all code, assets game design and other elements are made from scratch, this project will remain legal. The use of an alternative game engine, Godot, serves to ensure that this is achieved, as does the move to using space ships instead of cars as the vehicles.

Technical Information

This project is composed of two parts:

  1. Godot game
  2. C# backend

Contributing

Eventually there will be contributor guidelines, but for now open a PR and make sure it has been formatted according to the auto-formatting rules.

Gameplay

The core gameplay is still football/soccer but with vehicles, however there are key changes to the format used in Rocket League. The vehicles are now space ships, which hover above the surface of the pitch. This will impact core game mechanics, enabling near-immediate changes in direction (thanks to those spacefaring engines!), the ability to play upside down (which will change the way you interact with the ball in as-yet unknown ways), slamming down at full boost speed, and many more that will be discovered along the way.

Bots

There will be default bots available, trained using reinforcement learning, and it will be possible to train your own using a gym for submission to be included in the game itself. It will NOT be possible to connect bots to the game, and with the community itself ensuring rigorous anti-cheat measures are in place we will aim to keep it that way. Cheaters have no place here.

MVP

The first version of this game will be JUST the game, no server-side functionality at all. It will be a local only game where you can play against bots. Split-screen multiplayer could be added in a version 0.2 if demand is high enough. If there is sufficient interest then the server-side functionality can be added to enable online play, with a system in place to ensure that servers can be paid for (perhaps a cheap monthly subscription model?).

Monetisation

The aim for this project is NOT to monetise it. Rocket League saw terrible changes once the Item Shop was added, and even the costs for crates and keys prevented some members of the community from collecting items and fully enjoying the game. Instead, this game will, if it becomes successful enough to warrant online servers, only use funding to keep itself running, and in the event anyone needs to be employed full time to maintain it with a growing playerbase, to pay them a fair wage for their time. Any additional profit in any given year should be held for maintaining servers in the future should demand fall, or for any future needs of the game such as a large effort to upgrade to a new engine, anti-cheating measures, etc.

S
Description
No description provided
Readme AGPL-3.0 4.8 GiB
Languages
GDScript 80.4%
Python 15.2%
Shell 1.9%
GDShader 1.5%
C# 0.8%
Other 0.2%