Weapon Library (in-game roster)
Model gallery
Click through each modeled weapon to inspect its model, texture, and baked
orientation — no need to launch the game. Source: Local serves the
uncommitted working tree (baked/retextured edits under review); Published
serves the last R2 model — toggle to compare before/after. (Dev only: run
npm run dev in spec/; the /local middleware reads the repo's
assets/.)
This page is the curated list of weapons that actually exist in the running game — the 3D models a player can equip and see. It is intentionally not the full weapon catalog: the 360 WeaponData rows (stats, names, drops) are data, and the complete model/variant browser lives in the web storybook. The gallery above is the source of truth; the tables below annotate it.
Naming convention
The ein- weapons are named after their weapon category (ein-saber, ein-spear, ein-claw, …), not arbitrary flavor names. PSZ historically had no unified weapon-naming convention; this enforces one for the ein set. Where a category has more than one ein model, the second keeps a distinct name (e.g. ein-cutter alongside ein-slicer; ein-rocket alongside ein-bazooka).
Roster
Per weapon type: the PSO base model (shared across many WeaponData rows) and the unique ein- model(s). Content-identical dupes have been collapsed — the old basic/Claw.glb was a copy of the ein claw, and basic/Launcher.glb a copy of the ein rocket, so they fold into the ein entries.
| Type | PSO model | Ein model(s) |
|---|---|---|
| Saber | Saber | Ein Saber |
| Sword | Sword | — |
| Dagger | Dagger | Ein Dagger |
| Claw | (dupe of ein — removed) | Ein Claw |
| Double Saber | — | Ein D-Saber |
| Spear | Spear (partisan) | Ein Spear |
| Slicer | Slicer | Ein Slicer, Ein Cutter |
| Gun Blade | — | Ein Mazurka |
| Handgun | Handgun | Ein Pistol |
| Mechgun | Mechgun | — |
| Rifle | Rifle | Ein Rifle |
| Bazooka | (dupe of ein — removed) | Ein Bazooka, Ein Rocket |
| Laser Cannon | — | Ein Cannon |
| Rod | Rod | — |
| Wand | Wand | Ein Wand |
Gaps with no ein model yet: Sword, Mechgun, Rod (and the PSO Double Saber / Bazooka were dupes, so those categories are ein-only).
Textures — the issue is Godot import, not the models
Every weapon .glb carries its texture — the three.js gallery above renders them all correctly. So in-game bare-grey weapons are a Godot import/material bug, not a missing asset. Two distinct cases:
- Bound but wrong format (ein set). Godot imported the ein textures as plain 2D lossless (
compress/mode=0, no mipmaps) becausedetect_3dnever ran on the headless build box. They render on Forward+/macOS-GL but untextured on Windows/NVIDIAgl_compatibility. Fix: reimport VRAM-compressed + mipmaps (mode=2). Done. - Not bound at all (some generic models). Godot's importer leaves models like the Double Saber with no albedo texture despite the
.glbcarrying one — likely its handling ofKHR_materials_unlitmaterials. Fix is Godot-side (make the importer pick the texture up). Pending.
Orientation & scale (baked into the model)
PSO models are authored ~90° off from the ein convention and at raw scale; the runtime compensated per-weapon-type via WEAPON_HOLD rotation + glb_scale ≈ 0.09. Those are being baked into the models (rotation into the skeleton root, scale via import) so the runtime needs no rotate/scale and one identity hold serves every weapon. Review via the gallery's Local vs Published toggle.
Verification
- Model / texture / orientation: the three.js gallery above (renderer-agnostic) — fastest way to eyeball the whole roster.
- Actual in-game render: Godot's
gl_compatibilitybackend on Windows/NVIDIA is the reference target (it is what ships). A Mac repro is necessary-but-not-sufficient — a texture that renders on Apple GL can still fail on native GL.