diff --git a/docs/handpaint-batch7-huang-quan-source-v1.png b/docs/handpaint-batch7-huang-quan-source-v1.png new file mode 100644 index 0000000..d545655 Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-source-v1.png differ diff --git a/docs/handpaint-batch7-huang-quan-v3-animation.gif b/docs/handpaint-batch7-huang-quan-v3-animation.gif new file mode 100644 index 0000000..cf5e6fc Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-animation.gif differ diff --git a/docs/handpaint-batch7-huang-quan-v3-battle-composite.png b/docs/handpaint-batch7-huang-quan-v3-battle-composite.png new file mode 100644 index 0000000..46eb44e Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-battle-composite.png differ diff --git a/docs/handpaint-batch7-huang-quan-v3-before-after.png b/docs/handpaint-batch7-huang-quan-v3-before-after.png new file mode 100644 index 0000000..d1aecf2 Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-before-after.png differ diff --git a/docs/handpaint-batch7-huang-quan-v3-contact.png b/docs/handpaint-batch7-huang-quan-v3-contact.png new file mode 100644 index 0000000..6c4ae01 Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-contact.png differ diff --git a/docs/handpaint-batch7-huang-quan-v3-debug-preview-battle-check.png b/docs/handpaint-batch7-huang-quan-v3-debug-preview-battle-check.png new file mode 100644 index 0000000..7653229 Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch7-huang-quan-v3-report.md b/docs/handpaint-batch7-huang-quan-v3-report.md new file mode 100644 index 0000000..109bf4f --- /dev/null +++ b/docs/handpaint-batch7-huang-quan-v3-report.md @@ -0,0 +1,24 @@ +# Huang Quan Handpainted Sprite v3 + +- source: `handpaint-batch7-huang-quan-source-v1.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 2387940 +- action partial alpha: 0, opaque pixels: 5400755 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 181..218 +- base bbox height range: 290..290 +- base bottom range: 303..303 +- action bbox width range: 176..251 +- action bbox height range: 284..290 +- action bottom range: 303..303 +- contact: `handpaint-batch7-huang-quan-v3-contact.png` +- animation: `handpaint-batch7-huang-quan-v3-animation.gif` +- before/after: `handpaint-batch7-huang-quan-v3-before-after.png` +- scale compare: `handpaint-batch7-huang-quan-v3-scale-compare.png` +- battle composite: `handpaint-batch7-huang-quan-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-batch7-huang-quan-v3-scale-compare.png b/docs/handpaint-batch7-huang-quan-v3-scale-compare.png new file mode 100644 index 0000000..e7e080b Binary files /dev/null and b/docs/handpaint-batch7-huang-quan-v3-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index 1d6a82f..f0fcead 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: 75 +- Approved baseline units: 76 - Pending approval units: 0 -- Queued rework units: 16 +- Queued rework units: 15 ## Checked Rules diff --git a/docs/unit-sprite-batch-queue.json b/docs/unit-sprite-batch-queue.json index 459793d..207f1ab 100644 --- a/docs/unit-sprite-batch-queue.json +++ b/docs/unit-sprite-batch-queue.json @@ -7,6 +7,7 @@ "unit-fa-zheng", "unit-gong-zhi", "unit-guan-yu", + "unit-huang-quan", "unit-liu-bei", "unit-meng-huo", "unit-nanman-infantry", @@ -82,8 +83,8 @@ "pendingApproval": [], "nextAfterApproval": [], "stageCounts": { - "approved-baseline": 75, - "queued-rework": 16 + "approved-baseline": 76, + "queued-rework": 15 }, "batches": [ { @@ -1169,24 +1170,10 @@ "label": "Batch 7 unique officers", "total": 19, "stageCounts": { - "approved-baseline": 3, - "queued-rework": 16 + "approved-baseline": 4, + "queued-rework": 15 }, "units": [ - { - "stem": "unit-huang-quan", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", - "battleBasePx": [ - 31.9, - 40.6, - 44.6, - 44.6 - ], - "spec": null - }, { "stem": "unit-huang-zhong", "reviewStage": "queued-rework", @@ -1438,6 +1425,20 @@ 46.3 ], "spec": null + }, + { + "stem": "unit-huang-quan", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 28.9, + 34.8, + 46.3, + 46.3 + ], + "spec": null } ] } diff --git a/docs/unit-sprite-batch-queue.md b/docs/unit-sprite-batch-queue.md index 1a9c958..0414c87 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: 75 +- Approved baseline units: 76 - Pending approval units: 0 -- Queued rework units: 16 +- Queued rework units: 15 - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` @@ -157,11 +157,10 @@ No next unit is currently defined. - Batch key: `batch7-unique-officer` - Total units: 19 -- Stage counts: approved-baseline 3, queued-rework 16 +- Stage counts: approved-baseline 4, queued-rework 15 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-huang-quan` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-huang-zhong` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | | `unit-jiang-wei` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.0..40.6 x 44.6..44.6 | | | `unit-li-yan` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | @@ -180,3 +179,4 @@ No next unit is currently defined. | `unit-cao-cao` | approved reference | approved-baseline | technical ok | 32.9..36.4 x 46.3..47.3 | | | `unit-fa-zheng` | approved reference | approved-baseline | technical ok | 29.1..35.3 x 46.3..46.3 | | | `unit-gong-zhi` | approved reference | approved-baseline | technical ok | 33.2..35.5 x 46.3..46.3 | | +| `unit-huang-quan` | approved reference | approved-baseline | technical ok | 28.9..34.8 x 46.3..46.3 | | diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index 991ebdf..c51331e 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-huang-quan-v3-approval-packet.md b/docs/unit-sprite-huang-quan-v3-approval-packet.md new file mode 100644 index 0000000..d6e7814 --- /dev/null +++ b/docs/unit-sprite-huang-quan-v3-approval-packet.md @@ -0,0 +1,37 @@ +# Huang Quan v3 Approval Packet + +- status: approved during continuous production run +- unit: `unit-huang-quan` +- source art: `handpaint-batch7-huang-quan-source-v1.png` +- contact sheet: `handpaint-batch7-huang-quan-v3-contact.png` +- animation GIF: `handpaint-batch7-huang-quan-v3-animation.gif` +- before/after: `handpaint-batch7-huang-quan-v3-before-after.png` +- scale compare: `handpaint-batch7-huang-quan-v3-scale-compare.png` +- battle composite: `handpaint-batch7-huang-quan-v3-battle-composite.png` +- browser check: `handpaint-batch7-huang-quan-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-huang-quan&v=huang-quan-v3` + +## Visual Decision + +Approved for the continuous batch run. v3 reads as Huang Quan through a cool blue-gray official robe, supply ledger, rolled map, and controlled command poses. It is more administrative and restrained than Fa Zheng, and more formal than Gong Zhi's rugged Wuling-guide silhouette. + +## 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: 28.9..34.8 x 46.3..46.3 +- action battle scale from audit: 28.1..40.1 x 45.4..46.3 +- local build: passed +- Local browser console errors: `0` +- Local browser 404s: `0` + +## Notes + +v1 and v2 kept the correct personality but were too narrow in the action readability gate. v3 widens the robe and ledger poses enough to pass while preserving Huang Quan's careful logistics-advisor identity. diff --git a/docs/unit-sprite-next-steps.md b/docs/unit-sprite-next-steps.md index 9491ec9..09d71c4 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: 75 +- Approved baseline units: 76 - Pending approval units: 0 -- Queued rework units: 16 +- Queued rework units: 15 - 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 f9bf401..f745364 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-batch7-unique-officer.png b/docs/unit-sprite-review-batch7-unique-officer.png index 6d2e1fe..b1b9bec 100644 Binary files a/docs/unit-sprite-review-batch7-unique-officer.png and b/docs/unit-sprite-review-batch7-unique-officer.png differ diff --git a/docs/unit-sprite-review-index.png b/docs/unit-sprite-review-index.png index 31936bb..7a03900 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 df0eac3..b8f1b00 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": 75, - "queued-rework": 16 + "approved-baseline": 76, + "queued-rework": 15 }, "rows": [ { @@ -245,7 +245,7 @@ }, { "batch": "batch7-unique-officer", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-huang-quan", "base": { "key": "unit-huang-quan", @@ -255,23 +255,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 1985543, - "border_hits": 32, - "min_width": 200, - "max_width": 254, - "min_height": 279, - "max_height": 279, - "min_bottom": 281, - "max_bottom": 287, + "opaque_pixels": 2387940, + "border_hits": 0, + "min_width": 181, + "max_width": 218, + "min_height": 290, + "max_height": 290, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 54, + "width_swing": 37, "height_swing": 0, - "bottom_swing": 6, - "battle_min_width_px": 31.9, - "battle_max_width_px": 40.6, - "battle_min_height_px": 44.6, - "battle_max_height_px": 44.6, - "status": "border-hits=32" + "bottom_swing": 0, + "battle_min_width_px": 28.9, + "battle_max_width_px": 34.8, + "battle_min_height_px": 46.3, + "battle_max_height_px": 46.3, + "status": "ok" }, "actions": { "key": "unit-huang-quan-actions", @@ -281,23 +281,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4453784, - "border_hits": 82, - "min_width": 200, - "max_width": 263, - "min_height": 275, - "max_height": 279, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 5400755, + "border_hits": 0, + "min_width": 176, + "max_width": 251, + "min_height": 284, + "max_height": 290, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 63, - "height_swing": 4, - "bottom_swing": 15, - "battle_min_width_px": 31.9, - "battle_max_width_px": 42.0, - "battle_min_height_px": 43.9, - "battle_max_height_px": 44.6, - "status": "border-hits=82" + "width_swing": 75, + "height_swing": 6, + "bottom_swing": 0, + "battle_min_width_px": 28.1, + "battle_max_width_px": 40.1, + "battle_min_height_px": 45.4, + "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 210675a..5dbc476 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: 75 -- queued-rework: 16 +- approved-baseline: 76 +- queued-rework: 15 ## Batch Plan @@ -56,7 +56,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch7-unique-officer | approved-baseline | `unit-fa-zheng` | ok | ok | 182..221 x 290..290 | 183..244 x 270..290 | 29.1..35.3 x 46.3..46.3 | w39 h0 b0 | | batch7-unique-officer | approved-baseline | `unit-gong-zhi` | ok | ok | 208..222 x 290..290 | 196..287 x 270..290 | 33.2..35.5 x 46.3..46.3 | w14 h0 b0 | | batch1-approved-core | approved-baseline | `unit-guan-yu` | ok | ok | 190..270 x 276..291 | 172..296 x 171..289 | 30.4..43.1 x 44.1..46.5 | w80 h15 b4 | -| batch7-unique-officer | queued-rework | `unit-huang-quan` | 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 | +| batch7-unique-officer | approved-baseline | `unit-huang-quan` | ok | ok | 181..218 x 290..290 | 176..251 x 284..290 | 28.9..34.8 x 46.3..46.3 | w37 h0 b0 | | batch7-unique-officer | queued-rework | `unit-huang-zhong` | 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 | | batch7-unique-officer | queued-rework | `unit-jiang-wei` | 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 | | batch7-unique-officer | queued-rework | `unit-li-yan` | 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 a999122..b6f5571 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -15,6 +15,7 @@ "unit-fa-zheng", "unit-gong-zhi", "unit-guan-yu", + "unit-huang-quan", "unit-liu-bei", "unit-meng-huo", "unit-nanman-infantry", diff --git a/src/assets/images/units/unit-huang-quan-actions.png b/src/assets/images/units/unit-huang-quan-actions.png index 74501a4..3d88bd1 100644 Binary files a/src/assets/images/units/unit-huang-quan-actions.png and b/src/assets/images/units/unit-huang-quan-actions.png differ diff --git a/src/assets/images/units/unit-huang-quan.png b/src/assets/images/units/unit-huang-quan.png index 9d7af18..a149e7b 100644 Binary files a/src/assets/images/units/unit-huang-quan.png and b/src/assets/images/units/unit-huang-quan.png differ