# RIFTWAKE external object and cosmetic assets

These models are derivatives of externally authored sources. They are not generated primitive stand-ins. Each manifest entry identifies its original author, source page, license, input/output SHA-256, dimensions, geometry, animation names and texture dependencies. Source pack/archive hashes and selected files are locked in assets/v17/models.json and models-cosmetics.json in the game repository.

Attribution-required assets:

- Hourglass by cemkalyoncu, https://opengameart.org/content/hourglass — CC BY 3.0, https://creativecommons.org/licenses/by/3.0/. Converted from Blender to glTF, rest-pose extraction, quantization and texture optimization; scaled/composed in-game.
- Moon by jeremy, https://poly.pizza/m/fvTF0KVsPAa — CC BY 3.0, https://creativecommons.org/licenses/by/3.0/. Original Poly model preserved by Poly Pizza; optimized, scaled and recolored as the crescent costume ornament.

Other source packs are CC0 1.0: KayKit (Kay Lousberg), Quaternius, GualtierisGG, The SideQuest Shop, Jerd, STK Rudy85, br-n518, wannesjanssens, bart, Kenney and Gobkit. See manifest.json for each exact work and its author page. Full CC0 terms are in /licenses/v17/CC0-1.0.txt; attribution terms are in /licenses/v17/CC-BY-3.0.txt. Exact pack-license copies and hashes are recorded in assets/v17/licenses.json. Credits are also linked from the game footer at /credits.html.

Reproduction:

1. Retrieve only the source files/archives listed in the repository's assets/v17/models*.json. Confirm the pinned source hashes before conversion. Archive paths are relative to RIFTWAKE_EXTERNAL_SOURCE_ROOT.
2. Use scripts/fetch-kaykit-equipment.ts for the pinned KayKit source revision. Convert legacy Blender/FBX files using scripts/convert-legacy-assets.py, convert-rpg-mini.py and convert-cosmetic-sources.py with Blender 3.6.23 --background --disable-autoexec. These scripts preserve source files. scripts/prepare-cosmetic-fragments.ts extracts the selected authored flower component; pass the locked source directory and --pink-petal for the Flower_1 fragment. Its original geometry selection, unchanged source texture, rigid alignment, UV region and intermediate GLB pin are recorded in assets/v17/cosmetic-fragments.json.
3. RIFTWAKE_EXTERNAL_SOURCE_ROOT=/path/to/sources npx tsx scripts/prepare-external-models.ts --output /new/empty/staging-directory
4. npx tsx scripts/prepare-external-models.ts --output /new/empty/staging-directory --verify
5. Review the staged manifest, dependency closure and independent asset checks before promoting the validated directory and matching repository manifest together. Keep the previous published directory available for rollback. The export command rejects any nonempty destination; it does not overwrite or automatically promote the live asset bank.

The exporter uses glTF Transform 4.5.0. Static assets are flattened, joined only across compatible materials, quantized at 14-bit position precision, and share authored textures capped at 1024 pixels. Opaque textures use JPEG quality95/chroma4:4:4; alpha textures remain PNG. Animated companions retain source rigs and channels. Modular outfit pieces are extracted for rigid socket attachment; untextured OBJ/STL sources receive explicit PBR materials. Display recipes alter placement, scale, tint and motion, never combat collision or owned product IDs.

First Light Observatory is the author's procedurally authored external pack; its source README states this. No hand-sculpting claim is made. Ultimate Stylized Nature source textures and buffers are preserved through conversion. The source identity, not polygon count alone, determines attribution.

## Health pickup case (v23 addition)

FirstAidKit_Hard by Quaternius, distributed as First Aid Kit at https://poly.pizza/m/Hp80p6148W under CC0 1.0. Author pack: https://quaternius.com/packs/survival.html. The original GLB and exact download/source/output hashes are retained in `assets/v17/sources/health-kit/origin.json`. `npx tsx scripts/prepare-health-kit.ts` recolors the existing 66-vertex cross component red and the case/badge ivory, preserving all authored triangles and world-space positions/normals, with existing node transforms baked once. `scripts/prepare-external-models.ts` applies the existing quantization/export pipeline. No substitute box or cross geometry was created. No external textures are required.

## v31 expedition encounter reuse

`assets/v31/encounter-art.json` reuses the existing verified Quaternius Ultimate Monsters creature bank for six distinct map bosses, larger rift guardians and map-role creatures. The original geometry, textures, rigs and clip files are unchanged; map-specific scale and committed-tick animation sampling are runtime adaptations. Native attack tails provide recovery; no synthetic clip or primitive substitute was introduced. Original source links, immutable input/output hashes and texture dependencies remain in `assets/v17/creatures.json` and `public/models/v17/creatures/manifest.json`. Existing Effekseer CC0 effects provide phase and rift-state accents with their original dependencies pinned in `assets/v17/vfx.json`. Contact values remain candidates until separate rendered-motion review; source checks alone do not establish visual quality. Hero/store model construction is unchanged.
