THE FINDING THAT CHANGES THE PREMISE: "1 rigged model in 4,442" was measured
with the BROKEN GLB probe (the gLUF magic bug). With the probe fixed the
library holds 36 rigged models across three rigs:
41 joints — 9 KayKit heroes + undead, up to 95 clips
7 joints — 22 KENNEY civilians (male/female a-f, orc, human, archer, shop
employees, skaters, soldiers), 32 clips
6 joints — 5 Kenney platformer characters, 25 clips
So a village can be populated with 22 visually distinct civilians TODAY, with
no third-party pack at all. Every conclusion drawn from that probe before it
was fixed needs re-checking, not just this one.
KayKit: 9 characters fetched (Adventurers + Skeletons), pinned by commit +
sha256, 37 MB, gitignored. CC0 verified by READING LICENSE.txt at each pinned
commit, recorded in the script header and CREDITS.toml.
THE SHARED RIG HOLDS ACROSS PACKS, proven rather than assumed: hashing the
joint-name list of all nine files yields the SAME digest — 41 joints, same
names, same order — despite two separate repositories. Skeleton clips are a
strict superset (95 = the adventurers' 76 + 19 undead extras: awaken,
resurrect, spawn, taunt). So a clip authored for the knight plays on the
skeleton warrior and one animation path drives the cast. A test pins this,
including that both packs are present, so a version bump cannot silently break
it.
The texture trap that cost the Kenney fetch three attempts does NOT apply:
KayKit GLBs EMBED their atlas (image/png in a bufferView), verified by parsing
all nine.
tests/rigged.rs parses all 36 rigged models through makepad_game_render::skin
— the loader the app actually runs — and asserts the index's joint and clip
counts match it. Deliberate: the index's own probe was wrong for the entire
library once and survived because the fixture encoded the same error.
find_cast groups by JOINT COUNT rather than pack, because the valuable fact is
cross-pack interchangeability. Cast states are the INTERSECTION, not the union
— advertising a state one member cannot perform is worse than a shorter list.
Added the state words the skeletons needed (spawn/resurrect/taunt/use):
Skeletons_Awaken_Floor previously matched nothing, so "an undead that rises
from the ground" was unfindable.
One bug found in its own work: casts_to_json emitted a doubled closing brace —
malformed JSON that still looked fine in a log. Fixed with a structural test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
39 lines
1.3 KiB
TOML
39 lines
1.3 KiB
TOML
# Machine-readable attribution for the stock asset library.
|
|
#
|
|
# A published game package carries this so credit travels with the game, even
|
|
# though CC0 does not require it. Generated games should copy the rows for the
|
|
# sources they actually use.
|
|
|
|
[[source]]
|
|
name = "Kenney"
|
|
url = "https://kenney.nl/assets"
|
|
license = "CC0-1.0"
|
|
credit = "Kenney (kenney.nl) — CC0"
|
|
packs = [
|
|
"arena (Starter-Kit-Basic-Scene)",
|
|
"city (Starter-Kit-City-Builder)",
|
|
"fps (Starter-Kit-FPS)",
|
|
"platformer (Starter-Kit-3D-Platformer)",
|
|
"racing (Starter-Kit-Racing)",
|
|
"impact-sounds",
|
|
"interface-sounds",
|
|
"sci-fi-sounds",
|
|
"music-jingles",
|
|
"ui-audio",
|
|
"rpg-audio",
|
|
"digital-audio",
|
|
]
|
|
|
|
[[source]]
|
|
name = "KayKit / Kay Lousberg"
|
|
url = "https://kaylousberg.itch.io/"
|
|
license = "CC0-1.0"
|
|
credit = "KayKit / Kay Lousberg (kaylousberg.com) — CC0"
|
|
packs = [
|
|
"characters (KayKit Character Pack: Adventurers) — Knight, Barbarian, Mage, Rogue, Rogue_Hooded",
|
|
"characters (KayKit Character Pack: Skeletons) — Warrior, Mage, Rogue, Minion",
|
|
]
|
|
# All nine share one 41-joint rig, so an animation authored against any of them
|
|
# plays on every one. Adventurers ship 76 clips; skeletons ship the same 76 plus
|
|
# 19 undead extras (awaken, resurrect, spawn, taunt).
|
|
rig = "kaykit-adventurers-41j"
|