| Age | Commit message (Collapse) | Author |
|
* lus update compiles but not run
* Game runs, fix demo bug
* Switch lus to port-maintenance branch
|
|
* Update render_objects.c
* Remove unused HUD texture function declarations
Removed several unused function declarations related to HUD textures.
* Update skybox_and_splitscreen.c
* Remove unused set_viewport2 function declaration
Removed unused function declaration for set_viewport2.
* Update code_80005FD0.c
* Remove set_bomb_kart_spawn_positions function declaration
* Update skybox_and_splitscreen.c
* Update skybox_and_splitscreen.h
* Modify Draw function to adjust crab visibility
Commented out code to prevent premature disappearance of the crab when the camera rotates.
* Update Crab.cpp
* Update Crab.h
* Update Crab.cpp
* Delete unused texture rendering functions
Removed unused functions related to texture rendering.
* Update render_objects.h
|
|
* menu_items: fix the real-bug-tier compiler warnings (#691 batch 1)
Six fixes, all in menu_items.c, all verified by menu playtest on macOS:
- BSWAP16(*color0++) advanced the pointer twice per pixel on little-endian
builds (the macro evaluates its argument twice) and mixed bytes from two
different pixels. Read first, increment separately. Note: this function
(func_8009A9FC) currently has no callers, so the corruption was latent,
not live.
- func_8009B9D0 fell off the end on a lookup miss, returning garbage (the
existing code comment already suspected this). The miss path now returns
the display list head unchanged, i.e. draws nothing.
- update_ok_menu_item read an uninitialized stack slot for unknown menu
item types; now selects an explicit no-animation value, matching what
the garbage read did in practice.
- pause_menu_item_box_cursor: removed the three empty 'if (x2);' matching
artifacts. The x/y/z spin state itself is untouched.
- func_800A1FB0: initialized var_s4/var_s5 against the guarded-but-warned
switch default.
- func_800A54EC: initialized the pause cursor position pointer against its
unreachable mode-switch default (would have been a null-deref class bug
if mode values ever grew).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* collision: define the G_ENDDL opcode shifts, return 0 when no tyre surface found
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* replays: cast staff-ghost pointer comparisons, return 0 for empty ghost buffer
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* update_objects: return 0 from conditional step helpers, fix TLUT pointer comparison, init train draw distances
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* render_player: remove the impossible lamp range (vanilla bug, never glowed on N64 either)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* math_util_2: return the vector, not the address of the parameter slot
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Crab: remove inner declaration shadowing the initialized objectIndex
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* editor: honor InverseMatrix failure (bool was compared against 2, always true)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Track.h: drop dead null checks on array members
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* shells: drop always-true angle and surface gates (behavior unchanged, s16 made them tautological)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* particles: make the no-return particle setters void
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* effects/stubs/skybox/main: align signatures with functions that return nothing
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* menus/save: type the pak status variable as s32, return BAD_READ on the fall-off path
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* audio: remove uninitialized-read matching artifacts, init isSound
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* code_80005FD0/code_80086E70: init dead bomb kart pointer and the no_init variable
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* port/engine UI: fix printf-style format types and non-literal format string
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* render_objects: feed the unused texture param to the uninitialized img walker
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Format the changed lines per .clang-format
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Address review: strip explanatory comments, drop vec3f pointer returns
Comments moved to the PR record; the one flagged worth keeping stays.
vec3f_set_xyz/normalize/cross_product return void now since the out
argument is the interface and nothing used the pointer.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Update actors_extended.c
* Add checkbox for 'Shells Shoot Straight' option
* Update render_player.c
* Update PortMenu.cpp
* Update render_player.c
* Update actors_extended.c
* Update render_player.c
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
|
|
* macOS: package the game as a proper SpaghettiKart.app bundle
Turns the bare Spaghettify executable into a self-contained SpaghettiKart.app:
- cmake/macos/apple_bundle.cmake: bundle metadata (using the existing
Info.plist, which already described a bundle), app icon, runtime resources
(config.yml, yamls, meta, spaghetti.o2r) into Contents/Resources, dylib
relinking for local Homebrew builds (no-op with static vcpkg deps), and
ad-hoc codesigning so the app launches without 'damaged app' warnings
- App icon: on Xcode 26+ the Icon Composer package (SpaghettiKartIcon.icon,
drawn from the existing HM ship-kart icon.png art) compiles with actool
into an Assets.car, giving the native Liquid Glass look on macOS 26+, plus
a flattened icns for older systems; older Xcode falls back to the previous
sips/iconutil flat icon. Supersedes the CreateOSXIcons target.
- Game.cpp: default SHIP_HOME to ~/Library/Application Support/SpaghettiKart
on macOS so first-run extraction, saves, config, and mods land there
instead of scattering into the user's home folder; a user-set SHIP_HOME
still wins
- Info.plist: NSHighResolutionCapable for proper Retina rendering
- CI: mac jobs now ship the .app (ditto zip so the executable bit survives
artifact upload)
- the yamls-next-to-exe copy is scoped to non-Darwin; on macOS those files
live in Contents/Resources instead
* macOS: ship prebuilt icon artifacts instead of compiling them at build time
Commits the compiled Assets.car (Liquid Glass icon for macOS 26+) and the
flattened SpaghettiKart.icns, both built from the in-repo Icon Composer
package. The build now just copies them into the bundle, which removes the
actool machinery and the Xcode 26 requirement entirely: every build on any
machine, including CI, gets the real icon.
Also adds a staleness guard: the artifacts carry a hash stamp of the
icon.png they were made from, and if icon.png ever changes without them
being regenerated, the build automatically generates a flat icns from the
current icon.png instead, so updating the logo never requires any macOS
work and an outdated icon can never ship. Regeneration steps are documented
in apple_bundle.cmake.
* Rename the icon layer to ship-kart-layer.png
Group 2.png was the design tool's default layer name; name it for what it
is. Verified the Icon Composer package still compiles with actool after the
rename; the committed Assets.car is unaffected (compiled, self-contained).
---------
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
|
|
|
|
* Fix garbage frame flash on cinematic camera cuts
Frame interpolation blended matrices across instant camera teleports in
attract/demo and post-race cameras, flashing 1-2 frames of sheared
geometry. Complete the existing camera-epoch mechanism: flag a cut in
func_80019890 when the camera moves >100 units, and have the
interpolator snap that frame to the new view instead of blending.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Retrigger CI (transient 502 downloading libogg from gitlab.xiph.org)
* Name the cinematic shot dispatcher
Review feedback on #720: func_80019890 -> camera_start_cinematic_shot.
It starts whichever shot D_80164680 has selected for a camera, dispatching
to the per-shot setup that teleports the camera to the shot's opening
position, which is why the cut detection lives there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Apply fix to freecam
Added FrameInterpolation_DontInterpolateCamera calls to improve camera behavior when changing target players.
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
|
|
The gradient quad's projection path does not preserve the outward
rounding of the Rect edge getters, which can leave the last window
column unpainted at some aspect ratios (visible as a black strip at the
screen edge that only sky sprites drew into). Overshoot the quad a few
virtual pixels past both edges; the excess clips at the window.
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
|
|
Pressing start on the splash screen in the last moments before the demo
timeout could play the enter chime and then drop into the demo reel with
no music: the attract timer (gMenuTimingCounter >= 0x12D) fired while the
press-start fade was in flight and overwrote gMenuFadeType to the demo
value, so the fade completed as a demo entry. Vanilla bug; roughly a
0.7-second window every attract cycle.
Only arm the demo when no fade is in flight. A natural timeout (idle, no
fade running) behaves exactly as before.
Play-verified: start pressed repeatedly around the timeout boundary always
lands in the main menu with music; the demo reel still plays when idle.
|
|
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>
|
|
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>
|
|
* 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
|
|
|
|
* Fix warnings regarding ambigious typings
* Revert struct Collision name change
|
|
* 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>
|
|
* 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>
|
|
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>
|
|
* 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
|
|
* 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
|
|
Co-authored-by: coco875 <59367621+coco875@users.noreply.github.com>
|
|
* 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>
|
|
|
|
* 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>
|
|
* 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>
|
|
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.
|
|
|
|
* Update render_objects.c
* Update render_objects.c
|
|
* Update actors.c
* Update actors.c
* Update SkyCloud.cpp
* Update render_objects.c
|
|
* Fix FI
* FI statue
* Intepr fixes
* Improve
* More interp
* Fix compile
* More interp
* Fix text
|
|
* Update render_player.c
* Update render.inc.c
* Update render.inc.c
* Fix kart interp
* Remove feature
* Fix error
|
|
|
|
* Fix editor loading and finishline duplication
* Update SceneManager.cpp
|
|
* 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
|
|
* Update World.h
* Update World.cpp
* Update Game.cpp
|
|
* Update SkyActor.h
* Update menu_items.c
|
|
* Update SkySnow.cpp
* Update SkySnow.cpp
|
|
* Update Game.cpp
* Add functions for various quit transitions
|
|
|
|
* 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
|
|
|
|
* Update Game.h
* Update Game.h
* Update macros.h
|
|
|
|
* Update BombKart.cpp
* Update BombKart.h
* Update PlayerBombKart.cpp
* Update Text.cpp
|
|
* Update render.inc.c
* FI improvements
* Rename
* Update PortMenu.cpp
|
|
* Added surround option.
* Added surround effect.
* Remove printf.
* fix.
---------
Co-authored-by: Lywx <kiritodev01@gmail.com>
|
|
* 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
|
|
|
|
* 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
|
|
* Update PortMenu.cpp
* Update menus.c
|
|
* Update render_player.c
* Refactor FrameInterpolation_RecordOpenChild calls
* Update GrandPrixBalloons.cpp
* Modify func_80053D74 to include an additional parameter
|
|
|