diff --git a/docs/handpaint-batch6-nanman-officer-bronze-source-v2.png b/docs/handpaint-batch6-nanman-officer-bronze-source-v2.png new file mode 100644 index 0000000..b846bdc Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-source-v2.png differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-animation.gif b/docs/handpaint-batch6-nanman-officer-bronze-v2-animation.gif new file mode 100644 index 0000000..f39f770 Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-animation.gif differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-battle-composite.png b/docs/handpaint-batch6-nanman-officer-bronze-v2-battle-composite.png new file mode 100644 index 0000000..25a4f3e Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-battle-composite.png differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-before-after.png b/docs/handpaint-batch6-nanman-officer-bronze-v2-before-after.png new file mode 100644 index 0000000..9e764bc Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-before-after.png differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-contact.png b/docs/handpaint-batch6-nanman-officer-bronze-v2-contact.png new file mode 100644 index 0000000..34acd25 Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-contact.png differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-debug-preview-battle-check.png b/docs/handpaint-batch6-nanman-officer-bronze-v2-debug-preview-battle-check.png new file mode 100644 index 0000000..63cf965 Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch6-nanman-officer-bronze-v2-report.md b/docs/handpaint-batch6-nanman-officer-bronze-v2-report.md new file mode 100644 index 0000000..578ddce --- /dev/null +++ b/docs/handpaint-batch6-nanman-officer-bronze-v2-report.md @@ -0,0 +1,24 @@ +# Nanman Bronze Officer Hand-Painted v2 + +- source: `handpaint-batch6-nanman-officer-bronze-source-v2.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 1969466 +- action partial alpha: 0, opaque pixels: 4342513 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 177..214 +- base bbox height range: 284..288 +- base bottom range: 303..303 +- action bbox width range: 155..264 +- action bbox height range: 238..295 +- action bottom range: 303..303 +- contact: `handpaint-batch6-nanman-officer-bronze-v2-contact.png` +- animation: `handpaint-batch6-nanman-officer-bronze-v2-animation.gif` +- before/after: `handpaint-batch6-nanman-officer-bronze-v2-before-after.png` +- scale compare: `handpaint-batch6-nanman-officer-bronze-v2-scale-compare.png` +- battle composite: `handpaint-batch6-nanman-officer-bronze-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-batch6-nanman-officer-bronze-v2-scale-compare.png b/docs/handpaint-batch6-nanman-officer-bronze-v2-scale-compare.png new file mode 100644 index 0000000..fbdb7f9 Binary files /dev/null and b/docs/handpaint-batch6-nanman-officer-bronze-v2-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index 8f853ad..24173b8 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: 33 +- Approved baseline units: 34 - Pending approval units: 0 -- Queued rework units: 58 +- Queued rework units: 57 ## Checked Rules diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index 5ed5954..7b27749 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-nanman-officer-bronze-v2-approval-packet.md b/docs/unit-sprite-nanman-officer-bronze-v2-approval-packet.md new file mode 100644 index 0000000..c754bee --- /dev/null +++ b/docs/unit-sprite-nanman-officer-bronze-v2-approval-packet.md @@ -0,0 +1,36 @@ +# Unit Sprite Approval Packet: unit-nanman-officer-bronze v2 + +- Status: approved during continuous production run +- Source art: `docs/handpaint-batch6-nanman-officer-bronze-source-v2.png` +- Contact sheet: `docs/handpaint-batch6-nanman-officer-bronze-v2-contact.png` +- Animation GIF: `docs/handpaint-batch6-nanman-officer-bronze-v2-animation.gif` +- Before/after: `docs/handpaint-batch6-nanman-officer-bronze-v2-before-after.png` +- Scale compare: `docs/handpaint-batch6-nanman-officer-bronze-v2-scale-compare.png` +- Browser check: `docs/handpaint-batch6-nanman-officer-bronze-v2-debug-preview-battle-check.png` +- Current approval board: `docs/unit-sprite-current-approval-board.png` +- Debug preview URL: `http://127.0.0.1:4173/heros_web/?debug&debugSpritePreview=unit-nanman-officer-bronze&v=nanman-officer-bronze-v2-console-clean` + +## Visual Decision + +Nanman bronze officer v2 is accepted as an elite bronze-armored southern commander. v1 was rejected because the source grid did not match the assembler layout and produced sliced frames. v2 uses the correct 6x2 source layout, reads heavier than the regular Nanman officer, and remains below Meng Huo's boss-scale silhouette. + +## Technical Checks + +- 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: `177..214` +- Base bbox height range: `284..288` +- Base bottom range: `303..303` +- Action bbox width range: `155..264` +- Action bbox height range: `238..295` +- Action bottom range: `303..303` +- Local build: `passed` +- Local browser console errors: `0` + +## Notes + +The unit remains fully opaque and readable at desktop battle scale without relying on bases, rings, or external badges. A small project favicon was added during this check to remove unrelated browser `/favicon.ico` 404 noise from console verification. diff --git a/docs/unit-sprite-next-steps.md b/docs/unit-sprite-next-steps.md index 7a3325f..38ed352 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: 33 +- Approved baseline units: 34 - Pending approval units: 0 -- Queued rework units: 58 +- Queued rework units: 57 - 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,11 +14,10 @@ This file is generated by `scripts/write-unit-sprite-next-steps.py`. ## Next Unit Queue -1. `unit-nanman-officer-bronze` - queued-rework, base `border-hits=64`, actions `border-hits=144` -2. `unit-nanman-officer-warlord` - queued-rework, base `border-hits=64`, actions `border-hits=144` -3. `unit-nanman-shaman` - queued-rework, base `border-hits=32`, actions `border-hits=98` -4. `unit-nanman-shaman-ember` - queued-rework, base `border-hits=32`, actions `border-hits=98` -5. `unit-nanman-shaman-storm` - queued-rework, base `border-hits=32`, actions `border-hits=98` +1. `unit-nanman-officer-warlord` - queued-rework, base `border-hits=64`, actions `border-hits=144` +2. `unit-nanman-shaman` - queued-rework, base `border-hits=32`, actions `border-hits=98` +3. `unit-nanman-shaman-ember` - queued-rework, base `border-hits=32`, actions `border-hits=98` +4. `unit-nanman-shaman-storm` - queued-rework, base `border-hits=32`, actions `border-hits=98` ## Commands Before Approval @@ -45,5 +44,5 @@ pnpm build ## First Task After Current Approval -- Start with `unit-nanman-officer-bronze`. +- Start with `unit-nanman-officer-warlord`. - 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 b23696e..22db54c 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-batch6-nanman-special.png b/docs/unit-sprite-review-batch6-nanman-special.png index bfa3de7..43a6b47 100644 Binary files a/docs/unit-sprite-review-batch6-nanman-special.png and b/docs/unit-sprite-review-batch6-nanman-special.png differ diff --git a/docs/unit-sprite-review-index.png b/docs/unit-sprite-review-index.png index b892523..d31232a 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 f8698c3..21a95c9 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": 33, - "queued-rework": 58 + "approved-baseline": 34, + "queued-rework": 57 }, "rows": [ { @@ -1100,7 +1100,7 @@ }, { "batch": "batch6-nanman-special", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-nanman-officer-bronze", "base": { "key": "unit-nanman-officer-bronze", @@ -1110,23 +1110,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 2138098, - "border_hits": 64, - "min_width": 208, - "max_width": 258, - "min_height": 282, + "opaque_pixels": 1969466, + "border_hits": 0, + "min_width": 177, + "max_width": 214, + "min_height": 284, "max_height": 288, - "min_bottom": 281, - "max_bottom": 287, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 50, - "height_swing": 6, - "bottom_swing": 6, - "battle_min_width_px": 33.2, - "battle_max_width_px": 41.2, - "battle_min_height_px": 45.0, + "width_swing": 37, + "height_swing": 4, + "bottom_swing": 0, + "battle_min_width_px": 28.3, + "battle_max_width_px": 34.2, + "battle_min_height_px": 45.4, "battle_max_height_px": 46.0, - "status": "border-hits=64" + "status": "ok" }, "actions": { "key": "unit-nanman-officer-bronze-actions", @@ -1136,23 +1136,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4783362, - "border_hits": 144, - "min_width": 208, - "max_width": 267, - "min_height": 275, - "max_height": 290, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 4342513, + "border_hits": 0, + "min_width": 155, + "max_width": 264, + "min_height": 238, + "max_height": 295, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 59, - "height_swing": 15, - "bottom_swing": 15, - "battle_min_width_px": 33.2, - "battle_max_width_px": 42.7, - "battle_min_height_px": 43.9, - "battle_max_height_px": 46.3, - "status": "border-hits=144" + "width_swing": 109, + "height_swing": 57, + "bottom_swing": 0, + "battle_min_width_px": 24.8, + "battle_max_width_px": 42.2, + "battle_min_height_px": 38.0, + "battle_max_height_px": 47.1, + "status": "ok" } }, { diff --git a/docs/unit-sprite-rework-audit.md b/docs/unit-sprite-rework-audit.md index f738608..3e6480c 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: 33 -- queued-rework: 58 +- approved-baseline: 34 +- queued-rework: 57 ## Batch Plan @@ -71,7 +71,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch6-nanman-special | approved-baseline | `unit-nanman-infantry-jungle` | ok | ok | 172..209 x 286..288 | 158..247 x 282..288 | 27.5..33.4 x 45.7..46.0 | w37 h2 b0 | | batch6-nanman-special | approved-baseline | `unit-nanman-infantry-spear` | ok | ok | 138..219 x 286..288 | 137..263 x 277..289 | 22.0..35.0 x 45.7..46.0 | w81 h2 b0 | | batch6-nanman-special | approved-baseline | `unit-nanman-officer` | ok | ok | 163..215 x 288..288 | 159..238 x 280..288 | 26.0..34.3 x 46.0..46.0 | w52 h0 b0 | -| batch6-nanman-special | queued-rework | `unit-nanman-officer-bronze` | 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 | +| batch6-nanman-special | approved-baseline | `unit-nanman-officer-bronze` | ok | ok | 177..214 x 284..288 | 155..264 x 238..295 | 28.3..34.2 x 45.4..46.0 | w37 h4 b0 | | batch6-nanman-special | queued-rework | `unit-nanman-officer-warlord` | border-hits=64 | border-hits=144 | 224..266 x 282..288 | 224..275 x 275..290 | 35.8..42.5 x 45.0..46.0 | w42 h6 b6 | | batch6-nanman-special | queued-rework | `unit-nanman-shaman` | 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 | | batch6-nanman-special | queued-rework | `unit-nanman-shaman-ember` | 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 | diff --git a/docs/unit-sprite-rework-manifest.json b/docs/unit-sprite-rework-manifest.json index 76bcc4a..02baa11 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -18,6 +18,7 @@ "unit-nanman-infantry-jungle", "unit-nanman-infantry-spear", "unit-nanman-officer", + "unit-nanman-officer-bronze", "unit-rebel", "unit-rebel-archer", "unit-rebel-archer-fire", @@ -48,7 +49,6 @@ "pendingApproval": [], "currentApprovalCandidate": {}, "nextAfterApproval": [ - "unit-nanman-officer-bronze", "unit-nanman-officer-warlord", "unit-nanman-shaman", "unit-nanman-shaman-ember", diff --git a/index.html b/index.html index 677af75..739f19d 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,7 @@ + 삼국지: 세 형제의 맹세 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e42068c Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/assets/images/units/unit-nanman-officer-bronze-actions.png b/src/assets/images/units/unit-nanman-officer-bronze-actions.png index 63b3b6d..ac6a9c0 100644 Binary files a/src/assets/images/units/unit-nanman-officer-bronze-actions.png and b/src/assets/images/units/unit-nanman-officer-bronze-actions.png differ diff --git a/src/assets/images/units/unit-nanman-officer-bronze.png b/src/assets/images/units/unit-nanman-officer-bronze.png index cb37040..e6b4593 100644 Binary files a/src/assets/images/units/unit-nanman-officer-bronze.png and b/src/assets/images/units/unit-nanman-officer-bronze.png differ