Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Thanks for both reports — they were really well written, and the first one turned out to be exactly what you suspected.

Bug 1 — enlarged card can't be closed in the deck builder: fixed.

You found a real one. The deck builder was the only screen in the app that opened the enlarged card through its own code path instead of the shared one, and that path had two holes that combined into a dead end:

  • The enlarged card was wrapped in a container that stretched to fill the whole layer, so the only spot the app recognised as "clicked outside" was a ~40 pixel strip right at the very edge of the window. Effectively impossible to find.
  • That layer didn't listen for the keyboard at all, so Escape did nothing.

That also explains why it worked fine during an actual game: the in-game view uses the correct shared path, which closes on Escape and on a click anywhere.

The fix was to delete the custom path entirely and route the deck builder through the same viewer everything else uses. So now, in the card grid, the "View the deck" category screen, and the commander row, the enlarged card closes with Escape or with a click anywhere on the screen. As a bonus you also get the keyword explanations (click a keyword pill to see what "deathtouch", "vigilance", etc. actually do).

I verified it end to end with automated screenshots — one confirming the card opens, one confirming Escape brings the deck builder back intact — and the full 15-check regression suite passes. It'll be in the next build. Sorry about the six or seven restarts; that's a rough way to build a deck.

Bug 2 — Coram, the Undertaker: I can't reproduce it yet, and I'd like your log.

I dug into this one but came up empty so far. There's nothing unusual about Coram from the interface's point of view — the attack trigger is an ordinary mill and the +X/+0 is a static ability the rules engine handles on its own. I then ran two full 4-player Commander games with all four seats playing the Coram precon, one headless and one with the full interface running (49 turns, Coram cast and attacking multiple times). Neither crashed.

So it isn't a deterministic engine bug with that card. What I can't rule out is the specific path where a human declares the attack, which is your case and the one I can't automate here.

One detail makes your report especially interesting: if the game thread dies, NeoForge is supposed to catch it and show you a message ("the game has broken", with a button to leave). The fact that you saw nothing at all suggests the whole process died, not just the match. The log would tell us which.

Could you send me these two files? In the Windows download everything lives inside the game folder:

NeoForge\datos\neo\neo.log NeoForge\datos\neo\neo-anterior.log

⚠️ Important: if you reopened the game after the crash, the one that matters is neo-anterior.log — the log rotates on startup, so the crash is in the "previous" file. Send both and nothing gets lost.

Also, please check whether there's a file named something like hs_err_pid1234.log sitting loose in the NeoForge\ folder next to the .exe. That file only appears when Java itself dies outright, which is what this looks like, and it has the cause written in it.

And one question that would help either way: did this happen once, or does it happen every time you attack with Coram?

Thanks again — this kind of report (exact sequence, what you already tried, what still worked) is what makes these findable.

I found the log from the second Coram crash.


neo-anterior.log contains a full exception at the point the game exited:


java.lang.NullPointerException:

Cannot invoke "forge.game.zone.Zone.isCardAddedThisTurn(...)"

because the return value of "forge.game.card.Card.getZone()" is null


The stack then goes through CardProperty.cardHasProperty,

SpellAbilityRestriction.checkZoneRestrictions / canPlay,

Spell.canPlay,

Card.getAllPossibleAbilities,

and AvailableActions.


This was the game where Henzie was actually my commander and Coram was one of the 99. I drew Coram, put him onto the battlefield, attacked with him, his mill trigger resolved, and then the game failed as combat advanced.


That seems potentially significant because Coram specifically creates permission to play cards from graveyards that were put there from libraries that turn, and the exception is occurring while the engine is checking whether a card was added to a zone this turn and whether it can be played.


I can send you both neo.log and neo-anterior.log. The exception is in neo-anterior.log.


Can I attach files to these replies? 


In answer to your Coram question... I have attacked with him twice and it happened both times. In both cases I did look through the discards after everyone milled, then attacked, then the game exited.

Oh and there was no hs_err_pid1234.log file

Hi Wind — the new build is up.

Before you launch it: bring your stuff across.

NeoForge keeps everything of yours inside a single folder called datos, right next to NeoForge.exe. Your decks, your settings, your Ascent and Adventure saves, and all the card art it has already downloaded live in there — nothing is stored anywhere else on your PC.

So:

  1. Unzip the new version into a new folder.
  2. Open your old NeoForge folder and copy the whole datos folder into the new one.
  3. Launch the new NeoForge.exe.

That's it. Do it before the first launch and everything is exactly where you left it — same decks, same settings, and it won't re-download the card images. If you launch it first by accident, no harm done: just close the game and copy your old datos over the new one, replacing it.

Don't copy anything else across. forge.profile.properties in particular is rewritten every time the game starts, so the new build will sort itself out wherever you put the folder.

What's in this build:

  • The enlarged card in the deck builder closes properly now — Escape, or a click anywhere. No more restarts.
  • The crash that ended your Coram games is fixed. It was a bug in Forge's rules engine that took the whole game process down; the interface now catches it and plays on.
  • The stack shows the actual cards, in order, and each one expands to show what it does and what it's targeting. There's a switch in Settings if you ever want the old compact text list back — it's still the better one when fifteen triggers are chained up.
  • Card keywords are now clickable when you enlarge a card: click deathtouch, vigilance and so on to see what they actually do.
  • Plus a batch of new cards and rules fixes that came in from upstream Forge, including the Reality Fracture set.

Thanks again for both reports — the log you dug out is what made the second one findable.