Approve Shu spearman guard handpainted sprite v2

This commit is contained in:
2026-07-01 20:30:45 +09:00
parent ec6537bbdf
commit d994cb7f73
22 changed files with 126 additions and 64 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 KiB

View File

@@ -0,0 +1,24 @@
# Shu Spearman Guard Hand-Painted v2
- source: `handpaint-batch2-shu-spearman-guard-source-v2.png`
- base status: ok
- action status: ok
- base partial alpha: 0, opaque pixels: 1670152
- action partial alpha: 0, opaque pixels: 4207256
- base frame border hits: 0
- action frame border hits: 0
- base empty frames: 0
- action empty frames: 0
- base bbox width range: 184..205
- base bbox height range: 277..295
- base bottom range: 303..303
- action bbox width range: 176..276
- action bbox height range: 232..295
- action bottom range: 303..303
- contact: `handpaint-batch2-shu-spearman-guard-v2-contact.png`
- animation: `handpaint-batch2-shu-spearman-guard-v2-animation.gif`
- before/after: `handpaint-batch2-shu-spearman-guard-v2-before-after.png`
- scale compare: `handpaint-batch2-shu-spearman-guard-v2-scale-compare.png`
- battle composite: `handpaint-batch2-shu-spearman-guard-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

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -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: 46
- Approved baseline units: 47
- Pending approval units: 0
- Queued rework units: 45
- Queued rework units: 44
## Checked Rules

View File

@@ -37,6 +37,7 @@
"unit-shu-officer-council",
"unit-shu-officer-vanguard",
"unit-shu-spearman",
"unit-shu-spearman-guard",
"unit-shu-strategist",
"unit-wei-archer",
"unit-wei-cavalry",
@@ -53,8 +54,8 @@
"pendingApproval": [],
"nextAfterApproval": [],
"stageCounts": {
"approved-baseline": 46,
"queued-rework": 45
"approved-baseline": 47,
"queued-rework": 44
},
"batches": [
{
@@ -166,24 +167,10 @@
"label": "Batch 2 Shu generic units",
"total": 18,
"stageCounts": {
"approved-baseline": 14,
"queued-rework": 4
"approved-baseline": 15,
"queued-rework": 3
},
"units": [
{
"stem": "unit-shu-spearman-guard",
"reviewStage": "queued-rework",
"queueRole": "queued rework",
"baseStatus": "border-hits=64",
"actionStatus": "border-hits=144",
"battleBasePx": [
32.3,
41.2,
45.0,
46.0
],
"spec": null
},
{
"stem": "unit-shu-spearman-veteran",
"reviewStage": "queued-rework",
@@ -408,6 +395,20 @@
],
"spec": "unit-sprite-batch2-shu-spearman-spec.md"
},
{
"stem": "unit-shu-spearman-guard",
"reviewStage": "approved-baseline",
"queueRole": "approved reference",
"baseStatus": "ok",
"actionStatus": "ok",
"battleBasePx": [
29.4,
32.7,
44.2,
47.1
],
"spec": null
},
{
"stem": "unit-shu-strategist",
"reviewStage": "approved-baseline",

View File

@@ -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: 46
- Approved baseline units: 47
- Pending approval units: 0
- Queued rework units: 45
- Queued rework units: 44
- Manifest: `docs/unit-sprite-rework-manifest.json`
- Audit: `docs/unit-sprite-rework-audit.json`
@@ -46,11 +46,10 @@ No next unit is currently defined.
- Batch key: `batch2-shu`
- Total units: 18
- Stage counts: approved-baseline 14, queued-rework 4
- Stage counts: approved-baseline 15, queued-rework 3
| unit | role | stage | status | battle base px | spec |
| --- | --- | --- | --- | --- | --- |
| `unit-shu-spearman-guard` | queued rework | queued-rework | base border-hits=64; actions border-hits=144 | 32.3..41.2 x 45.0..46.0 | |
| `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 | |
@@ -67,6 +66,7 @@ No next unit is currently defined.
| `unit-shu-officer-council` | approved reference | approved-baseline | technical ok | 23.5..32.7 x 46.0..47.1 | |
| `unit-shu-officer-vanguard` | approved reference | approved-baseline | technical ok | 27.0..36.1 x 44.2..47.1 | |
| `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-spearman-guard` | approved reference | approved-baseline | technical ok | 29.4..32.7 x 44.2..47.1 | |
| `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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 KiB

After

Width:  |  Height:  |  Size: 334 KiB

View File

@@ -4,9 +4,9 @@ This file is generated by `scripts/write-unit-sprite-next-steps.py`.
## Current Gate
- Approved baseline units: 46
- Approved baseline units: 47
- Pending approval units: 0
- Queued rework units: 45
- Queued rework units: 44
- Manifest: `docs/unit-sprite-rework-manifest.json`
- Audit: `docs/unit-sprite-rework-audit.json`
- Current approval board: not generated until the next pending sample.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 KiB

After

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

@@ -11,8 +11,8 @@
"batch7-unique-officer": 19
},
"stage_counts": {
"approved-baseline": 46,
"queued-rework": 45
"approved-baseline": 47,
"queued-rework": 44
},
"rows": [
{
@@ -2696,7 +2696,7 @@
},
{
"batch": "batch2-shu",
"review_stage": "queued-rework",
"review_stage": "approved-baseline",
"stem": "unit-shu-spearman-guard",
"base": {
"key": "unit-shu-spearman-guard",
@@ -2706,23 +2706,23 @@
1252
],
"partial_alpha": 0,
"opaque_pixels": 2147373,
"border_hits": 64,
"min_width": 202,
"max_width": 258,
"min_height": 282,
"max_height": 288,
"min_bottom": 281,
"max_bottom": 287,
"opaque_pixels": 1670152,
"border_hits": 0,
"min_width": 184,
"max_width": 205,
"min_height": 277,
"max_height": 295,
"min_bottom": 303,
"max_bottom": 303,
"empty_frames": 0,
"width_swing": 56,
"height_swing": 6,
"bottom_swing": 6,
"battle_min_width_px": 32.3,
"battle_max_width_px": 41.2,
"battle_min_height_px": 45.0,
"battle_max_height_px": 46.0,
"status": "border-hits=64"
"width_swing": 21,
"height_swing": 18,
"bottom_swing": 0,
"battle_min_width_px": 29.4,
"battle_max_width_px": 32.7,
"battle_min_height_px": 44.2,
"battle_max_height_px": 47.1,
"status": "ok"
},
"actions": {
"key": "unit-shu-spearman-guard-actions",
@@ -2732,23 +2732,23 @@
1252
],
"partial_alpha": 0,
"opaque_pixels": 4793457,
"border_hits": 144,
"min_width": 202,
"max_width": 267,
"min_height": 275,
"max_height": 290,
"min_bottom": 274,
"max_bottom": 289,
"opaque_pixels": 4207256,
"border_hits": 0,
"min_width": 176,
"max_width": 276,
"min_height": 232,
"max_height": 295,
"min_bottom": 303,
"max_bottom": 303,
"empty_frames": 0,
"width_swing": 65,
"height_swing": 15,
"bottom_swing": 15,
"battle_min_width_px": 32.3,
"battle_max_width_px": 42.7,
"battle_min_height_px": 43.9,
"battle_max_height_px": 46.3,
"status": "border-hits=144"
"width_swing": 100,
"height_swing": 63,
"bottom_swing": 0,
"battle_min_width_px": 28.1,
"battle_max_width_px": 44.1,
"battle_min_height_px": 37.1,
"battle_max_height_px": 47.1,
"status": "ok"
}
},
{

View File

@@ -29,8 +29,8 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards.
## Review Stage Counts
- approved-baseline: 46
- queued-rework: 45
- approved-baseline: 47
- queued-rework: 44
## Batch Plan
@@ -99,7 +99,7 @@ Visual review boards are generated by `scripts/render-unit-sprite-review-boards.
| batch2-shu | approved-baseline | `unit-shu-officer-council` | ok | ok | 147..205 x 288..295 | 147..286 x 276..295 | 23.5..32.7 x 46.0..47.1 | w58 h7 b0 |
| batch2-shu | approved-baseline | `unit-shu-officer-vanguard` | ok | ok | 169..226 x 277..295 | 169..277 x 264..295 | 27.0..36.1 x 44.2..47.1 | w57 h18 b0 |
| batch2-shu | approved-baseline | `unit-shu-spearman` | ok | ok | 146..263 x 274..290 | 146..276 x 280..295 | 23.3..42.0 x 43.8..46.3 | w117 h16 b0 |
| batch2-shu | queued-rework | `unit-shu-spearman-guard` | border-hits=64 | border-hits=144 | 202..258 x 282..288 | 202..267 x 275..290 | 32.3..41.2 x 45.0..46.0 | w56 h6 b6 |
| batch2-shu | approved-baseline | `unit-shu-spearman-guard` | ok | ok | 184..205 x 277..295 | 176..276 x 232..295 | 29.4..32.7 x 44.2..47.1 | w21 h18 b0 |
| batch2-shu | queued-rework | `unit-shu-spearman-veteran` | border-hits=64 | border-hits=144 | 202..258 x 282..288 | 202..267 x 275..290 | 32.3..41.2 x 45.0..46.0 | w56 h6 b6 |
| batch2-shu | approved-baseline | `unit-shu-strategist` | ok | ok | 156..214 x 282..293 | 155..243 x 282..293 | 24.9..34.2 x 45.0..46.8 | w58 h11 b0 |
| batch2-shu | queued-rework | `unit-shu-strategist-field` | 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 |

