icarus pet editor

Icarus Pet Editor

A web-based save editor for Icarus pets, mounts, and farm animals. Served at /pets on the portal as a Flask Blueprint.


Project Details

Field Value
GitLab Project icarus/pets
GitLab Project ID 1
Repository https://git.eurekaendeavors.com/icarus/pets
Visibility private
License GPL v3
Portal route /pets
Package name icarus-pets
Depends on icarus/core
Status ✅ Live — 1,162+ uploads processed

What It Does

Users upload their Icarus Mounts.json save file, modify pets and animals in the browser, and download the modified file. No installation required.

Supported features: - Edit pets, mounts, and farm animals (26 creature types) - 457 talents — view, assign, reset, click-to-cycle ranks - Phenotype editing (colour, pattern, size) with pak-sourced variation data - Species swap (change creature type while preserving talents) - Clone pets (with unique GUID generation) - Create new pets from templates (with GUID) - Delete pets - Breed/bloodline swap - Session-based: no persistent storage of save data


Package Architecture

icarus/pets is a pip-installable package (icarus_pets) and a git submodule in the portal at icarus-pets/.

Canonical data sources (in icarus_pets): - talent_data.py — 457 talent definitions - variation_data.py — Phenotype variations (pak-sourced from D_MissionNPC.json) - breed_data.py — Breed/colour sub-variants - template_data.py — New pet templates - bestiary_data.json — Creature type metadata

Portal wiring (thin re-exports): - portal/blueprints/pets/data/*.py — re-exports from icarus_pets (don't edit directly) - portal/blueprints/pets/__init__.pycreate_blueprint() factory


Variation Data

Variation (phenotype) data is sourced from D_MissionNPC.json in the game's data.pak, NOT from D_Mounts.json (which is actually saddle data despite the name).

Types with pak-sourced variations: Buffalo(8), Moa(8), Wolf(8), Raptor(8), RaptorDesert(8), TundraMonkey(8), Slinker(7).

Naming gotchas: - Slinker = Stalker mount in-game (devs use inconsistent naming) - Snow Striker ≠ Stalker. Snow Striker is an NPC with no mount blueprint. - Cat is a domestic cat (Tame_Cat), not the Stalker — no variations. - Chew is the old Draven — zero variations in pak. - Game shows Phenotype [{0}] — no human-readable phenotype names exist in game data.


Bug History

Issue Problem Fix
Bloodline bug Hardcoded dropdown showed wrong options Populate from authoritative data source
#124 Slinker variations keyed under Chew Rekeyed to Slinker
GUID clone bug Cloned mounts shared source GUID → despawn each other Fresh GUID on clone
GUID create bug Template had no GUID → can't deploy to planet GUID field added to templates
#150 Pre-fix clones with duplicate GUIDs dedup_actor_guids() runs on upload
#151 Species swap from old saves loses ownership Under investigation

Accessibility (WCAG 2.1 Level A)

Feature Notes
Upload error alert links to input via aria-describedby Error div conditionally rendered
Error alert contains Fix this issue link anchored to #savefile Guides keyboard/SR users
Talent card aria-label includes creature name Format: "<Creature>: <Talent> — <Desc> — rank N of M"
aria-label updated on rank cycle Label stays current via cycleTalent()

Deprecation of .exe Releases

The previous desktop application (IcarusPetEditor-vX.X.X-win64.zip) is deprecated and archived to icarus/icarus-pets-tkinter-deprecated (project ID 9, now deleted from GitLab). The web Blueprint replaces it entirely.

Back to Catalog