Skip to content

feat: add System3/System35 runtimes and System4 compatibility fixes - #389

Merged
akitaSummer merged 12 commits into
mainfrom
codex/xsystem35-runtime
Oct 25, 2026
Merged

akitaSummer merged 12 commits into
mainfrom
codex/xsystem35-runtime

Conversation

@JasmineLCY

@JasmineLCY JasmineLCY commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Adds native playback for AliceSoft System 1–3 DAT and System 3.5/3.9 ALD games, fixes startup/rendering failures in Chinese System4 releases, and restores native runtime test coverage in macOS CI.

Changes

  • Add packages/system3 and packages/xsystem35 submodules on dedicated aether branches. Both runtimes render into the existing Aether window, support isolated saves, mouse/touch/keyboard input and optional virtual controls that default off. Wire them into macOS, iOS/iPadOS, Android and Linux builds and game import detection.
  • Fix System4 Chinese text detection and mixed Shift-JIS/GBK scene identifiers, including short translated titles and Sengoku Rance startup.
  • Handle fan-repacked Rance IX AFA indexes with bounded decompression. Restore Rance Quest title/UI assets, TGA decoding, independently encoded monster metadata and Chinese font fallback while retaining original Japanese fonts.
  • Sync xsystem4 master into its dedicated aether branch. Initialize all pinned runtimes in both public and private CI paths, with a regression test against the submodule manifest. Fix mpg123 ARM64 floating-point detection so native Linux uses its selected NEON decoder successfully.
  • Fix System35's embedded Android modal input build by using the host's portable input path instead of SDL's standalone Android activity APIs. Route embedded Android MIDI through the configured SDL_mixer backend without linking the standalone JNI activity. Keep both engine changes on its dedicated aether branch.
  • Enable AdvHD, YU-RIS, BGI and MAGES providers in desktop native test builds when the Godot extension is disabled; also include the independent Siglus JPEG tests. Fail CI if required runtime test executables disappear from CTest discovery. All checks stay in existing CI jobs.
  • Remove the accelerated-renderer requirement from AdvHD pixel tests and allow offline OpenGL 3.2 renderers on hosted macOS. All six pixel cases now run successfully in CI. Only skip when no compatible pixel format exists; unexpected context errors, shader failures and incorrect pixels still fail.
  • Add an embedded Android MIDI link regression to both native test configurations, and require it in the CI test inventory.
  • Replace fixed-delay audio and System3 resume assertions with bounded completion/progress checks. Reserve scenario, MAGES and CatSystem2 fixture directories atomically for parallel execution, and check MAGES archive identity across filesystem case behavior.

Companion private PR: AetherInternal #70. The public gitlink pins advertised commit 2dbbfeedea6f951322dcfdbeb30d15b6d93a0fab; private implementation remains in the private repository.

Validation

  • GitHub Actions Build run 40209867681 passed on macOS, Android, iOS, Linux x86_64 and Linux ARM64 for head 0496352dc16a74e4da0aa62494e893f67fa6e27e. All four companion private CI checks also passed.
  • Remote macOS CTest: 1,238 passed, 2 expected Artemis skips, 0 failures out of 1,240 tests. All six AdvHD pixel readback cases and the new embedded Android MIDI link contract passed. The job verified the pinned Internal commit and enabled the integrated private suites.
  • CI artifacts contain the macOS Release app, Android Release APK, unsigned iOS Release IPA, and Linux Release apps for both architectures. Linux Debug artifacts are not uploaded.
  • Complete macOS arm64 Debug build/export and strict deep code-signature verification passed for the feature implementation. The CI follow-up passed full native builds and parallel CTest in both test-only and product configurations.
  • Native suite: 1,238 passed, 2 expected skips out of 1,240 registered tests, up from 762 registered tests. Newly included coverage: AdvHD 245, YU-RIS 29, BGI 187, MAGES 11, Siglus 2, three private provider-factory configuration contracts, and one embedded Android MIDI dispatcher contract.
  • Injecting the runner's unavailable-renderer error reproduces the old six AdvHD failures. The fixed tests report six CTest skips under that condition and all six pass on local hardware; unexpected graphics API errors remain failures.
  • The inventory guard rejects the old discovery manifest with missing private runtime suites and accepts the complete manifest. Factory contracts pass in unit, product and disabled modes and reproduce the old test-only omission.
  • Five relevant native regressions passed 20 parallel repetitions each, covering short MP3 completion, VM resume, archive lookup and parallel fixture isolation. System3's four scenario variants also passed 10 repetitions each during feature validation.
  • Python suite: 97 passed, 1 skipped. Private portability checks: AdvHD 3 passed, BGI 1 passed, YU-RIS CMake 4 passed. Workflow YAML and diff checks passed.
  • Android ARM64 API 26 NDK object compilation passed for embedded modal input. The MIDI dispatcher also passes strict shared-library linking with no standalone JNI MIDI references; linking the old source reproduces the CI failure. The mpg123 overlay and native ARM64 floating-point configuration regression also passed locally.
  • Godot: 15 import/library/access-policy and Onscripter smoke checks passed during feature validation. Local JSON probes and exported-app checks cover the supplied Chinese Rance IV, 4.1, 4.2, 5D, 01, 02, Sengoku Rance, VIII and IX initial flows. Per-game scope is recorded in runtime READMEs and verified-games documents. No game assets are included.
  • clang-format 19.1.7 audit found no new formatting deviations. Existing formatting is preserved under the user's prior baseline waiver; new source files and changed C++ lines pass.

Gameplay on iOS, Android and Linux, Rance VIII/IX battle/3D, and full-game completion remain unverified. System3 save/reopen/reload was checked separately; other save/load coverage is described in the runtime READMEs.

AI-assisted implementation and review.

JasmineLCY added a commit to AetherKiri/xsystem35-sdl2 that referenced this pull request Oct 25, 2026
The embedded runtime does not link the standalone JNI activity backend. Select its configured portable mixer without referencing midi_android.

Refs AetherKiri/Aether#389.
Pin OpenGL capability detection for private pixel tests and the portable System35 MIDI dispatcher. Add a native Android-selection link contract and require it in CI discovery.

Refs #389 and AetherKiri/AetherInternal#70.
@akitaSummer
akitaSummer merged commit 43be16e into main Oct 25, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants