diff --git a/docs/unique-officer-personality-qa-v1.md b/docs/unique-officer-personality-qa-v1.md new file mode 100644 index 0000000..6ca21ac --- /dev/null +++ b/docs/unique-officer-personality-qa-v1.md @@ -0,0 +1,33 @@ +# Unique Officer Personality QA v1 + +## Scope + +Reviewed `unit-gong-zhi`, `unit-li-yan`, `unit-wu-yi`, `unit-wang-ping`, `unit-yan-yan`, and `unit-lu-meng` at 72px and 50px battle scale. + +## Finding + +`unit-wu-yi` was the weakest identity read. The v1 sprite used a teal/red officer palette that blended with the Wu faction board, even though Wu Yi is a Shu/Yizhou officer. + +## Fix + +Reworked `unit-wu-yi` into a Yizhou fortress officer: ochre-brown and dark indigo lamellar armor, tan leather, muted bronze trim, compact square helmet, command cloak, hooked dao, and command tally. + +## Result + +The QA board `unique-officer-personality-qa-v1.png` now separates these reads: + +- Gong Zhi: olive route-guide cloak +- Li Yan: heavy gate/supply commander +- Wu Yi v2: Yizhou fortress officer +- Wang Ping: shielded mountain defender +- Yan Yan: elder burgundy defender +- Lu Meng: Wu river cloak commander + +## Verification + +- Sprite release gate: passed +- Art quality gate: passed +- Workflow consistency gate: passed +- Build/deploy: passed +- Local browser console errors: 0 +- Deployed browser console errors: 0 diff --git a/docs/unique-officer-personality-qa-v1.png b/docs/unique-officer-personality-qa-v1.png new file mode 100644 index 0000000..064e548 Binary files /dev/null and b/docs/unique-officer-personality-qa-v1.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-animation.gif b/docs/unique-officer-qa-wu-yi-v2-animation.gif new file mode 100644 index 0000000..8b94b49 Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-animation.gif differ diff --git a/docs/unique-officer-qa-wu-yi-v2-battle-composite.png b/docs/unique-officer-qa-wu-yi-v2-battle-composite.png new file mode 100644 index 0000000..8ea3a2a Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-battle-composite.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-before-after.png b/docs/unique-officer-qa-wu-yi-v2-before-after.png new file mode 100644 index 0000000..b2df5b6 Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-before-after.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-browser-check.png b/docs/unique-officer-qa-wu-yi-v2-browser-check.png new file mode 100644 index 0000000..6406541 Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-browser-check.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-contact.png b/docs/unique-officer-qa-wu-yi-v2-contact.png new file mode 100644 index 0000000..36c4f8f Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-contact.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-prod-browser-check.png b/docs/unique-officer-qa-wu-yi-v2-prod-browser-check.png new file mode 100644 index 0000000..30e0383 Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-prod-browser-check.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-report.md b/docs/unique-officer-qa-wu-yi-v2-report.md new file mode 100644 index 0000000..1410eb8 --- /dev/null +++ b/docs/unique-officer-qa-wu-yi-v2-report.md @@ -0,0 +1,30 @@ +# Wu Yi Yizhou Officer v2 report + +- source: `unique-officer-qa-wu-yi-v2-source.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 2138154 +- action partial alpha: 0, opaque pixels: 4295358 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 167..250 +- base bbox height range: 286..288 +- base bottom range: 303..303 +- action bbox width range: 151..210 +- action bbox height range: 282..288 +- action bottom range: 303..303 +- contact: `unique-officer-qa-wu-yi-v2-contact.png` +- animation: `unique-officer-qa-wu-yi-v2-animation.gif` +- before/after: `unique-officer-qa-wu-yi-v2-before-after.png` +- scale compare: `unique-officer-qa-wu-yi-v2-scale-compare.png` +- battle composite: `unique-officer-qa-wu-yi-v2-battle-composite.png` +- local browser check: `unique-officer-qa-wu-yi-v2-browser-check.png` +- deployed browser check: `unique-officer-qa-wu-yi-v2-prod-browser-check.png` +- personality QA board: `unique-officer-personality-qa-v1.png` +- identity change: v1 read too close to an Eastern Wu red/blue officer. v2 reframes Wu Yi as a Shu/Yizhou fortress officer with ochre-brown and dark indigo armor, tan leather, muted bronze trim, a compact square helmet, short command cloak, hooked dao, and command tally. +- validation: sprite release gate passed, art quality gate passed, workflow consistency gate passed +- build/deploy: `pnpm deploy:nas` passed and deployed to `/volume1/web/heros_web` +- browser verification: local debug preview console errors 0; deployed debug preview console errors 0 +- note: battle composite is a scale review image; gameplay roster is unchanged during sample approval diff --git a/docs/unique-officer-qa-wu-yi-v2-scale-compare.png b/docs/unique-officer-qa-wu-yi-v2-scale-compare.png new file mode 100644 index 0000000..6632f40 Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-scale-compare.png differ diff --git a/docs/unique-officer-qa-wu-yi-v2-source.png b/docs/unique-officer-qa-wu-yi-v2-source.png new file mode 100644 index 0000000..5901d7a Binary files /dev/null and b/docs/unique-officer-qa-wu-yi-v2-source.png differ diff --git a/docs/unit-sprite-batch-queue.json b/docs/unit-sprite-batch-queue.json index 7d53064..9593819 100644 --- a/docs/unit-sprite-batch-queue.json +++ b/docs/unit-sprite-batch-queue.json @@ -926,10 +926,10 @@ "baseStatus": "ok", "actionStatus": "ok", "battleBasePx": [ - 24.4, - 33.4, - 46.0, - 46.3 + 26.7, + 39.9, + 45.7, + 46.0 ], "spec": null } diff --git a/docs/unit-sprite-batch-queue.md b/docs/unit-sprite-batch-queue.md index 3df4345..2141a42 100644 --- a/docs/unit-sprite-batch-queue.md +++ b/docs/unit-sprite-batch-queue.md @@ -117,7 +117,7 @@ No next unit is currently defined. | `unit-wu-strategist` | approved reference | approved-baseline | technical ok | 25.7..35.0 x 45.0..46.3 | | | `unit-wu-strategist-fire` | approved reference | approved-baseline | technical ok | 25.9..32.7 x 46.0..47.1 | | | `unit-wu-strategist-river` | approved reference | approved-baseline | technical ok | 24.6..34.8 x 45.4..46.3 | | -| `unit-wu-yi` | approved reference | approved-baseline | technical ok | 24.4..33.4 x 46.0..46.3 | | +| `unit-wu-yi` | approved reference | approved-baseline | technical ok | 26.7..39.9 x 45.7..46.0 | | ### Batch 5 remaining rebel/bandit units diff --git a/docs/unit-sprite-review-approved-and-pending.png b/docs/unit-sprite-review-approved-and-pending.png index fd8ff00..103438e 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 6e9e6fb..7c69794 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 179a39f..29e4ec5 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 0ace375..7cb22f6 100644 --- a/docs/unit-sprite-rework-audit.json +++ b/docs/unit-sprite-rework-audit.json @@ -4871,22 +4871,22 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 1872382, + "opaque_pixels": 2138154, "border_hits": 0, - "min_width": 153, - "max_width": 209, - "min_height": 288, - "max_height": 290, + "min_width": 167, + "max_width": 250, + "min_height": 286, + "max_height": 288, "min_bottom": 303, "max_bottom": 303, "empty_frames": 0, - "width_swing": 56, + "width_swing": 83, "height_swing": 2, "bottom_swing": 0, - "battle_min_width_px": 24.4, - "battle_max_width_px": 33.4, - "battle_min_height_px": 46.0, - "battle_max_height_px": 46.3, + "battle_min_width_px": 26.7, + "battle_max_width_px": 39.9, + "battle_min_height_px": 45.7, + "battle_max_height_px": 46.0, "status": "ok" }, "actions": { @@ -4897,20 +4897,20 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4212852, + "opaque_pixels": 4295358, "border_hits": 0, - "min_width": 147, - "max_width": 238, + "min_width": 151, + "max_width": 210, "min_height": 282, "max_height": 288, "min_bottom": 303, "max_bottom": 303, "empty_frames": 0, - "width_swing": 91, + "width_swing": 59, "height_swing": 6, "bottom_swing": 0, - "battle_min_width_px": 23.5, - "battle_max_width_px": 38.0, + "battle_min_width_px": 24.1, + "battle_max_width_px": 33.5, "battle_min_height_px": 45.0, "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 5a4a933..755fb54 100644 --- a/docs/unit-sprite-rework-audit.md +++ b/docs/unit-sprite-rework-audit.md @@ -136,7 +136,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch4-wu | approved-baseline | `unit-wu-strategist` | ok | ok | 161..219 x 282..290 | 135..221 x 282..295 | 25.7..35.0 x 45.0..46.3 | w58 h8 b0 | | batch4-wu | approved-baseline | `unit-wu-strategist-fire` | ok | ok | 162..205 x 288..295 | 133..218 x 284..295 | 25.9..32.7 x 46.0..47.1 | w43 h7 b0 | | batch4-wu | approved-baseline | `unit-wu-strategist-river` | ok | ok | 154..218 x 284..290 | 133..222 x 284..290 | 24.6..34.8 x 45.4..46.3 | w64 h6 b0 | -| batch4-wu | approved-baseline | `unit-wu-yi` | ok | ok | 153..209 x 288..290 | 147..238 x 282..288 | 24.4..33.4 x 46.0..46.3 | w56 h2 b0 | +| batch4-wu | approved-baseline | `unit-wu-yi` | ok | ok | 167..250 x 286..288 | 151..210 x 282..288 | 26.7..39.9 x 45.7..46.0 | w83 h2 b0 | | batch7-unique-officer | approved-baseline | `unit-yan-yan` | ok | ok | 190..235 x 286..288 | 170..242 x 271..295 | 30.4..37.5 x 45.7..46.0 | w45 h2 b0 | | batch7-unique-officer | approved-baseline | `unit-yi-ji` | ok | ok | 174..212 x 286..288 | 167..273 x 286..295 | 27.8..33.9 x 45.7..46.0 | w38 h2 b0 | | batch1-approved-core | approved-baseline | `unit-zhang-fei` | ok | ok | 143..306 x 274..289 | 188..286 x 181..290 | 22.8..48.9 x 43.8..46.2 | w163 h15 b14 | diff --git a/docs/unit-sprite-wu-yi-v2-approval-packet.md b/docs/unit-sprite-wu-yi-v2-approval-packet.md new file mode 100644 index 0000000..a488426 --- /dev/null +++ b/docs/unit-sprite-wu-yi-v2-approval-packet.md @@ -0,0 +1,39 @@ +# Wu Yi v2 Approval Packet + +## Target + +`unit-wu-yi` + +## Reason + +The existing sprite read too much like a generic Eastern Wu officer because of the red/blue color mass and naval/officer silhouette. Wu Yi should read as a Shu/Yizhou fortress and supply-route officer. + +## Delivered Assets + +- Source: `unique-officer-qa-wu-yi-v2-source.png` +- Contact sheet: `unique-officer-qa-wu-yi-v2-contact.png` +- Animation: `unique-officer-qa-wu-yi-v2-animation.gif` +- Before/after: `unique-officer-qa-wu-yi-v2-before-after.png` +- Scale compare: `unique-officer-qa-wu-yi-v2-scale-compare.png` +- Battle composite: `unique-officer-qa-wu-yi-v2-battle-composite.png` +- Local browser check: `unique-officer-qa-wu-yi-v2-browser-check.png` +- Deployed browser check: `unique-officer-qa-wu-yi-v2-prod-browser-check.png` +- Personality QA board: `unique-officer-personality-qa-v1.png` + +## Visual Direction + +Wu Yi v2 uses ochre-brown and dark indigo armor, tan leather, muted bronze trim, compact square helmet, short command cloak, hooked dao, and command tally. The goal is a practical Yizhou gate commander instead of a Wu-colored river officer. + +## Technical Checks + +- 313x313 frame grid retained +- Idle/walk/action sheet structure retained +- Partial alpha: 0 +- Frame border hits: 0 +- Empty frames: 0 +- Sprite release gate: passed +- Art quality gate: passed +- Workflow consistency gate: passed +- Build/deploy: passed +- Local browser console errors: 0 +- Deployed browser console errors: 0 diff --git a/src/assets/images/units/unit-wu-yi-actions.png b/src/assets/images/units/unit-wu-yi-actions.png index 8490a62..658b9e0 100644 Binary files a/src/assets/images/units/unit-wu-yi-actions.png and b/src/assets/images/units/unit-wu-yi-actions.png differ diff --git a/src/assets/images/units/unit-wu-yi.png b/src/assets/images/units/unit-wu-yi.png index 9effed7..acecaf2 100644 Binary files a/src/assets/images/units/unit-wu-yi.png and b/src/assets/images/units/unit-wu-yi.png differ