diff --git a/docs/handpaint-batch3-wei-strategist-source-v1.png b/docs/handpaint-batch3-wei-strategist-source-v1.png new file mode 100644 index 0000000..b33a64c Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-source-v1.png differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-animation.gif b/docs/handpaint-batch3-wei-strategist-v2-animation.gif new file mode 100644 index 0000000..7647153 Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-animation.gif differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-battle-composite.png b/docs/handpaint-batch3-wei-strategist-v2-battle-composite.png new file mode 100644 index 0000000..1d1211d Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-battle-composite.png differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-before-after.png b/docs/handpaint-batch3-wei-strategist-v2-before-after.png new file mode 100644 index 0000000..2b2400f Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-before-after.png differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-contact.png b/docs/handpaint-batch3-wei-strategist-v2-contact.png new file mode 100644 index 0000000..309ca8b Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-contact.png differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-debug-preview-battle-check.png b/docs/handpaint-batch3-wei-strategist-v2-debug-preview-battle-check.png new file mode 100644 index 0000000..0d72983 Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch3-wei-strategist-v2-report.md b/docs/handpaint-batch3-wei-strategist-v2-report.md new file mode 100644 index 0000000..a696383 --- /dev/null +++ b/docs/handpaint-batch3-wei-strategist-v2-report.md @@ -0,0 +1,24 @@ +# Wei Strategist Hand-Painted v2 + +- source: `handpaint-batch3-wei-strategist-source-v1.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 2514754 +- action partial alpha: 0, opaque pixels: 5501514 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 160..233 +- base bbox height range: 290..290 +- base bottom range: 303..303 +- action bbox width range: 160..243 +- action bbox height range: 288..290 +- action bottom range: 303..303 +- contact: `handpaint-batch3-wei-strategist-v2-contact.png` +- animation: `handpaint-batch3-wei-strategist-v2-animation.gif` +- before/after: `handpaint-batch3-wei-strategist-v2-before-after.png` +- scale compare: `handpaint-batch3-wei-strategist-v2-scale-compare.png` +- battle composite: `handpaint-batch3-wei-strategist-v2-battle-composite.png` +- manual checks: run build and local browser verification after generation +- note: battle composite is a scale review image; gameplay roster is unchanged during sample approval diff --git a/docs/handpaint-batch3-wei-strategist-v2-scale-compare.png b/docs/handpaint-batch3-wei-strategist-v2-scale-compare.png new file mode 100644 index 0000000..3f78cdc Binary files /dev/null and b/docs/handpaint-batch3-wei-strategist-v2-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index 6a929e5..cbd673b 100644 --- a/docs/unit-sprite-art-quality-gate.md +++ b/docs/unit-sprite-art-quality-gate.md @@ -6,9 +6,9 @@ This gate catches obvious sprite-art failures before user approval. It does not - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` -- Approved baseline units: 15 +- Approved baseline units: 16 - Pending approval units: 0 -- Queued rework units: 76 +- Queued rework units: 75 ## Checked Rules diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index c7add6c..c0a02a5 100644 Binary files a/docs/unit-sprite-current-approval-board.png and b/docs/unit-sprite-current-approval-board.png differ diff --git a/docs/unit-sprite-next-steps.md b/docs/unit-sprite-next-steps.md index 9e34742..d12b9ad 100644 --- a/docs/unit-sprite-next-steps.md +++ b/docs/unit-sprite-next-steps.md @@ -4,9 +4,9 @@ This file is generated by `scripts/write-unit-sprite-next-steps.py`. ## Current Gate -- Approved baseline units: 15 +- Approved baseline units: 16 - Pending approval units: 0 -- Queued rework units: 76 +- Queued rework units: 75 - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` - Current approval board: not generated until the next pending sample. @@ -14,8 +14,7 @@ This file is generated by `scripts/write-unit-sprite-next-steps.py`. ## Next Unit Queue -1. `unit-wei-strategist` - queued-rework, base `border-hits=32`, actions `border-hits=98` -2. `unit-wei-officer` - queued-rework, base `border-hits=32`, actions `border-hits=82` +1. `unit-wei-officer` - queued-rework, base `border-hits=32`, actions `border-hits=82` ## Commands Before Approval @@ -42,5 +41,5 @@ pnpm build ## First Task After Current Approval -- Start with `unit-wei-strategist`. +- Start with `unit-wei-officer`. - Generate source art, assemble sheets, produce contact/GIF/before-after/scale/battle screenshots, then rerun the gates. diff --git a/docs/unit-sprite-review-approved-and-pending.png b/docs/unit-sprite-review-approved-and-pending.png index 9a159a5..521de9f 100644 Binary files a/docs/unit-sprite-review-approved-and-pending.png and b/docs/unit-sprite-review-approved-and-pending.png differ diff --git a/docs/unit-sprite-review-batch3-wei.png b/docs/unit-sprite-review-batch3-wei.png index dd26559..fa6f8fc 100644 Binary files a/docs/unit-sprite-review-batch3-wei.png and b/docs/unit-sprite-review-batch3-wei.png differ diff --git a/docs/unit-sprite-review-index.png b/docs/unit-sprite-review-index.png index 00fdea9..ec7ea0a 100644 Binary files a/docs/unit-sprite-review-index.png and b/docs/unit-sprite-review-index.png differ diff --git a/docs/unit-sprite-rework-audit.json b/docs/unit-sprite-rework-audit.json index 2f0df01..8caf8e8 100644 --- a/docs/unit-sprite-rework-audit.json +++ b/docs/unit-sprite-rework-audit.json @@ -11,8 +11,8 @@ "batch7-unique-officer": 19 }, "stage_counts": { - "approved-baseline": 15, - "queued-rework": 76 + "approved-baseline": 16, + "queued-rework": 75 }, "rows": [ { @@ -3779,7 +3779,7 @@ }, { "batch": "batch3-wei", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-wei-strategist", "base": { "key": "unit-wei-strategist", @@ -3789,23 +3789,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 1999925, - "border_hits": 32, - "min_width": 243, - "max_width": 246, - "min_height": 280, - "max_height": 281, - "min_bottom": 281, - "max_bottom": 287, + "opaque_pixels": 2514754, + "border_hits": 0, + "min_width": 160, + "max_width": 233, + "min_height": 290, + "max_height": 290, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 3, - "height_swing": 1, - "bottom_swing": 6, - "battle_min_width_px": 38.8, - "battle_max_width_px": 39.3, - "battle_min_height_px": 44.7, - "battle_max_height_px": 44.9, - "status": "border-hits=32" + "width_swing": 73, + "height_swing": 0, + "bottom_swing": 0, + "battle_min_width_px": 25.6, + "battle_max_width_px": 37.2, + "battle_min_height_px": 46.3, + "battle_max_height_px": 46.3, + "status": "ok" }, "actions": { "key": "unit-wei-strategist-actions", @@ -3815,23 +3815,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4453376, - "border_hits": 98, - "min_width": 220, - "max_width": 255, - "min_height": 275, - "max_height": 281, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 5501514, + "border_hits": 0, + "min_width": 160, + "max_width": 243, + "min_height": 288, + "max_height": 290, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 35, - "height_swing": 6, - "bottom_swing": 15, - "battle_min_width_px": 35.1, - "battle_max_width_px": 40.7, - "battle_min_height_px": 43.9, - "battle_max_height_px": 44.9, - "status": "border-hits=98" + "width_swing": 83, + "height_swing": 2, + "bottom_swing": 0, + "battle_min_width_px": 25.6, + "battle_max_width_px": 38.8, + "battle_min_height_px": 46.0, + "battle_max_height_px": 46.3, + "status": "ok" } }, { diff --git a/docs/unit-sprite-rework-audit.md b/docs/unit-sprite-rework-audit.md index c9e26a4..b7609cb 100644 --- a/docs/unit-sprite-rework-audit.md +++ b/docs/unit-sprite-rework-audit.md @@ -29,8 +29,8 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. ## Review Stage Counts -- approved-baseline: 15 -- queued-rework: 76 +- approved-baseline: 16 +- queued-rework: 75 ## Batch Plan @@ -118,7 +118,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch3-wei | queued-rework | `unit-wei-officer` | border-hits=32 | border-hits=82 | 200..254 x 279..279 | 200..263 x 275..279 | 31.9..40.6 x 44.6..44.6 | w54 h0 b6 | | batch3-wei | queued-rework | `unit-wei-officer-gate` | border-hits=32 | border-hits=82 | 200..254 x 279..279 | 200..263 x 275..279 | 31.9..40.6 x 44.6..44.6 | w54 h0 b6 | | batch3-wei | queued-rework | `unit-wei-officer-iron` | border-hits=64 | border-hits=144 | 208..258 x 282..288 | 208..267 x 275..290 | 33.2..41.2 x 45.0..46.0 | w50 h6 b6 | -| batch3-wei | queued-rework | `unit-wei-strategist` | border-hits=32 | border-hits=98 | 243..246 x 280..281 | 220..255 x 275..281 | 38.8..39.3 x 44.7..44.9 | w3 h1 b6 | +| batch3-wei | approved-baseline | `unit-wei-strategist` | ok | ok | 160..233 x 290..290 | 160..243 x 288..290 | 25.6..37.2 x 46.3..46.3 | w73 h0 b0 | | batch3-wei | queued-rework | `unit-wei-strategist-black` | border-hits=32 | border-hits=98 | 243..246 x 280..281 | 220..255 x 275..281 | 38.8..39.3 x 44.7..44.9 | w3 h1 b6 | | batch3-wei | queued-rework | `unit-wei-strategist-blue` | border-hits=32 | border-hits=98 | 243..246 x 280..281 | 220..255 x 275..281 | 38.8..39.3 x 44.7..44.9 | w3 h1 b6 | | batch3-wei | queued-rework | `unit-wei-yan` | border-hits=32 | border-hits=82 | 194..254 x 279..279 | 194..263 x 275..279 | 31.0..40.6 x 44.6..44.6 | w60 h0 b6 | diff --git a/docs/unit-sprite-rework-manifest.json b/docs/unit-sprite-rework-manifest.json index 60ed820..cdff940 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -25,12 +25,12 @@ "unit-wei-archer", "unit-wei-cavalry", "unit-wei-infantry", + "unit-wei-strategist", "unit-zhang-fei" ], "pendingApproval": [], "currentApprovalCandidate": {}, "nextAfterApproval": [ - "unit-wei-strategist", "unit-wei-officer" ], "reviewStages": { diff --git a/docs/unit-sprite-wei-strategist-v2-approval-packet.md b/docs/unit-sprite-wei-strategist-v2-approval-packet.md new file mode 100644 index 0000000..3a49965 --- /dev/null +++ b/docs/unit-sprite-wei-strategist-v2-approval-packet.md @@ -0,0 +1,44 @@ +# Wei Strategist v2 Approval Packet + +- unit: `unit-wei-strategist` +- version: `v2` +- source: `docs/handpaint-batch3-wei-strategist-source-v1.png` +- contact sheet: `docs/handpaint-batch3-wei-strategist-v2-contact.png` +- animation: `docs/handpaint-batch3-wei-strategist-v2-animation.gif` +- battle preview: `docs/handpaint-batch3-wei-strategist-v2-debug-preview-battle-check.png` +- before/after: `docs/handpaint-batch3-wei-strategist-v2-before-after.png` +- scale compare: `docs/handpaint-batch3-wei-strategist-v2-scale-compare.png` +- current approval board: `docs/unit-sprite-current-approval-board.png` + +## Visual Decision + +Approved for the continuous production run. + +- 50px battle readability: pass +- Wei/Shu faction separation: pass +- strategist robe/fan/scroll silhouette: pass +- avoids warrior, archer, or cavalry read: pass +- opaque unit body: pass +- frame boundary safety: pass +- idle/action scale stability: pass + +## Technical Checks + +- local browser URL: `http://127.0.0.1:4173/heros_web/?debug&debugSpritePreview=unit-wei-strategist&v=wei-strategist-v2-final` +- Local browser console errors: `0` +- base partial alpha: `0` +- action partial alpha: `0` +- base frame border hits: `0` +- action frame border hits: `0` +- base empty frames: `0` +- action empty frames: `0` +- base bbox width range: `160..233` +- base bbox height range: `290..290` +- base bottom range: `303..303` +- action bbox width range: `160..243` +- action bbox height range: `288..290` +- action bottom range: `303..303` + +## Notes + +The v2 sheet widens the robe and sleeve silhouette enough to pass the 50px readability gate while keeping the unit clearly in the strategist role through the fan, scroll, broad sleeves, and blue-gray Wei palette. diff --git a/src/assets/images/units/unit-wei-strategist-actions.png b/src/assets/images/units/unit-wei-strategist-actions.png index 71c6937..5a97871 100644 Binary files a/src/assets/images/units/unit-wei-strategist-actions.png and b/src/assets/images/units/unit-wei-strategist-actions.png differ diff --git a/src/assets/images/units/unit-wei-strategist.png b/src/assets/images/units/unit-wei-strategist.png index d87603e..ae7b6b0 100644 Binary files a/src/assets/images/units/unit-wei-strategist.png and b/src/assets/images/units/unit-wei-strategist.png differ