Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
93f6fe3
WIP: implement Mario Hat costume import, runtime and smoke tooling
mstan Oct 24, 2026
90b6073
Fix Mario Hat confirmations when replacing native costumes
mstan Oct 24, 2026
5bd244b
Preserve Hammer windup before the Mario fist collision window
mstan Oct 24, 2026
d0e729b
Validate active Mario voice snapshots with prompt safe-boundary polling
mstan Oct 24, 2026
edaef10
Validate native Mario save reload across a fresh runtime
mstan Oct 24, 2026
54054f6
Render Mario captures overhead and align his imported facing axis
mstan Oct 24, 2026
8dfe86b
Honor Smash backface modes and clear Mario overhead carry height
mstan Oct 24, 2026
1c8d1e3
Record basic Mario QA and owner gameplay handoff
mstan Oct 25, 2026
173a7e6
Fix Mario transformation, punch reach and vocal playback; gate playte…
mstan Oct 25, 2026
e177208
Match Mario front-back facing to native yaw and document production t…
mstan Oct 25, 2026
1ef3743
Fix Mario perch, hang and ladder presentation and extend punch reach
mstan Oct 25, 2026
e2997a1
Animate Mario post grab and upward release separately
mstan Oct 25, 2026
c2eb788
Stage and verify complete Mario production launcher files
mstan Oct 25, 2026
7cdec9b
Record owner approval and verified mandatory Smash ROM requirement
mstan Oct 25, 2026
974fb27
Bundle Mario Hat as Experimental 0.0.1 on current dependencies
mstan Oct 25, 2026
94e5e57
Integrate current master while retaining forward-ported Mario callbacks
mstan Oct 25, 2026
ce23469
Prepare experimental Mario Hat 0.0.1 release on current dependencies
mstan Oct 25, 2026
b6e2ca7
Use the shared public release packager for US Windows
mstan Oct 25, 2026
b2a41c5
Stamp the package version in first-run instructions
mstan Oct 25, 2026
e69455d
Preserve approved wall-clock presentation in the release profile
mstan Oct 25, 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Build outputs
/.research/
/build-mario-assets/
/build/
/build-*/
/out/
Expand Down
21 changes: 13 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ set(GAME_GENERATED_DISPATCH
file(GLOB TOMBA2_MOD_PLUGIN_SOURCES CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/src/mods/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/mods/*.cpp")
list(APPEND TOMBA2_MOD_PLUGIN_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/src/mods/mario/smash_assets.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/mods/mario/smash_audio.cpp")

# The resident implementation is a build choice. Leave the original generated
# loader available in REFERENCE without linking/preparing the resident service.
Expand Down Expand Up @@ -85,13 +88,11 @@ endif()
set(TOMBA2_PRELOADED_MODS "${CMAKE_CURRENT_SOURCE_DIR}/mods/preloaded")
set(TOMBA2_PRELOADED_MODS_ITA "${CMAKE_CURRENT_SOURCE_DIR}/mods/preloaded_ita")

# USA Seamless Loading replaces the generic CD-speed and host-turbo mods.
# Restore the caller's selection afterward: Italian has no resident adapter.
set(_tomba2_previous_builtin_allowlist "${PSX_BUILTIN_MOD_ALLOWLIST}")
set(PSX_BUILTIN_MOD_ALLOWLIST
psx.enhancement.pgxp
psx.presentation.bezel)
# Keep framework presentation controls available as new ones are added.
# Generic loading/pacing controls are excluded from every release.
psxrecomp_add_runtime_target(psx-runtime
EXCLUDE_BUILTIN_MODS psx.enhancement.cd-speed psx.enhancement.fast-loading
psx.enhancement.8mb-ram psx.enhancement.hd-textures
PGXP
GAME_GENERATED_FULL_C "${GAME_GENERATED_FULL}"
GAME_GENERATED_DISPATCH_C "${GAME_GENERATED_DISPATCH}"
Expand All @@ -114,8 +115,6 @@ psxrecomp_add_runtime_target(psx-runtime
DEFAULT_GAME_CONFIG_PATH "game.toml"
LAUNCHER_BOXART "${CMAKE_SOURCE_DIR}/recomp/launcher/boxart.tga"
)
set(PSX_BUILTIN_MOD_ALLOWLIST "${_tomba2_previous_builtin_allowlist}")
unset(_tomba2_previous_builtin_allowlist)

# Distinct process name (see comment above).
set_target_properties(psx-runtime PROPERTIES OUTPUT_NAME "${_tomba2_exe_name}")
Expand All @@ -132,13 +131,18 @@ if(BUILD_TESTING)
add_executable(tomba2_preloaded_mods_test
tests/test_preloaded_mods.cpp
"${PSXRECOMP_ROOT}/runtime/src/mod_packages.cpp"
"${PSXRECOMP_ROOT}/runtime/src/mod_media.cpp"
"${PSXRECOMP_ROOT}/runtime/src/iso_reader.cpp"
"${PSXRECOMP_ROOT}/runtime/src/cue_sheet.cpp"
"${PSXRECOMP_ROOT}/runtime/src/crc32.c"
"${PSXRECOMP_ROOT}/runtime/src/psx_sha256.c"
)
target_include_directories(tomba2_preloaded_mods_test PRIVATE
"${PSXRECOMP_ROOT}/runtime/include"
"${PSXRECOMP_ROOT}/recompiler/include"
"${PSXRECOMP_ROOT}/recompiler/lib/toml11"
)
target_link_libraries(tomba2_preloaded_mods_test PRIVATE chdr-static)
add_test(
NAME tomba2_preloaded_mods_test
COMMAND "$<TARGET_FILE:tomba2_preloaded_mods_test>"
Expand Down Expand Up @@ -171,6 +175,7 @@ if(PSXRECOMP_GAME_ITA_DEBUG_PORT_OVERRIDE)
endif()

psxrecomp_add_runtime_target(psx-runtime-ita
EXCLUDE_BUILTIN_MODS psx.enhancement.cd-speed psx.enhancement.fast-loading
GAME_GENERATED_FULL_C "${GAME_ITA_GENERATED_FULL}"
GAME_GENERATED_DISPATCH_C "${GAME_ITA_GENERATED_DISPATCH}"
EXTRAS_SOURCES ${TOMBA2_MOD_PLUGIN_SOURCES}
Expand Down
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ retail dump; clear it to return to bundled OpenBIOS.
Tomba 2's mods live on the launcher's **Mods** page. Seamless Loading is enabled
by default for the US disc, replacing the generic CD Speed and Fast Loading
options. Adaptive widescreen and 1080p internal rendering are also enabled by default.
Interpolation is disabled and hidden; Skip FMVs remains optional. Italian retains its existing loading options.
Interpolation is disabled and hidden; Skip FMVs remains optional. Generic CD Speed and host-paced Fast Loading are excluded from both regional release catalogs.

## Layout

Expand Down Expand Up @@ -70,6 +70,13 @@ overlays at runtime (same architecture as Tomba! 1).

## Built-in mods

**Mario's Hat (EXPERIMENTAL 0.0.1, US only)** is optional and disabled by default.
Select your original Super Smash Bros. 64 US 1.0 ROM in Mods, then equip the
costume in game. The verified ROM is required before imported assets can be used,
including on later launches with a warm cache. No Nintendo ROM or imported assets
are bundled. Mario has double jump, extended punches and native grab/throw moves;
full progression and all-stage behavior remain experimental.

Enable **Tomba 2 Widescreen** on the Mods page and select 16:9, 21:9, or
Adaptive. Adaptive follows the live window or fullscreen aspect from 4:3 up to
21:9. Resizing wider reveals more of the world instead of stretching a fixed
Expand Down
22 changes: 22 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
# Tomba! 2 v0.3.0 - Experimental Mario's Hat

The US Windows preview adds optional **Mario's Hat, EXPERIMENTAL 0.0.1**.
Enable it in Mods, select your original Super Smash Bros. 64 US 1.0 ROM,
and equip the costume in game. A verified ROM remains required even when
imported assets are already cached. No Nintendo ROM or imported asset is shipped.

- Imported Mario appearance, motions and voice cues, double jump, extended punch
reach and native grab/throw interactions.
- Corrected facing, chest perch, post/ledge grab, hanging and ladder presentation.
- Diagnostics disabled in production, complete launcher fonts/artwork and
current framework presentation controls retained.
- Preserves the accepted wall-clock presentation default instead of adding
synchronized-swap stalls on a non-matching high-refresh monitor.
- Current-build save/load and native memory-card progression were tested on
representative village routes. Full progression, all-stage performance and
complete native coverage remain unproven; the mod defaults off.
- CD Speed and host-paced Fast Loading packages are excluded from releases.

This release targets the US disc on Windows x64. Existing Italian and Linux
release artifacts remain available separately.

# Tomba! 2 v0.2.1 - Startup loading fix

Fixes a startup hang immediately after the Whoopee Camp logo movie that could
Expand Down
14 changes: 14 additions & 0 deletions docs/AOT_RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,20 @@ filename table. Addresses and hashes are never borrowed from another region.

## Build and package

The US release uses the shared channel-enforcing packager and the title's
`packaging/release.toml` configuration:

```powershell
& 'C:/msys64/mingw64/bin/python.exe' psxrecomp-v4/tools/package_title_release.py --channel public --platform windows --jobs 2
```

It verifies the actual public/diagnostics-off build flags, records source and
artifact identities in `RELEASE_MANIFEST.json`, and reopens the finished archive
for verification. The US post-stage gate also checks Experimental Mario 0.0.1,
the required verified Smash ROM, and absence of imported Nintendo assets or
prohibited loading controls. Other regional/platform artifacts remain separate
until their matching shared packaging configuration is qualified.

Provide original discs at the paths in `game.toml` / `game_ita.toml` and use the
pinned framework emitter. Both packagers always run fresh extraction and compile
every recipe in isolation, then audit every native pair against original bytes.
Expand Down
Loading