Dev Blog

Release notes and project updates for the Icarus Tool Portal.

dev-blog-2026-04-02 Species Audit & Data Cleanup

2026-04-02

Today 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_Storca having 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.

dev-blog-2026-04-01 New Tool: Cartographer

2026-04-01

Upload any prospect save file and instantly visualize every ore deposit, cave entrance, and geyser, plotted directly on the in-game terrain map. Save and share your maps with a single link.


Quick Start

  1. Open Cartographer from the nav bar or homepage at https://icarus.eureakaendeavors.com
  2. Upload your prospect .json save file
  3. Explore your map instantly
  4. Save to generate a shareable link

How It Works

  • The parser extracts resource and structure data from UE4 save data
  • Terrain tiles are loaded from game files
  • Markers are rendered in real coordinates on the matching map
  • Map selection is automatic based on prospect metadata

Map Coverage

Terrain backgrounds available for:

  • Olympus
  • Styx
  • Prometheus (Ashlands and Icesheet null sectors coming soon with Issue #219)
  • Elysium

Resource & Marker Types

  • 15 ore types: Copper, Iron, Gold, Platinum, Coal, Salt, Titanium, Silicon, Sulfur, Exotic, Aluminium, Oxite, Stone, Uranium, Super Cooled Ice
  • ▲ Cave entrances
  • ◆ Oil & enzyme geysers
  • Cave ore deposits highlighted with dashed ring indicators

Interactive Map Features

  • Zoom and pan (mouse wheel + drag)
  • Filterable legend (toggle ore types and marker categories)
  • Select All / None controls
  • Click markers for:
  • Ore type
  • Grid reference
  • Depth
  • Remaining resources
  • Discovery status
  • Grid overlay (A–P, 1–16) matching in-game coordinates

Save & Share

  • Save maps to your account
  • Generate a shareable link instantly
  • Full interactivity for viewers (no login required)
  • Link previews include map name and owner
  • Manage maps from your profile (My Maps section)
  • Delete or copy links anytime
  • Limit: 20 saved maps per account

Known Limitations

  • Prometheus null sectors (Ashlands, Icesheet) appear as black void (terrain not yet extracted; Issue #219)
  • Outpost maps do not include terrain backgrounds

dev-blog-2026-03-31 Closing the loop.

2026-03-31

Last week, I mentioned that bug reports were a one-way street; you’d submit something, it’d turn into an issue on my end, and then… nothing. No visibility into what happened next.

That changes today.

Bug reports now have full conversation threads. When I respond, you’ll see it directly in the portal. No GitLab account, no email required. Just open the report from your profile.

You can reply right there as well. If I need more detail or you want to add context, your message goes straight back into the issue on my end. Neither of us has to leave our own interface.

Status updates are automatic. When an issue is closed, your report updates to “resolved” almost immediately. If the fix doesn’t hold, you can reopen it, and it syncs right back.

You’ll also see unread indicators for reports with new messages, so nothing gets missed.

Under the hood, this runs on GitLab webhooks for near real-time updates, with a reconciliation job every 30 minutes to catch anything that slips through. It should stay in sync; no silent drift.

Also fixed: the report form now prevents duplicate submissions from double-clicking.

This was the feature I called out last week as “in progress.” It’s live now.

If you’ve submitted a report before, check your profile; there may already be a response waiting.

dev-blog-2026-03-26 Thank you to everyone submitting bug reports

2026-03-26

Hi everyone, quick post to say thanks to those of you who've been submitting bug reports through the portal. It makes a huge difference when I can see exactly what went wrong, which tool you were using, and what you expected to happen.

A few fixes that went live today based on your reports:

  • Data Catalog: table browsing was broken (error when clicking into any table). Fixed.
  • Icons: missing item and talent icons across the Prospector and Pet editors. All 6,700+ icons are now loading.
  • Workshop downloads: MetaInventory.json was downloading your original file instead of your edited one. If you made loadout changes and got an empty inventory back... that was the bug. Fixed.

One thing I want to be upfront about: right now, when you submit a bug report, there's no notification back to you when it gets fixed. You report it, and then... silence. I know that's frustrating. Closing the feedback loop so you actually hear back when your bug is resolved; it is actively being worked on. It's not there yet, but it's coming.

In the meantime, if you submit a report that leads to a fix, I've been awarding free premium credits as a thank-you. Think of it as a bug bounty: you help make the tools better, and you get something back. If you've already submitted a report that led to one of today's fixes, you should already have tokens granted to your account.

If you run into anything, the bug report button in the portal is the best way to get it fixed. It creates a tracked issue, and I can usually turn fixes around within a day or two.

Thanks for using the tools, and for helping make them better.

dev-blog-2026-03-20 Why Your New Creatures Wouldn't Spawn

2026-03-20

Two users reported that newly created creatures wouldn't appear at the taming station. "You can only upload and change. Is that intended?"

It wasn't. Turns out there were two separate bugs hiding behind the same symptom.

The Clone Bug (#168)

When you clone a mount, the portal deep-copies the entire binary blob; all 40+ UE4 properties the game expects. But it was only updating the unique identifier (IcarusActorGUID) in the binary while leaving ObjectFName and ActorPathName as duplicates of the original. The game engine uses those paths to identify actors, so two mounts with the same path = collision = silent spawn failure.

The fix was surgical: update both path properties in the binary blob using the same suffix already computed for uniqueness. Six lines of code, one regression test.

The Create Bug (#169)

This one was worse. The "Create New Mount" feature was building mounts from a minimal 11-property template (\~550 bytes). A real game-spawned mount has 46 properties (\~7300 bytes). The game took one look at our barebones stub and said "nope."

The fix: store a canonical binary blob extracted from an actual game-spawned mount, and deep-copy it for every create. Swap the species fields, randomize sex and genetics, set sensible defaults, and borrow the owner identity from an existing mount in the save. The game gets a blob that looks exactly like a real mount, because it was one.

Created mounts now get:

  • Random sex
  • 7 random genetics (1–10)
  • Wild lineage
  • Food, water, stamina, and XP set to 1
  • Full property tree with correct UE4 types

Both fixes are live. If you had trouble with cloned or created mounts not spawning, try again; it should work now.

prospector-launch The Prospector is Live

2026-03-20

I've been working on this one for a while. The Prospector is a full character editor for Icarus, and as of today it's live on the portal.

Upload your Characters.json, and you get access to everything about your character. Talent trees across all four archetypes with click-to-edit ranks. Solo talents. Your full inventory with drag and drop, equipment slots, capacity tracking, and an item picker with every item in the game. XP editing. The works.

If you upload your Profile.json, you also get workshop talent editing, currency management, and the full loadout editor for your meta-inventory items.

And if you're into the endgame, the Bio-Lab tab lets you manage your legendary weapons. Add any of the nine weapons, configure upgrade slots with real in-game names and stat descriptions, and swap configurations without having to grind biomass to experiment. Every upgrade shows what it actually does, pulled straight from the game data.

The Prospector is a premium feature. It takes a membership to apply your edits, but uploading and exploring your character data is free. Take a look around before you decide. If the tools are useful to you, membership is $4 for 28 days, no subscription, no auto-renewal. If you find a bug on any tool in the portal, submit a bug report and get a premium token credit for your trouble when I confirm it.

Everything else on the portal that was free stays free. Pets, Prospects, the Data Catalog. That hasn't changed and won't.

dev-blog How I Broke the Portal Twice (and Made Sure It Can't Happen Again)

2026-03-19

This week, I broke the portal. Twice.

On March 16th and 17th, code changes went live that crashed the site. If you tried to upload a save file and got a 500 error during those windows, that was me. The root cause both times was the same: I'd restructured how the portal's components are organized (splitting each tool into its own independent package), and the production server didn't have the new pieces installed yet when the code landed.

The fixes themselves were quick — SSH in, install the missing packages, restart. But the real problem wasn't the bugs. It was that nothing stopped broken code from going live in the first place.

Here's how it worked before: push code, wait five minutes, it's live. No review, no tests, no safety net. That's fine when you're the only user and you're watching the logs. It's not fine when real people want to use the tools and expect them to be available.

So this morning I built the safety net.

Every change to the portal now goes through an automated pipeline — 395 tests that verify the editors work correctly, checks that all the components install and connect properly, and a database migration step that makes sure the schema is up to date. If anything fails, the change can't merge. No exceptions.

I also locked down the main branch. No more pushing directly to production. Every change goes through a merge request, the pipeline has to pass, and only then does it go live.

And for the "what if something still slips through" scenario: the deploy system now saves a snapshot before updating, checks the site health after restart, and if the health check fails, it automatically rolls back to the last working version. No human intervention needed.

Would both outages have been caught? Yes. The pipeline's very first check — "can all the packages install together?" — is exactly what failed both times. It would have blocked the merge before the code ever touched production.


Also shipped today

Bug Fixes

A user reported a crash when entering a very large XP value in the pet editor. Turns out the save file format uses 32-bit integers, and entering a number bigger than 2.1 billion would crash the serializer. Fixed in two layers: the editors now validate input ranges before you can submit them, and the serializer itself handles overflow gracefully as a safety net. The same validation was applied across all numeric fields in every editor.

Prospects Artifact Downloads

If you're logged in, your recent editing sessions now show download buttons on your profile page for Prospects saves, not just Pets. You can re-download both your original upload and the edited version.

Privacy Policy Update

The privacy notice on your profile page now accurately reflects that we retain your three most recent uploads per tool for logged-in users, so you can re-download them later.

v0.49 User Accounts, Bug Reporting & GDPR

2026-03-18

Steam Login

Sign in with your Steam account - no passwords to manage. Your Steam display name and avatar are pulled automatically.

User Profiles

View your account info, editing session history, and re-download your original uploads or edited files from your profile page.

In-App Bug Reporting

Hit a problem? Click Report a Bug in the footer of any page. Your report is automatically tracked in our issue system with your editing session attached - no need to dig up your save file.

GDPR & Privacy

  • Privacy consent prompted on first login - clear explanation of what we store
  • Export your data as JSON from your profile at any time
  • Delete your account - removes your personal data and anonymizes session history

Session History

Your uploads are now linked to your account. We keep your 3 most recent sessions per tool, with download buttons for both the original upload and edited output.

Bug Fix: GUID Deduplication

Mounts cloned before a recent fix could share internal IDs, causing the game to despawn one pet when another was called down. The editor now automatically detects and repairs duplicate IDs on upload.