summaryrefslogtreecommitdiff
path: root/docs/维护说明.md
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-29 10:38:53 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-29 10:38:53 +0800
commit328760853c15c44d1de915d6c88e0dfd7ddc5af6 (patch)
treeaa1e570378cfe92b0c4e9f125141a43d0ba89663 /docs/维护说明.md
parent46073814a67598c1a4122d1cb5abaaeb38c94e6d (diff)
downloadliving-village-328760853c15c44d1de915d6c88e0dfd7ddc5af6.tar.gz
p72: 角色行走四向动画帧提升(6 走 + 2 待机)
CharacterArt 运行时点阵图集从 4 走 + 2 待机扩为 6 走(新增左右低过渡步 4/5,由 1/2 镜像)+ 2 待机,格数 *8、图集 5120x48;VillageArt 帧循环 %6、characterSourceRectangle *8、characterAtlasWidth 5120。同步 P45/Prototype 帧断言、新增 P72 帧表完整性回归、脚本与素材重新生成、维护说明动画语义。白天正午村庄行走实跑证据落 docs/evidence/p72-*。Desktop 343/343、Kernel 120/120、digest 与 p70 一致。
Diffstat (limited to 'docs/维护说明.md')
-rw-r--r--docs/维护说明.md14
1 files changed, 8 insertions, 6 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md
index ae0ae47..5fa87a4 100644
--- a/docs/维护说明.md
+++ b/docs/维护说明.md
@@ -50,16 +50,18 @@ final_digest 固定 953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F
村核矩形(24..38 × 16..34)由生成器不变式保证可通行;
默认可玩世界为 `MapGen.generateWithSize 256 192 42UL`(详见 §大世界(P21))。
-## 动画语义(P13,全部为 `tick → 帧` 纯函数)
+## 动画语义(P13,全部为 `tick → 帧` 纯函数;P45/P72 扩充角色帧)
-- 角色图集 `Assets/jiangnan-characters.png`:3840×48,每个 (变体,方向) 占 **6** 格
- (4 走路 + 2 待机呼吸),格宽 32 高 48。
- - `cellIndex = (variantIndex * 4 + directionIndex) * 6 + frameIndex`;
+- 角色图集由 `CharacterArt.buildAtlas` **运行时生成**(内嵌原创点阵,非外部素材,P45 起取代
+ 旧的 `Assets/jiangnan-characters.png`;旧 PNG 仅作历史资产保留,运行期不再采样):
+ 5120×48,每个 (变体,方向) 占 **8** 格(**6 走路 + 2 待机呼吸**),格宽 32 高 48。
+ - `cellIndex = (variantIndex * 4 + directionIndex) * 8 + frameIndex`;
方向序 North/South/West/East = 0/1/2/3,变体序 Indigo/Ochre/Jade/Grey/StrawHat = 0..4。
- - frameIndex:Walk 0..3 = 0..3,IdleOne/IdleTwo = 4/5。
- - `animationFrame = (tick / 4) % 4`(16 tick 一循环);`idleFrame = (tick / 24) % 2`(48 tick 一循环)。
+ - frameIndex:Walk 0..5 = 0..5(1/2 与 3 为左右迈步,4/5 为由 1/2 镜像出的过渡步),IdleOne/IdleTwo = 6/7。
+ - `animationFrame = (tick / 4) % 6`(24 tick 一循环);`idleFrame = (tick / 24) % 2`(48 tick 一循环)。
- `characterFrame isMoving tick`:移动取走路帧,静止取呼吸帧。Avatar 用 `Game.fs` 的
`avatarMoving`(比较前后位置);NPC 用 `npcSpriteSpecAtTarget`(目标向量 ≥0.5px 视为移动)。
+ 单人节奏仍由 `rhythmFor` 的 `WalkWindow/IdleWindow/PhaseOffset` 决定(农夫 4/24、货郎 3/20、书生 6/36)。
- 世界图集 `Assets/jiangnan-world.png`:800×32,25 格。水面 3 帧在 slot 1/13/21,
炊烟 3 帧在 slot 22/23/24。
- `waterFrameTickAt tick x y = (tick / 32 + x + 2y) % 3` → Water / WaterSpriteB / WaterSpriteC。