diff --git a/docs/handpaint-batch4-wu-infantry-marine-source-v1.png b/docs/handpaint-batch4-wu-infantry-marine-source-v1.png new file mode 100644 index 0000000..d54fd91 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-source-v1.png differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-animation.gif b/docs/handpaint-batch4-wu-infantry-marine-v1-animation.gif new file mode 100644 index 0000000..2298253 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-animation.gif differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-battle-composite.png b/docs/handpaint-batch4-wu-infantry-marine-v1-battle-composite.png new file mode 100644 index 0000000..efc22b4 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-battle-composite.png differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-before-after.png b/docs/handpaint-batch4-wu-infantry-marine-v1-before-after.png new file mode 100644 index 0000000..4a1a247 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-before-after.png differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-contact.png b/docs/handpaint-batch4-wu-infantry-marine-v1-contact.png new file mode 100644 index 0000000..48dac01 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-contact.png differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-debug-preview-battle-check.png b/docs/handpaint-batch4-wu-infantry-marine-v1-debug-preview-battle-check.png new file mode 100644 index 0000000..bc3d2c0 Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch4-wu-infantry-marine-v1-report.md b/docs/handpaint-batch4-wu-infantry-marine-v1-report.md new file mode 100644 index 0000000..08aebd0 --- /dev/null +++ b/docs/handpaint-batch4-wu-infantry-marine-v1-report.md @@ -0,0 +1,24 @@ +# Wu Marine Infantry Hand-Painted v1 + +- source: `handpaint-batch4-wu-infantry-marine-source-v1.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 1986878 +- action partial alpha: 0, opaque pixels: 4536693 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 147..222 +- base bbox height range: 286..286 +- base bottom range: 303..303 +- action bbox width range: 144..294 +- action bbox height range: 251..293 +- action bottom range: 303..303 +- contact: `handpaint-batch4-wu-infantry-marine-v1-contact.png` +- animation: `handpaint-batch4-wu-infantry-marine-v1-animation.gif` +- before/after: `handpaint-batch4-wu-infantry-marine-v1-before-after.png` +- scale compare: `handpaint-batch4-wu-infantry-marine-v1-scale-compare.png` +- battle composite: `handpaint-batch4-wu-infantry-marine-v1-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-infantry-marine-v1-scale-compare.png b/docs/handpaint-batch4-wu-infantry-marine-v1-scale-compare.png new file mode 100644 index 0000000..bf2653b Binary files /dev/null and b/docs/handpaint-batch4-wu-infantry-marine-v1-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index 8734af5..f3beaf2 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: 65 +- Approved baseline units: 66 - Pending approval units: 0 -- Queued rework units: 26 +- Queued rework units: 25 ## Checked Rules diff --git a/docs/unit-sprite-batch-queue.json b/docs/unit-sprite-batch-queue.json index bd393e3..62c1aac 100644 --- a/docs/unit-sprite-batch-queue.json +++ b/docs/unit-sprite-batch-queue.json @@ -65,6 +65,7 @@ "unit-wu-cavalry-elite", "unit-wu-cavalry-river", "unit-wu-infantry", + "unit-wu-infantry-marine", "unit-wu-officer", "unit-wu-strategist", "unit-zhang-fei" @@ -72,8 +73,8 @@ "pendingApproval": [], "nextAfterApproval": [], "stageCounts": { - "approved-baseline": 65, - "queued-rework": 26 + "approved-baseline": 66, + "queued-rework": 25 }, "batches": [ { @@ -681,24 +682,10 @@ "label": "Batch 4 Wu generic units", "total": 16, "stageCounts": { - "approved-baseline": 9, - "queued-rework": 7 + "approved-baseline": 10, + "queued-rework": 6 }, "units": [ - { - "stem": "unit-wu-infantry-marine", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", - "battleBasePx": [ - 30.7, - 44.2, - 44.6, - 44.6 - ], - "spec": null - }, { "stem": "unit-wu-infantry-river", "reviewStage": "queued-rework", @@ -881,6 +868,20 @@ ], "spec": null }, + { + "stem": "unit-wu-infantry-marine", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 23.5, + 35.5, + 45.7, + 45.7 + ], + "spec": null + }, { "stem": "unit-wu-officer", "reviewStage": "approved-baseline", diff --git a/docs/unit-sprite-batch-queue.md b/docs/unit-sprite-batch-queue.md index ad458fc..6aeaf7a 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: 65 +- Approved baseline units: 66 - Pending approval units: 0 -- Queued rework units: 26 +- Queued rework units: 25 - 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 9, queued-rework 7 +- Stage counts: approved-baseline 10, queued-rework 6 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-wu-infantry-marine` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `unit-wu-infantry-river` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `unit-wu-officer-harbor` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-wu-officer-river` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | @@ -116,6 +115,7 @@ No next unit is currently defined. | `unit-wu-cavalry-elite` | approved reference | approved-baseline | technical ok | 36.6..40.7 x 46.0..46.0 | | | `unit-wu-cavalry-river` | approved reference | approved-baseline | technical ok | 24.1..45.0 x 43.3..46.0 | | | `unit-wu-infantry` | approved reference | approved-baseline | technical ok | 25.2..33.1 x 46.0..46.5 | | +| `unit-wu-infantry-marine` | approved reference | approved-baseline | technical ok | 23.5..35.5 x 45.7..45.7 | | | `unit-wu-officer` | approved reference | approved-baseline | technical ok | 25.4..32.9 x 46.0..46.0 | | | `unit-wu-strategist` | approved reference | approved-baseline | technical ok | 25.7..40.7 x 46.0..46.3 | | diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index 9cf3e14..6611ef8 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 0731929..d758568 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: 65 +- Approved baseline units: 66 - Pending approval units: 0 -- Queued rework units: 26 +- Queued rework units: 25 - 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 0d0b668..0aa1874 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 51c62c0..9f366db 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 a3f4e41..6640390 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 6ec613e..67afa91 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": 65, - "queued-rework": 26 + "approved-baseline": 66, + "queued-rework": 25 }, "rows": [ { @@ -4406,7 +4406,7 @@ }, { "batch": "batch4-wu", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-wu-infantry-marine", "base": { "key": "unit-wu-infantry-marine", @@ -4416,23 +4416,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 2055128, - "border_hits": 32, - "min_width": 192, - "max_width": 277, - "min_height": 279, - "max_height": 279, - "min_bottom": 281, - "max_bottom": 287, + "opaque_pixels": 1986878, + "border_hits": 0, + "min_width": 147, + "max_width": 222, + "min_height": 286, + "max_height": 286, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 85, + "width_swing": 75, "height_swing": 0, - "bottom_swing": 6, - "battle_min_width_px": 30.7, - "battle_max_width_px": 44.2, - "battle_min_height_px": 44.6, - "battle_max_height_px": 44.6, - "status": "border-hits=32" + "bottom_swing": 0, + "battle_min_width_px": 23.5, + "battle_max_width_px": 35.5, + "battle_min_height_px": 45.7, + "battle_max_height_px": 45.7, + "status": "ok" }, "actions": { "key": "unit-wu-infantry-marine-actions", @@ -4442,23 +4442,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4610202, - "border_hits": 82, - "min_width": 192, - "max_width": 286, - "min_height": 275, - "max_height": 279, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 4536693, + "border_hits": 0, + "min_width": 144, + "max_width": 294, + "min_height": 251, + "max_height": 293, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 94, - "height_swing": 4, - "bottom_swing": 15, - "battle_min_width_px": 30.7, - "battle_max_width_px": 45.7, - "battle_min_height_px": 43.9, - "battle_max_height_px": 44.6, - "status": "border-hits=82" + "width_swing": 150, + "height_swing": 42, + "bottom_swing": 0, + "battle_min_width_px": 23.0, + "battle_max_width_px": 47.0, + "battle_min_height_px": 40.1, + "battle_max_height_px": 46.8, + "status": "ok" } }, { diff --git a/docs/unit-sprite-rework-audit.md b/docs/unit-sprite-rework-audit.md index bbf1935..743f356 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: 65 -- queued-rework: 26 +- approved-baseline: 66 +- queued-rework: 25 ## Batch Plan @@ -129,7 +129,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch4-wu | approved-baseline | `unit-wu-cavalry-elite` | ok | ok | 229..255 x 288..288 | 220..286 x 267..288 | 36.6..40.7 x 46.0..46.0 | w26 h0 b0 | | batch4-wu | approved-baseline | `unit-wu-cavalry-river` | ok | ok | 151..282 x 271..288 | 146..303 x 271..294 | 24.1..45.0 x 43.3..46.0 | w131 h17 b0 | | batch4-wu | approved-baseline | `unit-wu-infantry` | ok | ok | 158..207 x 288..291 | 158..281 x 288..291 | 25.2..33.1 x 46.0..46.5 | w49 h3 b0 | -| batch4-wu | queued-rework | `unit-wu-infantry-marine` | border-hits=32 | border-hits=82 | 192..277 x 279..279 | 192..286 x 275..279 | 30.7..44.2 x 44.6..44.6 | w85 h0 b6 | +| batch4-wu | approved-baseline | `unit-wu-infantry-marine` | ok | ok | 147..222 x 286..286 | 144..294 x 251..293 | 23.5..35.5 x 45.7..45.7 | w75 h0 b0 | | batch4-wu | queued-rework | `unit-wu-infantry-river` | border-hits=32 | border-hits=82 | 192..277 x 279..279 | 192..286 x 275..279 | 30.7..44.2 x 44.6..44.6 | w85 h0 b6 | | batch4-wu | approved-baseline | `unit-wu-officer` | ok | ok | 159..206 x 288..288 | 154..253 x 288..288 | 25.4..32.9 x 46.0..46.0 | w47 h0 b0 | | batch4-wu | queued-rework | `unit-wu-officer-harbor` | 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 | diff --git a/docs/unit-sprite-rework-manifest.json b/docs/unit-sprite-rework-manifest.json index 01822e1..a856c6b 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -73,6 +73,7 @@ "unit-wu-cavalry-elite", "unit-wu-cavalry-river", "unit-wu-infantry", + "unit-wu-infantry-marine", "unit-wu-officer", "unit-wu-strategist", "unit-zhang-fei" diff --git a/docs/unit-sprite-wu-infantry-marine-v1-approval-packet.md b/docs/unit-sprite-wu-infantry-marine-v1-approval-packet.md new file mode 100644 index 0000000..173c42c --- /dev/null +++ b/docs/unit-sprite-wu-infantry-marine-v1-approval-packet.md @@ -0,0 +1,36 @@ +# Wu Marine Infantry v1 Approval Packet + +- status: approved during continuous production run +- unit: `unit-wu-infantry-marine` +- source art: `handpaint-batch4-wu-infantry-marine-source-v1.png` +- contact sheet: `handpaint-batch4-wu-infantry-marine-v1-contact.png` +- animation GIF: `handpaint-batch4-wu-infantry-marine-v1-animation.gif` +- before/after: `handpaint-batch4-wu-infantry-marine-v1-before-after.png` +- scale compare: `handpaint-batch4-wu-infantry-marine-v1-scale-compare.png` +- battle composite: `handpaint-batch4-wu-infantry-marine-v1-battle-composite.png` +- browser check: `handpaint-batch4-wu-infantry-marine-v1-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-infantry-marine&v=wu-infantry-marine-v1` + +## Visual Decision + +Approved for the continuous batch run. v1 replaces the previous flat placeholder with a fully opaque Wu marine infantry sprite. The round shield, short dao, red lacquer helmet, and dark teal cloth read clearly at battle scale and separate it from archers, cavalry, and strategist units. + +## 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: 23.5..35.5 x 45.7..45.7 +- local build: passed +- Local browser console errors: `0` +- Local browser 404s: `0` + +## Notes + +The v1 sheet keeps idle and walk height stable, avoids cropped action swings, and uses the unit art itself for readability without external bases, rings, or badges. diff --git a/src/assets/images/units/unit-wu-infantry-marine-actions.png b/src/assets/images/units/unit-wu-infantry-marine-actions.png index dff5754..6a4aa3a 100644 Binary files a/src/assets/images/units/unit-wu-infantry-marine-actions.png and b/src/assets/images/units/unit-wu-infantry-marine-actions.png differ diff --git a/src/assets/images/units/unit-wu-infantry-marine.png b/src/assets/images/units/unit-wu-infantry-marine.png index 91af016..fce87c6 100644 Binary files a/src/assets/images/units/unit-wu-infantry-marine.png and b/src/assets/images/units/unit-wu-infantry-marine.png differ