<feed xmlns='http://www.w3.org/2005/Atom'>
<title>SpaghettiKart/src/port/ui/PortMenu.cpp, branch main</title>
<subtitle>SpaghettiKart: Mario Kart 64 PC port</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/'/>
<entry>
<title>Switch LUS to port-maintenance branch (#727)</title>
<updated>2026-08-02T05:22:35+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2026-08-02T05:22:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=33817cd1100ab560b16e19af34488de3b5a6b7eb'/>
<id>33817cd1100ab560b16e19af34488de3b5a6b7eb</id>
<content type='text'>
* lus update  compiles but not run

* Game runs, fix demo bug

* Switch lus to port-maintenance branch</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lus update  compiles but not run

* Game runs, fix demo bug

* Switch lus to port-maintenance branch</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>Fix Switch build (#705)</title>
<updated>2026-06-10T21:42:07+00:00</updated>
<author>
<name>Tim Schneeberger</name>
<email>tim.schneeberger@outlook.de</email>
</author>
<published>2026-06-10T21:42:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=458613f2d94a969c9920dfc12ed57acfca7e5916'/>
<id>458613f2d94a969c9920dfc12ed57acfca7e5916</id>
<content type='text'>
* 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</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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</pre>
</div>
</content>
</entry>
<entry>
<title>Fix switch and windows CI (#700)</title>
<updated>2026-05-04T18:00:43+00:00</updated>
<author>
<name>coco875</name>
<email>59367621+coco875@users.noreply.github.com</email>
</author>
<published>2026-05-04T18:00:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=efdaf9d8fdc99f79527220617ba0004fb882aad3'/>
<id>efdaf9d8fdc99f79527220617ba0004fb882aad3</id>
<content type='text'>
* 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</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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</pre>
</div>
</content>
</entry>
<entry>
<title>Allowing user-set internal resolution in menu (#682)</title>
<updated>2026-03-29T19:34:19+00:00</updated>
<author>
<name>EJStaats</name>
<email>ejstaats@hotmail.com</email>
</author>
<published>2026-03-29T19:34:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=7dba3c3c810015ca75af1891e919bd3724208836'/>
<id>7dba3c3c810015ca75af1891e919bd3724208836</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Impl Sky and SkyActors (#630)</title>
<updated>2026-02-24T21:51:25+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2026-02-24T21:51:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=548ccf0063f6c4d6608cf87f46a347c71079c0bd'/>
<id>548ccf0063f6c4d6608cf87f46a347c71079c0bd</id>
<content type='text'>
* 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</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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</pre>
</div>
</content>
</entry>
<entry>
<title>More Interp and Draw Visibility Options (#643)</title>
<updated>2026-02-07T04:05:41+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2026-02-07T04:05:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=26b2ce90e7eec71b7535ae1189219102835a36b8'/>
<id>26b2ce90e7eec71b7535ae1189219102835a36b8</id>
<content type='text'>
* Update render.inc.c

* FI improvements

* Rename

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

* FI improvements

* Rename

* Update PortMenu.cpp</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>Refactor Track to CustomTrack Class, impl render layers (#606)</title>
<updated>2025-12-29T22:51:12+00:00</updated>
<author>
<name>MegaMech</name>
<email>MegaMech@users.noreply.github.com</email>
</author>
<published>2025-12-29T22:51:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/SpaghettiKart/commit/?id=81d200e74b6fc245424d13631836e7d1c77ba953'/>
<id>81d200e74b6fc245424d13631836e7d1c77ba953</id>
<content type='text'>
* 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 &lt;7255464+MegaMech@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 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 &lt;7255464+MegaMech@users.noreply.github.com&gt;</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>
</feed>
