Skip to content

Neo Angband 0.23.0

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 11:12
· 2846 commits to master since this release

What you can download

Platform File
Windows (installer) Neo Angband Setup 0.23.0.exe
Windows (portable, one file) Neo Angband-0.23.0-portable.exe
macOS .dmg, or the .zip if you prefer to unpack it yourself
Linux .AppImage (no install), .deb, or .tar.gz
Self-hosting neo-angband-web-0.23.0.zip - static files, any web server

The portable Windows build and the AppImage need no installer:
download, run, and the game keeps its saves in a folder beside itself.

These builds are not code-signed

There is no Apple Developer identity or Windows certificate behind this
project yet, so your OS blocks the first launch.

Windows is one click: SmartScreen says "Windows protected your PC",
choose More info then Run anyway.

macOS is not one click, and the dialog it shows you does not contain the
way through
- it offers only Done and Move to Trash. Do this:

  1. Drag the app out of the .dmg, then double-click it and press Done
    on the refusal. This step is required: it is what makes the permission
    below appear, and it expires about an hour later.
  2. Open System Settings -> Privacy & Security and scroll to
    Security, near the bottom.
  3. Press Open Anyway on the line naming Neo Angband, authenticate, and
    launch it again.

Or, the same decision in one command:
xattr -d com.apple.quarantine "/Applications/Neo Angband.app"

The old right-click -> Open trick does NOT work: Apple removed that
bypass in macOS 15 Sequoia.

On Apple Silicon take the arm64 build. The x64 one is for Intel Macs,
not a fallback - Apple is withdrawing Rosetta 2, so on a current Mac it is
likelier to refuse to launch than to run slowly.

If that trade is not one you want to make, build it yourself -
docs/INSTALL.md - or play in the browser, which needs no trust decision.

Your save

Saves survive an update. Every save-format change ships the conversion that
reads the version before it, and a save this build cannot open is left
untouched rather than replaced.


Current state of the project at version 0.23.0 - the release where the port
gives something back. Nothing about the game's rules changed. What changed is that
a mod can ask what the game is made of, that the Borg finally uses it, and that
the game stopped deciding what a mod's monster looks like - a rule 0.22.0 had
added and 4.2.6 has no opinion about, handed to the tile set where it belongs.

Added

  • A plugin can now ask the game what it is made of: ctx.registries. Every
    race, object kind, feature, trap, store and projection the session actually runs
    on, bound, at its real index. Until now a plugin could see ctx.state - the
    monsters standing on the current level - which is enough to draw a frame and not
    enough to answer a question about a thing by index: what a creature you are
    merely remembering can do, what an item you have never picked up is worth, which
    kinds share a tval. It is the whole registry set rather than a curated slice,
    for the reason ctx.core is the whole namespace. A mod's own content is in it
    on the same terms as core's
    , because binding happens after every enabled mod
    composes and mods append, so nothing in a lookup tells a modded race from a core
    one. That is what lets a consumer treat modded and vanilla content identically
    without trying to.

    • The first consumer is the Borg, which had shipped since its port with its
      danger evaluator fed zeroes: makeCoreResolvers existed, was documented, and
      had no caller, because the race registry was not reachable from a plugin. It
      is now, so the Borg fears real monsters, including ones a mod added.
  • A tileset mod can supply tiles for content the pack has never heard of:
    registry:tiles.
    A plugin registers one filler, which runs after every pref
    layer - the pack's own and each mod's - and writes through a door that only ever
    fills what nothing assigned. So it cannot repaint the tile set even by mistake,
    and two mods filling different blanks cannot fight over one. The loose-pack
    engine also hands a filler a derive(donor, hue), which allocates a slot drawing
    an existing asset with its hue rotated; the tilesheet engine answers null,
    because its tiles are cells of a fixed atlas with no spare cell for a variant,
    and a filler copies the donor instead.

Removed

  • The game no longer decides what a mod's monster looks like
    (fillTilesFromKin).
    0.22.0 gave an added creature the tile of a race sharing
    its base, and an added item the tile of a kind sharing its tval. It is gone
    one release later, on the rule that has not moved since the port started: the
    port adds nothing to 4.2.6. Angband 4.2.6 has no concept of a record a mod added,
    so it has no opinion about what one should look like, and "the lowest-index
    relative's picture" is a judgement rather than ported behaviour. It was also a
    judgement about art the game does not own - a tile set drawn in 2003 has no
    picture for content added twenty years later, and a relative's picture there is a
    confident lie where a letter was the honest answer.

    Nothing is lost for a player who wants the behaviour, and it got better on
    the way out: neo-linoleum 0.15.0 carries exactly that rule, restricted to its
    own packs, and gives the added creature a recoloured tile of its own rather than
    a pixel-identical copy of its cousin's. It is one switch in that mod's options,
    on by default. Under Angband's own tile sheets an added creature is a letter
    again, which is what it was before 0.22.0 and what a fixed atlas can honestly
    offer.

    For mod authors: ship tiles with your content, and if you do not, say so in
    your description and point players at a tile mod that fills blanks.
    Tutorials 2
    and 3 now say that where the tile question comes up, and neither treats
    neo-linoleum as a dependency - a content mod is complete in ASCII with no tile
    set at all. The removal and its replacement are recorded in
    docs/modding/MOD_COMPATIBILITY.md under
    "Removals taken knowingly", which is the fourth entry of exactly this shape and
    the first whose subject had shipped.


Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.