Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
644aa83
Add version-aware capability queries to the mod API
Roxas2712 Oct 21, 2026
044ff92
Add opt-in unified mod content records across generations
Roxas2712 Oct 21, 2026
4822a59
Add opt-in unified hook and event record boundaries
Roxas2712 Oct 21, 2026
886fca5
Add detached read-only world and party queries
Roxas2712 Oct 21, 2026
9b7bc09
Add guarded public world actions and native flight
Roxas2712 Oct 21, 2026
5934814
Allow capability tests to follow additive native flight support
Roxas2712 Oct 21, 2026
52b0055
Add detached read-only battle snapshots for mods
Roxas2712 Oct 21, 2026
9044909
Add revision-bound public battle actions through native commands
Roxas2712 Oct 21, 2026
418b55f
Add revision-bound public party, bag and dialogue UI actions
Roxas2712 Oct 21, 2026
4bfa668
Add opt-in prevalidated portable world dialogue scripts
Roxas2712 Oct 22, 2026
b46e128
Add read-only map overview and encounter table queries
Roxas2712 Oct 22, 2026
40e8980
Integrate public API prerequisites (#90–#97)
Roxas2712 Oct 22, 2026
61edab0
Integrate portable script prerequisite (#98)
Roxas2712 Oct 22, 2026
4008ae2
Integrate world-overview prerequisite (#99)
Roxas2712 Oct 22, 2026
69c3474
Add shared API 3 entry and pinned cross-engine contracts
Roxas2712 Oct 22, 2026
5324b5c
Add portable keyboard, gamepad and wheel input hooks
Roxas2712 Oct 23, 2026
bbf00f2
Add portable mod.input tap, press and release controls
Roxas2712 Oct 23, 2026
34d5c10
Add portable core.update dispatch and native cross-engine contracts
Roxas2712 Oct 23, 2026
7801f9d
Add portable core.logic_speed dispatch and cross-engine contracts
Roxas2712 Oct 23, 2026
af4571f
Add portable screen.render_visible dispatch and cross-engine contracts
Roxas2712 Oct 23, 2026
5764ec8
Add portable battle.bottom_ui_visible dispatch and cross-engine contr…
Roxas2712 Oct 23, 2026
442e716
Add portable battle.status_hud_visible dispatch for GB and GBA
Roxas2712 Oct 23, 2026
eae79aa
Normalize contract fixture formatting
Roxas2712 Oct 23, 2026
95d6c75
Add portable world.talk dispatch and cross-engine NPC contracts
Roxas2712 Oct 23, 2026
ca7aed5
Add portable trainer preparation and battle-local party selection
Roxas2712 Oct 23, 2026
6e61c01
Add portable GB and GBA Pokemon level visibility hooks
Roxas2712 Oct 23, 2026
97eac55
Add portable auxiliary battle menu actions with native admission guards
Roxas2712 Oct 23, 2026
3800b63
Add portable battle move-grid navigation and native controller contracts
Roxas2712 Oct 23, 2026
5ed6353
Add portable battle-party grid navigation and native controller contr…
Roxas2712 Oct 23, 2026
c4152a5
Add API-3 playthrough storage with shared persistence contracts
Roxas2712 Oct 23, 2026
aef5650
Preserve requested storage identities across stale option writes
Roxas2712 Oct 23, 2026
0740821
compat(M2): expose selected playthrough storage to legacy mod APIs
Roxas2712 Oct 25, 2026
fefd080
compat(M2): keep selected storage dependencies outside mod execution
Roxas2712 Oct 26, 2026
b48f6dd
Merge current native upstream fixes into the existing compatibility c…
Roxas2712 Oct 26, 2026
9a8c985
test: align updater fixtures with Gen2 release assets
Roxas2712 Oct 22, 2026
009f4d4
test: cover twelve-action rebinding without fixed row indices
Roxas2712 Oct 22, 2026
f023576
test: exercise profiled Game methods with complete fixtures
Roxas2712 Oct 22, 2026
56cb76a
test: execute quit-event veto and Android shutdown paths
Roxas2712 Oct 22, 2026
aae63c2
test: pin continuous wide-battle animation anchor mapping
Roxas2712 Oct 22, 2026
7630274
test: audit and pin the current Gen2 link fingerprint surface
Roxas2712 Oct 22, 2026
c4b645d
test: cover six native producers through the public mod API
Roxas2712 Oct 22, 2026
413a5fe
Translate new transfer, hatch and athlete fallback messages at displa…
Roxas2712 Oct 26, 2026
4b2ac30
Audit current native effect registrations and register cure text sources
Roxas2712 Oct 26, 2026
91f14c9
Preserve visible-state admission inside the new native supersample draw
Roxas2712 Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/api3-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: API 3 contracts
on:
pull_request:
paths:
- '.github/workflows/api3-contract.yml'
- 'src/**'
- 'tests/api3_contract/**'
- 'tests/engine/api3_*.lua'
- 'tools/api3-contract-check/**'
push:
branches: [main, dev]
paths:
- '.github/workflows/api3-contract.yml'
- 'src/**'
- 'tests/api3_contract/**'
- 'tests/engine/api3_*.lua'
- 'tools/api3-contract-check/**'
permissions:
contents: read
concurrency:
group: api3-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
compare:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
path: gen2
sparse-checkout: |
src
data
tests
tools/api3-contract-check
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: gen1-reference
sparse-checkout: |
src
data
tests
assets/fonts
- name: install LuaJIT
run: sudo apt-get update && sudo apt-get install -y luajit
- name: identical mod contracts on both engines
run: >-
python3 gen2/tools/api3-contract-check/check.py
--gen1 gen1-reference --gen2 gen2
--report "${{ runner.temp }}/api3-report.json"
- uses: actions/upload-artifact@v7
with:
name: api3-contract-report
path: ${{ runner.temp }}/api3-report.json
if-no-files-found: error
50 changes: 50 additions & 0 deletions .github/workflows/battle-auxiliary-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: portable battle.menu_auxiliary contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: battle-auxiliary-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check native auxiliary battle dispatch and SDK contracts
run: |
luajit tests/engine/battle_auxiliary.lua
luajit tests/engine/trainer_preparation.lua
luajit tests/engine/trainer_preparation_native.lua
luajit tests/engine/trainer_party_scope.lua
- name: Validate pinned native Gen1 auxiliary battle contracts
working-directory: .contract-reference/gen1
run: |
luajit tests/modkit/cases/unified_gen2_hooks.lua
luajit tests/modkit/cases/unified_gen3_hooks.lua
- name: Compare both engines in every SDK mode
run: |
mkdir -p /tmp/battle-auxiliary-contract
python3 tools/battle-auxiliary-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 1 --report /tmp/battle-auxiliary-contract/api1-native.json
python3 tools/battle-auxiliary-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/battle-auxiliary-contract/api2-native.json
python3 tools/battle-auxiliary-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/battle-auxiliary-contract/api2-unified.json
python3 tools/battle-auxiliary-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/battle-auxiliary-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: battle-auxiliary-contract
path: /tmp/battle-auxiliary-contract
if-no-files-found: ignore
49 changes: 49 additions & 0 deletions .github/workflows/battle-bottom-ui-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: portable battle.bottom_ui_visible contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: battle-bottom-ui-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check bottom UI, inherited overlays and native battle composition
run: |
luajit tests/engine/battle_bottom_ui.lua
luajit tests/engine/battle_bottom_ui_routing.lua
luajit tests/engine/battle_bottom_ui_composition.lua
- name: Validate pinned native Gen1 GBA battle UI
working-directory: .contract-reference/gen1
run: luajit tests/modkit/cases/unified_gen3_battle_hooks.lua
- name: Compare native API 1 and 2
run: |
mkdir -p /tmp/battle-bottom-ui-contract
python3 tools/battle-bottom-ui-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 1 --report /tmp/battle-bottom-ui-contract/api1-native.json
python3 tools/battle-bottom-ui-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/battle-bottom-ui-contract/api2-native.json
- name: Compare unified callbacks and API 3
run: |
python3 tools/battle-bottom-ui-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/battle-bottom-ui-contract/api2-unified.json
python3 tools/battle-bottom-ui-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/battle-bottom-ui-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: battle-bottom-ui-contract
path: /tmp/battle-bottom-ui-contract
if-no-files-found: ignore
51 changes: 51 additions & 0 deletions .github/workflows/battle-grid-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: portable battle.move_grid_navigation contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: battle-grid-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check native move navigation dispatch and SDK contracts
run: |
luajit tests/engine/battle_grid_navigation.lua
luajit tests/engine/battle_auxiliary.lua
luajit tests/engine/trainer_preparation.lua
luajit tests/engine/trainer_preparation_native.lua
luajit tests/engine/trainer_party_scope.lua
- name: Validate pinned native Gen1 move navigation contracts
working-directory: .contract-reference/gen1
run: |
luajit tests/modkit/cases/unified_gen2_hooks.lua
luajit tests/modkit/cases/unified_gen3_hooks.lua
- name: Compare both engines in every SDK mode
run: |
mkdir -p /tmp/battle-grid-contract
python3 tools/battle-grid-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 1 --report /tmp/battle-grid-contract/api1-native.json
python3 tools/battle-grid-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/battle-grid-contract/api2-native.json
python3 tools/battle-grid-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/battle-grid-contract/api2-unified.json
python3 tools/battle-grid-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/battle-grid-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: battle-grid-contract
path: /tmp/battle-grid-contract
if-no-files-found: ignore
43 changes: 43 additions & 0 deletions .github/workflows/core-update-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: portable core.update contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: core-update-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check frame dispatch and native host routing
run: |
luajit tests/engine/core_update.lua
luajit tests/engine/core_update_routing.lua
- name: Compare both native engines through the same mod
run: |
mkdir -p /tmp/core-update-contract
python3 tools/core-update-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/core-update-contract/api2-native.json
- name: Check unified callback and API-3 integration
run: |
python3 tools/core-update-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/core-update-contract/api2-unified.json
python3 tools/core-update-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/core-update-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: core-update-contract
path: /tmp/core-update-contract
if-no-files-found: ignore
43 changes: 43 additions & 0 deletions .github/workflows/input-hook-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: portable input hook contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: input-hook-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check native input and host routing
run: |
luajit tests/engine/portable_input_hooks.lua
luajit tests/engine/portable_input_routing.lua
- name: Compare both native engines through the same mod
run: |
mkdir -p /tmp/input-hook-contract
python3 tools/input-hook-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/input-hook-contract/api2-native.json
- name: Check unified callback and API-3 integration
run: |
python3 tools/input-hook-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/input-hook-contract/api2-unified.json
python3 tools/input-hook-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/input-hook-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: input-hook-contract
path: /tmp/input-hook-contract
if-no-files-found: ignore
49 changes: 49 additions & 0 deletions .github/workflows/level-visible-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: portable pokemon.level_visible contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: level-visible-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check native level rendering and SDK contracts
run: |
luajit tests/engine/level_visible.lua
luajit tests/engine/level_visible_contract.lua
luajit tests/engine/level_visible_renderers.lua
- name: Validate pinned native Gen1 level contracts
working-directory: .contract-reference/gen1
run: |
luajit tests/modkit/cases/unified_gen2_hooks.lua
luajit tests/modkit/cases/unified_gen3_hooks.lua
- name: Compare both engines in every SDK mode
run: |
mkdir -p /tmp/level-visible-contract
python3 tools/level-visible-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 1 --report /tmp/level-visible-contract/api1-native.json
python3 tools/level-visible-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/level-visible-contract/api2-native.json
python3 tools/level-visible-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/level-visible-contract/api2-unified.json
python3 tools/level-visible-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/level-visible-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: level-visible-contract
path: /tmp/level-visible-contract
if-no-files-found: ignore
46 changes: 46 additions & 0 deletions .github/workflows/logic-speed-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: portable core.logic_speed contract
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: logic-speed-contract-${{ github.ref }}
cancel-in-progress: true
jobs:
contract:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
repository: bryanthaboi/gen1recomp
ref: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36
path: .contract-reference/gen1
- name: Install ROM-free test runtime
run: sudo apt-get update && sudo apt-get install -y luajit
- name: Check native speed dispatch, ownership and clocks
run: |
luajit tests/engine/logic_speed.lua
luajit tests/engine/logic_speed_routing.lua
luajit tests/engine/logic_speed_clock.lua
- name: Compare native API 1 and 2
run: |
mkdir -p /tmp/logic-speed-contract
python3 tools/logic-speed-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 1 --report /tmp/logic-speed-contract/api1-native.json
python3 tools/logic-speed-contract-check/check.py --gen1 .contract-reference/gen1 \
--report /tmp/logic-speed-contract/api2-native.json
- name: Compare unified callbacks and API 3
run: |
python3 tools/logic-speed-contract-check/check.py --gen1 .contract-reference/gen1 \
--format unified --report /tmp/logic-speed-contract/api2-unified.json
python3 tools/logic-speed-contract-check/check.py --gen1 .contract-reference/gen1 \
--api 3 --format unified --report /tmp/logic-speed-contract/api3.json
- uses: actions/upload-artifact@v6
if: always()
with:
name: logic-speed-contract
path: /tmp/logic-speed-contract
if-no-files-found: ignore
Loading