Project OutFox supports rhythm-game families with very different ideas about input, judgement, holds, mines, keysounds and chart timing.

That means we cannot clean up gameplay by treating Dance as the default answer and forcing every other mode through it.

Some modes care about fresh presses. Others also use buttons that were already held when a row crossed. Hold heads, checkpoints, mines and synthetic inputs do not behave identically everywhere. BMS, PMS, DTX and other formats also carry rules that cannot be reduced to familiar four-panel behaviour.

Those differences are not edge cases.

They are part of the game contract for each mode.

Before we replace the older row and input paths, we are documenting those contracts properly. We need to know which inputs count, which rows can be judged, how held state is used, which effects belong to scoring, and which unusual behaviours are intentional compatibility rather than accidental engine faults. This also helps us improve and make the familiar four panel mode more robust.

The duplicate mine judgement was a clear bug because the same mine received two applied decisions.

A pre-held Pump hold head is different. So is Para/ds3ddx/maniax behaviour that reacts to held sensor input. Those may look unusual when viewed through Dance rules, but that does not make them wrong.

The engine has to know the difference.

Bomb notes (non-dance mines) are another example, some game modes have a system where a bomb note dies at the receptor, so there is no late hit chance, some are only active for 15ms before the receptor then they are inactive, whereas in dance, it has a symmetrical early late long system. this makes modes with the bomb notes not have a representation in the engine as they use the old mine system, which is unfair to those players and communities.

We are not preserving old code merely because it is old. We are preserving behaviour when charts, players and game modes genuinely depend on it. Where the existing implementation is tangled, we can replace it with something clearer while keeping the result the same.

This is the direction of the wider gameplay rebuild.

Each mode should define its own rules instead of inheriting assumptions from whichever system happened to be written first. Shared engine services can then handle timing, input and row processing without flattening every game into one model.

Pump should behave like Pump. Be-mu/po-mu and DTX should retain their own keysound and chart rules. Guitar, drums, Para, Dance and the other supported families should each receive the behaviour they require.

That is how OutFox moves beyond being a collection of compatibility paths.

It becomes an engine that understands the games it supports.