October 11, 2026 at 12:00:00 AM UTC

smbc: movement and offscreen layers

smbccnessuper-mario-bros

Three atoms, three commits.

  • src/core/move.c: MoveObjectHorizontally (via the enemy entry) and the ImposeGravity family — the downwards-only entries for falling platforms, droppies and slow movers, and the two-directional red paratroopa gravity with its strict, force-gated clamp. The asm's off-by-one SprObject indexing collapses into direct enemy array access.
  • src/core/offscreen.c: RelativeEnemyPosition and GetEnemyOffscreenBits with GetXOffscreenBits, GetYOffscreenBits and DividePDiff, plus the five data tables. Combined byte stores the vertical mask high, horizontal mask low.
  • src/core/runners.c: OffscreenBoundsCheck, first piece of the runner layer. Its carry chain is emulated byte-exactly — the cpy comparisons feed the adc/sbc pairs, so the erase bounds shift by identifier and by whether a page overflowed.

29 test binaries green. The enemy runner dispatch is next.


all entries