While reviewing the old crossed-row gameplay logic, we found a mine being judged twice.

The first hit came from a real input. The player pressed the panel while the mine was in range, and the engine handled it normally.

Later, when the same row crossed the receptors, another part of the engine checked whether that panel was still being held. It found the same mine and generated a second hit for it.

Same row, same column and same mine, judged through two different paths.

Both paths exist for valid reasons. OutFox needs to detect a direct press on a mine, but some game modes also need to punish a player who is already standing on a panel when a mine reaches it.

The problem was that neither path had final ownership of the decision.

The direct input route could judge the mine, while the later crossed-row route could still find it and act as though nothing had happened. Each part of the engine was behaving reasonably on its own, but together they allowed the same object to be serviced twice.

Our gameplay logs showed the sequence clearly. A real mine hit occurred first, followed by a synthetic held-panel hit for the same row and column.

That gave us a narrow place to fix it.

The crossed-row mine check now ignores mines that have already been judged or removed from play. Held-over-mine behaviour is unchanged, and the normal direct input path continues to work as before.

The fix does not alter mine scoring or remove any existing mine rules. It only prevents two parts of the engine from making separate decisions about the same mine.

This investigation also showed why the older gameplay path needs clearer boundaries.

Input handling, row crossings, object selection and the resulting effects currently happen across several connected systems. When more than one of those systems believes it owns the same decision, faults like this become possible.

For now, one mine receives one judgement, which feels like a fairly reasonable rule for a rhythm game.