{"id":49940883,"url":"https://github.com/2002yy/ballwar","last_synced_at":"2026-05-17T11:01:26.405Z","repository":{"id":358094434,"uuid":"1238916922","full_name":"2002yy/BallWar","owner":"2002yy","description":"领土战争 / Marble Dominion Ricochet War — 四阵营 2D 领土争夺 · Godot 4.6 · GDScript","archived":false,"fork":false,"pushed_at":"2026-05-15T19:35:52.000Z","size":79631,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-15T19:51:53.078Z","etag":null,"topics":["2d-game","gds","godot","godot-engine","strategy-game","territory-war"],"latest_commit_sha":null,"homepage":null,"language":"GDScript","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/2002yy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-14T15:21:54.000Z","updated_at":"2026-05-15T19:25:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/2002yy/BallWar","commit_stats":null,"previous_names":["2002yy/ballwar"],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/2002yy/BallWar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2002yy%2FBallWar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2002yy%2FBallWar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2002yy%2FBallWar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2002yy%2FBallWar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2002yy","download_url":"https://codeload.github.com/2002yy/BallWar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2002yy%2FBallWar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33136088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["2d-game","gds","godot","godot-engine","strategy-game","territory-war"],"created_at":"2026-05-17T11:01:22.645Z","updated_at":"2026-05-17T11:01:26.398Z","avatar_url":"https://github.com/2002yy.png","language":"GDScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BallWar / 领土战争 (Marble Dominion Ricochet War)\n\nA **Godot 4.6 + GDScript** 2D territory-control arcade prototype — four factions fight for grid dominance in a chaotic bullet arena.  \n一个基于 **Godot 4.6 + GDScript** 的 2D 四阵营领土争夺街机原型。\n\n**Engine:** Godot 4.6 · **Language:** GDScript · **Tests:** 10 runners · GitHub Actions CI · **Platforms:** Windows / Android\n\n## Screenshots / 截图\n\n| 开始界面 | 游戏初始 | 游戏中场 | 事件画面 | 胜利结果 |\n|:--:|:--:|:--:|:--:|:--:|\n| ![](screenshots/%E5%BC%80%E5%A7%8B%E7%95%8C%E9%9D%A2.png) | ![](screenshots/%E6%B8%B8%E6%88%8F%E5%88%9D%E5%A7%8B.png) | ![](screenshots/%E6%B8%B8%E6%88%8F%E4%B8%AD%E5%9C%BA.png) | ![](screenshots/%E4%BA%8B%E4%BB%B6%E7%94%BB%E9%9D%A2.png) | ![](screenshots/%E4%B8%80%E6%96%B9%E8%83%9C%E5%88%A9%E7%BB%93%E6%9E%9C.png) |\n\n## Download Latest Release / 下载最新版本\n\n\u003e **v2.1.11.1 (Latest Stable)** — [Windows zip](https://github.com/2002yy/BallWar/releases/tag/v2.1.11.1) · [Android APK](https://github.com/2002yy/BallWar/releases/tag/v2.1.11.1)  \n\u003e All releases: [github.com/2002yy/BallWar/releases](https://github.com/2002yy/BallWar/releases)\n\n## Tech Highlights / 技术亮点\n\n- **10 headless CI runners** — smoke, wiring, coordinator, integration, layout tests via GitHub Actions\n- **Architecture layering** — `Main.gd` orchestration → coordinators, restore planners, save adapters ([docs/ARCHITECTURE.md](docs/ARCHITECTURE.md))\n- **Save/load with hardening** — slot-based saves, backup recovery, version checks, input sanitization ([docs/SAVE_SYSTEM.md](docs/SAVE_SYSTEM.md))\n- **Performance probes** — bullet pressure, frame time, trail cache metrics built into runtime ([docs/PERFORMANCE.md](docs/PERFORMANCE.md))\n- **Android export pipeline** — ETC2/ASTC validation, debug APK, PowerShell scripts ([docs/ANDROID_EXPORT.md](docs/ANDROID_EXPORT.md))\n- Four-faction territory control, chamber-driven firing rhythm, event roulette, multi-mode rules\n\n## Architecture / 架构\n\nSystem layering (see [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)):\n\n- **`Main.gd`** — top-level lifecycle orchestration\n- **`SaveFlowController`** — continue/load flow (`prepare_*` / `apply_*`)\n- **`RestorePlan`** — active restore planning data through the continue path\n- **`SaveGameCodec`** + **`SaveStateApplier`** — validate, normalize, then apply\n- **`ControlChamber`**, **`Turret`**, **`Bullet`** — each owns `restore_from_state(...)`\n- Runtime-heavy: `Battlefield`, `BulletPool`, pooled trail internals\n\n## Testing / 测试\n\n10 headless test runners run via GitHub Actions CI. Correctness baseline: **1083 checks**.\n\n| Runner | Checks |\n|---|---|\n| `LayoutSanityTestRunner.gd` | 376 |\n| `SmokeTestRunner.gd` | 218 |\n| `SaveFlowControllerTestRunner.gd` | 190 |\n| `IntegrationTestRunner.gd` | 133 |\n| `StartMenuSceneTestRunner.gd` | 55 |\n| `GameStateCoordinatorTestRunner.gd` | 50 |\n| `GameHUDSceneTestRunner.gd` | 27 |\n| `EventRouletteSceneTestRunner.gd` | 14 |\n| `RestorePlanTestRunner.gd` | 11 |\n| `SettingsPanelSceneTestRunner.gd` | 9 |\n\nFull guide: [docs/TESTING.md](docs/TESTING.md)\n\n## Development Setup / 开发环境\n\nOpen `project.godot` with **Godot 4.6** in the editor.\n\n```powershell\n# Headless check examples:\n\u003cgodot_console\u003e --headless --path . --script res://scripts/tests/SmokeTestRunner.gd\n\u003cgodot_console\u003e --headless --path . --script res://scripts/tests/IntegrationTestRunner.gd\n\u003cgodot_console\u003e --headless --path . --script res://scripts/tests/LayoutSanityTestRunner.gd\n```\n\nRelease packaging: [docs/RELEASE_PROCESS.md](docs/RELEASE_PROCESS.md)\n\n## Roadmap / 路线图\n\nCurrent direction: visual \u0026 audio polish, mobile layout verification, performance baselines.  \n当前方向：素材与音效接入、移动端布局验证、性能基线归档。\n\nSee [docs/ROADMAP.md](docs/ROADMAP.md)\n\n## License / 许可\n\n[MIT License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2002yy%2Fballwar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2002yy%2Fballwar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2002yy%2Fballwar/lists"}