Commit Graph

893 Commits

Author SHA1 Message Date
quarrel07 322cd52c16 Exit cleanly after teardown instead of racing static destructors (#718)
Normal quits ran the full static-destructor chain, where destruction order is
unspecified and something logs through spdlog after its statics are destroyed,
intermittently segfaulting on exit (same class as upstream issue #689). All
user-visible state (config, saves) is already persisted by GameEngine::Destroy,
so end the process with _Exit like the extraction error paths already do.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
2026-07-23 12:23:53 -06:00
quarrel07 78a012ce06 Fix the reset button doing nothing or looping the start screen when pressed repeatedly (#719)
* Make the reset button reliable from any screen

Pressing reset repeatedly near app start could do nothing, fade the music
with no reset, or bounce the press-start screen back to itself. Three
defects in the old handler:

- It ran from the ImGui widget, racing the menu state machine; a press
  landing mid-fade was re-advanced by the in-flight transition (the
  press-start loop).
- It always wrote gGamestateNext = MAIN_MENU_FROM_QUIT; once the game was
  already in that state a repeat write is swallowed by the != guard in
  main.c, so nothing happened.
- CM_ResetAudio ran unconditionally, so the music faded even when the
  reset was swallowed.

The widget now only sets an atomic request flag; ApplyPendingReset (top of
push_frame, on the game loop) performs the reset. It alternates between
the two identical FROM_QUIT gamestates so every press trips the gamestate
switch, and re-enters the menus through the intro's own transition
protocol (FADE_MODE_LOGO -> setup_menus rebuild + fresh fade-in), which
replaces any in-flight transition. Audio only fades when a reset actually
executes. The dead gSkipIntro switch in the old handler (an unconditional
override below it always won) is gone; behavior is unchanged: reset lands
on the logo intro, or the start menu in debug mode.

Play-verified: hammering reset during the splash screens restarts the
logo every press; reset mid-fade after press-start no longer loops back;
resets from the main menu and mid-race work as before.

* Honor gSkipIntro when picking the post-reset screen

Review feedback on #719: restore the gSkipIntro switch from the old
handler instead of hard-coding the logo intro, keeping the debug-mode
override on top (no else), matching the boot-time logic in main().

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
2026-07-23 12:21:36 -06:00
coco875 4c24ae2bc2 Refactor cmake (#721)
* some start of refactor

* Update SetFlags.cmake

* Update SetCmakeVar.cmake

* Update SetFlags.cmake

* Fix error int-convertion

* more refactor

* clean up include and source file

* fix link of lib

* fix a warning

* fix include in src/actors

* fix include in src/debug

* fix include in src/ending

* fix include in src/engine/actors

* fix include in src/engine/cameras

* fix include in src/engine/editor

* fix include in src/engine/objects

* fix include in src/engine/tracks

* fix include in src/port/ui

* fix include in src/racing

* fix include in src/engine/vehicles

* fix include in subfolder of src/engine

* fix include in src/engine

* fix include in src/enhancements

* fix include in src

* fix switch

* invert common and findlib

* Update SetFlags.cmake

* clean up some workflow

* some splification

* Update build.sh

* Update Game.h

* add header back

* Delete test_check.cmake

* continue

* Update common.cmake
2026-07-22 18:02:58 -06:00
quarrel07 022e0737d5 macOS: disable press-and-hold accent popup while moving (#713) 2026-07-22 12:27:50 +02:00
Lucas 4c03712561 Fix warnings regarding ambigious typings (#715)
* Fix warnings regarding ambigious typings

* Revert struct Collision name change
2026-07-20 12:14:56 +02:00
quarrel07 b3e0fe248d Fix widescreen letterbox/divider left-edge clipping on ARM64 (#709)
* Fix widescreen letterbox/divider left-edge clipping on ARM64

The race-intro letterbox bars (draw_box_fill_wide) and the splitscreen
divider lines fed the float OTRGetDimensionFromLeftEdge result into
gDPFillWideRectangle, whose _SHIFTL packing casts float->unsigned.
Converting a negative float to unsigned is UB: x86 wraps (and the
wide-rect handler's sign extension recovers the value, so the bug is
invisible there), but ARM64 fcvtzu saturates negatives to zero — so on
Apple Silicon the fills started at the 4:3 left edge instead of the
true left edge, leaving a strip of sky visible left of the intro bars
in widescreen. Use the integer OTRGetRectDimensionFrom*Edge getters,
matching the sibling draw_box_wide helpers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Shorten the fix comment

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 12:14:36 +02:00
quarrel07 582900a1b9 macOS: sharp ImGui menu text on Retina at every menu scale (#714)
* macOS: sharp ImGui menu text on Retina at every menu scale

On a HiDPI display the ImGui overlay renders into a 2x framebuffer, but
the glyph atlas is rasterized at the logical point size and stretched up
by DisplayFramebufferScale, so all menu text looks fuzzy.

Set ImFontConfig::RasterizerDensity on the game fonts and the merged
FontAwesome icons: glyphs rasterize at higher resolution without
changing logical size or layout. Baked at retinaScale (2.0) times the
Menu Scale slider's maximum (2.0) so the runtime FontGlobalScale only
ever downsamples a high-res atlas instead of stretching a low-res one,
keeping text crisp at every Menu Scale setting. Standard-DPI displays
just get a supersampled atlas (identical layout, slightly sharper).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Shorten the RasterizerDensity comment

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 16:12:17 +02:00
quarrel07 d1dec0f6f4 Fix crash when bailing out of first-run setup before the game inits (#707)
InitModsSystem() runs before the game world is set up. Its bail-out paths (no
O2R + user declines generation, missing mods.toml, cyclic/outdated mod deps,
and GenAssetFile's no-ROM / unsupported-ROM cases) call exit(), which runs the
global `static World sWorldInstance` destructor -> World::CleanWorld() ->
dereferences Sky::Instance and other singletons that are still null this early,
segfaulting. The most visible case: declining the first-run "Generate one now?"
prompt pops a crash report instead of quitting cleanly.

Use _Exit() on these pre-initialization bail-outs so no static destructors run.

Co-authored-by: quarrel07 <paeans-toggle-2e@icloud.com>
Co-authored-by: coco875 <59367621+coco875@users.noreply.github.com>
2026-06-29 02:41:26 +02:00
Tim Schneeberger 458613f2d9 Fix Switch build (#705)
* Remove duplicate Switch::Init(PostInit) call.

It was called multiple times, causing multiple applet hooks (that all point to the same callback address) to be registered. For some reason, the OS started spamming us with FocusUpdate events via that hook because of that.

* Hide fullscreen and app data directory button on Switch
2026-06-10 23:42:07 +02:00
coco875 efdaf9d8fd Fix switch and windows CI (#700)
* merge upstream commit to fix some bug

* fix merge

* add a local user for the merge

* Update main.yml

* revert main.yml

* fix windows CI

* fix switch build

* fix windows and try a fix for switch

* fix windows build
2026-05-04 20:00:43 +02:00
Alessio Tosto 76d19f7e43 Force proper wrapping on fov angles. (#699)
Co-authored-by: coco875 <59367621+coco875@users.noreply.github.com>
2026-05-03 04:08:05 +02:00
coco875 e2cf6ecbb4 Fix 32 bit (#697)
* try x86

* ci: uniform build-linux-release-docker and their x86

* Update main.yml

* fix animation

Co-Authored-By: Alessio Tosto <rinnegatamante@gmail.com>

* add explanation

* add windows 32 in release

* Update windows-compile.yml

* fix windows compilation

* fix win32 windows

* Update libultraship

---------

Co-authored-by: Alessio Tosto <rinnegatamante@gmail.com>
2026-05-03 02:13:30 +02:00
Alessio Tosto 40d4f12580 Fix missing texture size initialization for clouds. (#698) 2026-05-02 15:14:46 +02:00
Alessio Tosto 7b28790290 Force type correctness when calculating collision hashes (#696)
* Force type correctness when calculating collision hashes

* Fix more incorrect hash calculations.

* fix an error

---------

Co-authored-by: coco875 <59367621+coco875@users.noreply.github.com>
2026-05-01 23:20:21 +02:00
Jeod 10f10f17e6 Fix compiling for linux arm64 (#650)
* Enable MK64 build option for torch

* Fix HMAS type error (present on arm64)

* Align memory pool and fix empty macro

* Experimental: Add 4096 memory alignment

* Add alignment for ALIGNED8 macro

* Use memset over deprecated bzero

* Ensure OPENGLES flag can be used in CMakeLists.txt

* Diagnostic: align ship2_window_i8 to rule out odd-alignment crash

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
2026-04-22 17:38:48 -06:00
mkoterski d2febf4603 Add CoreAudio to audio backend combobox map (#686)
macOS uses COREAUDIO as the default audio backend, but the
combobox display map in MenuTypes.h only contained SDL and
WASAPI. This causes an unordered_map::at crash on first
frame draw when the Audio API dropdown tries to render.
Fixes the menu crash portion of #681.
2026-04-21 13:33:11 +02:00
EJStaats 7dba3c3c81 Allowing user-set internal resolution in menu (#682) 2026-03-29 13:34:19 -06:00
MegaMech f7aab65da4 Fix Item Window (#677)
* Update render_objects.c

* Update render_objects.c
2026-03-09 18:50:13 -06:00
MegaMech d16bdd75b1 Fix Palm Tree Interp (#675)
* Update actors.c

* Update actors.c

* Update SkyCloud.cpp

* Update render_objects.c
2026-03-09 18:43:17 -06:00
MegaMech 132357d9fb Big Interpolation Overhaul (#674)
* Fix FI

* FI statue

* Intepr fixes

* Improve

* More interp

* Fix compile

* More interp

* Fix text
2026-03-06 20:10:07 -07:00
MegaMech 25d49df90f More Interp Fixes (#673)
* Update render_player.c

* Update render.inc.c

* Update render.inc.c

* Fix kart interp

* Remove feature

* Fix error
2026-03-06 01:14:44 -07:00
MegaMech 89cd738955 Fix mistakes (#672) 2026-03-05 23:45:11 -07:00
MegaMech ba0a24e28f Fix editor loading and finishline duplication (#653)
* Fix editor loading and finishline duplication

* Update SceneManager.cpp
2026-03-05 21:15:59 -07:00
MegaMech 376087be69 Fix Thwomp Collision and Better Interp Tagging for Actors (#665)
* Update actors.c

* Update actors.c

* actor

* Fix bounding box

* More interp fix

* Update KoopaTroopaBeach.cpp

* Update Thwomp.cpp

* Update actors.c

* Update render.inc.c

* Update render.inc.c
2026-03-05 16:52:14 -07:00
MegaMech 000c47e610 Fix retry issue with actors (#669)
* Update World.h

* Update World.cpp

* Update Game.cpp
2026-03-05 13:51:59 -07:00
MegaMech 55419843ad Update SkyActor.h (#666)
* Update SkyActor.h

* Update menu_items.c
2026-03-02 17:29:03 -07:00
MegaMech 55175baecd Possible Fix for SkySnow Crash (#664)
* Update SkySnow.cpp

* Update SkySnow.cpp
2026-03-02 13:04:51 -07:00
MegaMech cb3b447b53 Fix Lakitu in Time Trials (#657)
* Update Game.cpp

* Add functions for various quit transitions
2026-02-26 12:22:29 -07:00
MegaMech a33c66ee31 Frame Interp changes (#654) 2026-02-24 16:23:17 -07:00
MegaMech 548ccf0063 Impl Sky and SkyActors (#630)
* Create Cloud.cpp

* Create Cloud.h

* Fix the cloud

* Cleanup

* More cleanup

* Update Track.h

* Refactor SkyboxCloud position calculations

* Update SkyboxStar.cpp

* Update SkyboxStar.cpp

* Refactor SkyboxStar.cpp by removing redundant code

* Update SkyboxCloud.cpp

* Refactor SkyboxSnow.cpp by reordering includes

* Update SkyboxCloud.h

* Refactor SkyboxStar.h for improved formatting

* Impl skyboxcloud

* Update comment

* update comment

* Work now

* Fully impl Sky

* Fix define

* Fix args
2026-02-24 14:51:25 -07:00
MegaMech 321d440089 Update Thwomp.cpp (#645) 2026-02-20 14:45:41 -07:00
MegaMech 3aa2c9662a Attempt At Fixing Clang (#647)
* Update Game.h

* Update Game.h

* Update macros.h
2026-02-08 13:50:22 -07:00
MegaMech f3d6612b20 Update CustomTrack.cpp (#646) 2026-02-08 01:48:27 -07:00
MegaMech 4cc2fb5d13 More Interp Fixes... Probably (#644)
* Update BombKart.cpp

* Update BombKart.h

* Update PlayerBombKart.cpp

* Update Text.cpp
2026-02-06 23:53:33 -07:00
MegaMech 26b2ce90e7 More Interp and Draw Visibility Options (#643)
* Update render.inc.c

* FI improvements

* Rename

* Update PortMenu.cpp
2026-02-06 22:05:41 -06:00
tortugaveloz d7413601a6 Surround support (#642)
* Added surround option.

* Added surround effect.

* Remove printf.

* fix.

---------

Co-authored-by: Lywx <kiritodev01@gmail.com>
2026-02-06 00:28:54 -06:00
MegaMech c902e200ab Fix Interp Issues (#641)
* Update Seagull.cpp

* Update Seagull.h

* Update Thwomp.cpp

* Update Thwomp.h

* Update Crab.cpp

* Update render.inc.c

* Update Mole.cpp

* Update Mole.h

* Update Mole.cpp

* Update Thwomp.cpp

* Update Thwomp.cpp

* Update Thwomp.cpp

* Update HotAirBalloon.cpp

* Update HotAirBalloon.cpp

* Update ChainChomp.cpp

* Update Hedgehog.h

* Update Hedgehog.cpp

* Update Snowman.cpp

* Update Flagpole.h

* Update Flagpole.cpp

* Update Flagpole.cpp
2026-02-05 12:44:26 -07:00
MegaMech 816c03c88b Update Game.cpp (#640) 2026-02-04 22:45:18 -07:00
MegaMech cefae44db1 FrameInterpolation For Kart (#639)
* Update BombKart.cpp

* Update BombKart.h

* Update PlayerBombKart.cpp

* Update PlayerBombKart.cpp

* Update PlayerBombKart.h

* Update PlayerBombKart.h

* Update PlayerBombKart.cpp

* Update PlayerBombKart.cpp

* Update PlayerBombKart.h

* Update PlayerBombKart.h

* Update PlayerBombKart.cpp

* Update PlayerBombKart.cpp
2026-02-04 21:28:22 -07:00
MegaMech 2b9d689b2f [Enhancement] Allow Non-unique Character Selections (#638)
* Update PortMenu.cpp

* Update menus.c
2026-02-04 17:19:05 -07:00
MegaMech ddd47126ec Maybe fix some interpolation (#637)
* Update render_player.c

* Refactor FrameInterpolation_RecordOpenChild calls

* Update GrandPrixBalloons.cpp

* Modify func_80053D74 to include an additional parameter
2026-02-04 17:18:33 -07:00
MegaMech a59dcc1e75 Fix itemwindow interp for 3/4p mode (#634) 2026-02-04 17:17:38 -07:00
coco875 9ac20da227 fix errror of compilation (and clean header) 2026-01-19 13:41:44 -06:00
MegaMech a2036f5ce7 Fix screen blanking (#627)
* Update main.c

* Update skybox_and_splitscreen.c

* Adjust framebuffer handling in race_logic_loop

Reorder framebuffer clearing and creation for proper rendering.
2026-01-17 22:35:21 -07:00
Fabien Romano aaae77f3bc Fix NON_PORTABLE build. Ship::Context needs to be initialized first. (#618)
* Fix NON_PORTABLE build. Ship::Context needs to be initialized before resolving files. Move offending calls inside functions where they are used. Those will always be called after GameEngine() which runs Ship::Context::CreateUninitializedInstance() early.

* Replace hardcoded string mk64.o2r and spaghetti.o2r with variables game_asset_file and engine_asset_file.
2026-01-09 11:13:37 -07:00
MegaMech e71c422afb Update collision.c (#624) 2026-01-03 14:22:16 -07:00
Fabien Romano a4c01b784b fix build on OpenBSD (#621)
* fix build on OpenBSD

* Update src/port/Game.cpp

* Update ceremony_and_credits.c
2026-01-01 13:06:40 -07:00
MegaMech 81d200e74b Refactor Track to CustomTrack Class, impl render layers (#606)
* impl Custom track transparency and clip

* Rename DrawWater to DrawTransparency

* Impl z-sorting for transparent mesh

* Interp work

* rename track function

* cleanup

* Revert texture interp

* Further revert

* Update Harbour

* Impl custom track path select

* Add check

* Fix compile

* Fix function extern

---------

Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
2025-12-29 15:51:12 -07:00
coco875 5fc7aebf87 fix item in multiplayer (#612) 2025-12-24 16:44:45 +01:00
coco875 b0582b5c32 invert condition in menu and some adjustement in interpolation (#611)
* use more unique ptr and fix a shell crash

* remove useless mods folder

* add even more unique_ptr

* Update KoopaTroopaBeach.cpp

* restore a throw

* Update Game.cpp

* automatically create mods folder

* fix oob in external by assuming that all 8 player can make sound

* better texture loading

* add destructor for gameobject

* avoid out of bound in audio sample

* Update FrameInterpolation.cpp

* Update torch

* invert condition

* adjust interpolation
2025-12-23 14:27:27 +01:00