<feed xmlns='http://www.w3.org/2005/Atom'>
<title>SpaghettiKart/src/menus.c, branch Caladius-patch-1</title>
<subtitle>SpaghettiKart: Mario Kart 64 PC port</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/'/>
<entry>
<title>Mechanical compiler warning cleanup across the game C code (#691, 2 of 3) (#736)</title>
<updated>2026-09-16T13:26:27+00:00</updated>
<author>
<name>quarrel07</name>
<email>178681861+quarrel07@users.noreply.github.com</email>
</author>
<published>2026-09-16T13:26:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=8fb42e50d70356300050048b57def3123e6d4552'/>
<id>8fb42e50d70356300050048b57def3123e6d4552</id>
<content type='text'>
* spawn_players: cast player flag combinations to s16 explicitly

The PLAYER_* flag defines OR into values with bit 15 set; assigning
them to s16 fields wraps to the intended negative value. The casts make
that explicit (82 warnings, no behavior change).

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_objects: mechanical warning cleanup

uintptr_t casts for display list macro args, u8* casts for asset name
pointers, UNUSED on decomp-preserved dead locals and params, one loop
index sign fix. 75 warnings, no behavior change.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* update_objects: mechanical warning cleanup (42 warnings, casts and UNUSED)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menu_items: mechanical warning cleanup (50 warnings, casts and UNUSED)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* stubs, kart_dma: mechanical warning cleanup (43 warnings)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* code_80057C60, audio/external: mechanical warning cleanup (113 warnings)

Includes two decomp artifacts worth noting: a comma operator inside an
array index ([0, soundIndex] indexed only soundIndex) and a no-op for
init clause, both formerly needed for byte-matching.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* some_data, actors, code_8006E9C0, code_80005FD0, main, render_player, mixer, skybox, load: mechanical warning cleanup (111 warnings)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Remaining game C files: mechanical warning cleanup to zero

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Format the changed lines per .clang-format

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* ending: fix the bcopy shim reversing its arguments

The port shimmed bcopy to memcpy, but bcopy takes (src, dst) and memcpy
takes (dst, src), so every call through the shim copied backwards. The one
call site is the debug character switch in the ceremony cutscene, which is
meant to reset gCharacterIdByGPOverallRank to defaultCharacterIds. Instead
it overwrote the default table with the current standings, so the reset
never happened and the defaults were clobbered for later use.

Reachable only with gEnableDebugMode on and all D-pad plus C buttons held.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review: delete dead port helper, widen D_8015F718, comment out size lookup

get_texture2 was port-added and has no callers, so it goes away rather
than wearing the decomp UNUSED tag. D_8015F718 holds pointers, so it is
uintptr_t now. The kart_dma size lookup is commented out instead of
annotated.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menu_items: replace func_80097274 with the matched decomp version

Straight copy of the matched function; the NON_MATCHING guard and
GLOBAL_ASM fallback go away with it. The matched body also uses the
(u32) comparison forms, which keeps it warning-clean.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Update menu_items.c

* Address review round 2: audio loop form, cast collapse, dead code removal

func_800C3478 takes the while form; the (s8*)(u8*) stacks collapse to
one cast (40 sites); func_800BA8B0 and clamp32 go away (no callers);
gCourseOutlineTextures is const char* so its casts vanish; the podium
test line and render_screens matrix line are gone; set_screen keeps
its refactoring breadcrumbs commented out; the display-list walker is
reverted to the vanilla form as requested, which brings its one
shift-negative warning back; gCurrentlyLoadedTrackAddr defaults to 0.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review round 3: endianness.h byteswap, size_t indices, stub pragma

BSWAP16 now comes from libultraship's endianness.h on little-endian
targets, whose builtin returns u16 and needs no casts at the data.c
initializers. The intrinsic pragmas leave the repo. Actor and save
loops index with size_t instead of casting their bounds. stubs.c
silences unused parameters once for the file instead of tagging every
signature. spawn_player takes s32 and casts once inside, dropping 82
call-site casts. The item window arrays are const char* end to end,
race_begin_viewport loses its unused mode argument, mio0encode takes
uintptr_t, and the neon TLUT math is written in bytes.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* data.c: use BOMSWAP16_CONST in the static envelope initializer

MSVC's _byteswap_ushort is a function call, not a constant expression,
so the plain BSWAP16 broke every Windows build at this initializer.
The _CONST variant is the manual shift form on MSVC and the same
builtin everywhere else.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review round 4: single BSWAP16 home, mixer arg refactor, stragglers

effects.h includes macros.h instead of carrying its own BSWAP16 copy.
mixer.c drops its unused arguments and locals outright, with the ABI
macros absorbing the removed parameters the same way they already
absorb pkt. func_8028EC98 takes no argument, the fourth intrinsic
pragma leaves math_util_2.c, the backup checksum loop joins its
siblings on size_t, and two leftover casts and an UNUSED go away.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* ending: back out the debug-print cast for #745

The int-to-pointer warning it silenced returns until #745 reworks
this code.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* effects.h: drop the include annotation

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Retrigger CI after runner disconnect

* mixer: restore the Impl signatures and suppress the unused-parameter warning instead

* Clean up unused variables in code_80005FD0.c

Removed unused variables and assignments in CPU behaviour code.

* Remove unused camera variable from function

Remove unused camera variable in look_behind_toggle function.

* Update comment for bcopy and memcpy clarification

Clarified comment about bcopy and memcpy usage.

---------

Co-authored-by: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* spawn_players: cast player flag combinations to s16 explicitly

The PLAYER_* flag defines OR into values with bit 15 set; assigning
them to s16 fields wraps to the intended negative value. The casts make
that explicit (82 warnings, no behavior change).

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_objects: mechanical warning cleanup

uintptr_t casts for display list macro args, u8* casts for asset name
pointers, UNUSED on decomp-preserved dead locals and params, one loop
index sign fix. 75 warnings, no behavior change.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* update_objects: mechanical warning cleanup (42 warnings, casts and UNUSED)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menu_items: mechanical warning cleanup (50 warnings, casts and UNUSED)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* stubs, kart_dma: mechanical warning cleanup (43 warnings)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* code_80057C60, audio/external: mechanical warning cleanup (113 warnings)

Includes two decomp artifacts worth noting: a comma operator inside an
array index ([0, soundIndex] indexed only soundIndex) and a no-op for
init clause, both formerly needed for byte-matching.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* some_data, actors, code_8006E9C0, code_80005FD0, main, render_player, mixer, skybox, load: mechanical warning cleanup (111 warnings)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Remaining game C files: mechanical warning cleanup to zero

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Format the changed lines per .clang-format

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* ending: fix the bcopy shim reversing its arguments

The port shimmed bcopy to memcpy, but bcopy takes (src, dst) and memcpy
takes (dst, src), so every call through the shim copied backwards. The one
call site is the debug character switch in the ceremony cutscene, which is
meant to reset gCharacterIdByGPOverallRank to defaultCharacterIds. Instead
it overwrote the default table with the current standings, so the reset
never happened and the defaults were clobbered for later use.

Reachable only with gEnableDebugMode on and all D-pad plus C buttons held.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review: delete dead port helper, widen D_8015F718, comment out size lookup

get_texture2 was port-added and has no callers, so it goes away rather
than wearing the decomp UNUSED tag. D_8015F718 holds pointers, so it is
uintptr_t now. The kart_dma size lookup is commented out instead of
annotated.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menu_items: replace func_80097274 with the matched decomp version

Straight copy of the matched function; the NON_MATCHING guard and
GLOBAL_ASM fallback go away with it. The matched body also uses the
(u32) comparison forms, which keeps it warning-clean.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Update menu_items.c

* Address review round 2: audio loop form, cast collapse, dead code removal

func_800C3478 takes the while form; the (s8*)(u8*) stacks collapse to
one cast (40 sites); func_800BA8B0 and clamp32 go away (no callers);
gCourseOutlineTextures is const char* so its casts vanish; the podium
test line and render_screens matrix line are gone; set_screen keeps
its refactoring breadcrumbs commented out; the display-list walker is
reverted to the vanilla form as requested, which brings its one
shift-negative warning back; gCurrentlyLoadedTrackAddr defaults to 0.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review round 3: endianness.h byteswap, size_t indices, stub pragma

BSWAP16 now comes from libultraship's endianness.h on little-endian
targets, whose builtin returns u16 and needs no casts at the data.c
initializers. The intrinsic pragmas leave the repo. Actor and save
loops index with size_t instead of casting their bounds. stubs.c
silences unused parameters once for the file instead of tagging every
signature. spawn_player takes s32 and casts once inside, dropping 82
call-site casts. The item window arrays are const char* end to end,
race_begin_viewport loses its unused mode argument, mio0encode takes
uintptr_t, and the neon TLUT math is written in bytes.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* data.c: use BOMSWAP16_CONST in the static envelope initializer

MSVC's _byteswap_ushort is a function call, not a constant expression,
so the plain BSWAP16 broke every Windows build at this initializer.
The _CONST variant is the manual shift form on MSVC and the same
builtin everywhere else.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Address review round 4: single BSWAP16 home, mixer arg refactor, stragglers

effects.h includes macros.h instead of carrying its own BSWAP16 copy.
mixer.c drops its unused arguments and locals outright, with the ABI
macros absorbing the removed parameters the same way they already
absorb pkt. func_8028EC98 takes no argument, the fourth intrinsic
pragma leaves math_util_2.c, the backup checksum loop joins its
siblings on size_t, and two leftover casts and an UNUSED go away.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* ending: back out the debug-print cast for #745

The int-to-pointer warning it silenced returns until #745 reworks
this code.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* effects.h: drop the include annotation

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Retrigger CI after runner disconnect

* mixer: restore the Impl signatures and suppress the unused-parameter warning instead

* Clean up unused variables in code_80005FD0.c

Removed unused variables and assignments in CPU behaviour code.

* Remove unused camera variable from function

Remove unused camera variable in look_behind_toggle function.

* Update comment for bcopy and memcpy clarification

Clarified comment about bcopy and memcpy usage.

---------

Co-authored-by: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Fix the warning-flagged real bugs across the codebase (#691, 1 of 3) (#725)</title>
<updated>2026-08-02T04:29:56+00:00</updated>
<author>
<name>quarrel07</name>
<email>178681861+quarrel07@users.noreply.github.com</email>
</author>
<published>2026-08-02T04:29:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=8629bec3205b35b6f052a5f0a0164b8132ac1304'/>
<id>8629bec3205b35b6f052a5f0a0164b8132ac1304</id>
<content type='text'>
* 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 &lt;noreply@anthropic.com&gt;

* collision: define the G_ENDDL opcode shifts, return 0 when no tyre surface found

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* replays: cast staff-ghost pointer comparisons, return 0 for empty ghost buffer

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* update_objects: return 0 from conditional step helpers, fix TLUT pointer comparison, init train draw distances

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_player: remove the impossible lamp range (vanilla bug, never glowed on N64 either)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* math_util_2: return the vector, not the address of the parameter slot

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Crab: remove inner declaration shadowing the initialized objectIndex

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* editor: honor InverseMatrix failure (bool was compared against 2, always true)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Track.h: drop dead null checks on array members

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* shells: drop always-true angle and surface gates (behavior unchanged, s16 made them tautological)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* particles: make the no-return particle setters void

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* effects/stubs/skybox/main: align signatures with functions that return nothing

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menus/save: type the pak status variable as s32, return BAD_READ on the fall-off path

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* audio: remove uninitialized-read matching artifacts, init isSound

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* code_80005FD0/code_80086E70: init dead bomb kart pointer and the no_init variable

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* port/engine UI: fix printf-style format types and non-literal format string

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_objects: feed the unused texture param to the uninitialized img walker

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Format the changed lines per .clang-format

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* 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 &lt;noreply@anthropic.com&gt;

* 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 &lt;noreply@anthropic.com&gt;
Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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 &lt;noreply@anthropic.com&gt;

* collision: define the G_ENDDL opcode shifts, return 0 when no tyre surface found

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* replays: cast staff-ghost pointer comparisons, return 0 for empty ghost buffer

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* update_objects: return 0 from conditional step helpers, fix TLUT pointer comparison, init train draw distances

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_player: remove the impossible lamp range (vanilla bug, never glowed on N64 either)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* math_util_2: return the vector, not the address of the parameter slot

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Crab: remove inner declaration shadowing the initialized objectIndex

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* editor: honor InverseMatrix failure (bool was compared against 2, always true)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Track.h: drop dead null checks on array members

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* shells: drop always-true angle and surface gates (behavior unchanged, s16 made them tautological)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* particles: make the no-return particle setters void

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* effects/stubs/skybox/main: align signatures with functions that return nothing

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* menus/save: type the pak status variable as s32, return BAD_READ on the fall-off path

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* audio: remove uninitialized-read matching artifacts, init isSound

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* code_80005FD0/code_80086E70: init dead bomb kart pointer and the no_init variable

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* port/engine UI: fix printf-style format types and non-literal format string

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* render_objects: feed the unused texture param to the uninitialized img walker

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* Format the changed lines per .clang-format

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

* 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 &lt;noreply@anthropic.com&gt;

* 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 &lt;noreply@anthropic.com&gt;
Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor cmake (#721)</title>
<updated>2026-07-23T00:02:58+00:00</updated>
<author>
<name>coco875</name>
<email>59367621+coco875@users.noreply.github.com</email>
</author>
<published>2026-07-23T00:02:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=4c24ae2bc2294c96a81d296a68b6d404f34358e7'/>
<id>4c24ae2bc2294c96a81d296a68b6d404f34358e7</id>
<content type='text'>
* 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</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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</pre>
</div>
</content>
</entry>
<entry>
<title>Surround support (#642)</title>
<updated>2026-02-06T06:28:54+00:00</updated>
<author>
<name>tortugaveloz</name>
<email>danielcampora@outlook.es</email>
</author>
<published>2026-02-06T06:28:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=d7413601a664ea571baa5389e8de5a6f6a7e5620'/>
<id>d7413601a664ea571baa5389e8de5a6f6a7e5620</id>
<content type='text'>
* Added surround option.

* Added surround effect.

* Remove printf.

* fix.

---------

Co-authored-by: Lywx &lt;kiritodev01@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Added surround option.

* Added surround effect.

* Remove printf.

* fix.

---------

Co-authored-by: Lywx &lt;kiritodev01@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[Enhancement] Allow Non-unique Character Selections (#638)</title>
<updated>2026-02-05T00:19:05+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2026-02-05T00:19:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=2b9d689b2f3de534fbd1a93bcd61d7ce3366fc35'/>
<id>2b9d689b2f3de534fbd1a93bcd61d7ce3366fc35</id>
<content type='text'>
* Update PortMenu.cpp

* Update menus.c</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Update PortMenu.cpp

* Update menus.c</pre>
</div>
</content>
</entry>
<entry>
<title>Edit TrackInfo Properties (#594)</title>
<updated>2025-12-15T19:29:58+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2025-12-15T19:29:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=eb11374093b07bd968ccb955eecd06133db0ab74'/>
<id>eb11374093b07bd968ccb955eecd06133db0ab74</id>
<content type='text'>
* Fix finishline for toads turnpike in extra

* Fixed trash bin in extra

* Refactor fov

* Update scene.json

* Allow setting fog

* impl fog save &amp; load

* Fix modifying resourceName and rename editor namespace to trackeditor

* small change</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Fix finishline for toads turnpike in extra

* Fixed trash bin in extra

* Refactor fov

* Update scene.json

* Allow setting fog

* impl fog save &amp; load

* Fix modifying resourceName and rename editor namespace to trackeditor

* small change</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor Track Class To Instantiate On Track Load (#587)</title>
<updated>2025-12-13T18:50:28+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2025-12-13T18:50:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=b934e98fc34964970ab5efacb2fb7c3372ae0b1a'/>
<id>b934e98fc34964970ab5efacb2fb7c3372ae0b1a</id>
<content type='text'>
* Initial Commit

* First compilation of Registry template

* Further changes

* wip changes

* Impl TrackBrowser and Registry Info

* Remove const from TInfo

* Prep GetWorld

* Name refactor

* Refactor gWorldInstance to GetWorld()

* wip

* Should work now

* Data menu work again

* Fix editor staying open after program close

* Rename LoadLevel to LoadTrackDataFromJson

* More changes

* Add statue

* Add search to content browser using tags

* Fix statue pos and register tags

* Fix actor loading

* Fix delete all bug which deleted cameras

* reduce some boiler plate in actor and object

* Remove unused rulesets

* Search bar for all tabs

* fix data screen

* fix actor spawning

* temp editor fix

* Clean up

* improve extra mode transformation

* fix podium crash

* Fix editor clicking

* Fix editor clicking 2

* fix extra in custom track

* Fix FI for three actors

* Fix divide by zero error

* Ids managed by Registry

* Add scary comment

---------

Co-authored-by: MegaMech &lt;7255464+MegaMech@users.noreply.github.com&gt;
Co-authored-by: coco875 &lt;pereira.jannin@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Initial Commit

* First compilation of Registry template

* Further changes

* wip changes

* Impl TrackBrowser and Registry Info

* Remove const from TInfo

* Prep GetWorld

* Name refactor

* Refactor gWorldInstance to GetWorld()

* wip

* Should work now

* Data menu work again

* Fix editor staying open after program close

* Rename LoadLevel to LoadTrackDataFromJson

* More changes

* Add statue

* Add search to content browser using tags

* Fix statue pos and register tags

* Fix actor loading

* Fix delete all bug which deleted cameras

* reduce some boiler plate in actor and object

* Remove unused rulesets

* Search bar for all tabs

* fix data screen

* fix actor spawning

* temp editor fix

* Clean up

* improve extra mode transformation

* fix podium crash

* Fix editor clicking

* Fix editor clicking 2

* fix extra in custom track

* Fix FI for three actors

* Fix divide by zero error

* Ids managed by Registry

* Add scary comment

---------

Co-authored-by: MegaMech &lt;7255464+MegaMech@users.noreply.github.com&gt;
Co-authored-by: coco875 &lt;pereira.jannin@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Name ScreenContext, Refactor Course class to Track (#583)</title>
<updated>2025-12-08T04:00:06+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2025-12-08T04:00:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=dbae0c3aca33a022e8c1d511fe521407375057b2'/>
<id>dbae0c3aca33a022e8c1d511fe521407375057b2</id>
<content type='text'>
* Rename Screen Contexts

* typedef ScreenContext struct

* Fix Compile

* Rename Course.cpp to Track.cpp

* Refactor Course to Track

* A few renames

* General Cleanup

* More Rename

* More names

* Move TrackSections struct to Track.h

---------

Co-authored-by: MegaMech &lt;7255464+MegaMech@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Rename Screen Contexts

* typedef ScreenContext struct

* Fix Compile

* Rename Course.cpp to Track.cpp

* Refactor Course to Track

* A few renames

* General Cleanup

* More Rename

* More names

* Move TrackSections struct to Track.h

---------

Co-authored-by: MegaMech &lt;7255464+MegaMech@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor yaml and remove segment (#531)</title>
<updated>2025-12-07T14:34:53+00:00</updated>
<author>
<name>coco875</name>
<email>59367621+coco875@users.noreply.github.com</email>
</author>
<published>2025-12-07T14:34:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=02ad54ca72f5baf4614cb9b7c30f8dd780764d90'/>
<id>02ad54ca72f5baf4614cb9b7c30f8dd780764d90</id>
<content type='text'>
* move yaml (still need to fix header path)

* fix header

* change kart to karts and add migration

* fix include

* Update migration.py

* fix common_texture_debug_font extraction

* Update torch

* update torch and header

* unduplicate texture for tumble

* Update torch

* Update migration.py

* put the sort by default

* fix replace_segmented_textures_with_o2r_textures

* Update torch

* fix yamls

* add manual_segments in data of course

* comment out replace_segmented_textures_with_o2r_textures and segment 3

* remove segment 5

* (wip) remove segment 6

still plenty of thing to do

* more vtx

* more change

* Update torch

* small fix

* Update BansheeBoardwalk.cpp

* fix blockFort

* Delete test.yaml

* fix bowser castle and simplify track sections

* fix choco mountain

* clean banshee

* fix dk jungle

* fix double deck

* fix macos

* fix error

* fix macos ci

* Update torch

* Update torch

* fix frappe snowland

* fix kalimari desert

* fix koopa troopa beach

* fix luigi raceway

* fix mario raceway and simplify thing

* fix moo moo farm

* fix rainbow road

* Update torch

* Update torch

* hopefully fix windows error

* fix a small error

* fix royal raceway (and podium in theory)

* fix sherbet_land

* fix skyscraper

* fix toads turnpike

* fix wario stadium

* fix yoshi valley

* update torch

* more clang tidy rules

* REMOVE totally SEGMENT (sorry for the PR)

* remove unused field in course and props and unused packed asset

* fix kart texture

* fix particle

* fix track section and transparency

* try fix mode extra

* fix macos build and render

* fix collision in extra

* small change and try fix windows error

* a little of clean

* more cleanup

* forget header and more clean up

* Update Makefile

* fix credits

* fix kart texture offset

* remove LoadTextures and add Unload

* fix definitevely mirror mode

* add unload but it's not perfect

* revert a bad fix

* clean no longer used python script

* fix crash with player

* being able to load the same course twice

* add a comment on DrawWater

* fix render of transparent object

* better hack

* add a proper migration instruction

* fix number

* add basic modsmanager

* add meta/mods.toml

* Update EditorMath.h

* Update ModsManager.cpp

* basic modManager (maybe I should rename it ModLoader)

* use range on dependencies

* add information about mods.toml

* fix coment

* some rename around

* Delete beta-to-v1.md

* Update migrations.md

* Update textures-pack.md

* Update modding.md

* Update modding.md

* clean yamls_old

* move to mods in engine

* rename ModsManger to  ModManager

* move init and unload at the top

* rename ModsMetadata to ModMetadata

* fix header

* Update ModManager.cpp

* put core mods at top</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* move yaml (still need to fix header path)

* fix header

* change kart to karts and add migration

* fix include

* Update migration.py

* fix common_texture_debug_font extraction

* Update torch

* update torch and header

* unduplicate texture for tumble

* Update torch

* Update migration.py

* put the sort by default

* fix replace_segmented_textures_with_o2r_textures

* Update torch

* fix yamls

* add manual_segments in data of course

* comment out replace_segmented_textures_with_o2r_textures and segment 3

* remove segment 5

* (wip) remove segment 6

still plenty of thing to do

* more vtx

* more change

* Update torch

* small fix

* Update BansheeBoardwalk.cpp

* fix blockFort

* Delete test.yaml

* fix bowser castle and simplify track sections

* fix choco mountain

* clean banshee

* fix dk jungle

* fix double deck

* fix macos

* fix error

* fix macos ci

* Update torch

* Update torch

* fix frappe snowland

* fix kalimari desert

* fix koopa troopa beach

* fix luigi raceway

* fix mario raceway and simplify thing

* fix moo moo farm

* fix rainbow road

* Update torch

* Update torch

* hopefully fix windows error

* fix a small error

* fix royal raceway (and podium in theory)

* fix sherbet_land

* fix skyscraper

* fix toads turnpike

* fix wario stadium

* fix yoshi valley

* update torch

* more clang tidy rules

* REMOVE totally SEGMENT (sorry for the PR)

* remove unused field in course and props and unused packed asset

* fix kart texture

* fix particle

* fix track section and transparency

* try fix mode extra

* fix macos build and render

* fix collision in extra

* small change and try fix windows error

* a little of clean

* more cleanup

* forget header and more clean up

* Update Makefile

* fix credits

* fix kart texture offset

* remove LoadTextures and add Unload

* fix definitevely mirror mode

* add unload but it's not perfect

* revert a bad fix

* clean no longer used python script

* fix crash with player

* being able to load the same course twice

* add a comment on DrawWater

* fix render of transparent object

* better hack

* add a proper migration instruction

* fix number

* add basic modsmanager

* add meta/mods.toml

* Update EditorMath.h

* Update ModsManager.cpp

* basic modManager (maybe I should rename it ModLoader)

* use range on dependencies

* add information about mods.toml

* fix coment

* some rename around

* Delete beta-to-v1.md

* Update migrations.md

* Update textures-pack.md

* Update modding.md

* Update modding.md

* clean yamls_old

* move to mods in engine

* rename ModsManger to  ModManager

* move init and unload at the top

* rename ModsMetadata to ModMetadata

* fix header

* Update ModManager.cpp

* put core mods at top</pre>
</div>
</content>
</entry>
<entry>
<title>Fix #400 and divide by zero (#454)</title>
<updated>2025-07-19T22:59:21+00:00</updated>
<author>
<name>Dave Demers</name>
<email>56704919+Producks@users.noreply.github.com</email>
</author>
<published>2025-07-19T22:59:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=d62d4bb90050ee195ef10996bd702b770c519eb1'/>
<id>d62d4bb90050ee195ef10996bd702b770c519eb1</id>
<content type='text'>
* Divide by zero fix &amp; cup restart behavior fix

* CI Test

* Fix a divide by zero bug. Fix for cups when using the reset button

* Added defines, renamed function

---------

Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Divide by zero fix &amp; cup restart behavior fix

* CI Test

* Fix a divide by zero bug. Fix for cups when using the reset button

* Added defines, renamed function

---------

Co-authored-by: MegaMech &lt;MegaMech@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
</feed>
