Readme
Icarus Prospects — Save Editor
Web-based tool for parsing and modifying Icarus prospect (outpost/map) save files. Reset completed missions so other players on your server can do them.
Web Application (v0.8)
Upload your save file, view all missions across Great Hunts and Open World tabs, uncheck the ones you want to reset, and download the modified save.
# Install dependencies
pip install -r webapp/requirements.txt
# Run the web app
python webapp/app.py
# → http://localhost:5000
Features
- Upload & Parse — Upload Icarus
.jsonsave files, parses 34MB+ UE4 binary blobs in under a second - Great Hunts Tab — Missions grouped by chain (Rock Golem, Great Ape, Ice Mammoth) with dependency cascading and optional mission pairing
- Open World Tab — Missions grouped by biome with human-readable names and descriptions; failed/abandoned missions filtered out
- Dependency Cascading — Unchecking a mission auto-unchecks all downstream missions in the chain; checking auto-checks upstream
- Binary Reset — Removes mission history entries, session flags, quest actors, and resets quest manager state
- Verification — Every reset is verified (re-parsed, actor count checked, zero trailing bytes)
- Game-Tested — Modified saves load and run correctly in the ICARUS game client
- Session Isolation — Each upload gets a unique session; no cross-contamination between users
- Usage Metrics — All actions tracked (uploads, toggles, resets, downloads, parse errors)
- Stats Ribbon — Live session/upload/error counts displayed on every page
- Disclaimer — First-visit popup warning about experimental nature and backup responsibility
Supported Maps
| Map | Prefix | Great Hunts |
|---|---|---|
| Olympus | OLY_ |
Rock Golem (GH_RG_*) |
| Styx | STYX_ |
Great Ape (GH_Ape_*) |
| Prometheus | PRO_ |
Ice Mammoth (GH_IM_*) |
CLI Tools
The original CLI tools are still available:
# Reset Great Hunts campaign progression
python prospect_editor.py reset samples/live-AAA-Icarus-Olympus.json
# Reset with diff output
python prospect_editor.py reset samples/live-AAA-Icarus-Olympus.json --diff
# Diff any two saves
python prospect_editor.py diff original.json modified.json
# Extract raw binary blob
python prospect_editor.py extract samples/live-AAA-Icarus-Olympus.json output/src
Project Structure
webapp/ - Flask web application
app.py - App factory, routes, session management
models.py - SQLAlchemy models (EditSession, Blob, UsageEvent)
config.py - Configuration (dev/prod/test)
services/
mission_service.py - Mission parsing, cascading, reset logic
data/
gh_chains.json - Great Hunt chain definitions
mission_metadata.json - Mission display names and descriptions
templates/ - Jinja2 templates (Bootstrap 5)
static/ - CSS and JS assets
core/ - Shared UE4 binary libraries
ue4_parser.py - Full UE4 binary property parser
ue4_serializer.py - Byte-perfect serializer
save_io.py - Save file I/O helpers
tools/ - CLI operational tools
research/ - Analysis and research scripts
samples/ - Sample save files
docs/ - Research notes
wiki/ - Project wiki
Save File Structure
Icarus save files (.json) contain:
- ProspectInfo — Human-readable metadata (prospect ID, members, settings)
- ProspectBlob — World state as base64-encoded, zlib-compressed UE4 binary (1.6MB compressed → 34.4MB, 4826+ actors)
Database
SQLite (dev) / Postgres-ready. Three tables: - EditSession — UUID sessions with TTL, status tracking, mission state - Blob — Original and modified compressed binary blobs - UsageEvent — Every action tracked with timestamps and metadata
Verified
- Parse-serialize roundtrip: byte-for-byte identical on 34MB blobs
- All 36 UE4 component types parsed successfully
- Modified saves verified by re-parse with actor count validation
- Game-tested: modified saves load correctly in ICARUS client