A second adversarial review (this one able to RUN things, unlike the first) reproduced five defects. Fixing the critical and high ones. CRITICAL - Esc no longer left a networked match, and a client whose server vanished was stranded forever. Two independent bugs composing: _unhandled_input (added for spectator target cycling) overrode GameMode._unhandled_input and returned early for every non-spectator without ever calling super(), silently killing ui_cancel -> main menu; and NetworkedMatch never connected NetworkManager.disconnected_from_ server the way lobby.gd does. Measured: a client whose host exited emitted 7,235 engine errors in ~18s and only left because a test timer fired. Now 1 benign teardown error, and it returns to the main menu. HIGH - the match clock lost up to 3 seconds of regulation per goal. _on_goal_registered extended end_tick by the celebration only (resume_tick - goal_tick) and never by the 180-tick kickoff countdown that follows it, while _update_clock derived remaining time from the current tick regardless of _clock_running - so regulation drained during every stoppage. Measured 660 PLAYING ticks for a 14s match against 840 expected: exactly one WARMUP lost. The HUD also opened at 0:17 for a 14s match because the initial arm folded WARMUP into end_tick. Replaced the per-goal arithmetic with bank-and-rebase: entering any non-live state banks the remaining ticks, leaving it rebases end_tick off the banked value. That covers celebration and countdown together and cannot drift, since nothing has to predict how long a stoppage will be. clock_state and match_bootstrap now carry remaining_ticks, which is authoritative whenever the clock is stopped. Verified with the reviewer's own metric: 840 PLAYING ticks for a 14s match, exactly. MEDIUM - clients never froze at FULL_TIME/RESULTS. The freeze handling sat inside `if multiplayer.is_server()`, so a local player flew around for the whole 8s results screen while every other peer saw their ship parked. Not fixed, and now demonstrated rather than merely suspected: - The 30s slot reservation is keyed on display NAME, so a stranger can take a departed player's ship and the real player is then locked out (reproduced). Worse than first thought: MatchNet.local_player_name defaults to "Player" and uniqueness is never enforced, so collisions are the common case, not an attack setup. Needs a real identity token; §6.2 step 1 reserves auth_ticket for Phase 7. - §6.3's "late joiner takes the slot at the next kickoff" is unimplemented - _is_spectator is assigned once and never revisited - while the server logs that it happened. - Replay log still ignores store_* return values, never records malformed/rejected inputs, and close() has no caller. - --role=host-disconnect grades the reconnecting client on ~1s of life before the host quits, and never asserts the client owns _my_slot. Regression: 87 unit tests; free-flight LAN; transition gate 0.00%; goal cycle; spectator; disconnect and reconnect; full match to RESULTS.
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:
- Godot game
- 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.