Shorter pitch focused on what the app actually automates for the player: screenshot orders -> geo puzzle + trajectory solved -> ready fire commands; screenshot the field log -> kills/new contacts picked up automatically; strike planning with blast-radius preview. Mentions the map's geometric derivation overlays and ambiguous-intersection handling. Drops the old deep technical dump in favor of pointing at code comments for internals. Adds icon.png (used in the header) and showcase.png (embedded screenshot); icon_alt.png kept as an unused alternate for now. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
54 lines
2.2 KiB
Markdown
54 lines
2.2 KiB
Markdown
<h1 align="center">
|
|
<img src='icon.png' width="150px" style="margin-top: 20px;">
|
|
<br>
|
|
<b>FeNigma</b>
|
|
<br>
|
|
</h1>
|
|
|
|
<p align="center"><b>Fe</b> (iron) + enigma — we solve the geo puzzles.</p>
|
|
|
|
A companion app that mostly automates **IRON NEST: Heavy Turret Simulator**
|
|
for you. Screenshot the game's typewriter orders and it solves the geo
|
|
puzzle and the trajectory math, handing you ready-to-fire commands —
|
|
elevation, azimuth, number of powder charges. Screenshot the field log and
|
|
it picks up kills and newly-spotted units automatically. You can also plan
|
|
strikes of your own, picking a shell for the blast radius you need. Pure
|
|
screen-reading — no game files touched, no input injected.
|
|
|
|

|
|
|
|
## What it does
|
|
|
|
- **Reads orders, solves the geometry.** Paste/screenshot the in-game
|
|
typewriter text and it parses absolute grid refs and relative
|
|
bearing/distance descriptions, then resolves everything into map
|
|
coordinates — chained clues ("Bearing 293 from Alpha") included. The
|
|
map shows its work: the actual bearing lines/circles behind each
|
|
resolved position. When a description is genuinely ambiguous (two
|
|
intersections), both candidates are shown instead of guessing.
|
|
- **Calculates the shot.** Every resolved target gets a live firing card:
|
|
elevation, azimuth, and minimum powder charge, computed from the Nest.
|
|
- **Tracks the battle.** A second screenshot of the field log marks units
|
|
destroyed and folds in newly-spotted contacts, merging with what's
|
|
already known instead of duplicating it.
|
|
- **Plans strikes.** Drop a strike anywhere on the map and pick a shell to
|
|
preview its blast radius before committing.
|
|
|
|
## Run
|
|
|
|
```bash
|
|
./run.sh
|
|
```
|
|
|
|
GTK apps with this app ID are single-instance — if a run gets killed
|
|
uncleanly it can leave a zombie registered on D-Bus and silently no-op the
|
|
next launch. If `./run.sh` seems to do nothing, `pgrep -af ironnest_assist`
|
|
and kill any stragglers first.
|
|
|
|
## Stack
|
|
|
|
GTK4 + libadwaita (PyGObject) for the UI, Tesseract (via pytesseract) for
|
|
OCR, Pillow/numpy for preprocessing. Details on the coordinate system,
|
|
OCR formats, and solver internals live in code comments (`solver.py`,
|
|
`ocr.py`, `models.py`) rather than here.
|