Files
security-game/.gitignore
T
zwitschi a231f7588a Load and animate the Blender-authored NPC base mesh
Wire the skinned model from ADR-0013 into NpcAvatar:

- _build_skinned_body() instantiates the imported npc_base.glb, binds the 14
  armature bones, and keeps the procedural _build_body() as the offline
  fallback (use_skinned_model can force it in tests)
- outfit_for()/layer_for() tint the five material slots through the new
  SurfaceMaterials.npc_slot(); accessories and hand items attach under Rig/Head
- the existing limb pivots (Hip/Knee/Shoulder/Elbow/Hand + Head marker) keep the
  old animation math; _sync_skeleton() copies their rotations to bones. Bone
  pose rotation is absolute local orientation, so it is composed with the rest
  basis (otherwise the whole body snaps into a broken pose)
- skinned rigs scale uniformly (non-uniform parent scale shears the skin) and
  keep Rig/Head for the focus cone, nametag, and reaction tag
- commit the editable npc_base.blend plus a .gdignore: Godot's editor otherwise
  tries to import the blend and hangs during --import
- npc_pipeline audit tests (contract, textures, clean GLB, committed source)

Verification: headless 212/212, Python tooling 60/60, NPC budget 16 avatars =
144 meshes at ~6.9 ms, movement/focus/props smokes pass, compare 11 good / 0 bad.
TODO Phases 0-3 checked; environment lift and release remain.
2026-11-01 13:26:37 +01:00

60 lines
898 B
Plaintext

# Python
__pycache__/
*.py[cod]
*.pyo
*.pyd
*.pycache
*.pytest_cache
*.mypy_cache
*.coverage
coverage.xml
htmlcov/
dist/
build/
eggs/
*.egg-info/
.tox/
.nox/
*.venv/
venv/
ENV/
env/
env.bak/
venv.bak/
# Godot 4
.godot/
*.import
.android/
# export_presets.cfg is committed so builds are reproducible
# OS
.DS_Store
Thumbs.db
# Editor
*.tmp
*.new
# Logs and temp
*.log
user://
# CI runner workflow logs (written into the checkout by the Gitea runner)
.gitea/logs/
build/
.env
# AI / asset-development outputs (regenerated by the tools; not shipped in the game)
assets/models/concepts/
assets/models/npc/*.blend1
assets/textures/npc/ai/
assets/textures/ai/*
!assets/textures/ai/game_ready/
# Godot extracts embedded glTF textures next to the source on import
assets/models/generated/npc_base_*_albedo.png
assets/models/generated/npc_base_*_normal.png
# Local AppImage extraction
squashfs-root/