{"id":25234488,"url":"https://github.com/Delta3-Studio/BackdashGodotSample","last_synced_at":"2025-10-26T10:30:26.845Z","repository":{"id":237306025,"uuid":"794252825","full_name":"lucasteles/BackdashGodotSample","owner":"lucasteles","description":"Sample of Backdash Rollback net-code with Godot","archived":false,"fork":false,"pushed_at":"2024-11-29T23:21:47.000Z","size":165,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-30T00:21:52.586Z","etag":null,"topics":["csharp","gamedev","godot","rollback-netcode"],"latest_commit_sha":null,"homepage":"https://lucasteles.github.io/Backdash/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucasteles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-30T18:48:21.000Z","updated_at":"2024-11-29T23:21:50.000Z","dependencies_parsed_at":"2024-11-30T00:20:46.173Z","dependency_job_id":"463d6da5-1146-4824-bafd-66ff1353448b","html_url":"https://github.com/lucasteles/BackdashGodotSample","commit_stats":null,"previous_names":["lucasteles/backdashgodotsample"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasteles%2FBackdashGodotSample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasteles%2FBackdashGodotSample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasteles%2FBackdashGodotSample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasteles%2FBackdashGodotSample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucasteles","download_url":"https://codeload.github.com/lucasteles/BackdashGodotSample/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238306451,"owners_count":19450146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","gamedev","godot","rollback-netcode"],"created_at":"2025-02-11T13:59:42.900Z","updated_at":"2025-10-26T10:30:26.832Z","avatar_url":"https://github.com/lucasteles.png","language":"C#","readme":"# SpaceWar with Godot\n\nThis project is a usage sample of [rollback netcode](https://delta3-studio.github.io/Backdash/docs/introduction.html#how-does-it-work) using [Backdash](https://github.com/delta3-studio/Backdash) in [Godot](https://godotengine.org/).\n\nIt shows a basic example of an online lobby for NAT traversal using [UDP hole punching](https://en.wikipedia.org/wiki/UDP_hole_punching).\n\n## Video\n[![Godot Online](https://img.youtube.com/vi/8M8QnTiJZzA/default.jpg)](https://youtu.be/8M8QnTiJZzA)\n\n# How does it work?\n\nThis enables a P2P connection over the internet, this is possible using\na [middle server](https://github.com/delta3-studio/Backdash/tree/master/samples/LobbyServer)\nwhich all clients know.\nThe server catches the IP address and port of a client and sends it to the others.\n\nThe current server runs almost as a simple HTTP with JSON responses. It keeps the lobby info with sliding expiration\ncache.\n\nWhen a client enters the lobby the server responds with a token of type `Guid`/`UUID`. It is used a very\nbasic `Authentication` mechanism.\n\nThe client uses HTTP pooling to get updated information on each lobby member/peer.\n\nWhen logged in, every client needs to send a `UDP` package with their token to the server. The server uses the package header metadata\nto keep track of their `IP` and open `Port`.\n\n\u003e ⚠️ UDP Hole punching usually **does not** work with clients behind the same NAT. To mitigate this the server\n\u003e also tracks the local IP and port on each client to check if the peer is on the same network.\n\n## Controls\n\n- **Arrows**: Move\n- **Space**: Fire\n- **Left Ctrl**: Missile\n\n## Running\n\n### Server\n\n\u003e [!NOTE]\n\u003e This project uses an already published [demo lobby server](https://lobby-server.fly.dev/swagger/index.html).\n\nThe server URL is configured in the `settings.ini` file and you can start your own [server from here](https://github.com/delta3-studio/Backdash/tree/master/samples/LobbyServer):\n\nAfter cloning the repository run this command on the server project directory:\n```bash\ndotnet run .\n```\n\n- Default **HTTP**: `9999`\n- Default **UDP** : `8888`\n\n\u003e [!TIP]\n\u003e 💡 Check the swagger `API` docs at http://localhost:9999/swagger\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDelta3-Studio%2FBackdashGodotSample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDelta3-Studio%2FBackdashGodotSample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDelta3-Studio%2FBackdashGodotSample/lists"}