View File

@@ -45,6 +45,7 @@
"unit-shu-officer-council",
"unit-shu-officer-vanguard",
"unit-shu-spearman",
"unit-shu-spearman-guard",
"unit-shu-strategist",
"unit-wei-archer",
"unit-wei-cavalry",

View File

@@ -0,0 +1,36 @@
# Unit Sprite Approval Packet: unit-shu-spearman-guard v2
- Status: approved during continuous production run
- Source art: `docs/handpaint-batch2-shu-spearman-guard-source-v2.png`
- Contact sheet: `docs/handpaint-batch2-shu-spearman-guard-v2-contact.png`
- Animation GIF: `docs/handpaint-batch2-shu-spearman-guard-v2-animation.gif`
- Before/after: `docs/handpaint-batch2-shu-spearman-guard-v2-before-after.png`
- Scale compare: `docs/handpaint-batch2-shu-spearman-guard-v2-scale-compare.png`
- Browser check: `docs/handpaint-batch2-shu-spearman-guard-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-shu-spearman-guard&v=shu-spearman-guard-v2-console-clean`
## Visual Decision
Shu spearman guard v2 is accepted as a defensive spear-and-shield infantry variant. The upright spear and round shield give it a clear guarded role without making it read as Guan Yu or a named polearm hero.
## 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: `184..205`
- Base bbox height range: `277..295`
- Base bottom range: `303..303`
- Action bbox width range: `176..276`
- Action bbox height range: `232..295`
- Action bottom range: `303..303`
- Local build: `passed`
- Local browser console errors: `0`
## Notes
v2 widens the body silhouette so the unit does not collapse into a thin spear line at 50px scale. The spear remains readable, the shield anchors the silhouette, and the frames stay free of alpha and border problems.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 645 KiB

After

Width:  |  Height:  |  Size: 745 KiB