mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-15 20:52:03 +00:00
Compare commits
6 Commits
ea756bd5ba
...
08ab782a9a
| Author | SHA1 | Date | |
|---|---|---|---|
| 08ab782a9a | |||
| 9fe95ee1b2 | |||
| 6961b672da | |||
| 63c2cea29e | |||
| d77cdccaab | |||
| ff7d1579cb |
@@ -9,7 +9,12 @@
|
||||
},
|
||||
"blender": {
|
||||
"command": "uv",
|
||||
"args": ["run", "--project", "mcp/blender-mcp", "blender-mcp"]
|
||||
"args": ["run", "--project", "mcp/blender-mcp", "blender-mcp"],
|
||||
"env": {
|
||||
"DISABLE_TELEMETRY": "1",
|
||||
"BLENDER_MCP_DISABLE_TELEMETRY": "1",
|
||||
"MCP_DISABLE_TELEMETRY": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,15 +29,27 @@ npm run build
|
||||
|
||||
This repo vendors [blender-mcp](https://github.com/ahujasid/blender-mcp) as a git submodule at `mcp/blender-mcp` and registers it in `.mcp.json`. **Prefer the blender-mcp tools over manual scripting** when the task involves creating or editing 3D models, materials, or scenes in Blender (e.g. ship/arena assets) — it drives a live Blender instance directly rather than hand-writing `.blend`/Python scene-manipulation code.
|
||||
|
||||
Setup after cloning (same submodule caveat as godot-mcp above):
|
||||
Setup after cloning (same submodule caveat as godot-mcp above): `git submodule update --init --recursive`.
|
||||
|
||||
**Preflight — run this before the first blender-mcp tool call in a session** (both commands are idempotent and quick when already current; don't repeat them for later calls in the same session):
|
||||
|
||||
```bash
|
||||
git submodule add https://github.com/ahujasid/blender-mcp.git mcp/blender-mcp
|
||||
cd mcp/blender-mcp
|
||||
uv sync
|
||||
uv sync # the submodule pointer moves often and deps drift with it
|
||||
uv run blender-mcp install-addon # copies the bundled addon into Blender's user addons dir
|
||||
```
|
||||
|
||||
One-time manual step (GUI, can't be scripted): install the Blender addon — Blender → Edit → Preferences → Add-ons → Install → select `mcp/blender-mcp/addon.py` → enable "Interface: Blender MCP". Blender must be running with the addon's socket server started (default `localhost:9876`) for the MCP tools to connect; override with the `BLENDER_HOST` / `BLENDER_PORT` env vars in `.mcp.json` if needed.
|
||||
`install-addon` replaced the old manual GUI install (Preferences → Add-ons → Install → `addon.py`). It discovers Blender's addons directory itself (`uv run blender-mcp addon-paths` lists candidates; `--addons-dir` or `BLENDERMCP_ADDONS_DIR` overrides), backs up any existing copy, and is version-aware — it compares `ADDON_PROTOCOL_VERSION` in the installed file against the bundled one and rewrites only when the installed copy is missing or older, so a no-op run is cheap. The source of truth is `src/blender_mcp/bundled/addon.py`; the repo-root `addon.py` is an identical copy kept for the legacy manual path.
|
||||
|
||||
What still cannot be scripted, and is the user's job — ask them rather than retrying a failing tool call:
|
||||
|
||||
- Blender must be running with "Interface: Blender MCP" enabled and its socket server started (default `localhost:9876`; override via `BLENDER_HOST` / `BLENDER_PORT` in `.mcp.json`).
|
||||
- If `install-addon` rewrote the addon while Blender was open, the new code isn't loaded until Blender restarts or the addon is disabled/re-enabled. Treat "install-addon reported an update" as a signal to tell the user to restart Blender before continuing.
|
||||
|
||||
Upstream ships telemetry, and there are **two independent switches** — turning off one does not affect the other:
|
||||
|
||||
- *Server side*: disabled here via `DISABLE_TELEMETRY` / `BLENDER_MCP_DISABLE_TELEMETRY` / `MCP_DISABLE_TELEMETRY` in the server's `env` block in `.mcp.json`. This also suppresses the consent prompt that would otherwise arrive through the MCP client on first use. Keep these set when editing `.mcp.json`.
|
||||
- *Addon side*, inside Blender: an "Allow Telemetry" checkbox in the addon's preferences that **defaults to on** and covers prompts, code snippets, screenshots and trajectory data, plus manual-edit capture handlers. The env vars above cannot reach it — it is a Blender preference. Untick it at Preferences → Add-ons → Blender MCP, or clear it with `set_telemetry_consent(false)` via the addon's command channel.
|
||||
|
||||
## Commands
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -6,9 +6,7 @@ Deferred work, in rough priority order. The current architecture (ShipAction/Shi
|
||||
|
||||
The training pipeline is built — see `TRAINING.md` (self-play PPO via the vendored godot_rl_agents bridge, JSON policy export, in-game GDScript inference, eval ladder). Remaining:
|
||||
|
||||
- [x] Promote generation 4's stage-3 gauntlet policy as the new `Game/bots/promoted/easy.json` baseline.
|
||||
- [ ] Run the generation-5 handling/intercepts/league/teamplay curriculum described in `TRAINING.md`; promote later checkpoints as `medium`/`hard` only after they clear the match and behaviour gates.
|
||||
- [x] Frozen-opponent league plumbing: `--opponent-mode=league` samples a past exported checkpoint per episode; generation 5 Stage 6 supplies the curated pool.
|
||||
- [ ] Extend generation 5's moving aerial-intercept states with wall plays and rebound scenarios after Stage 5 establishes a productive-air-touch baseline.
|
||||
- [ ] Design team-credit rewards and paired 2v2 evaluation before enabling the deferred teamplay stage.
|
||||
|
||||
@@ -17,15 +15,7 @@ The training pipeline is built — see `TRAINING.md` (self-play PPO via the vend
|
||||
The largest gap between this and a AAA-feeling product is presentation, not code. Sequenced after the above for pragmatic reasons, but this is the highest impact per hour.
|
||||
|
||||
- [ ] **Audio — there is none.** Zero sound files, zero `AudioStreamPlayer` nodes, no bus layout. Needs: engine hum pitched to throttle, turbo whoosh, ball impacts scaled by collision impulse, wall scrapes, goal explosion, crowd bed, UI clicks, countdown beeps, music. Can be driven off `Ship`'s existing telemetry signals.
|
||||
- [x] SSAO/SSIL in the arena Environments — cheapest single perceived-quality win available; grounds the ships against the deck and gives the fillets and goal recesses real depth.
|
||||
- [x] VFX on anything that moves: throttle-reactive engine cores and simple rear flames, a speed-scaled ball trail and team-tinted goal bursts.
|
||||
- [x] Impact feedback — intensity-scaled screen shake, unscaled hit-stop and controller rumble on ball contact.
|
||||
- [x] Camera feel in `ship_camera.gd` — speed-based FOV widening, turbo kick-back and decaying impact shake.
|
||||
- [x] Goal celebration sequence: goal burst, team-tinted flash/title card, dedicated camera cut and slow-motion beat after authoritative score registration and before reset/kickoff.
|
||||
- [x] Local lighting / dynamic GI — four local pitch lights plus SDFGI provide bounce and contact lighting for the runtime-generated arena shell; the shader's `hull_fill` stand-in is retired. (The shell is generated in `_ready`, so it cannot participate in an editor LightmapGI bake.)
|
||||
- [x] Dress `arena_03` — its asteroid field now has mining stations, debris clusters and a distant planet.
|
||||
- [ ] Custom font + a real `Theme` resource for the HUD. `ThemeDB.fallback_font` at 10-13 px reads as a debug overlay.
|
||||
- [x] Post-processing beyond glow: a cinematic vignette and turbo-driven chromatic aberration. DoF and motion blur were intentionally omitted after playtesting.
|
||||
|
||||
## Multiplayer (long term)
|
||||
|
||||
|
||||
+1
-1
Submodule mcp/blender-mcp updated: 3ab892510c...fbf97774cd
Binary file not shown.
@@ -657,5 +657,32 @@
|
||||
"team_1": 41
|
||||
},
|
||||
"win_rate_a": 0.44
|
||||
},
|
||||
{
|
||||
"timestamp": "2026-08-16T14:13:26+00:00",
|
||||
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-0858-gen5-s4-handling.json",
|
||||
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
|
||||
"seed": 1,
|
||||
"episodes": 100,
|
||||
"wins_a": 46,
|
||||
"wins_b": 25,
|
||||
"draws": 29,
|
||||
"side_results": {
|
||||
"a_team_0": {
|
||||
"wins_a": 20,
|
||||
"wins_b": 18,
|
||||
"draws": 12
|
||||
},
|
||||
"a_team_1": {
|
||||
"wins_a": 26,
|
||||
"wins_b": 7,
|
||||
"draws": 17
|
||||
}
|
||||
},
|
||||
"physical_team_wins": {
|
||||
"team_0": 27,
|
||||
"team_1": 44
|
||||
},
|
||||
"win_rate_a": 0.46
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,6 +1,91 @@
|
||||
{
|
||||
"stage_index": 0,
|
||||
"attempt": 0,
|
||||
"attempt": 1,
|
||||
"status": "in_progress",
|
||||
"log": []
|
||||
"log": [
|
||||
{
|
||||
"stage_index": 0,
|
||||
"stage_number": 4,
|
||||
"stage_name": "handling",
|
||||
"experiment": "20260816-0858-gen5-s4-handling",
|
||||
"attempt": 0,
|
||||
"telemetry_tail": {
|
||||
"rollout/air_touch_fraction": 3.999999910593033e-05,
|
||||
"rollout/airborne_fraction": 0.2285692382156849,
|
||||
"rollout/ep_len_mean": 138.9746000366211,
|
||||
"rollout/ep_rew_mean": 8.531756190299987,
|
||||
"rollout/forward_motion_fraction": 0.28261195290088653,
|
||||
"rollout/goal_rate": 0.5371200009584427,
|
||||
"rollout/grounded_upright_fraction": 0.47041099911928175,
|
||||
"rollout/mean_altitude": 2.5816375048160554,
|
||||
"rollout/productive_air_touch_fraction": 0.0,
|
||||
"rollout/upright_fraction": 0.7536708096265793,
|
||||
"rollout/vertical_thrust_mean": -0.046195002141292206
|
||||
},
|
||||
"telemetry_failures": [
|
||||
"rollout/goal_rate=0.5371 < 0.8000"
|
||||
],
|
||||
"evaluation_goal_failures": [
|
||||
"easy.json: goal_rate=0.710 < 0.800"
|
||||
],
|
||||
"side_balance_failures": [],
|
||||
"eval": {
|
||||
"timestamp": "2026-08-16T14:13:26+00:00",
|
||||
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-0858-gen5-s4-handling.json",
|
||||
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
|
||||
"seed": 1,
|
||||
"episodes": 100,
|
||||
"wins_a": 46,
|
||||
"wins_b": 25,
|
||||
"draws": 29,
|
||||
"side_results": {
|
||||
"a_team_0": {
|
||||
"wins_a": 20,
|
||||
"wins_b": 18,
|
||||
"draws": 12
|
||||
},
|
||||
"a_team_1": {
|
||||
"wins_a": 26,
|
||||
"wins_b": 7,
|
||||
"draws": 17
|
||||
}
|
||||
},
|
||||
"physical_team_wins": {
|
||||
"team_0": 27,
|
||||
"team_1": 44
|
||||
},
|
||||
"win_rate_a": 0.46
|
||||
},
|
||||
"evals": [
|
||||
{
|
||||
"timestamp": "2026-08-16T14:13:26+00:00",
|
||||
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-0858-gen5-s4-handling.json",
|
||||
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
|
||||
"seed": 1,
|
||||
"episodes": 100,
|
||||
"wins_a": 46,
|
||||
"wins_b": 25,
|
||||
"draws": 29,
|
||||
"side_results": {
|
||||
"a_team_0": {
|
||||
"wins_a": 20,
|
||||
"wins_b": 18,
|
||||
"draws": 12
|
||||
},
|
||||
"a_team_1": {
|
||||
"wins_a": 26,
|
||||
"wins_b": 7,
|
||||
"draws": 17
|
||||
}
|
||||
},
|
||||
"physical_team_wins": {
|
||||
"team_0": 27,
|
||||
"team_1": 44
|
||||
},
|
||||
"win_rate_a": 0.46
|
||||
}
|
||||
],
|
||||
"decision": "fail"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user