diff --git a/apps/game/public/assets/PROVENANCE.md b/apps/game/public/assets/PROVENANCE.md index 7ec5018..4ee6c60 100644 --- a/apps/game/public/assets/PROVENANCE.md +++ b/apps/game/public/assets/PROVENANCE.md @@ -103,8 +103,6 @@ material-slot or `COL_` conventions the generated props use; | File | Source | Licence | | ------------------------------ | ----------------------------------------------------------- | ------------------------------- | -| `models/fighter_insurgent.glb` | Synty POLYGON Military — `SK_Chr_Insurgent_Male_01` | Synty Store licence (purchased) | -| `models/fighter_soldier.glb` | Synty POLYGON Military — `SK_Chr_Soldier_Male_01` | Synty Store licence (purchased) | | `models/veh_armored_car.glb` | Synty POLYGON Military — `SM_Veh_Light_Armored_Car_01` | Synty Store licence (purchased) | | `models/veh_technical.glb` | Synty POLYGON Military — `SM_Veh_Pickup_Technical_01` | Synty Store licence (purchased) | | `models/prop_barrel.glb` | Synty POLYGON Military — `SM_Prop_Barrel_01` | Synty Store licence (purchased) | @@ -125,6 +123,13 @@ royalty-free commercial use in unlimited titles and permits modification; it does **not** permit reselling the assets as assets. Not copyright ownership, which only a work-for-hire commission gives. +The two Synty **characters** are converted by +`tools/art/blender/import_synty.py` but are **not shipped**: neither route to +animating them works yet (docs/HANDOFF-synty.md), and carrying two models +nothing draws cost 1.24 MB of the shell download at every boot. The converters +and the licence record stay; the GLBs are regenerated on demand with +`node tools/art/import-synty.mjs --with-characters`. + Source files are **not** committed — the pack is 406 MB unpacked and lives outside the repo. Only the converted GLBs and the shared atlases ship. diff --git a/apps/game/public/assets/manifest.json b/apps/game/public/assets/manifest.json index 0cb5be8..8744a50 100644 --- a/apps/game/public/assets/manifest.json +++ b/apps/game/public/assets/manifest.json @@ -1,7 +1,7 @@ { "generator": "tools/art/build-assets.mjs", "blender": "Blender 4.5.12 LTS", - "commit": "8fb62aa99ff07aa4cc32ff0fea2ec71adb09fbb2", + "commit": "89ecfe33b694d24f41f3ec9bd585e7fdb24f68c1", "license": "Original work, © NIGHTCELL 7. No third-party assets.", "source": "Generated procedurally from the scripts in tools/art. No asset is downloaded, photographed, traced, or derived from another game.", "textureSize": 1024, @@ -11,8 +11,6 @@ "character.glb", "container.glb", "deck.glb", - "fighter_insurgent.glb", - "fighter_soldier.glb", "hardpoint.glb", "lamp_mast.glb", "pipe_rack.glb", @@ -94,9 +92,9 @@ "throngva/the-wolf-called-want.mp3" ], "bytes": { - "models": 4722360, + "models": 3422320, "textures": 2447388, "audio": 402789, - "total": 7572537 + "total": 6272497 } } diff --git a/apps/game/public/assets/models/fighter_insurgent.glb b/apps/game/public/assets/models/fighter_insurgent.glb deleted file mode 100644 index 1221419..0000000 Binary files a/apps/game/public/assets/models/fighter_insurgent.glb and /dev/null differ diff --git a/apps/game/public/assets/models/fighter_soldier.glb b/apps/game/public/assets/models/fighter_soldier.glb deleted file mode 100644 index 4b7a468..0000000 Binary files a/apps/game/public/assets/models/fighter_soldier.glb and /dev/null differ diff --git a/apps/game/src/assets.test.ts b/apps/game/src/assets.test.ts index 283524b..45dbde9 100644 --- a/apps/game/src/assets.test.ts +++ b/apps/game/src/assets.test.ts @@ -79,8 +79,6 @@ describe("generated models", () => { * a generator script. */ const LICENSED = new Set([ - "fighter_insurgent", - "fighter_soldier", // Synty POLYGON Military static meshes: licensed, and bound by their own // atlas slots (`synty_vehicles` / `synty_atlas`) rather than the generated // material set. Their provenance is the Synty licence in PROVENANCE.md, and diff --git a/apps/game/src/assets.ts b/apps/game/src/assets.ts index 075b13b..c4bd9d0 100644 --- a/apps/game/src/assets.ts +++ b/apps/game/src/assets.ts @@ -55,11 +55,15 @@ export const MODELS = [ "lamp_mast", "character", "carbine", - // Licensed CC0 characters (Quaternius). These carry their own rig, - // animations and materials, so they bypass the material-slot convention the - // generated props follow — see apps/game/public/assets/PROVENANCE.md. - "fighter_insurgent", - "fighter_soldier", + // The licensed Synty characters are deliberately NOT here. + // + // They convert, load and texture correctly, but neither route to animating + // them works yet — retargeting our clips onto Synty's skeleton leaves the + // arms in its T-pose, and skinning the mesh to our rig loses the arms in the + // bind (docs/HANDOFF-synty.md). Listing them anyway cost 1.24 MB of the shell + // download, fetched and parsed at every boot, for two models nothing drew. + // They are regenerated on demand by `tools/art/import-synty.mjs + // --with-characters` when there is something to ship. // Licensed Synty POLYGON Military static meshes. Vehicles bind the shared // `synty_vehicles` atlas; props reuse the character atlas (`synty_atlas`), // since both were authored against Synty's Texture_01_A. No new texture ships diff --git a/apps/game/src/opponents.ts b/apps/game/src/opponents.ts index 2e6978d..2c33b23 100644 --- a/apps/game/src/opponents.ts +++ b/apps/game/src/opponents.ts @@ -138,22 +138,12 @@ export class Opponents { // One model per faction. // // Nightcell are irregulars: olive drab, boots, a pack — someone fighting - // with what they own. The first attempt used the pack's `Worker`, which is - // a hi-vis construction labourer and read exactly like one. That difference is - // the fastest target ID a player gets, and it is carried by the whole - // silhouette rather than by a colour swatch. - // Back on the generated character for now. + // Both sides use the generated character. // - // The licensed Quaternius models are committed and load fine, but they - // render as glowing white figures in this scene and three attempts did not - // fix it: scaling albedo to the yard's actual exposure budget (0.42, then - // 0.18), clearing emissive unconditionally, and excluding them from the - // GlowLayer all left them blown out. Something else in their imported - // material setup is driving it and I have not identified what. - // - // The generated character renders correctly, so the bots use it until the - // licensed ones are diagnosed. Swapping back is a one-line change: - // assets.models.get("fighter_soldier") / ("fighter_worker") + // The licensed Synty characters would be a clear upgrade and are not ready: + // see docs/HANDOFF-synty.md for the two attempts and where each stops. They + // are told apart by team colour and weapon instead, which is what + // `brightenCharacter` and `weaponFor` below are for. const enemyModel = assets.models.get("character"); const friendlyModel = assets.models.get("character"); const character = enemyModel; diff --git a/docs/HANDOFF-synty.md b/docs/HANDOFF-synty.md index 4e9ff0d..0e25fcb 100644 --- a/docs/HANDOFF-synty.md +++ b/docs/HANDOFF-synty.md @@ -12,16 +12,16 @@ oversight. The Synty characters are committed, load fine, are textured, and are **not shipped**, because their animation retarget is broken. -| Thing | State | -| ----------------------------------------------------- | ----------------------------------------------- | -| `models/fighter_insurgent.glb`, `fighter_soldier.glb` | committed, load, textured, animation wrong | -| `textures/synty_atlas.webp` | working, 388 KB, shared by characters + props | -| `tools/art/blender/import_synty.py` | character converter; maths fixed, export broken | -| `tools/art/blender/import_synty_prop.py` | static-mesh converter; **working, shipped** | -| 2 vehicles + 5 props (`veh_*`, `prop_*`) | **integrated** — converted, textured, placed | -| `textures/synty_vehicles.webp` | working, 76 KB, shared by all vehicles | -| 3 weapons (`wep_*`) + `synty_weapons.webp` | **integrated** — player viewmodel and bot hands | -| Shell budget | 7.13 MB against a 9 MB guard | +| Thing | State | +| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `models/fighter_insurgent.glb`, `fighter_soldier.glb` | **not shipped** — convert and load, animation unsolved; regenerate with `import-synty.mjs --with-characters` | +| `textures/synty_atlas.webp` | working, 388 KB, shared by characters + props | +| `tools/art/blender/import_synty.py` | character converter; maths fixed, export broken | +| `tools/art/blender/import_synty_prop.py` | static-mesh converter; **working, shipped** | +| 2 vehicles + 5 props (`veh_*`, `prop_*`) | **integrated** — converted, textured, placed | +| `textures/synty_vehicles.webp` | working, 76 KB, shared by all vehicles | +| 3 weapons (`wep_*`) + `synty_weapons.webp` | **integrated** — player viewmodel and bot hands | +| Shell budget | 5.98 MB against a 9 MB guard | Source pack is at `~/src/nightcell7-assets/SourceFiles/` (406 MB, outside the repo, not committed).