mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
The extra analog button (sprint/jump) was a satellite of the left stick: drawn inside StickWidget, positioned only by distance/angle sliders in Pad settings. The touch layout editor never knew it existed, so it had no selection box and could not be dragged -- which is what everyone means by "adjustable". Promote it to TouchButtonId.ANALOG_EXTRA (Kind.ANALOGEXTRA) with entries in both default layouts, so it drags and resizes like any other control and splices into saved layouts. The stick keeps the glide hit test -- a finger locked onto the stick is the only pointer that reaches that handler after it leaves the stick -- but now tests the button's OWN circle wherever the user dragged it, lifting the local pointer into overlay space via OverlayDims (which now carries density). Two gestures can hold the button at once, so holders are counted and the keycode is emitted only on 0<->1 transitions. Distance/angle sliders drop out; dragging replaces them. BIOS NVRAM reached disk only on a clean VMManager::Shutdown, and the pause JNI's flush sat in the Running branch, so backgrounding while already paused skipped it. That is exactly how you leave a game that booted into the BIOS browser -- and on a never-configured console the BIOS runs its setup and then parks in the browser, wanting a power cycle before it will boot the disc, as real hardware does. With the config never written, every full boot was the first one: "Skip BIOS off opens the memory card manager instead of the game", permanently. Flush on the paused branch too, and autosave properly -- cdvdWriteNVM sets a dirty flag, cdvdVsync flushes it once a second. The compare-before-write in cdvdSaveNVRAM keeps that cheap. Log the boot shape (fast_boot, CDVD source, disc type, .nvm presence) once per boot so the next report of this names which of the four it is.