diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-21 13:15:39 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-21 13:15:39 +0800 |
| commit | 0b9753543bd726818c61d76384d56a30b862e1ac (patch) | |
| tree | 06b21006dc540b5d9995caf394bb4c8084b9294e /scripts | |
| parent | 76a6850bb88546fc21f5f78a53fbda04e77c8b52 (diff) | |
| download | living-village-0b9753543bd726818c61d76384d56a30b862e1ac.tar.gz | |
feat(desktop): 村民与主角四帧行走动画
人物图集 5 变体 x 4 向 x 4 帧(2560x48,全部经 make-jiangnan-art.py 原创,四种腿步:站立/左跨/站立微跳/右跨镜像);animationFrame 按 tick/4 mod 4 确定性取帧(16 tick 一循环,禁实时时钟);快照式回归断言四帧循环与逐帧图集列映射,主角同规则。
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/make-jiangnan-art.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/scripts/make-jiangnan-art.py b/scripts/make-jiangnan-art.py index cdae4e9..c484d91 100644 --- a/scripts/make-jiangnan-art.py +++ b/scripts/make-jiangnan-art.py @@ -3,7 +3,7 @@ Generates three RGBA PNGs into src/LivingVillage.Desktop/Assets: jiangnan-world.png 672x32 (21 ground/prop tiles, 32px each) - jiangnan-characters.png 1280x48 (5 variants x 4 directions x 2 frames, 32x48 cells) + jiangnan-characters.png 2560x48 (5 variants x 4 directions x 4 frames, 32x48 cells) jiangnan-interior.png 392x96 (variable-size bottom-aligned interior cells) Cell geometry is mirrored in VillageArt.fs; keep both in sync. @@ -445,6 +445,7 @@ DIRECTIONS = ["north", "south", "west", "east"] def draw_character_cell(c, ox, variant, direction, frame): + # frame: 0 neutral stand, 1 left stride, 2 neutral stand (higher torso bob), 3 right stride robe = variant["robe"] light = variant["light"] dark = variant["dark"] @@ -456,15 +457,20 @@ def draw_character_cell(c, ox, variant, direction, frame): c.rect(ox + 8, 44, 16, 1, (23, 31, 34, 110)) c.rect(ox + 10, 45, 12, 1, (23, 31, 34, 90)) - if frame == 0: + if frame in (0, 2): c.rect(ox + 10, 36, 4, 7, dark) c.rect(ox + 9, 42, 6, 3, SHOE) c.rect(ox + 18, 36, 4, 5, dark) c.rect(ox + 18, 39, 6, 3, SHOE) + elif frame == 1: + c.rect(ox + 9, 36, 5, 7, dark) + c.rect(ox + 9, 42, 6, 3, SHOE) + c.rect(ox + 18, 36, 3, 5, dark) + c.rect(ox + 18, 39, 6, 3, SHOE) else: c.rect(ox + 18, 36, 4, 7, dark) c.rect(ox + 18, 42, 6, 3, SHOE) - c.rect(ox + 10, 36, 4, 5, dark) + c.rect(ox + 12, 36, 3, 5, dark) c.rect(ox + 10, 39, 6, 3, SHOE) c.rect(ox + 7, 22, 18, 14, robe) @@ -531,7 +537,7 @@ def draw_character_cell(c, ox, variant, direction, frame): def build_character_atlas(): - c = Canvas(1280, 48) + c = Canvas(2560, 48) cell = 0 for variant in VARIANTS: for direction in DIRECTIONS: @@ -674,7 +680,7 @@ def main(): ASSET_DIR.mkdir(parents=True, exist_ok=True) targets = [ ("jiangnan-world.png", build_world_atlas(), 672, 32), - ("jiangnan-characters.png", build_character_atlas(), 1280, 48), + ("jiangnan-characters.png", build_character_atlas(), 2560, 48), ("jiangnan-interior.png", build_interior_atlas(), 392, 96), ] for name, canvas, w, h in targets: |
