Playing with a gamepad did not work: all six move_* actions had no joypad event at all, so a pad could yaw/pitch/roll/turbo but could not translate. Nothing caught it because every action existed and the game booted fine — no assertion checked that an action is reachable on *both* devices. Controller layout, on the 6DOF convention (left stick aims, right stick translates), using all six of the pad's analog axes for the ship's six degrees of freedom: left stick yaw + pitch right stick strafe + vertical LB / RB roll RT / LT forward / back L3 turbo R3 ball camera Input is now read with Input.get_axis instead of is_action_pressed, so triggers and sticks are proportional. Keyboard values are unchanged. Three rotation bugs found by measuring a real Ship rather than reading the code: - apply_torque() is world-space and the torque was never rotated into the hull's frame (unlike thrust, which uses -ship_basis.z). Roll input became pitch after a 90 degree turn and inverted at 180, so the controls were correct flying up-field and backwards flying back. - ship.tscn's inertia is Vector3(7, 1, 7) but a flat torque was applied to every axis, giving yaw 7x the angular acceleration of pitch and roll (172 deg/s vs 52). Torque is now scaled per-axis by inertia, so rotation_acceleration means rad/s^2 and all three axes match. Yaw is unchanged. - pitch_down pitched the nose UP: get_axis's arguments were reversed, so the I/K keys and the stick each did the opposite of their label. Menus were unusable on a pad for a separate reason: Godot 4.7 gives ui_up/down/left/right joypad events by default but leaves ui_accept and ui_cancel with none (verified against a pristine project), so a controller could move the highlight and never press anything. A confirms and B goes back. Gameplay exits on a new leave_gameplay action (Escape / Start) rather than ui_cancel, so carrying B for menus cannot abandon a live match. Bindings for both devices are rebindable in Settings -> Controls, persisted to user://input.cfg — a separate file from settings.cfg because VideoSettings.save() rewrites that file wholesale and would drop any section it does not know about. project.godot stays the source of truth for defaults; overrides are only ever a delta on top of a boot-time snapshot. Verified: 268 unit tests, the ENet integration gate, and a 16-sample before/after comparison of networked prediction residuals showing the physics change does not regress them (median 0.083m -> 0.065m). Note for follow-up: every policy in Game/bots/ was trained against the old sluggish, world-axis rotation and will over-rotate until retrained.
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
Cosmic Clash is a single Godot 4.7 project, written entirely in GDScript. That same project exports both the interactive game and a headless dedicated server for online multiplayer. See docs/TECH_STACK.md for the full stack and the reasoning behind each choice.
Online play with casual and ranked queues is a 1.0 requirement, and it needs a backend service for identity, matchmaking and ratings — separate from the Godot project. That control plane is written in Go (with PostgreSQL, Redis and Agones on Kubernetes), chosen for the Agones/Kubernetes-native ecosystem rather than for raw speed: it never touches a simulation packet. See docs/MATCHMAKING.md for the design and docs/TECH_STACK.md for why Go over C#, Rust or C++.
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 original local-only milestone is complete; the 1.0 scope now includes
dedicated online play plus casual and ranked matchmaking. Community servers
remain self-hostable, while project-hosted match servers are allocated per
match through the provider-portable control plane described in
docs/MATCHMAKING.md. Split-screen remains deferred.
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.