Skip to content

Releases: NextOs-Ports/kotor-nextos

1.0.3 — controller rework + Quick Save freeze fix

Choose a tag to compare

@NextOs-Ports NextOs-Ports released this 06 Aug 22:46

Field-report fixes, all verified on real hardware (R36S/ArkOS) before release.

Controllers (muOS RG40XX-H "only d-pad works", ROCKNIX RG DS "d-pad dead", can't exit)

The pad normalizer no longer guesses the physical layout from the controller's USB id. retrogame_joypad is configured per firmware, so the same id ships different button orders — and sometimes a HAT d-pad — on different CFWs. The translation table is now built at runtime from the controller mapping your firmware itself provides (PortMaster get_controlsSDL_GAMECONTROLLERCONFIG): face buttons, shoulders, triggers (button- or axis-based), analog axes, HAT d-pad, and the real SELECT/START pair for the save-safe exit combo. The proven Twin PS2/USB and GO-Super profiles remain as fallback, and KOTOR_INPUT_DYNAMIC=0 restores the old behavior. debug.log now records the exact mapping used (cfw pad mapping: / kotor_input: lines), so reports can show precisely how the pad was translated.

Quick Save hard-lock (reported on R36S/DarkOsRE)

Reproduced live and fixed: the engine ends save-directory enumeration on the Win32 pair FindNextFileA()==0 + GetLastError()==ERROR_NO_MORE_FILES, but the loader never set the compat layer's last-error — so overwriting an existing quick save spun the main thread forever (the first quick save always worked, which is why it only hit the second save onwards). The loader now reports enumeration state through the layer's own SetLastError. Verified on device: quick save overwrites complete and the game keeps running.

Install

Same as before: drop the ports/ folder onto your device, launch Star Wars KOTOR, and the installer will build the game data from your own APK+OBB copy (BYO data — nothing copyrighted ships here). See INSTALLATION.md.

sha256: see attached .sha256.

Star Wars: KOTOR universal 1.0.2 — muOS/ROCKNIX controls + exec-bit fix

Choose a tag to compare

@NextOs-Ports NextOs-Ports released this 06 Aug 07:39

Star Wars: KOTOR universal 1.0.2 — controls on muOS/ROCKNIX pads + exec-bit self-heal

Second tester round. On 1.0.1 the RG40XX-H (muOS) already ran with clear audio and video —
this release fixes what was left.

Fixed

  • Only d-pad and sticks worked / game would not exit (muOS): the pad normalizer now
    recognises the retrogame_joypad controller used by muOS H700 devices (RG40XX/RG35XX
    family) and the ROCKNIX RG DS — same kernel driver and button order as the R36S
    GO-Super pad, only the USB product id differs. Face buttons, shoulders, triggers and
    SELECT/START now reach the engine in the Android order it expects, and the
    SELECT+START save-safe exit works — no more hard reset.
  • Permission denied on launch (ROCKNIX): ZIPs extracted on Windows or FAT media
    lose the executable bits, and ext4 ROM partitions then refuse to run the loader.
    run.sh now restores the executable bits of everything it ships before launching,
    so any extraction method works.

Updating

Drop this zip over the previous install. Game data already installed is reused as-is.

Star Wars: KOTOR universal 1.0.1 — muOS/ROCKNIX launcher fix

Choose a tag to compare

@NextOs-Ports NextOs-Ports released this 06 Aug 06:32

Star Wars: KOTOR universal 1.0.1 — muOS / ROCKNIX launcher fix

Fixes the two first-round tester failures (RG40XX-H muOS, RG DS ROCKNIX). The game data
install was already completing on both devices — the launcher environment was the problem.

What was broken

  • muOS (libGLESv2.so.2: wrong ELF class: ELFCLASS64): the launcher did not carry the
    literal PORT_32BIT="Y" marker muOS inspects to expose its 32-bit runtime, and the
    library path fell through to the 64-bit /usr/lib, so the ARMHF game binary could not
    find a 32-bit GLES driver.
  • ROCKNIX (SDL_Init Error: Could not connect to PulseAudio): the pipewire-pulse
    socket lives under $XDG_RUNTIME_DIR, and the 32-bit process had no path to the
    32-bit ALSA/PipeWire/SPA modules, so every SDL audio backend failed and the game aborted.
  • Both: the input-normalizer LD_PRELOAD leaked into 64-bit helper processes,
    spamming wrong ELF class: ELFCLASS32 warnings.

What changed

Launcher scripts only — the game binaries are byte-identical to 1.0.0, and the recipes
follow our published, device-validated TASM2 ARMHF launcher:

  • PORT_32BIT="Y" exported by the visible launcher and by run.sh before the
    PortMaster hooks load.
  • /usr/lib32, /usr/local/lib32 and the PortMaster libs/libs.armhf folders are
    probed ahead of /usr/lib.
  • 32-bit ALSA/PipeWire/SPA module directories exported when present; PulseAudio socket
    probe extended to $XDG_RUNTIME_DIR/pulse/native.
  • LD_PRELOAD scoped to the game process only.

Updating

Drop this zip over the previous install. Game data already installed by 1.0.0 is
reused as-is (the installer fast-validates and skips extraction).

Star Wars: KOTOR universal 1.0.0

Choose a tag to compare

@NextOs-Ports NextOs-Ports released this 06 Aug 04:08

Native ARMv7 so-loader for the Aspyr Android release of Star Wars: Knights of the Old Republic (1.0.10, build 53), running the original Odyssey/SDL2/GLES2 flow on Linux handhelds. BYO data: you provide your own APK + OBB cache — this package ships no game data.

Validated on real hardware: NextOS Amlogic (Mali-450, fbdev, 1280x720) and R36S/ArkOS (Mali-G31, KMSDRM, 640x480). Full cycle on both: BYO install from this very zip -> gameplay -> audio -> native controller -> Select+Start clean exit.

Install: unzip into your ports folder, drop your APK + OBB cache into ports/kotor/gamedata/ (any file names — content is what gets validated), open the port. Full steps in INSTALLATION.md.

Highlights of 1.0.0 (see CHANGELOG.md):

  • public runtime with a GLIBC 2.27 ceiling, linked against the firmware's 32-bit SDL2/EGL/GLESv2
  • real-display resolution probe (DRM connector -> fbdev), no hard-coded geometry
  • per-pad input profiles (Twin PS2/USB and R36S GO-Super), Select+Start save-safe exit
  • NXExtract 1.2.3 installer: content-addressed recipe, transactional install, resume, honest wrong-build diagnostics (a KOTOR II APK is rejected by name), fast marker on later launches
  • FMOD audio through the native OpenSL bridge; dead inherited Pulse falls back to ALSA, logged

Community & support: https://discord.gg/DHfY62eDNN