dev-blog-2026-04-02 Species Audit & Data Cleanup
2026-04-02Today started with a user report that sounded simple: "SwampQuad (Stryder) mount doesn't spawn when summoned from orbit." Three hours later, I'd uncovered a much bigger data integrity problem hiding underneath.
What Happened
The initial debugging went deep. I pulled save data, compared portal-created mounts against game-native ones, traced the binary round-trip through the UE4 parser, and tested multiple patched files in-game. Nothing worked. The serializer was lossless, the template was generating valid blobs, and every field I patched made no difference.
The breakthrough came when I extracted the current data.pak and searched for Mount_SwampQuad in D_AIRelationships. It wasn't there. Not missing from my extraction. Not in a different table. Just not in the game.
The SwampQuad (Stryder) is a wild creature only. It has talent trees, bestiary entries, and a config entry pointing to Mount_SwampQuad, but no actual mount actor class exists. The portal was letting users create a mount that the game literally cannot spawn.
Once I knew to look, I ran a full audit of every species against the pak. Of the 31 species, 14 had invalid or nonexistent AI setup names.
What Shipped
Removed invalid species from create/swap lists:
- SwampQuad (Stryder) and Blueback are not tameable. They had talent trees and bestiary data that made them look legitimate, but the game's actor relationship table never included mount entries for them.
Fixed creature naming:
- Chew was displayed as "Dribbo." That's actually a different wild creature (Mini_Hippo). The game calls Chew "Draven." Fixed the name and updated the lore.
Reclassified Storca:
- Storca was listed under Mounts in the create dropdown. The game data shows it as
Tamed_Storcahaving no saddle. It's a combat pet, not a rideable mount. Moved it to the correct category.
Fixed Unicode filename downloads:
- A separate user report: downloading an edited save with Cyrillic characters in the filename caused a 502 error. The fix adds proper RFC 5987 encoding for non-ASCII filenames across every download endpoint in the portal (pets, prospects, prospector, and data export). The user who reported this also figured out the workaround on their own, which made my job easier.
Lessons Learned
The species data was originally built from two sources: talent trees extracted from the pak files, and actor class names derived from naming conventions and wiki research. The problem is that talent trees exist for creatures the game hasn't made tameable yet. The SwampQuad has a full 22-talent tree, bestiary lore, and even a mission NPC config pointing to Mount_SwampQuad. All of that made it look legitimate when I was cross-referencing during development. But D_AIRelationships, which is what the game actually uses to resolve a mount's actor class at spawn time, never had an entry for it.
There were also plain naming errors. Chew was labeled "Dribbo" (that's the Mini_Hippo), Storca was categorized as a mount instead of a combat pet, and a few AI setup row names didn't match the real data. These accumulated because the original data was assembled by hand rather than validated programmatically against the pak.
Now that I have a fresh extraction pipeline running on the server, future species additions get cross-referenced D_AIRelationships directly. Talent trees are useful for the editor UI, but they aren't proof that a creature is tameable. Only the actor relationship table is authoritative for that.
Issues Closed
- #180 - SwampQuad doesn't spawn (not tameable, removed)
- #212 - "Draven doesn't exist to pick it" (was mislabeled as Dribbo)
- #221 - 502 on download with Cyrillic filename (Unicode encoding fix)
If you submitted any of these reports, thank you. Premium credits have been awarded.