diff --git a/.gitignore b/.gitignore index 1f82abb2c..b291aef13 100755 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ *.out *.app *.hex +*.otr # Debug files *.dSYM/ @@ -55,7 +56,7 @@ xml/* # Torch include/assets/* -tools/torch/* +torch/* debug/* /debug/* diff --git a/.gitmodules b/.gitmodules index db5197931..21e63815c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,9 +10,9 @@ [submodule "doxygen-awesome-css"] path = doxygen-awesome-css url = https://github.com/jothepro/doxygen-awesome-css.git -[submodule "tools/torch"] - path = tools/torch - url = https://github.com/HarbourMasters/torch +[submodule "torch"] + path = torch + url = https://github.com/HarbourMasters/Torch [submodule "libultraship"] path = libultraship - url = https://github.com/KiritoDv/libultraship/ + url = https://github.com/Kenix3/libultraship diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e3ec7590..34c3f8e13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -538,3 +538,21 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") ) endif() endif() + +include(ExternalProject) +ExternalProject_Add(Torch + SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch +) + +ExternalProject_Get_Property(Torch install_dir) +set(TORCH_EXECUTABLE ${install_dir}/torch/build/x64/Debug/torch) + +add_custom_target( + ExtractAssets + DEPENDS Torch + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMAND ${TORCH_EXECUTABLE} pack assets ship.otr + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.otr" "${CMAKE_BINARY_DIR}/spaghetti.otr" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/ship.otr" "${CMAKE_BINARY_DIR}/ship.otr" +) diff --git a/assets/fonts/Fipps-Regular.otf b/assets/fonts/Fipps-Regular.otf new file mode 100644 index 000000000..9334dad59 Binary files /dev/null and b/assets/fonts/Fipps-Regular.otf differ diff --git a/assets/fonts/PressStart2P-Regular.ttf b/assets/fonts/PressStart2P-Regular.ttf new file mode 100644 index 000000000..2442affbf Binary files /dev/null and b/assets/fonts/PressStart2P-Regular.ttf differ diff --git a/assets/textures/buttons/ABtn.png b/assets/textures/buttons/ABtn.png new file mode 100644 index 000000000..c1b06571c Binary files /dev/null and b/assets/textures/buttons/ABtn.png differ diff --git a/assets/textures/buttons/BBtn.png b/assets/textures/buttons/BBtn.png new file mode 100644 index 000000000..99b1197c9 Binary files /dev/null and b/assets/textures/buttons/BBtn.png differ diff --git a/assets/textures/buttons/CDown.png b/assets/textures/buttons/CDown.png new file mode 100644 index 000000000..741188eaf Binary files /dev/null and b/assets/textures/buttons/CDown.png differ diff --git a/assets/textures/buttons/CLeft.png b/assets/textures/buttons/CLeft.png new file mode 100644 index 000000000..5e26a2067 Binary files /dev/null and b/assets/textures/buttons/CLeft.png differ diff --git a/assets/textures/buttons/CRight.png b/assets/textures/buttons/CRight.png new file mode 100644 index 000000000..9e6180639 Binary files /dev/null and b/assets/textures/buttons/CRight.png differ diff --git a/assets/textures/buttons/CUp.png b/assets/textures/buttons/CUp.png new file mode 100644 index 000000000..6c0e29d2d Binary files /dev/null and b/assets/textures/buttons/CUp.png differ diff --git a/assets/textures/buttons/LBtn.png b/assets/textures/buttons/LBtn.png new file mode 100644 index 000000000..2e0a8f00c Binary files /dev/null and b/assets/textures/buttons/LBtn.png differ diff --git a/assets/textures/buttons/RBtn.png b/assets/textures/buttons/RBtn.png new file mode 100644 index 000000000..c255643c3 Binary files /dev/null and b/assets/textures/buttons/RBtn.png differ diff --git a/assets/textures/buttons/StartBtn.png b/assets/textures/buttons/StartBtn.png new file mode 100644 index 000000000..c3e08dc36 Binary files /dev/null and b/assets/textures/buttons/StartBtn.png differ diff --git a/assets/textures/buttons/ZBtn.png b/assets/textures/buttons/ZBtn.png new file mode 100644 index 000000000..def8d9a6d Binary files /dev/null and b/assets/textures/buttons/ZBtn.png differ diff --git a/assets/textures/icons/gIcon.png b/assets/textures/icons/gIcon.png new file mode 100644 index 000000000..4cad9d484 Binary files /dev/null and b/assets/textures/icons/gIcon.png differ diff --git a/assets/textures/virtual/gEmptyTexture.rgba32.png b/assets/textures/virtual/gEmptyTexture.rgba32.png new file mode 100644 index 000000000..eaf806b71 Binary files /dev/null and b/assets/textures/virtual/gEmptyTexture.rgba32.png differ diff --git a/config.yml b/config.yml index 95a02a85a..3acb82f53 100644 --- a/config.yml +++ b/config.yml @@ -7,7 +7,7 @@ enums: - include/defines.h output: - binary: mkcube.otr + binary: spaghetti.otr headers: include/assets code: assets/code metadata: [yamls/courses] diff --git a/course_metadata/D_0D009418.inc.c b/course_metadata/D_0D009418.inc.c new file mode 100644 index 000000000..a0ae21c2d --- /dev/null +++ b/course_metadata/D_0D009418.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// choco mountain +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// bowser's castle +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// banshee boardwalk +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// yoshi valley +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// frappe snowland +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// koopa troopa beach +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// royal raceway +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// luigi raceway +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// moo moo farm +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// toad's turnpike +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// kalimari desert +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// sherbet land +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// rainbow road +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// wario stadium +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// block fort +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// skyscraper +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// double deck +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// d.k.'s jungle parkway +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// big donut +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// null +{ 0.0f, 0.0f, 0.0f, 0.0f, }, diff --git a/course_metadata/D_0D009568.inc.c b/course_metadata/D_0D009568.inc.c new file mode 100644 index 000000000..fce16e656 --- /dev/null +++ b/course_metadata/D_0D009568.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// choco mountain +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// bowser's castle +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// banshee boardwalk +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// yoshi valley +{ 3.75f, 4.5833334f, 4.5833334f, 4.5833334f, }, +// frappe snowland +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// koopa troopa beach +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// royal raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// luigi raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// moo moo farm +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// toad's turnpike +{ 4.1666665f, 5.5833334f, 6.1666665f, 6.75f, }, +// kalimari desert +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// sherbet land +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// rainbow road +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// wario stadium +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// block fort +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// skyscraper +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// double deck +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// d.k.'s jungle parkway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// big donut +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// null +{ 0.0f, 0.0f, 0.0f, 0.0f, }, diff --git a/course_metadata/D_0D0096B8.inc.c b/course_metadata/D_0D0096B8.inc.c new file mode 100644 index 000000000..245692aed --- /dev/null +++ b/course_metadata/D_0D0096B8.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// choco mountain +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// bowser's castle +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// banshee boardwalk +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// yoshi valley +{ 3.3333332f, 3.3333332f, 3.3333332f, 3.3333332f, }, +// frappe snowland +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// koopa troopa beach +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// royal raceway +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// luigi raceway +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// moo moo farm +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// toad's turnpike +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// kalimari desert +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// sherbet land +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// rainbow road +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// wario stadium +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// block fort +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// skyscraper +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// double deck +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// d.k.'s jungle parkway +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// big donut +{ 3.3333332f, 3.9166667f, 4.5f, 5.0833334f, }, +// null +{ 0.0f, 0.0f, 0.0f, 0.0f, }, diff --git a/course_metadata/D_0D009808.inc.c b/course_metadata/D_0D009808.inc.c new file mode 100644 index 000000000..c59052865 --- /dev/null +++ b/course_metadata/D_0D009808.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// choco mountain +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// bowser's castle +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// banshee boardwalk +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// yoshi valley +{ 2.9166667f, 3.75f, 3.75f, 3.75f, }, +// frappe snowland +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// koopa troopa beach +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// royal raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// luigi raceway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// moo moo farm +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// toad's turnpike +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// kalimari desert +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// sherbet land +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// rainbow road +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// wario stadium +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// block fort +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// skyscraper +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// double deck +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// d.k.'s jungle parkway +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// big donut +{ 3.75f, 5.1666665f, 5.75f, 6.3333334f, }, +// null +{ 0.0f, 0.0f, 0.0f, 0.0f, }, diff --git a/course_metadata/D_800DCBB4.inc.c b/course_metadata/D_800DCBB4.inc.c new file mode 100644 index 000000000..9b75619ba --- /dev/null +++ b/course_metadata/D_800DCBB4.inc.c @@ -0,0 +1 @@ +D_800DCB34, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4, diff --git a/course_metadata/gBombKartSpawns.inc.c b/course_metadata/gBombKartSpawns.inc.c new file mode 100644 index 000000000..8bdbdc281 --- /dev/null +++ b/course_metadata/gBombKartSpawns.inc.c @@ -0,0 +1,189 @@ +{ // mario raceway +{ 40, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 3, 0.8333333, 0, 0, 0, 0 }, +{ 265, 3, 0.8333333, 0, 0, 0, 0 }, +{ 285, 1, 0.8333333, 0, 0, 0, 0 }, +{ 420, 1, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // choco mountain +{ 140, 3, 0.8333333, 0, 0, 0, 0 }, +{ 165, 1, 0.8333333, 0, 0, 0, 0 }, +{ 330, 3, 0.8333333, 0, 0, 0, 0 }, +{ 550, 1, 0.8333333, 0, 0, 0, 0 }, +{ 595, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // bowser's castle +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 150, 1, 0.8333333, 0, 0, 0, 0 }, +{ 200, 3, 0.8333333, 0, 0, 0, 0 }, +{ 260, 1, 0.8333333, 0, 0, 0, 0 }, +{ 435, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // banshee boardwalk +{ 110, 3, 0.8333333, 0, 0, 0, 0 }, +{ 190, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 475, 1, 0.8333333, 0, 0, 0, 0 }, +{ 610, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // yoshi valley +{ 0, 0, 0.8333333, -1533, -682, -103, 0 }, +{ 10, 0, 0.8333333, -1565, -619, -109, 0 }, +{ 20, 0, 0.8333333, -1529, -579, -109, 0 }, +{ 30, 0, 0.8333333, -1588, -534, -106, 0 }, +{ 40, 0, 0.8333333, -1598, -207, -105, 0 }, +{ 50, 0, 0.8333333, -1646, -147, -93, 0 }, +{ 60, 0, 0.8333333, -2532, -445, -90, 0 }, +}, +{ // frappe snowland +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 290, 1, 0.8333333, 0, 0, 0, 0 }, +{ 350, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // koopa troopa beach +{ 60, 1, 0.8333333, 0, 0, 0, 0 }, +{ 120, 1, 0.8333333, 0, 0, 0, 0 }, +{ 200, 3, 0.8333333, 0, 0, 0, 0 }, +{ 280, 1, 0.8333333, 0, 0, 0, 0 }, +{ 435, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // royal raceway +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 3, 0.8333333, 0, 0, 0, 0 }, +{ 296, 3, 0.8333333, 0, 0, 0, 0 }, +{ 400, 1, 0.8333333, 0, 0, 0, 0 }, +{ 746, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // luigi raceway +{ 50, 1, 0.8333333, 0, 0, 0, 0 }, +{ 200, 3, 0.8333333, 0, 0, 0, 0 }, +{ 305, 1, 0.8333333, 0, 0, 0, 0 }, +{ 440, 3, 0.8333333, 0, 0, 0, 0 }, +{ 515, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // moo moo farm +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 140, 3, 0.8333333, 0, 0, 0, 0 }, +{ 225, 3, 0.8333333, 0, 0, 0, 0 }, +{ 316, 3, 0.8333333, 0, 0, 0, 0 }, +{ 434, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // toad's turnpike +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 200, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // kalimari desert +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 138, 1, 0.8333333, 0, 0, 0, 0 }, +{ 280, 3, 0.8333333, 0, 0, 0, 0 }, +{ 404, 1, 0.8333333, 0, 0, 0, 0 }, +{ 510, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // sherbet land +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 200, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // rainbow road +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 200, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // wario stadium +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 200, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // block fort +{ 20, 0, 1.0, 0, 0, 0, 0 }, +{ 40, 0, 1.0, 0, 0, 0, 0 }, +{ 60, 0, 1.0, 0, 0, 0, 0 }, +{ 80, 0, 1.0, 0, 0, 0, 0 }, +{ 100, 0, 1.0, 0, 0, 0, 0 }, +{ 120, 0, 1.0, 0, 0, 0, 0 }, +{ 140, 0, 1.0, 0, 0, 0, 0 }, +}, +{ // skyscraper +{ 20, 0, 1.0, 0, 0, 0, 0 }, +{ 40, 0, 1.0, 0, 0, 0, 0 }, +{ 60, 0, 1.0, 0, 0, 0, 0 }, +{ 80, 0, 1.0, 0, 0, 0, 0 }, +{ 100, 0, 1.0, 0, 0, 0, 0 }, +{ 120, 0, 1.0, 0, 0, 0, 0 }, +{ 140, 0, 1.0, 0, 0, 0, 0 }, +}, +{ // double deck +{ 20, 0, 1.0, 0, 0, 0, 0 }, +{ 40, 0, 1.0, 0, 0, 0, 0 }, +{ 60, 0, 1.0, 0, 0, 0, 0 }, +{ 80, 0, 1.0, 0, 0, 0, 0 }, +{ 100, 0, 1.0, 0, 0, 0, 0 }, +{ 120, 0, 1.0, 0, 0, 0, 0 }, +{ 140, 0, 1.0, 0, 0, 0, 0 }, +}, +{ // d.k.'s jungle parkway +{ 50, 3, 0.8333333, 0, 0, 0, 0 }, +{ 100, 1, 0.8333333, 0, 0, 0, 0 }, +{ 150, 3, 0.8333333, 0, 0, 0, 0 }, +{ 190, 1, 0.8333333, 0, 0, 0, 0 }, +{ 250, 3, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +{ 0, 0, 0.8333333, 0, 0, 0, 0 }, +}, +{ // big donut +{ 20, 0, 1.0, 0, 0, 0, 0 }, +{ 40, 0, 1.0, 0, 0, 0, 0 }, +{ 60, 0, 1.0, 0, 0, 0, 0 }, +{ 80, 0, 1.0, 0, 0, 0, 0 }, +{ 100, 0, 1.0, 0, 0, 0, 0 }, +{ 120, 0, 1.0, 0, 0, 0, 0 }, +{ 140, 0, 1.0, 0, 0, 0, 0 }, +}, +{ // null +{ 3, 5, 1.25, 0, 0, 0, 0 }, +{ 40, 0, 1.0, 0, 0, 0, 0 }, +{ 60, 0, 1.0, 0, 0, 0, 0 }, +{ 80, 0, 1.0, 0, 0, 0, 0 }, +{ 100, 0, 1.0, 0, 0, 0, 0 }, +{ 120, 0, 1.0, 0, 0, 0, 0 }, +{ 140, 0, 1.0, 0, 0, 0, 0 }, +}, diff --git a/course_metadata/gCPUSteeringSensitivity.inc.c b/course_metadata/gCPUSteeringSensitivity.inc.c new file mode 100644 index 000000000..c6884ab3c --- /dev/null +++ b/course_metadata/gCPUSteeringSensitivity.inc.c @@ -0,0 +1 @@ +48, 53, 53, 53, 53, 53, 53, 53, 48, 48, 40, 53, 53, 38, 53, 53, 53, 53, 53, 40, 53, 0 diff --git a/course_metadata/gCourseDebugNames.inc.c b/course_metadata/gCourseDebugNames.inc.c new file mode 100644 index 000000000..323a07a80 --- /dev/null +++ b/course_metadata/gCourseDebugNames.inc.c @@ -0,0 +1 @@ +"m circuit", "mountain", "castle", "ghost", "maze", "snow", "beach", "p circuit", "l circuit", "farm", "highway", "desert", "sherbet", "rainbow", "stadium", "block", "skyscraper", "deck", "jungle", "doughnut", diff --git a/course_metadata/gCourseNames.inc.c b/course_metadata/gCourseNames.inc.c new file mode 100644 index 000000000..07ce99762 --- /dev/null +++ b/course_metadata/gCourseNames.inc.c @@ -0,0 +1 @@ +"mario raceway", "choco mountain", "bowser's castle", "banshee boardwalk", "yoshi valley", "frappe snowland", "koopa troopa beach", "royal raceway", "luigi raceway", "moo moo farm", "toad's turnpike", "kalimari desert", "sherbet land", "rainbow road", "wario stadium", "block fort", "skyscraper", "double deck", "d.k.'s jungle parkway", "big donut", diff --git a/course_metadata/gCoursePathSizes.inc.c b/course_metadata/gCoursePathSizes.inc.c new file mode 100644 index 000000000..92bdc9fb8 --- /dev/null +++ b/course_metadata/gCoursePathSizes.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 600, 1, 1, 1, 1, {0, 0, 0}}, +// choco mountain +{ 700, 1, 1, 1, 1, {0, 0, 0}}, +// bowser's castle +{ 780, 1, 1, 1, 1, {0, 0, 0}}, +// banshee boardwalk +{ 750, 1, 1, 1, 1, {0, 0, 0}}, +// yoshi valley +{ 690, 680, 690, 800, 1, {0, 0, 0}}, +// frappe snowland +{ 750, 1, 1, 1, 1, {0, 0, 0}}, +// koopa troopa beach +{ 700, 1, 1, 1, 1, {0, 0, 0}}, +// royal raceway +{ 1000, 1, 1, 1, 1, {0, 0, 0}}, +// luigi raceway +{ 730, 1, 1, 1, 1, {0, 0, 0}}, +// moo moo farm +{ 560, 1, 1, 1, 1, {0, 0, 0}}, +// toad's turnpike +{ 1000, 1, 1, 1, 1, {0, 0, 0}}, +// kalimari desert +{ 700, 1, 1, 1, 550, {0, 0, 0}}, +// sherbet land +{ 700, 1, 1, 1, 1, {0, 0, 0}}, +// rainbow road +{ 1900, 1, 1, 1, 1, {0, 0, 0}}, +// wario stadium +{ 1600, 1, 1, 1, 1, {0, 0, 0}}, +// block fort +{ 1, 1, 1, 1, 1, {0, 0, 0}}, +// skyscraper +{ 1, 1, 1, 1, 1, {0, 0, 0}}, +// double deck +{ 1, 1, 1, 1, 1, {0, 0, 0}}, +// d.k.'s jungle parkway +{ 880, 1, 1, 1, 500, {0, 0, 0}}, +// big donut +{ 1, 1, 1, 1, 1, {0, 0, 0}}, +// null +{ 500, 500, 500, 500, 1, {0, 0, 0}}, diff --git a/course_metadata/gCoursePathTable.inc.c b/course_metadata/gCoursePathTable.inc.c new file mode 100644 index 000000000..9a2ace1e8 --- /dev/null +++ b/course_metadata/gCoursePathTable.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ d_course_mario_raceway_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// choco mountain +{ d_course_choco_mountain_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// bowser's castle +{ d_course_bowsers_castle_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// banshee boardwalk +{ d_course_banshee_boardwalk_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// yoshi valley +{ d_course_yoshi_valley_track_waypoints, d_course_yoshi_valley_track_waypoints_2, d_course_yoshi_valley_track_waypoints_3, d_course_yoshi_valley_track_waypoints_4, }, +// frappe snowland +{ d_course_frappe_snowland_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// koopa troopa beach +{ d_course_koopa_troopa_beach_track_waypoints, d_course_koopa_troopa_beach_track_waypoints_2, &nullPath, &nullPath, }, +// royal raceway +{ d_course_royal_raceway_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// luigi raceway +{ d_course_luigi_raceway_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// moo moo farm +{ d_course_moo_moo_farm_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// toad's turnpike +{ d_course_toads_turnpike_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// kalimari desert +{ d_course_kalimari_desert_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// sherbet land +{ d_course_sherbet_land_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// rainbow road +{ d_course_rainbow_road_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// wario stadium +{ d_course_wario_stadium_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// block fort +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// skyscraper +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// double deck +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// d.k.'s jungle parkway +{ d_course_dks_jungle_parkway_track_waypoints, &nullPath, &nullPath, &nullPath, }, +// big donut +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// null +{ &nullPath, &nullPath, &nullPath, &nullPath, }, diff --git a/course_metadata/gCoursePathTableUnknown.inc.c b/course_metadata/gCoursePathTableUnknown.inc.c new file mode 100644 index 000000000..7a643cb29 --- /dev/null +++ b/course_metadata/gCoursePathTableUnknown.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ d_course_mario_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// choco mountain +{ d_course_choco_mountain_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// bowser's castle +{ d_course_bowsers_castle_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// banshee boardwalk +{ d_course_banshee_boardwalk_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// yoshi valley +{ d_course_yoshi_valley_unknown_waypoints, d_course_yoshi_valley_unknown_waypoints_2, d_course_yoshi_valley_unknown_waypoints_3, d_course_yoshi_valley_unknown_waypoints_4, }, +// frappe snowland +{ d_course_frappe_snowland_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// koopa troopa beach +{ d_course_koopa_troopa_beach_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// royal raceway +{ d_course_royal_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// luigi raceway +{ d_course_luigi_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// moo moo farm +{ d_course_moo_moo_farm_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// toad's turnpike +{ d_course_toads_turnpike_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// kalimari desert +{ d_course_kalimari_desert_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// sherbet land +{ d_course_sherbet_land_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// rainbow road +{ d_course_rainbow_road_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// wario stadium +{ d_course_wario_stadium_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// block fort +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// skyscraper +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// double deck +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// d.k.'s jungle parkway +{ d_course_dks_jungle_parkway_unknown_waypoints, &nullPath, &nullPath, &nullPath, }, +// big donut +{ &nullPath, &nullPath, &nullPath, &nullPath, }, +// null +{ podium_ceremony_path, podium_ceremony_path_2, podium_ceremony_path_3, podium_ceremony_path_4, }, diff --git a/course_metadata/gCupSelectionByCourseId.inc.c b/course_metadata/gCupSelectionByCourseId.inc.c new file mode 100644 index 000000000..c500dd392 --- /dev/null +++ b/course_metadata/gCupSelectionByCourseId.inc.c @@ -0,0 +1 @@ +FLOWER_CUP, FLOWER_CUP, STAR_CUP, SPECIAL_CUP, SPECIAL_CUP, FLOWER_CUP, MUSHROOM_CUP, STAR_CUP, MUSHROOM_CUP, MUSHROOM_CUP, FLOWER_CUP, MUSHROOM_CUP, STAR_CUP, SPECIAL_CUP, STAR_CUP, BATTLE_CUP, BATTLE_CUP, BATTLE_CUP, SPECIAL_CUP, BATTLE_CUP, diff --git a/course_metadata/gKartAIBehaviourLUT.inc.c b/course_metadata/gKartAIBehaviourLUT.inc.c new file mode 100644 index 000000000..11f110bc4 --- /dev/null +++ b/course_metadata/gKartAIBehaviourLUT.inc.c @@ -0,0 +1 @@ +D_0D008F28, D_0D008F80, D_0D008FB8, D_0D009058, D_0D0090B8, D_0D0090F8, D_0D009158, D_0D009188, D_0D0091E8, D_0D009210, D_0D009238, D_0D009260, D_0D009280, D_0D0092C8, D_0D009310, D_0D008F18, D_0D008F18, D_0D008F18, D_0D0093C0, D_0D008F18, D_0D008F18, 0 diff --git a/course_metadata/gKartAICourseMaximumSeparation.inc.c b/course_metadata/gKartAICourseMaximumSeparation.inc.c new file mode 100644 index 000000000..ad50ac3fd --- /dev/null +++ b/course_metadata/gKartAICourseMaximumSeparation.inc.c @@ -0,0 +1 @@ +50.0f, 35.0f, 35.0f, 40.0f, 35.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, 50.0f, -1.0f, -1.0f, -1.0f, 40.0f, -1.0f, 40.0f, diff --git a/course_metadata/gKartAICourseMinimumSeparation.inc.c b/course_metadata/gKartAICourseMinimumSeparation.inc.c new file mode 100644 index 000000000..ecaadb817 --- /dev/null +++ b/course_metadata/gKartAICourseMinimumSeparation.inc.c @@ -0,0 +1 @@ +0.3f, 0.3f, 0.2f, 0.4f, 0.0f, 0.3f, 0.5f, 0.4f, 0.7f, 0.5f, 0.5f, 0.3f, 0.3f, 0.4f, 0.6f, 0.1f, 0.5f, 0.5f, 0.1f, 0.5f, 0.5f, diff --git a/course_metadata/gPerCupIndexByCourseId.inc.c b/course_metadata/gPerCupIndexByCourseId.inc.c new file mode 100644 index 000000000..255bba624 --- /dev/null +++ b/course_metadata/gPerCupIndexByCourseId.inc.c @@ -0,0 +1 @@ +3, 2, 3, 2, 1, 1, 2, 2, 0, 1, 0, 3, 1, 3, 0, 1, 3, 2, 0, 0, diff --git a/course_metadata/sCourseLengths.inc.c b/course_metadata/sCourseLengths.inc.c new file mode 100644 index 000000000..dcd50677f --- /dev/null +++ b/course_metadata/sCourseLengths.inc.c @@ -0,0 +1 @@ +"567m", "687m", "777m", "747m", "772m", "734m", "691m", "1025m", "717m", "527m", "1036m", "753m", "756m", "2000m", "1591m", "", "", "", "893m", "", diff --git a/course_metadata/sSkyColors.inc.c b/course_metadata/sSkyColors.inc.c new file mode 100644 index 000000000..f4a60b39b --- /dev/null +++ b/course_metadata/sSkyColors.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 128, 4280, 6136, 216, 7144, 32248, }, +// choco mountain +{ 255, 255, 255, 255, 255, 255, }, +// bowser's castle +{ 48, 1544, 49528, 0, 0, 0, }, +// banshee boardwalk +{ 0, 0, 0, 0, 0, 0, }, +// yoshi valley +{ 113, 70, 255, 255, 184, 99, }, +// frappe snowland +{ 28, 11, 90, 0, 99, 164, }, +// koopa troopa beach +{ 48, 1688, 54136, 216, 7144, 32248, }, +// royal raceway +{ 238, 144, 255, 255, 224, 240, }, +// luigi raceway +{ 128, 4280, 6136, 216, 7144, 32248, }, +// moo moo farm +{ 0, 18, 255, 197, 211, 255, }, +// toad's turnpike +{ 0, 2, 94, 209, 65, 23, }, +// kalimari desert +{ 195, 231, 255, 255, 192, 0, }, +// sherbet land +{ 128, 4280, 6136, 216, 7144, 32248, }, +// rainbow road +{ 0, 0, 0, 0, 0, 0, }, +// wario stadium +{ 20, 30, 56, 40, 60, 110, }, +// block fort +{ 128, 4280, 6136, 216, 7144, 32248, }, +// skyscraper +{ 0, 0, 0, 0, 0, 0, }, +// double deck +{ 113, 70, 255, 255, 184, 99, }, +// d.k.'s jungle parkway +{ 255, 174, 0, 255, 229, 124, }, +// big donut +{ 0, 0, 0, 0, 0, 0, }, +// null +{ 238, 144, 255, 255, 224, 240, }, diff --git a/course_metadata/sSkyColors2.inc.c b/course_metadata/sSkyColors2.inc.c new file mode 100644 index 000000000..ff65ca501 --- /dev/null +++ b/course_metadata/sSkyColors2.inc.c @@ -0,0 +1,42 @@ +// mario raceway +{ 0, 0, 0, 0, 0, 0, }, +// choco mountain +{ 255, 255, 255, 255, 255, 255, }, +// bowser's castle +{ 0, 0, 0, 0, 0, 0, }, +// banshee boardwalk +{ 0, 0, 0, 0, 0, 0, }, +// yoshi valley +{ 95, 40, 15, 0, 0, 0, }, +// frappe snowland +{ 0, 99, 164, 0, 0, 0, }, +// koopa troopa beach +{ 48, 1688, 54136, 0, 0, 0, }, +// royal raceway +{ 255, 224, 240, 0, 0, 0, }, +// luigi raceway +{ 216, 7144, 32248, 0, 0, 0, }, +// moo moo farm +{ 255, 184, 99, 0, 0, 0, }, +// toad's turnpike +{ 209, 65, 23, 0, 0, 0, }, +// kalimari desert +{ 255, 192, 0, 0, 0, 0, }, +// sherbet land +{ 216, 7144, 32248, 128, 4280, 6136, }, +// rainbow road +{ 0, 0, 0, 0, 0, 0, }, +// wario stadium +{ 0, 0, 0, 0, 0, 0, }, +// block fort +{ 216, 7144, 32248, 0, 0, 0, }, +// skyscraper +{ 0, 0, 0, 0, 0, 0, }, +// double deck +{ 255, 224, 240, 0, 0, 0, }, +// d.k.'s jungle parkway +{ 22, 145, 22, 0, 0, 0, }, +// big donut +{ 0, 0, 0, 0, 0, 0, }, +// null +{ 255, 224, 240, 0, 0, 0, }, diff --git a/courses/all_course_offsets.h b/courses/all_course_offsets.h index 5136da6ff..aa1f43640 100644 --- a/courses/all_course_offsets.h +++ b/courses/all_course_offsets.h @@ -8,7 +8,7 @@ extern Gfx *bowsers_castle_dls[]; extern Gfx *choco_mountain_dls[]; extern Gfx *kalimari_desert_dls[]; extern Gfx *luigi_raceway_dls[]; -extern Gfx *mario_raceway_dls[]; +extern const char *mario_raceway_dls[]; extern Gfx *moo_moo_farm_dls[]; extern Gfx *royal_raceway_dls[]; extern Gfx *sherbet_land_dls[]; diff --git a/courses/courseTable.h b/courses/courseTable.h index 06ff41619..02ec0e280 100644 --- a/courses/courseTable.h +++ b/courses/courseTable.h @@ -32,7 +32,6 @@ extern u8 _mario_raceway_vertexSegmentRomEnd[]; extern u8 _course_mario_raceway_offsetsSegmentRomStart[]; extern u8 _course_mario_raceway_offsetsSegmentRomEnd[]; extern u8 d_course_mario_raceway_packed[]; -extern u32 mario_raceway_textures[]; extern u8 _course_choco_mountain_dl_mio0SegmentRomStart[]; extern u8 _course_choco_mountain_dl_mio0SegmentRomEnd[]; diff --git a/courses/mario_raceway/course_offsets.c b/courses/mario_raceway/course_offsets.c index 5f766731b..12cdd0571 100644 --- a/courses/mario_raceway/course_offsets.c +++ b/courses/mario_raceway/course_offsets.c @@ -36,7 +36,7 @@ const course_texture mario_raceway_textures[] = { {0x00000000, 0x0000, 0x0000, 0x0}, }; -const Gfx *mario_raceway_dls[] = { +const char *mario_raceway_dls[] = { d_course_mario_raceway_dl_0, d_course_mario_raceway_dl_1D0, d_course_mario_raceway_dl_E8, diff --git a/include/common_structs.h b/include/common_structs.h index 7726cace8..347d14c6b 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -372,7 +372,7 @@ typedef struct { /* 0x023C */ f32 unk_23C; /* 0x0240 */ s32 unk_240; /* 0x0244 */ u16 animFrameSelector[4]; // [0] Active texture group - /* 0x024C */ u16 animGroupSelector[4]; + /* 0x024C */ u16 animGroupSelector[4]; // Based on screen /* 0x0254 */ u16 characterId; /* 0x0256 */ u16 unk_256; /* 0x0258 */ UnkPlayerStruct258 unk_258[40]; diff --git a/include/course.h b/include/course.h index 60c70744a..511916ac2 100644 --- a/include/course.h +++ b/include/course.h @@ -10,7 +10,7 @@ */ typedef struct { - Gfx *addr; + uintptr_t addr; u8 surfaceType; u8 sectionId; u16 flags; diff --git a/include/defines.h b/include/defines.h index c575ffb85..cd59cd740 100644 --- a/include/defines.h +++ b/include/defines.h @@ -42,8 +42,8 @@ #define DEBUG_MODE 1 #define DEBUG_MENU 2 #else - #define DEBUG_MODE 0 - #define DEBUG_MENU 1 + #define DEBUG_MODE 1 + #define DEBUG_MENU 2 #endif #define HOLD_ALL_DPAD_AND_C_BUTTONS (U_JPAD | L_JPAD | R_JPAD | D_JPAD | U_CBUTTONS | L_CBUTTONS | R_CBUTTONS | D_CBUTTONS) diff --git a/include/mk64.h b/include/mk64.h index 0196f7e98..96628edc6 100644 --- a/include/mk64.h +++ b/include/mk64.h @@ -97,7 +97,7 @@ enum SURFACE_TYPE { /* 0xFF */ RAMP // Koopa Troopa beach }; -#define GFX_GET_OPCODE(var) ((uintptr_t)((var) & 0xFF000000)) +#define GFX_GET_OPCODE(var) ((uint32_t)((var) & 0xFF000000)) // Pointer casting is technically UB, and avoiding it gets rid of endian issues // as well as a nice side effect. diff --git a/libultraship b/libultraship index 3018f1e75..c7974d6a2 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 3018f1e75516ab00aa6cc5e183d007d9d0c8a139 +Subproject commit c7974d6a25853d65b44905df728a0e0249636947 diff --git a/src/buffers/buffers.c b/src/buffers/buffers.c index 1218438a9..30a9e700e 100644 --- a/src/buffers/buffers.c +++ b/src/buffers/buffers.c @@ -4,8 +4,10 @@ #include "buffers.h" ALIGNED8 union_D_802BFB80 D_802BFB80; +// [nothing][screen][player] ALIGNED8 struct_D_802DFB80 D_802DFB80[2][2][8]; #ifdef AVOID_UB +// [buffer][screen][player] Buffer might be two separate buffers or something? ALIGNED8 struct_D_802F1F80 D_802F1F80[2][4][8]; #else ALIGNED8 u16 D_802F1F80[2][4][0x100 * 8]; diff --git a/src/code_800029B0.c b/src/code_800029B0.c index ebab0302c..bf98365b0 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -311,7 +311,7 @@ void func_80003040(void) { case COURSE_MARIO_RACEWAY: struct ActorSpawnData *a_d_course_mario_raceway_tree_spawns = (struct ActorSpawnData *) LOAD_ASSET(d_course_mario_raceway_tree_spawns); dma_textures(gTextureTrees1, 0x35B, 0x800); - spawn_foliage(a_d_course_mario_raceway_tree_spawns); + //spawn_foliage(a_d_course_mario_raceway_tree_spawns); break; case COURSE_BOWSER_CASTLE: // d_course_bowsers_castle_packed_dl_1350 diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index 9210440a4..1c6a4e3c2 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -3477,6 +3477,7 @@ void func_8000F628(void) { if (gCurrentCourseId < (NUM_COURSES - 1)) { func_8000B95C(i, 0, 0); } + //! todo: @BUG this doesn't seem right. This variable is metadata. D_80163028[i] = *(f32 *) LOAD_ASSET(&D_0D009418[gCurrentCourseId][gCCSelection]); D_801630E8[i] = 0; D_80163100[i] = 0; diff --git a/src/code_80057C60.c b/src/code_80057C60.c index e9bddd053..26d68cb56 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -344,8 +344,7 @@ s16 D_8018CF18; Player *D_8018CF1C; s16 D_8018CF20; UNUSED s32 D_8018CF24; -Player *D_8018CF28[4]; -UNUSED s32 D_8018CF38[4]; +Player *D_8018CF28[8]; s16 D_8018CF48; s16 D_8018CF50[8]; s16 D_8018CF60; diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index 9eb8d23a9..37b183c4e 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -567,7 +567,7 @@ void func_8006FA94(void) { D_8018D17C = D_8018D18C; D_8018D174 = D_8018D18C; player = gPlayerOne; - for (var_a0 = 0; var_a0 < 8; var_a0++) { + for (var_a0 = 0; var_a0 < NUM_PLAYERS; var_a0++) { D_8018D0F0[var_a0] = D_8018D050[var_a0] = -32.0f; D_8018CE10[var_a0].unk_04[0] = D_8018CE10[var_a0].unk_04[1] = D_8018CE10[var_a0].unk_04[2] = 0.0f; D_8018CF50[var_a0] = var_a0; diff --git a/src/code_80091750.c b/src/code_80091750.c index 2bf44cf1c..7d69c08f5 100644 --- a/src/code_80091750.c +++ b/src/code_80091750.c @@ -396,24 +396,24 @@ char *gCupNames[] = { // Displays at beginning of course char *gCourseNames[] = { - #include "assets/course_metadata/gCourseNames.inc.c" + #include "course_metadata/gCourseNames.inc.c" }; char *gCourseNamesDup[] = { - #include "assets/course_metadata/gCourseNames.inc.c" + #include "course_metadata/gCourseNames.inc.c" }; char *gCourseNamesDup2[] = { - #include "assets/course_metadata/gCourseNames.inc.c" + #include "course_metadata/gCourseNames.inc.c" }; // Used in debug menu at splash screen char *gDebugCourseNames[] = { - #include "assets/course_metadata/gCourseDebugNames.inc.c" + #include "course_metadata/gCourseDebugNames.inc.c" }; const s8 gPerCupIndexByCourseId[] = { - #include "assets/course_metadata/gPerCupIndexByCourseId.inc.c" + #include "course_metadata/gPerCupIndexByCourseId.inc.c" }; // @todo Increase this array for more than eight players @@ -421,7 +421,7 @@ const s8 D_800EFD64[] = { 0, 1, 4, 3, 5, 6, 2, 7 }; // Maps course IDs (as defined in the COURSES enum) to the cup they belong to s8 gCupSelectionByCourseId[] = { - #include "assets/course_metadata/gCupSelectionByCourseId.inc.c" + #include "course_metadata/gCupSelectionByCourseId.inc.c" }; char *D_800E7678[] = { @@ -557,7 +557,7 @@ char D_800E77B4[] = "a BUTTON*SEE DATA B BUTTON*EXIT"; char D_800E77D8[] = "distance"; char *sCourseLengths[] = { - #include "assets/course_metadata/sCourseLengths.inc.c" + #include "course_metadata/sCourseLengths.inc.c" }; char *D_800E7834[] = { @@ -2404,7 +2404,6 @@ void func_800942D0(void) { s32 var_s2; s32 thing; test = &gGfxPool->mtxObject[0]; - Gfx * a_D_02007F60 = LOAD_ASSET(D_02007F60); gSPMatrix(gDisplayListHead++, &gGfxPool->mtxScreen, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, &gGfxPool->mtxLookAt[0], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); guRotate(test, D_8018EDC8, 1.0f, 0.0f, 0.0f); @@ -2415,7 +2414,7 @@ void func_800942D0(void) { gSPMatrix(gDisplayListHead++, test++, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetEnvColor(gDisplayListHead++, 0x00, 0x00, 0x00, 0x00); - gSPDisplayList(gDisplayListHead++, a_D_02007F60); + gSPDisplayList(gDisplayListHead++, D_02007F60); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); if (D_800E8530 > 0) { var_f26 = D_800E8534; @@ -2890,6 +2889,7 @@ func_80095BD0_label2: return func_800959F8(displayListHead, var_a1); } +// Player select menu character border Gfx *func_80095E10(Gfx *displayListHead, s8 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9, u8 *argA, u32 argB, u32 argC) { u32 var_a1_2 = arg4; u32 var_s3 = arg5; @@ -3333,6 +3333,7 @@ Gfx *func_80097AE4(Gfx *displayListHead, s8 fmt, s32 arg2, s32 arg3, u8 *arg4, s return displayListHead; } +// Render player characters at player select menu Gfx *func_80097E58(Gfx *displayListHead, s8 fmt, u32 arg2, u32 arg3, u32 arg4, u32 arg5, s32 arg6, s32 arg7, u8 *someTexture, u32 arg9, u32 argA, s32 width) { u32 ult; u32 temp; @@ -3361,12 +3362,14 @@ Gfx *func_80097E58(Gfx *displayListHead, s8 fmt, u32 arg2, u32 arg3, u32 arg4, u } temp_v1 = ((32 * lrs) << 10) / (lrs * (32 - width)); + // Renders the left side gDPLoadTextureTile(displayListHead++, someTexture, fmt, G_IM_SIZ_16b, arg9, argA, temp, ult, temp + lrs, ult + var_s2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, (arg6 + lrs * width / 32) << 2, arg7 << 2, (arg6 + lrs) << 2, (arg7 + var_s2) << 2, 0, 0, (ult << 5) & 0xFFFF, temp_v1, 1024); + gSPTextureRectangle(displayListHead++, (arg6 + lrs * (width) / 32) << 2, arg7 << 2, (((arg6) + lrs) << 2), (((arg7) + var_s2) << 2), 0, 0, (ult << 5) & 0xFFFF, temp_v1, 1024); arg6 += lrs; temp_v1 = ((32 * spDC) << 10) / (spDC * (32 - width)); + // Renders the right side gDPLoadTextureTile(displayListHead++, someTexture, fmt, G_IM_SIZ_16b, arg9, argA, temp + lrs, ult, temp + arg9, ult + var_s2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, arg6 << 2, arg7 << 2, (arg6 + spDC * (32 - width) / 32) << 2, (arg7 + var_s2) << 2, 0, (lrs << 5) & 0xFFFF, (ult << 5) & 0xFFFF, temp_v1, 1024); + gSPTextureRectangle(displayListHead++, arg6 << 2, arg7 << 2, ((arg6 + spDC * (32 - (width)) / 32) << 2), (((arg7) + var_s2) << 2), 0, (1+lrs << 5) & 0xFFFF, (ult << 5) & 0xFFFF, temp_v1, 1024); arg6 = arg6Copy; arg7 += temp2; } @@ -3742,7 +3745,7 @@ void func_800996BC(MkTexture *arg0, s32 arg1) { case 1: /* switch 1 */ //mio0decode(D_8018D9B4, (u8*)&D_8018D9B0[gD_8018E118TotalSize]); //printf("w: %d, h: %d", texture->width, texture->height); - memcpy(&D_8018D9B0[gD_8018E118TotalSize], texture->textureData, texture->width * texture->height*2); + memcpy(&D_8018D9B0[gD_8018E118TotalSize], texture->textureData, texture->width * texture->height * 2); break; case 0: /* switch 1 */ case 2: /* switch 1 */ @@ -3872,6 +3875,7 @@ void func_80099AEC(void) { //osPiStartDma(&sp68, 0, 0, (uintptr_t)&_textures_0aSegmentRomStart[SEGMENT_OFFSET(temp_s2->textureData)], D_8018D9B4 + sp60*4, size, &gDmaMesgQueue); } //mio0decode(D_8018D9B4, (u8*)&D_8018D9B0[D_8018E118[var_s1->unk_4].offset]); + //u16 *asset = LOAD_ASSET(var_s1->texture->textureData); memcpy(&D_8018D9B0[D_8018E118[var_s1->unk_4].offset], var_s1->texture->textureData, var_s1->texture->width * var_s1->texture->height * 2); var_s1->texture = NULL; @@ -3895,6 +3899,7 @@ void func_80099AEC(void) { //osPiStartDma(&sp68, 0, 0, (uintptr_t)&_textures_0aSegmentRomStart[SEGMENT_OFFSET(temp_s2->textureData)], D_8018D9B4, size, &gDmaMesgQueue); } //mio0decode(D_8018D9B4 + sp60*4, (u8*)&D_8018D9B0[D_8018E118[var_s1->unk_4].offset]); + //u16 *asseta = LOAD_ASSET(var_s1->texture->textureData); memcpy(&D_8018D9B0[D_8018E118[var_s1->unk_4].offset], var_s1->texture->textureData, var_s1->texture->width * var_s1->texture->height * 2); var_s1->texture = NULL; var_s1++; diff --git a/src/data/path_spawn_metadata.c b/src/data/path_spawn_metadata.c index ea87e106e..d55bdb770 100644 --- a/src/data/path_spawn_metadata.c +++ b/src/data/path_spawn_metadata.c @@ -5,33 +5,33 @@ // @warning Array contains an extra zero element at the end. KartAIBehaviour *gKartAIBehaviourLUT[] = { - #include "assets/course_metadata/gKartAIBehaviourLUT.inc.c" + #include "course_metadata/gKartAIBehaviourLUT.inc.c" }; TrackWaypoint nullPath = { 0x8000, 0x0000, 0x0000, 0x0000 }; TrackWaypoint *gCoursePathTable[][4] = { - #include "assets/course_metadata/gCoursePathTableUnknown.inc.c" + #include "course_metadata/gCoursePathTableUnknown.inc.c" }; TrackWaypoint *gCoursePathTable2[][4] = { - #include "assets/course_metadata/gCoursePathTable.inc.c" + #include "course_metadata/gCoursePathTable.inc.c" }; // @warning Array contains an extra zero element at the end. s16 gKartAISteeringSensitivity[] = { - #include "assets/course_metadata/gCPUSteeringSensitivity.inc.c" + #include "course_metadata/gCPUSteeringSensitivity.inc.c" }; // Possibly maximum cpu separation f32 gKartAICourseMaximumSeparation[] = { - #include "assets/course_metadata/gKartAICourseMaximumSeparation.inc.c" + #include "course_metadata/gKartAICourseMaximumSeparation.inc.c" }; // Possibly minimum cpu separation f32 gKartAICourseMinimumSeparation[] = { - #include "assets/course_metadata/gKartAICourseMinimumSeparation.inc.c" + #include "course_metadata/gKartAICourseMinimumSeparation.inc.c" }; // I think the types for D_800DCAF4, D_800DCB34, and D_800DCBB4 are all @@ -58,15 +58,15 @@ s16 D_800DCB34[] = { }; s16 *D_800DCBB4[] = { - #include "assets/course_metadata/D_800DCBB4.inc.c" + #include "course_metadata/D_800DCBB4.inc.c" }; BombKartSpawn gBombKartSpawns[][NUM_BOMB_KARTS_MAX] = { - #include "assets/course_metadata/gBombKartSpawns.inc.c" + #include "course_metadata/gBombKartSpawns.inc.c" }; struct _struct_gCoursePathSizes_0x10 gCoursePathSizes[] = { - #include "assets/course_metadata/gCoursePathSizes.inc.c" + #include "course_metadata/gCoursePathSizes.inc.c" }; s32 D_800DDB20 = 0x00000000; diff --git a/src/kart_dma.c b/src/kart_dma.c index 40bbb6817..c08efc457 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -13,6 +13,7 @@ #include #include #include +#include "render_player.h" // Seemingly the largest compressed size for a frame for a given character // They seem slightly oversized too, either an alignemnt or safety thing @@ -1697,16 +1698,21 @@ u8 *gKartPalettes[] = { * * @param player * @param playerId Player ID. - * @param arg2 Rom buffer index appears to always be 0-3. Sometimes subtracted by 2. - * @param arg3 Second buffer index appears to always be 0-3. - * @param arg4 First buffer index always zero. + * @param screenId Rom buffer index appears to always be 0-3. Sometimes subtracted by 2. + * @param screenId2 Second buffer index appears to always be 0-3. + * @param zero First buffer index always zero. **/ -void load_kart_texture(Player *player, s8 playerId, s8 arg2, s8 arg3, s8 arg4) { +void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s8 zero) { s32 temp = player->effects; + u8 *texture; + u8 *asset; + size_t size = 0; if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { - if (player->animFrameSelector[arg2] != 0) { - osInvalDCache(&D_802DFB80[arg4][arg3][playerId], D_800DDEB0[player->characterId]); + if (player->animFrameSelector[screenId] != 0) { + osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]); + + texture = gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; // osPiStartDma( // &gDmaIoMesg, // OS_MESG_PRI_NORMAL, OS_READ, @@ -1717,10 +1723,16 @@ void load_kart_texture(Player *player, s8 playerId, s8 arg2, s8 arg3, s8 arg4) { // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); + printf("T1 kart %s\n", texture); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + //return gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][playerId], D_800DDEB0[player->characterId]); + osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]); // osPiStartDma( // &gDmaIoMesg, @@ -1734,10 +1746,15 @@ void load_kart_texture(Player *player, s8 playerId, s8 arg2, s8 arg3, s8 arg4) { // &gDmaMesgQueue // ); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; + size = ResourceGetTexSizeByName(texture); + printf("T0 kart %s\n",texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size); + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { - osInvalDCache(&D_802DFB80[arg4][arg3][playerId], 0x780U); + osInvalDCache(&D_802DFB80[zero][screenId2][playerId], 0x780U); // player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number. // osPiStartDma( // &gDmaIoMesg, @@ -1750,10 +1767,15 @@ void load_kart_texture(Player *player, s8 playerId, s8 arg2, s8 arg3, s8 arg4) { // 0x900, // &gDmaMesgQueue // ); + texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; + printf("Tum Kart %s\n",texture); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][playerId], D_800DDEB0[player->characterId]); + osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]); // osPiStartDma( // &gDmaIoMesg, @@ -1767,12 +1789,21 @@ void load_kart_texture(Player *player, s8 playerId, s8 arg2, s8 arg3, s8 arg4) { // &gDmaMesgQueue // ); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; + printf("T0 kart 2 %s\n", texture); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } -void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { +void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) { s32 temp = player->effects; + u8 *asset; + u8 *texture; + size_t size; if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { @@ -1790,6 +1821,14 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); + + texture = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; + printf("T1 kart 2 %s\n", texture); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, + asset, size); + } else { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); @@ -1804,6 +1843,11 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); + texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; + printf("T0 kart 3 %s\n", texture); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, asset, size); } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) @@ -1821,6 +1865,11 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { // 0x900, // &gDmaMesgQueue // ); + texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; + printf("Tum kart 2 %s\n", texture); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, asset, size); } else { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); @@ -1835,14 +1884,21 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); + texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; + printf("T0 kart 4 %s 0x%llX\n", texture, &D_802DFB80[arg4][arg3][arg1]); + size = ResourceGetTexSizeByName(texture); + asset = (u8 *) LOAD_ASSET(texture); + memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, asset, size); } } -void load_kart_palette(Player *player, s8 playerId, s8 arg2, s8 arg3) { +void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 buffer) { + u8 *asset; + size_t size; #ifdef AVOID_UB - struct_D_802F1F80 *temp_s0 = &D_802F1F80[arg3][arg2][playerId]; + struct_D_802F1F80 *temp_s0 = &D_802F1F80[buffer][screenId][playerId]; #else - struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[arg3][arg2][playerId * 0x100]; + struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[buffer][screenId][playerId * 0x100]; #endif switch(gActiveScreenMode) { case SCREEN_MODE_1P: @@ -1862,7 +1918,11 @@ void load_kart_palette(Player *player, s8 playerId, s8 arg2, s8 arg3) { // &gDmaMesgQueue // ); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]); + asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]); + memcpy(temp_s0, asset, size); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; case SCREEN_MODE_3P_4P_SPLITSCREEN: // Code identical to above osInvalDCache(temp_s0, sizeof(struct_D_802F1F80)); @@ -1879,12 +1939,16 @@ void load_kart_palette(Player *player, s8 playerId, s8 arg2, s8 arg3) { // &gDmaMesgQueue // ); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]); + asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]); + memcpy(temp_s0, asset, size); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; } } -void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { +void func_80027BDC(UNUSED Player *player, u8 *arg1, void *vAddr, u16 size) { osInvalDCache(vAddr, size); // osPiStartDma( @@ -1897,10 +1961,13 @@ void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { // &gDmaMesgQueue // ); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + // u8 *asset = (u8 *) LOAD_ASSET(arg1); + // memcpy(vAddr, asset, size); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } -void func_80027C74(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { +void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) { osInvalDCache(vAddr, size); // osPiStartDma( @@ -1912,4 +1979,7 @@ void func_80027C74(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { // size, // &gDmaMesgQueue // ); + // size_t textureSize = ResourceGetTexSizeByName(texture); + // printf("test %s\n",texture); + // memcpy(vAddr, texture, textureSize); } diff --git a/src/kart_dma.h b/src/kart_dma.h index 058829a26..b09b8cb39 100644 --- a/src/kart_dma.h +++ b/src/kart_dma.h @@ -7,10 +7,10 @@ /* Function Prototypes */ void load_kart_texture(Player*, s8, s8, s8, s8); -void func_80027560(Player*, s8, s8, s8, s8); +void func_80027560(Player*, s8, s8, s8, s8, size_t); void load_kart_palette(Player*, s8, s8, s8); -void func_80027BDC(Player*, s32, void*, u16); -void func_80027C74(Player*, s32, void*, u16); +void func_80027BDC(Player*, u8*, void*, u16); +void func_80027C74(Player*, u8*, void*, u16); /* This is where I'd put my static data, if I had any */ diff --git a/src/menus.c b/src/menus.c index f3df0a4e6..b6720cdff 100644 --- a/src/menus.c +++ b/src/menus.c @@ -59,7 +59,7 @@ s8 D_8018EE0C; struct_8018EE10_entry D_8018EE10[2]; /** Data **/ -s32 gMenuSelection = LOGO_INTRO_MENU; +s32 gMenuSelection = START_MENU; s32 D_800E86A4 = 0; s8 gCharacterSelections[4] = { MARIO, LUIGI, YOSHI, TOAD }; diff --git a/src/player_controller.c b/src/player_controller.c index 5b8c9332f..761e41967 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -360,24 +360,24 @@ s32 get_player_index_for_player(Player *player) { return index; } -void func_80027DA8(Player *arg0, s8 arg1) { +void func_80027DA8(Player *player, s8 playerId) { if (D_8015F890 != 1) { - if ((arg0->type & 0x10) != 0x10) { - if (((D_8018D168 == 1) && ((arg0->type & 0x4000) == 0x4000)) && ((arg0->type & 0x100) != 0x100)) { - func_800C94A4(arg1); - arg0->type |= 0x10; - } else if ((arg0->type & 0x2000) == 0) { - func_800C9A88(arg1); - arg0->type |= 0x10; + if ((player->type & 0x10) != 0x10) { + if (((D_8018D168 == 1) && ((player->type & 0x4000) == 0x4000)) && ((player->type & 0x100) != 0x100)) { + func_800C94A4(playerId); + player->type |= 0x10; + } else if ((player->type & 0x2000) == 0) { + func_800C9A88(playerId); + player->type |= 0x10; } } - } else if ((arg0->type & 0x10) != 0x10) { - if ((D_8018D168 == 1) && (arg0 == gPlayerOne)) { - func_800C94A4(arg1); - arg0->type |= 0x10; - } else if ((arg0->type & 0x2000) == 0) { - func_800C9A88(arg1); - arg0->type |= 0x10; + } else if ((player->type & 0x10) != 0x10) { + if ((D_8018D168 == 1) && (player == gPlayerOne)) { + func_800C94A4(playerId); + player->type |= 0x10; + } else if ((player->type & 0x2000) == 0) { + func_800C9A88(playerId); + player->type |= 0x10; } } } @@ -618,7 +618,7 @@ void func_80027EDC(Player *player, s8 playerId) { } } -void func_80028864(Player *player, Camera *camera, s8 arg2, s8 arg3) { +void func_80028864(Player *player, Camera *camera, s8 playerId, s8 screenId) { u16 sp1E; if (!(player->type & PLAYER_START_SEQUENCE)) { @@ -648,7 +648,7 @@ void func_80028864(Player *player, Camera *camera, s8 arg2, s8 arg3) { ((player->unk_0CA & 2) != 0) || (player->unk_0CA & 8) || //! @todo make a proper match - ((*(D_801633F8 + (arg2))) == ((s16) 1U))) { + ((*(D_801633F8 + (playerId))) == ((s16) 1U))) { player->effects &= ~0x1000; if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40) || @@ -660,18 +660,18 @@ void func_80028864(Player *player, Camera *camera, s8 arg2, s8 arg3) { ((player->effects & HIT_BY_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT) || ((player->effects & 0x20000) == 0x20000) || (player->unk_044 & 0x800)) { - func_8002E594(player, camera, arg3, arg2); + func_8002E594(player, camera, screenId, playerId); } else { - func_8002D268(player, camera, arg3, arg2); + func_8002D268(player, camera, screenId, playerId); } } else { - control_kart_ai_movement(player, camera, arg3, arg2); + control_kart_ai_movement(player, camera, screenId, playerId); } } else if ((player->type & PLAYER_STAGING) == PLAYER_STAGING) { - func_8002D028(player, arg2); - func_8002F730(player, camera, arg3, arg2); + func_8002D028(player, playerId); + func_8002F730(player, camera, screenId, playerId); } else if (player->type & 0x80) { - func_8002D268(player, camera, arg3, arg2); + func_8002D268(player, camera, screenId, playerId); } else { if ((player->type & PLAYER_HUMAN) != PLAYER_HUMAN) { player->currentSpeed = 50.0f; @@ -680,7 +680,7 @@ void func_80028864(Player *player, Camera *camera, s8 arg2, s8 arg3) { } } -void func_80028C44(Player *player, Camera *camera, s8 arg2, s8 arg3) { +void func_80028C44(Player *player, Camera *camera, s8 playerId, s8 screenId) { if ((player->type & PLAYER_START_SEQUENCE) == 0) { player->effects &= ~0x1000; if (((player->effects & 0x80) == 0x80) || @@ -693,16 +693,16 @@ void func_80028C44(Player *player, Camera *camera, s8 arg2, s8 arg3) { ((player->effects & HIT_BY_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT) || ((player->effects & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { - func_8002E594(player, camera, arg3, arg2); + func_8002E594(player, camera, screenId, playerId); } else { - func_8002D268(player, camera, arg3, arg2); + func_8002D268(player, camera, screenId, playerId); } } else { player->effects &= -9; } } -void func_80028D3C(Player *player, Camera *camera, s8 arg2, s8 arg3) { +void func_80028D3C(Player *player, Camera *camera, s8 playerId, s8 screenId) { if ((((player->type & PLAYER_START_SEQUENCE) == 0) && (D_800DC510 != 5)) || (player->unk_0CA & 2) != 0 @@ -720,37 +720,37 @@ void func_80028D3C(Player *player, Camera *camera, s8 arg2, s8 arg3) { ((player->effects & HIT_BY_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT) || ((player->effects & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { - func_8002E594(player, camera, arg3, arg2); + func_8002E594(player, camera, screenId, playerId); } else { - func_8002D268(player, camera, arg3, arg2); + func_8002D268(player, camera, screenId, playerId); } } else { player->effects = player->effects & ~8; } } -void func_80028E70(Player *player, Camera *camera, s8 arg2, s8 arg3) { +void func_80028E70(Player *player, Camera *camera, s8 playerId, s8 screenId) { if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) { switch (gGamestate) { case ENDING: if (!(player->type & PLAYER_START_SEQUENCE)) { - func_80038C6C(player, camera, arg3, arg2); + func_80038C6C(player, camera, screenId, playerId); } else { player->effects &= ~8; } break; default: - func_80027DA8(player, arg2); + func_80027DA8(player, playerId); switch (gModeSelection) { case TIME_TRIALS: case VERSUS: - func_80028C44(player, camera, arg2, arg3); + func_80028C44(player, camera, playerId, screenId); break; case BATTLE: - func_80028D3C(player, camera, arg2, arg3); + func_80028D3C(player, camera, playerId, screenId); break; default: - func_80028864(player, camera, arg2, arg3); + func_80028864(player, camera, playerId, screenId); break; } break; @@ -810,37 +810,37 @@ void func_800291F8(void) { } -void func_80029200(Player *player, s8 arg1) { +void func_80029200(Player *player, s8 screenId) { if ((s32) player->slopeAccel < -0x71B) { - player->animGroupSelector[arg1] = 0; + player->animGroupSelector[screenId] = 0; } if (((s32) player->slopeAccel < -0x4F9) && ((s32) player->slopeAccel >= -0x71B)) { - player->animGroupSelector[arg1] = 1; + player->animGroupSelector[screenId] = 1; } if ((player->slopeAccel < -0x221) && (player->slopeAccel >= -0x4F9)) { - player->animGroupSelector[arg1] = 2; + player->animGroupSelector[screenId] = 2; } if ((player->slopeAccel < -0x16B) && (player->slopeAccel >= -0x221)) { - player->animGroupSelector[arg1] = 3; + player->animGroupSelector[screenId] = 3; } if ((player->slopeAccel < 0x16C) && (player->slopeAccel >= -0x16B)) { - player->animGroupSelector[arg1] = 4; + player->animGroupSelector[screenId] = 4; } if ((player->slopeAccel >= 0x16C) && (player->slopeAccel < 0x222)) { - player->animGroupSelector[arg1] = 5; + player->animGroupSelector[screenId] = 5; } if ((player->slopeAccel >= 0x222) && (player->slopeAccel < 0x4FA)) { - player->animGroupSelector[arg1] = 6; + player->animGroupSelector[screenId] = 6; } if ((player->slopeAccel >= 0x4FA) && (player->slopeAccel < 0x71C)) { - player->animGroupSelector[arg1] = 7; + player->animGroupSelector[screenId] = 7; } if (player->slopeAccel >= 0x71C) { - player->animGroupSelector[arg1] = 8; + player->animGroupSelector[screenId] = 8; } } -void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { +void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) { UNUSED s32 pad[2]; f32 temp_f0; f32 temp_f2; @@ -852,45 +852,45 @@ void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { s32 var_t0; u16 var_a0; - player->unk_048[arg2] = atan2s(player->pos[0] - camera->pos[0], player->pos[2] - camera->pos[2]); - player->animFrameSelector[arg2] = (u16) ( (((player->unk_048[arg2]) + player->rotation[1] + player->unk_0C0))) / 128; + player->unk_048[screenId] = atan2s(player->pos[0] - camera->pos[0], player->pos[2] - camera->pos[2]); + player->animFrameSelector[screenId] = (u16) ( (((player->unk_048[screenId]) + player->rotation[1] + player->unk_0C0))) / 128; temp_f2 = (gCharacterSize[player->characterId] * 18.0f) * player->size; temp_f0 = player->unk_230 - player->unk_23C; if ((player->effects & 8) != 8) { if ((player->effects & LIGHTNING_EFFECT) == LIGHTNING_EFFECT) { - player->unk_0CC[arg2] = (s16) ((s32) (((f64) func_802B7C40(temp_f0 / temp_f2)) * 1.6)); + player->unk_0CC[screenId] = (s16) ((s32) (((f64) func_802B7C40(temp_f0 / temp_f2)) * 1.6)); } else { - player->unk_0CC[arg2] = func_802B7C40(temp_f0 / temp_f2) * 2; + player->unk_0CC[screenId] = func_802B7C40(temp_f0 / temp_f2) * 2; } } if ((player->effects & HIT_EFFECT) == HIT_EFFECT) { - player->unk_0CC[arg2] = (s16) ((s32) player->unk_D9C); + player->unk_0CC[screenId] = (s16) ((s32) player->unk_D9C); } if ((player->effects & 8) != 8) { temp_f0 = player->unk_1F8 - player->unk_1FC; - player->unk_0D4[arg2] = (((func_802B7C40(temp_f0 / temp_f2)) * 0.9)); + player->unk_0D4[screenId] = (((func_802B7C40(temp_f0 / temp_f2)) * 0.9)); } else { - if (((player->animFrameSelector[arg2]) >= 0) && ((player->animFrameSelector[arg2]) < 0x101)) { + if (((player->animFrameSelector[screenId]) >= 0) && ((player->animFrameSelector[screenId]) < 0x101)) { var_f0 = player->copy_rotation_y - player->pos[1]; } else { var_f0 = player->pos[1] - player->copy_rotation_y; } - player->unk_0D4[arg2] = (s16) ((s32) (((f64) func_802B7C40(var_f0 / temp_f2)) * 0.5)); + player->unk_0D4[screenId] = (s16) ((s32) (((f64) func_802B7C40(var_f0 / temp_f2)) * 0.5)); } if ((player->effects & HIT_EFFECT) == HIT_EFFECT) { - player->unk_0D4[arg2] = (s16) ((s32) player->unk_D9C); + player->unk_0D4[screenId] = (s16) ((s32) player->unk_D9C); } - func_80029200(player, arg2); - temp_a0 = ((player->unk_048[arg2] + player->rotation[1]) + player->unk_0C0); - temp_a0 = (s16) player->unk_0D4[arg2] * sins((u16) temp_a0) + player->unk_0CC[arg2] * coss((u16) temp_a0); - move_s16_towards(&player->unk_050[arg2], temp_a0, 0.5f); - var_a0 = player->animFrameSelector[arg2]; - player->unk_002 = player->unk_002 & (~(4 << (arg2 * 4))); + func_80029200(player, screenId); + temp_a0 = ((player->unk_048[screenId] + player->rotation[1]) + player->unk_0C0); + temp_a0 = (s16) player->unk_0D4[screenId] * sins((u16) temp_a0) + player->unk_0CC[screenId] * coss((u16) temp_a0); + move_s16_towards(&player->unk_050[screenId], temp_a0, 0.5f); + var_a0 = player->animFrameSelector[screenId]; + player->unk_002 = player->unk_002 & (~(4 << (screenId * 4))); if (var_a0 >= 0x101) { var_a0 = 0x201 - var_a0; - player->unk_002 |= (4 << (arg2 * 4)); + player->unk_002 |= (4 << (screenId * 4)); } if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40) @@ -913,13 +913,13 @@ void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { if (((player->effects & 0x80000) == 0x80000) || ((player->effects & 0x800000) == 0x800000) || (player->unk_044 & 0x800)) { - player->unk_050[arg2] = 0; + player->unk_050[screenId] = 0; } if (((player->effects & 8) == 8) && ((player->unk_0CA & 2) == 2)) { - player->unk_050[arg2] = 0; + player->unk_050[screenId] = 0; } - var_a0 = (player->unk_048[arg2] + player->rotation[1] + player->unk_0C0); + var_a0 = (player->unk_048[screenId] + player->rotation[1] + player->unk_0C0); if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40) || ((player->effects & 0x80000) == 0x80000) @@ -941,9 +941,9 @@ void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { } var_a0 /= var_a1; } - player->animFrameSelector[arg2] = var_a0 + var_t0; - if ((player->animFrameSelector[arg2]) >= 0x23) { - player->animFrameSelector[arg2] = 0x22; + player->animFrameSelector[screenId] = var_a0 + var_t0; + if ((player->animFrameSelector[screenId]) >= 0x23) { + player->animFrameSelector[screenId] = 0x22; } if ((player->effects & 0x80) || (player->effects & 0x40) @@ -952,18 +952,18 @@ void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { || (player->effects & 0x20000) || (player->unk_044 & 0x800)) { - if ((player->animFrameSelector[arg2]) >= 0x14) { - player->animFrameSelector[arg2] = 0; + if ((player->animFrameSelector[screenId]) >= 0x14) { + player->animFrameSelector[screenId] = 0; } } - if ((player->animGroupSelector[arg2]) >= 9) { - player->animGroupSelector[arg2] = 4; + if ((player->animGroupSelector[screenId]) >= 9) { + player->animGroupSelector[screenId] = 4; } if (((player->effects & 0x80000) == 0x80000) || ((player->effects & 0x800000) == 0x800000) || (player->unk_044 & 0x800)) { - player->animGroupSelector[arg2] = 4; + player->animGroupSelector[screenId] = 4; } if (((player->effects & 0x400) == 0x400) || ((player->effects & 0x01000000) == 0x01000000) @@ -972,27 +972,27 @@ void func_8002934C(Player *player, Camera *camera, s8 arg2, s8 playerId) { || (player->effects & 0x80) || (player->effects & 0x40)) { - player->unk_002 |= 1 << (arg2 * 4); - D_80165190[arg2][playerId] = 1; + player->unk_002 |= 1 << (screenId * 4); + D_80165190[screenId][playerId] = 1; if ((player->effects & 0x80) || (player->effects & 0x40)) { - if ((player->animFrameSelector[arg2] == D_801650D0[arg2][playerId]) - && (player->animGroupSelector[arg2] == D_80165110[arg2][playerId])) { - player->unk_002 &= ~(1 << (arg2 * 4)); - D_80165190[arg2][playerId] = 1; + if ((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId]) + && (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) { + player->unk_002 &= ~(1 << (screenId * 4)); + D_80165190[screenId][playerId] = 1; } - } else if (((player->unk_0A8) >> 8) == D_80165150[arg2][playerId] >> 8) { - player->unk_002 &= ~(1 << (arg2 * 4)); + } else if (((player->unk_0A8) >> 8) == D_80165150[screenId][playerId] >> 8) { + player->unk_002 &= ~(1 << (screenId * 4)); } } else { - player->unk_002 |= 1 << (arg2 * 4); - if (((player->animFrameSelector[arg2] == D_801650D0[arg2][playerId]) && (player->animGroupSelector[arg2] == D_80165110[arg2][playerId])) && ((D_80165190[arg2][playerId]) == 0)) { - player->unk_002 &= ~(1 << (arg2 * 4)); + player->unk_002 |= 1 << (screenId * 4); + if (((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId]) && (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) && ((D_80165190[screenId][playerId]) == 0)) { + player->unk_002 &= ~(1 << (screenId * 4)); } } - temp_a0_2 = D_801650D0[arg2][playerId] - player->animFrameSelector[arg2]; + temp_a0_2 = D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]; if ((temp_a0_2 >= 0x14) || (temp_a0_2 < (-0x13))) { - player->unk_002 |= 1 << (arg2 * 4); + player->unk_002 |= 1 << (screenId * 4); } } @@ -1516,7 +1516,7 @@ void func_8002B218(Player *player) { } } -void apply_sound_effect(Player *player, s8 playerId, UNUSED s8 arg2) { +void apply_sound_effect(Player *player, s8 playerId, UNUSED s8 screenId) { if ((player->soundEffects & 2) == 2) { apply_hit_by_item_sound_effect(player, playerId); } @@ -1573,7 +1573,7 @@ void apply_sound_effect(Player *player, s8 playerId, UNUSED s8 arg2) { } } -void func_8002B5C0(Player *player, UNUSED s8 playerId, UNUSED s8 arg2) { +void func_8002B5C0(Player *player, UNUSED s8 playerId, UNUSED s8 screenId) { if (((player->unk_0CA & 8) != 0) || ((player->unk_0CA & 2) != 0)) { player->soundEffects &= 0xFE1D0478; } @@ -1627,12 +1627,12 @@ void func_8002B5C0(Player *player, UNUSED s8 playerId, UNUSED s8 arg2) { } } -void func_8002B830(Player *player, s8 playerId, s8 arg2) { +void func_8002B830(Player *player, s8 playerId, s8 screenId) { if (player->soundEffects != 0) { - func_8002B5C0(player, playerId, arg2); + func_8002B5C0(player, playerId, screenId); } if (player->soundEffects != 0) { - apply_sound_effect(player, playerId, arg2); + apply_sound_effect(player, playerId, screenId); } if ((player->unk_044 & 0x400) != 0) { func_800911B4(player, playerId); @@ -2199,7 +2199,7 @@ void func_8002D028(Player *player, s8 arg1) { } } -void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) +void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 playerId) { Vec3f sp184 = {0.0, 0.0, 1.0}; Vec3f sp178 = {0.0, 0.0, 0.0}; @@ -2234,11 +2234,11 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { func_8002A79C(player, playerId); } - func_8002B830(player, playerId, arg2); + func_8002B830(player, playerId, screenId); if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { func_8002BF4C(player, playerId); } - apply_effect(player, playerId, arg2); + apply_effect(player, playerId, screenId); if (((player->effects & 0x20000000) == 0x20000000) && (player->unk_228 >= 0x64)) { sp7C = 2; } @@ -2288,7 +2288,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) mtxf_translate_vec3f_mat3(sp178, player->orientationMatrix); spB4 += sp178[0]; spAC += sp178[2]; - func_8002C7E4(player, playerId, arg2); + func_8002C7E4(player, playerId, screenId); sp184[2] = func_80030150(player, playerId); mtxf_translate_vec3f_mat3(sp184, player->orientationMatrix); sp98[0] = player->velocity[0]; @@ -2461,7 +2461,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) } player->pos[1] = spF8; if ((player->type & PLAYER_HUMAN) && (!(player->type & PLAYER_KART_AI))) { - func_8002BB9C(player, &spFC, &spF4, arg2, playerId, sp98); + func_8002BB9C(player, &spFC, &spF4, screenId, playerId, sp98); } player->unk_064[0] = sp178[0]; player->unk_064[2] = sp178[2]; @@ -2509,7 +2509,7 @@ void func_8002E4C4(Player *player) { player->velocity[1] = 0.0f; } -void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) { +void func_8002E594(Player *player, UNUSED Camera *camera, s8 screenId, s8 playerId) { Vec3f spEC = {0.0f, 0.0f, 1.0f}; Vec3f spE0 = {0.0f, 0.0f, 0.0f}; Vec3f spD4 = {0.0f, 0.0f, 0.0f}; @@ -2531,7 +2531,7 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) Vec3f sp54; Vec3f sp48; s16 sp46; - func_8002B830(player, playerId, arg2); + func_8002B830(player, playerId, screenId); if ((((((((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) || ((player->effects & 0x4000) == 0x4000)) @@ -2543,7 +2543,7 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) } else { sp46 = 0; } - apply_effect(player, playerId, arg2); + apply_effect(player, playerId, screenId); func_8002AB70(player); func_8002FCA8(player, playerId); if ((((player->effects & 0x80) == 0x80) @@ -2557,7 +2557,7 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) sp7C = -1 * player->kartGravity; sp78 = -1 * player->unk_064[2]; } - func_8002C7E4(player, playerId, arg2); + func_8002C7E4(player, playerId, screenId); if (sp46 == 1) { calculate_orientation_matrix(player->orientationMatrix, player->unk_058, player->unk_05C, player->unk_060, (s16) ((s32) player->rotation[1])); calculate_orientation_matrix(player->unk_150, player->unk_058, player->unk_05C, player->unk_060, (s16) ((s32) player->unk_0AE)); @@ -2827,7 +2827,7 @@ void control_kart_ai_movement(Player *player, UNUSED Camera *camera, s8 arg2, s8 } } -void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 arg2, s8 arg3) { +void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 screenId, s8 playerId) { Vec3f spF4 = {0.0f, 0.0f, 1.0f}; Vec3f spE8 = {0.0f, 0.0f, 0.0f}; UNUSED Vec3f spDC = {0.0f, 0.0f, 0.0f}; @@ -2853,7 +2853,7 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 arg2, s8 arg func_80037BB4(player, spD0); sp84 = player->unk_064[0] * 0; sp7C = player->unk_064[2] * 0; - spF4[2] = func_80030150(player, arg3); + spF4[2] = func_80030150(player, playerId); mtxf_translate_vec3f_mat3(spF4, player->orientationMatrix); @@ -2898,7 +2898,7 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 arg2, s8 arg } else { func_8002A194(player, spCC, spC8, spC4); } - func_8002AE38(player, arg3, spC0, spB8, spCC, spC4); + func_8002AE38(player, playerId, spC0, spB8, spCC, spC4); sqrt = (sp68[0] * sp68[0]) + (sp68[1] * sp68[1]) + (sp68[2] * sp68[2]); player->unk_22C = player->unk_094; player->unk_094 = sqrtf(sqrt); @@ -2918,9 +2918,9 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 arg2, s8 arg player->velocity[1] = sp68[1]; player->velocity[2] = sp68[2]; - D_80165070[arg3][0] = sp68[0]; - D_80165070[arg3][1] = sp68[1]; - D_80165070[arg3][2] = sp68[2]; + D_80165070[playerId][0] = sp68[0]; + D_80165070[playerId][1] = sp68[1]; + D_80165070[playerId][2] = sp68[2]; if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { if (gKartTopSpeedTable[player->characterId] < player->unk_094) { diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 0d18255bc..c09846732 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -8,6 +8,7 @@ #include "resource/importers/Vec3fFactory.h" #include "resource/importers/Vec3sFactory.h" #include "resource/importers/KartAIFactory.h" +#include "resource/importers/CourseVtxFactory.h" #include "resource/importers/TrackSectionsFactory.h" #include "resource/importers/TrackWaypointFactory.h" #include "resource/importers/ActorSpawnDataFactory.h" @@ -25,7 +26,6 @@ float gInterpolationStep = 0.0f; #include #include #include -#include #include #include } @@ -34,11 +34,11 @@ GameEngine* GameEngine::Instance; GameEngine::GameEngine() { std::vector OTRFiles; - if (const std::string cube_path = Ship::Context::GetPathRelativeToAppDirectory("mkcube.otr"); std::filesystem::exists(cube_path)) { - OTRFiles.push_back(cube_path); + if (const std::string spaghetti_path = Ship::Context::GetPathRelativeToAppDirectory("spaghetti.otr"); std::filesystem::exists(spaghetti_path)) { + OTRFiles.push_back(spaghetti_path); } - if (const std::string sm64_otr_path = Ship::Context::GetPathRelativeToAppBundle("sm64.otr"); std::filesystem::exists(sm64_otr_path)) { - OTRFiles.push_back(sm64_otr_path); + if (const std::string ship_otr_path = Ship::Context::GetPathRelativeToAppBundle("ship.otr"); std::filesystem::exists(ship_otr_path)) { + OTRFiles.push_back(ship_otr_path); } if (const std::string patches_path = Ship::Context::GetPathRelativeToAppDirectory("mods"); !patches_path.empty() && std::filesystem::exists(patches_path)) { if (std::filesystem::is_directory(patches_path)) { @@ -52,6 +52,10 @@ GameEngine::GameEngine() { this->context = Ship::Context::CreateInstance("Spaghettify", "skart64", "spaghettify.cfg.json", OTRFiles, {}, 3); + auto wnd = std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetWindow()); + + wnd->SetRendererUCode(ucode_f3dex); + auto loader = context->GetResourceManager()->GetResourceLoader(); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Vec3f", static_cast(SF64::ResourceType::Vec3f), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Vec3s", static_cast(SF64::ResourceType::Vec3s), 0); @@ -61,9 +65,9 @@ GameEngine::GameEngine() { loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Vertex", static_cast(LUS::ResourceType::Vertex), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "DisplayList", static_cast(LUS::ResourceType::DisplayList), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Matrix", static_cast(LUS::ResourceType::Matrix), 0); - loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Array", static_cast(LUS::ResourceType::Array), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Blob", static_cast(LUS::ResourceType::Blob), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "KartAI", static_cast(MK64::ResourceType::KartAI), 0); + loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "CourseVtx", static_cast(MK64::ResourceType::CourseVertex), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "TrackSections", static_cast(MK64::ResourceType::TrackSection), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Waypoints", static_cast(MK64::ResourceType::Waypoints), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "SpawnData", static_cast(MK64::ResourceType::SpawnData), 0); diff --git a/src/port/GBIMiddleware.cpp b/src/port/GBIMiddleware.cpp index 361ca24e0..b1a03edee 100644 --- a/src/port/GBIMiddleware.cpp +++ b/src/port/GBIMiddleware.cpp @@ -2,7 +2,6 @@ #include "Engine.h" #include "DisplayList.h" -#include "Array.h" extern "C" int GameEngine_OTRSigCheck(const char* data); @@ -13,9 +12,6 @@ extern "C" void gSPDisplayList(Gfx* pkt, Gfx* dl) { auto resource = Ship::Context::GetInstance()->GetResourceManager()->LoadResource(imgData); auto res = std::static_pointer_cast(resource); dl = &res->Instructions[0]; - dl->words.trace.file = imgData; - dl->words.trace.idx = 0; - dl->words.trace.valid = true; } __gSPDisplayList(pkt, dl); @@ -41,9 +37,6 @@ extern "C" void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr) { case LUS::ResourceType::DisplayList: texAddr = reinterpret_cast(&std::static_pointer_cast(res)->Instructions[0]); break; - case LUS::ResourceType::Array: - texAddr = reinterpret_cast(std::static_pointer_cast(res)->Vertices.data()); - break; default: texAddr = reinterpret_cast(res->GetRawPointer()); break; diff --git a/src/port/resource/importers/CourseVtxFactory.cpp b/src/port/resource/importers/CourseVtxFactory.cpp new file mode 100644 index 000000000..226d16b85 --- /dev/null +++ b/src/port/resource/importers/CourseVtxFactory.cpp @@ -0,0 +1,35 @@ +#include "CourseVtxFactory.h" +#include "../type/CourseVtx.h" +#include "spdlog/spdlog.h" +#include "libultraship/libultra/gbi.h" + +namespace MK64 { + std::shared_ptr ResourceFactoryBinaryCourseVtxV0::ReadResource(std::shared_ptr file) { + if (!FileHasValidFormatAndReader(file)) { + return nullptr; + } + + auto cvtx = std::make_shared(file->InitData); + auto reader = std::get>(file->Reader); + + uint32_t count = reader->ReadUInt32(); + cvtx->CourseVtxList.reserve(count); + + for (uint32_t i = 0; i < count; i++) { + CourseVtxData data; + data.ob[0] = reader->ReadInt16(); + data.ob[1] = reader->ReadInt16(); + data.ob[2] = reader->ReadInt16(); + data.tc[0] = reader->ReadInt16(); + data.tc[1] = reader->ReadInt16(); + data.ca[0] = reader->ReadUByte(); + data.ca[1] = reader->ReadUByte(); + data.ca[2] = reader->ReadUByte(); + data.ca[3] = reader->ReadUByte(); + + cvtx->CourseVtxList.push_back(data); + } + + return cvtx; + } +} \ No newline at end of file diff --git a/src/port/resource/importers/CourseVtxFactory.h b/src/port/resource/importers/CourseVtxFactory.h new file mode 100644 index 000000000..9b093799f --- /dev/null +++ b/src/port/resource/importers/CourseVtxFactory.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Resource.h" +#include "ResourceFactoryBinary.h" + +namespace MK64 { +class ResourceFactoryBinaryCourseVtxV0 : public Ship::ResourceFactoryBinary { + public: + std::shared_ptr ReadResource(std::shared_ptr file) override; +}; + +} // namespace LUS diff --git a/src/port/resource/type/CourseVtx.cpp b/src/port/resource/type/CourseVtx.cpp new file mode 100644 index 000000000..5cec4a21a --- /dev/null +++ b/src/port/resource/type/CourseVtx.cpp @@ -0,0 +1,15 @@ +#include "CourseVtx.h" +#include "libultraship/libultra/gbi.h" + +namespace MK64 { +CourseVtxClass::CourseVtxClass() : Resource(std::shared_ptr()) { +} + +CourseVtxData* CourseVtxClass::GetPointer() { + return CourseVtxList.data(); +} + +size_t CourseVtxClass::GetPointerSize() { + return CourseVtxList.size() * sizeof(CourseVtxData); +} +} // namespace LUS diff --git a/src/port/resource/type/CourseVtx.h b/src/port/resource/type/CourseVtx.h new file mode 100644 index 000000000..8e9b42419 --- /dev/null +++ b/src/port/resource/type/CourseVtx.h @@ -0,0 +1,25 @@ +#pragma once + +#include "resource/Resource.h" +#include +#include + +typedef struct { + s16 ob[3]; /* x, y, z */ + s16 tc[2]; /* texture coord */ + s8 ca[4]; /* color & alpha */ +} CourseVtxData; + +namespace MK64 { +class CourseVtxClass : public Ship::Resource { + public: + using Resource::Resource; + + CourseVtxClass(); + + CourseVtxData* GetPointer() override; + size_t GetPointerSize() override; + + std::vector CourseVtxList; +}; +} // namespace LUS diff --git a/src/port/resource/type/TrackSections.h b/src/port/resource/type/TrackSections.h index 50a70c3bf..6861691af 100644 --- a/src/port/resource/type/TrackSections.h +++ b/src/port/resource/type/TrackSections.h @@ -5,7 +5,7 @@ #include typedef struct { - uintptr_t addr; + uint32_t addr; uint8_t surfaceType; uint8_t sectionId; uint16_t flags; diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index 1aa95adea..060185d3b 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -188,7 +188,8 @@ void DrawSettingsMenu(){ { // FPS Slider const int minFps = 30; static int maxFps; - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() + == Ship::WindowBackend::FAST3D_DXGI_DX11) { maxFps = 360; } else { maxFps = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate(); @@ -255,13 +256,15 @@ void DrawSettingsMenu(){ CVarSetInteger("gInterpolationFPS", currentFps); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); #else - bool matchingRefreshRate = - CVarGetInteger("gMatchRefreshRate", 0) && Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::DX11; + bool matchingRefreshRate = CVarGetInteger("gMatchRefreshRate", 0) + && Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() + != Ship::WindowBackend::FAST3D_DXGI_DX11; UIWidgets::CVarSliderInt((currentFps == 20) ? "FPS: Original (20)" : "FPS: %d", "gInterpolationFPS", minFps, maxFps, 1, { .disabled = matchingRefreshRate }); #endif - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() + == Ship::WindowBackend::FAST3D_DXGI_DX11) { UIWidgets::Tooltip( "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. This is purely " "visual and does not impact game logic, execution of glitches etc.\n\n" @@ -275,7 +278,8 @@ void DrawSettingsMenu(){ } } // END FPS Slider - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() + == Ship::WindowBackend::FAST3D_DXGI_DX11) { UIWidgets::Spacer(0); if (ImGui::Button("Match Refresh Rate")) { int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate(); @@ -290,7 +294,8 @@ void DrawSettingsMenu(){ UIWidgets::Tooltip("Matches interpolation value to the current game's window refresh rate"); - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() + == Ship::WindowBackend::FAST3D_DXGI_DX11) { UIWidgets::PaddedEnhancementSliderInt(CVarGetInteger("gExtraLatencyThreshold", 80) == 0 ? "Jitter fix: Off" : "Jitter fix: >= %d FPS", "##ExtraLatencyThreshold", "gExtraLatencyThreshold", 0, 360, "", 80, true, true, false); UIWidgets::Tooltip("When Interpolation FPS setting is at least this threshold, add one frame of input lag (e.g. 16.6 ms for 60 FPS) in order to avoid jitter. This setting allows the CPU to work on one frame while GPU works on the previous frame.\nThis setting should be used when your computer is too slow to do CPU + GPU work in time."); @@ -300,17 +305,17 @@ void DrawSettingsMenu(){ static std::unordered_map windowBackendNames = { - { Ship::WindowBackend::DX11, "DirectX" }, - { Ship::WindowBackend::SDL_OPENGL, "OpenGL"}, - { Ship::WindowBackend::SDL_METAL, "Metal" }, - { Ship::WindowBackend::GX2, "GX2"} + { Ship::WindowBackend::FAST3D_DXGI_DX11, "DirectX" }, + { Ship::WindowBackend::FAST3D_SDL_OPENGL, "OpenGL" }, + { Ship::WindowBackend::FAST3D_SDL_METAL, "Metal" }, }; ImGui::Text("Renderer API (Needs reload)"); Ship::WindowBackend runningWindowBackend = Ship::Context::GetInstance()->GetWindow()->GetWindowBackend(); Ship::WindowBackend configWindowBackend; int configWindowBackendId = Ship::Context::GetInstance()->GetConfig()->GetInt("Window.Backend.Id", -1); - if (configWindowBackendId != -1 && configWindowBackendId < static_cast(Ship::WindowBackend::BACKEND_COUNT)) { + if (configWindowBackendId != -1 + && configWindowBackendId < static_cast(Ship::WindowBackend::WINDOW_BACKEND_COUNT)) { configWindowBackend = static_cast(configWindowBackendId); } else { configWindowBackend = runningWindowBackend; diff --git a/src/racing/actors.c b/src/racing/actors.c index 2258a8069..c20309e53 100644 --- a/src/racing/actors.c +++ b/src/racing/actors.c @@ -333,16 +333,16 @@ void func_80297340(Camera *arg0) { if (D_800DC5BC != 0) { gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); - gSPDisplayList(gDisplayListHead++, &D_0D001C20); + gSPDisplayList(gDisplayListHead++, D_0D001C20); } else { - gSPDisplayList(gDisplayListHead++, &D_0D001B90); + gSPDisplayList(gDisplayListHead++, D_0D001B90); } } else if (D_800DC5BC != 0) { gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); - gSPDisplayList(gDisplayListHead++, &D_0D001C88); + gSPDisplayList(gDisplayListHead++, D_0D001C88); } else { - gSPDisplayList(gDisplayListHead++, &D_0D001BD8); + gSPDisplayList(gDisplayListHead++, D_0D001BD8); } } @@ -747,32 +747,32 @@ void func_8029AC18(Camera *camera, Mat4 arg1, struct Actor *arg2) { arg1[3][2] = arg2->pos[2]; if (render_set_position(arg1, 0) != 0) { - gSPDisplayList(gDisplayListHead++, &D_0D001750); + gSPDisplayList(gDisplayListHead++, D_0D001750); switch (arg2->state) { case 0: - gSPDisplayList(gDisplayListHead++, &D_0D001780); + gSPDisplayList(gDisplayListHead++, D_0D001780); break; case 1: - gSPDisplayList(gDisplayListHead++, &D_0D001798); + gSPDisplayList(gDisplayListHead++, D_0D001798); break; case 2: - gSPDisplayList(gDisplayListHead++, &D_0D0017B0); + gSPDisplayList(gDisplayListHead++, D_0D0017B0); break; case 3: - gSPDisplayList(gDisplayListHead++, &D_0D0017C8); + gSPDisplayList(gDisplayListHead++, D_0D0017C8); break; case 4: - gSPDisplayList(gDisplayListHead++, &D_0D0017E0); + gSPDisplayList(gDisplayListHead++, D_0D0017E0); break; case 5: - gSPDisplayList(gDisplayListHead++, &D_0D0017F8); + gSPDisplayList(gDisplayListHead++, D_0D0017F8); break; case 6: - gSPDisplayList(gDisplayListHead++, &D_0D001810); + gSPDisplayList(gDisplayListHead++, D_0D001810); break; case 7: - gSPDisplayList(gDisplayListHead++, &D_0D001828); + gSPDisplayList(gDisplayListHead++, D_0D001828); break; } } @@ -1028,16 +1028,16 @@ void spawn_course_actors(void) { struct ActorSpawnData *a_d_course_mario_raceway_piranha_plant_spawns = (struct ActorSpawnData *) LOAD_ASSET(d_course_mario_raceway_piranha_plant_spawns); struct ActorSpawnData *a_d_course_mario_raceway_item_box_spawns = (struct ActorSpawnData *) LOAD_ASSET(d_course_mario_raceway_item_box_spawns); - spawn_foliage(a_d_course_mario_raceway_tree_spawns); - spawn_piranha_plants(a_d_course_mario_raceway_piranha_plant_spawns); - spawn_all_item_boxes(a_d_course_mario_raceway_item_box_spawns); - vec3f_set(position, 150.0f, 40.0f, -1300.0f); - position[0] *= gCourseDirection; - add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN); - vec3f_set(position, 2520.0f, 0.0f, 1240.0f); - position[0] *= gCourseDirection; - actor = &gActorList[add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN)]; - actor->flags |= 0x4000; + //spawn_foliage(a_d_course_mario_raceway_tree_spawns); + //spawn_piranha_plants(a_d_course_mario_raceway_piranha_plant_spawns); + //spawn_all_item_boxes(a_d_course_mario_raceway_item_box_spawns); + // vec3f_set(position, 150.0f, 40.0f, -1300.0f); + // position[0] *= gCourseDirection; + // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN); + // vec3f_set(position, 2520.0f, 0.0f, 1240.0f); + // position[0] *= gCourseDirection; + // actor = &gActorList[add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN)]; + // actor->flags |= 0x4000; break; case COURSE_CHOCO_MOUNTAIN: spawn_all_item_boxes(d_course_choco_mountain_item_box_spawns); diff --git a/src/racing/collision.c b/src/racing/collision.c index 2b0d6d0fd..bf46fc602 100644 --- a/src/racing/collision.c +++ b/src/racing/collision.c @@ -9,6 +9,7 @@ #include "collision.h" #include "math_util.h" #include "code_800029B0.h" +#include // Used to delete the choco mountain guard rail void nullify_displaylist(uintptr_t addr) { @@ -1547,6 +1548,11 @@ void func_802AE434(Vtx *vtx1, Vtx *vtx2, Vtx *vtx3, s8 surfaceType, u16 sectionI s16 y3; s16 z3; + // printf("mesh index: %d ", D_8015F588); + // printf("sectionId: 0x%X ", sectionId); + // printf("surfaceType: 0x%X ", surfaceType); + + /* Unused variables placed around doubles for dramatic effect */ UNUSED s32 pad2[7]; @@ -1676,6 +1682,11 @@ void func_802AE434(Vtx *vtx1, Vtx *vtx2, Vtx *vtx3, s8 surfaceType, u16 sectionI gCourseMaxZ = maxZ; } + // printf("X 0x%X\n ", normalX); + // printf("Y 0x%X\n ", normalY); + // printf("Z 0x%X\n ", normalZ); + // printf("dist 0x%X\n\n", distance); + tile->height = normalX; tile->gravity = normalY; tile->rotation = normalZ; @@ -1747,6 +1758,17 @@ void set_vtx_from_tri2(u32 triangle1, u32 triangle2, s8 surfaceType, u16 section u32 vert5 = ( ( triangle2 & 0x0000FF00 ) >> 8 ) / 2; u32 vert6 = ( triangle2 & 0x000000FF ) / 2; + // printf("tr1: 0x%X \n", triangle1); + // printf("tr2: 0x%X \n", triangle2); + + // printf("\nv1 0x%X ", vert1); + // printf("v2 0x%X ", vert2); + // printf("v3 0x%X ", vert3); + // printf("v4 0x%X ", vert4); + // printf("v5 0x%X ", vert5); + // printf("v6 0x%X\n", vert6); + + Vtx *vtx1 = vtxBuffer[vert1]; Vtx *vtx2 = vtxBuffer[vert2]; Vtx *vtx3 = vtxBuffer[vert3]; @@ -1791,6 +1813,10 @@ void set_vtx_buffer(uintptr_t addr, u32 numVertices, u32 bufferIndex) { u32 i; Vtx *vtx = (Vtx *) addr; for (i = 0; i < numVertices; i++) { + //printf("VTX: 0x%llX",vtx); + if (vtx == 0) { + assert(false); + } vtxBuffer[bufferIndex] = vtx; vtx++; bufferIndex++; @@ -1977,6 +2003,7 @@ void set_vertex_data_with_default_section_id(Gfx *gfx, s8 surfaceType) { } extern u32 D_8015F58C; +u32 numTimes = 0; /** * Recursive search and set for vertex data @@ -1986,6 +2013,7 @@ void find_and_set_vertex_data(Gfx *addr, s8 surfaceType, u16 sectionId) { uintptr_t lo; uintptr_t hi; s32 i; + numTimes++; //printf("Initial\n"); //printf("ptr 0x%llX\n", &addr); //printf("w0 0x%llX\n", addr->words.w0); @@ -2009,20 +2037,20 @@ void find_and_set_vertex_data(Gfx *addr, s8 surfaceType, u16 sectionId) { // printf("ptr 0x%llX\n", &addr); // printf("op 0x%llX\n", opcode); - // printf("w0 0x%X\n", lo); - // printf("w1 0x%X\n", hi); + // printf("w0 0x%llX\n", lo); + // printf("w1 0x%llX\n", hi); if (opcode == (G_DL << 24)) { // G_DL's hi contains an addr to another DL. - Gfx *dl = segmented_gfx_to_virtual(hi); - // printf("DL: 0x%llX\n", &dl); - // printf(" w0 0x%X\n", dl->words.w0); - // printf(" w1 0x%X\n", dl->words.w1); + //Gfx *dl = segmented_gfx_to_virtual(hi); + // printf("DL: 0x%llX ", hi); + // printf(" w0 0x%llX", lo); + // printf(" w1 0x%llX\n", hi); - find_and_set_vertex_data((Gfx *) (dl), surfaceType, sectionId); + find_and_set_vertex_data((Gfx *) (hi), surfaceType, sectionId); } else if (opcode == (G_VTX << 24)) { - set_vtx_buffer(segmented_gfx_to_virtual(hi), (lo >> 10) & 0x3F, ((lo >> 16) & 0xFF) >> 1); + set_vtx_buffer((hi), (lo >> 10) & 0x3F, ((lo >> 16) & 0xFF) >> 1); } else if (opcode == (G_TRI1 << 24)) { D_8015F58C += 1; @@ -2030,6 +2058,7 @@ void find_and_set_vertex_data(Gfx *addr, s8 surfaceType, u16 sectionId) { } else if (opcode == (G_TRI2 << 24)) { D_8015F58C += 2; + set_vtx_from_tri2(lo, hi, surfaceType, sectionId); } else if (opcode == (G_QUAD << 24)) { diff --git a/src/racing/memory.c b/src/racing/memory.c index a7ecbaa42..cbdc942ac 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -15,7 +16,9 @@ #include "defines.h" #include #include +#include #include +#include s32 sGfxSeekPosition; s32 sPackedSeekPosition; @@ -95,17 +98,44 @@ void *segmented_to_virtual(const void *addr) { return (void *) ((gSegmentTable[segment] + offset)); } + void *segment_offset_to_virtual(uint32_t segment, uint32_t offset) { return (void *) (gSegmentTable[segment] + ( (offset / 8) * sizeof(Gfx) ) ); } +void *segment_vtx_to_virtual(size_t offset) { + printf("seg_vtx_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x04] + offset)); + + return (void *) (gSegmentTable[0x04] + (offset)); +} + +void *segmented_texture_to_virtual(size_t offset) { + printf("seg_texture_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x05] + offset)); + + return (void *) (gSegmentTable[0x05] + (offset)); +} + +void *segmented_uintptr_t_to_virtual(uintptr_t addr) { + uint32_t newAddr = (uint32_t) addr; + size_t segment = (uintptr_t) newAddr >> 24; + size_t offset = (uintptr_t) newAddr & 0x00FFFFFF; + + uint32_t numCommands = offset / 8; + offset = numCommands * sizeof(Gfx); + + printf("seg_gfx_to_virt: 0x%llX to 0x%llX\n", newAddr, (gSegmentTable[segment] + offset)); + + return (void *) ((gSegmentTable[segment] + offset)); +} + void *segmented_gfx_to_virtual(const void *addr) { size_t segment = (uintptr_t) addr >> 24; size_t offset = (uintptr_t) addr & 0x00FFFFFF; - offset = (offset / 8) * sizeof(Gfx); + uint32_t numCommands = offset / 8; + offset = numCommands * sizeof(Gfx); - printf("seg_gfx_to_virt: 0x%llX\n",addr); + printf("seg_gfx_to_virt: 0x%llX to 0x%llX\n", addr, (gSegmentTable[segment] + offset)); return (void *) ((gSegmentTable[segment] + offset)); } @@ -143,7 +173,7 @@ void initialize_memory_pool() { /** * @brief Allocates memory and adjusts gFreeMemorySize. */ -void *allocate_memory(uintptr_t size) { +void *allocate_memory(size_t size) { uintptr_t freeSpace; size = ALIGN16(size); @@ -437,19 +467,22 @@ UNUSED u8 *func_802A841C(u8* arg0, s32 arg1, s32 arg2) { } u8 *dma_textures(u8 texture[], size_t arg1, size_t arg2) { - // u8 *temp_v0; - // void *temp_a0; + u8 *temp_v0; + void *temp_a0; - // temp_v0 = (u8 *) gNextFreeMemoryAddress; - // temp_a0 = temp_v0 + arg2; - // arg1 = ALIGN16(arg1); - // arg2 = ALIGN16(arg2); - // osInvalDCache((void *) temp_a0, arg1); + u8* tex = (u8 *) LOAD_ASSET(texture); + + temp_v0 = (u8 *) gNextFreeMemoryAddress; + temp_a0 = temp_v0 + arg2; + arg1 = ALIGN16(arg1); + arg2 = ALIGN16(arg2); + //osInvalDCache((void *) temp_a0, arg1); // osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_other_texturesSegmentRomStart[SEGMENT_OFFSET(texture)], (void *)temp_a0, arg1, &gDmaMesgQueue); // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, (int) 1); // mio0decode((u8 *) temp_a0, temp_v0); - // gNextFreeMemoryAddress += arg2; - return texture; + memcpy(temp_v0, tex, arg2); + gNextFreeMemoryAddress += arg2; + return temp_v0; } uintptr_t MIO0_0F(u8 *arg0, uintptr_t arg1, uintptr_t arg2) { @@ -550,13 +583,13 @@ void unpack_displaylist(Gfx *arg0, u8 *args, UNUSED s8 opcode) { uintptr_t temp_t7 = ((args[sPackedSeekPosition++]) << 8 | temp_v0) * 8; arg0[sGfxSeekPosition].words.w0 = 0x06000000; // Segment seven addr - arg0[sGfxSeekPosition].words.w1 = 0x07000000 + temp_t7; + arg0[sGfxSeekPosition].words.w1 = segment_offset_to_virtual(0x07, temp_t7); // (0x07000000 + temp_t7); // (gSegmentTable[segment] + ( (offset / 8) * sizeof(Gfx) ) ); sGfxSeekPosition++; } // end displaylist void unpack_end_displaylist(Gfx *arg0, UNUSED u8 *arg1, UNUSED s8 arg2) { - arg0[sGfxSeekPosition].words.w0 = G_ENDDL << 24; + arg0[sGfxSeekPosition].words.w0 = (uintptr_t)(uint8_t)G_ENDDL << 24; arg0[sGfxSeekPosition].words.w1 = 0; sGfxSeekPosition++; } @@ -731,7 +764,7 @@ void unpack_tile_sync(Gfx *gfx, u8 *args, s8 opcode) { gfx[sGfxSeekPosition].words.w1 = tileSync->words.w1; sGfxSeekPosition++; - lo = (G_SETTILE << 24) | (fmt << 21) | (siz << 19) | (line << 9) | tmem; + lo = ((uintptr_t)(uint8_t)G_SETTILE << 24) | (fmt << 21) | (siz << 19) | (line << 9) | tmem; hi = ((cmt) << 18) | ((maskt) << 14) | ((cms) << 8) | ((masks) << 4); gfx[sGfxSeekPosition].words.w0 = lo; @@ -741,7 +774,7 @@ void unpack_tile_sync(Gfx *gfx, u8 *args, s8 opcode) { lrs = (width - 1) << 2; lrt = (height - 1) << 2; - lo = (G_SETTILESIZE << 24); + lo = ((uintptr_t)(uint8_t)G_SETTILESIZE << 24); hi = (lrs << 12) | lrt; gfx[sGfxSeekPosition].words.w0 = lo; @@ -764,6 +797,7 @@ void unpack_tile_load_sync(Gfx *gfx, u8 *args, s8 opcode) { uintptr_t siz; uintptr_t tmem; uintptr_t tile; + size_t offset; switch (opcode) { case 32: @@ -803,7 +837,8 @@ void unpack_tile_load_sync(Gfx *gfx, u8 *args, s8 opcode) { // Waa? var = args[sPackedSeekPosition]; // Generates a texture address. - addr = SEGMENT_ADDR(0x05, args[sPackedSeekPosition++] << 11); + offset = args[sPackedSeekPosition++] << 11; + addr = SEGMENT_ADDR(0x05, offset); sPackedSeekPosition++; arg = args[sPackedSeekPosition++]; siz = G_IM_SIZ_16b; @@ -812,16 +847,16 @@ void unpack_tile_load_sync(Gfx *gfx, u8 *args, s8 opcode) { // Generate gfx - lo = (G_SETTIMG << 24) | (fmt << 21) | (siz << 19); + lo = ((uintptr_t)(uint8_t)G_SETTIMG << 24) | (fmt << 21) | (siz << 19); gfx[sGfxSeekPosition].words.w0 = lo; - gfx[sGfxSeekPosition].words.w1 = addr; + gfx[sGfxSeekPosition].words.w1 = segmented_texture_to_virtual(offset); sGfxSeekPosition++; gfx[sGfxSeekPosition].words.w0 = tileSync->words.w0; gfx[sGfxSeekPosition].words.w1 = tileSync->words.w1; sGfxSeekPosition++; - lo = (G_SETTILE << 24) | (fmt << 21) | (siz << 19) | tmem; + lo = ((uintptr_t)(uint8_t)G_SETTILE << 24) | (fmt << 21) | (siz << 19) | tmem; hi = tile << 24; gfx[sGfxSeekPosition].words.w0 = lo; @@ -832,7 +867,7 @@ void unpack_tile_load_sync(Gfx *gfx, u8 *args, s8 opcode) { gfx[sGfxSeekPosition].words.w1 = loadSync->words.w1; sGfxSeekPosition++; - lo = G_LOADBLOCK << 24; + lo = (uintptr_t)(uint8_t)G_LOADBLOCK << 24; hi = (tile << 24) | (MIN((width * height) - 1, 0x7FF) << 12) | CALC_DXT(width, G_IM_SIZ_16b_BYTES); gfx[sGfxSeekPosition].words.w0 = lo; @@ -842,6 +877,7 @@ void unpack_tile_load_sync(Gfx *gfx, u8 *args, s8 opcode) { void unpack_texture_on(Gfx *arg0, UNUSED u8 *args, UNUSED s8 arg2) { Gfx macro[] = { gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON) }; + arg0[sGfxSeekPosition].words.w0 = macro->words.w0; arg0[sGfxSeekPosition].words.w1 = macro->words.w1; sGfxSeekPosition++; @@ -867,8 +903,8 @@ void unpack_vtx1(Gfx *gfx, u8 *args, UNUSED s8 arg2) { temp = args[sPackedSeekPosition++]; temp_t7_2 = temp & 0x3F; - gfx[sGfxSeekPosition].words.w0 = (G_VTX << 24) | (temp_t7_2 * 2 << 16) | (((temp_t7 << 10) + ((0x10 * temp_t7) - 1))); - gfx[sGfxSeekPosition].words.w1 = 0x04000000 + temp2; + gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_VTX << 24) | (temp_t7_2 * 2 << 16) | (((temp_t7 << 10) + ((0x10 * temp_t7) - 1))); + gfx[sGfxSeekPosition].words.w1 = (uintptr_t) segment_vtx_to_virtual(temp2); sGfxSeekPosition++; } @@ -882,8 +918,8 @@ void unpack_vtx2(Gfx *gfx, u8 *args, s8 arg2) { temp_t9 = arg2 - 50; - gfx[sGfxSeekPosition].words.w0 = (G_VTX << 24) | ((temp_t9 << 10) + (((temp_t9) * 0x10) - 1)); - gfx[sGfxSeekPosition].words.w1 = 0x4000000 + temp_v2; + gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_VTX << 24) | ((temp_t9 << 10) + (((temp_t9) * 0x10) - 1)); + gfx[sGfxSeekPosition].words.w1 = (uintptr_t) segment_vtx_to_virtual(temp_v2); sGfxSeekPosition++; } @@ -908,7 +944,7 @@ void unpack_triangle(Gfx *gfx, u8 *args, UNUSED s8 arg2) { phi_a2 |= (temp_v0 & 3) * 8; phi_a3 = (temp_v0 >> 2) & 0x1F; } - gfx[sGfxSeekPosition].words.w0 = (G_TRI1 << 24); + gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_TRI1 << 24); gfx[sGfxSeekPosition].words.w1 = ((phi_a0 * 2) << 16) | ((phi_a2 * 2) << 8) | (phi_a3 * 2); sGfxSeekPosition++; } @@ -954,7 +990,7 @@ void unpack_quadrangle(Gfx *gfx, u8 *args, UNUSED s8 arg2) { phi_a2 = (temp_v0 >> 2) & 0x1F; } gfx[sGfxSeekPosition].words.w0 = - (G_TRI2 << 24) | ((phi_a0 * 2) << 16) | ((phi_a3 * 2) << 8) | (phi_t0 * 2); + ((uintptr_t)(uint8_t)G_TRI2 << 24) | ((phi_a0 * 2) << 16) | ((phi_a3 * 2) << 8) | (phi_t0 * 2); gfx[sGfxSeekPosition].words.w1 = ((phi_t2 * 2) << 16) | ((phi_t1 * 2) << 8) | (phi_a2 * 2); sGfxSeekPosition++; } @@ -987,7 +1023,7 @@ void unpack_spline_3D(Gfx *gfx, u8 *arg1, UNUSED s8 arg2) { temp_v0 = arg1[sPackedSeekPosition++]; phi_a0 |= (temp_v0 & 0xF) * 2; } - gfx[sGfxSeekPosition].words.w0 = (G_LINE3D << 24); + gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_LINE3D << 24); gfx[sGfxSeekPosition].words.w1 = ((phi_a0 * 2) << 24) | ((phi_t0 * 2) << 16) | ((phi_a3 * 2) << 8) | (phi_a2 * 2); sGfxSeekPosition++; @@ -1027,6 +1063,7 @@ void displaylist_unpack(Gfx *gfx, u8 *data, uintptr_t arg2) { while(true) { + // Seek to the next byte opcode = packed_dl[sPackedSeekPosition++]; @@ -1367,6 +1404,14 @@ void *decompress_segments(u8 *start, u8 *end) { return (void *)freeSpace; } +extern const course_texture mario_raceway_textures[30]; + +/* To help verify if ptrs are pointing within segments see gfx_pc.cpp gfx_step() */ +uintptr_t vtxSegEnd; +uintptr_t dlSegEnd; +uintptr_t texSegEnd; size_t texSegSize; +Gfx *testaaa; + /** * @brief Loads & DMAs course data. Vtx, textures, displaylists, etc. * @param courseId @@ -1374,37 +1419,45 @@ void *decompress_segments(u8 *start, u8 *end) { void load_course(s32 courseId) { printf("Loading Course Data\n"); - // Extract packed DLs - u8 *packed = (u8 *) LOAD_ASSET(d_course_mario_raceway_packed_dls); - Gfx *gfx = (Gfx *) allocate_memory(sizeof(Gfx) * 3366); // Size of unpacked DLs - displaylist_unpack(gfx, packed, 0); - - gSegmentTable[7] = &gfx[0]; + testaaa = (Gfx *) LOAD_ASSET(d_course_mario_raceway_dl_0); // Convert course vtx to vtx CourseVtx *cvtx = (CourseVtx *) LOAD_ASSET(d_course_mario_raceway_vertex); Vtx *vtx = (Vtx *) allocate_memory(sizeof(Vtx) * 5757); - func_802A86A8(cvtx, vtx, 5757); gSegmentTable[4] = &vtx[0]; + func_802A86A8(cvtx, vtx, 5757); + vtxSegEnd = &vtx[5757]; + // Load and allocate memory for course textures + course_texture *asset = mario_raceway_textures; + u8 *freeMemory = NULL; + u8 *texture = NULL; + size_t size = 0; + texSegSize = 0; + while (asset->addr) { + size = ResourceGetTexSizeByName(asset->addr); + freeMemory = (u8 *) allocate_memory(size); + texture = (u8 *) LOAD_ASSET(asset->addr); + if (texture) { + if (asset == &mario_raceway_textures[0]) { + gSegmentTable[5] = &freeMemory[0]; + } + memcpy(freeMemory, texture, size); + texSegSize += size; + // printf("Texture Addr: 0x%llX, size 0x%X\n", &freeMemory[0], size); + } + asset++; + } + texSegEnd = &((u8 *)gSegmentTable[5])[texSegSize]; -// __gSPSegment(gDisplayListHead++, 7, &gfx); + // Extract packed DLs + u8 *packed = (u8 *) LOAD_ASSET(d_course_mario_raceway_packed_dls); + Gfx *gfx = (Gfx *) allocate_memory(sizeof(Gfx) * 3367); // Size of unpacked DLs + gSegmentTable[7] = &gfx[0]; + displaylist_unpack(gfx, packed, 0); + dlSegEnd = &gfx[3367]; - //printf("Course Data Loaded!\n"); - - // Future implementation for Extra mode and course stretching. - - // if (gIsMirrorMode) { - // for (size_t i = 0; i < sizeof(vtx); i++) { - // dest->v.ob[0] = -courseVtx->ob[0]; - // } - // } - - // if (vtxStretchY != 1.0f) { - // dest->v.ob[1] *= vtxStretchY; - // } - } diff --git a/src/racing/memory.h b/src/racing/memory.h index ed940453b..3a0c8f9d2 100644 --- a/src/racing/memory.h +++ b/src/racing/memory.h @@ -46,11 +46,14 @@ uintptr_t set_segment_base_addr(s32, void*); void *get_segment_base_addr(s32); void *segmented_to_virtual(const void *); void *segment_offset_to_virtual(uint32_t, uint32_t); +void *segment_vtx_to_virtual(size_t offset); +void *segmented_texture_to_virtual(size_t offset); +void *segmented_uintptr_t_to_virtual(uintptr_t); void *segmented_gfx_to_virtual(const void *); void move_segment_table_to_dmem(void); void initialize_memory_pool(void); void *decompress_segments(u8*, u8*); -void *allocate_memory(uintptr_t); +void *allocate_memory(size_t); void *load_data(uintptr_t, uintptr_t); void func_802A7D54(s32, s32); diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 5a625aef8..6789e38e0 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -20,6 +20,7 @@ #include "courses/all_course_packed.h" #include "courses/all_course_offsets.h" #include +#include s16 D_802B87B0 = 995; s16 D_802B87B4 = 1000; @@ -47,12 +48,12 @@ s32 func_80290C20(Camera *camera) { } void parse_course_displaylists(TrackSections *addr) { - TrackSections *first = addr; - TrackSections *section = addr; + TrackSections *first = &addr[0]; + TrackSections *section = &addr[0]; - while (addr->addr != 0) { - section->addr = segmented_gfx_to_virtual(addr->addr); - addr++; + while (section->addr != 0) { + printf("SECTION ADDR: 0x%X\n", section->addr); + section->addr = segmented_uintptr_t_to_virtual(section->addr); section++; } section = first; @@ -83,16 +84,15 @@ void parse_course_displaylists(TrackSections *addr) { extern u32 isFlycam; -void load_surface_map(Gfx *addr[], struct UnkStruct_800DC5EC *arg1) { +void load_surface_map(const char* addr[], struct UnkStruct_800DC5EC *arg1) { Player *player = arg1->player; Camera *camera = arg1->camera; - //! @todo Should be Gfx* - Gfx **gfx = &addr; s16 var_a3; s16 temp_v1; s16 sp1E; s16 temp_v0_3; u16 rot; + //printf("--------Loading Collision Mesh--------\n"); if (gIsMirrorMode) { rot = (u16) camera->rot[1]; if (rot < 0x2000) { @@ -126,6 +126,7 @@ void load_surface_map(Gfx *addr[], struct UnkStruct_800DC5EC *arg1) { arg1->playerDirection = var_a3; if (D_80152300[camera - camera1] == 1) { + printf("LOGIC\n"); sp1E = func_802ABD40(camera->unk_54.unk3A); temp_v0_3 = func_802ABD40(player->unk_110.unk3A); temp_v1 = sp1E - temp_v0_3; @@ -180,6 +181,7 @@ void load_surface_map(Gfx *addr[], struct UnkStruct_800DC5EC *arg1) { } } } else { + printf("ELSE\n"); temp_v1 = func_802ABD40(camera->unk_54.unk3A); if (camera->unk_54.unk3C[2] > 30.0f) { temp_v1 = arg1->pathCounter; @@ -191,7 +193,11 @@ void load_surface_map(Gfx *addr[], struct UnkStruct_800DC5EC *arg1) { arg1->pathCounter = temp_v1; temp_v1 = ((temp_v1 - 1) * 4) + var_a3; - gSPDisplayList(gDisplayListHead++, (Gfx *)&gfx[temp_v1]); + printf("----Collision DL Call----\n"); + //printf("temp_v1: %d\n", temp_v1); + //printf("Call: %s\n", addr[temp_v1]); + gSPDisplayList(gDisplayListHead++, addr[0]); + printf("--------Collision Mesh Loaded--------\n"); } void func_80291198(void) { @@ -618,7 +624,8 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) { // d_course_mario_raceway_packed_dl_14A0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070014A0))); printf("LOADING SURFACE MAP\n"); - load_surface_map(&mario_raceway_dls, arg0); + load_surface_map(mario_raceway_dls, arg0); + printf("SURFACE MAP LOADED\n"); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); @@ -631,7 +638,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) { gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070000E0))); // d_course_mario_raceway_packed_dl_160 gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x07000160))); - printf("SURFACE MAP LOADED\n"); + printf("RENDERED COURSE\n"); } void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) { @@ -1452,7 +1459,7 @@ void func_80295D88(void) { set_vertex_data_with_defaults((Gfx *) segmented_gfx_to_virtual(0x07002D68)); } TrackSections *section = (TrackSections *) LOAD_ASSET(d_course_mario_raceway_addr); - + parse_course_displaylists(section); func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; diff --git a/src/racing/render_courses.h b/src/racing/render_courses.h index db5bbc558..b893d1ffd 100644 --- a/src/racing/render_courses.h +++ b/src/racing/render_courses.h @@ -7,7 +7,7 @@ void func_8029122C(struct UnkStruct_800DC5EC*, s32); s32 func_80290C20(Camera*); void parse_course_displaylists(uintptr_t); -void load_surface_map(Gfx*, struct UnkStruct_800DC5EC*); +void load_surface_map(const char*[], struct UnkStruct_800DC5EC*); void func_80291198(void); void func_802911C4(void); void render_mario_raceway(struct UnkStruct_800DC5EC*); diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c index e07c7211e..0dc862112 100644 --- a/src/racing/skybox_and_splitscreen.c +++ b/src/racing/skybox_and_splitscreen.c @@ -321,7 +321,7 @@ UNUSED Gfx D_802B8A90[] = { }; struct Skybox sSkyColors[] = { - #include "assets/course_metadata/sSkyColors.inc.c" + #include "course_metadata/sSkyColors.inc.c" }; @@ -350,7 +350,7 @@ struct Skybox sSkyColors[] = { // }; struct Skybox sSkyColors2[] = { - #include "assets/course_metadata/sSkyColors2.inc.c" + #include "course_metadata/sSkyColors2.inc.c" }; void func_802A450C(Vtx *skybox) { diff --git a/src/render_objects.c b/src/render_objects.c index 0d1f4eccf..935a583c3 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -46,7 +46,7 @@ void func_800431B0(Vec3f pos, Vec3su orientation, f32 scale, Vtx *vtx) { void func_80043220(Vec3f pos, Vec3su orientation, f32 scale, Gfx *gfx) { rsp_set_matrix_transformation(pos, orientation, scale); - gSPDisplayList(gDisplayListHead++, &D_0D0077A0); + gSPDisplayList(gDisplayListHead++, D_0D0077A0); gSPDisplayList(gDisplayListHead++, gfx); } @@ -227,16 +227,16 @@ void load_texture_block_i8_nomirror(u8 *texture, s32 width, s32 height) { void func_80044924(u8 *texture, s32 width, s32 height) { // This macro ought to be equivalent to the block of macros below but it doesn't match // See comment above the `gDPLoadBlock` macro - // gDPLoadTextureBlock_4b(gDisplayListHead++, texture, G_IM_FMT_I, width, height, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(gDisplayListHead++, texture, G_IM_FMT_I, width, height, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, texture); - gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, G_TX_RENDERTILE, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - // The last argument to this macro really should be `CALC_DXT_4b(width)` but that creates a massive diff - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, (((width * height) + 3) >> 2) - 1, ((width / 16) + 2047) / (width / 16)); - gDPPipeSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_4b, (((width >> 1) + 7) >> 3), G_TX_RENDERTILE, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (width-1) << G_TEXTURE_IMAGE_FRAC, (height-1) << G_TEXTURE_IMAGE_FRAC); + // gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, texture); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, G_TX_RENDERTILE, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD); + // gDPLoadSync(gDisplayListHead++); + // // The last argument to this macro really should be `CALC_DXT_4b(width)` but that creates a massive diff + // gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, (((width * height) + 3) >> 2) - 1, ((width / 16) + 2047) / (width / 16)); + // gDPPipeSync(gDisplayListHead++); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_4b, (((width >> 1) + 7) >> 3), G_TX_RENDERTILE, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD); + // gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (width-1) << G_TEXTURE_IMAGE_FRAC, (height-1) << G_TEXTURE_IMAGE_FRAC); } UNUSED void func_80044AB8(u8 *texture, s32 width, s32 height) { @@ -3795,7 +3795,7 @@ void func_80054D00(s32 objectIndex, s32 cameraId) { D_80183E80[0] = (s16) gObjectList[objectIndex].orientation[0]; D_80183E80[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; - func_80048130(gObjectList[objectIndex].pos, (u16 *) D_80183E80, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, D_0D0062B0, 0x00000020, 0x00000040, 0x00000020, 0x00000040, 5); + func_80048130(gObjectList[objectIndex].pos, (u16 *) D_80183E80, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, LOAD_ASSET(D_0D0062B0), 0x00000020, 0x00000040, 0x00000020, 0x00000040, 5); } } } diff --git a/src/render_player.c b/src/render_player.c index e50d8fa85..3ed871148 100644 --- a/src/render_player.c +++ b/src/render_player.c @@ -57,7 +57,7 @@ u16 gPlayerBlueEffect[8]; u16 gPlayerCyanEffect[8]; u16 gPlayerMagentaEffect[8]; u16 gPlayerYellowEffect[8]; -//if it's also a color effect like before +// If it's also a colour effect like before UNUSED u16 gPlayerWhiteEffect[8]; s32 D_80164B80[296]; s16 D_80165020[40]; @@ -81,7 +81,7 @@ void func_8001F980(s32 *arg0, s32 *arg1) { *arg1 = 0; } -void func_8001F9E4(Player *player, Camera *camera, s8 arg2) { +void func_8001F9E4(Player *player, Camera *camera, s8 screenId) { UNUSED s32 pad; s32 sp30; s32 sp2C; @@ -90,14 +90,14 @@ void func_8001F9E4(Player *player, Camera *camera, s8 arg2) { get_player_index_for_player(player); func_8001F980(&sp30, &sp2C); - player->unk_002 &= ~(2 << (arg2 * 4)); - player->unk_002 &= ~(8 << (arg2 * 4)); + player->unk_002 &= ~(2 << (screenId * 4)); + player->unk_002 &= ~(8 << (screenId * 4)); if (check_player_camera_collision(player, camera, (f32) (D_80165578 + sp30), (f32) (D_8016557A + sp2C)) == 1) { - player->unk_002 |= 2 << (arg2 * 4); + player->unk_002 |= 2 << (screenId * 4); } if (check_player_camera_collision(player, camera, (f32) D_80165580, (f32) D_80165582) == 1) { - player->unk_002 |= 8 << (arg2 * 4); + player->unk_002 |= 8 << (screenId * 4); } } @@ -179,7 +179,7 @@ u16 func_8001FD78(Player *player, f32 posX, UNUSED f32 arg2, f32 posZ) { return ret; } -void init_render_player(Player *player, Camera *camera, s8 playerId, s8 playerRenderId) { +void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId) { UNUSED s32 pad[4]; s32 sp4C; s32 sp48; @@ -188,64 +188,64 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 playerRe s32 temp_v0_2; if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) { - func_8001F9E4(player, camera, playerRenderId); - temp_v0 = 2 << (playerRenderId << 2); + func_8001F9E4(player, camera, screenId); + temp_v0 = 2 << (screenId << 2); if (temp_v0 == (player->unk_002 & temp_v0)) { if (!(player->type & PLAYER_START_SEQUENCE)) { - func_8002934C(player, camera, playerRenderId, playerId); + func_8002934C(player, camera, screenId, playerId); } else { - func_8002934C(player, camera, playerRenderId, playerId); + func_8002934C(player, camera, screenId, playerId); player->slopeAccel = 0; player->unk_206 = 0; - player->unk_050[playerRenderId] = 0; + player->unk_050[screenId] = 0; } } func_8001F980(&sp4C, &sp48); - temp_v0_2 = 1 << (playerRenderId << 2); + temp_v0_2 = 1 << (screenId << 2); if ((temp_v0 == (player->unk_002 & temp_v0)) && (temp_v0_2 == (player->unk_002 & temp_v0_2))) { if ((check_player_camera_collision(player, camera, D_80165570 + sp4C, D_80165572 + sp48) == 1) & 0xFFFF) { D_80164AB0[gPlayersToRenderCount] = (s16) playerId; - D_80164AC0[gPlayersToRenderCount] = (s16) playerRenderId; + D_80164AC0[gPlayersToRenderCount] = (s16) screenId; D_80164AD0[gPlayersToRenderCount] = player; gPlayersToRenderCount += 1; - D_80165190[playerRenderId][playerId] = 0; - D_801650D0[playerRenderId][playerId] = player->animFrameSelector[playerRenderId]; - D_80165110[playerRenderId][playerId] = player->animGroupSelector[playerRenderId]; - D_80165150[playerRenderId][playerId] = player->unk_0A8; - D_801651D0[playerRenderId][playerId] += 1; - if (D_801651D0[playerRenderId][playerId] == 2) { - D_801651D0[playerRenderId][playerId] = 0; + D_80165190[screenId][playerId] = 0; + D_801650D0[screenId][playerId] = player->animFrameSelector[screenId]; + D_80165110[screenId][playerId] = player->animGroupSelector[screenId]; + D_80165150[screenId][playerId] = player->unk_0A8; + D_801651D0[screenId][playerId] += 1; + if (D_801651D0[screenId][playerId] == 2) { + D_801651D0[screenId][playerId] = 0; } } else { if ((check_player_camera_collision(player, camera, D_80165574 + sp4C, D_80165576) == 1) & 0xFFFF) { - if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((D_801650D0[playerRenderId][playerId] - player->animFrameSelector[playerRenderId]) > 0x13) || ((D_801650D0[playerRenderId][playerId] - player->animFrameSelector[playerRenderId]) < -0x13) || (D_80165190[playerRenderId][playerId] == (s16) 1U)) { + if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) { D_80164AB0[gPlayersToRenderCount] = (s16) playerId; - D_80164AC0[gPlayersToRenderCount] = (s16) playerRenderId; + D_80164AC0[gPlayersToRenderCount] = (s16) screenId; D_80164AD0[gPlayersToRenderCount] = player; gPlayersToRenderCount += 1; - D_801650D0[playerRenderId][playerId] = player->animFrameSelector[playerRenderId]; - D_80165110[playerRenderId][playerId] = player->animGroupSelector[playerRenderId]; - D_80165150[playerRenderId][playerId] = player->unk_0A8; - D_80165190[playerRenderId][playerId] = 0; - D_801651D0[playerRenderId][playerId] += 1; - if (D_801651D0[playerRenderId][playerId] == 2) { - D_801651D0[playerRenderId][playerId] = 0; + D_801650D0[screenId][playerId] = player->animFrameSelector[screenId]; + D_80165110[screenId][playerId] = player->animGroupSelector[screenId]; + D_80165150[screenId][playerId] = player->unk_0A8; + D_80165190[screenId][playerId] = 0; + D_801651D0[screenId][playerId] += 1; + if (D_801651D0[screenId][playerId] == 2) { + D_801651D0[screenId][playerId] = 0; } } } else { if (( - (D_801650D0[playerRenderId][playerId] - player->animFrameSelector[playerRenderId]) > 0x13) || ((D_801650D0[playerRenderId][playerId] - player->animFrameSelector[playerRenderId]) < -0x13) || (D_80165190[playerRenderId][playerId] == (s16) 1U)) { + (D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) { D_80164AB0[gPlayersToRenderCount] = (s16) playerId; - D_80164AC0[gPlayersToRenderCount] = (s16) playerRenderId; + D_80164AC0[gPlayersToRenderCount] = (s16) screenId; D_80164AD0[gPlayersToRenderCount] = player; gPlayersToRenderCount += 1; - D_801650D0[playerRenderId][playerId] = (s16) player->animFrameSelector[playerRenderId]; - D_80165110[playerRenderId][playerId] = player->animGroupSelector[playerRenderId]; - D_80165150[playerRenderId][playerId] = player->unk_0A8; - D_80165190[playerRenderId][playerId] = 0; - D_801651D0[playerRenderId][playerId] += 1; - if (D_801651D0[playerRenderId][playerId] == 2) { - D_801651D0[playerRenderId][playerId] = 0; + D_801650D0[screenId][playerId] = (s16) player->animFrameSelector[screenId]; + D_80165110[screenId][playerId] = player->animGroupSelector[screenId]; + D_80165150[screenId][playerId] = player->unk_0A8; + D_80165190[screenId][playerId] = 0; + D_801651D0[screenId][playerId] += 1; + if (D_801651D0[screenId][playerId] == 2) { + D_801651D0[screenId][playerId] = 0; } } } @@ -257,7 +257,7 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 playerRe void func_80020524(void) { s16 i; - func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]]); + func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); func_8006E5AC(gPlayerOneCopy, 0, 0); func_8006E5AC(gPlayerTwo, 1, 0); func_8006E5AC(gPlayerThree, 2, 0); @@ -272,21 +272,32 @@ void func_80020524(void) { for (i = 1; i < gPlayersToRenderCount; i++) { - func_80027560(D_80164AD0[i], D_80164AB0[i], D_80164AC0[i], D_80164AC0[i], D_801651D0[D_80164AC0[i]][D_80164AB0[i]]); + func_80027560(D_80164AD0[i], D_80164AB0[i], D_80164AC0[i], D_80164AC0[i], D_801651D0[D_80164AC0[i]][D_80164AB0[i]], i); - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + //size_t textureSize = ResourceGetSizeByName(texture); + //printf("test %s\n",texture); + // memcpy(vAddr, texture, textureSize); + + //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, +// D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array); + + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, 0x1000); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array); + //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array); + + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); + } void func_8002088C(void) { s16 var_s0; - func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]]); func_8006E634(gPlayerOneCopy, 0, 1); func_8006E634(gPlayerTwo, 1, 1); func_8006E634(gPlayerThree, 2, 1); @@ -299,51 +310,59 @@ void func_8002088C(void) { } osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) { - func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0], D_80164AC0[var_s0], D_80164AC0[var_s0], D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]); - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0], D_80164AC0[var_s0], D_80164AC0[var_s0], D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0); + //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array); + + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00, 0x1000); + + //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array); + //func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); + + //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array); + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); } void func_80020BF4(void) { s16 var_s0; - func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]]); func_8006E6BC(gPlayerOneCopy, 0, 2); func_8006E6BC(gPlayerTwo, 1, 2); func_8006E6BC(gPlayerThree, 2, 2); func_8006E6BC(gPlayerFour, 3, 2); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) { - func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]); - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0); + // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array); + // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array); + //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); + // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array); } void func_80020F1C(void) { s16 var_s0; - func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]]); func_8006E744(gPlayerOneCopy, 0, 3); func_8006E744(gPlayerTwo, 1, 3); func_8006E744(gPlayerThree, 2, 3); func_8006E744(gPlayerFour, 3, 3); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) { - func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]); - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array); - osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); + func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0); + // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array); + // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, - D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array); + //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); + // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, + // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array); } void try_render_player(Player *player, s8 playerId, s8 arg2) { @@ -351,7 +370,7 @@ void try_render_player(Player *player, s8 playerId, s8 arg2) { if (((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) && ((player->type & PLAYER_UNKNOWN_0x40) == 0)) { if ((player->unk_002 & 2 << (arg2 * 4)) == 2 << (arg2 * 4)) { - player_render(player, playerId, arg2); + render_player(player, playerId, arg2); } } } @@ -1665,40 +1684,40 @@ void player_ice_reflection_render(Player *player, s8 playerId, s8 arg2, s8 arg3) gMatrixEffectCount += 1; } -void player_render(Player *player, s8 playerId, s8 arg2) { +void render_player(Player *player, s8 playerId, s8 screenId) { UNUSED s32 pad[2]; s32 temp_t1; s32 var_v1; OSMesg *sp34; - func_80026B4C(player, playerId, arg2, D_801651D0[arg2][playerId]); - if (!(player->unk_002 & (4 << (arg2 * 4)))) { + func_80026B4C(player, playerId, screenId, D_801651D0[screenId][playerId]); + if (!(player->unk_002 & (4 << (screenId * 4)))) { var_v1 = 0; } else { var_v1 = 8; } - func_80023BF0(player, playerId, arg2, var_v1); - temp_t1 = 8 << (arg2 * 4); + func_80023BF0(player, playerId, screenId, var_v1); + temp_t1 = 8 << (screenId * 4); if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->unk_110.unk3C[2] <= 50.0f) && (player->surfaceType != ICE)) { if ((player->effects & BOO_EFFECT) == BOO_EFFECT) { - if (playerId == arg2) { - render_player_shadow(player, playerId, arg2); + if (playerId == screenId) { + render_player_shadow(player, playerId, screenId); } } else { - render_player_shadow(player, playerId, arg2); + render_player_shadow(player, playerId, screenId); } } if ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB) { - kart_render(player, playerId, arg2, var_v1); + kart_render(player, playerId, screenId, var_v1); } else { - ghost_render(player, playerId, arg2, var_v1); + ghost_render(player, playerId, screenId, var_v1); } osRecvMesg(&gDmaMesgQueue, (OSMesg *) &sp34, OS_MESG_BLOCK); if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->surfaceType == ICE) && ((player->unk_0CA & 1) != 1) && (player->unk_110.unk3C[2] <= 30.0f)) { - player_ice_reflection_render(player, playerId, arg2, var_v1); + player_ice_reflection_render(player, playerId, screenId, var_v1); } if (player->boostPower >= 2.0f) { - func_80025DE8(player, playerId, arg2, var_v1); + func_80025DE8(player, playerId, screenId, var_v1); } } @@ -1731,27 +1750,30 @@ void func_80026A48(Player *player, s8 arg1) { #define D_802F1F80_WHEEL(a, b, c) &D_802F1F80[a][b][(c * 0x100) + 0xC0] #endif -void func_80026B4C(Player *player, s8 playerId, s8 arg2, s8 arg3) { - s16 temp_t0 = D_801650D0[arg2][playerId]; - s16 temp_t1 = D_80165110[arg2][playerId]; +void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) { + s16 temp_t0 = D_801650D0[screenId][playerId]; + s16 temp_t1 = D_80165110[screenId][playerId]; s16 temp_t2 = player->unk_240; s16 temp_num = 0x40; // setting this as a variable gets rid of regalloc + u8 *wheel0 = LOAD_ASSET(D_800DDE34[player->characterId][temp_t1]); + u8 *wheel1 = LOAD_ASSET(D_800DDE54[player->characterId][temp_t1]); + if (((player->effects & 0x4000) == 0x4000) && ((player->type & PLAYER_START_SEQUENCE) == 0)) { if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40) && ((player->effects & 0x20000) != 0x20000) && ((player->effects & 0x80000) != 0x80000) && ((player->effects & 0x800000) != 0x800000) && ((player->unk_044 & 0x800) == 0)) { if (temp_t0 <= 20) { - func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } else { if (temp_t0 == 0) { - func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } } else { @@ -1760,15 +1782,15 @@ void func_80026B4C(Player *player, s8 playerId, s8 arg2, s8 arg3) { && ((player->effects & 0x20000) != 0x20000) && ((player->unk_044 & 0x800) == 0)) { if (temp_t0 <= 20) { - func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } else { if (temp_t0 == 0) { - func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, arg2, playerId), 0x80); + func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } } diff --git a/src/render_player.h b/src/render_player.h index 2a66f3197..345ab2ae8 100644 --- a/src/render_player.h +++ b/src/render_player.h @@ -58,7 +58,7 @@ void kart_render(Player*, s8, s8, s8); void ghost_render(Player*, s8, s8, s8); void func_80025DE8(Player*, s8, s8, s8); void player_ice_reflection_render(Player*, s8, s8, s8); -void player_render(Player*, s8, s8); +void render_player(Player*, s8, s8); void func_80026A48(Player*, s8); void func_80026B4C(Player*, s8, s8, s8); void func_80030A34(Player*); diff --git a/src/spawn_players.c b/src/spawn_players.c index 9ce33bc61..2176fd7a1 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -1071,29 +1071,31 @@ void func_8003CD78(void) { func_8003BE30(); } -void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 arg3) { +void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 screenId) { if (player->type & PLAYER_EXISTS) { - if (arg3 == 0) { - func_8002D268(player, camera, arg3, playerId); + if (screenId == 0) { + func_8002D268(player, camera, screenId, playerId); } - func_8002934C(player, camera, arg3, playerId); - if ((arg3 == 0) || (arg3 == 1)) { - load_kart_palette(player, playerId, arg3, 0); - load_kart_palette(player, playerId, arg3, 1); - load_kart_texture(player, playerId, arg3, arg3, 0); - mio0decode((u8 *) &D_802DFB80[0][arg3][playerId], (u8 *) &D_802BFB80.arraySize8[0][arg3][playerId]); + func_8002934C(player, camera, screenId, playerId); + if ((screenId == 0) || (screenId == 1)) { + load_kart_palette(player, playerId, screenId, 0); + load_kart_palette(player, playerId, screenId, 1); + load_kart_texture(player, playerId, screenId, screenId, 0); + //mio0decode((u8 *) &D_802DFB80[0][arg3][playerId], (u8 *) &D_802BFB80.arraySize8[0][arg3][playerId]); + //memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000); } else { - load_kart_palette(player, playerId, arg3, 0); - load_kart_palette(player, playerId, arg3, 1); - load_kart_texture(player, (s8) (playerId + 4), arg3, (s8) (arg3 - 2), 0); - mio0decode((u8 *) &D_802DFB80[0][arg3 - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][arg3 - 2][playerId + 4]); + load_kart_palette(player, playerId, screenId, 0); + load_kart_palette(player, playerId, screenId, 1); + load_kart_texture(player, (s8) (playerId + 4), screenId, (s8) (screenId - 2), 0); + //mio0decode((u8 *) &D_802DFB80[0][arg3 - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][arg3 - 2][playerId + 4]); + //memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000); } - D_801650D0[arg3][playerId] = player->animFrameSelector[arg3]; - D_80165110[arg3][playerId] = player->animGroupSelector[arg3]; - D_80165150[arg3][playerId] = player->unk_0A8; - D_801651D0[arg3][playerId] = 0; - player_render(player, playerId, arg3); + D_801650D0[screenId][playerId] = player->animFrameSelector[screenId]; + D_80165110[screenId][playerId] = player->animGroupSelector[screenId]; + D_80165150[screenId][playerId] = player->unk_0A8; + D_801651D0[screenId][playerId] = 0; + render_player(player, playerId, screenId); } } diff --git a/tools/torch b/tools/torch index 45e6853e3..76e90b4dd 160000 --- a/tools/torch +++ b/tools/torch @@ -1 +1 @@ -Subproject commit 45e6853e315933d57a0e7213a2d5590fb74f628a +Subproject commit 76e90b4ddc9c215132c39ebf8433d5f88813b368 diff --git a/torch b/torch new file mode 160000 index 000000000..6b1f46c81 --- /dev/null +++ b/torch @@ -0,0 +1 @@ +Subproject commit 6b1f46c81d0cff15f141820fa351d1874cca9f05 diff --git a/yamls/us/common_data.yml b/yamls/us/common_data.yml index 1e11151b5..8a90d43bf 100644 --- a/yamls/us/common_data.yml +++ b/yamls/us/common_data.yml @@ -47,7 +47,6 @@ common_tlut_finish_line_banner: type: texture ctype: u16 offset: 0x0 - size: 0x200 width: 16 height: 16 format: RGBA16 diff --git a/yamls/us/data_segment2.yml b/yamls/us/data_segment2.yml index d07c2f3b1..c998b2392 100644 --- a/yamls/us/data_segment2.yml +++ b/yamls/us/data_segment2.yml @@ -1,4 +1,7 @@ :config: + external_files: + - "yamls/us\\startup_logo.yml" + - "yamls/us\\common_data.yml" segments: - [0x02, 0x12AAE0] - [0x0D, 0x132B50] diff --git a/yamls/us/mario_raceway_data.yml b/yamls/us/mario_raceway_data.yml index 83b13ee51..c536ad684 100644 --- a/yamls/us/mario_raceway_data.yml +++ b/yamls/us/mario_raceway_data.yml @@ -1,6 +1,7 @@ :config: segments: - [0x06, 0x8284D0] + - [0x07, 0x800000] header: code: - '#include ' @@ -8,287 +9,352 @@ - '#include ' - '#include ' - '#include ' -d_course_mario_raceway_vertex: - symbol: d_course_mario_raceway_data - type: blob - size: 0x13AD6 - offset: 0x0 + references_packed_displaylists: true d_course_mario_raceway_dl_0: symbol: d_course_mario_raceway_dl_0 type: gfx offset: 0x0 + otr_mode: index d_course_mario_raceway_dl_E8: symbol: d_course_mario_raceway_dl_E8 type: gfx offset: 0xE8 + otr_mode: index d_course_mario_raceway_dl_1D0: symbol: d_course_mario_raceway_dl_1D0 type: gfx offset: 0x1D0 + otr_mode: index d_course_mario_raceway_dl_2C8: symbol: d_course_mario_raceway_dl_2C8 type: gfx offset: 0x2C8 + otr_mode: index d_course_mario_raceway_dl_3A8: symbol: d_course_mario_raceway_dl_3A8 type: gfx offset: 0x3A8 + otr_mode: index d_course_mario_raceway_dl_478: symbol: d_course_mario_raceway_dl_478 type: gfx offset: 0x478 + otr_mode: index d_course_mario_raceway_dl_568: symbol: d_course_mario_raceway_dl_568 type: gfx offset: 0x568 + otr_mode: index d_course_mario_raceway_dl_668: symbol: d_course_mario_raceway_dl_668 type: gfx offset: 0x668 + otr_mode: index d_course_mario_raceway_dl_750: symbol: d_course_mario_raceway_dl_750 type: gfx offset: 0x750 + otr_mode: index d_course_mario_raceway_dl_828: symbol: d_course_mario_raceway_dl_828 type: gfx offset: 0x828 + otr_mode: index d_course_mario_raceway_dl_928: symbol: d_course_mario_raceway_dl_928 type: gfx offset: 0x928 + otr_mode: index d_course_mario_raceway_dl_A00: symbol: d_course_mario_raceway_dl_A00 type: gfx offset: 0xA00 + otr_mode: index d_course_mario_raceway_dl_B08: symbol: d_course_mario_raceway_dl_B08 type: gfx offset: 0xB08 + otr_mode: index d_course_mario_raceway_dl_C20: symbol: d_course_mario_raceway_dl_C20 type: gfx offset: 0xC20 + otr_mode: index d_course_mario_raceway_dl_DC8: symbol: d_course_mario_raceway_dl_DC8 type: gfx offset: 0xDC8 + otr_mode: index d_course_mario_raceway_dl_F60: symbol: d_course_mario_raceway_dl_F60 type: gfx offset: 0xF60 + otr_mode: index d_course_mario_raceway_dl_10A8: symbol: d_course_mario_raceway_dl_10A8 type: gfx offset: 0x10A8 + otr_mode: index d_course_mario_raceway_dl_1210: symbol: d_course_mario_raceway_dl_1210 type: gfx offset: 0x1210 + otr_mode: index d_course_mario_raceway_dl_1408: symbol: d_course_mario_raceway_dl_1408 type: gfx offset: 0x1408 + otr_mode: index d_course_mario_raceway_dl_15C8: symbol: d_course_mario_raceway_dl_15C8 type: gfx offset: 0x15C8 + otr_mode: index d_course_mario_raceway_dl_1740: symbol: d_course_mario_raceway_dl_1740 type: gfx offset: 0x1740 + otr_mode: index d_course_mario_raceway_dl_1850: symbol: d_course_mario_raceway_dl_1850 type: gfx offset: 0x1850 + otr_mode: index d_course_mario_raceway_dl_1A30: symbol: d_course_mario_raceway_dl_1A30 type: gfx offset: 0x1A30 + otr_mode: index d_course_mario_raceway_dl_1B70: symbol: d_course_mario_raceway_dl_1B70 type: gfx offset: 0x1B70 + otr_mode: index d_course_mario_raceway_dl_1CF8: symbol: d_course_mario_raceway_dl_1CF8 type: gfx offset: 0x1CF8 + otr_mode: index d_course_mario_raceway_dl_1DE0: symbol: d_course_mario_raceway_dl_1DE0 type: gfx offset: 0x1DE0 + otr_mode: index d_course_mario_raceway_dl_1F68: symbol: d_course_mario_raceway_dl_1F68 type: gfx offset: 0x1F68 + otr_mode: index d_course_mario_raceway_dl_20A0: symbol: d_course_mario_raceway_dl_20A0 type: gfx offset: 0x20A0 + otr_mode: index d_course_mario_raceway_dl_21E8: symbol: d_course_mario_raceway_dl_21E8 type: gfx offset: 0x21E8 + otr_mode: index d_course_mario_raceway_dl_22E0: symbol: d_course_mario_raceway_dl_22E0 type: gfx offset: 0x22E0 + otr_mode: index d_course_mario_raceway_dl_2418: symbol: d_course_mario_raceway_dl_2418 type: gfx offset: 0x2418 + otr_mode: index d_course_mario_raceway_dl_2558: symbol: d_course_mario_raceway_dl_2558 type: gfx offset: 0x2558 + otr_mode: index d_course_mario_raceway_dl_2680: symbol: d_course_mario_raceway_dl_2680 type: gfx offset: 0x2680 + otr_mode: index d_course_mario_raceway_dl_2790: symbol: d_course_mario_raceway_dl_2790 type: gfx offset: 0x2790 + otr_mode: index d_course_mario_raceway_dl_28B0: symbol: d_course_mario_raceway_dl_28B0 type: gfx offset: 0x28B0 + otr_mode: index d_course_mario_raceway_dl_2A10: symbol: d_course_mario_raceway_dl_2A10 type: gfx offset: 0x2A10 + otr_mode: index d_course_mario_raceway_dl_2B40: symbol: d_course_mario_raceway_dl_2B40 type: gfx offset: 0x2B40 + otr_mode: index d_course_mario_raceway_dl_2C98: symbol: d_course_mario_raceway_dl_2C98 type: gfx offset: 0x2C98 + otr_mode: index d_course_mario_raceway_dl_2DC0: symbol: d_course_mario_raceway_dl_2DC0 type: gfx offset: 0x2DC0 + otr_mode: index d_course_mario_raceway_dl_2EF8: symbol: d_course_mario_raceway_dl_2EF8 type: gfx offset: 0x2EF8 + otr_mode: index d_course_mario_raceway_dl_3038: symbol: d_course_mario_raceway_dl_3038 type: gfx offset: 0x3038 + otr_mode: index d_course_mario_raceway_dl_31F0: symbol: d_course_mario_raceway_dl_31F0 type: gfx offset: 0x31F0 + otr_mode: index d_course_mario_raceway_dl_32D8: symbol: d_course_mario_raceway_dl_32D8 type: gfx offset: 0x32D8 + otr_mode: index d_course_mario_raceway_dl_3458: symbol: d_course_mario_raceway_dl_3458 type: gfx offset: 0x3458 + otr_mode: index d_course_mario_raceway_dl_35D0: symbol: d_course_mario_raceway_dl_35D0 type: gfx offset: 0x35D0 + otr_mode: index d_course_mario_raceway_dl_3748: symbol: d_course_mario_raceway_dl_3748 type: gfx offset: 0x3748 + otr_mode: index d_course_mario_raceway_dl_3830: symbol: d_course_mario_raceway_dl_3830 type: gfx offset: 0x3830 + otr_mode: index d_course_mario_raceway_dl_3960: symbol: d_course_mario_raceway_dl_3960 type: gfx offset: 0x3960 + otr_mode: index d_course_mario_raceway_dl_3AA0: symbol: d_course_mario_raceway_dl_3AA0 type: gfx offset: 0x3AA0 + otr_mode: index d_course_mario_raceway_dl_3C08: symbol: d_course_mario_raceway_dl_3C08 type: gfx offset: 0x3C08 + otr_mode: index d_course_mario_raceway_dl_3D68: symbol: d_course_mario_raceway_dl_3D68 type: gfx offset: 0x3D68 + otr_mode: index d_course_mario_raceway_dl_3EB8: symbol: d_course_mario_raceway_dl_3EB8 type: gfx offset: 0x3EB8 + otr_mode: index d_course_mario_raceway_dl_4038: symbol: d_course_mario_raceway_dl_4038 type: gfx offset: 0x4038 + otr_mode: index d_course_mario_raceway_dl_4150: symbol: d_course_mario_raceway_dl_4150 type: gfx offset: 0x4150 + otr_mode: index d_course_mario_raceway_dl_42A0: symbol: d_course_mario_raceway_dl_42A0 type: gfx offset: 0x42A0 + otr_mode: index d_course_mario_raceway_dl_43D8: symbol: d_course_mario_raceway_dl_43D8 type: gfx offset: 0x43D8 + otr_mode: index d_course_mario_raceway_dl_44F8: symbol: d_course_mario_raceway_dl_44F8 type: gfx offset: 0x44F8 + otr_mode: index d_course_mario_raceway_dl_4610: symbol: d_course_mario_raceway_dl_4610 type: gfx offset: 0x4610 + otr_mode: index d_course_mario_raceway_dl_4738: symbol: d_course_mario_raceway_dl_4738 type: gfx offset: 0x4738 + otr_mode: index d_course_mario_raceway_dl_4840: symbol: d_course_mario_raceway_dl_4840 type: gfx offset: 0x4840 + otr_mode: index d_course_mario_raceway_dl_4910: symbol: d_course_mario_raceway_dl_4910 type: gfx offset: 0x4910 + otr_mode: index d_course_mario_raceway_dl_4A60: symbol: d_course_mario_raceway_dl_4A60 type: gfx offset: 0x4A60 + otr_mode: index d_course_mario_raceway_dl_4B78: symbol: d_course_mario_raceway_dl_4B78 type: gfx offset: 0x4B78 + otr_mode: index d_course_mario_raceway_dl_4CD8: symbol: d_course_mario_raceway_dl_4CD8 type: gfx offset: 0x4CD8 + otr_mode: index d_course_mario_raceway_dl_4DC8: symbol: d_course_mario_raceway_dl_4DC8 type: gfx offset: 0x4DC8 + otr_mode: index d_course_mario_raceway_dl_4ED0: symbol: d_course_mario_raceway_dl_4ED0 type: gfx offset: 0x4ED0 + otr_mode: index d_course_mario_raceway_dl_4FF0: symbol: d_course_mario_raceway_dl_4FF0 type: gfx offset: 0x4FF0 + otr_mode: index d_course_mario_raceway_dl_5150: symbol: d_course_mario_raceway_dl_5150 type: gfx offset: 0x5150 + otr_mode: index d_course_mario_raceway_dl_5228: symbol: d_course_mario_raceway_dl_5228 type: gfx offset: 0x5228 + otr_mode: index d_course_mario_raceway_unknown_waypoints: symbol: d_course_mario_raceway_unknown_waypoints offset: 0x5568 @@ -316,6 +382,7 @@ d_course_mario_raceway_dl_piranha_plant: symbol: d_course_mario_raceway_dl_piranha_plant type: gfx offset: 0x6990 + otr_mode: index d_course_mario_raceway_tree_model: symbol: d_course_mario_raceway_tree_model type: vtx @@ -325,6 +392,7 @@ d_course_mario_raceway_dl_tree: symbol: d_course_mario_raceway_dl_tree type: gfx offset: 0x6A68 + otr_mode: index d_course_mario_sign_model: symbol: d_course_mario_sign_model type: vtx @@ -380,34 +448,42 @@ d_course_mario_raceway_dl_9068: symbol: d_course_mario_raceway_dl_9068 type: gfx offset: 0x9068 + otr_mode: index d_course_mario_raceway_dl_90B0: symbol: d_course_mario_raceway_dl_90B0 type: gfx offset: 0x90B0 + otr_mode: index d_course_mario_raceway_dl_90C0: symbol: d_course_mario_raceway_dl_90C0 type: gfx offset: 0x90C0 + otr_mode: index d_course_mario_raceway_dl_9190: symbol: d_course_mario_raceway_dl_9190 type: gfx offset: 0x9190 + otr_mode: index d_course_mario_raceway_dl_9250: symbol: d_course_mario_raceway_dl_9250 type: gfx offset: 0x9250 + otr_mode: index d_course_mario_raceway_dl_9310: symbol: d_course_mario_raceway_dl_9310 type: gfx offset: 0x9310 + otr_mode: index d_course_mario_raceway_dl_sign: symbol: d_course_mario_raceway_dl_sign type: gfx offset: 0x9330 + otr_mode: index d_course_mario_raceway_dl_9348: symbol: d_course_mario_raceway_dl_9348 type: gfx offset: 0x9348 + otr_mode: index d_course_mario_raceway_item_box_spawns: symbol: d_course_mario_raceway_item_box_spawns type: mk64:spawn_data diff --git a/yamls/us/mario_raceway_vertices.yml b/yamls/us/mario_raceway_vertices.yml index e673c5810..b716b96aa 100644 --- a/yamls/us/mario_raceway_vertices.yml +++ b/yamls/us/mario_raceway_vertices.yml @@ -1,7 +1,6 @@ :config: segments: - [0x0F, 0x88FA10] - no_compression: true header: code: - '#include ' @@ -11,6 +10,6 @@ - '#include ' d_course_mario_raceway_vertex: symbol: d_course_mario_raceway_vertex - type: blob - size: 0x13AD6 + type: mk64:course_vtx + count: 5757 offset: 0x0