squad-proto/assets/manifests/monsters.blender.yaml
z.kirill 8d35f4c2ec Конвейер ассетов: манифесты, риги, каталоги, инструменты
Всё, из чего собираются спрайты, и ничего собранного. Источник истины —
assets/manifests и assets/*/catalog.yaml; PNG, .sfa и contact sheet остаются
за бортом, потому что воспроизводятся командой (docs/12-assets.md).

  assets/manifests   что и как рендерить: окружение, твари, агенты, предметы
  assets/agents      паперdoll-риг восьми направлений, каталог снаряжения
  assets/monsters    пять морфологий, каждая своим ригом (docs/14-monsters.md)
  assets/sources     исходные развёртки и импорты
  assets/art_masters мастер-развёртки, по которым сверяется стиль
  tools/             сборка ассетов, покрытие, генераторы, blender-скрипты
  generated/         заголовки с константами SF_ASSET_*: без них игра не
                     соберётся, поэтому они в репозитории, хотя и производные

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 21:06:09 +03:00

72 lines
2.3 KiB
YAML

# Five production monster rigs rendered directly by SpriteForge. Each asset
# contains every gameplay clip; no intermediate sprite sheets are required.
version: 1
defaults:
backend: blender
dirs: 8
fps: 12
size: 96x112
postprocess_scale: 0.5
pivot: "96,176"
tags: [enemy, body_horror, blender, consolidated]
shambler:
rig: ../monsters/shambler.blend
parts: {body: unused_when_prefix_is_set}
anims: [walk, attack, hit, death]
params: &monster_render
executable: blender
render_size: 192x224
ortho_scale: 3.5
elevation: 26.565
camera_distance: 12
camera_target: [0, 0, 1.118]
direction_offset_deg: -90
engine: BLENDER_EEVEE
samples: 12
frames: {walk: 8, attack: 6, hit: 4, death: 8}
animation_fps: {walk: 8, attack: 10, hit: 11, death: 8}
loop_sampling: {walk: true, attack: false, hit: false, death: false}
actions: {walk: shambler_walk, attack: shambler_attack, hit: shambler_hit, death: shambler_death}
part_prefixes: {body: shambler_}
rusher:
rig: ../monsters/rusher.blend
parts: {body: unused_when_prefix_is_set}
anims: [walk, attack, hit, death]
params:
<<: *monster_render
animation_fps: {walk: 14, attack: 17, hit: 20, death: 14}
actions: {walk: rusher_walk, attack: rusher_attack, hit: rusher_hit, death: rusher_death}
part_prefixes: {body: rusher_}
spitter:
rig: ../monsters/spitter.blend
parts: {body: unused_when_prefix_is_set}
anims: [walk, attack, hit, death]
params:
<<: *monster_render
animation_fps: {walk: 9, attack: 11, hit: 13, death: 9}
actions: {walk: spitter_walk, attack: spitter_attack, hit: spitter_hit, death: spitter_death}
part_prefixes: {body: spitter_}
brute:
rig: ../monsters/brute.blend
parts: {body: unused_when_prefix_is_set}
anims: [walk, attack, hit, death]
params:
<<: *monster_render
animation_fps: {walk: 7, attack: 8, hit: 10, death: 7}
actions: {walk: brute_walk, attack: brute_attack, hit: brute_hit, death: brute_death}
part_prefixes: {body: brute_}
lurker:
rig: ../monsters/lurker.blend
parts: {body: unused_when_prefix_is_set}
anims: [walk, attack, hit, death]
params:
<<: *monster_render
animation_fps: {walk: 12, attack: 14, hit: 17, death: 12}
actions: {walk: lurker_walk, attack: lurker_attack, hit: lurker_hit, death: lurker_death}
part_prefixes: {body: lurker_}