diff --git a/docs/handpaint-batch4-wu-archer-naval-source-v1.png b/docs/handpaint-batch4-wu-archer-naval-source-v1.png new file mode 100644 index 0000000..728aea9 Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-source-v1.png differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-animation.gif b/docs/handpaint-batch4-wu-archer-naval-v3-animation.gif new file mode 100644 index 0000000..bdf27c2 Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-animation.gif differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-battle-composite.png b/docs/handpaint-batch4-wu-archer-naval-v3-battle-composite.png new file mode 100644 index 0000000..3be6a2e Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-battle-composite.png differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-before-after.png b/docs/handpaint-batch4-wu-archer-naval-v3-before-after.png new file mode 100644 index 0000000..26ce547 Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-before-after.png differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-contact.png b/docs/handpaint-batch4-wu-archer-naval-v3-contact.png new file mode 100644 index 0000000..4b21e9a Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-contact.png differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-debug-preview-battle-check.png b/docs/handpaint-batch4-wu-archer-naval-v3-debug-preview-battle-check.png new file mode 100644 index 0000000..da67ee9 Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch4-wu-archer-naval-v3-report.md b/docs/handpaint-batch4-wu-archer-naval-v3-report.md new file mode 100644 index 0000000..b5d2137 --- /dev/null +++ b/docs/handpaint-batch4-wu-archer-naval-v3-report.md @@ -0,0 +1,24 @@ +# Wu Naval Archer v3 sprite report + +- source: `handpaint-batch4-wu-archer-naval-source-v1.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 2130250 +- action partial alpha: 0, opaque pixels: 4721410 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 212..229 +- base bbox height range: 277..288 +- base bottom range: 303..303 +- action bbox width range: 191..256 +- action bbox height range: 277..288 +- action bottom range: 303..303 +- contact: `handpaint-batch4-wu-archer-naval-v3-contact.png` +- animation: `handpaint-batch4-wu-archer-naval-v3-animation.gif` +- before/after: `handpaint-batch4-wu-archer-naval-v3-before-after.png` +- scale compare: `handpaint-batch4-wu-archer-naval-v3-scale-compare.png` +- battle composite: `handpaint-batch4-wu-archer-naval-v3-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-batch4-wu-archer-naval-v3-scale-compare.png b/docs/handpaint-batch4-wu-archer-naval-v3-scale-compare.png new file mode 100644 index 0000000..5e82654 Binary files /dev/null and b/docs/handpaint-batch4-wu-archer-naval-v3-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index 9699385..01f268b 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: 61 +- Approved baseline units: 62 - Pending approval units: 0 -- Queued rework units: 30 +- Queued rework units: 29 ## Checked Rules diff --git a/docs/unit-sprite-batch-queue.json b/docs/unit-sprite-batch-queue.json index 8bbcab6..adcb48e 100644 --- a/docs/unit-sprite-batch-queue.json +++ b/docs/unit-sprite-batch-queue.json @@ -59,6 +59,7 @@ "unit-wei-strategist-blue", "unit-wei-yan", "unit-wu-archer", + "unit-wu-archer-naval", "unit-wu-cavalry", "unit-wu-infantry", "unit-wu-officer", @@ -68,8 +69,8 @@ "pendingApproval": [], "nextAfterApproval": [], "stageCounts": { - "approved-baseline": 61, - "queued-rework": 30 + "approved-baseline": 62, + "queued-rework": 29 }, "batches": [ { @@ -677,24 +678,10 @@ "label": "Batch 4 Wu generic units", "total": 16, "stageCounts": { - "approved-baseline": 5, - "queued-rework": 11 + "approved-baseline": 6, + "queued-rework": 10 }, "units": [ - { - "stem": "unit-wu-archer-naval", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=140", - "battleBasePx": [ - 39.1, - 39.3, - 44.6, - 44.6 - ], - "spec": null - }, { "stem": "unit-wu-archer-river", "reviewStage": "queued-rework", @@ -849,6 +836,20 @@ ], "spec": null }, + { + "stem": "unit-wu-archer-naval", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 33.9, + 36.6, + 44.2, + 46.0 + ], + "spec": null + }, { "stem": "unit-wu-cavalry", "reviewStage": "approved-baseline", diff --git a/docs/unit-sprite-batch-queue.md b/docs/unit-sprite-batch-queue.md index 7f71628..63e3a6d 100644 --- a/docs/unit-sprite-batch-queue.md +++ b/docs/unit-sprite-batch-queue.md @@ -6,9 +6,9 @@ Use this as the long-running queue for the full hand-painted sprite rework. It i ## Current State -- Approved baseline units: 61 +- Approved baseline units: 62 - Pending approval units: 0 -- Queued rework units: 30 +- Queued rework units: 29 - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` @@ -98,11 +98,10 @@ No next unit is currently defined. - Batch key: `batch4-wu` - Total units: 16 -- Stage counts: approved-baseline 5, queued-rework 11 +- Stage counts: approved-baseline 6, queued-rework 10 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-wu-archer-naval` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | | `unit-wu-archer-river` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | | `unit-wu-cavalry-elite` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 26.5..47.3 x 45.0..46.0 | | | `unit-wu-cavalry-river` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | | @@ -114,6 +113,7 @@ No next unit is currently defined. | `unit-wu-strategist-river` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-wu-yi` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-wu-archer` | approved reference | approved-baseline | technical ok | 28.3..34.3 x 46.0..46.0 | | +| `unit-wu-archer-naval` | approved reference | approved-baseline | technical ok | 33.9..36.6 x 44.2..46.0 | | | `unit-wu-cavalry` | approved reference | approved-baseline | technical ok | 28.3..40.3 x 43.8..46.3 | | | `unit-wu-infantry` | approved reference | approved-baseline | technical ok | 25.2..33.1 x 46.0..46.5 | | | `unit-wu-officer` | approved reference | approved-baseline | technical ok | 25.4..32.9 x 46.0..46.0 | | diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index 0d47ac3..559b34c 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 2283b39..c9eb685 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: 61 +- Approved baseline units: 62 - Pending approval units: 0 -- Queued rework units: 30 +- Queued rework units: 29 - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` - Current approval board: not generated until the next pending sample. diff --git a/docs/unit-sprite-review-approved-and-pending.png b/docs/unit-sprite-review-approved-and-pending.png index 811f654..3d003fd 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-batch4-wu.png b/docs/unit-sprite-review-batch4-wu.png index 063aaa3..b112717 100644 Binary files a/docs/unit-sprite-review-batch4-wu.png and b/docs/unit-sprite-review-batch4-wu.png differ diff --git a/docs/unit-sprite-review-index.png b/docs/unit-sprite-review-index.png index 9d2b494..9065808 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 1d9c940..9c75e34 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": 61, - "queued-rework": 30 + "approved-baseline": 62, + "queued-rework": 29 }, "rows": [ { @@ -4064,7 +4064,7 @@ }, { "batch": "batch4-wu", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-wu-archer-naval", "base": { "key": "unit-wu-archer-naval", @@ -4074,23 +4074,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 1937199, - "border_hits": 64, - "min_width": 245, - "max_width": 246, - "min_height": 279, - "max_height": 279, - "min_bottom": 281, - "max_bottom": 287, + "opaque_pixels": 2130250, + "border_hits": 0, + "min_width": 212, + "max_width": 229, + "min_height": 277, + "max_height": 288, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 1, - "height_swing": 0, - "bottom_swing": 6, - "battle_min_width_px": 39.1, - "battle_max_width_px": 39.3, - "battle_min_height_px": 44.6, - "battle_max_height_px": 44.6, - "status": "border-hits=64" + "width_swing": 17, + "height_swing": 11, + "bottom_swing": 0, + "battle_min_width_px": 33.9, + "battle_max_width_px": 36.6, + "battle_min_height_px": 44.2, + "battle_max_height_px": 46.0, + "status": "ok" }, "actions": { "key": "unit-wu-archer-naval-actions", @@ -4100,23 +4100,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4320862, - "border_hits": 140, - "min_width": 220, - "max_width": 255, - "min_height": 275, - "max_height": 279, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 4721410, + "border_hits": 0, + "min_width": 191, + "max_width": 256, + "min_height": 277, + "max_height": 288, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 35, - "height_swing": 4, - "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.6, - "status": "border-hits=140" + "width_swing": 65, + "height_swing": 11, + "bottom_swing": 0, + "battle_min_width_px": 30.5, + "battle_max_width_px": 40.9, + "battle_min_height_px": 44.2, + "battle_max_height_px": 46.0, + "status": "ok" } }, { diff --git a/docs/unit-sprite-rework-audit.md b/docs/unit-sprite-rework-audit.md index 0958d32..005851a 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: 61 -- queued-rework: 30 +- approved-baseline: 62 +- queued-rework: 29 ## Batch Plan @@ -123,7 +123,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch3-wei | approved-baseline | `unit-wei-strategist-blue` | ok | ok | 165..210 x 288..288 | 165..246 x 264..288 | 26.4..33.5 x 46.0..46.0 | w45 h0 b0 | | batch3-wei | approved-baseline | `unit-wei-yan` | ok | ok | 173..219 x 277..290 | 173..264 x 232..290 | 27.6..35.0 x 44.2..46.3 | w46 h13 b0 | | batch4-wu | approved-baseline | `unit-wu-archer` | ok | ok | 177..215 x 288..288 | 178..242 x 288..288 | 28.3..34.3 x 46.0..46.0 | w38 h0 b0 | -| batch4-wu | queued-rework | `unit-wu-archer-naval` | border-hits=64 | border-hits=140 | 245..246 x 279..279 | 220..255 x 275..279 | 39.1..39.3 x 44.6..44.6 | w1 h0 b6 | +| batch4-wu | approved-baseline | `unit-wu-archer-naval` | ok | ok | 212..229 x 277..288 | 191..256 x 277..288 | 33.9..36.6 x 44.2..46.0 | w17 h11 b0 | | batch4-wu | queued-rework | `unit-wu-archer-river` | border-hits=64 | border-hits=140 | 245..246 x 279..279 | 220..255 x 275..279 | 39.1..39.3 x 44.6..44.6 | w1 h0 b6 | | batch4-wu | approved-baseline | `unit-wu-cavalry` | ok | ok | 177..252 x 274..290 | 177..261 x 274..290 | 28.3..40.3 x 43.8..46.3 | w75 h16 b0 | | batch4-wu | queued-rework | `unit-wu-cavalry-elite` | border-hits=64 | border-hits=144 | 166..296 x 282..288 | 166..305 x 274..290 | 26.5..47.3 x 45.0..46.0 | w130 h6 b6 | diff --git a/docs/unit-sprite-rework-manifest.json b/docs/unit-sprite-rework-manifest.json index 898575b..b89d309 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -67,6 +67,7 @@ "unit-wei-strategist-blue", "unit-wei-yan", "unit-wu-archer", + "unit-wu-archer-naval", "unit-wu-cavalry", "unit-wu-infantry", "unit-wu-officer", diff --git a/docs/unit-sprite-wu-archer-naval-v3-approval-packet.md b/docs/unit-sprite-wu-archer-naval-v3-approval-packet.md new file mode 100644 index 0000000..dbf7d61 --- /dev/null +++ b/docs/unit-sprite-wu-archer-naval-v3-approval-packet.md @@ -0,0 +1,36 @@ +# Wu Naval Archer v3 Approval Packet + +- status: approved during continuous production run +- unit: `unit-wu-archer-naval` +- source art: `handpaint-batch4-wu-archer-naval-source-v1.png` +- contact sheet: `handpaint-batch4-wu-archer-naval-v3-contact.png` +- animation GIF: `handpaint-batch4-wu-archer-naval-v3-animation.gif` +- before/after: `handpaint-batch4-wu-archer-naval-v3-before-after.png` +- scale compare: `handpaint-batch4-wu-archer-naval-v3-scale-compare.png` +- battle composite: `handpaint-batch4-wu-archer-naval-v3-battle-composite.png` +- browser check: `handpaint-batch4-wu-archer-naval-v3-debug-preview-battle-check.png` +- current board: `unit-sprite-current-approval-board.png` +- debug URL: `http://127.0.0.1:4173/heros_web/?debug&debugSpritePreview=unit-wu-archer-naval&v=wu-archer-naval-v3` + +## Visual Decision + +Approved for the continuous batch run. v3 reads as a Wu naval archer through the large bow silhouette, teal/navy river-navy clothing, quiver, and red sash details. It stays distinct from the generic Wu archer and from infantry/cavalry classes while remaining contained at 50px battle scale. + +## Technical Checks + +- base status: ok +- action status: ok +- 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 +- battle scale from sample gate: 33.9..36.6 x 44.2..46.0 +- local build: passed +- Local browser console errors: `0` +- Local browser 404s: `0` + +## Notes + +v1 and v2 were discarded because the bow action silhouette was too narrow for the release readability gate. v3 widens the pose enough for the archer action to read without adding border hits. diff --git a/src/assets/images/units/unit-wu-archer-naval-actions.png b/src/assets/images/units/unit-wu-archer-naval-actions.png index f8678d2..b2cfe70 100644 Binary files a/src/assets/images/units/unit-wu-archer-naval-actions.png and b/src/assets/images/units/unit-wu-archer-naval-actions.png differ diff --git a/src/assets/images/units/unit-wu-archer-naval.png b/src/assets/images/units/unit-wu-archer-naval.png index 714ffc1..db75fd4 100644 Binary files a/src/assets/images/units/unit-wu-archer-naval.png and b/src/assets/images/units/unit-wu-archer-naval.png differ