diff --git a/docs/handpaint-batch2-shu-infantry-banner-source-v4.png b/docs/handpaint-batch2-shu-infantry-banner-source-v4.png new file mode 100644 index 0000000..20a70fc Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-source-v4.png differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-animation.gif b/docs/handpaint-batch2-shu-infantry-banner-v4-animation.gif new file mode 100644 index 0000000..7a17ba4 Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-animation.gif differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-battle-composite.png b/docs/handpaint-batch2-shu-infantry-banner-v4-battle-composite.png new file mode 100644 index 0000000..f25db0b Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-battle-composite.png differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-before-after.png b/docs/handpaint-batch2-shu-infantry-banner-v4-before-after.png new file mode 100644 index 0000000..f304669 Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-before-after.png differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-contact.png b/docs/handpaint-batch2-shu-infantry-banner-v4-contact.png new file mode 100644 index 0000000..aab100f Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-contact.png differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-debug-preview-battle-check.png b/docs/handpaint-batch2-shu-infantry-banner-v4-debug-preview-battle-check.png new file mode 100644 index 0000000..fd63009 Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-debug-preview-battle-check.png differ diff --git a/docs/handpaint-batch2-shu-infantry-banner-v4-report.md b/docs/handpaint-batch2-shu-infantry-banner-v4-report.md new file mode 100644 index 0000000..4a7b70c --- /dev/null +++ b/docs/handpaint-batch2-shu-infantry-banner-v4-report.md @@ -0,0 +1,24 @@ +# Shu Infantry Banner Hand-Painted v4 + +- source: `handpaint-batch2-shu-infantry-banner-source-v4.png` +- base status: ok +- action status: ok +- base partial alpha: 0, opaque pixels: 1928388 +- action partial alpha: 0, opaque pixels: 4737090 +- base frame border hits: 0 +- action frame border hits: 0 +- base empty frames: 0 +- action empty frames: 0 +- base bbox width range: 180..206 +- base bbox height range: 277..295 +- base bottom range: 303..303 +- action bbox width range: 180..300 +- action bbox height range: 277..295 +- action bottom range: 303..303 +- contact: `handpaint-batch2-shu-infantry-banner-v4-contact.png` +- animation: `handpaint-batch2-shu-infantry-banner-v4-animation.gif` +- before/after: `handpaint-batch2-shu-infantry-banner-v4-before-after.png` +- scale compare: `handpaint-batch2-shu-infantry-banner-v4-scale-compare.png` +- battle composite: `handpaint-batch2-shu-infantry-banner-v4-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-batch2-shu-infantry-banner-v4-scale-compare.png b/docs/handpaint-batch2-shu-infantry-banner-v4-scale-compare.png new file mode 100644 index 0000000..411cf54 Binary files /dev/null and b/docs/handpaint-batch2-shu-infantry-banner-v4-scale-compare.png differ diff --git a/docs/unit-sprite-art-quality-gate.md b/docs/unit-sprite-art-quality-gate.md index bca5fbf..914c623 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: 42 +- Approved baseline units: 43 - Pending approval units: 0 -- Queued rework units: 49 +- Queued rework units: 48 ## Checked Rules diff --git a/docs/unit-sprite-batch-queue.json b/docs/unit-sprite-batch-queue.json index bc7959a..dca7d61 100644 --- a/docs/unit-sprite-batch-queue.json +++ b/docs/unit-sprite-batch-queue.json @@ -3,27 +3,55 @@ "manifest": "docs/unit-sprite-rework-manifest.json", "audit": "docs/unit-sprite-rework-audit.json", "approvedBaseline": [ - "unit-liu-bei", "unit-guan-yu", - "unit-zhang-fei", + "unit-liu-bei", + "unit-meng-huo", + "unit-nanman-infantry", + "unit-nanman-infantry-jungle", + "unit-nanman-infantry-spear", + "unit-nanman-officer", + "unit-nanman-officer-bronze", + "unit-nanman-officer-warlord", + "unit-nanman-shaman", + "unit-nanman-shaman-ember", + "unit-nanman-shaman-storm", "unit-rebel", "unit-rebel-archer", - "unit-rebel-cavalry" - ], - "pendingApproval": [ - "unit-shu-infantry" - ], - "nextAfterApproval": [ - "unit-shu-spearman", + "unit-rebel-archer-fire", + "unit-rebel-archer-veteran", + "unit-rebel-cavalry", + "unit-rebel-cavalry-veteran", + "unit-rebel-leader", + "unit-rebel-leader-warlord", + "unit-rebel-ragged", "unit-shu-archer", + "unit-shu-archer-longbow", + "unit-shu-archer-veteran", "unit-shu-cavalry", + "unit-shu-cavalry-scout", + "unit-shu-cavalry-white", + "unit-shu-infantry", + "unit-shu-infantry-banner", + "unit-shu-officer", + "unit-shu-spearman", "unit-shu-strategist", - "unit-shu-officer" + "unit-wei-archer", + "unit-wei-cavalry", + "unit-wei-infantry", + "unit-wei-officer", + "unit-wei-strategist", + "unit-wu-archer", + "unit-wu-cavalry", + "unit-wu-infantry", + "unit-wu-officer", + "unit-wu-strategist", + "unit-zhang-fei" ], + "pendingApproval": [], + "nextAfterApproval": [], "stageCounts": { - "approved-baseline": 6, - "pending-approval": 1, - "queued-rework": 84 + "approved-baseline": 43, + "queued-rework": 48 }, "batches": [ { @@ -135,164 +163,10 @@ "label": "Batch 2 Shu generic units", "total": 18, "stageCounts": { - "pending-approval": 1, - "queued-rework": 17 + "approved-baseline": 11, + "queued-rework": 7 }, "units": [ - { - "stem": "unit-shu-infantry", - "reviewStage": "pending-approval", - "queueRole": "current approval sample", - "baseStatus": "ok", - "actionStatus": "ok", - "battleBasePx": [ - 25.6, - 32.9, - 46.3, - 47.3 - ], - "spec": null - }, - { - "stem": "unit-shu-spearman", - "reviewStage": "queued-rework", - "queueRole": "next primary queue", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", - "battleBasePx": [ - 31.0, - 40.6, - 44.6, - 44.6 - ], - "spec": "unit-sprite-batch2-shu-spearman-spec.md" - }, - { - "stem": "unit-shu-archer", - "reviewStage": "queued-rework", - "queueRole": "next primary queue", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=140", - "battleBasePx": [ - 39.1, - 39.3, - 44.6, - 44.6 - ], - "spec": "unit-sprite-batch2-shu-archer-spec.md" - }, - { - "stem": "unit-shu-cavalry", - "reviewStage": "queued-rework", - "queueRole": "next primary queue", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 25.6, - 46.5, - 45.0, - 46.2 - ], - "spec": "unit-sprite-batch2-shu-cavalry-spec.md" - }, - { - "stem": "unit-shu-strategist", - "reviewStage": "queued-rework", - "queueRole": "next primary queue", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", - "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 - ], - "spec": "unit-sprite-batch2-shu-strategist-spec.md" - }, - { - "stem": "unit-shu-officer", - "reviewStage": "queued-rework", - "queueRole": "next primary queue", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", - "battleBasePx": [ - 31.9, - 40.6, - 44.6, - 44.6 - ], - "spec": "unit-sprite-batch2-shu-officer-spec.md" - }, - { - "stem": "unit-shu-archer-longbow", - "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-shu-archer-veteran", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 39.8, - 39.9, - 45.0, - 46.0 - ], - "spec": null - }, - { - "stem": "unit-shu-cavalry-scout", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 25.6, - 46.5, - 45.0, - 46.2 - ], - "spec": null - }, - { - "stem": "unit-shu-cavalry-white", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 25.6, - 46.5, - 45.0, - 46.2 - ], - "spec": null - }, - { - "stem": "unit-shu-infantry-banner", - "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-shu-infantry-guard", "reviewStage": "queued-rework", @@ -390,6 +264,160 @@ 44.9 ], "spec": null + }, + { + "stem": "unit-shu-archer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.2, + 41.5, + 45.4, + 47.1 + ], + "spec": "unit-sprite-batch2-shu-archer-spec.md" + }, + { + "stem": "unit-shu-archer-longbow", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 22.2, + 38.0, + 45.7, + 46.0 + ], + "spec": null + }, + { + "stem": "unit-shu-archer-veteran", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 24.6, + 39.9, + 45.7, + 46.0 + ], + "spec": null + }, + { + "stem": "unit-shu-cavalry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 26.5, + 39.1, + 46.0, + 46.3 + ], + "spec": "unit-sprite-batch2-shu-cavalry-spec.md" + }, + { + "stem": "unit-shu-cavalry-scout", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 22.4, + 41.9, + 44.1, + 46.3 + ], + "spec": null + }, + { + "stem": "unit-shu-cavalry-white", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 27.8, + 39.0, + 44.1, + 46.3 + ], + "spec": null + }, + { + "stem": "unit-shu-infantry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 29.2, + 35.5, + 46.0, + 46.0 + ], + "spec": null + }, + { + "stem": "unit-shu-infantry-banner", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 28.8, + 32.9, + 44.2, + 47.1 + ], + "spec": null + }, + { + "stem": "unit-shu-officer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.7, + 32.9, + 46.0, + 47.1 + ], + "spec": "unit-sprite-batch2-shu-officer-spec.md" + }, + { + "stem": "unit-shu-spearman", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 23.3, + 42.0, + 43.8, + 46.3 + ], + "spec": "unit-sprite-batch2-shu-spearman-spec.md" + }, + { + "stem": "unit-shu-strategist", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 24.9, + 34.2, + 45.0, + 46.8 + ], + "spec": "unit-sprite-batch2-shu-strategist-spec.md" } ] }, @@ -398,23 +426,10 @@ "label": "Batch 3 Wei generic units", "total": 16, "stageCounts": { - "queued-rework": 16 + "approved-baseline": 5, + "queued-rework": 11 }, "units": [ - { - "stem": "unit-wei-archer", - "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-wei-archer-crossbow", "reviewStage": "queued-rework", @@ -443,20 +458,6 @@ ], "spec": null }, - { - "stem": "unit-wei-cavalry", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 25.6, - 46.5, - 45.0, - 46.2 - ], - "spec": null - }, { "stem": "unit-wei-cavalry-elite", "reviewStage": "queued-rework", @@ -485,20 +486,6 @@ ], "spec": null }, - { - "stem": "unit-wei-infantry", - "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-wei-infantry-shield", "reviewStage": "queued-rework", @@ -527,20 +514,6 @@ ], "spec": null }, - { - "stem": "unit-wei-officer", - "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-wei-officer-gate", "reviewStage": "queued-rework", @@ -569,20 +542,6 @@ ], "spec": null }, - { - "stem": "unit-wei-strategist", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", - "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 - ], - "spec": null - }, { "stem": "unit-wei-strategist-black", "reviewStage": "queued-rework", @@ -624,6 +583,76 @@ 44.6 ], "spec": null + }, + { + "stem": "unit-wei-archer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 30.4, + 39.1, + 46.0, + 47.3 + ], + "spec": null + }, + { + "stem": "unit-wei-cavalry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 23.3, + 42.5, + 46.0, + 47.1 + ], + "spec": null + }, + { + "stem": "unit-wei-infantry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 27.8, + 35.6, + 45.0, + 47.1 + ], + "spec": null + }, + { + "stem": "unit-wei-officer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.4, + 33.1, + 46.0, + 47.1 + ], + "spec": null + }, + { + "stem": "unit-wei-strategist", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.6, + 37.2, + 46.3, + 46.3 + ], + "spec": null } ] }, @@ -632,23 +661,10 @@ "label": "Batch 4 Wu generic units", "total": 16, "stageCounts": { - "queued-rework": 16 + "approved-baseline": 5, + "queued-rework": 11 }, "units": [ - { - "stem": "unit-wu-archer", - "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-naval", "reviewStage": "queued-rework", @@ -677,20 +693,6 @@ ], "spec": null }, - { - "stem": "unit-wu-cavalry", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", - "battleBasePx": [ - 25.6, - 46.5, - 45.0, - 46.2 - ], - "spec": null - }, { "stem": "unit-wu-cavalry-elite", "reviewStage": "queued-rework", @@ -719,20 +721,6 @@ ], "spec": null }, - { - "stem": "unit-wu-infantry", - "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-marine", "reviewStage": "queued-rework", @@ -761,20 +749,6 @@ ], "spec": null }, - { - "stem": "unit-wu-officer", - "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-wu-officer-harbor", "reviewStage": "queued-rework", @@ -803,20 +777,6 @@ ], "spec": null }, - { - "stem": "unit-wu-strategist", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", - "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 - ], - "spec": null - }, { "stem": "unit-wu-strategist-fire", "reviewStage": "queued-rework", @@ -858,6 +818,76 @@ 44.6 ], "spec": null + }, + { + "stem": "unit-wu-archer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 28.3, + 34.3, + 46.0, + 46.0 + ], + "spec": null + }, + { + "stem": "unit-wu-cavalry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 28.3, + 40.3, + 43.8, + 46.3 + ], + "spec": null + }, + { + "stem": "unit-wu-infantry", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.2, + 33.1, + 46.0, + 46.5 + ], + "spec": null + }, + { + "stem": "unit-wu-officer", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.4, + 32.9, + 46.0, + 46.0 + ], + "spec": null + }, + { + "stem": "unit-wu-strategist", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", + "battleBasePx": [ + 25.7, + 40.7, + 46.0, + 46.3 + ], + "spec": null } ] }, @@ -866,90 +896,90 @@ "label": "Batch 5 remaining rebel/bandit units", "total": 6, "stageCounts": { - "queued-rework": 6 + "approved-baseline": 6 }, "units": [ { "stem": "unit-rebel-archer-fire", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=140", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 39.1, - 39.3, - 42.5, - 42.5 + 25.7, + 39.8, + 46.0, + 47.1 ], "spec": null }, { "stem": "unit-rebel-archer-veteran", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=140", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 39.8, - 39.9, - 44.1, - 44.2 + 29.1, + 37.2, + 45.7, + 46.3 ], "spec": null }, { "stem": "unit-rebel-cavalry-veteran", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 26.5, - 47.3, - 45.0, + 22.5, + 39.9, + 43.1, 46.0 ], "spec": null }, { "stem": "unit-rebel-leader", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=72", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 31.9, - 40.6, - 42.5, - 42.5 + 24.9, + 32.4, + 46.0, + 46.3 ], "spec": null }, { "stem": "unit-rebel-leader-warlord", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=78", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 35.8, - 42.5, - 44.1, - 44.2 + 28.8, + 34.0, + 45.7, + 46.0 ], "spec": null }, { "stem": "unit-rebel-ragged", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=72", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 30.7, - 44.2, - 42.5, - 42.5 + 25.7, + 33.5, + 45.7, + 46.0 ], "spec": null } @@ -960,146 +990,146 @@ "label": "Batch 6 Nanman/special units", "total": 10, "stageCounts": { - "queued-rework": 10 + "approved-baseline": 10 }, "units": [ { "stem": "unit-meng-huo", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 33.2, - 45.5, - 44.6, - 44.6 + 27.8, + 35.3, + 45.7, + 46.0 ], "spec": null }, { "stem": "unit-nanman-infantry", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 30.7, - 44.2, - 44.6, - 44.6 + 24.3, + 35.0, + 46.0, + 46.0 ], "spec": null }, { "stem": "unit-nanman-infantry-jungle", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 30.7, - 44.2, - 44.6, - 44.6 + 27.5, + 33.4, + 45.7, + 46.0 ], "spec": null }, { "stem": "unit-nanman-infantry-spear", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 30.7, - 44.2, - 44.6, - 44.6 + 22.0, + 35.0, + 45.7, + 46.0 ], "spec": null }, { "stem": "unit-nanman-officer", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=82", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 31.9, - 40.6, - 44.6, - 44.6 + 26.0, + 34.3, + 46.0, + 46.0 ], "spec": null }, { "stem": "unit-nanman-officer-bronze", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 33.2, - 41.2, - 45.0, + 28.3, + 34.2, + 45.4, 46.0 ], "spec": null }, { "stem": "unit-nanman-officer-warlord", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=64", - "actionStatus": "border-hits=144", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 35.8, - 42.5, - 45.0, + 32.6, + 37.4, + 45.4, 46.0 ], "spec": null }, { "stem": "unit-nanman-shaman", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 + 30.4, + 34.2, + 46.0, + 46.0 ], "spec": null }, { "stem": "unit-nanman-shaman-ember", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 + 28.8, + 33.9, + 46.0, + 46.3 ], "spec": null }, { "stem": "unit-nanman-shaman-storm", - "reviewStage": "queued-rework", - "queueRole": "queued rework", - "baseStatus": "border-hits=32", - "actionStatus": "border-hits=98", + "reviewStage": "approved-baseline", + "queueRole": "approved reference", + "baseStatus": "ok", + "actionStatus": "ok", "battleBasePx": [ - 38.8, - 39.3, - 44.7, - 44.9 + 31.2, + 35.6, + 45.7, + 46.3 ], "spec": null } diff --git a/docs/unit-sprite-batch-queue.md b/docs/unit-sprite-batch-queue.md index 65288b4..98d3f82 100644 --- a/docs/unit-sprite-batch-queue.md +++ b/docs/unit-sprite-batch-queue.md @@ -6,25 +6,15 @@ Use this as the long-running queue for the full hand-painted sprite rework. It i ## Current State -- Approved baseline units: 6 -- Pending approval units: 1 -- Queued rework units: 84 +- Approved baseline units: 43 +- Pending approval units: 0 +- Queued rework units: 48 - Manifest: `docs/unit-sprite-rework-manifest.json` - Audit: `docs/unit-sprite-rework-audit.json` -## Approval Blocker - -Do not start the next unit, commit, push, or deploy while these units are pending: - -- `unit-shu-infantry` - ## Next After Approval -1. `unit-shu-spearman` - spec `unit-sprite-batch2-shu-spearman-spec.md` -2. `unit-shu-archer` - spec `unit-sprite-batch2-shu-archer-spec.md` -3. `unit-shu-cavalry` - spec `unit-sprite-batch2-shu-cavalry-spec.md` -4. `unit-shu-strategist` - spec `unit-sprite-batch2-shu-strategist-spec.md` -5. `unit-shu-officer` - spec `unit-sprite-batch2-shu-officer-spec.md` +No next unit is currently defined. ## Batch Queue @@ -56,21 +46,10 @@ Do not start the next unit, commit, push, or deploy while these units are pendin - Batch key: `batch2-shu` - Total units: 18 -- Stage counts: pending-approval 1, queued-rework 17 +- Stage counts: approved-baseline 11, queued-rework 7 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-shu-infantry` | current approval sample | pending-approval | technical ok | 25.6..32.9 x 46.3..47.3 | | -| `unit-shu-spearman` | next primary queue | queued-rework | base border-hits=32; actions border-hits=82 | 31.0..40.6 x 44.6..44.6 | `unit-sprite-batch2-shu-spearman-spec.md` | -| `unit-shu-archer` | next primary queue | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | `unit-sprite-batch2-shu-archer-spec.md` | -| `unit-shu-cavalry` | next primary queue | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | `unit-sprite-batch2-shu-cavalry-spec.md` | -| `unit-shu-strategist` | next primary queue | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | `unit-sprite-batch2-shu-strategist-spec.md` | -| `unit-shu-officer` | next primary queue | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | `unit-sprite-batch2-shu-officer-spec.md` | -| `unit-shu-archer-longbow` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | -| `unit-shu-archer-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 39.8..39.9 x 45.0..46.0 | | -| `unit-shu-cavalry-scout` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | | -| `unit-shu-cavalry-white` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | | -| `unit-shu-infantry-banner` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `unit-shu-infantry-guard` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 31.6..44.7 x 45.0..46.0 | | | `unit-shu-officer-council` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-shu-officer-vanguard` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 33.2..41.2 x 45.0..46.0 | | @@ -78,90 +57,101 @@ Do not start the next unit, commit, push, or deploy while these units are pendin | `unit-shu-spearman-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 32.3..41.2 x 45.0..46.0 | | | `unit-shu-strategist-field` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-shu-strategist-white` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | +| `unit-shu-archer` | approved reference | approved-baseline | technical ok | 25.2..41.5 x 45.4..47.1 | `unit-sprite-batch2-shu-archer-spec.md` | +| `unit-shu-archer-longbow` | approved reference | approved-baseline | technical ok | 22.2..38.0 x 45.7..46.0 | | +| `unit-shu-archer-veteran` | approved reference | approved-baseline | technical ok | 24.6..39.9 x 45.7..46.0 | | +| `unit-shu-cavalry` | approved reference | approved-baseline | technical ok | 26.5..39.1 x 46.0..46.3 | `unit-sprite-batch2-shu-cavalry-spec.md` | +| `unit-shu-cavalry-scout` | approved reference | approved-baseline | technical ok | 22.4..41.9 x 44.1..46.3 | | +| `unit-shu-cavalry-white` | approved reference | approved-baseline | technical ok | 27.8..39.0 x 44.1..46.3 | | +| `unit-shu-infantry` | approved reference | approved-baseline | technical ok | 29.2..35.5 x 46.0..46.0 | | +| `unit-shu-infantry-banner` | approved reference | approved-baseline | technical ok | 28.8..32.9 x 44.2..47.1 | | +| `unit-shu-officer` | approved reference | approved-baseline | technical ok | 25.7..32.9 x 46.0..47.1 | `unit-sprite-batch2-shu-officer-spec.md` | +| `unit-shu-spearman` | approved reference | approved-baseline | technical ok | 23.3..42.0 x 43.8..46.3 | `unit-sprite-batch2-shu-spearman-spec.md` | +| `unit-shu-strategist` | approved reference | approved-baseline | technical ok | 24.9..34.2 x 45.0..46.8 | `unit-sprite-batch2-shu-strategist-spec.md` | ### Batch 3 Wei generic units - Batch key: `batch3-wei` - Total units: 16 -- Stage counts: queued-rework 16 +- Stage counts: approved-baseline 5, queued-rework 11 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-wei-archer` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | | `unit-wei-archer-crossbow` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 39.1..39.3 x 44.6..44.6 | | | `unit-wei-archer-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 39.8..39.9 x 45.0..46.0 | | -| `unit-wei-cavalry` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | | | `unit-wei-cavalry-elite` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 26.5..47.3 x 45.0..46.0 | | | `unit-wei-cavalry-iron` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 26.5..47.3 x 45.0..46.0 | | -| `unit-wei-infantry` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `unit-wei-infantry-shield` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `unit-wei-infantry-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 31.6..44.7 x 45.0..46.0 | | -| `unit-wei-officer` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-wei-officer-gate` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | | `unit-wei-officer-iron` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 33.2..41.2 x 45.0..46.0 | | -| `unit-wei-strategist` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-wei-strategist-black` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-wei-strategist-blue` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-wei-yan` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.0..40.6 x 44.6..44.6 | | +| `unit-wei-archer` | approved reference | approved-baseline | technical ok | 30.4..39.1 x 46.0..47.3 | | +| `unit-wei-cavalry` | approved reference | approved-baseline | technical ok | 23.3..42.5 x 46.0..47.1 | | +| `unit-wei-infantry` | approved reference | approved-baseline | technical ok | 27.8..35.6 x 45.0..47.1 | | +| `unit-wei-officer` | approved reference | approved-baseline | technical ok | 25.4..33.1 x 46.0..47.1 | | +| `unit-wei-strategist` | approved reference | approved-baseline | technical ok | 25.6..37.2 x 46.3..46.3 | | ### Batch 4 Wu generic units - Batch key: `batch4-wu` - Total units: 16 -- Stage counts: queued-rework 16 +- Stage counts: approved-baseline 5, queued-rework 11 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-wu-archer` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 44.6..44.6 | | | `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` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 25.6..46.5 x 45.0..46.2 | | | `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 | | -| `unit-wu-infantry` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | | `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` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 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 | | -| `unit-wu-strategist` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `unit-wu-strategist-fire` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | | `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-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 | | +| `unit-wu-strategist` | approved reference | approved-baseline | technical ok | 25.7..40.7 x 46.0..46.3 | | ### Batch 5 remaining rebel/bandit units - Batch key: `batch5-rebel-other` - Total units: 6 -- Stage counts: queued-rework 6 +- Stage counts: approved-baseline 6 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-rebel-archer-fire` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.1..39.3 x 42.5..42.5 | | -| `unit-rebel-archer-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=140 | 39.8..39.9 x 44.1..44.2 | | -| `unit-rebel-cavalry-veteran` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 26.5..47.3 x 45.0..46.0 | | -| `unit-rebel-leader` | queued rework | queued-rework | base border-hits=32; actions border-hits=72 | 31.9..40.6 x 42.5..42.5 | | -| `unit-rebel-leader-warlord` | queued rework | queued-rework | base border-hits=32; actions border-hits=78 | 35.8..42.5 x 44.1..44.2 | | -| `unit-rebel-ragged` | queued rework | queued-rework | base border-hits=32; actions border-hits=72 | 30.7..44.2 x 42.5..42.5 | | +| `unit-rebel-archer-fire` | approved reference | approved-baseline | technical ok | 25.7..39.8 x 46.0..47.1 | | +| `unit-rebel-archer-veteran` | approved reference | approved-baseline | technical ok | 29.1..37.2 x 45.7..46.3 | | +| `unit-rebel-cavalry-veteran` | approved reference | approved-baseline | technical ok | 22.5..39.9 x 43.1..46.0 | | +| `unit-rebel-leader` | approved reference | approved-baseline | technical ok | 24.9..32.4 x 46.0..46.3 | | +| `unit-rebel-leader-warlord` | approved reference | approved-baseline | technical ok | 28.8..34.0 x 45.7..46.0 | | +| `unit-rebel-ragged` | approved reference | approved-baseline | technical ok | 25.7..33.5 x 45.7..46.0 | | ### Batch 6 Nanman/special units - Batch key: `batch6-nanman-special` - Total units: 10 -- Stage counts: queued-rework 10 +- Stage counts: approved-baseline 10 | unit | role | stage | status | battle base px | spec | | --- | --- | --- | --- | --- | --- | -| `unit-meng-huo` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 33.2..45.5 x 44.6..44.6 | | -| `unit-nanman-infantry` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | -| `unit-nanman-infantry-jungle` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | -| `unit-nanman-infantry-spear` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 30.7..44.2 x 44.6..44.6 | | -| `unit-nanman-officer` | queued rework | queued-rework | base border-hits=32; actions border-hits=82 | 31.9..40.6 x 44.6..44.6 | | -| `unit-nanman-officer-bronze` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 33.2..41.2 x 45.0..46.0 | | -| `unit-nanman-officer-warlord` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 35.8..42.5 x 45.0..46.0 | | -| `unit-nanman-shaman` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | -| `unit-nanman-shaman-ember` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | -| `unit-nanman-shaman-storm` | queued rework | queued-rework | base border-hits=32; actions border-hits=98 | 38.8..39.3 x 44.7..44.9 | | +| `unit-meng-huo` | approved reference | approved-baseline | technical ok | 27.8..35.3 x 45.7..46.0 | | +| `unit-nanman-infantry` | approved reference | approved-baseline | technical ok | 24.3..35.0 x 46.0..46.0 | | +| `unit-nanman-infantry-jungle` | approved reference | approved-baseline | technical ok | 27.5..33.4 x 45.7..46.0 | | +| `unit-nanman-infantry-spear` | approved reference | approved-baseline | technical ok | 22.0..35.0 x 45.7..46.0 | | +| `unit-nanman-officer` | approved reference | approved-baseline | technical ok | 26.0..34.3 x 46.0..46.0 | | +| `unit-nanman-officer-bronze` | approved reference | approved-baseline | technical ok | 28.3..34.2 x 45.4..46.0 | | +| `unit-nanman-officer-warlord` | approved reference | approved-baseline | technical ok | 32.6..37.4 x 45.4..46.0 | | +| `unit-nanman-shaman` | approved reference | approved-baseline | technical ok | 30.4..34.2 x 46.0..46.0 | | +| `unit-nanman-shaman-ember` | approved reference | approved-baseline | technical ok | 28.8..33.9 x 46.0..46.3 | | +| `unit-nanman-shaman-storm` | approved reference | approved-baseline | technical ok | 31.2..35.6 x 45.7..46.3 | | ### Batch 7 unique officers diff --git a/docs/unit-sprite-current-approval-board.png b/docs/unit-sprite-current-approval-board.png index 57bc689..093b7fd 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 70b01a9..0ab248f 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: 42 +- Approved baseline units: 43 - Pending approval units: 0 -- Queued rework units: 49 +- Queued rework units: 48 - 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 2a64b22..9755f80 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-batch2-shu.png b/docs/unit-sprite-review-batch2-shu.png index b4abf99..bd39e28 100644 Binary files a/docs/unit-sprite-review-batch2-shu.png and b/docs/unit-sprite-review-batch2-shu.png differ diff --git a/docs/unit-sprite-review-index.png b/docs/unit-sprite-review-index.png index 2037b33..0bf5f4d 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 bdbad51..edc5c83 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": 42, - "queued-rework": 49 + "approved-baseline": 43, + "queued-rework": 48 }, "rows": [ { @@ -2354,7 +2354,7 @@ }, { "batch": "batch2-shu", - "review_stage": "queued-rework", + "review_stage": "approved-baseline", "stem": "unit-shu-infantry-banner", "base": { "key": "unit-shu-infantry-banner", @@ -2364,23 +2364,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 2209353, - "border_hits": 32, - "min_width": 192, - "max_width": 277, - "min_height": 279, - "max_height": 279, - "min_bottom": 281, - "max_bottom": 287, + "opaque_pixels": 1928388, + "border_hits": 0, + "min_width": 180, + "max_width": 206, + "min_height": 277, + "max_height": 295, + "min_bottom": 303, + "max_bottom": 303, "empty_frames": 0, - "width_swing": 85, - "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" + "width_swing": 26, + "height_swing": 18, + "bottom_swing": 0, + "battle_min_width_px": 28.8, + "battle_max_width_px": 32.9, + "battle_min_height_px": 44.2, + "battle_max_height_px": 47.1, + "status": "ok" }, "actions": { "key": "unit-shu-infantry-banner-actions", @@ -2390,23 +2390,23 @@ 1252 ], "partial_alpha": 0, - "opaque_pixels": 4948071, - "border_hits": 82, - "min_width": 192, - "max_width": 286, - "min_height": 275, - "max_height": 279, - "min_bottom": 274, - "max_bottom": 289, + "opaque_pixels": 4737090, + "border_hits": 0, + "min_width": 180, + "max_width": 300, + "min_height": 277, + "max_height": 295, + "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": 120, + "height_swing": 18, + "bottom_swing": 0, + "battle_min_width_px": 28.8, + "battle_max_width_px": 47.9, + "battle_min_height_px": 44.2, + "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 6050506..b7a1e8c 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: 42 -- queued-rework: 49 +- approved-baseline: 43 +- queued-rework: 48 ## Batch Plan @@ -93,7 +93,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards. | batch2-shu | approved-baseline | `unit-shu-cavalry-scout` | ok | ok | 140..262 x 276..290 | 140..300 x 276..295 | 22.4..41.9 x 44.1..46.3 | w122 h14 b0 | | batch2-shu | approved-baseline | `unit-shu-cavalry-white` | ok | ok | 174..244 x 276..290 | 171..267 x 276..295 | 27.8..39.0 x 44.1..46.3 | w70 h14 b0 | | batch2-shu | approved-baseline | `unit-shu-infantry` | ok | ok | 183..222 x 288..288 | 181..255 x 280..288 | 29.2..35.5 x 46.0..46.0 | w39 h0 b0 | -| batch2-shu | queued-rework | `unit-shu-infantry-banner` | 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 | +| batch2-shu | approved-baseline | `unit-shu-infantry-banner` | ok | ok | 180..206 x 277..295 | 180..300 x 277..295 | 28.8..32.9 x 44.2..47.1 | w26 h18 b0 | | batch2-shu | queued-rework | `unit-shu-infantry-guard` | border-hits=64 | border-hits=144 | 198..280 x 282..288 | 198..289 x 275..290 | 31.6..44.7 x 45.0..46.0 | w82 h6 b6 | | batch2-shu | approved-baseline | `unit-shu-officer` | ok | ok | 161..206 x 288..295 | 161..238 x 282..295 | 25.7..32.9 x 46.0..47.1 | w45 h7 b0 | | batch2-shu | queued-rework | `unit-shu-officer-council` | 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 a41f50a..2344ba9 100644 --- a/docs/unit-sprite-rework-manifest.json +++ b/docs/unit-sprite-rework-manifest.json @@ -39,6 +39,7 @@ "unit-shu-cavalry-scout", "unit-shu-cavalry-white", "unit-shu-infantry", + "unit-shu-infantry-banner", "unit-shu-officer", "unit-shu-spearman", "unit-shu-strategist", diff --git a/docs/unit-sprite-shu-infantry-banner-v4-approval-packet.md b/docs/unit-sprite-shu-infantry-banner-v4-approval-packet.md new file mode 100644 index 0000000..6241e7c --- /dev/null +++ b/docs/unit-sprite-shu-infantry-banner-v4-approval-packet.md @@ -0,0 +1,36 @@ +# Unit Sprite Approval Packet: unit-shu-infantry-banner v4 + +- Status: approved during continuous production run +- Source art: `docs/handpaint-batch2-shu-infantry-banner-source-v4.png` +- Contact sheet: `docs/handpaint-batch2-shu-infantry-banner-v4-contact.png` +- Animation GIF: `docs/handpaint-batch2-shu-infantry-banner-v4-animation.gif` +- Before/after: `docs/handpaint-batch2-shu-infantry-banner-v4-before-after.png` +- Scale compare: `docs/handpaint-batch2-shu-infantry-banner-v4-scale-compare.png` +- Browser check: `docs/handpaint-batch2-shu-infantry-banner-v4-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-shu-infantry-banner&v=shu-infantry-banner-v4-console-clean` + +## Visual Decision + +Shu infantry banner v4 is accepted as a distinct standard-bearing foot unit. The green armor, round shield, and tall banner read clearly at battle scale without turning into a hero silhouette or resembling Guan Yu. + +## 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: `180..206` +- Base bbox height range: `277..295` +- Base bottom range: `303..303` +- Action bbox width range: `180..300` +- Action bbox height range: `277..295` +- Action bottom range: `303..303` +- Local build: `passed` +- Local browser console errors: `0` + +## Notes + +v4 keeps the v3 widened silhouette while tightening idle height swing to the release gate. The banner remains readable at 50px scale, and the body stays opaque and visually ahead of the map without external bases or rings. diff --git a/src/assets/images/units/unit-shu-infantry-banner-actions.png b/src/assets/images/units/unit-shu-infantry-banner-actions.png index 46ef90e..661be1e 100644 Binary files a/src/assets/images/units/unit-shu-infantry-banner-actions.png and b/src/assets/images/units/unit-shu-infantry-banner-actions.png differ diff --git a/src/assets/images/units/unit-shu-infantry-banner.png b/src/assets/images/units/unit-shu-infantry-banner.png index b975ba6..4c43669 100644 Binary files a/src/assets/images/units/unit-shu-infantry-banner.png and b/src/assets/images/units/unit-shu-infantry-banner.png differ