Releases: networkingguru/incursion-roguelike
Release list
iNCURSION release 4 — a lighting system, and colours that suit it
Four downloads, one commit. Release 4 is the first release where macOS,
Windows, Linux and the Steam Deck all run the same program. Nothing is held back
from one platform while another catches up.
The map is lit in colour
Every torch, lantern, magma pool, glowing creature and light spell now casts a
coloured footprint that falls away with distance, and each source flickers on
noise of its own — a torch gutters, a lantern is nearly steady, magma breathes
slowly. Light loses strength and colour crossing ice or fog, and it glints off a
shiny wall in the colour that struck it. The windowed build re-shades while you
stand still, so the flicker reads as movement.
Light also decides what you can see and what can see you. Twelve creatures light
their surroundings by their own nature rather than by carrying anything, and a
creature can no longer hide while carrying a lit torch.
It runs on Windows
For the first time in this fork. It is cross-built with mingw-w64 and has been
played from the title screen down into the dungeon — but in one place only, a
Windows 11 ARM64 virtual machine, where an x86-64 binary runs under emulation.
No native x86-64 Windows machine has run it yet. It is not signed, so SmartScreen
will call the publisher unrecognised.
It plays on a gamepad
The left stick moves in eight directions, the right stick pans the look cursor,
and the d-pad carries Kick, Pray, Legend and Run. The help screen names the pad
control beside each key whenever a pad is in front of the game. This is what
makes the Steam Deck bundle playable with no keyboard attached.
A quieter palette, and a title screen
A third palette sits beside the classic and softer ones, chosen in Options and
applied without a restart — less colourful surfaces let the new light through.
The game also opens on the real logo now.
The menus stop offering what you cannot do
The Combat (C) and Use (Y) menus used to list every verb whether or not the game
could perform it. They now hide a row when the verb has no implementation, or
when your character does not meet its prerequisite.
And a long run of fixes
More than twenty magic items now do what their own in-game descriptions promise.
Overlapping magic circles stop putting each other's lights out. Permanent glows
no longer wink out on their own. A swallowed creature now feels what its
swallower walks through. Illusory damage no longer strands you above your maximum
hit points. ESC leaves character generation instead of doing nothing.
Two deliberate rule changes: every weapon a Paladin wields strikes as a holy
weapon, and Monkey Grip one-hands a bastard sword without its exotic proficiency.
Downloads
| File | For |
|---|---|
incursion-macos-arm64.dmg |
macOS on Apple Silicon. Signed and notarised by Apple. |
incursion-windows-x86_64.zip |
Windows 10 or later, x86-64. Unpack and run Incursion.exe from inside the folder. |
incursion-steamdeck-x86_64.tar.gz |
SteamOS. Unpack and run install-steamos.sh. Beta. |
incursion-linux-x86_64.tar.gz |
Any other x86-64 Linux. Unpack and run ./run.sh. Beta. |
Keep each folder together — the game finds its data by the path it was started
with. Full instructions are in the README.
Incursion is Julian Mensch's game, with additional concepts and material by
Westley Weimer. This port was written with AI assistance: the design decisions,
the bug reports and every published claim are the maintainer's; the code was
written with a coding agent in the loop and reviewed before it landed.
Incursion — Linux & Steam Deck (Beta)
This is the Linux / Steam Deck playable build of the Mac port of Incursion. It has had real playtesting on handheld hardware, but it is still pre-release: expect bugs, and saves may not survive later builds. Play it to enjoy and to shake out problems, not for a character you'd mourn.
This tag is rolling — it's overwritten with each new test build, so the links below always point at the latest.
New in this build
Paladins — Sanctified Weapon:
- Any weapon a Paladin wields now strikes as a holy weapon — an extra 2d6 damage to evil and undead — even a plain, unenchanted blade. It's a new innate 1st-level class feature, always active.
Monkey Grip:
- Monkey Grip now lets you hold a bastard sword in one hand without its exotic proficiency, freeing your off hand for a shield. You swing it at the two-handed Strength bonus, at −2 to hit.
Other fixes:
- Walls no longer leak light after a door in them is removed.
- Illusory (psychosomatic) damage no longer leaves you permanently above your maximum hit points when it wears off.
- Permanent glows and magic auras no longer wink out on their own. An archon's continual light and its magic circle destroyed themselves the moment they were cast, and every permanent field on a level used to die the first time the in-game day rolled over.
Downloads
Both are Linux builds. Neither runs on Windows, so a ROG Ally with the
stock Windows install it ships with cannot use either one.
incursion-steamdeck-x86_64.tar.gz— for SteamOS: the Steam Deck, or
another handheld running SteamOS in place of the system it shipped with.
Uses SteamOS's own SDL2. Tested on a ROG Ally running SteamOS.incursion-linux-x86_64.tar.gz— any other x86-64 Linux. Bundles SDL2 + a
launcher, so it runs without installing SDL2.
Run it
SteamOS (Desktop mode → Konsole):
tar -xzf incursion-steamdeck-x86_64.tar.gz
cd incursion-deck && ./incursion.sh
Generic Linux:
tar -xzf incursion-linux-x86_64.tar.gz
cd incursion-linux && ./run.sh
Build: x86-64, glibc 2.31 floor (Debian 11 / Steam Runtime "sniper" ABI). Shipping build — no resource compiler, no GPLv2 ACCENT runtime. From commit cb30190.
—
Built with AI assistance (Claude Code).
iNCURSION release 3 — a save format that survives new content
Folks, R3 is a huge change, and it diverges us a bit from upstream.
I made a change to give the flame tongue the burn-undead power its own description has always promised, and that required adding a new resource to the game data. I did it, and then found out it had wrecked my save game. Not the file — the file was fine. The game was just reading it wrong.
Why? Every resource is stored by position, and the lists sit end to end in one numbering space. Add one thing anywhere, and everything after it slides down a slot. My save still held the same numbers; those numbers now pointed at different things. So my Orc Ranger/Rogue/Druid of Zurvash loaded as a Lizardfolk Priest/Ranger/Bard of Xel. Bad trade.
So I spent a very long time and an obscene number of tokens building a new save format that survives additions and changes without invalidating save games. It records every resource's name next to its position, so the game can work out where things moved to instead of guessing. R3 loads your R2 save and converts it the first time you save. You do not have to do anything.
From then on, new content — monsters, spells, gods, dungeons, terrain types — can be added without invalidating your save, as long as it goes on the end of its list. Adding something in the middle is now refused outright, with a message naming exactly what moved, instead of silently handing you a different god.
One thing to get right: upgrade to R3 before R4. R3 is deliberately content-identical to R2 so your old save converts cleanly. Jump straight from R2 to R4 and you hit the same wall I did.
If you want the gory details, my IT oompa-loompa explains it below. The oompa-loompa is Claude — the engine work in this release was done with AI assistance.
Oh, and the flame tongue still does not burn undead. I took that back out so R3 would ship clean. R4 puts it back.
The gory details
Every reference to game content inside a save was a bare number, and that number was a position. The lists — races, classes, gods, monsters, spells, effects, and sixteen more — sit end to end in one numbering space, so adding a single entry to any list shifts every entry in every list after it. Your save still holds the old numbers. The game reads them against the new lists. That is the entire bug, and it is how one new sword effect turned an orc into a lizardfolk.
A save now carries a manifest: the length of all 21 lists, and every entry's name in order. A reference on disk is still a plain number, but the reader no longer trusts it. It turns that number back into "list 7, position 325" using the lengths the save recorded, then forward into today's numbering using the lengths the game actually loaded. Names are consulted only to decide whether that conversion is safe.
The part worth showing off: the check refuses only on positive evidence that something moved — a slide, where consecutive positions hold the name recorded one place over, or a shuffle, the same names in a different order. Everything else loads. Rename every god in the game and your save still opens, because a rename moves nothing. And when it does refuse, it says what it found:
module slot 0 Effect array slid at position 187: the save's manifest recorded "Goblinoid Summoning" there and the loaded module has "Animal Summoning" — a resource was inserted in the middle of the array
Two things fell out along the way. A save that cannot be written is now refused before the existing file is touched, so a failed save no longer leaves you holding a truncated file. And the format is tagged records rather than raw struct dumps, which took a 2.4 MB save down to 360 KB.
New content goes on the end of its list. That is the only rule, and the game enforces it.
iNCURSION release 2 — the bottom-of-dungeon crash
Release 2 fixes a crash that kills you at the bottom of the dungeon. If you
play release 1, update. Download Incursion-macOS-arm64.dmg below, open it,
drag Incursion.app to Applications, and double-click.
Your existing characters still load. The save format did not change.
The one that matters
Dig to the deepest level of the dungeon, press >, and release 1 dies. No
wizard mode, no weird setup — just the ordinary climb-down. Same thing if you
fall into a chasm on the bottom level, or levitate down. It has been there the
whole time and I never hit it because I never got that deep.
That's fixed, along with two more crashes: a hiding monster that could delete
itself in the middle of casting a spell, and a room-builder that occasionally
put doors inside solid rock.
Also new
- The targeting cursor works properly now. Arrow keys used to score
candidates on one axis only, so pressing RIGHT would jump past the nearest
thing to something further away, and you could get stuck in spots where most
presses did nothing at all. It now steps around a ring of targets by bearing. - Shop lists scroll. They never did. The selection just walked off the
bottom of the page and stayed there. <and>work on the overview map, and send the cursor to the nearest
staircase — ranked by what it actually costs to walk there, so the square it
picks is the squareRwill really reach. Press again to cycle.- Read a save without loading the game.
Incursion.app/Contents/MacOS/Incursion -dump yoursave.sav
prints the full character sheet, inventory and effects to the terminal, then
exits. Nothing is written; the save is opened read-only. - A failed save no longer takes the game with it. Neither does a file the
game refuses to load. - Natural Weapon Speed, a new option. Every weapon in the game carries a
speed rating and natural attacks carried none, so a monk punched slower than
the nunchaku sitting in his pack. Switched on for new installs; existing
setups keep the old behaviour until you flip it in the options screen. - Twenty prestige-class descriptions are now true. Each one was a place
where a class promised something its own script never did — the Twilight
Huntsman shipped sixty spells that nothing could reach, the Blackguard
couldn't use a shield, the Master Archer's ranged sneak attack fired with a
sling.
Install
Saves, options and logs live in ~/Library/Application Support/Incursion/.
Deleting the app leaves them; delete that folder too for a clean sweep.
macOS will ask once whether you're sure you want to open an app downloaded from
the Internet. That's normal and it only happens the first time. If you ever see
"unidentified developer" or "modified or damaged", that's a real problem and I
want to hear about it.
Requires macOS on Apple Silicon. Intel and Linux are next.
Known limits
- Apple Silicon only for now.
- This is a fork of a 0.6.9 codebase and inherits its open defects. It is not a
finished game and never claimed to be. - Sixty-three issues are closed so far. The full engineering record, including
the claims that had to be retracted, is in
docs/FIXED.md.
These notes were drafted with AI assistance and edited by me before posting.
iNCURSION release 1 — Incursion on the Mac
Incursion runs natively on the Mac. Download Incursion-macOS-arm64.dmg
below, open it, drag Incursion.app to Applications, and double-click. No
right-click, no security override, no dependencies.
Incursion is one of the deepest roguelikes ever written — a real D&D 3.5 ruleset
with feats, classes, prestige paths and a combat model that rewards knowing the
rules. It has only ever run on Windows. This is it running natively on the Mac.
Install
Saves, options and logs live in ~/Library/Application Support/Incursion/.
Deleting the app leaves them; delete that folder too for a clean sweep.
Requires macOS on Apple Silicon. Intel and Linux builds are next.
What's in this one
- It runs on a Mac at all. Four defects in the base code had to be fixed
before a POSIX build would even link. - Saves survive updates. Compatibility is now keyed on a digest of the real
data layout instead of a version number. Previously any version change made
every character silently disappear from the load menu. - Racial feats are actually granted. Eight feats across six races were never
reaching players — a Dragonkin never had Mantis Leap, a dwarf never had
Loadbearer. - Bare-handed monks are no longer punished. Two empty hands gave one attack
per swing while two weapons gave two, so a monk was better off holding
nunchaku than using his fists. Now matches the 3.5 rules. - Roughly 1,100 unattended self-play sessions behind it, with each fix verified
against a control run.
The full engineering record, including a claim that had to be retracted, is in
docs/FIXED.md.
About that first broken download — fixed 17 Aug 2026
Y'all, making shit for Mac is hard. I thought I had this licked by signing the
thing, but nope, Apple has POLICIES and they must be FOLLOWED. It is sorted now,
and the file on this page is the rebuilt one. For the details, here is what my
handy IT Oompa-Loompa had to say:
The first image was correctly signed and notarised and still refused to launch,
because it shipped a bare executable in a folder. Gatekeeper cannot approve a
bare executable — it answers "the code is valid but does not seem to be an app" —
and a notarisation ticket can only attach to a disk image, an installer or an
app bundle, never to a loose binary. So nothing carried an approval that applied
to the game itself.It is now an app bundle with its own stapled ticket, which means it keeps working
after you drag it out of the image. Verified on a second Mac, downloaded and
quarantined the way you will get it, not just built locally — that distinction is
exactly what hid the bug.
Known limits
- Apple Silicon only for now.
- This is a fork of a 0.6.9 codebase and inherits its open defects. It is not a
finished game and never claimed to be.