diff --git a/CMakeLists.txt b/CMakeLists.txt index ab9c6cc7e..878a5cbe4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,7 +177,7 @@ endif() # Set game compilation version set(VERSION us) -set(USE_NETWORKING ON) +set(USE_NETWORKING OFF) set(SKIP_XCODE_VERSION_CHECK ON) # TODO: Sorry i broke this @@ -218,9 +218,8 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src/buffers ${CMAKE_CURRENT_SOURCE_DIR}/src/audio ${CMAKE_CURRENT_SOURCE_DIR}/src/debug - ${CMAKE_CURRENT_SOURCE_DIR}/src/networking ${CMAKE_CURRENT_SOURCE_DIR}/src/engine - ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/courses + ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/tracks ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/objects ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/particles ${CMAKE_CURRENT_SOURCE_DIR}/src/enhancements @@ -265,12 +264,10 @@ file(GLOB_RECURSE ALL_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "assets/code/*.c" "courses/*.c" "courses/*.h" - "src/networking/*.c" - "src/networking/*.h" "src/engine/*.cpp" "src/engine/*.h" - "src/engine/courses/*.c" - "src/engine/courses/*.h" + "src/engine/tracks/*.c" + "src/engine/tracks/*.h" "src/engine/objects/*.cpp" "src/engine/objects/*.h" "src/engine/particles/*.cpp" diff --git a/courses/all_course_packed.h b/courses/all_course_packed.h index 1f202ec0f..fe08aa8a8 100644 --- a/courses/all_course_packed.h +++ b/courses/all_course_packed.h @@ -2,7 +2,7 @@ #define ALL_COURSE_PACKED_H /** WARNING!!! - * Each course #defines a token that looks like `d_course__packed_end`. + * Each track #defines a token that looks like `d_course__packed_end`. * These macros only work if the the last Gfx array in each packed.inc.c file has its length hardcoded * in the accompanying header file. If that array is resized or moved the #defines will become * incorrect diff --git a/courses/courseTable.c b/courses/courseTable.c deleted file mode 100644 index 5214322fc..000000000 --- a/courses/courseTable.c +++ /dev/null @@ -1,308 +0,0 @@ -#include -#include -#include "courseTable.h" -#include "all_course_model.h" -#include "all_course_packed.h" - -/* -struct CourseTable gCourseTable[] = { { - _course_mario_raceway_dl_mio0SegmentRomStart, - _course_mario_raceway_dl_mio0SegmentRomEnd, - _mario_raceway_vertexSegmentRomStart, - _mario_raceway_vertexSegmentRomEnd, - _course_mario_raceway_offsetsSegmentRomStart, - _course_mario_raceway_offsetsSegmentRomEnd, - d_course_mario_raceway_vertex, - d_course_mario_raceway_vertex_count, - d_course_mario_raceway_packed, - d_course_mario_raceway_packed_end, - mario_raceway_textures, - 0, - 0x0000, - }, - { - _course_choco_mountain_dl_mio0SegmentRomStart, - _course_choco_mountain_dl_mio0SegmentRomEnd, - _choco_mountain_vertexSegmentRomStart, - _choco_mountain_vertexSegmentRomEnd, - _course_choco_mountain_offsetsSegmentRomStart, - _course_choco_mountain_offsetsSegmentRomEnd, - d_course_choco_mountain_vertex, - d_course_choco_mountain_vertex_count, - d_course_choco_mountain_packed, - d_course_choco_mountain_packed_end, - choco_mountain_textures, - 1, - 0x0000, - }, - { - _course_bowsers_castle_dl_mio0SegmentRomStart, - _course_bowsers_castle_dl_mio0SegmentRomEnd, - _bowsers_castle_vertexSegmentRomStart, - _bowsers_castle_vertexSegmentRomEnd, - _course_bowsers_castle_offsetsSegmentRomStart, - _course_bowsers_castle_offsetsSegmentRomEnd, - d_course_bowsers_castle_vertex, - d_course_bowsers_castle_vertex_count, - d_course_bowsers_castle_packed, - d_course_bowsers_castle_packed_end, - bowsers_castle_textures, - 0, - 0x0000, - }, - { - _course_banshee_boardwalk_dl_mio0SegmentRomStart, - _course_banshee_boardwalk_dl_mio0SegmentRomEnd, - _banshee_boardwalk_vertexSegmentRomStart, - _banshee_boardwalk_vertexSegmentRomEnd, - _course_banshee_boardwalk_offsetsSegmentRomStart, - _course_banshee_boardwalk_offsetsSegmentRomEnd, - d_course_banshee_boardwalk_vertex, - d_course_banshee_boardwalk_vertex_count, - d_course_banshee_boardwalk_packed, - d_course_banshee_boardwalk_packed_end, - banshee_boardwalk_textures, - 1, - 0x0000, - }, - { - _course_yoshi_valley_dl_mio0SegmentRomStart, - _course_yoshi_valley_dl_mio0SegmentRomEnd, - _yoshi_valley_vertexSegmentRomStart, - _yoshi_valley_vertexSegmentRomEnd, - _course_yoshi_valley_offsetsSegmentRomStart, - _course_yoshi_valley_offsetsSegmentRomEnd, - d_course_yoshi_valley_vertex, - d_course_yoshi_valley_vertex_count, - d_course_yoshi_valley_packed, - d_course_yoshi_valley_packed_end, - yoshi_valley_textures, - 0, - 0x0000, - }, - { - _course_frappe_snowland_dl_mio0SegmentRomStart, - _course_frappe_snowland_dl_mio0SegmentRomEnd, - _frappe_snowland_vertexSegmentRomStart, - _frappe_snowland_vertexSegmentRomEnd, - _course_frappe_snowland_offsetsSegmentRomStart, - _course_frappe_snowland_offsetsSegmentRomEnd, - d_course_frappe_snowland_vertex, - d_course_frappe_snowland_vertex_count, - d_course_frappe_snowland_packed, - d_course_frappe_snowland_packed_end, - frappe_snowland_textures, - 0, - 0x0000, - }, - { - _course_koopa_troopa_beach_dl_mio0SegmentRomStart, - _course_koopa_troopa_beach_dl_mio0SegmentRomEnd, - _koopa_troopa_beach_vertexSegmentRomStart, - _koopa_troopa_beach_vertexSegmentRomEnd, - _course_koopa_troopa_beach_offsetsSegmentRomStart, - _course_koopa_troopa_beach_offsetsSegmentRomEnd, - d_course_koopa_troopa_beach_vertex, - d_course_koopa_troopa_beach_vertex_count, - d_course_koopa_troopa_beach_packed, - d_course_koopa_troopa_beach_packed_end, - koopa_troopa_beach_textures, - 0, - 0x0000, - }, - { - _course_royal_raceway_dl_mio0SegmentRomStart, - _course_royal_raceway_dl_mio0SegmentRomEnd, - _royal_raceway_vertexSegmentRomStart, - _royal_raceway_vertexSegmentRomEnd, - _course_royal_raceway_offsetsSegmentRomStart, - _course_royal_raceway_offsetsSegmentRomEnd, - d_course_royal_raceway_vertex, - d_course_royal_raceway_vertex_count, - d_course_royal_raceway_packed, - d_course_royal_raceway_packed_end, - royal_raceway_textures, - 0, - 0x0000, - }, - { - _course_luigi_raceway_dl_mio0SegmentRomStart, - _course_luigi_raceway_dl_mio0SegmentRomEnd, - _luigi_raceway_vertexSegmentRomStart, - _luigi_raceway_vertexSegmentRomEnd, - _course_luigi_raceway_offsetsSegmentRomStart, - _course_luigi_raceway_offsetsSegmentRomEnd, - d_course_luigi_raceway_vertex, - d_course_luigi_raceway_vertex_count, - d_course_luigi_raceway_packed, - d_course_luigi_raceway_packed_end, - luigi_raceway_textures, - 0, - 0x0000, - }, - { - _course_moo_moo_farm_dl_mio0SegmentRomStart, - _course_moo_moo_farm_dl_mio0SegmentRomEnd, - _moo_moo_farm_vertexSegmentRomStart, - _moo_moo_farm_vertexSegmentRomEnd, - _course_moo_moo_farm_offsetsSegmentRomStart, - _course_moo_moo_farm_offsetsSegmentRomEnd, - d_course_moo_moo_farm_vertex, - d_course_moo_moo_farm_vertex_count, - d_course_moo_moo_farm_packed, - d_course_moo_moo_farm_packed_end, - moo_moo_farm_textures, - 0, - 0x0000, - }, - { - _course_toads_turnpike_dl_mio0SegmentRomStart, - _course_toads_turnpike_dl_mio0SegmentRomEnd, - _toads_turnpike_vertexSegmentRomStart, - _toads_turnpike_vertexSegmentRomEnd, - _course_toads_turnpike_offsetsSegmentRomStart, - _course_toads_turnpike_offsetsSegmentRomEnd, - d_course_toads_turnpike_vertex, - d_course_toads_turnpike_vertex_count, - d_course_toads_turnpike_packed, - d_course_toads_turnpike_packed_end, - toads_turnpike_textures, - 0, - 0x0000, - }, - { - _course_kalimari_desert_dl_mio0SegmentRomStart, - _course_kalimari_desert_dl_mio0SegmentRomEnd, - _kalimari_desert_vertexSegmentRomStart, - _kalimari_desert_vertexSegmentRomEnd, - _course_kalimari_desert_offsetsSegmentRomStart, - _course_kalimari_desert_offsetsSegmentRomEnd, - d_course_kalimari_desert_vertex, - d_course_kalimari_desert_vertex_count, - d_course_kalimari_desert_packed, - d_course_kalimari_desert_packed_end, - kalimari_desert_textures, - 0, - 0x0000, - }, - { - _course_sherbet_land_dl_mio0SegmentRomStart, - _course_sherbet_land_dl_mio0SegmentRomEnd, - _sherbet_land_vertexSegmentRomStart, - _sherbet_land_vertexSegmentRomEnd, - _course_sherbet_land_offsetsSegmentRomStart, - _course_sherbet_land_offsetsSegmentRomEnd, - d_course_sherbet_land_vertex, - d_course_sherbet_land_vertex_count, - d_course_sherbet_land_packed, - d_course_sherbet_land_packed_end, - sherbet_land_textures, - 0, - 0x0000, - }, - { - _course_rainbow_road_dl_mio0SegmentRomStart, - _course_rainbow_road_dl_mio0SegmentRomEnd, - _rainbow_road_vertexSegmentRomStart, - _rainbow_road_vertexSegmentRomEnd, - _course_rainbow_road_offsetsSegmentRomStart, - _course_rainbow_road_offsetsSegmentRomEnd, - d_course_rainbow_road_vertex, - d_course_rainbow_road_vertex_count, - d_course_rainbow_road_packed, - d_course_rainbow_road_packed_end, - rainbow_road_textures, - 0, - 0x0000, - }, - { - _course_wario_stadium_dl_mio0SegmentRomStart, - _course_wario_stadium_dl_mio0SegmentRomEnd, - _wario_stadium_vertexSegmentRomStart, - _wario_stadium_vertexSegmentRomEnd, - _course_wario_stadium_offsetsSegmentRomStart, - _course_wario_stadium_offsetsSegmentRomEnd, - d_course_wario_stadium_vertex, - d_course_wario_stadium_vertex_count, - d_course_wario_stadium_packed, - d_course_wario_stadium_packed_end, - wario_stadium_textures, - 0, - 0x0000, - }, - { - _course_block_fort_dl_mio0SegmentRomStart, - _course_block_fort_dl_mio0SegmentRomEnd, - _block_fort_vertexSegmentRomStart, - _block_fort_vertexSegmentRomEnd, - _course_block_fort_offsetsSegmentRomStart, - _course_block_fort_offsetsSegmentRomEnd, - d_course_block_fort_vertex, - d_course_block_fort_vertex_count, - d_course_block_fort_packed, - d_course_block_fort_packed_end, - block_fort_textures, - 0, - 0x0000, - }, - { - _course_skyscraper_dl_mio0SegmentRomStart, - _course_skyscraper_dl_mio0SegmentRomEnd, - _skyscraper_vertexSegmentRomStart, - _skyscraper_vertexSegmentRomEnd, - _course_skyscraper_offsetsSegmentRomStart, - _course_skyscraper_offsetsSegmentRomEnd, - d_course_skyscraper_vertex, - d_course_skyscraper_vertex_count, - d_course_skyscraper_packed, - d_course_skyscraper_packed_end, - skyscraper_textures, - 0, - 0x0000, - }, - { - _course_double_deck_dl_mio0SegmentRomStart, - _course_double_deck_dl_mio0SegmentRomEnd, - _double_deck_vertexSegmentRomStart, - _double_deck_vertexSegmentRomEnd, - _course_double_deck_offsetsSegmentRomStart, - _course_double_deck_offsetsSegmentRomEnd, - d_course_double_deck_vertex, - d_course_double_deck_vertex_count, - d_course_double_deck_packed, - d_course_double_deck_packed_end, - double_deck_textures, - 0, - 0x0000, - }, - { - _course_dks_jungle_parkway_dl_mio0SegmentRomStart, - _course_dks_jungle_parkway_dl_mio0SegmentRomEnd, - _dks_jungle_parkway_vertexSegmentRomStart, - _dks_jungle_parkway_vertexSegmentRomEnd, - _course_dks_jungle_parkway_offsetsSegmentRomStart, - _course_dks_jungle_parkway_offsetsSegmentRomEnd, - d_course_dks_jungle_parkway_vertex, - d_course_dks_jungle_parkway_vertex_count, - d_course_dks_jungle_parkway_packed, - d_course_dks_jungle_parkway_packed_end, - dks_jungle_parkway_textures, - 0, - 0x0000, - }, - { - _course_big_donut_dl_mio0SegmentRomStart, - _course_big_donut_dl_mio0SegmentRomEnd, - _big_donut_vertexSegmentRomStart, - _big_donut_vertexSegmentRomEnd, - _course_big_donut_offsetsSegmentRomStart, - _course_big_donut_offsetsSegmentRomEnd, - d_course_big_donut_vertex, - d_course_big_donut_vertex_count, - d_course_big_donut_packed, - d_course_big_donut_packed_end, - big_donut_textures, - 0, - 0x0000, - } }; -*/ diff --git a/courses/courseTable.h b/courses/courseTable.h deleted file mode 100644 index 80c98f962..000000000 --- a/courses/courseTable.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef COURSE_TABLE_H -#define COURSE_TABLE_H - -#include -#include -#include - -// dlRomStart, vertexRomStart, & vertexStart, are u8* because mio0 compressed. -struct CourseTable { - u8* dlRomStart; // 0x00 ROM start for segment 6 DL data - u8* dlRomEnd; // 0x04 ROM end for segment 6 DL data - u8* vertexRomStart; // 0x08 ROM start for segment 4 vertex data - u8* vertexRomEnd; // 0x0C ROM end for segment 7? - u8* offsetRomStart; // 0x10 ROM start for uncompressed segment 9 texture and DL addresses - u8* offsetRomEnd; // 0x14 ROM end for uncompressed segment 9 texture and DL addresses - CourseVtx* vertexStart; // 0x18 segmented address of vertex data - u32 vertexCount; // 0x1C number of vertices in vertex data - u8* packedStart; // 0x20 packed display list start address - u8* finalDisplaylistOffset; // 0x24 - u32* textures; // 0x20 segmented address of textures table - u16 unknown1; // 0x2C - u16 padding; // 0x2E -}; - -extern struct CourseTable gCourseTable[]; - -//! @todo These should probably be ptr's instead of array's? -extern u8 _course_mario_raceway_dl_mio0SegmentRomStart[]; -extern u8 _course_mario_raceway_dl_mio0SegmentRomEnd[]; -extern u8 _mario_raceway_vertexSegmentRomStart[]; -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 u8 _course_choco_mountain_dl_mio0SegmentRomStart[]; -extern u8 _course_choco_mountain_dl_mio0SegmentRomEnd[]; -extern u8 _choco_mountain_vertexSegmentRomStart[]; -extern u8 _choco_mountain_vertexSegmentRomEnd[]; -extern u8 _course_choco_mountain_offsetsSegmentRomStart[]; -extern u8 _course_choco_mountain_offsetsSegmentRomEnd[]; -extern u8 d_course_choco_mountain_packed[]; - -extern u8 _course_bowsers_castle_dl_mio0SegmentRomStart[]; -extern u8 _course_bowsers_castle_dl_mio0SegmentRomEnd[]; -extern u8 _bowsers_castle_vertexSegmentRomStart[]; -extern u8 _bowsers_castle_vertexSegmentRomEnd[]; -extern u8 _course_bowsers_castle_offsetsSegmentRomStart[]; -extern u8 _course_bowsers_castle_offsetsSegmentRomEnd[]; -extern u8 d_course_bowsers_castle_packed[]; - -extern u8 _course_banshee_boardwalk_dl_mio0SegmentRomStart[]; -extern u8 _course_banshee_boardwalk_dl_mio0SegmentRomEnd[]; -extern u8 _banshee_boardwalk_vertexSegmentRomStart[]; -extern u8 _banshee_boardwalk_vertexSegmentRomEnd[]; -extern u8 _course_banshee_boardwalk_offsetsSegmentRomStart[]; -extern u8 _course_banshee_boardwalk_offsetsSegmentRomEnd[]; -extern u8 d_course_banshee_boardwalk_packed[]; - -extern u8 _course_yoshi_valley_dl_mio0SegmentRomStart[]; -extern u8 _course_yoshi_valley_dl_mio0SegmentRomEnd[]; -extern u8 _yoshi_valley_vertexSegmentRomStart[]; -extern u8 _yoshi_valley_vertexSegmentRomEnd[]; -extern u8 _course_yoshi_valley_offsetsSegmentRomStart[]; -extern u8 _course_yoshi_valley_offsetsSegmentRomEnd[]; -extern u8 d_course_yoshi_valley_packed[]; - -extern u8 _course_frappe_snowland_dl_mio0SegmentRomStart[]; -extern u8 _course_frappe_snowland_dl_mio0SegmentRomEnd[]; -extern u8 _frappe_snowland_vertexSegmentRomStart[]; -extern u8 _frappe_snowland_vertexSegmentRomEnd[]; -extern u8 _course_frappe_snowland_offsetsSegmentRomStart[]; -extern u8 _course_frappe_snowland_offsetsSegmentRomEnd[]; -extern u8 d_course_frappe_snowland_packed[]; - -extern u8 _course_koopa_troopa_beach_dl_mio0SegmentRomStart[]; -extern u8 _course_koopa_troopa_beach_dl_mio0SegmentRomEnd[]; -extern u8 _koopa_troopa_beach_vertexSegmentRomStart[]; -extern u8 _koopa_troopa_beach_vertexSegmentRomEnd[]; -extern u8 _course_koopa_troopa_beach_offsetsSegmentRomStart[]; -extern u8 _course_koopa_troopa_beach_offsetsSegmentRomEnd[]; -extern u8 d_course_koopa_troopa_beach_packed[]; - -extern u8 _course_royal_raceway_dl_mio0SegmentRomStart[]; -extern u8 _course_royal_raceway_dl_mio0SegmentRomEnd[]; -extern u8 _royal_raceway_vertexSegmentRomStart[]; -extern u8 _royal_raceway_vertexSegmentRomEnd[]; -extern u8 _course_royal_raceway_offsetsSegmentRomStart[]; -extern u8 _course_royal_raceway_offsetsSegmentRomEnd[]; -extern u8 d_course_royal_raceway_packed[]; - -extern u8 _course_luigi_raceway_dl_mio0SegmentRomStart[]; -extern u8 _course_luigi_raceway_dl_mio0SegmentRomEnd[]; -extern u8 _luigi_raceway_vertexSegmentRomStart[]; -extern u8 _luigi_raceway_vertexSegmentRomEnd[]; -extern u8 _course_luigi_raceway_offsetsSegmentRomStart[]; -extern u8 _course_luigi_raceway_offsetsSegmentRomEnd[]; -extern u8 d_course_luigi_raceway_packed[]; - -extern u8 _course_moo_moo_farm_dl_mio0SegmentRomStart[]; -extern u8 _course_moo_moo_farm_dl_mio0SegmentRomEnd[]; -extern u8 _moo_moo_farm_vertexSegmentRomStart[]; -extern u8 _moo_moo_farm_vertexSegmentRomEnd[]; -extern u8 _course_moo_moo_farm_offsetsSegmentRomStart[]; -extern u8 _course_moo_moo_farm_offsetsSegmentRomEnd[]; -extern u8 d_course_moo_moo_farm_packed[]; - -extern u8 _course_toads_turnpike_dl_mio0SegmentRomStart[]; -extern u8 _course_toads_turnpike_dl_mio0SegmentRomEnd[]; -extern u8 _toads_turnpike_vertexSegmentRomStart[]; -extern u8 _toads_turnpike_vertexSegmentRomEnd[]; -extern u8 _course_toads_turnpike_offsetsSegmentRomStart[]; -extern u8 _course_toads_turnpike_offsetsSegmentRomEnd[]; -extern u8 d_course_toads_turnpike_packed[]; - -extern u8 _course_kalimari_desert_dl_mio0SegmentRomStart[]; -extern u8 _course_kalimari_desert_dl_mio0SegmentRomEnd[]; -extern u8 _kalimari_desert_vertexSegmentRomStart[]; -extern u8 _kalimari_desert_vertexSegmentRomEnd[]; -extern u8 _course_kalimari_desert_offsetsSegmentRomStart[]; -extern u8 _course_kalimari_desert_offsetsSegmentRomEnd[]; -extern u8 d_course_kalimari_desert_packed[]; - -extern u8 _course_sherbet_land_dl_mio0SegmentRomStart[]; -extern u8 _course_sherbet_land_dl_mio0SegmentRomEnd[]; -extern u8 _sherbet_land_vertexSegmentRomStart[]; -extern u8 _sherbet_land_vertexSegmentRomEnd[]; -extern u8 _course_sherbet_land_offsetsSegmentRomStart[]; -extern u8 _course_sherbet_land_offsetsSegmentRomEnd[]; -extern u8 d_course_sherbet_land_packed[]; - -extern u8 _course_rainbow_road_dl_mio0SegmentRomStart[]; -extern u8 _course_rainbow_road_dl_mio0SegmentRomEnd[]; -extern u8 _rainbow_road_vertexSegmentRomStart[]; -extern u8 _rainbow_road_vertexSegmentRomEnd[]; -extern u8 _course_rainbow_road_offsetsSegmentRomStart[]; -extern u8 _course_rainbow_road_offsetsSegmentRomEnd[]; -extern u8 d_course_rainbow_road_packed[]; - -extern u8 _course_wario_stadium_dl_mio0SegmentRomStart[]; -extern u8 _course_wario_stadium_dl_mio0SegmentRomEnd[]; -extern u8 _wario_stadium_vertexSegmentRomStart[]; -extern u8 _wario_stadium_vertexSegmentRomEnd[]; -extern u8 _course_wario_stadium_offsetsSegmentRomStart[]; -extern u8 _course_wario_stadium_offsetsSegmentRomEnd[]; -extern u8 d_course_wario_stadium_packed[]; - -extern u8 _course_block_fort_dl_mio0SegmentRomStart[]; -extern u8 _course_block_fort_dl_mio0SegmentRomEnd[]; -extern u8 _block_fort_vertexSegmentRomStart[]; -extern u8 _block_fort_vertexSegmentRomEnd[]; -extern u8 _course_block_fort_offsetsSegmentRomStart[]; -extern u8 _course_block_fort_offsetsSegmentRomEnd[]; -extern u8 d_course_block_fort_packed[]; - -extern u8 _course_skyscraper_dl_mio0SegmentRomStart[]; -extern u8 _course_skyscraper_dl_mio0SegmentRomEnd[]; -extern u8 _skyscraper_vertexSegmentRomStart[]; -extern u8 _skyscraper_vertexSegmentRomEnd[]; -extern u8 _course_skyscraper_offsetsSegmentRomStart[]; -extern u8 _course_skyscraper_offsetsSegmentRomEnd[]; -extern u8 d_course_skyscraper_packed[]; - -extern u8 _course_double_deck_dl_mio0SegmentRomStart[]; -extern u8 _course_double_deck_dl_mio0SegmentRomEnd[]; -extern u8 _double_deck_vertexSegmentRomStart[]; -extern u8 _double_deck_vertexSegmentRomEnd[]; -extern u8 _course_double_deck_offsetsSegmentRomStart[]; -extern u8 _course_double_deck_offsetsSegmentRomEnd[]; -extern u8 d_course_double_deck_packed[]; - -extern u8 _course_dks_jungle_parkway_dl_mio0SegmentRomStart[]; -extern u8 _course_dks_jungle_parkway_dl_mio0SegmentRomEnd[]; -extern u8 _dks_jungle_parkway_vertexSegmentRomStart[]; -extern u8 _dks_jungle_parkway_vertexSegmentRomEnd[]; -extern u8 _course_dks_jungle_parkway_offsetsSegmentRomStart[]; -extern u8 _course_dks_jungle_parkway_offsetsSegmentRomEnd[]; -extern u8 d_course_dks_jungle_parkway_packed[]; - -extern u8 _course_big_donut_dl_mio0SegmentRomStart[]; -extern u8 _course_big_donut_dl_mio0SegmentRomEnd[]; -extern u8 _big_donut_vertexSegmentRomStart[]; -extern u8 _big_donut_vertexSegmentRomEnd[]; -extern u8 _course_big_donut_offsetsSegmentRomStart[]; -extern u8 _course_big_donut_offsetsSegmentRomEnd[]; -extern u8 d_course_big_donut_packed[]; - -#endif // COURSE_TABLE_H diff --git a/courses/test_course/data.c b/courses/test_track/data.c similarity index 94% rename from courses/test_course/data.c rename to courses/test_track/data.c index 238b077c7..a0cf44611 100644 --- a/courses/test_course/data.c +++ b/courses/test_track/data.c @@ -1,6 +1,6 @@ #include "waypoints.h" -#include "course.h" #include +#include "src/engine/tracks/Track.h" extern Gfx mario_Plane_001_mesh[]; @@ -11,7 +11,7 @@ Gfx test_course_data_dl[] = { gsSPDisplayList(mario_Plane_001_mesh), }; -TrackPathPoint test_course_path[] = { +TrackPathPoint test_track_path[] = { { 0, 0, 0, 0 }, { 0, 0, -100, 1 }, { 0, 0, -200, 1 }, @@ -68,7 +68,7 @@ TrackPathPoint test_course_path[] = { { -32768, -32768, -32768, 0 } // Terminator }; -TrackSections test_course_addr[] = { +TrackSections test_track_addr[] = { { mario_Plane_001_mesh, 255, 255, 0x0000 }, { 0x00000000, 0, 0, 0x00000 }, }; diff --git a/courses/test_course/model.c b/courses/test_track/model.c similarity index 100% rename from courses/test_course/model.c rename to courses/test_track/model.c diff --git a/courses/test_course/vtx.c b/courses/test_track/vtx.c similarity index 100% rename from courses/test_course/vtx.c rename to courses/test_track/vtx.c diff --git a/docs/actorsmenu.md b/docs/actorsmenu.md index f19c514ff..57d3342ce 100644 --- a/docs/actorsmenu.md +++ b/docs/actorsmenu.md @@ -1,6 +1,6 @@ @page actorsmenu Actors -Actors are dynamic game objects usually subject to game physics such as gravity, force, and collision. They might move around the map, spin, or interactive in some manner. Alternatively, static game objects cannot move and cannot be interacted with. They can use collision but not physics. A course model and Mario Raceway's Pipe are examples of static objects. Any of the items or player karts are examples of dynamic game objects; actors. +Actors are dynamic game objects usually subject to game physics such as gravity, force, and collision. They might move around the map, spin, or interactive in some manner. Alternatively, static game objects cannot move and cannot be interacted with. They can use collision but not physics. A track model and Mario Raceway's Pipe are examples of static objects. Any of the items or player karts are examples of dynamic game objects; actors. mk64 contains two systems for implementing actors. They have been deemed as actors and objects, albeit an explicit or categorical difference between the two has yet to be determined. The running theory is that the systems were designed by different developers that were perhaps not communicating resulting in game objects being randomly distributed between the two. diff --git a/docs/basics/controlflow.md b/docs/basics/controlflow.md index 01af022b3..2583a270b 100644 --- a/docs/basics/controlflow.md +++ b/docs/basics/controlflow.md @@ -3,7 +3,7 @@ [TOC] # Paradigm -The developers wrote mk64 using a state-driven paradigm. Gamestate, gamemode, course, actors, structs, and more decide which branches code should follow. As an example, a condition can check the current course to load that courses resources or run logic based on that. +The developers wrote mk64 using a state-driven paradigm. Gamestate, gamemode, track, actors, structs, and more decide which branches code should follow. As an example, a condition can check the current track to load and then load that tracks resources or run logic based on that. # Threading After boot, the game begins by setting up its four threads; [idle](@ref thread1_idle), [video](@ref thread3_video), [audio](@ref thread4_audio), and the [game loop](@ref thread5_game_loop). @@ -94,13 +94,13 @@ Object related code resides in Documentation of the specifics still in-progress. See [actors](actorsmenu.html) for more information. -## Courses -Course related code resides in +## Tracks +Track related code resides in |file|desc| |---|---| -|[memory](@ref memory.c)| Loads and extracts course data| -|[render_courses](@ref render_courses.c)|Renders course content| -|[common_textures](@ref common_textures.c)|Content accessible to every course such as items and portraits| +|[memory](@ref memory.c)| Loads and extracts track data| +|[render_courses](@ref render_courses.c)|Renders track content| +|[common_textures](@ref common_textures.c)|Content accessible to every track such as items and portraits| ### Course Folder [course folder link][@ref courses] diff --git a/docs/coursesmenu.md b/docs/coursesmenu.md index 7fc654e9c..be2916437 100644 --- a/docs/coursesmenu.md +++ b/docs/coursesmenu.md @@ -12,7 +12,7 @@ How courses work in mk64
Courses
-

Some course related stuff

+

Some track related stuff

diff --git a/docs/custom-track.md b/docs/custom-track.md index c7df7767f..b18cf919a 100644 --- a/docs/custom-track.md +++ b/docs/custom-track.md @@ -79,7 +79,7 @@ Example of correct texture format **The Laws of SpaghettiKart** * Track geography must be a plane, not a box - * A flat course with a basic plane (square), needs to be turned into triangules and/or subdivided a few times, otherwise the collision generation will 'wig out', placing the racers incorrectly + * A flat track with a basic plane (square), needs to be turned into triangules and/or subdivided a few times, otherwise the collision generation will 'wig out', placing the racers incorrectly * The starting line must face north * In Blender: Positive Green Y Axis * In game: Negative Z axis diff --git a/docs/sequences-information.md b/docs/sequences-information.md index c4b1eb7aa..dfd86bc15 100644 --- a/docs/sequences-information.md +++ b/docs/sequences-information.md @@ -24,7 +24,7 @@ ## Battle Courses -| Battle Course Name | Audio Filename | +| Battle Track Name | Audio Filename | | ------------------ | --------------- | | Big Donut | `battle_arenas` | | Block Fort | `block_fort` | diff --git a/docs/track_returns.md b/docs/track_returns.md index f41afd305..074a3faa0 100644 --- a/docs/track_returns.md +++ b/docs/track_returns.md @@ -4,7 +4,7 @@ Here is the table containing only the regular Mario Kart courses, from Banshee Boardwalk to Yoshi Valley: -| **Mario Kart 64 Course** | **Mario Kart DS** | **Mario Kart Wii** | **Mario Kart 7** | **Mario Kart 8 / Deluxe** | **Booster Course Pass** | **Mario Kart Tour** | **Mario Kart World** | +| **Mario Kart 64 Track** | **Mario Kart DS** | **Mario Kart Wii** | **Mario Kart 7** | **Mario Kart 8 / Deluxe** | **Booster Track Pass** | **Mario Kart Tour** | **Mario Kart World** | | ------------------------ | ----------------- | ------------------ | ---------------- | ------------------------- | ----------------------- | ------------------- | -------------------- | | Banshee Boardwalk | ✓ | | | | | | | | Bowser's Castle | | ✓ | | | | | | @@ -25,7 +25,7 @@ Here is the table containing only the regular Mario Kart courses, from Banshee B ## Battle Courses -| **Battle Course** | **Mario Kart DS** | **Mario Kart Wii** | **Mario Kart 7** | **Mario Kart 8 / Deluxe** | **Booster Course Pass** | **Mario Kart Tour** | **Mario Kart World** | +| **Battle Track** | **Mario Kart DS** | **Mario Kart Wii** | **Mario Kart 7** | **Mario Kart 8 / Deluxe** | **Booster Track Pass** | **Mario Kart Tour** | **Mario Kart World** | | ----------------- | ----------------- | ------------------ | ---------------- | ------------------------- | ----------------------- | ------------------- | -------------------- | | Big Donut | | | ✓ | | | | ✓ | | Block Fort | ✓ | | | | | | | diff --git a/docs/tutorials/boostramps.md b/docs/tutorials/boostramps.md index 7c6586d32..57046aad0 100644 --- a/docs/tutorials/boostramps.md +++ b/docs/tutorials/boostramps.md @@ -1,4 +1,4 @@ \page boostramps Boost Ramps # Boost Ramps -Boost ramps use a surface-type and is part of the course geography. +Boost ramps use a surface-type and is part of the track geography. diff --git a/docs/tutorials/paths.md b/docs/tutorials/paths.md index d3200a6dd..82e32ccb9 100644 --- a/docs/tutorials/paths.md +++ b/docs/tutorials/paths.md @@ -1,7 +1,7 @@ @page paths Paths -The game uses multiple types of course paths +The game uses multiple types of track paths -# Course Paths +# Track Paths Used by courses diff --git a/include/common_structs.h b/include/common_structs.h index 4691e3310..25a12dc53 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -417,7 +417,7 @@ typedef struct { // Something related to time trial ghost data? /* 0x00 */ s32 unk_00; /* 0x04 */ u8 ghostDataSaved; - /* 0x05 */ s8 courseIndex; + /* 0x05 */ s8 trackIndex; /* 0x06 */ u8 characterId; /* 0x07 */ u8 unk_07[0x3C]; /* 0x43 */ u8 pad_43[0x7F - 0x43]; diff --git a/include/course.h b/include/course.h deleted file mode 100644 index 8bbd83054..000000000 --- a/include/course.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef COURSE_H -#define COURSE_H - -#include -#include -#include - -/** - * @file Include for course gfx.inc.c. - */ - -typedef struct { - uint64_t crc; - u8 surfaceType; - u8 sectionId; - u16 flags; -} TrackSections; - -#endif // COURSE_H diff --git a/include/defines.h b/include/defines.h index 11ca54efc..e5cdf6963 100644 --- a/include/defines.h +++ b/include/defines.h @@ -76,11 +76,11 @@ #define DEMO_MODE_INACTIVE 0 #ifdef VERSION_EU -#define COURSE_TIMER_ITER 0.020041665999999999 // 1 / 50 -#define COURSE_TIMER_ITER_f 0.020041665999999999f // 1 / 50 +#define TRACK_TIMER_ITER 0.020041665999999999 // 1 / 50 +#define TRACK_TIMER_ITER_f 0.020041665999999999f // 1 / 50 #else -#define COURSE_TIMER_ITER 0.01666666 // 1 / 60 -#define COURSE_TIMER_ITER_f 0.01666666f // 1 / 60 +#define TRACK_TIMER_ITER 0.01666666 // 1 / 60 +#define TRACK_TIMER_ITER_f 0.01666666f // 1 / 60 #endif #define V_BlANK_TIMER_ITER 0.01666666 @@ -182,7 +182,7 @@ enum { MUSHROOM_CUP, FLOWER_CUP, STAR_CUP, SPECIAL_CUP, BATTLE_CUP, NUM_CUPS }; /** * @brief Options for gCourseIndexInCup */ -enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR }; +enum { TRACK_ONE, TRACK_TWO, TRACK_THREE, TRACK_FOUR }; /** * @brief Character IDs @@ -387,7 +387,7 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE }; #define UNKNOWN_EFFECT_0x10000 0x10000 // #define BOOST_RAMP_ASPHALT_EFFECT 0x100000 // being boosted by a boost pad #define UNKNOWN_EFFECT_0x200000 0x200000 // -#define REVERSE_EFFECT 0x400000 // being in reverse of the course +#define REVERSE_EFFECT 0x400000 // Player is facing the wrong direction #define UNKNOWN_EFFECT_0x1000000 0x1000000 // #define HIT_BY_ITEM_EFFECT 0x2000000 // being hit by an item #define HIT_EFFECT 0x4000000 // hitting an object diff --git a/include/mk64.h b/include/mk64.h index 110db58af..7c87a5f27 100644 --- a/include/mk64.h +++ b/include/mk64.h @@ -32,31 +32,31 @@ extern "C" { #define BORDER_HEIGHT 1 typedef enum { - /* 0x00 */ COURSE_MARIO_RACEWAY = 0, - /* 0x01 */ COURSE_CHOCO_MOUNTAIN, - /* 0x02 */ COURSE_BOWSER_CASTLE, - /* 0x03 */ COURSE_BANSHEE_BOARDWALK, - /* 0x04 */ COURSE_YOSHI_VALLEY, - /* 0x05 */ COURSE_FRAPPE_SNOWLAND, - /* 0x06 */ COURSE_KOOPA_BEACH, - /* 0x07 */ COURSE_ROYAL_RACEWAY, - /* 0x08 */ COURSE_LUIGI_RACEWAY, - /* 0x09 */ COURSE_MOO_MOO_FARM, - /* 0x0A */ COURSE_TOADS_TURNPIKE, - /* 0x0B */ COURSE_KALIMARI_DESERT, - /* 0x0C */ COURSE_SHERBET_LAND, - /* 0x0D */ COURSE_RAINBOW_ROAD, - /* 0x0E */ COURSE_WARIO_STADIUM, - /* 0x0F */ COURSE_BLOCK_FORT, - /* 0x10 */ COURSE_SKYSCRAPER, - /* 0x11 */ COURSE_DOUBLE_DECK, - /* 0x12 */ COURSE_DK_JUNGLE, - /* 0x13 */ COURSE_BIG_DONUT, - /* 0x14 */ COURSE_AWARD_CEREMONY, - /* 0x15 */ NUM_COURSES -} COURSES; + /* 0x00 */ TRACK_MARIO_RACEWAY = 0, + /* 0x01 */ TRACK_CHOCO_MOUNTAIN, + /* 0x02 */ TRACK_BOWSER_CASTLE, + /* 0x03 */ TRACK_BANSHEE_BOARDWALK, + /* 0x04 */ TRACK_YOSHI_VALLEY, + /* 0x05 */ TRACK_FRAPPE_SNOWLAND, + /* 0x06 */ TRACK_KOOPA_BEACH, + /* 0x07 */ TRACK_ROYAL_RACEWAY, + /* 0x08 */ TRACK_LUIGI_RACEWAY, + /* 0x09 */ TRACK_MOO_MOO_FARM, + /* 0x0A */ TRACK_TOADS_TURNPIKE, + /* 0x0B */ TRACK_KALIMARI_DESERT, + /* 0x0C */ TRACK_SHERBET_LAND, + /* 0x0D */ TRACK_RAINBOW_ROAD, + /* 0x0E */ TRACK_WARIO_STADIUM, + /* 0x0F */ TRACK_BLOCK_FORT, + /* 0x10 */ TRACK_SKYSCRAPER, + /* 0x11 */ TRACK_DOUBLE_DECK, + /* 0x12 */ TRACK_DK_JUNGLE, + /* 0x13 */ TRACK_BIG_DONUT, + /* 0x14 */ TRACK_AWARD_CEREMONY, + /* 0x15 */ NUM_TRACKS +} TRACKS; -#define COURSE_NULL 0xFF +#define TRACK_NULL 0xFF typedef enum { /* 0x00 */ TIME_TRIAL_DATA_LUIGI_RACEWAY, @@ -86,19 +86,19 @@ enum SURFACE_TYPE { /* 0x00 */ AIRBORNE, /* 0x01 */ ASPHALT, // Luigi's Raceway, Toad's Turnpike, Koopa Troop beach shortcut tunnel, Mario Raceway, Royal // Raceway, Rainbow Road, Block Fort, Double Deck, Skyscraper - /* 0x02 */ DIRT, // Luigi's Raceway, Moo Moo Farm, Kalimiari Desert on course, Choco Mountain, Wario Stadium, DK - // Jungle on course, Yoshi Valley + /* 0x02 */ DIRT, // Luigi's Raceway, Moo Moo Farm, Kalimiari Desert as road, Choco Mountain, Wario Stadium, DK + // Jungle as road, Yoshi Valley /* 0x03 */ SAND, // Koopa Troopa Beach light color, Royal Raceway /* 0x04 */ STONE, // Royal Raceway castle entrance, Bowser's Castle - /* 0x05 */ SNOW, // Frappe Snowland on course, Sherber Land tunnel + /* 0x05 */ SNOW, // Frappe Snowland as road, Sherber Land tunnel /* 0x06 */ BRIDGE, // Royal Raceway castle bridges (even the wooden one), Banshee's Boardwalk, Big Donut /* 0x07 */ SAND_OFFROAD, // Mario Raceway /* 0x08 */ GRASS, // Luigi's Raceway, Mario Raceway, Royal Raceway, Bowser's Castle, DK Jungle, Yoshi Valley /* 0x09 */ ICE, // Sherbert Land /* 0x0A */ WET_SAND, // Koop Troopa Beach dark color - /* 0x0B */ SNOW_OFFROAD, // Frappe Snowland off course + /* 0x0B */ SNOW_OFFROAD, // Frappe Snowland off road /* 0x0C */ CLIFF, // Koopa Troopa Beach, Choco Mountain - /* 0x0D */ DIRT_OFFROAD, // Kalimari Desert off course + /* 0x0D */ DIRT_OFFROAD, // Kalimari Desert off road /* 0x0E */ TRAIN_TRACK, // Kalimari Desert /* 0x0F */ CAVE, // DK Jungle cave /* 0x10 */ ROPE_BRIDGE, // Bowser's Castle bridge 2, DK Jungle bridge diff --git a/include/objects.h b/include/objects.h index 4c3c6d77b..2862b7587 100644 --- a/include/objects.h +++ b/include/objects.h @@ -213,7 +213,7 @@ extern Collision D_8018C0B0[]; * First indexObjectList1 gets an unused index, then indexObjectList2, then indexObjectList3, then indexObjectList4, and *then it loops. * - * The objects found at the indices in each list appears to be course dependent + * The objects found at the indices in each list appears to be track dependent **/ #define NUM_YV_FLAG_POLES 4 diff --git a/include/save_data.h b/include/save_data.h index 2f16ad1f1..cb5636bb5 100644 --- a/include/save_data.h +++ b/include/save_data.h @@ -11,7 +11,7 @@ typedef struct { // The 6th record is the best 1-lap record u8 records[6][3]; // It's unknown what these bytes are used for - // Byte 1 might be an indicator that there is a ghost available for that course + // Byte 1 might be an indicator that there is a ghost available for that track u8 unknownBytes[5]; u8 checksum; } CourseTimeTrialRecords; // size = 0x18 diff --git a/src/actors/banana/render.inc.c b/src/actors/banana/render.inc.c index 94b8bfb70..bb4fc3219 100644 --- a/src/actors/banana/render.inc.c +++ b/src/actors/banana/render.inc.c @@ -25,11 +25,11 @@ void render_actor_banana(Camera* camera, UNUSED Mat4 arg1, struct BananaActor* b return; } - if ((banana->pos[1] > gCourseMaxY + 800.0f)) { + if ((banana->pos[1] > gTrackMaxY + 800.0f)) { actor_not_rendered(camera, (struct Actor*) banana); return; } - if (banana->pos[1] < (gCourseMinY - 800.0f)) { + if (banana->pos[1] < (gTrackMinY - 800.0f)) { actor_not_rendered(camera, (struct Actor*) banana); return; } diff --git a/src/actors/banana/update.inc.c b/src/actors/banana/update.inc.c index c14f410d6..331585703 100644 --- a/src/actors/banana/update.inc.c +++ b/src/actors/banana/update.inc.c @@ -97,9 +97,9 @@ void update_actor_banana(struct BananaActor* banana) { banana->velocity[1] -= 0.15f; } banana->pos[1] += banana->velocity[1]; - if ((banana->pos[2] < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < banana->pos[2]) || - (banana->pos[0] < (f32) gCourseMinX) || ((f32) gCourseMaxX < banana->pos[0]) || - (banana->pos[1] < (f32) gCourseMinY)) { + if ((banana->pos[2] < (f32) gTrackMinZ) || ((f32) gTrackMaxZ < banana->pos[2]) || + (banana->pos[0] < (f32) gTrackMinX) || ((f32) gTrackMaxX < banana->pos[0]) || + (banana->pos[1] < (f32) gTrackMinY)) { destroy_destructable_actor((struct Actor*) banana); } else { check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], diff --git a/src/actors/blue_and_red_shells/update.inc.c b/src/actors/blue_and_red_shells/update.inc.c index 92ccd76d2..e2ff74d9e 100644 --- a/src/actors/blue_and_red_shells/update.inc.c +++ b/src/actors/blue_and_red_shells/update.inc.c @@ -238,8 +238,8 @@ void update_actor_red_blue_shell(struct ShellActor* shell) { pad0 = shell->pos[2]; pad2 = shell->pos[1]; pad13 = shell->type; - if ((pad0 < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < pad0) || (pad1 < (f32) gCourseMinX) || - ((f32) gCourseMaxX < pad1) || (pad2 < (f32) gCourseMinY)) { + if ((pad0 < (f32) gTrackMinZ) || ((f32) gTrackMaxZ < pad0) || (pad1 < (f32) gTrackMinX) || + ((f32) gTrackMaxX < pad1) || (pad2 < (f32) gTrackMinY)) { destroy_destructable_actor((struct Actor*) shell); } diff --git a/src/actors/fake_item_box/render.inc.c b/src/actors/fake_item_box/render.inc.c index 60904af4f..f979c7e2d 100644 --- a/src/actors/fake_item_box/render.inc.c +++ b/src/actors/fake_item_box/render.inc.c @@ -34,11 +34,11 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox) actor_not_rendered(camera, (struct Actor*) fakeItemBox); return; } - if (((f32) gCourseMaxY + 800.0f) < fakeItemBox->pos[1]) { + if (((f32) gTrackMaxY + 800.0f) < fakeItemBox->pos[1]) { actor_not_rendered(camera, (struct Actor*) fakeItemBox); return; } - if (fakeItemBox->pos[1] < ((f32) gCourseMinY - 800.0f)) { + if (fakeItemBox->pos[1] < ((f32) gTrackMinY - 800.0f)) { actor_not_rendered(camera, (struct Actor*) fakeItemBox); return; } diff --git a/src/actors/falling_rock/update.inc.c b/src/actors/falling_rock/update.inc.c index 4d477cc6c..434d7c2a7 100644 --- a/src/actors/falling_rock/update.inc.c +++ b/src/actors/falling_rock/update.inc.c @@ -9,7 +9,7 @@ void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) { Vec3s sp24 = { 60, 120, 180 }; temp_v0 += rock->unk_06; rock->respawnTimer = sp24[rock->unk_06]; // * 2 - rock->pos[0] = (f32) temp_v0->pos[0] * gCourseDirection; + rock->pos[0] = (f32) temp_v0->pos[0] * gTrackDirection; rock->pos[1] = (f32) temp_v0->pos[1] + 10.0f; rock->pos[2] = (f32) temp_v0->pos[2]; vec3f_set(rock->velocity, 0, 0, 0); @@ -33,7 +33,7 @@ void spawn_falling_rocks(struct ActorSpawnData* spawnData) { s16 temp; while (temp_s0->pos[0] != -0x8000) { - startingPos[0] = temp_s0->pos[0] * gCourseDirection; + startingPos[0] = temp_s0->pos[0] * gTrackDirection; startingPos[1] = temp_s0->pos[1] + 10.0f; startingPos[2] = temp_s0->pos[2]; vec3f_set(startingVelocity, 0, 0, 0); diff --git a/src/actors/green_shell/update.inc.c b/src/actors/green_shell/update.inc.c index 954fa0551..891f0c943 100644 --- a/src/actors/green_shell/update.inc.c +++ b/src/actors/green_shell/update.inc.c @@ -32,8 +32,8 @@ void update_actor_green_shell(struct ShellActor* shell) { height = shell->pos[0]; y = shell->pos[1]; z = shell->pos[2]; - if ((z < gCourseMinZ) || (gCourseMaxZ < z) || (height < gCourseMinX) || (gCourseMaxX < height) || - (y < gCourseMinY)) { + if ((z < gTrackMinZ) || (gTrackMaxZ < z) || (height < gTrackMinX) || (gTrackMaxX < height) || + (y < gTrackMinY)) { destroy_destructable_actor((struct Actor*) shell); } shell->rotVelocity += 0x71C; diff --git a/src/actors/trees/render.inc.c b/src/actors/trees/render.inc.c index 7743c939a..d743f4ea8 100644 --- a/src/actors/trees/render.inc.c +++ b/src/actors/trees/render.inc.c @@ -193,7 +193,7 @@ void render_actor_tree_luigi_raceway(Camera* camera, Mat4 arg1, struct Actor* ar gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_trees_import); // Why is a TLUT being used a DL here? That makes no sense // Based on the TLUT being loaded above, this ought to be be another - // tree related DL, presumably one found in a course other than Moo Moo farm + // tree related DL, presumably one found in a track other than Moo Moo farm // 0x0600FC70 gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_dl_FC70); } diff --git a/src/audio/external.c b/src/audio/external.c index 5e5011b69..6a227813d 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -3544,7 +3544,7 @@ void func_800CAEC4(u8 playerId, f32 arg1) { D_800EA120[playerId] = arg1; //! @warning this used to be gCurrentCourseId + 0x19007020 // This may not be equivallent. - play_sound(GetCourseIndex() + 0x19007020, &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, + play_sound(GetTrackIndex() + 0x19007020, &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, &D_800EA120[playerId], (u8*) &D_800E9F7C[playerId].unk_14); break; default: diff --git a/src/code_800029B0.c b/src/code_800029B0.c index 0f8876295..c983b2b8a 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -55,11 +55,11 @@ u16 D_800DC5E4 = 0; //! @todo gPlayerWinningIndex (D_800DC5E8) accessed as word, D_800DC5EB as u8 s32 gPlayerWinningIndex = 0; -ALIGNED16 struct UnkStruct_800DC5EC D_8015F480[4] = { 0 }; -struct UnkStruct_800DC5EC* D_800DC5EC = &D_8015F480[0]; -struct UnkStruct_800DC5EC* D_800DC5F0 = &D_8015F480[1]; -struct UnkStruct_800DC5EC* D_800DC5F4 = &D_8015F480[2]; -struct UnkStruct_800DC5EC* D_800DC5F8 = &D_8015F480[3]; +ALIGNED16 ScreenContext gScreenContexts[4] = { 0 }; +ScreenContext* gScreenOneCtx = &gScreenContexts[0]; +ScreenContext* gScreenTwoCtx = &gScreenContexts[1]; +ScreenContext* gScreenThreeCtx = &gScreenContexts[2]; +ScreenContext* gScreenFourCtx = &gScreenContexts[3]; u16 gIsGamePaused = false; // true if the game is paused and false if the game is not paused bool gIsEditorPaused = true; u8* pAppNmiBuffer = (u8*) &osAppNmiBuffer; @@ -67,7 +67,7 @@ u8* pAppNmiBuffer = (u8*) &osAppNmiBuffer; s32 gIsMirrorMode = 0; void set_mirror_mode(s32 mirror) { if (gIsMirrorMode != mirror) { - UnLoadCourse(); + UnLoadTrack(); } gIsMirrorMode = mirror; } @@ -78,7 +78,7 @@ Lights1 D_800DC610[] = { gdSPDefLights1(209, 209, 209, 255, 255, 255, 0, 0, 120), }; UNUSED s32 pad_800029B0 = 0x80000000; -s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY; +s16 gCreditsCourseId = TRACK_LUIGI_RACEWAY; s16 gPlaceItemBoxes = 1; // Technically a pointer to an array, but declaring it so creates regalloc issues. @@ -95,14 +95,14 @@ s32 D_8015F5A4; s32 code_800029B0_bss_pad[48]; Vtx* vtxBuffer[32]; -s16 gCourseMaxX; -s16 gCourseMinX; +s16 gTrackMaxX; +s16 gTrackMinX; -s16 gCourseMaxY; // s16 or u16? -s16 gCourseMinY; +s16 gTrackMaxY; // s16 or u16? +s16 gTrackMinY; -s16 gCourseMaxZ; -s16 gCourseMinZ; +s16 gTrackMaxZ; +s16 gTrackMinZ; s16 D_8015F6F4; s16 D_8015F6F6; @@ -131,7 +131,7 @@ Vec3f D_8015F758; Vec3f D_8015F768; Vec3f D_8015F778; -f32 gCourseDirection; // Extra mode, flips vertices. +f32 gTrackDirection; // Extra mode, flips vertices. s32 gNumScreens; // Set to zero in single player mode s32 D_8015F790[64]; // Unknown data, potentially not used. u16 D_8015F890; @@ -201,15 +201,15 @@ void setup_race(void) { set_mirror_mode(0); } if (gIsMirrorMode) { - gCourseDirection = -1.0f; + gTrackDirection = -1.0f; } else { - gCourseDirection = 1.0f; + gTrackDirection = 1.0f; } if (gModeSelection == GRAND_PRIX) { gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; // Skip for debug menu if (gMenuSelection != START_MENU) { - SetCourseFromCup(); + SetTrackFromCup(); } } gActiveScreenMode = gScreenModeSelection; @@ -217,8 +217,7 @@ void setup_race(void) { D_80150120 = 0; gCurrentlyLoadedCourseId = gCurrentCourseId; gNextFreeMemoryAddress = gFreeMemoryResetAnchor; - load_course(gCurrentCourseId); - course_init(); + load_track(gCurrentCourseId); gFreeMemoryCourseAnchor = gNextFreeMemoryAddress; } else { gNextFreeMemoryAddress = gFreeMemoryCourseAnchor; @@ -244,7 +243,7 @@ void setup_race(void) { func_80091FA4(); init_actors_and_load_textures(); - // Set finishline position. This is now done in files in src/engine/courses/* + // Set finishline position. This is now done in files in src/engine/tracks/* // if (gModeSelection != BATTLE) { // D_8015F8D0[1] = (f32) (gCurrentTrackPath->posY - 15); // D_8015F8D0[2] = gCurrentTrackPath->posZ; @@ -260,7 +259,7 @@ void setup_race(void) { if (!gDemoMode) { //! @warning this used to be gCurrentCourseId + 4 // Hopefully this is equivallent. - func_800CA008(gPlayerCountSelection1 - 1, GetCourseIndex() + 4); + func_800CA008(gPlayerCountSelection1 - 1, GetTrackIndex() + 4); func_800CB2C4(); } @@ -289,17 +288,16 @@ void setup_editor(void) { D_80150120 = 0; gCurrentlyLoadedCourseId = gCurrentCourseId; gNextFreeMemoryAddress = gFreeMemoryResetAnchor; - load_course(gCurrentCourseId); - course_init(); + load_track(gCurrentCourseId); gFreeMemoryCourseAnchor = gNextFreeMemoryAddress; } else { gNextFreeMemoryAddress = gFreeMemoryCourseAnchor; } if (gIsMirrorMode) { - gCourseDirection = -1.0f; + gTrackDirection = -1.0f; } else { - gCourseDirection = 1.0f; + gTrackDirection = 1.0f; } // Cow related @@ -326,41 +324,6 @@ void setup_editor(void) { void func_80002DAC(void) { CM_SomeSounds(); - - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // // vec3f_set(D_8015F748, -223.0f, 94.0f, -155.0f); - // // func_800C9D80(D_8015F748, D_802B91C8, 0x5103700B); - // break; - // case COURSE_ROYAL_RACEWAY: - // vec3f_set(D_8015F748, 177.0f, 87.0f, -393.0f); - // func_800C9D80(D_8015F748, D_802B91C8, 0x5103700B); - // break; - // case COURSE_LUIGI_RACEWAY: - // vec3f_set(D_8015F748, 85.0f, 21.0f, -219.0f); - // func_800C9D80(D_8015F748, D_802B91C8, 0x5103700B); - // break; - // case COURSE_WARIO_STADIUM: - // vec3f_set(D_8015F748, 298.0f, 202.0f, -850.0f); - // func_800C9D80(D_8015F748, D_802B91C8, 0x5103700B); - // vec3f_set(D_8015F758, -1600.0f, 202.0f, -2430.0f); - // func_800C9D80(D_8015F758, D_802B91C8, 0x5103700B); - // vec3f_set(D_8015F768, -2708.0f, 202.0f, 1762.0f); - // func_800C9D80(D_8015F768, D_802B91C8, 0x5103700B); - // vec3f_set(D_8015F778, -775.0f, 202.0f, 1930.0f); - // func_800C9D80(D_8015F778, D_802B91C8, 0x5103700B); - // break; - // case COURSE_KOOPA_BEACH: - // vec3f_set(D_8015F738, 153.0f, 0.0f, 2319.0f); - // func_800C9D80(D_8015F738, D_802B91C8, 0x51028001); - // break; - // case COURSE_DK_JUNGLE: - // vec3f_set(D_8015F738, -790.0f, -255.0f, -447.0f); - // func_800C9D80(D_8015F738, D_802B91C8, 0x51028001); - // break; - // default: - // break; - // } } /** @@ -385,7 +348,7 @@ void credits_spawn_actors(void) { D_800DC5C8 = 0; gNumActors = 0; set_mirror_mode(0); - gCourseDirection = 1.0f; + gTrackDirection = 1.0f; gPlayerCountSelection1 = 1; diff --git a/src/code_800029B0.h b/src/code_800029B0.h index e8964b162..8be9e0272 100644 --- a/src/code_800029B0.h +++ b/src/code_800029B0.h @@ -6,7 +6,7 @@ #include #include "camera.h" -struct UnkStruct_800DC5EC { +typedef struct { /* 0x00 */ struct Controller* controllers; // gControllers ptr 800F6910 /* 0x04 */ Camera* camera; // The active camera /* */ Camera* raceCamera; @@ -28,7 +28,7 @@ struct UnkStruct_800DC5EC { /* 0x38 */ s16 pathCounter; /* 0x3A */ s16 unk42; /* 0x3C */ s32 pad2; -}; +} ScreenContext; /* Function Prototypes */ @@ -60,11 +60,11 @@ extern s32 D_800DC5E0; extern u16 D_800DC5E4; extern s32 gPlayerWinningIndex; -extern struct UnkStruct_800DC5EC D_8015F480[4]; -extern struct UnkStruct_800DC5EC* D_800DC5EC; -extern struct UnkStruct_800DC5EC* D_800DC5F0; -extern struct UnkStruct_800DC5EC* D_800DC5F4; -extern struct UnkStruct_800DC5EC* D_800DC5F8; +extern ScreenContext gScreenContexts[4]; +extern ScreenContext* gScreenOneCtx; +extern ScreenContext* gScreenTwoCtx; +extern ScreenContext* gScreenThreeCtx; +extern ScreenContext* gScreenFourCtx; extern u16 gIsGamePaused; extern bool gIsEditorPaused; extern u8* pAppNmiBuffer; @@ -86,14 +86,14 @@ extern s32 D_8015F5A0; extern s32 D_8015F5A4; extern Vtx* vtxBuffer[]; -extern s16 gCourseMaxX; -extern s16 gCourseMinX; +extern s16 gTrackMaxX; +extern s16 gTrackMinX; -extern s16 gCourseMaxY; -extern s16 gCourseMinY; +extern s16 gTrackMaxY; +extern s16 gTrackMinY; -extern s16 gCourseMaxZ; -extern s16 gCourseMinZ; +extern s16 gTrackMaxZ; +extern s16 gTrackMinZ; extern s16 D_8015F6F4; extern s16 D_8015F6F6; extern u16 D_8015F6F8; @@ -111,9 +111,9 @@ extern uintptr_t gNextFreeMemoryAddress; extern uintptr_t gHeapEndPtr; /** - * This repoints gNextFreeMemoryAddress to the point in the memory pool just after a course was loaded. - * This allows players to retry or reset a course without reloading the whole course. - * Memory allocated after course load is not zeroed or reset. But should get overwritten by future allocations. + * This repoints gNextFreeMemoryAddress to the point in the memory pool just after a track was loaded. + * This allows players to retry or reset a track without reloading the whole track. + * Memory allocated after track load is not zeroed or reset. But should get overwritten by future allocations. * * This is a relatively unsafe way to architect a memory pool as old memory could accidentally be used if future allocations do not zero or fully overwrite their free memory. */ @@ -125,7 +125,7 @@ extern Vec3f D_8015F758; extern Vec3f D_8015F768; extern Vec3f D_8015F778; -extern f32 gCourseDirection; +extern f32 gTrackDirection; extern s32 gNumScreens; extern s32 D_8015F790[]; diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index a90bf4ce0..7f47cbb0e 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -41,14 +41,14 @@ #include #include "port/Game.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" s32 unk_code_80005FD0_pad[24]; Collision D_80162E70; s16 D_80162EB0; // Possibly a float. s16 D_80162EB2; // possibly [3] -CPUBehaviour* gCoursesCPUBehaviour[NUM_COURSES - 1]; +CPUBehaviour* gCoursesCPUBehaviour[NUM_TRACKS - 1]; // more padding? s32 D_80162F08[2]; @@ -1443,7 +1443,7 @@ void update_cpu_path_completion(s32 playerId, Player* player) { f32 func_80009258(UNUSED s32 playerId, f32 arg1, f32 arg2) { f32 temp_f2 = gPathStartZ - arg2; f32 temp_f12 = arg1 - gPathStartZ; - return gCourseTimer - ((COURSE_TIMER_ITER_f * temp_f2) / (temp_f2 + temp_f12)); + return gCourseTimer - ((TRACK_TIMER_ITER_f * temp_f2) / (temp_f2 + temp_f12)); } void update_player_path_completion(s32 playerId, Player* player) { @@ -1635,10 +1635,10 @@ void update_player(s32 playerId) { } D_801633E0[playerId] = 0; // clang-format off - if (player->pos[0] < gCourseMinX) { D_801633E0[playerId] = 1; } - if (gCourseMaxX < player->pos[0]) { D_801633E0[playerId] = 2; } - if (player->pos[2] < gCourseMinZ) { D_801633E0[playerId] = 3; } - if (gCourseMaxZ < player->pos[2]) { D_801633E0[playerId] = 4; } + if (player->pos[0] < gTrackMinX) { D_801633E0[playerId] = 1; } + if (gTrackMaxX < player->pos[0]) { D_801633E0[playerId] = 2; } + if (player->pos[2] < gTrackMinZ) { D_801633E0[playerId] = 3; } + if (gTrackMaxZ < player->pos[2]) { D_801633E0[playerId] = 4; } // clang-format on if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8)) { @@ -1649,7 +1649,7 @@ void update_player(s32 playerId) { // Collision is handled in the vehicles class now // switch (gCurrentCourseId) { /* irregular */ - // case COURSE_KALIMARI_DESERT: + // case TRACK_KALIMARI_DESERT: CM_VehicleCollision(playerId, player); // handle_trains_interactions(playerId, player); if (playerId == 0) { @@ -1657,10 +1657,10 @@ void update_player(s32 playerId) { // func_80013054(); } // break; - // case COURSE_DK_JUNGLE: + // case TRACK_DK_JUNGLE: // handle_paddle_boats_interactions(player); // break; - // case COURSE_TOADS_TURNPIKE: + // case TRACK_TOADS_TURNPIKE: // handle_box_trucks_interactions(playerId, player); // handle_school_buses_interactions(playerId, player); // handle_tanker_trucks_interactions(playerId, player); @@ -1729,13 +1729,13 @@ void update_player(s32 playerId) { } // switch (gCurrentCourseId) { - // case COURSE_YOSHI_VALLEY: - // case COURSE_AWARD_CEREMONY: + // case TRACK_YOSHI_VALLEY: + // case TRACK_AWARD_CEREMONY: // gPlayerTrackPositionFactorInstruction[playerId].target = 0.0f; // break; // default: // break; - // case COURSE_TOADS_TURNPIKE: + // case TRACK_TOADS_TURNPIKE: // update_player_track_position_factor_from_box_trucks(playerId); // update_player_track_position_factor_from_buses(playerId); // update_player_track_position_factor_from_tanker_truck(playerId); @@ -3470,10 +3470,10 @@ void clear_path_point(TrackPathPoint* arg0, size_t size) { bzero((void*) arg0, size * sizeof(TrackPathPoint)); } -// Appears to allocate memory for each course. +// Appears to allocate memory for each track. void init_course_path_point(void) { - _struct_gCoursePathSizes_0x10* ptr = &CM_GetProps()->PathSizes; + TrackPathSizes* ptr = &CM_GetProps()->PathSizes; s32 temp; s32 i; @@ -3699,9 +3699,9 @@ void init_players(void) { // @arg index from 0 to 3. -// Processes course path by index. +// Processes track path by index. // @arg index from 0 to 3. -// Each course can have 1-4 course paths. +// Each track can have 1-4 paths. void load_track_path(s32 pathIndex) { TrackPathPoint* ptr; @@ -3718,7 +3718,7 @@ void load_track_path(s32 pathIndex) { bInvalidPath = 1; if (IsPodiumCeremony()) { // Only podium ceremony - // Course path included in course_data which has already been loaded into memory. + // Track path included in course_data which has already been loaded into memory. // This is how we get the addr to our path data. path = CM_GetProps()->PathTable2[pathIndex]; ptr = path; @@ -3743,7 +3743,7 @@ void load_track_path(s32 pathIndex) { } else { // ALL TRACKS TrackPathPoint* pathSrc = CM_GetProps()->PathTable2[pathIndex]; if (pathSrc == NULL) { - printf("code_80005FD0.c: Path %d in Course::PathTable2, was NULL.\n Your track is missing a path\n", + printf("code_80005FD0.c: Path %d in Track::PathTable2, was NULL.\n Your track is missing a path\n", pathIndex); } @@ -4212,7 +4212,7 @@ s32 generate_2d_path(TrackPathPoint* pathDest, TrackPathPoint* pathSrc, s32 numW void copy_courses_cpu_behaviour(void) { s32 i; - for (i = 0; i < NUM_COURSES - 1; i++) { + for (i = 0; i < NUM_TRACKS - 1; i++) { gCoursesCPUBehaviour[i] = LOAD_ASSET(CM_GetProps()->AIBehaviour); } } @@ -5384,7 +5384,7 @@ void func_80014DE4(s32 cameraIndex) { D_801646CC = 0; D_80164678[cameraIndex] = D_80164670[cameraIndex]; - if ((gModeSelection != 1) && ((GetCupCursorPosition() == COURSE_ONE) || (gDemoMode == (u16) 1))) { + if ((gModeSelection != 1) && ((GetCupCursorPosition() == TRACK_ONE) || (gDemoMode == (u16) 1))) { D_80164678[cameraIndex] = 0; } else if ((D_80164678[cameraIndex] != 0) && (D_80164678[cameraIndex] != (s16) 1) && (D_80164678[cameraIndex] != 2) && (D_80164678[cameraIndex] != 3)) { @@ -5397,7 +5397,7 @@ void func_80014DE4(s32 cameraIndex) { D_801646D0[cameraIndex].unk0 = 0; D_801646D0[cameraIndex].unk2 = 0; D_801646D0[cameraIndex].unk4 = 0; - if ((gModeSelection == 1) && (gCourseMapInit == 0)) { + if ((gModeSelection == 1) && (gTrackMapInit == 0)) { D_80164678[cameraIndex] = 0; } @@ -6671,7 +6671,7 @@ void look_behind_toggle(s32 cameraIdx) { static bool lookBehindActive[NUM_CAMERAS] = {0}; bool pressed = gControllers[cameraIdx].button & L_CBUTTONS; // button held Camera* camera = &cameras[cameraIdx]; - struct UnkStruct_800DC5EC* screenCtx = NULL; + ScreenContext* screenCtx = NULL; if (CVarGetInteger("gLookBehind", false) == false) { return; @@ -6682,7 +6682,7 @@ void look_behind_toggle(s32 cameraIdx) { } // Get the screen context - screenCtx = &D_8015F480[cameras[cameraIdx].playerId]; + screenCtx = &gScreenContexts[cameras[cameraIdx].playerId]; if (gRaceState == RACE_IN_PROGRESS) { // Flip the camera @@ -7816,7 +7816,7 @@ void func_8001BE78(void) { void func_8001C05C(void) { init_segment_racing(); - gCurrentCourseId = COURSE_AWARD_CEREMONY; + gCurrentCourseId = TRACK_AWARD_CEREMONY; SelectPodiumCeremony(); D_8016347C = 0; D_8016347E = 0; diff --git a/src/code_8003DC40.c b/src/code_8003DC40.c index 27299e581..4d459cbb5 100644 --- a/src/code_8003DC40.c +++ b/src/code_8003DC40.c @@ -233,30 +233,6 @@ void func_8003F46C(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 return; } else { CM_SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // //func_8003E048(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // case COURSE_CHOCO_MOUNTAIN: - // case COURSE_KOOPA_BEACH: - // func_8003E37C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // case COURSE_BOWSER_CASTLE: - // func_8003E6EC(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // case COURSE_LUIGI_RACEWAY: - // func_8003E9EC(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // case COURSE_WARIO_STADIUM: - // func_8003EE2C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // case COURSE_DK_JUNGLE: - // func_8003F138(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // default: - // func_8003E048(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - // break; - // } if (player->effects & 0x10000) { player->unk_DAC = 0.5f; } diff --git a/src/code_80057C60.c b/src/code_80057C60.c index 3dc33369e..dac231c79 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -411,31 +411,31 @@ void func_80057C60(void) { void func_80057CE4(void) { switch (D_8018D21C) { case 0: - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); break; case 1: - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); break; case 2: - func_802A3730(D_800DC5F0); + func_802A3730(gScreenTwoCtx); break; case 3: - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); break; case 4: - func_802A3730(D_800DC5F0); + func_802A3730(gScreenTwoCtx); break; case 8: - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); break; case 9: - func_802A3730(D_800DC5F0); + func_802A3730(gScreenTwoCtx); break; case 10: - func_802A3730(D_800DC5F4); + func_802A3730(gScreenThreeCtx); break; case 11: - func_802A3730(D_800DC5F8); + func_802A3730(gScreenFourCtx); break; } } @@ -489,7 +489,7 @@ void func_80057FC4(u32 arg0) { } } -void render_object(struct UnkStruct_800DC5EC* screen) { +void render_object(ScreenContext* screen) { UNUSED Gfx* temp_v1; if (gHUDDisable != 0) { @@ -539,7 +539,7 @@ void render_player_snow_effect(Camera* camera) { void render_object_for_player(s32 cameraId) { CM_DrawObjects(cameraId); CM_DrawParticles(cameraId); - CM_RenderCourseObjects(cameraId); + CM_DrawTrackObjects(cameraId); CM_DrawEditor(); render_object_smoke_particles(cameraId); @@ -1177,7 +1177,7 @@ void func_80059D00(void) { } break; } - update_object(); + tick_objects(); CM_TickObjects(); CM_TickParticles(); func_800744CC(); @@ -1348,81 +1348,10 @@ void func_8005A71C(void) { //} } -void update_object(void) { +void tick_objects(void) { - CM_UpdateCourseObjects(); + CM_TickTrackObjects(); - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // case COURSE_CHOCO_MOUNTAIN: - // break; - // case COURSE_BOWSER_CASTLE: - // func_80081208(); - // update_flame_particle(); - // break; - // case COURSE_BANSHEE_BOARDWALK: - // if (gGamestate != CREDITS_SEQUENCE) { - // update_trash_bin(); - // func_8007E4C4(); - // if (gModeSelection != TIME_TRIALS) { - // update_bat(); - // } - // wrapper_update_boos(); - // update_cheep_cheep(0); - // } - // break; - // case COURSE_YOSHI_VALLEY: - // func_80083080(); - // if (gGamestate != CREDITS_SEQUENCE) { - // update_hedgehogs(); - // } - // break; - // case COURSE_FRAPPE_SNOWLAND: - // if (gGamestate != CREDITS_SEQUENCE) { - // update_snowmen(); - // } - // update_snowflakes(); - // break; - // case COURSE_KOOPA_BEACH: - // if (gGamestate != CREDITS_SEQUENCE) { - // update_crabs(); - // } - // if ((gPlayerCount == 1) || (gPlayerCount == 2) || (gGamestate == CREDITS_SEQUENCE)) { - // update_seagulls(); - // } - // break; - // case COURSE_LUIGI_RACEWAY: - // if (D_80165898 != 0) { - // update_hot_air_balloon(); - // } - // break; - // case COURSE_MOO_MOO_FARM: - // if (gGamestate != CREDITS_SEQUENCE) { - // update_moles(); - // } - // break; - // case COURSE_KALIMARI_DESERT: - // update_train_smoke(); - // break; - // case COURSE_SHERBET_LAND: - // if (gGamestate != CREDITS_SEQUENCE) { - // func_800842C8(); - // } - // update_penguins(); - // break; - // case COURSE_RAINBOW_ROAD: - // if (gGamestate != CREDITS_SEQUENCE) { - // update_neon(); - // update_chain_chomps(); - // } - // break; - // case COURSE_DK_JUNGLE: - // update_ferries_smoke_particle(); - // break; - // } - // if (D_80165730 != 0) { - // func_80074EE8(); // Grand prix balloons - //} func_80076F2C(); if (!IsFrappeSnowland()) { update_leaf(); diff --git a/src/code_80057C60.h b/src/code_80057C60.h index 99b673d29..fdb650040 100644 --- a/src/code_80057C60.h +++ b/src/code_80057C60.h @@ -38,7 +38,7 @@ void func_80057CE4(void); void func_80057DD0(void); void func_80057FC4(u32); -void render_object(struct UnkStruct_800DC5EC* screen); +void render_object(ScreenContext* screen); void render_player_snow_effect(Camera* camera); void render_object_for_player(s32); void render_snowing_effect(s32); @@ -84,7 +84,7 @@ void func_8005A14C(s32); void func_8005A380(void); void func_8005A3C0(void); void func_8005A71C(void); -void update_object(void); +void tick_objects(void); void func_8005A99C(void); void func_8005AA34(void); void func_8005AA4C(void); diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index 39abc18d3..15b43bba3 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -30,7 +30,7 @@ #include "port/Game.h" #include "port/Engine.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" void init_hud(void) { @@ -118,7 +118,7 @@ void clear_object_list() { } /** - * Dma's mario kart 64 logo and course outline textures. + * Dma's mario kart 64 logo and track outline textures. */ u8* dma_misc_textures(u8* devAddr, u8* baseAddress, u32 size, u32 offset) { #ifdef TARGET_N64 @@ -168,8 +168,8 @@ void get_minimap_properties() { // This is incredibly dumb. MinimapDimensions ought to be something more like // `u16 MinimapDimensions[][2]` but that doesn't match for some insane reason - gMinimapWidth = CM_GetProps()->Minimap.Width; // MinimapDimensions[courseId * 2]; - gMinimapHeight = CM_GetProps()->Minimap.Height; // MinimapDimensions[courseId * 2 + 1]; + gMinimapWidth = CM_GetProps()->Minimap.Width; // MinimapDimensions[trackId * 2]; + gMinimapHeight = CM_GetProps()->Minimap.Height; // MinimapDimensions[trackId * 2 + 1]; } void func_8006EF60(void) { @@ -243,8 +243,8 @@ void func_8006F824(s32 arg0) { } void func_8006F8CC(void) { - if (gCourseMapInit == 0) { - gCourseMapInit = 1; + if (gTrackMapInit == 0) { + gTrackMapInit = 1; gHUDModes = 0; D_801657E6 = 0; D_801657F0 = 0; @@ -618,55 +618,6 @@ void func_8007055C(void) { s32 var_s4; CM_InitClouds(); - - switch (gCurrentCourseId) { - case COURSE_MARIO_RACEWAY: - // Uses Kalimari Desert's clouds for initialization? - // init_clouds(gKalimariDesertClouds); - break; - // case COURSE_YOSHI_VALLEY: - // init_clouds(gYoshiValleyMooMooFarmClouds); - // break; - // case COURSE_FRAPPE_SNOWLAND: - // if (gPlayerCount == 1) { - // var_s4 = 0x32; - // } else { - // var_s4 = 0x19; - // } - // for (var_s0 = 0; var_s0 < var_s4; var_s0++) { - // find_unused_obj_index(&D_8018CC80[D_8018D1F8 + var_s0]); - // } - // D_8018D1F8 += var_s0; - // D_8018D1F0 = var_s0; - // break; - // case COURSE_KOOPA_BEACH: - // init_clouds(gKoopaTroopaBeachClouds); - // break; - // case COURSE_ROYAL_RACEWAY: - // init_clouds(gRoyalRacewayClouds); - // break; - // case COURSE_LUIGI_RACEWAY: - // init_clouds(gLuigiRacewayClouds); - // break; - // case COURSE_MOO_MOO_FARM: - // init_clouds(gYoshiValleyMooMooFarmClouds); - // break; - // case COURSE_TOADS_TURNPIKE: - // init_stars(gToadsTurnpikeRainbowRoadStars); - // break; - // case COURSE_KALIMARI_DESERT: - // init_clouds(gKalimariDesertClouds); - // break; - // case COURSE_SHERBET_LAND: - // init_clouds(gSherbetLandClouds); - // break; - // case COURSE_RAINBOW_ROAD: - // init_stars(gToadsTurnpikeRainbowRoadStars); - // break; - // case COURSE_WARIO_STADIUM: - // init_stars(gWarioStadiumStars); - // break; - } func_8008C23C(); } @@ -688,260 +639,7 @@ void init_course_object(void) { s32 objectId; s32 i; - CM_InitCourseObjects(); - - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // // if (gGamestate != 9) { - // // if (gModeSelection == GRAND_PRIX) { - // // func_80070714(); - // // } - // // for (i = 0; i < D_80165738; i++) { - // // find_unused_obj_index(&gObjectParticle3[i]); - // // init_object(gObjectParticle3[i], 0); - // // } - // // } - // break; - // case COURSE_BOWSER_CASTLE: - // gNumActiveThwomps = NUM_THWOMPS_100CC_EXTRA; - // gThowmpSpawnList = gThwompSpawns100CCExtra; - // switch (gCCSelection) { /* switch 1; irregular */ - // case CC_100: /* switch 1 */ - // case CC_EXTRA: /* switch 1 */ - // break; - // case CC_50: /* switch 1 */ - // gNumActiveThwomps = NUM_THWOMPS_50CC; - // gThowmpSpawnList = gThomwpSpawns50CC; - // break; - // case CC_150: /* switch 1 */ - // gNumActiveThwomps = NUM_THWOMPS_150CC; - // gThowmpSpawnList = gThomwpSpawns150CC; - // break; - // } - // for (i = 0; i < gNumActiveThwomps; i++) { - // objectId = indexObjectList1[i]; - // init_object(objectId, 0); - // gObjectList[objectId].origin_pos[0] = gThowmpSpawnList[i].startX * xOrientation; - // gObjectList[objectId].origin_pos[2] = gThowmpSpawnList[i].startZ; - // gObjectList[objectId].unk_0D5 = gThowmpSpawnList[i].unk_4; - // gObjectList[objectId].primAlpha = gThowmpSpawnList[i].unk_6; - // } - // // Handle the big statue's fire breath - // objectId = indexObjectList2[0]; - // init_object(objectId, 0); - // gObjectList[objectId].pos[0] = -68.0 * xOrientation; - // gObjectList[objectId].pos[1] = 80.0f; - // gObjectList[objectId].pos[2] = -1840.0f; - // // Handle the smaller statues' fire breath - // for (i = 0; i < NUM_FIRE_BREATHS; i++) { - // objectId = indexObjectList3[i]; - // init_object(objectId, 0); - // gObjectList[objectId].pos[0] = gFireBreathsSpawns[i][0] * xOrientation; - // gObjectList[objectId].pos[1] = gFireBreathsSpawns[i][1]; - // gObjectList[objectId].pos[2] = gFireBreathsSpawns[i][2]; - // gObjectList[objectId].direction_angle[1] = 0; - // if (i % 2U) { - // gObjectList[objectId].direction_angle[1] += 0x8000; - // } - // } - // for (i = 0; i < 32; i++) { - // delete_object(&indexObjectList4[i]); - // } - // break; - // case COURSE_BANSHEE_BOARDWALK: - // if (gGamestate != CREDITS_SEQUENCE) { - // objectId = indexObjectList1[0]; - // init_texture_object(objectId, d_course_banshee_boardwalk_bat_tlut, sBoardwalkTexList, 0x20U, - // (u16) 0x00000040); - // gObjectList[objectId].orientation[0] = 0; - // gObjectList[objectId].orientation[1] = 0; - // gObjectList[objectId].orientation[2] = 0x8000; - // init_object(indexObjectList1[1], 0); - // init_object(indexObjectList1[2], 0); - // } - // break; - // case COURSE_YOSHI_VALLEY: - // for (i = 0; i < NUM_YV_FLAG_POLES; i++) { - // init_object(indexObjectList1[i], 0); - // } - // if (gGamestate != CREDITS_SEQUENCE) { - // for (i = 0; i < NUM_HEDGEHOGS; i++) { - // objectId = indexObjectList2[i]; - // init_object(objectId, 0); - // gObjectList[objectId].pos[0] = gObjectList[objectId].origin_pos[0] = - // gHedgehogSpawns[i].pos[0] * xOrientation; - // gObjectList[objectId].pos[1] = gObjectList[objectId].surfaceHeight = - // gHedgehogSpawns[i].pos[1] + 6.0; - // gObjectList[objectId].pos[2] = gObjectList[objectId].origin_pos[2] = gHedgehogSpawns[i].pos[2]; - // gObjectList[objectId].unk_0D5 = gHedgehogSpawns[i].unk_06; - // gObjectList[objectId].unk_09C = gHedgehogPatrolPoints[i][0] * xOrientation; - // gObjectList[objectId].unk_09E = gHedgehogPatrolPoints[i][2]; - // } - // } - // break; - // case COURSE_FRAPPE_SNOWLAND: - // for (i = 0; i < NUM_SNOWFLAKES; i++) { - // find_unused_obj_index(&gObjectParticle1[i]); - // } - // if (gGamestate != CREDITS_SEQUENCE) { - // for (i = 0; i < NUM_SNOWMEN; i++) { - // objectId = indexObjectList2[i]; - // init_object(objectId, 0); - // gObjectList[objectId].origin_pos[0] = gSnowmanSpawns[i].pos[0] * xOrientation; - // gObjectList[objectId].origin_pos[1] = gSnowmanSpawns[i].pos[1] + 5.0 + 3.0; - // gObjectList[objectId].origin_pos[2] = gSnowmanSpawns[i].pos[2]; - // objectId = indexObjectList1[i]; - // init_object(objectId, 0); - // gObjectList[objectId].origin_pos[0] = gSnowmanSpawns[i].pos[0] * xOrientation; - // gObjectList[objectId].origin_pos[1] = gSnowmanSpawns[i].pos[1] + 3.0; - // gObjectList[objectId].origin_pos[2] = gSnowmanSpawns[i].pos[2]; - // gObjectList[objectId].unk_0D5 = gSnowmanSpawns[i].unk_6; - // } - // } - // break; - // case COURSE_KOOPA_BEACH: - // if (gGamestate != CREDITS_SEQUENCE) { - // for (i = 0; i < NUM_CRABS; i++) { - // objectId = indexObjectList1[i]; - // init_object(objectId, 0); - // gObjectList[objectId].pos[0] = gObjectList[objectId].origin_pos[0] = - // gCrabSpawns[i].startX * xOrientation; - // gObjectList[objectId].unk_01C[0] = gCrabSpawns[i].patrolX * xOrientation; - - // gObjectList[objectId].pos[2] = gObjectList[objectId].origin_pos[2] = gCrabSpawns[i].startZ; - // gObjectList[objectId].unk_01C[2] = gCrabSpawns[i].patrolZ; - // } - // } - // for (i = 0; i < NUM_SEAGULLS; i++) { - // objectId = indexObjectList2[i]; - // init_object(objectId, 0); - // if (i < (NUM_SEAGULLS / 2)) { - // gObjectList[objectId].unk_0D5 = 0; - // } else { - // gObjectList[objectId].unk_0D5 = 1; - // } - // } - // break; - // case COURSE_ROYAL_RACEWAY: - // if (gGamestate != CREDITS_SEQUENCE) { - // if (gModeSelection == GRAND_PRIX) { - // func_80070714(); - // } - // for (i = 0; i < D_80165738; i++) { - // find_unused_obj_index(&gObjectParticle3[i]); - // init_object(gObjectParticle3[i], 0); - // } - // } - // break; - // case COURSE_LUIGI_RACEWAY: - // if (gGamestate != CREDITS_SEQUENCE) { - // if (gModeSelection == GRAND_PRIX) { - // func_80070714(); - // } - // D_80165898 = 0; - // init_object(indexObjectList1[0], 0); - // for (i = 0; i < D_80165738; i++) { - // find_unused_obj_index(&gObjectParticle3[i]); - // init_object(gObjectParticle3[i], 0); - // } - // } - // break; - // case COURSE_MOO_MOO_FARM: - // if (gGamestate != CREDITS_SEQUENCE) { - // if ((gPlayerCount == 1) || ((gPlayerCount == 2) && (gModeSelection == VERSUS))) { - // switch (gCCSelection) { /* switch 2; irregular */ - // case CC_50: /* switch 2 */ - // D_8018D1C8 = 4; - // D_8018D1D0 = 6; - // D_8018D1D8 = 6; - // break; - // case CC_100: /* switch 2 */ - // D_8018D1C8 = 5; - // D_8018D1D0 = 8; - // D_8018D1D8 = 8; - // break; - // case CC_150: /* switch 2 */ - // D_8018D1C8 = 5; - // D_8018D1D0 = 8; - // D_8018D1D8 = 10; - // break; - // case CC_EXTRA: /* switch 2 */ - // D_8018D1C8 = 5; - // D_8018D1D0 = 8; - // D_8018D1D8 = 8; - // break; - // } - // } else { - // D_8018D1C8 = 4; - // D_8018D1D0 = 6; - // D_8018D1D8 = 6; - // } - // for (i = 0; i < NUM_GROUP1_MOLES; i++) { - // D_8018D198[i] = 0; - // find_unused_obj_index(&indexObjectList1[i]); - // } - // for (i = 0; i < NUM_GROUP2_MOLES; i++) { - // D_8018D1A8[i] = 0; - // find_unused_obj_index(&indexObjectList1[i]); - // } - // for (i = 0; i < NUM_GROUP3_MOLES; i++) { - // D_8018D1B8[i] = 0; - // find_unused_obj_index(&indexObjectList1[i]); - // } - // for (i = 0; i < NUM_TOTAL_MOLES; i++) { - // find_unused_obj_index(&gObjectParticle1[i]); - // objectId = gObjectParticle1[i]; - // init_object(objectId, 0); - // gObjectList[objectId].pos[0] = gMoleSpawns.asVec3sList[i][0] * xOrientation; - // gObjectList[objectId].pos[2] = gMoleSpawns.asVec3sList[i][2]; - // func_800887C0(objectId); - // gObjectList[objectId].sizeScaling = 0.7f; - // } - // for (i = 0; i < gObjectParticle2_SIZE; i++) { - // find_unused_obj_index(&gObjectParticle2[i]); - // } - // } - // break; - // case COURSE_KALIMARI_DESERT: - // if (gGamestate != CREDITS_SEQUENCE) { - // find_unused_obj_index(&D_8018CF10); - // init_object(D_8018CF10, 0); - // for (i = 0; i < 50; i++) { - // find_unused_obj_index(&gObjectParticle1[i]); - // } - // for (i = 0; i < 5; i++) { - // find_unused_obj_index(&gObjectParticle2[i]); - // } - // for (i = 0; i < 32; i++) { - // find_unused_obj_index(&gObjectParticle3[i]); - // } - // } - // break; - // case COURSE_SHERBET_LAND: - // for (i = 0; i < NUM_PENGUINS; i++) { - // init_object(indexObjectList1[i], 0); - // } - // break; - // case COURSE_RAINBOW_ROAD: - // if (gGamestate != CREDITS_SEQUENCE) { - // for (i = 0; i < NUM_NEON_SIGNS; i++) { - // init_object(indexObjectList1[i], 0); - // } - // for (i = 0; i < NUM_CHAIN_CHOMPS; i++) { - // init_object(indexObjectList2[i], 0); - // } - // } - // break; - // case COURSE_DK_JUNGLE: - // for (i = 0; i < NUM_TORCHES; i++) { - // init_smoke_particles(i); - // // wtf? - // if (D_8018CF10) {} - // } - // break; - // default: - // break; - // } + CM_InitTrackObjects(); } void init_hud_one_player(void) { diff --git a/src/data/path_spawn_metadata.h b/src/data/path_spawn_metadata.h index 981b944fc..8c89010fa 100644 --- a/src/data/path_spawn_metadata.h +++ b/src/data/path_spawn_metadata.h @@ -13,7 +13,7 @@ typedef struct { /* 0x06 */ u16 unk6; /* 0x08 */ u16 unk8; /* 0x0A */ char padA[6]; -} _struct_gCoursePathSizes_0x10; // size 0x10 +} TrackPathSizes; // size 0x10 extern TrackPathPoint nullPath; extern s16 gAIDistances[]; diff --git a/src/data/textures.c b/src/data/textures.c index 99e867d2a..6e518ba03 100644 --- a/src/data/textures.c +++ b/src/data/textures.c @@ -1562,7 +1562,7 @@ MenuTexture D_02001B04[2] = { }; /** - * @brief MenuTexture of Course Preview Mario Raceway + * @brief MenuTexture of Track Preview Mario Raceway * */ MenuTexture seg2_mario_raceway_preview_texture[2] = { @@ -1571,7 +1571,7 @@ MenuTexture seg2_mario_raceway_preview_texture[2] = { }; /** - * @brief MenuTexture of Course Preview Choco Mountain + * @brief MenuTexture of Track Preview Choco Mountain * */ MenuTexture D_02001B54[2] = { @@ -1580,7 +1580,7 @@ MenuTexture D_02001B54[2] = { }; /** - * @brief MenuTexture of Course Preview Bowser Castle + * @brief MenuTexture of Track Preview Bowser Castle * */ MenuTexture D_02001B7C[2] = { @@ -1589,7 +1589,7 @@ MenuTexture D_02001B7C[2] = { }; /** - * @brief MenuTexture of Course Preview Banshee Boardwalk + * @brief MenuTexture of Track Preview Banshee Boardwalk * */ MenuTexture D_02001BA4[2] = { @@ -1598,7 +1598,7 @@ MenuTexture D_02001BA4[2] = { }; /** - * @brief MenuTexture of Course Preview Yoshi Valley + * @brief MenuTexture of Track Preview Yoshi Valley * */ MenuTexture D_02001BCC[2] = { @@ -1607,7 +1607,7 @@ MenuTexture D_02001BCC[2] = { }; /** - * @brief MenuTexture of Course Preview Frappe Snowland + * @brief MenuTexture of Track Preview Frappe Snowland * */ MenuTexture D_02001BF4[2] = { @@ -1616,7 +1616,7 @@ MenuTexture D_02001BF4[2] = { }; /** - * @brief MenuTexture of Course Preview Koopa Troopa Beach + * @brief MenuTexture of Track Preview Koopa Troopa Beach * */ MenuTexture D_02001C1C[2] = { @@ -1625,7 +1625,7 @@ MenuTexture D_02001C1C[2] = { }; /** - * @brief MenuTexture of Course Preview Royal Raceway + * @brief MenuTexture of Track Preview Royal Raceway * */ MenuTexture D_02001C44[2] = { @@ -1634,7 +1634,7 @@ MenuTexture D_02001C44[2] = { }; /** - * @brief MenuTexture of Course Preview Luigi Raceway + * @brief MenuTexture of Track Preview Luigi Raceway * */ MenuTexture D_02001C6C[2] = { @@ -1643,7 +1643,7 @@ MenuTexture D_02001C6C[2] = { }; /** - * @brief MenuTexture of Course Preview Moo Moo Farm + * @brief MenuTexture of Track Preview Moo Moo Farm * */ MenuTexture D_02001C94[2] = { @@ -1652,7 +1652,7 @@ MenuTexture D_02001C94[2] = { }; /** - * @brief MenuTexture of Course Preview Toads Turnpike + * @brief MenuTexture of Track Preview Toads Turnpike * */ MenuTexture D_02001CBC[2] = { @@ -1661,7 +1661,7 @@ MenuTexture D_02001CBC[2] = { }; /** - * @brief MenuTexture of Course Preview Kalimari Desert + * @brief MenuTexture of Track Preview Kalimari Desert * */ MenuTexture D_02001CE4[2] = { @@ -1670,7 +1670,7 @@ MenuTexture D_02001CE4[2] = { }; /** - * @brief MenuTexture of Course Preview Sherbet Land + * @brief MenuTexture of Track Preview Sherbet Land * */ MenuTexture D_02001D0C[2] = { @@ -1679,7 +1679,7 @@ MenuTexture D_02001D0C[2] = { }; /** - * @brief MenuTexture of Course Preview Rainbow Road + * @brief MenuTexture of Track Preview Rainbow Road * */ MenuTexture D_02001D34[2] = { @@ -1688,7 +1688,7 @@ MenuTexture D_02001D34[2] = { }; /** - * @brief MenuTexture of Course Preview Wario Stadium + * @brief MenuTexture of Track Preview Wario Stadium * */ MenuTexture D_02001D5C[2] = { @@ -1697,7 +1697,7 @@ MenuTexture D_02001D5C[2] = { }; /** - * @brief MenuTexture of Course Preview Block Fort + * @brief MenuTexture of Track Preview Block Fort * */ MenuTexture D_02001D84[2] = { @@ -1706,7 +1706,7 @@ MenuTexture D_02001D84[2] = { }; /** - * @brief MenuTexture of Course Preview Skyscraper + * @brief MenuTexture of Track Preview Skyscraper * */ MenuTexture D_02001DAC[2] = { @@ -1715,7 +1715,7 @@ MenuTexture D_02001DAC[2] = { }; /** - * @brief MenuTexture of Course Preview Double Deck + * @brief MenuTexture of Track Preview Double Deck * */ MenuTexture D_02001DD4[2] = { @@ -1724,7 +1724,7 @@ MenuTexture D_02001DD4[2] = { }; /** - * @brief MenuTexture of Course Preview DKs Jungle Parkway + * @brief MenuTexture of Track Preview DKs Jungle Parkway * */ MenuTexture D_02001DFC[2] = { @@ -1733,7 +1733,7 @@ MenuTexture D_02001DFC[2] = { }; /** - * @brief MenuTexture of Course Preview Big Donut + * @brief MenuTexture of Track Preview Big Donut * */ MenuTexture D_02001E24[2] = { @@ -4496,7 +4496,7 @@ MenuTexture seg2_special_cup_texture[2] = { }; /** - * @brief MenuTextures for the course preview mario raceway + * @brief MenuTextures for the track preview mario raceway * */ MenuTexture seg2_mario_raceway_preview_small_texture[2] = { diff --git a/src/debug/all_variables.h b/src/debug/all_variables.h index 74f7c11d3..53a8d8282 100644 --- a/src/debug/all_variables.h +++ b/src/debug/all_variables.h @@ -51,7 +51,6 @@ #include #include -#include #include #include #include diff --git a/src/effects.c b/src/effects.c index 422769a0d..21d175021 100644 --- a/src/effects.c +++ b/src/effects.c @@ -1602,90 +1602,6 @@ void func_8008FF08(Player* player, s8 playerId) { s16 waypoint; CM_Waypoints(player, playerId); - - // switch (gCurrentCourseId) { - // case COURSE_BOWSER_CASTLE: - // waypoint = gNearestPathPointByPlayerId[playerId]; - // if ((waypoint >= 0x235) && (waypoint < 0x247)) { - // player->nearestPathPointId = 0x214; - // } else if ((waypoint >= 0x267) && (waypoint < 0x277)) { - // player->nearestPathPointId = 0x25B; - // } else { - // player->nearestPathPointId = gNearestPathPointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // } - // break; - // case COURSE_BANSHEE_BOARDWALK: - // waypoint = gNearestPathPointByPlayerId[playerId]; - // if ((waypoint >= 0x12C) && (waypoint < 0x13C)) { - // player->nearestPathPointId = 0x12CU; - // } else { - // player->nearestPathPointId = gNearestPathPointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // } - // break; - // case COURSE_YOSHI_VALLEY: - // case COURSE_RAINBOW_ROAD: - // player->nearestPathPointId = gCopyNearestWaypointByPlayerId[playerId]; - // break; - // case COURSE_FRAPPE_SNOWLAND: - // waypoint = gNearestPathPointByPlayerId[playerId]; - // #ifdef VERSION_EU - // if (((waypoint >= 0xF0) && (waypoint < 0x11E)) || ((gCopyNearestWaypointByPlayerId[playerId] >= 0xF0) - // && - // (gCopyNearestWaypointByPlayerId[playerId] < - // 0x11E))) - // #else - // if ((waypoint >= 0xF0) && (waypoint < 0x105)) - // #endif - // { - // player->nearestPathPointId = 0xF0U; - // } else { - // player->nearestPathPointId = gCopyNearestWaypointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // } - // break; - // case COURSE_ROYAL_RACEWAY: - // waypoint = gNearestPathPointByPlayerId[playerId]; - // if ((waypoint >= 0x258) && (waypoint < 0x2A4)) { - // player->nearestPathPointId = 0x258U; - // } else { - // player->nearestPathPointId = gCopyNearestWaypointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // } - // break; - // case COURSE_DK_JUNGLE: - // waypoint = gNearestPathPointByPlayerId[playerId]; - // if ((waypoint >= 0xB9) && (waypoint < 0x119)) { - // player->nearestPathPointId = 0xB9U; - // } else { - // player->nearestPathPointId = gNearestPathPointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // } - // break; - // case COURSE_BLOCK_FORT: - // case COURSE_SKYSCRAPER: - // case COURSE_DOUBLE_DECK: - // case COURSE_BIG_DONUT: - // player->nearestPathPointId = 0U; - // break; - // default: - // player->nearestPathPointId = gNearestPathPointByPlayerId[playerId]; - // if (player->nearestPathPointId < 0) { - // player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; - // } - // break; - // } } void func_80090178(Player* player, s8 playerId, Vec3f arg2, Vec3f arg3) { diff --git a/src/ending/ceremony_and_credits.c b/src/ending/ceremony_and_credits.c index 846723d20..afe4b1ada 100644 --- a/src/ending/ceremony_and_credits.c +++ b/src/ending/ceremony_and_credits.c @@ -1488,7 +1488,7 @@ void func_802847CC(CinematicCamera* camera) { if (gCutsceneShotTimer == sp2C) { if (D_80286A04[D_800DC5E4].unk0 != 2) { - func_80280268(D_80286A04[D_800DC5E4 + 1].courseId); + func_80280268(D_80286A04[D_800DC5E4 + 1].trackId); } } } diff --git a/src/ending/ceremony_and_credits.h b/src/ending/ceremony_and_credits.h index 201c953e0..8d2f4d833 100644 --- a/src/ending/ceremony_and_credits.h +++ b/src/ending/ceremony_and_credits.h @@ -86,7 +86,7 @@ struct struct_80285D80 { struct struct_80286A04 { u8 unk0; - u8 courseId; + u8 trackId; struct struct_80285D80* unk4; struct struct_80285D80* unk8; u16 unkC; diff --git a/src/ending/code_80280000.c b/src/ending/code_80280000.c index 0b106c624..b40c81dc9 100644 --- a/src/ending/code_80280000.c +++ b/src/ending/code_80280000.c @@ -25,7 +25,7 @@ #include "main.h" #include "render_player.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/Matrix.h" #include "port/Game.h" @@ -65,14 +65,14 @@ void func_80280038(Camera* camera) { gSPMatrix(gDisplayListHead++, camera->lookAtMatrix, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); gCurrentCourseId = gCreditsCourseId; - SetCourseById(gCreditsCourseId); + SetTrackById(gCreditsCourseId); mtxf_identity(matrix); render_set_position(matrix, 0); - render_course(D_800DC5EC); - render_course_actors(D_800DC5EC); + render_track(gScreenOneCtx); + render_course_actors(gScreenOneCtx); CM_DrawActors(camera); CM_DrawStaticMeshActors(); - render_object(D_800DC5EC); + render_object(gScreenOneCtx); render_player_snow_effect(camera); ceremony_transition_sliding_borders(); func_80281C40(); @@ -81,20 +81,20 @@ void func_80280038(Camera* camera) { init_rdp(); } -void func_80280268(s32 courseId) { +void func_80280268(s32 trackId) { gIsInQuitToMenuTransition = 1; gQuitToMenuTransitionCounter = 5; D_802874A0 = 1; - if ((courseId < 0) || ((courseId >= NUM_COURSES - 1))) { - courseId = 0; + if ((trackId < 0) || ((trackId >= NUM_TRACKS - 1))) { + trackId = 0; } - gCreditsCourseId = courseId; + gCreditsCourseId = trackId; } void credits_loop(void) { Editor_ClearMatrix(); CM_TickEditor(); - Camera* camera = D_800DC5EC->camera; + Camera* camera = gScreenOneCtx->camera; f32 temp_f12; f32 temp; @@ -141,34 +141,34 @@ void load_credits(void) { } CM_AttachCamera(camera, PLAYER_ONE); - D_800DC5EC->camera = camera; + gScreenOneCtx->camera = camera; camera->renderMode = RENDER_FULL_SCENE; camera->unk_B4 = 60.0f; gCameraFOV[0] = 60.0f; gCurrentCourseId = gCreditsCourseId; - SetCourseById(gCreditsCourseId); + SetTrackById(gCreditsCourseId); D_800DC5B4 = 1; func_802A4D18(); set_screen(); - D_800DC5EC->screenWidth = SCREEN_WIDTH; - D_800DC5EC->screenHeight = SCREEN_HEIGHT; - D_800DC5EC->screenStartX = SCREEN_WIDTH / 2; - D_800DC5EC->screenStartY = SCREEN_HEIGHT / 2; + gScreenOneCtx->screenWidth = SCREEN_WIDTH; + gScreenOneCtx->screenHeight = SCREEN_HEIGHT; + gScreenOneCtx->screenStartX = SCREEN_WIDTH / 2; + gScreenOneCtx->screenStartY = SCREEN_HEIGHT / 2; gScreenModeSelection = SCREEN_MODE_1P; gActiveScreenMode = SCREEN_MODE_1P; gNextFreeMemoryAddress = gFreeMemoryResetAnchor; - load_course(gCurrentCourseId); + load_track(gCurrentCourseId); gFreeMemoryCourseAnchor = gNextFreeMemoryAddress; - gCourseMinX = -0x15A1; - gCourseMinY = -0x15A1; - gCourseMinZ = -0x15A1; + gTrackMinX = -0x15A1; + gTrackMinY = -0x15A1; + gTrackMinZ = -0x15A1; - gCourseMaxX = 0x15A1; - gCourseMaxY = 0x15A1; - gCourseMaxZ = 0x15A1; + gTrackMaxX = 0x15A1; + gTrackMaxY = 0x15A1; + gTrackMaxZ = 0x15A1; D_8015F59C = 0; D_8015F5A0 = 0; D_8015F58C = 0; @@ -190,7 +190,7 @@ void load_credits(void) { init_hud(); func_80093E60(); func_80092688(); - if (D_800DC5EC) {} + if (gScreenOneCtx) {} D_801625F8 = ((uintptr_t) gHeapEndPtr - gNextFreeMemoryAddress); D_801625FC = ((f32) D_801625F8 / 1000.0f); } diff --git a/src/ending/code_80281780.c b/src/ending/code_80281780.c index f3c3918f1..8d1e88038 100644 --- a/src/ending/code_80281780.c +++ b/src/ending/code_80281780.c @@ -97,7 +97,7 @@ void setup_podium_ceremony(void) { clear_D_802874D8_actors(); - gCurrentCourseId = COURSE_ROYAL_RACEWAY; + gCurrentCourseId = TRACK_ROYAL_RACEWAY; SelectPodiumCeremony(); D_800DC5B4 = (u16) 1; set_mirror_mode(0); @@ -105,25 +105,25 @@ void setup_podium_ceremony(void) { D_80287554 = 0; func_802A4D18(); set_screen(); - D_800DC5EC->screenWidth = SCREEN_WIDTH; - D_800DC5EC->screenHeight = SCREEN_HEIGHT; - D_800DC5EC->screenStartX = SCREEN_WIDTH / 2; - D_800DC5EC->screenStartY = SCREEN_HEIGHT / 2; + gScreenOneCtx->screenWidth = SCREEN_WIDTH; + gScreenOneCtx->screenHeight = SCREEN_HEIGHT; + gScreenOneCtx->screenStartX = SCREEN_WIDTH / 2; + gScreenOneCtx->screenStartY = SCREEN_HEIGHT / 2; gScreenModeSelection = SCREEN_MODE_1P; gNextFreeMemoryAddress = gFreeMemoryResetAnchor; gActiveScreenMode = SCREEN_MODE_1P; gModeSelection = GRAND_PRIX; - load_course(gCurrentCourseId); + load_track(gCurrentCourseId); gFreeMemoryCourseAnchor = (s32) gNextFreeMemoryAddress; gWaterLevel = -2000.0f; - gCourseMinX = -0x15A1; - gCourseMinY = -0x15A1; - gCourseMinZ = -0x15A1; + gTrackMinX = -0x15A1; + gTrackMinY = -0x15A1; + gTrackMinZ = -0x15A1; - gCourseMaxX = 0x15A1; - gCourseMaxY = 0x15A1; - gCourseMaxZ = 0x15A1; + gTrackMaxX = 0x15A1; + gTrackMaxY = 0x15A1; + gTrackMaxZ = 0x15A1; D_8015F59C = 0; D_8015F5A0 = 0; @@ -156,8 +156,8 @@ void setup_podium_ceremony(void) { func_802818BC(); CM_CleanCameras(); spawn_players_and_cameras(); - D_800DC5EC->camera->renderMode = RENDER_FULL_SCENE; - D_800DC5EC->camera->unk_B4 = 60.0f; + gScreenOneCtx->camera->renderMode = RENDER_FULL_SCENE; + gScreenOneCtx->camera->unk_B4 = 60.0f; gCameraFOV[0] = 60.0f; load_kart_textures(); init_hud(); diff --git a/src/ending/code_80281780.h b/src/ending/code_80281780.h index 47857bda6..456ff6cdc 100644 --- a/src/ending/code_80281780.h +++ b/src/ending/code_80281780.h @@ -21,7 +21,4 @@ extern s32 D_00835BA0; extern u8 defaultCharacterIds[]; extern s8 gGPOverallRanks[8]; -extern s32 _course_banshee_boardwalk_dl_mio0SegmentRomStart; -extern s32 _course_yoshi_valley_dl_mio0SegmentRomStart; - #endif // CODE_80281780_H diff --git a/src/ending/code_80281C40.c b/src/ending/code_80281C40.c index 8aa48c42d..0da3f9620 100644 --- a/src/ending/code_80281C40.c +++ b/src/ending/code_80281C40.c @@ -17,7 +17,7 @@ #include "memory.h" #include "engine/Matrix.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "port/Game.h" struct UnkStruct80287560 { @@ -55,7 +55,7 @@ extern Gfx D_80284F70[]; extern Gfx D_80284EE0[]; void func_80281D00(void) { - Camera* camera = D_800DC5EC->camera; + Camera* camera = gScreenOneCtx->camera; UNUSED s32 pad[3]; u16 perspNorm; Mat4 matrix; @@ -90,7 +90,7 @@ void func_80281D00(void) { render_players(camera, PLAYER_ONE); gSPDisplayList(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&D_80284EE0)); update_actors_loop(); - render_object(D_800DC5EC); + render_object(gScreenOneCtx); func_80021B0C(); gSPDisplayList(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&D_80284EE0)); func_80093F10(); diff --git a/src/engine/CoreMath.h b/src/engine/CoreMath.h index 626b498ae..60cf67e5a 100644 --- a/src/engine/CoreMath.h +++ b/src/engine/CoreMath.h @@ -208,7 +208,7 @@ struct FRotator { }; /** - * For selecting a section of a course path + * For selecting a section of a track path * Usage: IPathSpan(point1, point2) --> IPathSpan(40, 65) */ struct IPathSpan { diff --git a/src/engine/Cup.cpp b/src/engine/Cup.cpp index 36e192723..0bbaff851 100644 --- a/src/engine/Cup.cpp +++ b/src/engine/Cup.cpp @@ -1,7 +1,7 @@ #include "Cup.h" -#include "courses/Course.h" +#include "tracks/Track.h" -Cup::Cup(std::string id, const char* name, std::vector> courses) { +Cup::Cup(std::string id, const char* name, std::vector> courses) { Id = id; Name = name; Courses = courses; @@ -23,14 +23,14 @@ void Cup::Previous() { } } -void Cup::SetCourse(size_t position) { +void Cup::SetTrack(size_t position) { if ((position < 0) || (position >= Courses.size())) { - throw std::invalid_argument("Invalid course index."); + throw std::invalid_argument("Invalid track index."); } CursorPosition = position; } -std::shared_ptr Cup::GetCourse() { +std::shared_ptr Cup::GetTrack() { return Courses[CursorPosition]; } diff --git a/src/engine/Cup.h b/src/engine/Cup.h index a38563bb0..54f83bd70 100644 --- a/src/engine/Cup.h +++ b/src/engine/Cup.h @@ -3,25 +3,25 @@ // Base Cup class #include #include -#include "courses/Course.h" +#include "tracks/Track.h" -class Course; // <-- Forward declare +class Track; // <-- Forward declare class Cup { public: std::string Id; const char* Name; u8 *Thumbnail; - size_t CursorPosition = 0; // Course index in cup - std::vector> Courses; + size_t CursorPosition = 0; // Track index in cup + std::vector> Courses; - explicit Cup(std::string id, const char* name, std::vector> courses); + explicit Cup(std::string id, const char* name, std::vector> courses); virtual void ShuffleCourses(); virtual void Next(); virtual void Previous(); - virtual void SetCourse(size_t position); - virtual std::shared_ptr GetCourse(); + virtual void SetTrack(size_t position); + virtual std::shared_ptr GetTrack(); virtual size_t GetSize(); }; \ No newline at end of file diff --git a/src/engine/GameAPI.h b/src/engine/GameAPI.h index 6e2e84323..1110aafed 100644 --- a/src/engine/GameAPI.h +++ b/src/engine/GameAPI.h @@ -1,6 +1,6 @@ #ifndef GAME_API_H #define GAME_API_H -void* GetCourse(void); +void* GetTrack(void); -#endif // GAME_API_H \ No newline at end of file +#endif // GAME_API_H diff --git a/src/engine/RaceManager.cpp b/src/engine/RaceManager.cpp index 851c25375..d59f875a8 100644 --- a/src/engine/RaceManager.cpp +++ b/src/engine/RaceManager.cpp @@ -52,15 +52,15 @@ extern "C" void add_triangle_to_collision_mesh(Vtx* vtx1, Vtx* vtx2, Vtx* vtx3, } void RaceManager::Load() { - if (WorldContext.GetCurrentCourse()) { + if (WorldContext.GetTrack()) { mirroredVtxCache.clear(); - WorldContext.GetCurrentCourse()->Load(); + WorldContext.GetTrack()->Load(); } } void RaceManager::UnLoad() { - if (WorldContext.GetCurrentCourse()) { - WorldContext.GetCurrentCourse()->UnLoad(); + if (WorldContext.GetTrack()) { + WorldContext.GetTrack()->UnLoad(); } } @@ -74,14 +74,14 @@ void RaceManager::PreInit() { } void RaceManager::BeginPlay() { - auto course = WorldContext.GetCurrentCourse(); + auto track = WorldContext.GetTrack(); - if (course) { + if (track) { // Do not spawn finishline in credits or battle mode. And if bSpawnFinishline. if ((gGamestate != CREDITS_SEQUENCE) && (gModeSelection != BATTLE)) { - if (course->bSpawnFinishline) { - if (course->FinishlineSpawnPoint.has_value()) { - AFinishline::Spawn(course->FinishlineSpawnPoint.value(), IRotator(0, 0, 0)); + if (track->bSpawnFinishline) { + if (track->FinishlineSpawnPoint.has_value()) { + AFinishline::Spawn(track->FinishlineSpawnPoint.value(), IRotator(0, 0, 0)); } else { AFinishline::Spawn(); } @@ -90,7 +90,7 @@ void RaceManager::BeginPlay() { } gEditor.AddLight("Sun", nullptr, D_800DC610[1].l->l.dir); - course->BeginPlay(); + track->BeginPlay(); } } diff --git a/src/engine/World.cpp b/src/engine/World.cpp index ac7cfb372..f204ee0f8 100644 --- a/src/engine/World.cpp +++ b/src/engine/World.cpp @@ -1,7 +1,7 @@ #include #include "World.h" #include "Cup.h" -#include "courses/Course.h" +#include "tracks/Track.h" #include "objects/BombKart.h" #include "TrainCrossing.h" #include @@ -27,7 +27,7 @@ extern "C" { #include "engine/cameras/TourCamera.h" #include "engine/cameras/LookBehindCamera.h" -std::shared_ptr CurrentCourse; +std::shared_ptr mTrack; Cup* CurrentCup; World::World() { @@ -38,27 +38,27 @@ World::~World() { CleanWorld(); } -std::shared_ptr World::AddCourse(std::shared_ptr course) { - gWorldInstance.Courses.push_back(course); - return course; +std::shared_ptr World::AddTrack(std::shared_ptr track) { + gWorldInstance.Tracks.push_back(track); + return track; } void World::AddCup(Cup* cup) { Cups.push_back(cup); } -void World::SetCurrentCourse(std::shared_ptr course) { - if (CurrentCourse) { - UnLoadCourse(); +void World::SetCurrentTrack(std::shared_ptr track) { + if (mTrack) { + UnLoadTrack(); } - if (CurrentCourse == course) { + if (mTrack == track) { return; } - CurrentCourse = std::move(course); + mTrack = std::move(track); } -void World::SetCourseFromCup() { - SetCurrentCourse(CurrentCup->GetCourse()); +void World::SetTrackFromCup() { + SetCurrentTrack(CurrentCup->GetTrack()); } TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, @@ -114,39 +114,39 @@ void World::SetCurrentCup(Cup* cup) { } } -void World::SetCourse(const char* name) { +void World::SetTrack(const char* name) { //! @todo Use content dictionary instead - for (size_t i = 0; i < Courses.size(); i++) { - if (strcmp(Courses[i]->Props.Name, name) == 0) { - SetCurrentCourse(Courses[i]); + for (size_t i = 0; i < Tracks.size(); i++) { + if (strcmp(Tracks[i]->Props.Name, name) == 0) { + SetCurrentTrack(Tracks[i]); break; } } - std::runtime_error("SetCourse() Course name not found in Courses list"); + std::runtime_error("[World] [SetTrack()] Track name not found in Track list"); } -void World::NextCourse() { - if (CourseIndex < Courses.size() - 1) { - CourseIndex++; +void World::NextTrack() { + if (TrackIndex < Tracks.size() - 1) { + TrackIndex++; } else { - CourseIndex = 0; + TrackIndex = 0; } - gWorldInstance.SetCurrentCourse(Courses[CourseIndex]); + gWorldInstance.SetCurrentTrack(Tracks[TrackIndex]); } -void World::PreviousCourse() { - if (CourseIndex > 0) { - CourseIndex--; +void World::PreviousTrack() { + if (TrackIndex > 0) { + TrackIndex--; } else { - CourseIndex = Courses.size() - 1; + TrackIndex = Tracks.size() - 1; } - gWorldInstance.SetCurrentCourse(Courses[CourseIndex]); + gWorldInstance.SetCurrentTrack(Tracks[TrackIndex]); } void World::TickCameras() { for (size_t i = 0; i < 4; i++) { - struct UnkStruct_800DC5EC* screen = &D_8015F480[i]; + ScreenContext* screen = &gScreenContexts[i]; if (NULL == screen->pendingCamera) { continue; } if (screen->pendingCamera != screen->camera) { screen->camera = screen->pendingCamera; diff --git a/src/engine/World.h b/src/engine/World.h index afa826458..872ea17c0 100644 --- a/src/engine/World.h +++ b/src/engine/World.h @@ -3,7 +3,7 @@ #include #include "CoreMath.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/cameras/GameCamera.h" #include "objects/Object.h" #include "Cup.h" @@ -29,7 +29,7 @@ extern "C" { class Cup; // <-- Forward declaration class OObject; class GameCamera; -class Course; +class Track; class StaticMeshActor; class OBombKart; class TrainCrossing; @@ -52,7 +52,7 @@ typedef struct Matrix { {} }; private: - std::shared_ptr CurrentCourse; + std::shared_ptr mTrack; Cup* CurrentCup; public: @@ -62,7 +62,7 @@ public: RaceManager& GetRaceManager() { return *RaceManagerInstance; } void SetRaceManager(std::unique_ptr manager) { RaceManagerInstance = std::move(manager); } - std::shared_ptr AddCourse(std::shared_ptr course); + std::shared_ptr AddTrack(std::shared_ptr track); void TickCameras(); @@ -100,32 +100,32 @@ public: u32 GetCupIndex(); u32 NextCup(); u32 PreviousCup(); - void SetCourseFromCup(); + void SetTrackFromCup(); World* GetWorld(void); void CleanWorld(void); - // getter/setter for current course - std::shared_ptr GetCurrentCourse() { - return CurrentCourse; + // getter/setter for current track + std::shared_ptr GetTrack() { + return mTrack; } - void SetCurrentCourse(std::shared_ptr course); + void SetCurrentTrack(std::shared_ptr track); - // These are only for browsing through the course list - void SetCourse(const char*); + // These are only for browsing through the track list + void SetTrack(const char*); template - void SetCourseByType() { - for (const auto& course : Courses) { - if (dynamic_cast(course.get())) { - SetCurrentCourse(course); + void SetTrackByType() { + for (const auto& track : Tracks) { + if (dynamic_cast(track.get())) { + SetCurrentTrack(track); return; } } - printf("World::SetCourseByType() No course by the type found"); + printf("World::SetTrackByType() No track by the type found"); } - void NextCourse(void); - void PreviousCourse(void); + void NextTrack(void); + void PreviousTrack(void); Matrix Mtx; @@ -147,9 +147,9 @@ public: TrainCrossing* AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius); std::vector> Crossings; - // Holds all available courses - std::vector> Courses; - size_t CourseIndex = 0; // For browsing courses. + // Holds all available tracks + std::vector> Tracks; + size_t TrackIndex = 0; // For browsing tracks. private: std::unique_ptr RaceManagerInstance; }; diff --git a/src/engine/actors/FallingRock.cpp b/src/engine/actors/FallingRock.cpp index 4b6dc1ad5..fb0c47280 100644 --- a/src/engine/actors/FallingRock.cpp +++ b/src/engine/actors/FallingRock.cpp @@ -27,7 +27,7 @@ AFallingRock::AFallingRock(SpawnParams params) : AActor(params) { FVector pos = params.Location.value_or(FVector(0, 0, 0)); TimerLength = params.Behaviour.value_or(80); - Pos[0] = pos.x * gCourseDirection; + Pos[0] = pos.x * gTrackDirection; Pos[1] = pos.y + 10.0f; Pos[2] = pos.z; State = _count; @@ -49,7 +49,7 @@ void AFallingRock::SetSpawnParams(SpawnParams& params) { void AFallingRock::Reset() { RespawnTimer = TimerLength; FVector pos = SpawnPos; - Pos[0] = (f32) pos.x * gCourseDirection; + Pos[0] = (f32) pos.x * gTrackDirection; Pos[1] = (f32) pos.y + 10.0f; Pos[2] = (f32) pos.z; vec3f_set(Velocity, 0, 0, 0); diff --git a/src/engine/actors/MarioSign.cpp b/src/engine/actors/MarioSign.cpp index 097d00f2e..bede4cd8b 100644 --- a/src/engine/actors/MarioSign.cpp +++ b/src/engine/actors/MarioSign.cpp @@ -21,7 +21,7 @@ AMarioSign::AMarioSign(const SpawnParams& params) : AActor(params) { Speed = params.Speed.value_or(182); FVector pos = params.Location.value_or(FVector(0, 0, 0)); - Pos[0] = pos.x * gCourseDirection; + Pos[0] = pos.x * gTrackDirection; Pos[1] = pos.y; Pos[2] = pos.z; diff --git a/src/engine/actors/WarioSign.cpp b/src/engine/actors/WarioSign.cpp index 7976f7c10..5cda60140 100644 --- a/src/engine/actors/WarioSign.cpp +++ b/src/engine/actors/WarioSign.cpp @@ -21,7 +21,7 @@ AWarioSign::AWarioSign(const SpawnParams& params) : AActor(params) { Speed = params.Speed.value_or(182); FVector pos = params.Location.value_or(FVector(0, 0, 0)); - Pos[0] = pos.x * gCourseDirection; + Pos[0] = pos.x * gTrackDirection; Pos[1] = pos.y; Pos[2] = pos.z; diff --git a/src/engine/cameras/TourCamera.cpp b/src/engine/cameras/TourCamera.cpp index 4feb48c65..c7a453b0e 100644 --- a/src/engine/cameras/TourCamera.cpp +++ b/src/engine/cameras/TourCamera.cpp @@ -45,12 +45,12 @@ void TourCamera::Reset() { void TourCamera::NextShot() { TourCamera::Reset(); bShotComplete = false; - _camera->pos[0] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].Pos.x; - _camera->pos[1] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].Pos.y; - _camera->pos[2] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].Pos.z; - _camera->lookAt[0] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].LookAt.x; - _camera->lookAt[1] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].LookAt.y; - _camera->lookAt[2] = gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].LookAt.z; + _camera->pos[0] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.x; + _camera->pos[1] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.y; + _camera->pos[2] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.z; + _camera->lookAt[0] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.x; + _camera->lookAt[1] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.y; + _camera->lookAt[2] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.z; } void TourCamera::Stop() { @@ -58,7 +58,7 @@ void TourCamera::Stop() { gTourComplete = true; CM_ResetAudio(); - D_8015F480[0].pendingCamera = &cameras[0]; + gScreenContexts[0].pendingCamera = &cameras[0]; bActive = false; bTourComplete = true; @@ -76,7 +76,7 @@ void TourCamera::Tick() { if ( (nullptr == _camera) || (bTourComplete) || - (ShotIndex >= gWorldInstance.GetCurrentCourse()->TourShots.size()) + (ShotIndex >= gWorldInstance.GetTrack()->TourShots.size()) ) { Alpha += 5; if (Alpha == 255) { @@ -108,7 +108,7 @@ void TourCamera::Tick() { } } - bool done = TourCamera::MoveCameraAlongSpline(&extraArg, gWorldInstance.GetCurrentCourse()->TourShots[ShotIndex].Frames); + bool done = TourCamera::MoveCameraAlongSpline(&extraArg, gWorldInstance.GetTrack()->TourShots[ShotIndex].Frames); // Advance to the next camera shot if (done) { diff --git a/src/engine/editor/SceneManager.cpp b/src/engine/editor/SceneManager.cpp index 90a33f48f..1c4edb407 100644 --- a/src/engine/editor/SceneManager.cpp +++ b/src/engine/editor/SceneManager.cpp @@ -42,7 +42,7 @@ namespace Editor { /** * Save track properties, static mesh actors, actors, and tour camera */ - data["Props"] = gWorldInstance.GetCurrentCourse()->Props.to_json(); + data["Props"] = gWorldInstance.GetTrack()->Props.to_json(); nlohmann::json staticMesh; SaveStaticMeshActors(staticMesh); @@ -54,7 +54,7 @@ namespace Editor { data["Actors"] = actors; - if (gWorldInstance.GetCurrentCourse()->TourShots.size() != 0) { + if (gWorldInstance.GetTrack()->TourShots.size() != 0) { nlohmann::json tour; SaveTour(tour); data["Tour"] = tour; @@ -85,10 +85,10 @@ namespace Editor { } /** Do not use gWorldInstance.CurrentCourse during loading! The current track is not guaranteed! **/ - void LoadLevel(Course* course, std::string sceneFile) { + void LoadLevel(Track* track, std::string sceneFile) { SceneFile = sceneFile; - if ((nullptr == course) || (nullptr == course->RootArchive)) { - SPDLOG_INFO("[SceneManager] [LoadLevel] Failed to load scenefile, course or rootarchive were null"); + if ((nullptr == track) || (nullptr == track->RootArchive)) { + SPDLOG_INFO("[SceneManager] [LoadLevel] Failed to load scenefile, track or rootarchive were null"); return; } @@ -97,7 +97,7 @@ namespace Editor { * the init data needs to be manually populated */ auto initData = std::make_shared(); - initData->Parent = course->RootArchive; + initData->Parent = track->RootArchive; initData->Format = RESOURCE_FORMAT_BINARY; initData->ByteOrder = Ship::Endianness::Little; initData->Type = static_cast(Ship::ResourceType::Json); @@ -116,10 +116,10 @@ namespace Editor { SPDLOG_INFO("[SceneManager] [LoadLevel] Loading track scenefile..."); // Load the Props, and populate actors - LoadProps(course, data); - LoadActors(course, data); - LoadStaticMeshActors(course, data); - LoadTour(course, data); + LoadProps(track, data); + LoadActors(track, data); + LoadStaticMeshActors(track, data); + LoadTour(track, data); SPDLOG_INFO("[SceneManager] [LoadLevel] Scene File Loaded!"); } @@ -138,11 +138,11 @@ namespace Editor { } // Called from ContentBrowser.cpp - void LoadMinimap(Course* course, std::string filePath) { + void LoadMinimap(Track* track, std::string filePath) { SPDLOG_INFO(" Loading {} minimap...", filePath); - if (nullptr == course->RootArchive) { + if (nullptr == track->RootArchive) { SPDLOG_INFO("[SceneManager] [LoadMinimap] Root archive is nullptr"); - SetDefaultMinimap(course); + SetDefaultMinimap(track); return; } @@ -151,7 +151,7 @@ namespace Editor { * the init data needs to be manually populated */ auto initData = std::make_shared(); - initData->Parent = course->RootArchive; + initData->Parent = track->RootArchive; initData->Format = RESOURCE_FORMAT_BINARY; initData->ByteOrder = Ship::Endianness::Little; initData->Type = static_cast(MK64::ResourceType::Minimap); @@ -163,19 +163,19 @@ namespace Editor { if (ptr) { SPDLOG_INFO(" Minimap Loaded!"); MK64::MinimapTexture texture = ptr->Texture; - course->Props.Minimap.Texture = (const char*)texture.Data; - course->Props.Minimap.Width = texture.Width; - course->Props.Minimap.Height = texture.Height; + track->Props.Minimap.Texture = (const char*)texture.Data; + track->Props.Minimap.Width = texture.Width; + track->Props.Minimap.Height = texture.Height; } else { // Fallback - SetDefaultMinimap(course); + SetDefaultMinimap(track); } } // Sets the default minimap if none has been set - void SetDefaultMinimap(Course* course) { - course->Props.Minimap.Texture = minimap_mario_raceway; - course->Props.Minimap.Width = ResourceGetTexWidthByName(course->Props.Minimap.Texture); - course->Props.Minimap.Height = ResourceGetTexHeightByName(course->Props.Minimap.Texture); + void SetDefaultMinimap(Track* track) { + track->Props.Minimap.Texture = minimap_mario_raceway; + track->Props.Minimap.Width = ResourceGetTexWidthByName(track->Props.Minimap.Texture); + track->Props.Minimap.Height = ResourceGetTexHeightByName(track->Props.Minimap.Texture); SPDLOG_INFO(" No minimap found! Falling back to default minimap"); } @@ -253,47 +253,47 @@ namespace Editor { } void SaveTour(nlohmann::json& tour) { - tour["Enabled"] = gWorldInstance.GetCurrentCourse()->bTourEnabled; + tour["Enabled"] = gWorldInstance.GetTrack()->bTourEnabled; // Camera shots tour["Shots"] = nlohmann::json::array(); - for (const auto& shot : gWorldInstance.GetCurrentCourse()->TourShots) { + for (const auto& shot : gWorldInstance.GetTrack()->TourShots) { tour["Shots"].push_back(ToJson(shot)); } } - void LoadProps(Course* course, nlohmann::json& data) { + void LoadProps(Track* track, nlohmann::json& data) { if (!data.contains("Props") || !data["Props"].is_object()) { SPDLOG_INFO("Track is missing props data. Is the scene.json file corrupt?"); return; } try { - course->Props.from_json(data["Props"]); + track->Props.from_json(data["Props"]); } catch(const std::exception& e) { std::cerr << " Error parsing track properties: " << e.what() << std::endl; std::cerr << " Is your scene.json file out of date?" << std::endl; } } - void LoadActors(Course* course, nlohmann::json& data) { + void LoadActors(Track* track, nlohmann::json& data) { if (!data.contains("Actors") || !data["Actors"].is_object()) { SPDLOG_INFO(" This track contains no actors"); return; } - course->SpawnList.clear(); // Clear existing actors, if any + track->SpawnList.clear(); // Clear existing actors, if any for (const auto& actor : data["Actors"]) { SpawnParams params; params.from_json(actor); //(); if (!params.Name.empty()) { - course->SpawnList.push_back(params); + track->SpawnList.push_back(params); } } } - void LoadStaticMeshActors(Course* course, nlohmann::json& data) { + void LoadStaticMeshActors(Track* track, nlohmann::json& data) { if (!data.contains("StaticMeshActors") || !data["StaticMeshActors"].is_object()) { SPDLOG_INFO(" This track contains no StaticMeshActors!"); return; @@ -306,7 +306,7 @@ namespace Editor { } } - void LoadTour(Course* course, nlohmann::json& data) { + void LoadTour(Track* track, nlohmann::json& data) { if (!data.contains("Tour") || !data["Tour"].is_object()) { SPDLOG_INFO(" This track does not contain a camera tour"); return; @@ -316,17 +316,17 @@ namespace Editor { // Enable flag if (tours.contains("Enabled")) { - course->bTourEnabled = tours["Enabled"].get(); + track->bTourEnabled = tours["Enabled"].get(); } else { - course->bTourEnabled = false; + track->bTourEnabled = false; } // Camera shots if (tours.contains("Shots") && tours["Shots"].is_array()) { - course->TourShots.clear(); + track->TourShots.clear(); for (const auto& shotJson : tours["Shots"]) { - course->TourShots.push_back(FromJsonCameraShot(shotJson)); + track->TourShots.push_back(FromJsonCameraShot(shotJson)); } } } diff --git a/src/engine/editor/SceneManager.h b/src/engine/editor/SceneManager.h index 8fa101aac..f7b3a50bb 100644 --- a/src/engine/editor/SceneManager.h +++ b/src/engine/editor/SceneManager.h @@ -2,26 +2,26 @@ #include #include "CoreMath.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include #include namespace Editor { void SaveLevel(); - void LoadLevel(Course* course, std::string sceneFile); + void LoadLevel(Track* track, std::string sceneFile); void Load_AddStaticMeshActor(const nlohmann::json& actorJson); void SetSceneFile(std::shared_ptr archive, std::string sceneFile); - void LoadMinimap(Course* course, std::string filePath); - void SetDefaultMinimap(Course* course); + void LoadMinimap(Track* track, std::string filePath); + void SetDefaultMinimap(Track* track); void SaveActors(nlohmann::json& actorList); void SaveStaticMeshActors(nlohmann::json& actorList); void SaveTour(nlohmann::json& tour); - void LoadProps(Course* course, nlohmann::json& data); - void LoadActors(Course* course, nlohmann::json& data); - void LoadStaticMeshActors(Course* course, nlohmann::json& data); - void LoadTour(Course* course, nlohmann::json& data); + void LoadProps(Track* track, nlohmann::json& data); + void LoadActors(Track* track, nlohmann::json& data); + void LoadStaticMeshActors(Track* track, nlohmann::json& data); + void LoadTour(Track* track, nlohmann::json& data); void SpawnActors(std::vector> spawnList); diff --git a/src/engine/objects/ChainChomp.cpp b/src/engine/objects/ChainChomp.cpp index b9c59606d..fafed0846 100644 --- a/src/engine/objects/ChainChomp.cpp +++ b/src/engine/objects/ChainChomp.cpp @@ -14,6 +14,7 @@ extern "C" { #include "code_80057C60.h" #include "code_80005FD0.h" #include "external.h" +#include "course_offsets.h" } size_t OChainChomp::_count = 0; diff --git a/src/engine/objects/Crab.h b/src/engine/objects/Crab.h index 3a1acdfb0..c89bb1df2 100644 --- a/src/engine/objects/Crab.h +++ b/src/engine/objects/Crab.h @@ -22,7 +22,7 @@ extern "C" { * @arg end x and z patrol location * * Crab patrols between start and end. - * The game automatically places the actor on the course surface. + * The game automatically places the actor on the surface of the tracks geometry. * Therefore, providing a Y height is unnecessary. * * Crab appears to have a maximum patrolling distance and will patrol between diff --git a/src/engine/objects/Flagpole.cpp b/src/engine/objects/Flagpole.cpp index ec7588720..9f51bab92 100644 --- a/src/engine/objects/Flagpole.cpp +++ b/src/engine/objects/Flagpole.cpp @@ -11,6 +11,7 @@ extern "C" { #include "math_util_2.h" #include "code_80086E70.h" #include "code_80057C60.h" +#include "course_offsets.h" } size_t OFlagpole::_count = 0; diff --git a/src/engine/objects/Lakitu.h b/src/engine/objects/Lakitu.h index 1944733ee..470c18e91 100644 --- a/src/engine/objects/Lakitu.h +++ b/src/engine/objects/Lakitu.h @@ -12,7 +12,6 @@ extern "C" { #include "waypoints.h" #include "common_structs.h" #include "objects.h" -#include "course_offsets.h" } /** diff --git a/src/engine/objects/Seagull.cpp b/src/engine/objects/Seagull.cpp index 8eff07740..fb926892c 100644 --- a/src/engine/objects/Seagull.cpp +++ b/src/engine/objects/Seagull.cpp @@ -22,6 +22,7 @@ extern "C" { #include "some_data.h" #include "ceremony_and_credits.h" #include "assets/models/common_data.h" +#include "course_offsets.h" extern SplineData D_800E6034; extern SplineData D_800E60F0; extern SplineData D_800E61B4; diff --git a/src/engine/objects/Thwomp.cpp b/src/engine/objects/Thwomp.cpp index 324f32cfb..b658b50ff 100644 --- a/src/engine/objects/Thwomp.cpp +++ b/src/engine/objects/Thwomp.cpp @@ -2,7 +2,7 @@ #include #include "Thwomp.h" #include -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/World.h" #include "port/Game.h" diff --git a/src/engine/courses/BansheeBoardwalk.cpp b/src/engine/tracks/BansheeBoardwalk.cpp similarity index 95% rename from src/engine/courses/BansheeBoardwalk.cpp rename to src/engine/tracks/BansheeBoardwalk.cpp index c3ea03e60..424b584b4 100644 --- a/src/engine/courses/BansheeBoardwalk.cpp +++ b/src/engine/tracks/BansheeBoardwalk.cpp @@ -38,7 +38,6 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" -#include "course.h" extern const char *banshee_boardwalk_dls[100]; } @@ -59,7 +58,7 @@ BansheeBoardwalk::BansheeBoardwalk() { Props.SetText(Props.Name, "banshee boardwalk", sizeof(Props.Name)); Props.SetText(Props.DebugName, "ghost", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "747m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "747m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009058; Props.AIMaximumSeparation = 40.0f; @@ -118,7 +117,7 @@ BansheeBoardwalk::BansheeBoardwalk() { } void BansheeBoardwalk::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(banshee_boardwalk_dls); i++) { @@ -146,7 +145,7 @@ void BansheeBoardwalk::Load() { D_801625EC = 0; D_801625F4 = 0; D_801625F0 = 0; - parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections)); + parse_track_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections)); func_80295C6C(); find_vtx_and_set_colours((Gfx*) d_course_banshee_boardwalk_packed_dl_878, 128, 0, 0, 0); } @@ -191,14 +190,14 @@ void BansheeBoardwalk::BeginPlay() { } } -void BansheeBoardwalk::InitCourseObjects() { +void BansheeBoardwalk::InitTrackObjects() { size_t objectId = 0; if (gGamestate != CREDITS_SEQUENCE) { init_object(indexObjectList1[2], 0); } } -void BansheeBoardwalk::UpdateCourseObjects() { +void BansheeBoardwalk::TickTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { func_8007E4C4(); if (gModeSelection != TIME_TRIALS) { @@ -208,7 +207,7 @@ void BansheeBoardwalk::UpdateCourseObjects() { } } -void BansheeBoardwalk::RenderCourseObjects(s32 cameraId) { +void BansheeBoardwalk::DrawTrackObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { // render_object_bat(cameraId); // render_object_boos(cameraId); @@ -248,7 +247,7 @@ void BansheeBoardwalk::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void BansheeBoardwalk::Render(struct UnkStruct_800DC5EC* arg0) { +void BansheeBoardwalk::Draw(ScreenContext* arg0) { Camera* camera = arg0->camera; Mat4 spCC; UNUSED s32 pad[6]; @@ -279,7 +278,7 @@ void BansheeBoardwalk::Render(struct UnkStruct_800DC5EC* arg0) { // d_course_banshee_boardwalk_packed_dl_69B0 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_packed_dl_69B0); - render_course_segments(banshee_boardwalk_dls, arg0); + render_track_sections(banshee_boardwalk_dls, arg0); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -307,7 +306,7 @@ void BansheeBoardwalk::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); } -void BansheeBoardwalk::RenderCredits() { +void BansheeBoardwalk::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_banshee_boardwalk_dl_B308)); } @@ -332,7 +331,7 @@ void BansheeBoardwalk::Waypoints(Player* player, int8_t playerId) { } } -void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void BansheeBoardwalk::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); diff --git a/src/engine/courses/BansheeBoardwalk.h b/src/engine/tracks/BansheeBoardwalk.h similarity index 74% rename from src/engine/courses/BansheeBoardwalk.h rename to src/engine/tracks/BansheeBoardwalk.h index a299709db..c8f918ed0 100644 --- a/src/engine/courses/BansheeBoardwalk.h +++ b/src/engine/tracks/BansheeBoardwalk.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/banshee_boardwalk/banshee_boardwalk_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture banshee_boardwalk_textures[]; } -class BansheeBoardwalk : public Course { +class BansheeBoardwalk : public Track { public: virtual ~BansheeBoardwalk() = default; // Virtual destructor for proper cleanup in derived classes @@ -28,17 +29,17 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; //virtual void InitClouds() override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player*, int8_t) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/BigDonut.cpp b/src/engine/tracks/BigDonut.cpp similarity index 97% rename from src/engine/courses/BigDonut.cpp rename to src/engine/tracks/BigDonut.cpp index b5c6bbff3..7a944f2ba 100644 --- a/src/engine/courses/BigDonut.cpp +++ b/src/engine/tracks/BigDonut.cpp @@ -47,7 +47,7 @@ BigDonut::BigDonut() { Props.SetText(Props.Name, "big donut", sizeof(Props.Name)); Props.SetText(Props.DebugName, "doughnut", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F18; Props.AIMaximumSeparation = -1.0f; @@ -103,7 +103,7 @@ BigDonut::BigDonut() { } void BigDonut::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { InvertTriangleWindingByName(d_course_big_donut_packed_dl_DE8); InvertTriangleWindingByName(d_course_big_donut_packed_dl_450); @@ -142,7 +142,7 @@ void BigDonut::BeginPlay() { } } -void BigDonut::Render(struct UnkStruct_800DC5EC* arg0) { +void BigDonut::Draw(ScreenContext* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); @@ -165,7 +165,7 @@ void BigDonut::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_big_donut_packed_dl_230); } -void BigDonut::RenderCredits() { +void BigDonut::DrawCredits() { } void BigDonut::Waypoints(Player* player, int8_t playerId) { diff --git a/src/engine/courses/BigDonut.h b/src/engine/tracks/BigDonut.h similarity index 81% rename from src/engine/courses/BigDonut.h rename to src/engine/tracks/BigDonut.h index 751d3cbcb..60a10e43c 100644 --- a/src/engine/courses/BigDonut.h +++ b/src/engine/tracks/BigDonut.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/big_donut/big_donut_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture big_donut_textures[]; } -class BigDonut : public Course { +class BigDonut : public Track { public: virtual ~BigDonut() = default; @@ -24,8 +25,8 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/BlockFort.cpp b/src/engine/tracks/BlockFort.cpp similarity index 95% rename from src/engine/courses/BlockFort.cpp rename to src/engine/tracks/BlockFort.cpp index a80e4a619..4bbcd1cfc 100644 --- a/src/engine/courses/BlockFort.cpp +++ b/src/engine/tracks/BlockFort.cpp @@ -49,7 +49,7 @@ BlockFort::BlockFort() { Props.SetText(Props.Name, "block fort", sizeof(Props.Name)); Props.SetText(Props.DebugName, "block", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F18; Props.AIMaximumSeparation = -1.0f; @@ -106,14 +106,14 @@ BlockFort::BlockFort() { } void BlockFort::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { InvertTriangleWindingByName(d_course_block_fort_packed_dl_15C0); } generate_collision_mesh_with_default_section_id((Gfx*) d_course_block_fort_packed_dl_15C0, 1); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void BlockFort::UnLoad() { @@ -133,7 +133,7 @@ void BlockFort::BeginPlay() { } } -void BlockFort::Render(struct UnkStruct_800DC5EC* arg0) { +void BlockFort::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); diff --git a/src/engine/courses/BlockFort.h b/src/engine/tracks/BlockFort.h similarity index 87% rename from src/engine/courses/BlockFort.h rename to src/engine/tracks/BlockFort.h index 296809b03..67d4ac310 100644 --- a/src/engine/courses/BlockFort.h +++ b/src/engine/tracks/BlockFort.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/block_fort/block_fort_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture block_fort_textures[]; } -class BlockFort : public Course { +class BlockFort : public Track { public: virtual ~BlockFort() = default; // Virtual destructor for proper cleanup in derived classes @@ -27,6 +28,6 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; + virtual void Draw(ScreenContext*) override; virtual void Waypoints(Player*, int8_t) override; }; diff --git a/src/engine/courses/BowsersCastle.cpp b/src/engine/tracks/BowsersCastle.cpp similarity index 95% rename from src/engine/courses/BowsersCastle.cpp rename to src/engine/tracks/BowsersCastle.cpp index 32550a636..b5744969f 100644 --- a/src/engine/courses/BowsersCastle.cpp +++ b/src/engine/tracks/BowsersCastle.cpp @@ -6,7 +6,7 @@ #include "BowsersCastle.h" #include "align_asset_macro.h" #include "engine/World.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/actors/Finishline.h" #include "engine/objects/BombKart.h" #include "engine/objects/Thwomp.h" @@ -34,7 +34,6 @@ extern "C" { #include "collision.h" #include "code_8003DC40.h" #include "memory.h" - #include "course.h" extern const char *bowsers_castle_dls[108]; } @@ -55,7 +54,7 @@ BowsersCastle::BowsersCastle() { Props.SetText(Props.Name, "bowser's castle", sizeof(Props.Name)); Props.SetText(Props.DebugName, "castle", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "777m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "777m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008FB8; Props.AIMaximumSeparation = 35.0f; @@ -115,7 +114,7 @@ BowsersCastle::BowsersCastle() { } void BowsersCastle::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(bowsers_castle_dls); i++) { InvertTriangleWindingByName(bowsers_castle_dls[i]); @@ -127,7 +126,7 @@ void BowsersCastle::Load() { InvertTriangleWindingByName(d_course_bowsers_castle_dl_9228); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_bowsers_castle_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_bowsers_castle_addr)); func_80295C6C(); find_vtx_and_set_colours((Gfx*) d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0); } @@ -192,7 +191,7 @@ void BowsersCastle::BeginPlay() { } } -void BowsersCastle::InitCourseObjects() { +void BowsersCastle::InitTrackObjects() { size_t objectId; size_t i; @@ -219,11 +218,11 @@ void BowsersCastle::InitCourseObjects() { } } -void BowsersCastle::UpdateCourseObjects() { +void BowsersCastle::TickTrackObjects() { update_flame_particle(); } -void BowsersCastle::RenderCourseObjects(s32 cameraId) { +void BowsersCastle::DrawTrackObjects(s32 cameraId) { // render_object_thwomps(cameraId); render_object_bowser_flame(cameraId); } @@ -261,7 +260,7 @@ void BowsersCastle::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void BowsersCastle::Render(struct UnkStruct_800DC5EC* arg0) { +void BowsersCastle::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -280,7 +279,7 @@ void BowsersCastle::Render(struct UnkStruct_800DC5EC* arg0) { if (D_802B87BC > 255) { D_802B87BC = 0; } - render_course_segments(bowsers_castle_dls, arg0); + render_track_sections(bowsers_castle_dls, arg0); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); @@ -288,7 +287,7 @@ void BowsersCastle::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_bowsers_castle_packed_dl_248); } -void BowsersCastle::RenderCredits() { +void BowsersCastle::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_bowsers_castle_dl_9148)); } @@ -310,7 +309,7 @@ void BowsersCastle::Waypoints(Player* player, int8_t playerId) { } } -void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void BowsersCastle::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { if (gActiveScreenMode != SCREEN_MODE_1P) { return; diff --git a/src/engine/courses/BowsersCastle.h b/src/engine/tracks/BowsersCastle.h similarity index 76% rename from src/engine/courses/BowsersCastle.h rename to src/engine/tracks/BowsersCastle.h index 5f62cd320..4e566be16 100644 --- a/src/engine/courses/BowsersCastle.h +++ b/src/engine/tracks/BowsersCastle.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/bowsers_castle/bowsers_castle_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture bowsers_castle_textures[]; } -class BowsersCastle : public Course { +class BowsersCastle : public Track { public: virtual ~BowsersCastle() = default; // Virtual destructor for proper cleanup in derived classes @@ -29,17 +30,17 @@ public: void SpawnStockThwomp(); virtual void BeginPlay() override; //virtual void InitClouds() override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; virtual void Waypoints(Player*, int8_t) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/ChocoMountain.cpp b/src/engine/tracks/ChocoMountain.cpp similarity index 96% rename from src/engine/courses/ChocoMountain.cpp rename to src/engine/tracks/ChocoMountain.cpp index e04aa825f..2719d5f42 100644 --- a/src/engine/courses/ChocoMountain.cpp +++ b/src/engine/tracks/ChocoMountain.cpp @@ -34,7 +34,6 @@ extern "C" { #include "code_8003DC40.h" #include "memory.h" #include "course_offsets.h" - #include "course.h" extern const char *choco_mountain_dls[96]; } @@ -54,7 +53,7 @@ ChocoMountain::ChocoMountain() { Id = "mk:choco_mountain"; Props.SetText(Props.Name, "choco mountain", sizeof(Props.Name)); Props.SetText(Props.DebugName, "mountain", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "687m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "687m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F80; Props.AIMaximumSeparation = 35.0f; @@ -113,7 +112,7 @@ ChocoMountain::ChocoMountain() { } void ChocoMountain::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(choco_mountain_dls); i++) { InvertTriangleWindingByName(choco_mountain_dls[i]); @@ -153,7 +152,7 @@ void ChocoMountain::Load() { nullify_displaylist((uintptr_t) LOAD_ASSET_RAW(d_course_choco_mountain_packed_dl_3C8)); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_choco_mountain_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_choco_mountain_addr)); func_802B5CAC(0x238E, 0x31C7, D_8015F590); func_80295C6C(); } @@ -179,7 +178,7 @@ void ChocoMountain::BeginPlay() { } } -void ChocoMountain::InitCourseObjects() { +void ChocoMountain::InitTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { if (gModeSelection == GRAND_PRIX) { func_80070714(); @@ -226,7 +225,7 @@ void ChocoMountain::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void ChocoMountain::Render(struct UnkStruct_800DC5EC* arg0) { +void ChocoMountain::Draw(ScreenContext* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -256,7 +255,7 @@ void ChocoMountain::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_choco_mountain_packed_dl_5868); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - render_course_segments(choco_mountain_dls, arg0); + render_track_sections(choco_mountain_dls, arg0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); @@ -273,7 +272,7 @@ void ChocoMountain::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); } -void ChocoMountain::RenderCredits() { +void ChocoMountain::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_choco_mountain_dl_71B8)); } diff --git a/src/engine/courses/ChocoMountain.h b/src/engine/tracks/ChocoMountain.h similarity index 84% rename from src/engine/courses/ChocoMountain.h rename to src/engine/tracks/ChocoMountain.h index 45df1ed5b..13fd7120a 100644 --- a/src/engine/courses/ChocoMountain.h +++ b/src/engine/tracks/ChocoMountain.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/choco_mountain/choco_mountain_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture choco_mountain_textures[]; } -class ChocoMountain : public Course { +class ChocoMountain : public Track { public: virtual ~ChocoMountain() = default; // Virtual destructor for proper cleanup in derived classes @@ -27,12 +28,12 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/DKJungle.cpp b/src/engine/tracks/DKJungle.cpp similarity index 96% rename from src/engine/courses/DKJungle.cpp rename to src/engine/tracks/DKJungle.cpp index 77e5bab88..47dabe296 100644 --- a/src/engine/courses/DKJungle.cpp +++ b/src/engine/tracks/DKJungle.cpp @@ -36,7 +36,6 @@ extern "C" { #include "code_8003DC40.h" #include "memory.h" #include "sounds.h" - #include "course.h" extern const char *d_course_dks_jungle_parkway_unknown_dl_list[105]; extern s16 currentScreenSection; } @@ -56,7 +55,7 @@ DKJungle::DKJungle() { Props.SetText(Props.Name, "d.k.'s jungle parkway", sizeof(Props.Name)); Props.SetText(Props.DebugName, "jungle", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "893m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "893m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D0093C0; Props.AIMaximumSeparation = 40.0f; @@ -115,7 +114,7 @@ DKJungle::DKJungle() { } void DKJungle::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(d_course_dks_jungle_parkway_unknown_dl_list); i++) { InvertTriangleWindingByName(d_course_dks_jungle_parkway_unknown_dl_list[i]); @@ -128,7 +127,7 @@ void DKJungle::Load() { InvertTriangleWindingByName(d_course_dks_jungle_parkway_packed_dl_36A8); InvertTriangleWindingByName(d_course_dks_jungle_parkway_packed_dl_3F30); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_addr)); func_80295C6C(); // d_course_dks_jungle_parkway_packed_dl_3FA8 find_vtx_and_set_colours((Gfx*) d_course_dks_jungle_parkway_packed_dl_3FA8, 120, 255, 255, 255); @@ -194,7 +193,7 @@ void DKJungle::BeginPlay() { } } -void DKJungle::InitCourseObjects() { +void DKJungle::InitTrackObjects() { for (size_t i = 0; i < NUM_TORCHES; i++) { init_smoke_particles(i); // wtf? @@ -202,11 +201,11 @@ void DKJungle::InitCourseObjects() { } } -void DKJungle::UpdateCourseObjects() { +void DKJungle::TickTrackObjects() { update_ferries_smoke_particle(); } -void DKJungle::RenderCourseObjects(s32 cameraId) { +void DKJungle::DrawTrackObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { render_object_paddle_boat_smoke_particles(cameraId); } @@ -262,7 +261,7 @@ void DKJungle::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void DKJungle::Render(struct UnkStruct_800DC5EC* arg0) { +void DKJungle::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); set_track_light_direction(&D_800DC610[1], D_802B87D4, D_802B87D0, 1); @@ -280,12 +279,12 @@ void DKJungle::Render(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - render_course_segments(d_course_dks_jungle_parkway_unknown_dl_list, arg0); + render_track_sections(d_course_dks_jungle_parkway_unknown_dl_list, arg0); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void DKJungle::RenderCredits() { +void DKJungle::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_dks_jungle_parkway_dl_13C30)); } @@ -329,7 +328,7 @@ void DKJungle::ScrollingTextures() { evaluate_collision_players_palm_trees(); } -void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void DKJungle::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); diff --git a/src/engine/courses/DKJungle.h b/src/engine/tracks/DKJungle.h similarity index 77% rename from src/engine/courses/DKJungle.h rename to src/engine/tracks/DKJungle.h index 0b7f09524..1c9da598f 100644 --- a/src/engine/courses/DKJungle.h +++ b/src/engine/tracks/DKJungle.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/dks_jungle_parkway/dks_jungle_parkway_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture dks_jungle_parkway_textures[]; } -class DKJungle : public Course { +class DKJungle : public Track { public: virtual ~DKJungle() = default; // Virtual destructor for proper cleanup in derived classes @@ -29,18 +30,18 @@ public: virtual f32 GetWaterLevel(FVector pos, Collision* collision) override; virtual void BeginPlay() override; //virtual void InitClouds() override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void ScrollingTextures() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/DoubleDeck.cpp b/src/engine/tracks/DoubleDeck.cpp similarity index 94% rename from src/engine/courses/DoubleDeck.cpp rename to src/engine/tracks/DoubleDeck.cpp index ad7de5700..581e7aed3 100644 --- a/src/engine/courses/DoubleDeck.cpp +++ b/src/engine/tracks/DoubleDeck.cpp @@ -48,7 +48,7 @@ DoubleDeck::DoubleDeck() { Props.SetText(Props.Name, "double deck", sizeof(Props.Name)); Props.SetText(Props.DebugName, "deck", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F18; @@ -106,13 +106,13 @@ DoubleDeck::DoubleDeck() { } void DoubleDeck::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { InvertTriangleWindingByName(d_course_double_deck_packed_dl_738); } generate_collision_mesh_with_default_section_id((Gfx*) d_course_double_deck_packed_dl_738, 1); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void DoubleDeck::UnLoad() { @@ -132,7 +132,7 @@ void DoubleDeck::BeginPlay() { } } -void DoubleDeck::InitCourseObjects() {} +void DoubleDeck::InitTrackObjects() {} void DoubleDeck::SomeSounds() {} @@ -140,7 +140,7 @@ void DoubleDeck::WhatDoesThisDo(Player* player, int8_t playerId) {} void DoubleDeck::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void DoubleDeck::Render(struct UnkStruct_800DC5EC* arg0) { +void DoubleDeck::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); @@ -151,7 +151,7 @@ void DoubleDeck::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void DoubleDeck::RenderCredits() {} +void DoubleDeck::DrawCredits() {} void DoubleDeck::Waypoints(Player* player, int8_t playerId) { player->nearestPathPointId = 0; diff --git a/src/engine/courses/DoubleDeck.h b/src/engine/tracks/DoubleDeck.h similarity index 84% rename from src/engine/courses/DoubleDeck.h rename to src/engine/tracks/DoubleDeck.h index 354ab116a..a99034960 100644 --- a/src/engine/courses/DoubleDeck.h +++ b/src/engine/tracks/DoubleDeck.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/double_deck/double_deck_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture double_deck_textures[]; } -class DoubleDeck : public Course { +class DoubleDeck : public Track { public: virtual ~DoubleDeck() = default; // Virtual destructor for proper cleanup in derived classes @@ -27,12 +28,12 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/FrappeSnowland.cpp b/src/engine/tracks/FrappeSnowland.cpp similarity index 93% rename from src/engine/courses/FrappeSnowland.cpp rename to src/engine/tracks/FrappeSnowland.cpp index dbba9efbf..c492f6cc8 100644 --- a/src/engine/courses/FrappeSnowland.cpp +++ b/src/engine/tracks/FrappeSnowland.cpp @@ -35,7 +35,6 @@ extern "C" { #include "memory.h" #include "update_objects.h" #include "course_offsets.h" - #include "course.h" extern const char *d_course_frappe_snowland_dl_list[68]; extern s8 gPlayerCount; } @@ -56,7 +55,7 @@ FrappeSnowland::FrappeSnowland() { Props.SetText(Props.Name, "frappe snowland", sizeof(Props.Name)); Props.SetText(Props.DebugName, "snow", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "734m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "734m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D0090F8; Props.AIMaximumSeparation = 50.0f; @@ -115,7 +114,7 @@ FrappeSnowland::FrappeSnowland() { } void FrappeSnowland::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(d_course_frappe_snowland_dl_list); i++) { @@ -124,7 +123,7 @@ void FrappeSnowland::Load() { InvertTriangleWindingByName(d_course_frappe_snowland_packed_dl_65E0); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_frappe_snowland_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_frappe_snowland_addr)); func_80295C6C(); } @@ -185,11 +184,11 @@ void FrappeSnowland::InitClouds() { D_8018D230 = 0; // This must be turned off or mayhem ensues } -void FrappeSnowland::UpdateClouds(s32 sp1C, Camera* camera) { +void FrappeSnowland::TickClouds(s32 sp1C, Camera* camera) { func_80078170(sp1C, camera); } -void FrappeSnowland::InitCourseObjects() { +void FrappeSnowland::InitTrackObjects() { size_t objectId; size_t i; for (i = 0; i < NUM_SNOWFLAKES; i++) { @@ -197,11 +196,11 @@ void FrappeSnowland::InitCourseObjects() { } } -void FrappeSnowland::UpdateCourseObjects() { +void FrappeSnowland::TickTrackObjects() { update_snowflakes(); } -void FrappeSnowland::Render(struct UnkStruct_800DC5EC* arg0) { +void FrappeSnowland::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -215,10 +214,10 @@ void FrappeSnowland::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(d_course_frappe_snowland_dl_list, arg0); + render_track_sections(d_course_frappe_snowland_dl_list, arg0); } -void FrappeSnowland::RenderCredits() { +void FrappeSnowland::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_frappe_snowland_dl_76A0)); } diff --git a/src/engine/courses/FrappeSnowland.h b/src/engine/tracks/FrappeSnowland.h similarity index 70% rename from src/engine/courses/FrappeSnowland.h rename to src/engine/tracks/FrappeSnowland.h index aa9052f57..65af72a10 100644 --- a/src/engine/courses/FrappeSnowland.h +++ b/src/engine/tracks/FrappeSnowland.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/frappe_snowland/frappe_snowland_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture frappe_snowland_textures[]; } -class FrappeSnowland : public Course { +class FrappeSnowland : public Track { public: virtual ~FrappeSnowland() = default; @@ -25,10 +26,10 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; virtual void InitClouds() override; - virtual void UpdateClouds(s32 sp1C, Camera* camera) override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void TickClouds(s32 sp1C, Camera* camera) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; }; diff --git a/src/engine/courses/Harbour.cpp b/src/engine/tracks/Harbour.cpp similarity index 98% rename from src/engine/courses/Harbour.cpp rename to src/engine/tracks/Harbour.cpp index 9b76457cf..4423beed0 100644 --- a/src/engine/courses/Harbour.cpp +++ b/src/engine/tracks/Harbour.cpp @@ -51,7 +51,6 @@ extern "C" { #include "collision.h" #include "memory.h" #include "courses/harbour/track.h" - #include "course.h" } TrackPathPoint harbour_path[] = { @@ -530,7 +529,7 @@ Harbour::Harbour() { Id = "mk:harbour"; Props.SetText(Props.Name, "Harbour", sizeof(Props.Name)); Props.SetText(Props.DebugName, "harbour", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "99m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "99m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F28; Props.AIMaximumSeparation = 50.0f; @@ -596,7 +595,7 @@ TrackSections harbour_surfaces[] = { }; void Harbour::Load() { - Course::Load(road_map_001_mesh_vtx_0, NULL); + Track::Load(road_map_001_mesh_vtx_0, NULL); if (gIsMirrorMode != 0) { InvertTriangleWinding(ground_map_mesh); @@ -622,9 +621,9 @@ void Harbour::Load() { generate_collision_mesh_with_defaults(bush_map_004_mesh); generate_collision_mesh_with_defaults(statue_map_005_mesh); - parse_course_displaylists((TrackSections*)harbour_surfaces); + parse_track_displaylists((TrackSections*)harbour_surfaces); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void Harbour::UnLoad() { @@ -717,7 +716,7 @@ void Harbour::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void Harbour::Render(struct UnkStruct_800DC5EC* arg0) { +void Harbour::Draw(ScreenContext* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); diff --git a/src/engine/courses/Harbour.h b/src/engine/tracks/Harbour.h similarity index 85% rename from src/engine/courses/Harbour.h rename to src/engine/tracks/Harbour.h index 69524cfbf..0a5c9c23d 100644 --- a/src/engine/courses/Harbour.h +++ b/src/engine/tracks/Harbour.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/mario_raceway/mario_raceway_vertices.h" @@ -12,10 +12,9 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" - extern const course_texture test_course_textures[]; } -class Harbour : public Course { +class Harbour : public Track { public: virtual ~Harbour() = default; // Virtual destructor for proper cleanup in derived classes @@ -29,6 +28,6 @@ public: virtual void BeginPlay() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; + virtual void Draw(ScreenContext*) override; virtual bool IsMod() override; }; diff --git a/src/engine/courses/KalimariDesert.cpp b/src/engine/tracks/KalimariDesert.cpp similarity index 93% rename from src/engine/courses/KalimariDesert.cpp rename to src/engine/tracks/KalimariDesert.cpp index 1c523e0e4..15c50f752 100644 --- a/src/engine/courses/KalimariDesert.cpp +++ b/src/engine/tracks/KalimariDesert.cpp @@ -33,7 +33,6 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" - #include "course.h" extern const char *kalimari_desert_dls[80]; } @@ -52,7 +51,7 @@ KalimariDesert::KalimariDesert() { Props.SetText(Props.Name, "kalimari desert", sizeof(Props.Name)); Props.SetText(Props.DebugName, "desert", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "753m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "753m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009260; Props.AIMaximumSeparation = 50.0f; @@ -110,7 +109,7 @@ KalimariDesert::KalimariDesert() { } void KalimariDesert::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(kalimari_desert_dls); i++) { @@ -125,9 +124,9 @@ void KalimariDesert::Load() { InvertTriangleWindingByName(d_course_kalimari_desert_packed_dl_270); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_kalimari_desert_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_kalimari_desert_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void KalimariDesert::UnLoad() { @@ -151,25 +150,25 @@ void KalimariDesert::BeginPlay() { uintptr_t* crossing2 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos2, 176, 182, 900.0f, 650.0f); vec3f_set(position, -1680.0f, 2.0f, 35.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing2; vec3f_set(position, -1600.0f, 2.0f, 35.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing2; - // Original game forgot to put gCourseDirection to face the crossing the right direction in extra mode - vec3s_set(rotation, 0, -0x2000 * gCourseDirection, 0); + // Original game forgot to put gTrackDirection to face the crossing the right direction in extra mode + vec3s_set(rotation, 0, -0x2000 * gTrackDirection, 0); vec3f_set(position, -2459.0f, 2.0f, 2263.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; vec3f_set(position, -2467.0f, 2.0f, 2375.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; @@ -218,7 +217,7 @@ void KalimariDesert::BeginPlay() { } } -void KalimariDesert::InitCourseObjects() { +void KalimariDesert::InitTrackObjects() { size_t i; if (gGamestate != CREDITS_SEQUENCE) { find_unused_obj_index(&D_8018CF10); @@ -241,7 +240,7 @@ void KalimariDesert::WhatDoesThisDo(Player* player, int8_t playerId) {} void KalimariDesert::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { +void KalimariDesert::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -257,7 +256,7 @@ void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(kalimari_desert_dls, arg0); + render_track_sections(kalimari_desert_dls, arg0); // d_course_kalimari_desert_packed_dl_1ED8 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_kalimari_desert_packed_dl_1ED8); // d_course_kalimari_desert_packed_dl_1B18 @@ -274,7 +273,7 @@ void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void KalimariDesert::RenderCredits() { +void KalimariDesert::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_kalimari_desert_dl_22E00)); } diff --git a/src/engine/courses/KalimariDesert.h b/src/engine/tracks/KalimariDesert.h similarity index 85% rename from src/engine/courses/KalimariDesert.h rename to src/engine/tracks/KalimariDesert.h index 4b9cc4247..2789f39dd 100644 --- a/src/engine/courses/KalimariDesert.h +++ b/src/engine/tracks/KalimariDesert.h @@ -2,7 +2,7 @@ #include #include "CoreMath.h" -#include "Course.h" +#include "Track.h" #include "engine/vehicles/Train.h" extern "C" { @@ -14,10 +14,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture kalimari_desert_textures[]; } -class KalimariDesert : public Course { +class KalimariDesert : public Track { public: virtual ~KalimariDesert() = default; // Virtual destructor for proper cleanup in derived classes @@ -29,12 +30,12 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Destroy() override; private: diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/tracks/KoopaTroopaBeach.cpp similarity index 93% rename from src/engine/courses/KoopaTroopaBeach.cpp rename to src/engine/tracks/KoopaTroopaBeach.cpp index d22580c2c..851b943e6 100644 --- a/src/engine/courses/KoopaTroopaBeach.cpp +++ b/src/engine/tracks/KoopaTroopaBeach.cpp @@ -34,7 +34,6 @@ extern "C" { #include "collision.h" #include "code_8003DC40.h" #include "memory.h" - #include "course.h" extern const char *d_course_koopa_troopa_beach_dl_list1[148]; extern const char *koopa_troopa_beach_dls2[148]; extern s8 gPlayerCount; @@ -56,7 +55,7 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Id = "mk:koopa_beach"; Props.SetText(Props.Name, "koopa troopa beach", sizeof(Props.Name)); Props.SetText(Props.DebugName, "beach", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "691m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "691m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009158; Props.AIMaximumSeparation = 50.0f; @@ -118,7 +117,7 @@ KoopaTroopaBeach::KoopaTroopaBeach() { } void KoopaTroopaBeach::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(d_course_koopa_troopa_beach_dl_list1); i++) { InvertTriangleWindingByName(d_course_koopa_troopa_beach_dl_list1[i]); @@ -131,7 +130,7 @@ void KoopaTroopaBeach::Load() { InvertTriangleWindingByName(d_course_koopa_troopa_beach_packed_dl_2C0); InvertTriangleWindingByName(d_course_koopa_troopa_beach_packed_dl_9E70); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); func_80295C6C(); find_vtx_and_set_colours((Gfx*) d_course_koopa_troopa_beach_packed_dl_ADE0, 150, 255, 255, 255); find_vtx_and_set_colours((Gfx*) d_course_koopa_troopa_beach_packed_dl_A540, 150, 255, 255, 255); @@ -144,7 +143,7 @@ void KoopaTroopaBeach::UnLoad() { } void KoopaTroopaBeach::BeginPlay() { - init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f); + init_actor_hot_air_balloon_item_box(328.0f * gTrackDirection, 70.0f, 2541.0f); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_item_box_spawns)); spawn_palm_trees((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn)); @@ -186,10 +185,10 @@ void KoopaTroopaBeach::BeginPlay() { } } -void KoopaTroopaBeach::InitCourseObjects() { +void KoopaTroopaBeach::InitTrackObjects() { } -void KoopaTroopaBeach::UpdateCourseObjects() { +void KoopaTroopaBeach::TickTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { //update_crabs(); } @@ -198,7 +197,7 @@ void KoopaTroopaBeach::UpdateCourseObjects() { } } -void KoopaTroopaBeach::RenderCourseObjects(s32 cameraId) { +void KoopaTroopaBeach::DrawTrackObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { //render_object_crabs(cameraId); } @@ -221,7 +220,7 @@ void KoopaTroopaBeach::WhatDoesThisDo(Player* player, int8_t playerId) {} void KoopaTroopaBeach::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { +void KoopaTroopaBeach::Draw(ScreenContext* arg0) { gDPPipeSync(gDisplayListHead++); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -237,7 +236,7 @@ void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_koopa_troopa_beach_packed_dl_9688 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_koopa_troopa_beach_packed_dl_9688); - render_course_segments((const char**)d_course_koopa_troopa_beach_dl_list1, arg0); + render_track_sections((const char**)d_course_koopa_troopa_beach_dl_list1, arg0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); @@ -247,7 +246,7 @@ void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); } -void KoopaTroopaBeach::RenderCredits() { +void KoopaTroopaBeach::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_koopa_troopa_beach_dl_18D68)); } @@ -291,7 +290,7 @@ void KoopaTroopaBeach::ScrollingTextures() { } -void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void KoopaTroopaBeach::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { Vec3f vector; gDPPipeSync(gDisplayListHead++); @@ -322,7 +321,7 @@ void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pat gDPSetBlendMask(gDisplayListHead++, 0xFF); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - render_course_segments((const char**)koopa_troopa_beach_dls2, screen); + render_track_sections((const char**)koopa_troopa_beach_dls2, screen); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); diff --git a/src/engine/courses/KoopaTroopaBeach.h b/src/engine/tracks/KoopaTroopaBeach.h similarity index 75% rename from src/engine/courses/KoopaTroopaBeach.h rename to src/engine/tracks/KoopaTroopaBeach.h index 2c6d45397..5f3f776a7 100644 --- a/src/engine/courses/KoopaTroopaBeach.h +++ b/src/engine/tracks/KoopaTroopaBeach.h @@ -2,7 +2,7 @@ #include #include "../CoreMath.h" -#include "Course.h" +#include "Track.h" #include "World.h" @@ -15,10 +15,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture koopa_troopa_beach_textures[]; } -class KoopaTroopaBeach : public Course { +class KoopaTroopaBeach : public Track { public: virtual ~KoopaTroopaBeach() = default; // Virtual destructor for proper cleanup in derived classes @@ -30,16 +31,16 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; virtual void ScrollingTextures() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/LuigiRaceway.cpp b/src/engine/tracks/LuigiRaceway.cpp similarity index 96% rename from src/engine/courses/LuigiRaceway.cpp rename to src/engine/tracks/LuigiRaceway.cpp index 2ebde3087..5414fa1a5 100644 --- a/src/engine/courses/LuigiRaceway.cpp +++ b/src/engine/tracks/LuigiRaceway.cpp @@ -38,7 +38,6 @@ extern "C" { #include "courses/staff_ghost_data.h" #include "framebuffer_effects.h" #include "skybox_and_splitscreen.h" -#include "course.h" extern const char* luigi_raceway_dls[120]; extern s16 currentScreenSection; } @@ -59,7 +58,7 @@ LuigiRaceway::LuigiRaceway() { Id = "mk:luigi_raceway"; Props.SetText(Props.Name, "luigi raceway", sizeof(Props.Name)); Props.SetText(Props.DebugName, "l circuit", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "717m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "717m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D0091E8; Props.AIMaximumSeparation = 50.0f; @@ -117,7 +116,7 @@ LuigiRaceway::LuigiRaceway() { } void LuigiRaceway::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(luigi_raceway_dls); i++) { InvertTriangleWindingByName(luigi_raceway_dls[i]); @@ -126,9 +125,9 @@ void LuigiRaceway::Load() { InvertTriangleWindingByName(d_course_luigi_raceway_packed_dl_E0); InvertTriangleWindingByName(d_course_luigi_raceway_packed_dl_68); } - parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_luigi_raceway_addr)); + parse_track_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_luigi_raceway_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void LuigiRaceway::UnLoad() { @@ -157,7 +156,7 @@ void LuigiRaceway::BeginPlay() { } } -void LuigiRaceway::InitCourseObjects() { +void LuigiRaceway::InitTrackObjects() { size_t i; if (gGamestate != CREDITS_SEQUENCE) { if (gModeSelection == GRAND_PRIX) { @@ -249,7 +248,7 @@ void LuigiRaceway::CopyJumbotron(s32 ulx, s32 uly, s16 portionToDraw, u16* sourc } } -void LuigiRaceway::Render(struct UnkStruct_800DC5EC* arg0) { +void LuigiRaceway::Draw(ScreenContext* arg0) { UNUSED s32 pad; u16 sp22 = (u16) arg0->pathCounter; s16 prevFrame; @@ -278,7 +277,7 @@ void LuigiRaceway::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(luigi_raceway_dls, arg0); + render_track_sections(luigi_raceway_dls, arg0); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); @@ -314,7 +313,7 @@ void LuigiRaceway::Render(struct UnkStruct_800DC5EC* arg0) { } } -void LuigiRaceway::RenderCredits() { +void LuigiRaceway::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_luigi_raceway_dl_FD40)); } diff --git a/src/engine/courses/LuigiRaceway.h b/src/engine/tracks/LuigiRaceway.h similarity index 86% rename from src/engine/courses/LuigiRaceway.h rename to src/engine/tracks/LuigiRaceway.h index 53d9b8060..5d4b722fc 100644 --- a/src/engine/courses/LuigiRaceway.h +++ b/src/engine/tracks/LuigiRaceway.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/luigi_raceway/luigi_raceway_vertices.h" @@ -15,7 +15,7 @@ extern "C" { extern const course_texture luigi_raceway_textures[]; } -class LuigiRaceway : public Course { +class LuigiRaceway : public Track { void CopyJumbotron(s32 ulx, s32 uly, s16 portionToDraw, u16* source); public: @@ -29,13 +29,13 @@ class LuigiRaceway : public Course { virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void SetStaffGhost() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; }; diff --git a/src/engine/courses/MarioRaceway.cpp b/src/engine/tracks/MarioRaceway.cpp similarity index 96% rename from src/engine/courses/MarioRaceway.cpp rename to src/engine/tracks/MarioRaceway.cpp index cff1e42b2..957ba7468 100644 --- a/src/engine/courses/MarioRaceway.cpp +++ b/src/engine/tracks/MarioRaceway.cpp @@ -34,7 +34,6 @@ extern "C" { #include "collision.h" #include "memory.h" #include "courses/staff_ghost_data.h" - #include "course.h" extern const char *mario_raceway_dls[68]; } @@ -54,7 +53,7 @@ MarioRaceway::MarioRaceway() { Id = "mk:mario_raceway"; Props.SetText(Props.Name, "mario raceway", sizeof(Props.Name)); Props.SetText(Props.DebugName, "m circuit", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "567m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "567m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F28; Props.AIMaximumSeparation = 50.0f; @@ -113,7 +112,7 @@ MarioRaceway::MarioRaceway() { } void MarioRaceway::Load() { - Course::Load(); + Track::Load(); // Invert winding in mirror mode before generating collision meshes if (gIsMirrorMode != 0) { @@ -150,9 +149,9 @@ void MarioRaceway::Load() { } } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_mario_raceway_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_mario_raceway_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void MarioRaceway::UnLoad() { @@ -187,7 +186,7 @@ void MarioRaceway::BeginPlay() { } } -void MarioRaceway::InitCourseObjects() { +void MarioRaceway::InitTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { if (gModeSelection == GRAND_PRIX) { func_80070714(); @@ -257,7 +256,7 @@ void render_mario_raceway_pipe(void) { } } -void MarioRaceway::Render(struct UnkStruct_800DC5EC* arg0) { +void MarioRaceway::Draw(ScreenContext* arg0) { u16 sp22 = arg0->pathCounter; u16 temp_t0 = arg0->playerDirection; @@ -351,7 +350,7 @@ void MarioRaceway::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_packed_dl_3508); gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_packed_dl_3240); gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_packed_dl_14A0); - render_course_segments(mario_raceway_dls, arg0); + render_track_sections(mario_raceway_dls, arg0); 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); @@ -362,7 +361,7 @@ void MarioRaceway::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_packed_dl_160); } -void MarioRaceway::RenderCredits() { +void MarioRaceway::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_mario_raceway_dl_9348)); } diff --git a/src/engine/courses/MarioRaceway.h b/src/engine/tracks/MarioRaceway.h similarity index 83% rename from src/engine/courses/MarioRaceway.h rename to src/engine/tracks/MarioRaceway.h index 1e99add7e..ebecafc91 100644 --- a/src/engine/courses/MarioRaceway.h +++ b/src/engine/tracks/MarioRaceway.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/mario_raceway/mario_raceway_vertices.h" @@ -12,9 +12,10 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" } -class MarioRaceway : public Course { +class MarioRaceway : public Track { public: virtual ~MarioRaceway() = default; // Virtual destructor for proper cleanup in derived classes @@ -26,13 +27,13 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void SetStaffGhost() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/MooMooFarm.cpp b/src/engine/tracks/MooMooFarm.cpp similarity index 96% rename from src/engine/courses/MooMooFarm.cpp rename to src/engine/tracks/MooMooFarm.cpp index c509d7822..a7b65be7e 100644 --- a/src/engine/courses/MooMooFarm.cpp +++ b/src/engine/tracks/MooMooFarm.cpp @@ -33,7 +33,6 @@ extern "C" { #include "collision.h" #include "memory.h" #include "code_80086E70.h" - #include "course.h" extern const char *moo_moo_farm_dls[92]; extern s16 currentScreenSection; extern s8 gPlayerCount; @@ -54,7 +53,7 @@ MooMooFarm::MooMooFarm() { Props.SetText(Props.Name, "moo moo farm", sizeof(Props.Name)); Props.SetText(Props.DebugName, "farm", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "527m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "527m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009210; Props.AIMaximumSeparation = 50.0f; @@ -112,7 +111,7 @@ MooMooFarm::MooMooFarm() { } void MooMooFarm::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(moo_moo_farm_dls); i++) { InvertTriangleWindingByName(moo_moo_farm_dls[i]); @@ -124,9 +123,9 @@ void MooMooFarm::Load() { InvertTriangleWindingByName(d_course_moo_moo_farm_dl_14060); InvertTriangleWindingByName(d_course_moo_moo_farm_packed_dl_10C0); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_moo_moo_farm_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_moo_moo_farm_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void MooMooFarm::UnLoad() { @@ -260,7 +259,7 @@ void MooMooFarm::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void MooMooFarm::Render(struct UnkStruct_800DC5EC* arg0) { +void MooMooFarm::Draw(ScreenContext* arg0) { s16 temp_s0 = arg0->pathCounter; s16 temp_s1 = arg0->playerDirection; @@ -276,7 +275,7 @@ void MooMooFarm::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_packed_dl_5640); gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); - render_course_segments(moo_moo_farm_dls, arg0); + render_track_sections(moo_moo_farm_dls, arg0); if ((temp_s0 < 14) && (temp_s0 > 10)) { if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1)) { @@ -333,7 +332,7 @@ void MooMooFarm::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_packed_dl_10C0); } -void MooMooFarm::RenderCredits() { +void MooMooFarm::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_moo_moo_farm_dl_14088)); } diff --git a/src/engine/courses/MooMooFarm.h b/src/engine/tracks/MooMooFarm.h similarity index 86% rename from src/engine/courses/MooMooFarm.h rename to src/engine/tracks/MooMooFarm.h index 8468ca8aa..aa38070f8 100644 --- a/src/engine/courses/MooMooFarm.h +++ b/src/engine/tracks/MooMooFarm.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" #include "engine/objects/Mole.h" extern "C" { @@ -13,12 +13,13 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture moo_moo_farm_textures[]; } class OMole; -class MooMooFarm : public Course { +class MooMooFarm : public Track { public: virtual ~MooMooFarm() = default; // Virtual destructor for proper cleanup in derived classes @@ -32,8 +33,8 @@ public: virtual void BeginPlay() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/PodiumCeremony.cpp b/src/engine/tracks/PodiumCeremony.cpp similarity index 95% rename from src/engine/courses/PodiumCeremony.cpp rename to src/engine/tracks/PodiumCeremony.cpp index 48cd2478b..91f8f84e1 100644 --- a/src/engine/courses/PodiumCeremony.cpp +++ b/src/engine/tracks/PodiumCeremony.cpp @@ -38,7 +38,6 @@ extern "C" { #include "memory.h" #include "courses/staff_ghost_data.h" #include "podium_ceremony_actors.h" - #include "course.h" extern const char *royal_raceway_dls[]; } @@ -55,7 +54,7 @@ PodiumCeremony::PodiumCeremony() { Props.SetText(Props.Name, "royal raceway", sizeof(Props.Name)); Props.SetText(Props.DebugName, "p circuit", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "1025m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "1025m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009188; Props.AIMaximumSeparation = 50.0f; @@ -112,9 +111,9 @@ PodiumCeremony::PodiumCeremony() { } void PodiumCeremony::Load() { - Course::Load(); + Track::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); func_80295C6C(); } @@ -163,7 +162,7 @@ void PodiumCeremony::BeginPlay() { } } -void PodiumCeremony::InitCourseObjects() { +void PodiumCeremony::InitTrackObjects() { size_t i; if (gGamestate != CREDITS_SEQUENCE) { if (gModeSelection == GRAND_PRIX) { @@ -205,7 +204,7 @@ void PodiumCeremony::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void PodiumCeremony::Render(struct UnkStruct_800DC5EC* arg0) { +void PodiumCeremony::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -222,7 +221,7 @@ void PodiumCeremony::Render(struct UnkStruct_800DC5EC* arg0) { // d_course_royal_raceway_packed_dl_A648 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_royal_raceway_packed_dl_A648); - render_course_segments(royal_raceway_dls, arg0); + render_track_sections(royal_raceway_dls, arg0); // d_course_royal_raceway_packed_dl_11A8 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_royal_raceway_packed_dl_11A8); @@ -234,7 +233,7 @@ void PodiumCeremony::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void PodiumCeremony::RenderCredits() { +void PodiumCeremony::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_royal_raceway_dl_D8E8)); } diff --git a/src/engine/courses/PodiumCeremony.h b/src/engine/tracks/PodiumCeremony.h similarity index 84% rename from src/engine/courses/PodiumCeremony.h rename to src/engine/tracks/PodiumCeremony.h index 403f7f310..efb9271c2 100644 --- a/src/engine/courses/PodiumCeremony.h +++ b/src/engine/tracks/PodiumCeremony.h @@ -2,7 +2,7 @@ #include #include "CoreMath.h" -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/royal_raceway/royal_raceway_vertices.h" @@ -13,10 +13,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture royal_raceway_textures[]; } -class PodiumCeremony : public Course { +class PodiumCeremony : public Track { public: virtual ~PodiumCeremony() = default; // Virtual destructor for proper cleanup in derived classes @@ -29,11 +30,11 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; //virtual void InitClouds() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/RainbowRoad.cpp b/src/engine/tracks/RainbowRoad.cpp similarity index 91% rename from src/engine/courses/RainbowRoad.cpp rename to src/engine/tracks/RainbowRoad.cpp index dcfd4856d..ad026c4ec 100644 --- a/src/engine/courses/RainbowRoad.cpp +++ b/src/engine/tracks/RainbowRoad.cpp @@ -31,7 +31,6 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" - #include "course.h" extern const char *rainbow_road_dls[48]; } @@ -50,7 +49,7 @@ RainbowRoad::RainbowRoad() { Props.SetText(Props.Name, "rainbow road", sizeof(Props.Name)); Props.SetText(Props.DebugName, "rainbow", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "2000m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "2000m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D0092C8; Props.AIMaximumSeparation = 50.0f; @@ -109,14 +108,14 @@ RainbowRoad::RainbowRoad() { } void RainbowRoad::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(rainbow_road_dls); i++) { InvertTriangleWindingByName(rainbow_road_dls[i]); } } D_800DC5C8 = 1; - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_rainbow_road_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_rainbow_road_addr)); func_80295C6C(); // d_course_rainbow_road_packed_dl_2068 find_vtx_and_set_colours((Gfx*) d_course_rainbow_road_packed_dl_2068, 150, 255, 255, 255); @@ -158,11 +157,11 @@ void RainbowRoad::InitClouds() { init_stars(this->Props.Clouds); } -void RainbowRoad::UpdateClouds(s32 sp1C, Camera* camera) { +void RainbowRoad::TickClouds(s32 sp1C, Camera* camera) { update_stars(sp1C, camera, this->Props.CloudList); } -void RainbowRoad::InitCourseObjects() { +void RainbowRoad::InitTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { size_t i; for (i = 0; i < NUM_NEON_SIGNS; i++) { @@ -171,14 +170,14 @@ void RainbowRoad::InitCourseObjects() { } } -void RainbowRoad::UpdateCourseObjects() { +void RainbowRoad::TickTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { update_neon(); //update_chain_chomps(); } } -void RainbowRoad::RenderCourseObjects(s32 cameraId) { +void RainbowRoad::DrawTrackObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { render_object_neon(cameraId); //render_object_chain_chomps(cameraId); @@ -192,7 +191,7 @@ void RainbowRoad::WhatDoesThisDo(Player* player, int8_t playerId) {} void RainbowRoad::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void RainbowRoad::Render(struct UnkStruct_800DC5EC* arg0) { +void RainbowRoad::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -200,7 +199,7 @@ void RainbowRoad::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); } -void RainbowRoad::RenderCredits() { +void RainbowRoad::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_rainbow_road_dl_16220)); } @@ -208,11 +207,11 @@ void RainbowRoad::Waypoints(Player* player, int8_t playerId) { player->nearestPathPointId = gCopyNearestWaypointByPlayerId[playerId]; } -void RainbowRoad::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void RainbowRoad::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - render_course_segments(rainbow_road_dls, screen); + render_track_sections(rainbow_road_dls, screen); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); diff --git a/src/engine/courses/RainbowRoad.h b/src/engine/tracks/RainbowRoad.h similarity index 71% rename from src/engine/courses/RainbowRoad.h rename to src/engine/tracks/RainbowRoad.h index ffe3286ca..34c998e68 100644 --- a/src/engine/courses/RainbowRoad.h +++ b/src/engine/tracks/RainbowRoad.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/rainbow_road/rainbow_road_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture rainbow_road_textures[]; } -class RainbowRoad : public Course { +class RainbowRoad : public Track { public: virtual ~RainbowRoad() = default; // Virtual destructor for proper cleanup in derived classes @@ -28,17 +29,17 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; virtual void InitClouds() override; - virtual void UpdateClouds(s32, Camera*) override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void TickClouds(s32, Camera*) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/RoyalRaceway.cpp b/src/engine/tracks/RoyalRaceway.cpp similarity index 95% rename from src/engine/courses/RoyalRaceway.cpp rename to src/engine/tracks/RoyalRaceway.cpp index 6362a2c15..6e57aff14 100644 --- a/src/engine/courses/RoyalRaceway.cpp +++ b/src/engine/tracks/RoyalRaceway.cpp @@ -32,7 +32,6 @@ extern "C" { #include "collision.h" #include "memory.h" #include "courses/staff_ghost_data.h" - #include "course.h" extern const char *royal_raceway_dls[132]; } @@ -51,7 +50,7 @@ RoyalRaceway::RoyalRaceway() { Props.SetText(Props.Name, "royal raceway", sizeof(Props.Name)); Props.SetText(Props.DebugName, "p circuit", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "1025m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "1025m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009188; Props.AIMaximumSeparation = 50.0f; @@ -111,7 +110,7 @@ RoyalRaceway::RoyalRaceway() { } void RoyalRaceway::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(royal_raceway_dls); i++) { InvertTriangleWindingByName(royal_raceway_dls[i]); @@ -121,7 +120,7 @@ void RoyalRaceway::Load() { InvertTriangleWindingByName(d_course_royal_raceway_packed_dl_11A8); InvertTriangleWindingByName(d_course_royal_raceway_packed_dl_8A0); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); func_80295C6C(); } @@ -148,7 +147,7 @@ void RoyalRaceway::BeginPlay() { } } -void RoyalRaceway::InitCourseObjects() { +void RoyalRaceway::InitTrackObjects() { size_t i; if (gGamestate != CREDITS_SEQUENCE) { if (gModeSelection == GRAND_PRIX) { @@ -200,7 +199,7 @@ void RoyalRaceway::SetStaffGhost() { D_80162DE4 = 6; } -void RoyalRaceway::Render(struct UnkStruct_800DC5EC* arg0) { +void RoyalRaceway::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -217,7 +216,7 @@ void RoyalRaceway::Render(struct UnkStruct_800DC5EC* arg0) { // d_course_royal_raceway_packed_dl_A648 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_royal_raceway_packed_dl_A648); - render_course_segments(royal_raceway_dls, arg0); + render_track_sections(royal_raceway_dls, arg0); // d_course_royal_raceway_packed_dl_11A8 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_royal_raceway_packed_dl_11A8); @@ -229,7 +228,7 @@ void RoyalRaceway::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void RoyalRaceway::RenderCredits() { +void RoyalRaceway::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_royal_raceway_dl_D8E8)); } diff --git a/src/engine/courses/RoyalRaceway.h b/src/engine/tracks/RoyalRaceway.h similarity index 84% rename from src/engine/courses/RoyalRaceway.h rename to src/engine/tracks/RoyalRaceway.h index 4b8552b09..4cc19fcb8 100644 --- a/src/engine/courses/RoyalRaceway.h +++ b/src/engine/tracks/RoyalRaceway.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/royal_raceway/royal_raceway_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture royal_raceway_textures[]; } -class RoyalRaceway : public Course { +class RoyalRaceway : public Track { public: virtual ~RoyalRaceway() = default; // Virtual destructor for proper cleanup in derived classes @@ -27,12 +28,12 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void SetStaffGhost() override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player* player, int8_t playerId) override; }; diff --git a/src/engine/courses/SherbetLand.cpp b/src/engine/tracks/SherbetLand.cpp similarity index 93% rename from src/engine/courses/SherbetLand.cpp rename to src/engine/tracks/SherbetLand.cpp index a27f954d3..3c893069e 100644 --- a/src/engine/courses/SherbetLand.cpp +++ b/src/engine/tracks/SherbetLand.cpp @@ -32,7 +32,6 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" - #include "course.h" extern const char *sherbet_land_dls[72]; extern const char *sherbet_land_dls_2[72]; } @@ -53,7 +52,7 @@ SherbetLand::SherbetLand() { Props.SetText(Props.Name, "sherbet land", sizeof(Props.Name)); Props.SetText(Props.DebugName, "sherbet", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "756m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "756m", sizeof(Props.TrackLength)); Props.LakituTowType = (s32)OLakitu::LakituTowType::ICE; @@ -115,7 +114,7 @@ SherbetLand::SherbetLand() { } void SherbetLand::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(sherbet_land_dls); i++) { InvertTriangleWindingByName(sherbet_land_dls[i]); @@ -124,7 +123,7 @@ void SherbetLand::Load() { InvertTriangleWindingByName(sherbet_land_dls_2[i]); } } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_sherbet_land_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_sherbet_land_addr)); func_80295C6C(); // d_course_sherbet_land_packed_dl_1EB8 find_vtx_and_set_colours((Gfx*) d_course_sherbet_land_packed_dl_1EB8, 180, 255, 255, 255); @@ -138,7 +137,7 @@ void SherbetLand::UnLoad() { f32 SherbetLand::GetWaterLevel(FVector pos, Collision* collision) { if ((get_surface_type(collision->meshIndexZX) & 0xFF) == SNOW) { - return (f32) (gCourseMinY - 0xA); + return (f32) (gTrackMinY - 0xA); } return Props.WaterLevel; } @@ -188,32 +187,32 @@ void SherbetLand::BeginPlay() { } } -void SherbetLand::UpdateCourseObjects() { +void SherbetLand::TickTrackObjects() { if (gGamestate != CREDITS_SEQUENCE) { func_800842C8(); } } -void SherbetLand::RenderCourseObjects(s32 cameraId) { +void SherbetLand::DrawTrackObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { func_80052E30(cameraId); } } -void SherbetLand::Render(struct UnkStruct_800DC5EC* arg0) { +void SherbetLand::Draw(ScreenContext* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(sherbet_land_dls, arg0); + render_track_sections(sherbet_land_dls, arg0); } -void SherbetLand::RenderCredits() { +void SherbetLand::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_sherbet_land_dl_9AE8)); } -void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void SherbetLand::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -221,7 +220,7 @@ void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCoun gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP); gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP); - render_course_segments(sherbet_land_dls_2, screen); + render_track_sections(sherbet_land_dls_2, screen); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); if ((func_80290C20(screen->camera) == 1) && (get_water_level(screen->player) < screen->player->pos[1])) { diff --git a/src/engine/courses/SherbetLand.h b/src/engine/tracks/SherbetLand.h similarity index 70% rename from src/engine/courses/SherbetLand.h rename to src/engine/tracks/SherbetLand.h index ecc72aedf..6987759ef 100644 --- a/src/engine/courses/SherbetLand.h +++ b/src/engine/tracks/SherbetLand.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/sherbet_land/sherbet_land_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture sherbet_land_textures[]; } -class SherbetLand : public Course { +class SherbetLand : public Track { public: virtual ~SherbetLand() = default; // Virtual destructor for proper cleanup in derived classes @@ -28,10 +29,10 @@ public: virtual void UnLoad() override; virtual f32 GetWaterLevel(FVector pos, Collision* collision) override; virtual void BeginPlay() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; }; diff --git a/src/engine/courses/Skyscraper.cpp b/src/engine/tracks/Skyscraper.cpp similarity index 96% rename from src/engine/courses/Skyscraper.cpp rename to src/engine/tracks/Skyscraper.cpp index 0abd6caa5..3e7e34d1c 100644 --- a/src/engine/courses/Skyscraper.cpp +++ b/src/engine/tracks/Skyscraper.cpp @@ -47,7 +47,7 @@ Skyscraper::Skyscraper() { Props.SetText(Props.Name, "skyscraper", sizeof(Props.Name)); Props.SetText(Props.DebugName, "skyscraper", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F18; Props.AIMaximumSeparation = -1.0f; @@ -106,7 +106,7 @@ Skyscraper::Skyscraper() { } void Skyscraper::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { InvertTriangleWindingByName(d_course_skyscraper_packed_dl_FE8); InvertTriangleWindingByName(d_course_skyscraper_packed_dl_C60); @@ -140,7 +140,7 @@ void Skyscraper::BeginPlay() { } } -void Skyscraper::InitCourseObjects() {} +void Skyscraper::InitTrackObjects() {} void Skyscraper::SomeSounds() {} @@ -148,7 +148,7 @@ void Skyscraper::WhatDoesThisDo(Player* player, int8_t playerId) {} void Skyscraper::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void Skyscraper::Render(struct UnkStruct_800DC5EC* arg0) { +void Skyscraper::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); @@ -171,7 +171,7 @@ void Skyscraper::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_skyscraper_packed_dl_258); } -void Skyscraper::RenderCredits() {} +void Skyscraper::DrawCredits() {} void Skyscraper::Waypoints(Player* player, int8_t playerId) { player->nearestPathPointId = 0; diff --git a/src/engine/courses/Skyscraper.h b/src/engine/tracks/Skyscraper.h similarity index 84% rename from src/engine/courses/Skyscraper.h rename to src/engine/tracks/Skyscraper.h index f7a323037..f00d4833c 100644 --- a/src/engine/courses/Skyscraper.h +++ b/src/engine/tracks/Skyscraper.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/skyscraper/skyscraper_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture skyscraper_textures[]; } -class Skyscraper : public Course { +class Skyscraper : public Track { public: virtual ~Skyscraper() = default; // Virtual destructor for proper cleanup in derived classes @@ -28,12 +29,12 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; //virtual void InitClouds() override; - virtual void InitCourseObjects() override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/TestCourse.cpp b/src/engine/tracks/TestTrack.cpp similarity index 90% rename from src/engine/courses/TestCourse.cpp rename to src/engine/tracks/TestTrack.cpp index c60198329..52ddfc49c 100644 --- a/src/engine/courses/TestCourse.cpp +++ b/src/engine/tracks/TestTrack.cpp @@ -4,7 +4,7 @@ #include #include -#include "TestCourse.h" +#include "TestTrack.h" #include "World.h" #include "engine/actors/Finishline.h" #include "engine/actors/BowserStatue.h" @@ -51,15 +51,13 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" - #include "course.h" - extern Gfx test_course_dls[]; extern Vtx mario_Plane_001_mesh_vtx_1[]; extern Gfx mario_Plane_001_mesh[]; - extern TrackPathPoint test_course_path[]; - extern TrackSections test_course_addr[]; + extern TrackPathPoint test_track_path[]; + extern TrackSections test_track_addr[]; } -TestCourse::TestCourse() { +TestTrack::TestTrack() { Props.Minimap.Texture = minimap_mario_raceway; Props.Minimap.Width = ResourceGetTexWidthByName(Props.Minimap.Texture); Props.Minimap.Height = ResourceGetTexHeightByName(Props.Minimap.Texture); @@ -73,11 +71,11 @@ TestCourse::TestCourse() { Props.Minimap.Colour = {255, 255, 255}; ResizeMinimap(&Props.Minimap); - Id = "mk:test_course"; + Id = "mk:test_track"; - Props.SetText(Props.Name, "Test Course", sizeof(Props.Name)); + Props.SetText(Props.Name, "Test Track", sizeof(Props.Name)); Props.SetText(Props.DebugName, "test track", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "100m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "100m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D008F28; Props.AIMaximumSeparation = 50.0f; @@ -109,12 +107,12 @@ TestCourse::TestCourse() { Props.OffTrackTargetSpeed[2] = 5.75f; Props.OffTrackTargetSpeed[3] = 6.3333334f; - Props.PathTable[0] = test_course_path; + Props.PathTable[0] = test_track_path; Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = test_course_path; + Props.PathTable2[0] = test_track_path; Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -134,8 +132,8 @@ TestCourse::TestCourse() { Props.Sequence = MusicSeq::MUSIC_SEQ_WARIO_STADIUM; } -void TestCourse::Load() { - Course::Load(mario_Plane_001_mesh_vtx_1, NULL); +void TestTrack::Load() { + Track::Load(mario_Plane_001_mesh_vtx_1, NULL); if (gIsMirrorMode != 0) { InvertTriangleWinding(mario_Plane_001_mesh); @@ -143,15 +141,15 @@ void TestCourse::Load() { generate_collision_mesh_with_defaults(mario_Plane_001_mesh); - parse_course_displaylists((TrackSections*)test_course_addr); + parse_track_displaylists((TrackSections*)test_track_addr); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } -void TestCourse::UnLoad() { +void TestTrack::UnLoad() { } -void TestCourse::BeginPlay() { +void TestTrack::BeginPlay() { struct ActorSpawnData itemboxes[] = { { 200, 1500, 200 , 0}, { 350, 2500, 300 , 1}, @@ -192,7 +190,7 @@ void TestCourse::BeginPlay() { Vec3f crossingPos = {0, 2, 0}; uintptr_t* crossing1 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos, 0, 2, 900.0f, 650.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; @@ -230,7 +228,7 @@ void TestCourse::BeginPlay() { // OGrandPrixBalloons::Spawn(FVector(0, 0, 0)); } -void TestCourse::WhatDoesThisDo(Player* player, int8_t playerId) { +void TestTrack::WhatDoesThisDo(Player* player, int8_t playerId) { if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestPathPointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { @@ -245,7 +243,7 @@ void TestCourse::WhatDoesThisDo(Player* player, int8_t playerId) { } } -void TestCourse::WhatDoesThisDoAI(Player* player, int8_t playerId) { +void TestTrack::WhatDoesThisDoAI(Player* player, int8_t playerId) { if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestPathPointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { @@ -260,7 +258,7 @@ void TestCourse::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void TestCourse::Render(struct UnkStruct_800DC5EC* arg0) { +void TestTrack::Draw(ScreenContext* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); @@ -275,6 +273,6 @@ void TestCourse::Render(struct UnkStruct_800DC5EC* arg0) { gSPDisplayList(gDisplayListHead++, mario_Plane_001_mesh); } -bool TestCourse::IsMod() { +bool TestTrack::IsMod() { return true; } diff --git a/src/engine/courses/TestCourse.h b/src/engine/tracks/TestTrack.h similarity index 75% rename from src/engine/courses/TestCourse.h rename to src/engine/tracks/TestTrack.h index 8bbb93634..db0c061a8 100644 --- a/src/engine/courses/TestCourse.h +++ b/src/engine/tracks/TestTrack.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/mario_raceway/mario_raceway_vertices.h" @@ -12,15 +12,15 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" - extern const course_texture test_course_textures[]; + #include "code_800029B0.h" } -class TestCourse : public Course { +class TestTrack : public Track { public: - virtual ~TestCourse() = default; // Virtual destructor for proper cleanup in derived classes + virtual ~TestTrack() = default; // Virtual destructor for proper cleanup in derived classes // Constructor - explicit TestCourse(); + explicit TestTrack(); // virtual void Load(const char* courseVtx, // course_texture* textures, const char* displaylists, size_t dlSize); @@ -29,6 +29,6 @@ public: virtual void BeginPlay() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; + virtual void Draw(ScreenContext*) override; virtual bool IsMod() override; }; diff --git a/src/engine/courses/ToadsTurnpike.cpp b/src/engine/tracks/ToadsTurnpike.cpp similarity index 95% rename from src/engine/courses/ToadsTurnpike.cpp rename to src/engine/tracks/ToadsTurnpike.cpp index af0cb51d4..c3381a821 100644 --- a/src/engine/courses/ToadsTurnpike.cpp +++ b/src/engine/tracks/ToadsTurnpike.cpp @@ -37,7 +37,6 @@ extern "C" { #include "collision.h" #include "memory.h" #include "code_80086E70.h" - #include "course.h" extern const char *d_course_toads_turnpike_dl_list[81]; extern s16 currentScreenSection; extern s8 gPlayerCount; @@ -58,7 +57,7 @@ ToadsTurnpike::ToadsTurnpike() { Props.SetText(Props.Name, "toad's turnpike", sizeof(Props.Name)); Props.SetText(Props.DebugName, "highway", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "1036m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "1036m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009238; Props.AIMaximumSeparation = 50.0f; @@ -122,7 +121,7 @@ ToadsTurnpike::ToadsTurnpike() { } void ToadsTurnpike::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(d_course_toads_turnpike_dl_list); i++) { @@ -138,9 +137,9 @@ void ToadsTurnpike::Load() { D_801625F0 = 4; D_802B87B0 = 993; D_802B87B4 = 1000; - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_toads_turnpike_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_toads_turnpike_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void ToadsTurnpike::UnLoad() { @@ -206,7 +205,7 @@ void ToadsTurnpike::InitClouds() { init_stars(this->Props.Clouds); } -void ToadsTurnpike::UpdateClouds(s32 sp1C, Camera* camera) { +void ToadsTurnpike::TickClouds(s32 sp1C, Camera* camera) { update_stars(sp1C, camera, this->Props.CloudList); } @@ -240,7 +239,7 @@ void ToadsTurnpike::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void ToadsTurnpike::Render(struct UnkStruct_800DC5EC* arg0) { +void ToadsTurnpike::Draw(ScreenContext* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); @@ -252,7 +251,7 @@ void ToadsTurnpike::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(d_course_toads_turnpike_dl_list, arg0); + render_track_sections(d_course_toads_turnpike_dl_list, arg0); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); @@ -266,7 +265,7 @@ void ToadsTurnpike::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); } -void ToadsTurnpike::RenderCredits() { +void ToadsTurnpike::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_toads_turnpike_dl_23930)); } diff --git a/src/engine/courses/ToadsTurnpike.h b/src/engine/tracks/ToadsTurnpike.h similarity index 84% rename from src/engine/courses/ToadsTurnpike.h rename to src/engine/tracks/ToadsTurnpike.h index 9c72a466e..45f7bb6f4 100644 --- a/src/engine/courses/ToadsTurnpike.h +++ b/src/engine/tracks/ToadsTurnpike.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/toads_turnpike/toads_turnpike_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture toads_turnpike_textures[]; } -class ToadsTurnpike : public Course { +class ToadsTurnpike : public Track { public: virtual ~ToadsTurnpike() = default; // Virtual destructor for proper cleanup in derived classes @@ -28,12 +29,12 @@ public: virtual void UnLoad() override; virtual void BeginPlay() override; virtual void InitClouds() override; - virtual void UpdateClouds(s32, Camera*) override; + virtual void TickClouds(s32, Camera*) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void Destroy() override; private: size_t _numTrucks = 7; diff --git a/src/engine/courses/Course.cpp b/src/engine/tracks/Track.cpp similarity index 87% rename from src/engine/courses/Course.cpp rename to src/engine/tracks/Track.cpp index 2cc812d9f..ddcbcd9ff 100644 --- a/src/engine/courses/Course.cpp +++ b/src/engine/tracks/Track.cpp @@ -3,12 +3,11 @@ #include #include -#include "Course.h" +#include "Track.h" #include "MarioRaceway.h" #include "ChocoMountain.h" #include "port/Game.h" #include "port/resource/type/TrackPathPointData.h" -#include "port/resource/type/TrackSections.h" #include "engine/editor/SceneManager.h" #include "Registry.h" #include "resourcebridge.h" @@ -243,10 +242,10 @@ bool IsTriangleWindingInverted() { } -Course::Course() { +Track::Track() { Props.SetText(Props.Name, "Blank Track", sizeof(Props.Name)); Props.SetText(Props.DebugName, "blnktrck", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "100m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "100m", sizeof(Props.TrackLength)); // Props.Cup = FLOWER_CUP; // Props.CupIndex = 3; Id = ""; @@ -313,14 +312,14 @@ Course::Course() { } // Load custom track from code -void Course::Load(Vtx* vtx, Gfx* gfx) { - Course::Init(); +void Track::Load(Vtx* vtx, Gfx* gfx) { + Track::Init(); } -void Course::UnLoad() { +void Track::UnLoad() { } -void Course::LoadO2R(std::string trackPath) { +void Track::LoadO2R(std::string trackPath) { if (!trackPath.empty()) { SceneFilePtr = (trackPath + "/scene.json"); TrackSectionsPtr = (trackPath + "/data_track_sections"); @@ -336,7 +335,7 @@ void Course::LoadO2R(std::string trackPath) { u16* ptr = &Props.PathSizes.unk0; for (auto& path : paths) { if (i >= ARRAY_COUNT(Props.PathTable2)) { - printf("[Course.cpp] The game can only import 5 paths. Found more than 5. Skipping the rest\n"); + printf("[Track.cpp] The game can only import 5 paths. Found more than 5. Skipping the rest\n"); break; // Only 5 paths allowed. 4 track, 1 vehicle } ptr[i] = path.size(); @@ -348,12 +347,12 @@ void Course::LoadO2R(std::string trackPath) { gVehiclePathSize = Props.PathSizes.unk0; // This is likely incorrect. } else { - printf("Course.cpp: LoadO2R: trackPath str is empty\n"); + printf("Track.cpp: LoadO2R: trackPath str is empty\n"); } } // Load stock and o2r tracks -void Course::Load() { +void Track::Load() { // Re-load scenefile in-case changes were made in the editor if (!SceneFilePtr.empty()) { Editor::LoadLevel(this, SceneFilePtr); @@ -368,24 +367,24 @@ void Course::Load() { size_t size = ResourceGetSizeByName(TrackSectionsPtr.c_str()); if (sections != nullptr) { - Course::Init(); - ParseCourseSections(sections, size); + Track::Init(); + ParseTrackSections(sections, size); func_80295C6C(); if (Props.WaterLevel == FLT_MAX) { - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } } else { - printf("Course.cpp: Custom track sections are invalid\n"); + printf("Track.cpp: Custom track sections are invalid\n"); } return; } - Course::Init(); + Track::Init(); } -// C++ version of parse_course_displaylists() -void Course::ParseCourseSections(TrackSections* sections, size_t size) { +// C++ version of parse_track_displaylists() +void Track::ParseTrackSections(TrackSections* sections, size_t size) { printf("\n[Track] Generating Collision Meshes...\n"); for (size_t i = 0; i < (size / sizeof(TrackSections)); i++) { if (sections[i].flags & 0x8000) { @@ -411,7 +410,7 @@ void Course::ParseCourseSections(TrackSections* sections, size_t size) { printf("[Track] Collision Mesh Generation Complete!\n\n"); } -void Course::TestPath() { +void Track::TestPath() { // DEBUG ONLY TO VISUALIZE PATH return; s16 x; @@ -435,15 +434,15 @@ void Course::TestPath() { } } -void Course::Init() { +void Track::Init() { gNumActors = 0; - gCourseMinX = 0; - gCourseMinY = 0; - gCourseMinZ = 0; + gTrackMinX = 0; + gTrackMinY = 0; + gTrackMinZ = 0; - gCourseMaxX = 0; - gCourseMaxY = 0; - gCourseMaxZ = 0; + gTrackMaxX = 0; + gTrackMaxY = 0; + gTrackMaxZ = 0; D_8015F59C = 0; D_8015F5A0 = 0; @@ -455,14 +454,14 @@ void Course::Init() { D_800DC5C8 = 0; } -void Course::BeginPlay() { +void Track::BeginPlay() { printf("[Track] BeginPlay\n"); TestPath(); this->SpawnActors(); } // Spawns actors from SpawnParams set by the scene file in SceneManager.cpp -void Course::SpawnActors() { +void Track::SpawnActors() { for (const auto& actor : SpawnList) { auto it = gActorRegistry.find(actor.Name); if (it != gActorRegistry.end() && it->second.spawnFunc) { @@ -473,13 +472,13 @@ void Course::SpawnActors() { } } -void Course::InitClouds() { +void Track::InitClouds() { if (this->Props.Clouds) { init_clouds(this->Props.Clouds); } } -void Course::UpdateClouds(s32 arg0, Camera* camera) { +void Track::TickClouds(s32 arg0, Camera* camera) { s32 cloudIndex; s32 objectIndex; CloudData* cloud; @@ -494,46 +493,46 @@ void Course::UpdateClouds(s32 arg0, Camera* camera) { } // Adjusts player speed on steep hills -void Course::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, +void Track::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { func_8003E048(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -void Course::InitCourseObjects() { +void Track::InitTrackObjects() { } -void Course::UpdateCourseObjects() { +void Track::TickTrackObjects() { } -void Course::RenderCourseObjects(s32 cameraId) { +void Track::DrawTrackObjects(s32 cameraId) { } -// Implemented for the first cup of each course plus Koopa Beach -void Course::SomeSounds() { +// Implemented for the first cup of each track plus Koopa Beach +void Track::SomeSounds() { } -void Course::CreditsSpawnActors() { +void Track::CreditsSpawnActors() { } -void Course::WhatDoesThisDo(Player* player, int8_t playerId) { +void Track::WhatDoesThisDo(Player* player, int8_t playerId) { } -void Course::WhatDoesThisDoAI(Player* player, int8_t playerId) { +void Track::WhatDoesThisDoAI(Player* player, int8_t playerId) { } -void Course::SetStaffGhost() { +void Track::SetStaffGhost() { bCourseGhostDisabled = 1; D_80162DF4 = 1; } -void Course::Waypoints(Player* player, int8_t playerId) { +void Track::Waypoints(Player* player, int8_t playerId) { player->nearestPathPointId = gNearestPathPointByPlayerId[playerId]; if (player->nearestPathPointId < 0) { player->nearestPathPointId = gPathCountByPathIndex[0] + player->nearestPathPointId; } } -void Course::Render(struct UnkStruct_800DC5EC* arg0) { +void Track::Draw(ScreenContext* arg0) { if (!TrackSectionsPtr.empty()) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -555,14 +554,14 @@ void Course::Render(struct UnkStruct_800DC5EC* arg0) { } } -void Course::RenderCredits() { +void Track::DrawCredits() { } -f32 Course::GetWaterLevel(FVector pos, Collision* collision) { +f32 Track::GetWaterLevel(FVector pos, Collision* collision) { float highestWater = -FLT_MAX; bool found = false; - for (const auto& volume : gWorldInstance.GetCurrentCourse()->WaterVolumes) { + for (const auto& volume : gWorldInstance.GetTrack()->WaterVolumes) { if (pos.x >= volume.MinX && pos.x <= volume.MaxX && pos.z >= volume.MinZ && pos.z <= volume.MaxZ) { // Choose the highest water volume the player is over if (!found || volume.Height > highestWater) { @@ -572,21 +571,19 @@ f32 Course::GetWaterLevel(FVector pos, Collision* collision) { } } - // If player is not over-top of a water volume then return the courses default water level - return found ? highestWater : gWorldInstance.GetCurrentCourse()->Props.WaterLevel; + // If player is not over-top of a water volume then return the tracks default water level + return found ? highestWater : gWorldInstance.GetTrack()->Props.WaterLevel; } -void Course::ScrollingTextures() { +void Track::ScrollingTextures() { } -void Course::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void Track::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { } -void Course::Destroy() { +void Track::Destroy() { } -bool Course::IsMod() { +bool Track::IsMod() { return bIsMod; } - -Course* currentCourse = nullptr; diff --git a/src/engine/courses/Course.h b/src/engine/tracks/Track.h similarity index 89% rename from src/engine/courses/Course.h rename to src/engine/tracks/Track.h index cf1161de6..c8fb32dd8 100644 --- a/src/engine/courses/Course.h +++ b/src/engine/tracks/Track.h @@ -1,5 +1,5 @@ -#ifndef ENGINE_COURSE_H -#define ENGINE_COURSE_H +#ifndef ENGINE_TRACK_H +#define ENGINE_TRACK_H #include #include "CoreMath.h" @@ -10,19 +10,18 @@ #include #include "engine/objects/Lakitu.h" #include "engine/cameras/TourCamera.h" -#include "port/resource/type/TrackSections.h" extern "C" { #endif -#include "camera.h" -#include "course_offsets.h" -#include "data/some_data.h" #include "defines.h" +#include "camera.h" +#include "data/some_data.h" #include "bomb_kart.h" #include "path_spawn_metadata.h" #include "waypoints.h" #include "sounds.h" #include "common_structs.h" +#include "code_800029B0.h" #ifdef __cplusplus } @@ -73,10 +72,23 @@ void InvertTriangleWindingByName(const char* name); void RestoreTriangleWinding(); bool IsTriangleWindingInverted(); +/** + * A container of models that make up each section of the track + * The game displays each model depending on the location of the player + * and the direction they are facing + * This work is done in render_track_sections() + */ +typedef struct { + uint64_t crc; + u8 surfaceType; // Determines what kind of surface the player drives on (ex. dirt, asphalt, etc.) + u8 sectionId; + u16 flags; +} TrackSections; + typedef struct Properties { char Name[128]; char DebugName[128]; - char CourseLength[128]; + char TrackLength[128]; int32_t LakituTowType; MinimapProps Minimap; const char* AIBehaviour; @@ -86,7 +98,7 @@ typedef struct Properties { float FarPersp; int16_t* AIDistance; uint32_t AISteeringSensitivity; - _struct_gCoursePathSizes_0x10 PathSizes; + TrackPathSizes PathSizes; Vec4f CurveTargetSpeed; Vec4f NormalTargetSpeed; Vec4f D_0D0096B8; @@ -106,7 +118,7 @@ typedef struct Properties { // j["Id"] = Id ? Id : ""; j["Name"] = Name ? Name : ""; j["DebugName"] = DebugName ? DebugName : ""; - j["CourseLength"] = CourseLength ? CourseLength : ""; + j["TrackLength"] = TrackLength ? TrackLength : ""; //j["AIBehaviour"] = AIBehaviour ? AIBehaviour : ""; j["LakituTowType"] = LakituTowType; j["AIMaximumSeparation"] = AIMaximumSeparation; @@ -119,7 +131,7 @@ typedef struct Properties { j["AISteeringSensitivity"] = AISteeringSensitivity; - // PathSizes - Assuming _struct_gCoursePathSizes_0x10 can be serialized similarly + // PathSizes - Assuming TrackPathSizes can be serialized similarly // j["PathSizes"] = PathSizes; // Implement your serialization logic here j["CurveTargetSpeed"] = { CurveTargetSpeed[0], CurveTargetSpeed[1], CurveTargetSpeed[2], CurveTargetSpeed[3] }; @@ -175,9 +187,9 @@ typedef struct Properties { strncpy(DebugName, j.at("DebugName").get().c_str(), sizeof(DebugName) - 1); DebugName[sizeof(DebugName) - 1] = '\0'; // Ensure null termination - // CourseLength = j.at("CourseLength").get().c_str(); - strncpy(CourseLength, j.at("CourseLength").get().c_str(), sizeof(CourseLength) - 1); - CourseLength[sizeof(CourseLength) - 1] = '\0'; // Ensure null termination + // TrackLength = j.at("TrackLength").get().c_str(); + strncpy(TrackLength, j.at("TrackLength").get().c_str(), sizeof(TrackLength) - 1); + TrackLength[sizeof(TrackLength) - 1] = '\0'; // Ensure null termination //AIBehaviour = j.at("AIBehaviour").get().c_str(); LakituTowType = j.at("LakituTowType").get(); @@ -194,7 +206,7 @@ typedef struct Properties { // Copy the data into the existing AIDistances array std::copy(temp.begin(), temp.end(), AIDistance); } else { - printf("Course::from_json() AIDistance array not size of 32\n"); + printf("[Track.h] [from_json()] AIDistance array not size of 32\n"); } AISteeringSensitivity = j.at("AISteeringSensitivity").get(); @@ -287,7 +299,7 @@ typedef struct Properties { void New() { SetText(Name, "", sizeof(Name)); SetText(DebugName, "", sizeof(DebugName)); - SetText(CourseLength, "", sizeof(CourseLength)); + SetText(TrackLength, "", sizeof(TrackLength)); } #endif @@ -298,7 +310,7 @@ typedef struct Properties { class World; // <-- Forward declare -class Course { +class Track { public: std::string Id; @@ -323,15 +335,15 @@ public: std::vector TourShots; - virtual ~Course() = default; + virtual ~Track() = default; - explicit Course(); + explicit Track(); virtual void LoadO2R(std::string trackPath); // Load custom track from o2r - virtual void Load(); // Decompress and load stock courses or from o2r but TrackSectionsPtr must be set. + virtual void Load(); // Decompress and load stock tracks or from o2r but TrackSectionsPtr must be set. virtual void Load(Vtx* vtx, Gfx *gfx); // Load custom track from code. Load must be overridden and then call to this base class method impl. virtual void UnLoad(); - virtual void ParseCourseSections(TrackSections* sections, size_t size); + virtual void ParseTrackSections(TrackSections* sections, size_t size); /** * @brief BeginPlay This function is called once at the start of gameplay. @@ -341,23 +353,23 @@ public: void SpawnActors(); virtual void TestPath(); virtual void InitClouds(); - virtual void UpdateClouds(s32, Camera*); + virtual void TickClouds(s32, Camera*); virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7); - virtual void InitCourseObjects(); - virtual void UpdateCourseObjects(); - virtual void RenderCourseObjects(s32 cameraId); + virtual void InitTrackObjects(); + virtual void TickTrackObjects(); + virtual void DrawTrackObjects(s32 cameraId); virtual void SomeSounds(); virtual void CreditsSpawnActors(); virtual void WhatDoesThisDo(Player*, int8_t); virtual void WhatDoesThisDoAI(Player*, int8_t); virtual void SetStaffGhost(); - virtual void Render(struct UnkStruct_800DC5EC*); - virtual void RenderCredits(); + virtual void Draw(ScreenContext*); + virtual void DrawCredits(); virtual void Waypoints(Player* player, int8_t playerId); virtual f32 GetWaterLevel(FVector pos, Collision* collision); virtual void ScrollingTextures(); // Draw transparent models (water, signs, arrows, etc.) - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); virtual void Destroy(); virtual bool IsMod(); @@ -368,4 +380,4 @@ public: #endif -#endif // ENGINE_COURSE_H +#endif // ENGINE_TRACK_H diff --git a/src/engine/courses/WarioStadium.cpp b/src/engine/tracks/WarioStadium.cpp similarity index 96% rename from src/engine/courses/WarioStadium.cpp rename to src/engine/tracks/WarioStadium.cpp index 9f900b885..8b728f36b 100644 --- a/src/engine/courses/WarioStadium.cpp +++ b/src/engine/tracks/WarioStadium.cpp @@ -33,7 +33,6 @@ extern "C" { #include "code_8003DC40.h" #include "memory.h" #include "skybox_and_splitscreen.h" -#include "course.h" extern const char* wario_stadium_dls[108]; extern s16 currentScreenSection; } @@ -53,7 +52,7 @@ WarioStadium::WarioStadium() { Props.SetText(Props.Name, "wario stadium", sizeof(Props.Name)); Props.SetText(Props.DebugName, "stadium", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "1591m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "1591m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D009310; Props.AIMaximumSeparation = 50.0f; @@ -117,7 +116,7 @@ WarioStadium::WarioStadium() { } void WarioStadium::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(wario_stadium_dls); i++) { @@ -129,9 +128,9 @@ void WarioStadium::Load() { InvertTriangleWindingByName(d_course_wario_stadium_packed_dl_EC0); } - parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_wario_stadium_addr)); + parse_track_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_wario_stadium_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; // d_course_wario_stadium_packed_dl_C50 find_vtx_and_set_colours((Gfx*) d_course_wario_stadium_packed_dl_C50, 100, 255, 255, 255); // d_course_wario_stadium_packed_dl_BD8 @@ -176,11 +175,11 @@ void WarioStadium::InitClouds() { init_stars(this->Props.Clouds); } -void WarioStadium::UpdateClouds(s32 sp1C, Camera* camera) { +void WarioStadium::TickClouds(s32 sp1C, Camera* camera) { update_stars(sp1C, camera, this->Props.CloudList); } -void WarioStadium::InitCourseObjects() { +void WarioStadium::InitTrackObjects() { } void WarioStadium::SomeSounds() { @@ -237,7 +236,7 @@ void WarioStadium::CopyJumbotron(s32 ulx, s32 uly, s16 portionToDraw, u16* sourc } } -void WarioStadium::Render(struct UnkStruct_800DC5EC* arg0) { +void WarioStadium::Draw(ScreenContext* arg0) { s16 prevFrame; gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -263,7 +262,7 @@ void WarioStadium::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - render_course_segments(wario_stadium_dls, arg0); + render_track_sections(wario_stadium_dls, arg0); // d_course_wario_stadium_packed_dl_A228 gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_wario_stadium_packed_dl_A228); @@ -296,7 +295,7 @@ void WarioStadium::Render(struct UnkStruct_800DC5EC* arg0) { } } -void WarioStadium::RenderCredits() { +void WarioStadium::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_wario_stadium_dl_CA78)); } @@ -305,7 +304,7 @@ void WarioStadium::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Ve func_8003EE2C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -void WarioStadium::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void WarioStadium::DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); diff --git a/src/engine/courses/WarioStadium.h b/src/engine/tracks/WarioStadium.h similarity index 80% rename from src/engine/courses/WarioStadium.h rename to src/engine/tracks/WarioStadium.h index eb8c253f4..938d770c9 100644 --- a/src/engine/courses/WarioStadium.h +++ b/src/engine/tracks/WarioStadium.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/wario_stadium/wario_stadium_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" +#include "code_800029B0.h" extern const course_texture wario_stadium_textures[]; } -class WarioStadium : public Course { +class WarioStadium : public Track { void CopyJumbotron(s32 ulx, s32 uly, s16 portionToDraw, u16* source); public: @@ -30,16 +31,16 @@ class WarioStadium : public Course { virtual void UnLoad() override; virtual void BeginPlay() override; virtual void InitClouds() override; - virtual void UpdateClouds(s32, Camera*) override; - virtual void InitCourseObjects() override; + virtual void TickClouds(s32, Camera*) override; + virtual void InitTrackObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; diff --git a/src/engine/courses/YoshiValley.cpp b/src/engine/tracks/YoshiValley.cpp similarity index 92% rename from src/engine/courses/YoshiValley.cpp rename to src/engine/tracks/YoshiValley.cpp index c2506e568..35af33e39 100644 --- a/src/engine/courses/YoshiValley.cpp +++ b/src/engine/tracks/YoshiValley.cpp @@ -33,7 +33,6 @@ extern "C" { #include "actors.h" #include "collision.h" #include "memory.h" - #include "course.h" extern const char *d_course_yoshi_valley_dl_list[124]; } @@ -50,7 +49,7 @@ YoshiValley::YoshiValley() { Props.SetText(Props.Name, "yoshi valley", sizeof(Props.Name)); Props.SetText(Props.DebugName, "maze", sizeof(Props.DebugName)); - Props.SetText(Props.CourseLength, "772m", sizeof(Props.CourseLength)); + Props.SetText(Props.TrackLength, "772m", sizeof(Props.TrackLength)); Props.AIBehaviour = D_0D0090B8; Props.AIMaximumSeparation = 35.0f; @@ -108,7 +107,7 @@ YoshiValley::YoshiValley() { } void YoshiValley::Load() { - Course::Load(); + Track::Load(); if (gIsMirrorMode != 0) { for (size_t i = 0; i < ARRAY_COUNT(d_course_yoshi_valley_dl_list); i++) { @@ -118,9 +117,9 @@ void YoshiValley::Load() { Lights1 lights4 = gdSPDefLights1(100, 100, 100, 255, 254, 254, 0, 0, 120); set_track_light_direction(&lights4, -0x38F0, 0x1C70, 1); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_yoshi_valley_addr)); + parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_yoshi_valley_addr)); func_80295C6C(); - Props.WaterLevel = gCourseMinY - 10.0f; + Props.WaterLevel = gTrackMinY - 10.0f; } void YoshiValley::UnLoad() { @@ -135,7 +134,7 @@ void YoshiValley::BeginPlay() { spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_yoshi_valley_tree_spawn)); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_yoshi_valley_item_box_spawns)); vec3f_set(position, -2300.0f, 0.0f, 634.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG); if (gGamestate != CREDITS_SEQUENCE) { @@ -177,13 +176,13 @@ void YoshiValley::BeginPlay() { } } -void YoshiValley::InitCourseObjects() { +void YoshiValley::InitTrackObjects() { } -void YoshiValley::UpdateCourseObjects() { +void YoshiValley::TickTrackObjects() { } -void YoshiValley::RenderCourseObjects(s32 cameraId) { +void YoshiValley::DrawTrackObjects(s32 cameraId) { } void YoshiValley::SomeSounds() { @@ -193,16 +192,16 @@ void YoshiValley::WhatDoesThisDo(Player* player, int8_t playerId) {} void YoshiValley::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void YoshiValley::Render(struct UnkStruct_800DC5EC* arg0) { +void YoshiValley::Draw(ScreenContext* arg0) { gDPPipeSync(gDisplayListHead++); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - render_course_segments(d_course_yoshi_valley_dl_list, arg0); + render_track_sections(d_course_yoshi_valley_dl_list, arg0); gDPPipeSync(gDisplayListHead++); } -void YoshiValley::RenderCredits() { +void YoshiValley::DrawCredits() { gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_yoshi_valley_dl_18020)); } @@ -218,7 +217,7 @@ void YoshiValley::CreditsSpawnActors() { Vec3s rotation = { 0, 0, 0 }; vec3f_set(position, -2300.0f, 0.0f, 634.0f); - position[0] *= gCourseDirection; + position[0] *= gTrackDirection; add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG); } diff --git a/src/engine/courses/YoshiValley.h b/src/engine/tracks/YoshiValley.h similarity index 79% rename from src/engine/courses/YoshiValley.h rename to src/engine/tracks/YoshiValley.h index 88a306533..644ab3b48 100644 --- a/src/engine/courses/YoshiValley.h +++ b/src/engine/tracks/YoshiValley.h @@ -1,7 +1,7 @@ #pragma once #include -#include "Course.h" +#include "Track.h" extern "C" { #include "assets/models/tracks/yoshi_valley/yoshi_valley_vertices.h" @@ -12,10 +12,11 @@ extern "C" { #include "data/some_data.h" #include "objects.h" #include "path_spawn_metadata.h" + #include "code_800029B0.h" extern const course_texture yoshi_valley_textures[]; } -class YoshiValley : public Course { +class YoshiValley : public Track { public: virtual ~YoshiValley() = default; // Virtual destructor for proper cleanup in derived classes @@ -27,14 +28,14 @@ public: virtual void Load() override; virtual void UnLoad() override; virtual void BeginPlay() override; - virtual void InitCourseObjects() override; - virtual void UpdateCourseObjects() override; - virtual void RenderCourseObjects(s32 cameraId) override; + virtual void InitTrackObjects() override; + virtual void TickTrackObjects() override; + virtual void DrawTrackObjects(s32 cameraId) override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; - virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void Draw(ScreenContext*) override; + virtual void DrawCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void CreditsSpawnActors() override; diff --git a/src/engine/vehicles/Train.cpp b/src/engine/vehicles/Train.cpp index 23724fad6..8b728375e 100644 --- a/src/engine/vehicles/Train.cpp +++ b/src/engine/vehicles/Train.cpp @@ -4,7 +4,7 @@ #include "Train.h" #include -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/vehicles/Utils.h" #include "engine/World.h" #include "port/Game.h" diff --git a/src/enhancements/freecam/freecam.cpp b/src/enhancements/freecam/freecam.cpp index 9306537b4..2f49cf83a 100644 --- a/src/enhancements/freecam/freecam.cpp +++ b/src/enhancements/freecam/freecam.cpp @@ -25,7 +25,7 @@ extern "C" { #include "freecam.h" } -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" typedef struct { Vec3f pos; @@ -344,7 +344,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { if (fRankIndex > 0) { fRankIndex--; camera->playerId = fRankIndex; - D_800DC5EC->player = &gPlayers[fRankIndex]; + gScreenOneCtx->player = &gPlayers[fRankIndex]; } } @@ -353,7 +353,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { if (fRankIndex < 7) { fRankIndex++; camera->playerId = fRankIndex; - D_800DC5EC->player = &gPlayers[fRankIndex]; + gScreenOneCtx->player = &gPlayers[fRankIndex]; } } diff --git a/src/main.c b/src/main.c index 405383706..584d56c27 100644 --- a/src/main.c +++ b/src/main.c @@ -7,8 +7,6 @@ #include #include "racing/framebuffer_effects.h" -#include "networking/networking.h" - #include "profiler.h" #include "main.h" #include "racing/memory.h" @@ -610,8 +608,8 @@ void setup_game_memory(void) { // gNextFreeMemoryAddress += textureSegSize; - // // Common course data does not get reloaded when the race state resets. - // // Therefore, only reset the memory ptr to after the common course data. + // // Common track data does not get reloaded when the race state resets. + // // Therefore, only reset the memory ptr to after the common track data. gFreeMemoryResetAnchor = gNextFreeMemoryAddress; } @@ -634,7 +632,7 @@ void display_debug_info(void) { D_800DC514 = false; } rotY = camera1->rot[1]; - gDebugPathCount = D_800DC5EC->pathCounter; + gDebugPathCount = gScreenOneCtx->pathCounter; if (rotY < 0x2000) { func_80057A50(40, 100, "SOUTH ", gDebugPathCount); @@ -673,7 +671,7 @@ void process_game_tick(void) { if (gIsEditorPaused == false) { if (D_8015011E) { - gCourseTimer += COURSE_TIMER_ITER; + gCourseTimer += TRACK_TIMER_ITER; } func_802909F0(); evaluate_collision_for_players_and_actors(); @@ -728,11 +726,6 @@ void race_logic_loop(void) { replays_loop(); } - // Wait for all racers to load - if (gNetwork.enabled) { - network_all_players_loaded(); - } - if (gIsGamePaused == false) { for (size_t i = 0; i < gTickLogic; i++) { process_game_tick(); @@ -1093,7 +1086,7 @@ void func_80002658(void) { } /** - * Sets courseId to NULL if + * Sets trackId to NULL if * * */ @@ -1101,19 +1094,19 @@ void update_gamestate(void) { switch (gGamestate) { case START_MENU_FROM_QUIT: func_80002658(); - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; break; case MAIN_MENU_FROM_QUIT: func_800025D4(); - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; break; case PLAYER_SELECT_MENU_FROM_QUIT: func_80002600(); - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; break; case COURSE_SELECT_MENU_FROM_QUIT: func_8000262C(); - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; break; case RACING: /** @@ -1124,12 +1117,12 @@ void update_gamestate(void) { setup_race(); break; case ENDING: - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; init_segment_ending_sequences(); setup_podium_ceremony(); break; case CREDITS_SEQUENCE: - gCurrentlyLoadedCourseId = COURSE_NULL; + gCurrentlyLoadedCourseId = TRACK_NULL; // init_segment_racing(); init_segment_ending_sequences(); load_credits(); diff --git a/src/main.h b/src/main.h index 7a0904565..43662b734 100644 --- a/src/main.h +++ b/src/main.h @@ -49,7 +49,7 @@ struct GfxPool { /* 0x00180 */ Mtx mtxUnk; // Matrix unused /* 0x001C0 */ Mtx mtxLookAt[4]; // Matrix for lookat screen modes /* 0x002C0 */ Mtx mtxHud[MTX_HUD_POOL_SIZE]; // Matrix hud elements and 2D related effects - /* 0x0CAC0 */ Mtx mtxObject[MTX_OBJECT_POOL_SIZE]; // Matrix course objects + /* 0x0CAC0 */ Mtx mtxObject[MTX_OBJECT_POOL_SIZE]; // Matrix track objects /* 0x0EAC0 */ Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]; // Matrix shadow characters /* 0x0F2C0 */ Mtx mtxKart[MTX_KART_POOL_SIZE]; // Matrix kart characters /* 0x0FAC0 */ Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]; // Matrix misc effects diff --git a/src/menu_items.c b/src/menu_items.c index 847d91cf2..b971942f3 100644 --- a/src/menu_items.c +++ b/src/menu_items.c @@ -44,7 +44,7 @@ #include "port/Engine.h" #include "port/Game.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/Matrix.h" #include "src/engine/HM_Intro.h" #include "src/port/interpolation/FrameInterpolation.h" @@ -442,8 +442,8 @@ char gTextDistance[] = "distance"; char* gTextMenuOption[] = { "return to menu", - "erase records for this course", - "erase ghost from this course", + "erase records for this track", + "erase ghost from this track", }; char* D_800E7840[] = { @@ -1419,10 +1419,10 @@ void func_80091B78(void) { D_8018E838[i] = 0; } - D_800DC5EC->screenStartX = 160; - D_800DC5EC->screenStartY = 120; - D_800DC5EC->screenWidth = SCREEN_WIDTH; - D_800DC5EC->screenHeight = SCREEN_HEIGHT; + gScreenOneCtx->screenStartX = 160; + gScreenOneCtx->screenStartY = 120; + gScreenOneCtx->screenWidth = SCREEN_WIDTH; + gScreenOneCtx->screenHeight = SCREEN_HEIGHT; gFadeModeSelection = 1; setup_menus(); @@ -1491,7 +1491,7 @@ void func_80091EE4(void) { func_800B6708(); for (temp_s0 = 0; temp_s0 < 2; ++temp_s0) { - if ((D_8018EE10[temp_s0].ghostDataSaved != 0) && (temp_s2 == D_8018EE10[temp_s0].courseIndex)) { + if ((D_8018EE10[temp_s0].ghostDataSaved != 0) && (temp_s2 == D_8018EE10[temp_s0].trackIndex)) { func_800B64EC(temp_s0); temp_s0 = 2; gGhostPlayerInit = 0; @@ -2834,13 +2834,13 @@ void func_80095574(void) { } // This reset is not necessary. It wraps around automatically. - // if ((GetCourseIndex() >= (NUM_COURSES - 1)) || (GetCourseIndex() < 0)) { + // if ((GetTrackIndex() >= (NUM_TRACKS - 1)) || (GetTrackIndex() < 0)) { // gCurrentCourseId = 0; // } - print_str_num(0x00000050, 0x0000006E, "map_number", GetCourseIndex()); + print_str_num(0x00000050, 0x0000006E, "map_number", GetTrackIndex()); // Bump the text over by 1 character width when the track id becomes two digits (10, 11, 12 etc.) - if (GetCourseIndex() < 10) { + if (GetTrackIndex() < 10) { var_v0 = 0; } else { var_v0 = 8; @@ -3148,7 +3148,7 @@ Gfx* func_800963F0(Gfx* displayListHead, s8 textureFormat, s32 texScaleS, s32 te // its plausible that its instead using it as some form semi-random data for the static pattern? // This function is responsible for drawing a near unnoticeable static pattern -// over the course images when loading the cup selection screen +// over the track previews when loading the cup selection screen // Try locking the word at `8018DC80` to see something like 0x20 just before confirming character selection to make it // last longer Gfx* func_80096CD8(Gfx* displayListHead, s32 xPos, s32 yPos, u32 width, u32 height) { @@ -3551,7 +3551,7 @@ Gfx* draw_box(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, /** * Renders * - * Menus: Menu transition swipes, course label highlight + * Menus: Menu transition swipes, track label highlight * * All game modes: Background cover at pause screen * @@ -4953,10 +4953,10 @@ void func_8009C918(void) { s32 someIndex; for (someIndex = 0; someIndex < 4; someIndex++) { - D_8018E7E8[someIndex].x = D_8015F480[someIndex].screenStartX; - D_8018E7E8[someIndex].y = D_8015F480[someIndex].screenStartY; - D_8018E810[someIndex].x = D_8015F480[someIndex].screenWidth; - D_8018E810[someIndex].y = D_8015F480[someIndex].screenHeight; + D_8018E7E8[someIndex].x = gScreenContexts[someIndex].screenStartX; + D_8018E7E8[someIndex].y = gScreenContexts[someIndex].screenStartY; + D_8018E810[someIndex].x = gScreenContexts[someIndex].screenWidth; + D_8018E810[someIndex].y = gScreenContexts[someIndex].screenHeight; } D_8018E7E8[4].x = SCREEN_WIDTH / 2; @@ -5020,7 +5020,7 @@ void draw_fade_in(s32 arg0, s32 arg1, s32 arg2) { s32 leftEdge; s32 rightEdge; UNUSED s32 pad[3]; - struct UnkStruct_800DC5EC* unk; + ScreenContext* unk; struct UnkStruct_8018E7E8 *size, *start; if ((gModeSelection == GRAND_PRIX) || (gModeSelection == TIME_TRIALS)) { @@ -5038,7 +5038,7 @@ void draw_fade_in(s32 arg0, s32 arg1, s32 arg2) { w = size->x; h = size->y; } else { - unk = &D_8015F480[arg0]; + unk = &gScreenContexts[arg0]; x = unk->screenStartX; y = unk->screenStartY; w = unk->screenWidth; @@ -5126,7 +5126,7 @@ void func_8009CE64(s32 arg0) { func_8009CE64_label1: if (var_a1) { gGotoMenu = 9; - gCreditsCourseId = COURSE_LUIGI_RACEWAY; + gCreditsCourseId = TRACK_LUIGI_RACEWAY; } else { gGotoMenu = 1; gMenuSelection = MAIN_MENU; @@ -5269,7 +5269,7 @@ void func_8009CE64(s32 arg0) { case 0: /* switch 4 */ SelectMarioRaceway(); CM_SetCup(GetFlowerCup()); - SetCupCursorPosition(COURSE_FOUR); + SetCupCursorPosition(TRACK_FOUR); gCurrentCourseId = 0; gScreenModeSelection = 0; gPlayerCountSelection1 = 1; @@ -5280,7 +5280,7 @@ void func_8009CE64(s32 arg0) { case 1: /* switch 4 */ SelectLuigiRaceway(); CM_SetCup(GetMushroomCup()); - SetCupCursorPosition(COURSE_ONE); + SetCupCursorPosition(TRACK_ONE); gCurrentCourseId = (s16) 1; gScreenModeSelection = (s32) 1; gPlayerCountSelection1 = 2; @@ -5292,8 +5292,8 @@ void func_8009CE64(s32 arg0) { case 2: /* switch 4 */ SelectKalimariDesert(); CM_SetCup(GetMushroomCup()); - SetCupCursorPosition(COURSE_FOUR); - gCurrentCourseId = COURSE_KALIMARI_DESERT; + SetCupCursorPosition(TRACK_FOUR); + gCurrentCourseId = TRACK_KALIMARI_DESERT; gScreenModeSelection = 0; gPlayerCountSelection1 = (s32) 1; gPlayerCount = 1; @@ -5303,7 +5303,7 @@ void func_8009CE64(s32 arg0) { case 3: /* switch 4 */ SelectWarioStadium(); CM_SetCup(GetStarCup()); - SetCupCursorPosition(COURSE_ONE); + SetCupCursorPosition(TRACK_ONE); gCurrentCourseId = 0x000E; gScreenModeSelection = 3; gPlayerCountSelection1 = 3; @@ -5316,7 +5316,7 @@ void func_8009CE64(s32 arg0) { case 4: /* switch 4 */ SelectBowsersCastle(); CM_SetCup(GetStarCup()); - SetCupCursorPosition(COURSE_FOUR); + SetCupCursorPosition(TRACK_FOUR); gCurrentCourseId = 2; gScreenModeSelection = 0; gPlayerCountSelection1 = (s32) 1; @@ -5327,7 +5327,7 @@ void func_8009CE64(s32 arg0) { case 5: /* switch 4 */ SelectSherbetLand(); CM_SetCup(GetFlowerCup()); - SetCupCursorPosition(COURSE_TWO); + SetCupCursorPosition(TRACK_TWO); gCurrentCourseId = 0x000C; gScreenModeSelection = 3; gPlayerCountSelection1 = 4; @@ -5341,7 +5341,7 @@ void func_8009CE64(s32 arg0) { default: break; } - SetCourseFromCup(); + SetTrackFromCup(); gNextDemoId += 1; if (gNextDemoId >= 6) { gNextDemoId = 0; @@ -5393,7 +5393,7 @@ void func_8009CE64(s32 arg0) { case 2: /* switch 5 */ case 3: /* switch 5 */ gGamestateNext = 9; - gCreditsCourseId = COURSE_LUIGI_RACEWAY; + gCreditsCourseId = TRACK_LUIGI_RACEWAY; break; default: /* switch 5 */ gGamestateNext = 4; @@ -5481,10 +5481,10 @@ void func_8009D77C(s32 arg0, s32 arg1, s32 arg2) { var_ra = D_8018E810[arg0].x; sp44 = D_8018E810[arg0].y; } else { - var_t3 = D_8015F480[arg0].screenStartX; - var_t4 = D_8015F480[arg0].screenStartY; - var_ra = D_8015F480[arg0].screenWidth; - sp44 = D_8015F480[arg0].screenHeight; + var_t3 = gScreenContexts[arg0].screenStartX; + var_t4 = gScreenContexts[arg0].screenStartY; + var_ra = gScreenContexts[arg0].screenWidth; + sp44 = gScreenContexts[arg0].screenHeight; } var_t2 = (gCurrentTransitionTime[arg0] * 0xFF) / gTransitionDuration[arg0]; if (var_t2 >= 0x100) { @@ -5568,10 +5568,10 @@ void func_8009D998(s32 arg0) { var_t2 = D_8018E810[arg0].x; var_t3 = D_8018E810[arg0].y; } else { - var_t0 = D_8015F480[arg0].screenStartX; - var_t1 = D_8015F480[arg0].screenStartY; - var_t2 = D_8015F480[arg0].screenWidth; - var_t3 = D_8015F480[arg0].screenHeight; + var_t0 = gScreenContexts[arg0].screenStartX; + var_t1 = gScreenContexts[arg0].screenStartY; + var_t2 = gScreenContexts[arg0].screenWidth; + var_t3 = gScreenContexts[arg0].screenHeight; } temp_v0 = var_t2 / 2; temp_v1 = var_t3 / 2; @@ -7222,12 +7222,12 @@ void func_800A1500(MenuItem* arg0) { } void func_800A15EC(MenuItem* arg0) { - s16 courseId = gCupCourseOrder[(arg0->type - 0x7C) / 4][(arg0->type - 0x7C) % 4]; + s16 trackId = gCupCourseOrder[(arg0->type - 0x7C) / 4][(arg0->type - 0x7C) % 4]; gDisplayListHead = - func_8009C204(gDisplayListHead, D_800E7D74[courseId], arg0->column, arg0->row, 2); + func_8009C204(gDisplayListHead, D_800E7D74[trackId], arg0->column, arg0->row, 2); gDisplayListHead = draw_box(gDisplayListHead, arg0->column, arg0->row + 0x27, arg0->column + 0x40, arg0->row + 0x30, 0, 0, 0, 0xFF); - gDisplayListHead = func_8009C204(gDisplayListHead, D_800E7DC4[courseId], arg0->column, + gDisplayListHead = func_8009C204(gDisplayListHead, D_800E7DC4[trackId], arg0->column, arg0->row + 0x27, 3); if (func_800B639C(arg0->type - 0x7C) >= 0) { // The "^ 0" is required to force the use of v1 instead of a 4th s* register @@ -7259,14 +7259,14 @@ void func_800A1780(MenuItem* arg0) { render_menu_textures(gDisplayListHead, D_02001FA4, arg0->column, arg0->row); } -// render course preview +// render track preview void render_menu_item_data_course_image(MenuItem* arg0) { func_8009A76C(arg0->D_8018DEE0_index, 0x17, 0x84, -1); if (func_800B639C(gTimeTrialDataCourseIndex) >= TIME_TRIAL_DATA_LUIGI_RACEWAY) { gDisplayListHead = draw_flash_select_case_slow(gDisplayListHead, 0x57, 0x84, 0x96, 0x95); gDisplayListHead = render_menu_textures(gDisplayListHead, D_02004A0C, 0x57, 0x84); } - // course minimap + // track minimap //! @bug todo: This function will not work in custom courses. func_8004EF9C(gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4]); do { @@ -7275,20 +7275,20 @@ void render_menu_item_data_course_image(MenuItem* arg0) { } void render_menu_item_data_course_info(MenuItem* arg0) { - s16 courseId; + s16 trackId; s32 recordType; s32 rowOffset; - courseId = gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4]; + trackId = gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4]; arg0->column = 0x14; - // name of the course + // name of the track set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1); - print_text1_center_mode_1(0x69, arg0->row + 0x19, CM_GetPropsCourseId(courseId)->Name, 0, 0.75f, 0.75f); + print_text1_center_mode_1(0x69, arg0->row + 0x19, CM_GetPropsTrackId(trackId)->Name, 0, 0.75f, 0.75f); // distance set_text_color(TEXT_RED); print_text_mode_1(0x2D, arg0->row + 0x28, (char*) &gTextDistance, 0, 0.75f, 0.75f); - print_text1_left(0xA5, arg0->row + 0x28, CM_GetPropsCourseId(courseId)->CourseLength, 1, 0.75f, 0.75f); + print_text1_left(0xA5, arg0->row + 0x28, CM_GetPropsTrackId(trackId)->TrackLength, 1, 0.75f, 0.75f); // Best lap record set_text_color(TEXT_YELLOW); @@ -8018,8 +8018,8 @@ void func_800A3E60(MenuItem* arg0) { } else { print_text_mode_1( 0xBB - arg0->column, 0xAA + (0x1E * var_s1), - CM_GetPropsCourseId( - gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]) + CM_GetPropsTrackId( + gCupCourseOrder[D_8018EE10[var_s1].trackIndex / 4][D_8018EE10[var_s1].trackIndex % 4]) ->Name, 0, 0.45f, 0.45f); } @@ -8283,9 +8283,9 @@ void render_pause_menu_versus(MenuItem* arg0) { s32 leftEdge; s32 rightEdge; Unk_D_800E70A0* temp_s3; - struct UnkStruct_800DC5EC* temp_v0; + ScreenContext* temp_v0; - temp_v0 = &D_8015F480[gIsGamePaused - 1]; + temp_v0 = &gScreenContexts[gIsGamePaused - 1]; temp_v1 = temp_v0->screenStartX; temp_t0 = temp_v0->screenStartY; temp_t3 = temp_v0->screenWidth / 2; @@ -8347,10 +8347,10 @@ void render_pause_grand_prix(MenuItem* arg0) { s32 temp_t4; s32 var_s0; Unk_D_800E70A0* temp_s3; - struct UnkStruct_800DC5EC* temp_v0; + ScreenContext* temp_v0; f32 one = 1.0f; - temp_v0 = &D_8015F480[gIsGamePaused - 1]; + temp_v0 = &gScreenContexts[gIsGamePaused - 1]; temp_v1 = temp_v0->screenStartX; temp_t0 = temp_v0->screenStartY; temp_t3 = temp_v0->screenWidth / 2; @@ -8391,7 +8391,7 @@ void render_pause_grand_prix(MenuItem* arg0) { } void render_pause_battle(MenuItem* arg0) { - struct UnkStruct_800DC5EC* temp_v0; + ScreenContext* temp_v0; s16 temp_t0; s16 temp_v1; s32 temp_t3; @@ -8402,7 +8402,7 @@ void render_pause_battle(MenuItem* arg0) { s32 rightEdge; Unk_D_800E70A0* temp_s3; - temp_v0 = &D_8015F480[gIsGamePaused - 1]; + temp_v0 = &gScreenContexts[gIsGamePaused - 1]; temp_v1 = temp_v0->screenStartX; temp_t0 = temp_v0->screenStartY; temp_t3 = temp_v0->screenWidth / 2; @@ -8595,8 +8595,8 @@ void render_menu_item_end_course_option(MenuItem* arg0) { } else { print_text_mode_1( 0x69 - arg0->column, (0x96 + (0x14 * var_s1)), - CM_GetPropsCourseId( - gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]) + CM_GetPropsTrackId( + gCupCourseOrder[D_8018EE10[var_s1].trackIndex / 4][D_8018EE10[var_s1].trackIndex % 4]) ->Name, 0, 0.75f, 0.75f); } @@ -8670,7 +8670,7 @@ void func_800A6034(MenuItem* arg0) { text = CM_GetProps()->Name; //! @warning this used to be gCurrentCourseId % 4 // Hopefully this is equivallent. - set_text_color((s32) GetCourseIndex() % 4); + set_text_color((s32) GetTrackIndex() % 4); print_text1_center_mode_2(arg0->column + 0x41, arg0->row + 0xC3, text, 0, 0.65f, 0.85f); } } @@ -11423,15 +11423,15 @@ void func_800AC458(MenuItem* arg0) { if ((arg0->param2 + temp) < 0) { arg0->param2 += temp; - D_800DC5EC->screenStartX += temp; - D_800DC5F0->screenStartX -= temp; + gScreenOneCtx->screenStartX += temp; + gScreenTwoCtx->screenStartX -= temp; } else { arg0->param2 = 0; arg0->column = 0; arg0->state = 2; arg0->param1 = 0; - D_800DC5EC->screenStartX = 0x00F0; - D_800DC5F0->screenStartX = 0x0050; + gScreenOneCtx->screenStartX = 0x00F0; + gScreenTwoCtx->screenStartX = 0x0050; } break; case 2: @@ -11528,14 +11528,14 @@ void func_800AC458(MenuItem* arg0) { arg0->row = arg0->param2; if (arg0->param2 < 0xF0) { arg0->param2 += 0x10; - D_800DC5EC->screenStartY += 0x10; - D_800DC5F0->screenStartY -= 0x10; + gScreenOneCtx->screenStartY += 0x10; + gScreenTwoCtx->screenStartY -= 0x10; } else { arg0->param2 = 0; arg0->state = 0x0000000D; arg0->param1 = 0; - D_800DC5EC->screenStartY = 0x012C; - D_800DC5F0->screenStartY = -0x003C; + gScreenOneCtx->screenStartY = 0x012C; + gScreenTwoCtx->screenStartY = -0x003C; D_8015F894 = 4; func_800CA330(0x19U); } @@ -11831,8 +11831,8 @@ void func_800AD2E8(MenuItem* arg0) { } if ((arg0->param2 + var_a1) < 0) { arg0->param2 += var_a1; - D_800DC5EC->screenStartX += var_a1; - D_800DC5F0->screenStartX -= var_a1; + gScreenOneCtx->screenStartX += var_a1; + gScreenTwoCtx->screenStartX -= var_a1; } else { arg0->param2 = 0; arg0->column = 0; @@ -11840,8 +11840,8 @@ void func_800AD2E8(MenuItem* arg0) { if ((arg0->state == 9) && (gPostTimeTrialReplayCannotSave == 1)) { arg0->state--; } - D_800DC5EC->screenStartX = 0x00F0; - D_800DC5F0->screenStartX = 0x0050; + gScreenOneCtx->screenStartX = 0x00F0; + gScreenTwoCtx->screenStartX = 0x0050; } break; case 5: @@ -12110,8 +12110,8 @@ void func_800AD2E8(MenuItem* arg0) { arg0->row = arg0->param2; if (arg0->param2 < 0xF0) { arg0->param2 += 0x10; - D_800DC5EC->screenStartY += 0x10; - D_800DC5F0->screenStartY -= 0x10; + gScreenOneCtx->screenStartY += 0x10; + gScreenTwoCtx->screenStartY -= 0x10; return; } switch (arg0->param1) { @@ -12137,8 +12137,8 @@ void func_800AD2E8(MenuItem* arg0) { } arg0->param2 = 0; arg0->state = 0x0000001F; - D_800DC5EC->screenStartY = 0x012C; - D_800DC5F0->screenStartY = -0x003C; + gScreenOneCtx->screenStartY = 0x012C; + gScreenTwoCtx->screenStartY = -0x003C; D_8015F894 = 4; func_800CA330(0x19U); break; diff --git a/src/menu_items.h b/src/menu_items.h index d6f7b7e60..4bf5bcc0b 100644 --- a/src/menu_items.h +++ b/src/menu_items.h @@ -9,8 +9,6 @@ extern "C" { #endif -extern u32 _course_mario_raceway_dl_mio0SegmentRomStart[]; - /* File specific types */ /* @@ -19,7 +17,7 @@ Known `types` for `MenuItem` 0x54: "Flower Cup" box on the cup selection screen 0x55: "Star Cup" box on the cup selection screen 0x56: "Special Cup" box on the cup selection screen -0x5E: A box of static over the course images as the cup selection screen loads in. +0x5E: A box of static over the track previews as the cup selection screen loads in. It is near unnoticeable though as in practice it doesn't last long enough to be seen. Try locking the word at `8018DC80` to see something like 0x20 just before confirming character selection to make it last longer See `func_80096CD8` for the actual drawing of the static @@ -37,7 +35,7 @@ typedef struct { // These seem to be generic space available for use by the struct, no 1 purpose for any given member /* 0x16 */ s16 unk16; // Potentially unused /* 0x18 */ s32 D_8018DEE0_index; // Index in D_8018DEE0, an array of some other struct type - /* 0x1C */ s32 param1; // Multi use. Sometimes cup selection, sometimes course index. + /* 0x1C */ s32 param1; // Multi use. Sometimes cup selection, sometimes track index. /* 0x20 */ s32 param2; // Multi use, hard to tell what for though. Sometimes a random number, sometimes GP points /* 0x24 */ f32 paramf; // Multi use, x scaling for some things, rotation multiplier for the question box in some // menus, probably some other things diff --git a/src/menus.c b/src/menus.c index 68e3b8c33..055503443 100644 --- a/src/menus.c +++ b/src/menus.c @@ -46,11 +46,11 @@ s8 gTimeTrialsResultCursorSelection; // 5 options indexed (5-9), gets set when s // Ghost) s8 gBattleResultCursorSelection; // 4 options indexed (10-13), gets set when selecting an option s8 gTimeTrialDataCourseIndex; -s8 gCourseRecordsMenuSelection; // Used for selecting an option in course record data +s8 gCourseRecordsMenuSelection; // Used for selecting an option in track record data s8 gCourseRecordsSubMenuSelection; // Used for erase records and ghosts (Quit - Erase) s8 gDebugGotoScene; bool gGhostPlayerInit; -bool gCourseMapInit; +bool gTrackMapInit; s32 gMenuTimingCounter; s32 gMenuDelayTimer; s8 gDemoUseController; // Sets true alongside gDemoMode, controller related @@ -133,15 +133,15 @@ const s8 sCharacterGridOrder[] = { const s16 gCupCourseOrder[5][4] = { // mushroom cup - { COURSE_LUIGI_RACEWAY, COURSE_MOO_MOO_FARM, COURSE_KOOPA_BEACH, COURSE_KALIMARI_DESERT }, + { TRACK_LUIGI_RACEWAY, TRACK_MOO_MOO_FARM, TRACK_KOOPA_BEACH, TRACK_KALIMARI_DESERT }, // flower cup - { COURSE_TOADS_TURNPIKE, COURSE_FRAPPE_SNOWLAND, COURSE_CHOCO_MOUNTAIN, COURSE_MARIO_RACEWAY }, + { TRACK_TOADS_TURNPIKE, TRACK_FRAPPE_SNOWLAND, TRACK_CHOCO_MOUNTAIN, TRACK_MARIO_RACEWAY }, // star cup - { COURSE_WARIO_STADIUM, COURSE_SHERBET_LAND, COURSE_ROYAL_RACEWAY, COURSE_BOWSER_CASTLE }, + { TRACK_WARIO_STADIUM, TRACK_SHERBET_LAND, TRACK_ROYAL_RACEWAY, TRACK_BOWSER_CASTLE }, // special cup - { COURSE_DK_JUNGLE, COURSE_YOSHI_VALLEY, COURSE_BANSHEE_BOARDWALK, COURSE_RAINBOW_ROAD }, + { TRACK_DK_JUNGLE, TRACK_YOSHI_VALLEY, TRACK_BANSHEE_BOARDWALK, TRACK_RAINBOW_ROAD }, // battle mode - { COURSE_BIG_DONUT, COURSE_BLOCK_FORT, COURSE_DOUBLE_DECK, COURSE_SKYSCRAPER }, + { TRACK_BIG_DONUT, TRACK_BLOCK_FORT, TRACK_DOUBLE_DECK, TRACK_SKYSCRAPER }, }; const s8 unref_800F2BDC[4] = { 1, 0, 0, 0 }; @@ -463,7 +463,7 @@ void options_menu_act(struct Controller* controller, u16 controllerIdx) { } if (btnAndStick & A_BUTTON) { sp38->param2 = gSubMenuSelection - SUB_MENU_COPY_PAK_FROM_GHOST_MIN; - if (sp30[sp38->param2].courseIndex == D_8018EE10[PLAYER_TWO].courseIndex && + if (sp30[sp38->param2].trackIndex == D_8018EE10[PLAYER_TWO].trackIndex && D_8018EE10[PLAYER_TWO].ghostDataSaved) { gSubMenuSelection = SUB_MENU_COPY_PAK_TO_GHOST2_2P; } else { @@ -476,8 +476,8 @@ void options_menu_act(struct Controller* controller, u16 controllerIdx) { case SUB_MENU_COPY_PAK_TO_GHOST1_2P: case SUB_MENU_COPY_PAK_TO_GHOST2_2P: { // bit of a fake match, but if it works it works? - if ((sp30[sp38->param2].courseIndex != - ((0, (D_8018EE10 + (gSubMenuSelection - SUB_MENU_COPY_PAK_TO_GHOST_MIN))->courseIndex))) || + if ((sp30[sp38->param2].trackIndex != + ((0, (D_8018EE10 + (gSubMenuSelection - SUB_MENU_COPY_PAK_TO_GHOST_MIN))->trackIndex))) || ((D_8018EE10 + (gSubMenuSelection - SUB_MENU_COPY_PAK_TO_GHOST_MIN))->ghostDataSaved == 0)) { if ((btnAndStick & D_JPAD) && (gSubMenuSelection < SUB_MENU_COPY_PAK_TO_GHOST_MAX)) { gSubMenuSelection += 1; @@ -593,7 +593,7 @@ void options_menu_act(struct Controller* controller, u16 controllerIdx) { return; } gSubMenuSelection = SUB_MENU_COPY_PAK_COMPLETED; - D_8018EE10[sp38->param1].courseIndex = (sp30 + sp38->param2)->courseIndex; + D_8018EE10[sp38->param1].trackIndex = (sp30 + sp38->param2)->trackIndex; func_800B6088(sp38->param1); break; } @@ -670,7 +670,7 @@ void data_menu_act(struct Controller* controller, UNUSED u16 controllerIdx) { play_sound2(SOUND_MENU_GO_BACK); return; } - // If A pressed, go to selected course's records + // If A pressed, go to selected track's records if ((btnAndStick & A_BUTTON) != 0) { gCourseRecordsMenuSelection = COURSE_RECORDS_MENU_RETURN_MENU; func_8009E1C0(); @@ -687,7 +687,7 @@ void data_menu_act(struct Controller* controller, UNUSED u16 controllerIdx) { } /** - * Navigation of the course records data menu + * Navigation of the track records data menu */ void course_data_menu_act(struct Controller* controller, UNUSED u16 controllerIdx) { u16 btnAndStick; // sp2E @@ -1054,9 +1054,9 @@ void splash_menu_act(struct Controller* controller, u16 controllerIdx) { case DEBUG_MENU_COURSE: { if (btnAndStick & R_JPAD) { play_sound2(SOUND_MENU_CURSOR_MOVE); - NextCourse(); - gCurrentCourseId = GetCourseIndex(); - // if (gCurrentCourseId < (NUM_COURSES - 2)) { + NextTrack(); + gCurrentCourseId = GetTrackIndex(); + // if (gCurrentCourseId < (NUM_TRACKS - 2)) { // gCurrentCourseId += 1; // } else { // gCurrentCourseId = 0; @@ -1064,12 +1064,12 @@ void splash_menu_act(struct Controller* controller, u16 controllerIdx) { } if (btnAndStick & L_JPAD) { play_sound2(SOUND_MENU_CURSOR_MOVE); - PreviousCourse(); - gCurrentCourseId = GetCourseIndex(); + PreviousTrack(); + gCurrentCourseId = GetTrackIndex(); // if (gCurrentCourseId > 0) { // gCurrentCourseId -= 1; // } else { - // gCurrentCourseId = (NUM_COURSES - 2); + // gCurrentCourseId = (NUM_TRACKS - 2); // } } if (btnAndStick & U_JPAD) { @@ -1737,7 +1737,7 @@ u32 WorldPreviousCup(void); u32 GetCupIndex(void); /** - * Navigation of the map select course menu screen + * Navigation of the map select track menu screen */ void course_select_menu_act(struct Controller* controller, u16 controllerIdx) { u16 btnAndStick = (controller->buttonPressed | controller->stickPressed); @@ -1764,7 +1764,7 @@ void course_select_menu_act(struct Controller* controller, u16 controllerIdx) { D_800DC540 = GetCupIndex(); gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; - SetCourseFromCup(); + SetTrackFromCup(); if ((btnAndStick & B_BUTTON) != 0) { func_8009E208(); play_sound2(SOUND_MENU_GO_BACK); @@ -1775,10 +1775,9 @@ void course_select_menu_act(struct Controller* controller, u16 controllerIdx) { } else { gSubMenuSelection = SUB_MENU_MAP_SELECT_OK; play_sound2(SOUND_MENU_SELECT); - //! @todo SetCourse() to course one; - SetCupCursorPosition(COURSE_ONE); - SetCourseFromCup(); - gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE]; + SetCupCursorPosition(TRACK_ONE); + SetTrackFromCup(); + gCurrentCourseId = gCupCourseOrder[gCupSelection][TRACK_ONE]; gMenuTimingCounter = 0; } reset_cycle_flash_menu(); @@ -1792,7 +1791,7 @@ void course_select_menu_act(struct Controller* controller, u16 controllerIdx) { reset_cycle_flash_menu(); play_sound2(SOUND_MENU_CURSOR_MOVE); } - if (((btnAndStick & U_JPAD) != 0) && (GetCupCursorPosition() > COURSE_ONE)) { + if (((btnAndStick & U_JPAD) != 0) && (GetCupCursorPosition() > TRACK_ONE)) { --gCourseIndexInCup; SetCupCursorPosition(GetCupCursorPosition() - 1); reset_cycle_flash_menu(); @@ -1800,7 +1799,7 @@ void course_select_menu_act(struct Controller* controller, u16 controllerIdx) { } gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; - SetCourseFromCup(); + SetTrackFromCup(); if ((btnAndStick & B_BUTTON) != 0) { if (gSubMenuSelection == SUB_MENU_MAP_SELECT_COURSE) { gSubMenuSelection = SUB_MENU_MAP_SELECT_CUP; @@ -1910,14 +1909,14 @@ void load_menu_states(s32 menuSelection) { gScreenModeListIndex = sScreenModeIdxFromPlayerMode[gPlayerCount - 1]; func_800CA008(0, 0); play_sequence(MUSIC_SEQ_TITLE_SCREEN); - gCourseMapInit = 0; + gTrackMapInit = 0; break; } case 1: case MAIN_MENU: { gEnableDebugMode = CVarGetInteger("gEnableDebugMode", 0); set_mirror_mode(0); - gCourseMapInit = 0; + gTrackMapInit = 0; func_800B5F30(); func_8000F0E0(); diff --git a/src/menus.h b/src/menus.h index 7a64c3009..da71b22cc 100644 --- a/src/menus.h +++ b/src/menus.h @@ -99,7 +99,7 @@ enum MainMenuSelectionType { MAIN_MENU_MODE_SUB_SELECT, // CC Selection and T.Trials options (Begin, Data) MAIN_MENU_OK_SELECT, // OK option after selecting a submode MAIN_MENU_OK_SELECT_GO_BACK, // OK option after going back from player select - MAIN_MENU_MODE_SUB_SELECT_GO_BACK // Used in T.Trials after going back to Data option from course data + MAIN_MENU_MODE_SUB_SELECT_GO_BACK // Used in T.Trials after going back to Data option from track data }; /** @@ -244,7 +244,7 @@ extern s8 gCourseRecordsMenuSelection; extern s8 gCourseRecordsSubMenuSelection; extern s8 gDebugGotoScene; extern bool gGhostPlayerInit; -extern bool gCourseMapInit; +extern bool gTrackMapInit; extern s32 gMenuTimingCounter; extern s32 gMenuDelayTimer; extern s8 gDemoUseController; diff --git a/src/networking/networking.c b/src/networking/networking.c deleted file mode 100644 index 54f5fd585..000000000 --- a/src/networking/networking.c +++ /dev/null @@ -1,229 +0,0 @@ -#include -#include -#include -#include -#include - -#include "networking.h" -#include "main.h" - -#define BUFFER_SIZE 10240 - -NetworkClient dummyClient; // For use before server sends the real client -NetworkClient* localClient = NULL; -NetworkClient clients[NETWORK_MAX_PLAYERS]; - -Network gNetwork = { - .enabled = false, - .tcpSocket = NULL, - .address = { 0, 64010 }, - .localPlayer = &gPlayerOne, - .isConnected = false, - .loaded = false, // local player loaded? - .playersLoaded = false, - .gameStarted = false, -}; - -// Global variables - -SDL_Thread* sNetworkThread; -bool threadStarted = false; - -int isNetworkingThreadEnabled = true; -void (*remoteConnectedHandler)(void); - -void ConnectToServer(char* ip, uint16_t port, char* username) { - if (!threadStarted) { - threadStarted = true; - networking_init(ip, port); - - SDL_Delay(20); - - localClient = &dummyClient; // Temporary until server sends the real data - set_username(username); - send_str_packet(gNetwork.tcpSocket, PACKET_JOIN, localClient->username); - send_int_packet(gNetwork.tcpSocket, PACKET_SET_CHARACTER, 2, sizeof(uint32_t)); - send_str_packet(gNetwork.tcpSocket, PACKET_MESSAGE, "a message"); - send_str_packet(gNetwork.tcpSocket, PACKET_MESSAGE, "another message"); - } -} - -void set_username(const char* username) { - // srand(time(NULL) + rand()); // Use a different seed for each call - // int random_number = rand() % 10000; // Generate a random number between 0 and 9999 - // snprintf(localClient->username, sizeof(localClient->username), "%s%d", username, random_number); - - strncpy(localClient->username, username, sizeof(localClient->username) - 1); - localClient->username[sizeof(localClient->username) - 1] = '\0'; // Ensure null-termination -} - -void networking_init(char* ip, uint16_t port) { - if (SDL_Init(0) == -1) { - fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); - exit(EXIT_FAILURE); - } - - if (SDLNet_Init() == -1) { - fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); - SDL_Quit(); - exit(EXIT_FAILURE); - } - - if (SDLNet_ResolveHost(&gNetwork.address, ip, port) == -1) { - printf("[GameInteractor] SDLNet_ResolveHost: %s\n", SDLNet_GetError()); - } - - // Ensure no thread is already running - if (sNetworkThread != NULL) { - SDL_WaitThread(sNetworkThread, NULL); - sNetworkThread = NULL; - } - sNetworkThread = SDL_CreateThread(networking_loop, "NetworkingThread", NULL); - - if (sNetworkThread == NULL) { - printf("SDL_CreateThread failed: %s\n", SDL_GetError()); - exit(EXIT_FAILURE); - } - - // sNetworkThread = std::thread(&GameInteractor::ReceiveFromServer, this); -} - -int networking_loop(void* data) { - while (isNetworkingThreadEnabled) { - while (!gNetwork.isConnected && isNetworkingThreadEnabled) { // && isRemoteInteractorEnabled) { - printf("[SpaghettiOnline] Attempting to make connection to server...\n"); - gNetwork.tcpSocket = SDLNet_TCP_Open(&gNetwork.address); - - if (gNetwork.tcpSocket) { - gNetwork.isConnected = true; - printf("[SpaghettiOnline] Connection to server established!\n"); - - if (remoteConnectedHandler) { - remoteConnectedHandler(); - } - break; - } - } - - SDLNet_SocketSet socketSet = SDLNet_AllocSocketSet(1); - if (gNetwork.tcpSocket) { - SDLNet_TCP_AddSocket(socketSet, gNetwork.tcpSocket); - } - - // Listen to socket messages - while (gNetwork.isConnected && gNetwork.tcpSocket && - isNetworkingThreadEnabled) { // && isRemoteInteractorEnabled) { - // we check first if socket has data, to not block in the TCP_Recv - int socketsReady = SDLNet_CheckSockets(socketSet, 0); - - if (socketsReady == -1) { - printf("[SpaghettiOnline] SDLNet_CheckSockets: %s\n", SDLNet_GetError()); - break; - } - - if (socketsReady == 0) { - continue; - } - - char remoteDataReceived[512]; - memset(remoteDataReceived, 0, sizeof(remoteDataReceived)); - int len = SDLNet_TCP_Recv(gNetwork.tcpSocket, &remoteDataReceived, sizeof(remoteDataReceived)); - if (!len || !gNetwork.tcpSocket || len == -1) { - printf("[SpaghettiOnline] SDLNet_TCP_Recv: %s\n", SDLNet_GetError()); - break; - } - - handleReceivedData(remoteDataReceived, len); // HandleRemoteData(remoteDataReceived); - - // receivedData.append(remoteDataReceived, len); - - // // Process all complete packets - // size_t delimiterPos = receivedData.find('\0'); - // while (delimiterPos != std::string::npos) { - // // Extract the complete packet until the delimiter - // std::string packet = receivedData.substr(0, delimiterPos); - // // Remove the packet (including the delimiter) from the received data - // receivedData.erase(0, delimiterPos + 1); - // HandleRemoteJson(packet); - // // Find the next delimiter - // delimiterPos = receivedData.find('\0'); - // } - } - - if (gNetwork.isConnected) { - // SDLNet_TCP_Close(gNetwork.tcpSocket); - gNetwork.isConnected = false; - // if (networking_cleanup) { - networking_cleanup(socketSet); - //} - printf("[SpaghettiOnline] Ending receiving thread...\n"); - } - } - return 0; -} - -void networking_ready_up(bool value) { - send_int_packet(gNetwork.tcpSocket, PACKET_READY_UP, value, sizeof(int)); -} - -void handleReceivedData(const char* buffer, size_t bufSize) { - if (bufSize < 4) { - printf("Malformed packet received: too short\n"); - return; - } - - uint8_t type = (uint8_t) buffer[0]; - uint16_t length = (uint16_t) buffer[1] | ((uint16_t) buffer[2] << 8); - - // Validate buffer size - if (bufSize < 3 + length) { - printf("Malformed packet received: declared length exceeds buffer size\n"); - return; - } - - // Point to the data - const char* data = buffer + 3; - - switch (type) { - case PACKET_JOIN: - handleJoinPacket(data); - break; - case PACKET_LEAVE: - handleLeavePacket(data); - break; - case PACKET_MESSAGE: - handleMessagePacket(data); - break; - case PACKET_LOADED: - handle_start_game(); // handle_start_game(data); - break; - case PACKET_PLAYER: - replicate_player(data); - break; - case PACKET_SET_COURSE: - set_course(data); - break; - case PACKET_PLAYER_ASSIGN_SLOTS: - printf("\n\n\nASSIGN SLOT\n\n\n"); - assign_player_slots(data); - break; - case PACKET_START_SESSION: - networking_start_session(data); - break; - default: - printf("Unknown packet type received: %d\n", type); - break; - } -} - -void networking_cleanup(SDLNet_SocketSet socketSet) { - send_str_packet(gNetwork.tcpSocket, PACKET_LEAVE, localClient->username); - SDLNet_TCP_Close(gNetwork.tcpSocket); - SDLNet_FreeSocketSet(socketSet); - SDLNet_Quit(); - SDL_Quit; -} - -void networking_disconnect(void) { - networking_cleanup(gNetwork.tcpSocket); -} diff --git a/src/networking/networking.h b/src/networking/networking.h deleted file mode 100644 index 74c1a2301..000000000 --- a/src/networking/networking.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef NETWORKING_H -#define NETWORKING_H - -#include -#include -#include - -#define NETWORK_MAX_PLAYERS 8 -#define NETWORK_USERNAME_LENGTH 32 - -enum { - PACKET_JOIN, - PACKET_LEAVE, - PACKET_MESSAGE, - PACKET_LOADED, - PACKET_READY_UP, - PACKET_SET_CHARACTER, - PACKET_COURSE_VOTE, - PACKET_SET_COURSE, - PACKET_PLAYER_ASSIGN_SLOTS, - PACKET_START_SESSION, - PACKET_PLAYER, - PACKET_ACTOR, - PACKET_OBJECT -}; - -typedef struct { - bool enabled; // Enables networking - TCPsocket tcpSocket; - IPaddress address; - Player* localPlayer; - bool isConnected; - bool loaded; - bool playersLoaded; // Are all players loaded? - bool gameStarted; - uint32_t cupVote; - uint32_t character; -} Network; - -extern Network gNetwork; - -typedef struct { - char username[NETWORK_USERNAME_LENGTH]; - s32 slot; - s32 isPlayer; - s32 isAI; - s32 character; - s32 hasAuthority; -} NetworkClient; - -extern NetworkClient dummyClient; -extern NetworkClient* localClient; -extern NetworkClient clients[]; - -/* Main Networking */ -void ConnectToServer(char* ip, uint16_t port, char* username); -void networking_init(char* ip, uint16_t port); -void networking_update(void); -void networking_ready_up(bool); -void networking_cleanup(SDLNet_SocketSet); -int networking_loop(void*); -void handleReceivedData(const char*, size_t); -void set_username(const char* username); -void network_character_vote(uint32_t course); -void network_cup_vote(uint32_t course); -void networking_disconnect(void); - -/* Start Game */ -void spawn_network_players(f32*, f32*, f32); -void network_all_players_loaded(void); -void set_course(const char* data); -void networking_start_session(const char* data); - -/* Replication */ -void replicate_player(const char* data); -void assign_player_slots(const char* data); - -/* Packets */ -void send_int_packet(TCPsocket socket, uint8_t type, uint32_t payload, uint16_t size); -void handleJoinPacket(const char* data); -void handleLeavePacket(const char* data); -void handleMessagePacket(const char* data); - -void handle_start_game(void); -void send_str_packet(TCPsocket, uint8_t, const char*); - -#endif // NETWORKING_H diff --git a/src/networking/packets.c b/src/networking/packets.c deleted file mode 100644 index cc7ef0060..000000000 --- a/src/networking/packets.c +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include -#include "networking.h" -#include "code_800029B0.h" - -void handleJoinPacket(const char* data) { - printf("Join packet received: %s\n", data); - // Handle join logic here -} - -void handleLeavePacket(const char* data) { - printf("Leave packet received: %s\n", data); - // Handle leave logic here -} - -void handleMessagePacket(const char* data) { - printf("%s\n", data); - // Handle message logic here -} - -void handleMessageNumberPacket(const char* data) { - printf("%s\n", data); - // Handle message logic here -} - -void handle_start_game() { - gNetwork.playersLoaded = true; - gIsGamePaused = false; -} - -#define BUFFER_SIZE 1024 -void send_data_packet(TCPsocket socket, int type, const uint8_t* payload, size_t payload_size) { - // uint8_t buffer[BUFFER_SIZE]; - // size_t packet_size = sizeof(type) + payload_size; - // if (packet_size > BUFFER_SIZE) { - // fprintf(stderr, "Packet size exceeds buffer size\n"); - // return; - // } - - // memcpy(buffer, &type, sizeof(type)); - // memcpy(buffer + sizeof(type), payload, payload_size); - - // int len = SDLNet_TCP_Send(socket, buffer, packet_size); - // if (len < packet_size) { - // fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError()); - // } -} - -void send_str_packet(TCPsocket socket, uint8_t type, const char* payload) { - char buffer[BUFFER_SIZE]; - int offset = 0; - - // Copy the integer type into the buffer - buffer[offset] = type; - offset += sizeof(uint8_t); - - // Copy the payload into the buffer - int size = strlen(payload); - if (offset + size >= BUFFER_SIZE) { - fprintf(stderr, "Payload is too large to fit in buffer\n"); - return; - } - - *(uint16_t*) (buffer + offset) = size; - offset += sizeof(uint16_t); - - memcpy(buffer + offset, payload, size); - offset += size; - - // Send the buffer through the socket - int len = SDLNet_TCP_Send(socket, buffer, offset); - if (len < offset) { - fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError()); - } -} - -// void send_packet(TCPsocket socket, uint8_t type, const char *payload, uint16_t size) { -// // Ensure the buffer is large enough to hold the type, colon, and payload -// if (sizeof(int) + 1 + size > BUFFER_SIZE) { -// fprintf(stderr, "Sending data too big for the buffer\n"); -// return; -// } - -// char buffer[BUFFER_SIZE]; -// int offset = 0; - -// // Copy the type into the buffer -// buffer[offset] = type; -// offset += sizeof(uint8_t); - -// // Copy the payload into the buffer -// memcpy(buffer + offset, payload, size); -// offset += size; - -// // Send the buffer through the socket -// int len = SDLNet_TCP_Send(socket, buffer, offset); -// if (len < offset) { -// fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError()); -// } -// } - -void send_int_packet(TCPsocket socket, uint8_t type, uint32_t payload, uint16_t size) { - // Ensure the buffer is large enough to hold the type, colon, and payload - if (sizeof(int) + 1 + size > BUFFER_SIZE) { - fprintf(stderr, "Sending data too big for the buffer\n"); - return; - } - - char buffer[BUFFER_SIZE]; - int offset = 0; - - // Write the packet type into the buffer - buffer[offset] = type; - offset += sizeof(uint8_t); - - // Write the data size into the buffer - *(uint16_t*) (buffer + offset) = size; - offset += sizeof(uint16_t); - - // Write the payload into the buffer - *(uint32_t*) (buffer + offset) = payload; - offset += sizeof(uint32_t); - - // Send the buffer through the socket - int len = SDLNet_TCP_Send(socket, buffer, offset); - if (len < offset) { - fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError()); - } -} diff --git a/src/networking/replication.c b/src/networking/replication.c deleted file mode 100644 index 38e691872..000000000 --- a/src/networking/replication.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "networking.h" -#include "main.h" - -void replicate_player(const char* data) { - // gPlayerOne->pos[0]; - // send_data_packet(client, PACKET_PLAYER, &gPlayerOne, sizeof(Player)); -} - -void ActorReplication() { -} - -void ObjectReplication() { -} diff --git a/src/networking/start_game.c b/src/networking/start_game.c deleted file mode 100644 index b5ab497df..000000000 --- a/src/networking/start_game.c +++ /dev/null @@ -1,242 +0,0 @@ -#include -#include -#include "main.h" -#include "spawn_players.h" -#include "networking.h" -#include "code_800029B0.h" -#include "menus.h" -#include "audio/external.h" -#include "menu_items.h" -#include "port/Game.h" - -// PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN -// PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU - -void assign_player_control_types(void) { - printf("Assign player control types\n"); - for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) { - s32 playerIndex = clients[i].slot; - - gPlayers[playerIndex].nCharacter = clients[i].character; - gPlayers[playerIndex].nStartingRank = clients[i].slot; - - // printf("CHAR %d\n", clients[i].character); - // printf("CHAR2 %d\n", gPlayers[playerIndex].nCharacter); - - if (clients[i].isAI) { - gPlayers[playerIndex].nControlFlags = 0; - } else if (clients[i].hasAuthority) { - // printf("PLAYER SLOT %d, INDEX %d\n", clients[i].slot, clients[i].character); - - // Set player to the camera - // cameras[0].playerId = clients[i].slot; - // D_800DC5EC->player = &gPlayers[clients[i].slot]; - // printf("PLAYER SLOT %d, INDEX %d\n", clients[i].slot, clients[i].character); - gPlayers[playerIndex].nControlFlags = - PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE; // Requires server replication to move. - } - - // printf("Player Slot %d, character %d\n", playerIndex, clients[i].character); - } - - // Get and Set player - // gNetwork.localPlayer = &gPlayers[i]; -} - -void network_character_vote(uint32_t course) { - send_int_packet(gNetwork.tcpSocket, PACKET_SET_CHARACTER, course, sizeof(uint32_t)); -} - -void network_cup_vote(uint32_t course) { - send_int_packet(gNetwork.tcpSocket, PACKET_COURSE_VOTE, course, sizeof(uint32_t)); -} - -void set_course(const char* data) { - if (data != NULL) { - // SetCup(data[0]); - gCupSelection = data[0]; - // gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE]; - //! @todo SetCourse(); - } -} - -s32 testa = 0; - -void assign_player_slots(const char* data) { - if (testa) { - return; - } - testa = 1; - int offset = 0; - printf("Assign Player Slots\n"); - for (size_t i = 0; i < NETWORK_MAX_PLAYERS; ++i) { - // Read username - - int usernameLength = *(int*) (data + offset); - offset += sizeof(int); - - memcpy(clients[i].username, data + offset, usernameLength); - offset += usernameLength; - - // Read slot - clients[i].slot = *(int*) (data + offset); - offset += sizeof(int); - - // Read isPlayer - clients[i].isPlayer = *(int*) (data + offset); - offset += sizeof(int); - - // Read IsAI - clients[i].isAI = *(int*) (data + offset); - offset += sizeof(int); - - // Read character - clients[i].character = *(int*) (data + offset); - offset += sizeof(int); - - // gCharacterSelections[i] = clients[i].character; - - // Read hasAuthority - clients[i].hasAuthority = *(int*) (data + offset); - - if (clients[i].hasAuthority) { - localClient = &clients[i]; - gPlayers[clients[i].slot].nHasAuthority = true; - printf("You have been assigned slot %d\n", clients[i].slot + 1); - } - - offset += sizeof(int); - } -} - -s32 sessionBool = 0; - -// Duplicate of setup_race -void networking_start_session(const char* data) { - if (sessionBool) { - return; - } - sessionBool = 1; - printf("Start session\n"); - // gIsInQuitToMenuTransition = 1; - // gQuitToMenuTransitionCounter = 5; - gGotoMode = RACING; // Enter race state - gGamestateNext = RACING; - gCCSelection = CC_150; - // gCupSelection = FLOWER_CUP; - gCourseIndexInCup = COURSE_ONE; - gScreenModeSelection = SCREEN_MODE_1P; - gModeSelection = GRAND_PRIX; - gPlayerCount = 1; - // gCurrentCourseId = 8; - gDebugMenuSelection = DEBUG_MENU_OPTION_SELECTED; - func_8009E1C0(); - func_800CA330(0x19); -} - -// Wait for all players to load -void network_all_players_loaded() { - if (gNetwork.gameStarted) { - return; - } - if (!gNetwork.loaded) { - gNetwork.loaded = true; - send_int_packet(gNetwork.tcpSocket, PACKET_LOADED, true, sizeof(int)); - } - if (gNetwork.playersLoaded) { - gNetwork.gameStarted = true; - gIsGamePaused = false; - } else { - gIsGamePaused = true; - } -} - -s32 currentNetworkPlayers = 0; - -void spawn_network_players(f32* arg0, f32* arg1, f32 arg2) { - if (currentNetworkPlayers) { - return; - } - currentNetworkPlayers = 1; - - assign_player_control_types(); - - u32 posX[] = { 0, 1, 3, 2, 5, 4, 7, 6 }; - u32 posZ[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; - - u32 pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; - - printf("----- Spawn Players ------\n"); - // for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) { - // s32 playerIndex = clients[i].slot; - // printf("Spawned %s, in slot %d as char %d with flags 0x%X", clients[i].username, clients[i].slot, - // gPlayers[playerIndex].nCharacter, gPlayers[playerIndex].nControlFlags); - - // if (gPlayers[playerIndex].nCharacter == -1) { - // printf("\n\nCORRUPT PLAYER DATA\n\n"); - // } else { - // printf(" X: %d, Z: %d\n", arg0[D_80165270[posX[playerIndex]]], arg1[D_80165270[posZ[playerIndex]]] + 250.0f) ; - // spawn_player(&gPlayers[clients[i].slot], clients[i].slot, arg0[D_80165270[posX[clients[i].slot]]], - // arg1[D_80165270[posZ[clients[i].slot]]] + 250.0f, arg2, 32768.0f, clients[i].character, - // gPlayers[playerIndex].nControlFlags); - // } - // This index isn't right like this ^ - - // if localClient.Slots - - for (size_t i = 0; i < 8; i++) { - printf("a %d, %d\n", clients[i].slot, clients[i].character); - } - - for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) { - if (clients[i].hasAuthority) { - spawn_player(&gPlayers[0], i, arg0[clients[i].slot], arg1[clients[i].slot] + 250.0f, arg2, 32768.0f, - clients[i].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - } - } - - for (size_t i = 0; i < NETWORK_MAX_PLAYERS - 1; i++) { - if (!clients[i].hasAuthority) { - spawn_player(&gPlayers[clients[i].slot], i, arg0[clients[i].slot], arg1[clients[i].slot] + 250.0f, arg2, - 32768.0f, clients[i].character, - PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - } - } - - // spawn_player(&gPlayers[clients[0].slot], 0, arg0[clients[0].slot], arg1[clients[0].slot] + 250.0f, arg2, - // 32768.0f, clients[0].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - // spawn_player(&gPlayers[clients[1].slot], 1, arg0[clients[1].slot], arg1[clients[1].slot] + 250.0f, arg2, - // 32768.0f, clients[1].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[2].slot], 2, arg0[clients[2].slot], arg1[clients[2].slot] + 250.0f, arg2, - // 32768.0f, clients[2].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[3].slot], 3, arg0[clients[3].slot], arg1[clients[3].slot] + 250.0f, arg2, - // 32768.0f, clients[3].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[4].slot], 4, arg0[clients[4].slot], arg1[clients[4].slot] + 250.0f, arg2, - // 32768.0f, clients[4].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[5].slot], 5, arg0[clients[5].slot], arg1[clients[5].slot] + 250.0f, arg2, - // 32768.0f, clients[5].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[6].slot], 6, arg0[clients[6].slot], arg1[clients[6].slot] + 250.0f, arg2, - // 32768.0f, clients[6].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[7].slot], 7, arg0[clients[7].slot], arg1[clients[7].slot] + 250.0f, arg2, - // 32768.0f, clients[7].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - - //} - printf("--------------------------\n"); - // gPlayers[i].nControlFlags - // spawn_player(&gPlayers[clients[0].slot], clients[0].slot, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, - // arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - // spawn_player(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - // spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, - // arg2, 32768.0f, chooseCPUPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); -} diff --git a/src/player_controller.c b/src/player_controller.c index a431311b6..83a46b2a7 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -245,256 +245,8 @@ void func_80027EDC(Player* player, s8 playerId) { ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { CM_WhatDoesThisDo(player, playerId); - - // switch (gCurrentCourseId) { - // // case COURSE_MARIO_RACEWAY: - // // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x19B) && - // // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1B9)) { - // // if (D_80165300[playerId] != 1) { - // // func_800CA288(playerId, 0x55); - // // } - // // D_80165300[playerId] = 1; - // // } else { - // // if (D_80165300[playerId] != 0) { - // // func_800CA2B8(playerId); - // // D_80165300[playerId] = 0; - // // } - // // } - // break; - // case COURSE_CHOCO_MOUNTAIN: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0xA0) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0xB4)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_BOWSER_CASTLE: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x29) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1D2)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x41); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_BANSHEE_BOARDWALK: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x180) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1E1)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x41); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_LUIGI_RACEWAY: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x145) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x18B)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_TOADS_TURNPIKE: - // if ((player->type & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x1e); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_SHERBET_LAND: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x11C) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x209)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA2B8(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_DK_JUNGLE: - // if ((((s16) gNearestPathPointByPlayerId[playerId] >= 0) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x65)) || - // (((s16) gNearestPathPointByPlayerId[playerId] >= 0x14A) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x21F))) { - // if (D_80165300[playerId] != 2) { - // func_800C8F80(playerId, 0x0170802D); - // } - // D_80165300[playerId] = 2; - // } else { - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x288) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x305)) { - // if (D_80165300[playerId] != 1) { - // func_800CA288(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // if (D_80165300[playerId] == 1) { - // func_800CA2B8(playerId); - // } - // if (D_80165300[playerId] == 2) { - // func_800C9018(playerId, SOUND_ARG_LOAD(0x01, 0x70, 0x80, 0x2D)); - // } - // D_80165300[playerId] = 0; - // } - // } - // } - // break; - // default: - // break; - // } } else { - CM_WhatDoesThisDoAI(player, playerId); - - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x19B) && - // // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1B9)) { - // // if (D_80165300[playerId] != 1) { - // // func_800CA2E4(playerId, 0x55); - // // } - // // D_80165300[playerId] = 1; - // // } else { - // // if (D_80165300[playerId] != 0) { - // // func_800CA30C(playerId); - // // D_80165300[playerId] = 0; - // // } - // // } - // break; - // case COURSE_CHOCO_MOUNTAIN: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0xA0) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0xB4)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_BOWSER_CASTLE: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x29) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1D2)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x41); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_BANSHEE_BOARDWALK: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x180) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x1E1)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x41); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_LUIGI_RACEWAY: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x145) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x18B)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_TOADS_TURNPIKE: - // if ((player->type & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x1E); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_SHERBET_LAND: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x11C) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x209)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // case COURSE_DK_JUNGLE: - // if (((s16) gNearestPathPointByPlayerId[playerId] >= 0x288) && - // ((s16) gNearestPathPointByPlayerId[playerId] < 0x305)) { - // if (D_80165300[playerId] != 1) { - // func_800CA2E4(playerId, 0x55); - // } - // D_80165300[playerId] = 1; - // } else { - // if (D_80165300[playerId] != 0) { - // func_800CA30C(playerId); - // D_80165300[playerId] = 0; - // } - // } - // break; - // default: - // break; - // } } } diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 9f0d6d3f9..ff476592e 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -734,28 +734,6 @@ extern "C" void Timer_SetValue(int32_t* address, int32_t value) { *address = value; } -// void Timer_CompleteTask(TimedEntry& task) { -// if (task.action != nullptr) { -// task.action(task.address, task.value); -// } -// task.active = false; -// } - -// extern "C" void Timer_Update() { - -// if(gTimerTasks.empty()) { -// return; -// } - -// const auto millis = Timer_GetCurrentMillis(); - -// for (auto& task : gTimerTasks) { -// if (task.active && millis >= task.duration) { -// Timer_CompleteTask(task); -// } -// } -// } - extern "C" float OTRGetAspectRatio() { return GetInterpreter()->mCurDimensions.aspect_ratio; } diff --git a/src/port/Game.cpp b/src/port/Game.cpp index 14aeee9ec..1a822712b 100644 --- a/src/port/Game.cpp +++ b/src/port/Game.cpp @@ -5,30 +5,30 @@ #include #include "engine/World.h" -#include "engine/courses/Course.h" -#include "engine/courses/MarioRaceway.h" -#include "engine/courses/ChocoMountain.h" -#include "engine/courses/BowsersCastle.h" -#include "engine/courses/BansheeBoardwalk.h" -#include "engine/courses/YoshiValley.h" -#include "engine/courses/FrappeSnowland.h" -#include "engine/courses/KoopaTroopaBeach.h" -#include "engine/courses/RoyalRaceway.h" -#include "engine/courses/LuigiRaceway.h" -#include "engine/courses/MooMooFarm.h" -#include "engine/courses/ToadsTurnpike.h" -#include "engine/courses/KalimariDesert.h" -#include "engine/courses/SherbetLand.h" -#include "engine/courses/RainbowRoad.h" -#include "engine/courses/WarioStadium.h" -#include "engine/courses/BlockFort.h" -#include "engine/courses/Skyscraper.h" -#include "engine/courses/DoubleDeck.h" -#include "engine/courses/DKJungle.h" -#include "engine/courses/BigDonut.h" -#include "engine/courses/TestCourse.h" +#include "engine/tracks/Track.h" +#include "engine/tracks/MarioRaceway.h" +#include "engine/tracks/ChocoMountain.h" +#include "engine/tracks/BowsersCastle.h" +#include "engine/tracks/BansheeBoardwalk.h" +#include "engine/tracks/YoshiValley.h" +#include "engine/tracks/FrappeSnowland.h" +#include "engine/tracks/KoopaTroopaBeach.h" +#include "engine/tracks/RoyalRaceway.h" +#include "engine/tracks/LuigiRaceway.h" +#include "engine/tracks/MooMooFarm.h" +#include "engine/tracks/ToadsTurnpike.h" +#include "engine/tracks/KalimariDesert.h" +#include "engine/tracks/SherbetLand.h" +#include "engine/tracks/RainbowRoad.h" +#include "engine/tracks/WarioStadium.h" +#include "engine/tracks/BlockFort.h" +#include "engine/tracks/Skyscraper.h" +#include "engine/tracks/DoubleDeck.h" +#include "engine/tracks/DKJungle.h" +#include "engine/tracks/BigDonut.h" +#include "engine/tracks/TestTrack.h" -#include "engine/courses/PodiumCeremony.h" +#include "engine/tracks/PodiumCeremony.h" #include "engine/GarbageCollector.h" @@ -62,6 +62,7 @@ extern "C" { #include "update_objects.h" #include "spawn_players.h" #include "src/enhancements/collision_viewer.h" +#include "code_800029B0.h" // #include "engine/wasm.h" } @@ -69,8 +70,6 @@ extern "C" void Graphics_PushFrame(Gfx* data) { GameEngine::ProcessGfxCommands(data); } -extern "C" void Timer_Update(); - // Create the world instance World gWorldInstance; @@ -92,33 +91,33 @@ Editor::Editor gEditor; s32 gTrophyIndex = NULL; void CustomEngineInit() { - /* Add all courses to the global course list */ - std::shared_ptr mario = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr choco = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr bowser = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr banshee = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr yoshi = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr frappe = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr koopa = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr royal = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr luigi = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr mooMoo = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr toads = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr kalimari = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr sherbet = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr rainbow = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr wario = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr block = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr skyscraper = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr doubleDeck = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr dkJungle = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr bigDonut = gWorldInstance.AddCourse(std::make_shared()); -// std::shared_ptr harbour = gWorldInstance.AddCourse(std::make_shared()); - std::shared_ptr testCourse = gWorldInstance.AddCourse(std::make_shared()); + /* Add all tracks to the global track list */ + std::shared_ptr mario = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr choco = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr bowser = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr banshee = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr yoshi = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr frappe = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr koopa = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr royal = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr luigi = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr mooMoo = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr toads = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr kalimari = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr sherbet = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr rainbow = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr wario = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr block = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr skyscraper = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr doubleDeck = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr dkJungle = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr bigDonut = gWorldInstance.AddTrack(std::make_shared()); +// std::shared_ptr harbour = gWorldInstance.AddTrack(std::make_shared()); + std::shared_ptr testTrack = gWorldInstance.AddTrack(std::make_shared()); gPodiumCeremony = std::make_unique(); - // Construct cups with vectors of Course* (non-owning references) + // Construct cups with vectors of Track* (non-owning references) gMushroomCup = new Cup("mk:mushroom_cup", "Mushroom Cup", { luigi, mooMoo, koopa, kalimari }); @@ -174,9 +173,9 @@ void HM_DrawIntro() { gMenuIntro.HM_DrawIntro(); } -// Set default course; mario raceway +// Set default track; mario raceway void SetMarioRaceway(void) { - SetCourseById(0); + SetTrackById(0); gWorldInstance.SetCurrentCup(gMushroomCup); gWorldInstance.GetCurrentCup()->CursorPosition = 3; gWorldInstance.CupIndex = 0; @@ -210,37 +209,37 @@ const char* GetCupName(void) { return gWorldInstance.GetCurrentCup()->Name; } -void LoadCourse() { +void LoadTrack() { gWorldInstance.GetRaceManager().Load(); } -// Unload can be call to frequently so even when if the course wasn't loaded before -void UnLoadCourse() { +// Unload can be call to frequently so even when if the track wasn't loaded before +void UnLoadTrack() { gWorldInstance.GetRaceManager().UnLoad(); } -size_t GetCourseIndex() { - return gWorldInstance.CourseIndex; +size_t GetTrackIndex() { + return gWorldInstance.TrackIndex; } -void SetCourse(const char* name) { - gWorldInstance.SetCourse(name); +void SetTrack(const char* name) { + gWorldInstance.SetTrack(name); } -void NextCourse() { - gWorldInstance.NextCourse(); +void NextTrack() { + gWorldInstance.NextTrack(); } -void PreviousCourse() { - gWorldInstance.PreviousCourse(); +void PreviousTrack() { + gWorldInstance.PreviousTrack(); } -void SetCourseById(s32 course) { - if (course < 0 || course >= gWorldInstance.Courses.size()) { +void SetTrackById(s32 track) { + if (track < 0 || track >= gWorldInstance.Tracks.size()) { return; } - gWorldInstance.CourseIndex = course; - gWorldInstance.SetCurrentCourse(gWorldInstance.Courses[gWorldInstance.CourseIndex]); + gWorldInstance.TrackIndex = track; + gWorldInstance.SetCurrentTrack(gWorldInstance.Tracks[gWorldInstance.TrackIndex]); } void CM_VehicleCollision(s32 playerId, Player* player) { @@ -315,18 +314,18 @@ s32 CM_GetCrossingOnTriggered(uintptr_t* crossing) { * 2) Full scene --> The entire scene is rendered at once * * Custom tracks only use the Render() method, and they only render the full scene. - * They do not use RenderCredits() and they do not use track sections. + * They do not use DrawCredits() and they do not use track sections. */ -void CM_RenderCourse(struct UnkStruct_800DC5EC* screen) { - if (nullptr == gWorldInstance.GetCurrentCourse()) { +void CM_DrawTrack(ScreenContext* screen) { + if (nullptr == gWorldInstance.GetTrack()) { return; } - // Custom tracks should never use RenderCredits(); - if (gWorldInstance.GetCurrentCourse()->IsMod()) { + // Custom tracks should never use DrawCredits(); + if (gWorldInstance.GetTrack()->IsMod()) { switch(screen->camera->renderMode) { default: - gWorldInstance.GetCurrentCourse()->Render(screen); + gWorldInstance.GetTrack()->Draw(screen); break; case RENDER_COLLISION_MESH: render_collision(); @@ -335,10 +334,10 @@ void CM_RenderCourse(struct UnkStruct_800DC5EC* screen) { } else { switch(screen->camera->renderMode) { case RENDER_FULL_SCENE: - gWorldInstance.GetCurrentCourse()->RenderCredits(); + gWorldInstance.GetTrack()->DrawCredits(); break; case RENDER_TRACK_SECTIONS: - gWorldInstance.GetCurrentCourse()->Render(screen); + gWorldInstance.GetTrack()->Draw(screen); break; case RENDER_COLLISION_MESH: render_collision(); @@ -348,7 +347,7 @@ void CM_RenderCourse(struct UnkStruct_800DC5EC* screen) { } void CM_TickActors() { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.TickActors(); } } @@ -376,26 +375,26 @@ void CM_DrawStaticMeshActors() { void CM_BeginPlay() { static bool tour = false; - auto course = gWorldInstance.GetCurrentCourse(); + auto track = gWorldInstance.GetTrack(); - if (nullptr == course) { + if (nullptr == track) { return; } if (tour) { // gWorldInstance.Cameras[2]->SetActive(true); - // D_800DC5EC->camera = gWorldInstance.Cameras[2]->Get(); + // gScreenOneCtx->camera = gWorldInstance.Cameras[2]->Get(); if (reinterpret_cast(gWorldInstance.Cameras[2])->IsTourComplete()) { tour = false; - D_800DC5EC->pendingCamera = &cameras[0]; + gScreenOneCtx->pendingCamera = &cameras[0]; } } - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { // This line should likely be moved. // It's here so PreInit is after the scene file has been loaded // It used to be at the start of BeginPlay - Editor::LoadLevel(gWorldInstance.GetCurrentCourse().get(), gWorldInstance.GetCurrentCourse()->SceneFilePtr); + Editor::LoadLevel(gWorldInstance.GetTrack().get(), gWorldInstance.GetTrack()->SceneFilePtr); } gWorldInstance.GetRaceManager().PreInit(); @@ -450,23 +449,23 @@ Camera* CM_AddTourCamera(Vec3f spawn, s16 rot, u32 mode) { if (gWorldInstance.Cameras.size() >= NUM_CAMERAS) { // This is to prevent soft locking the game printf("Reached the max number of cameras, %d\n", NUM_CAMERAS); - if (gWorldInstance.GetCurrentCourse()->bTourEnabled) { + if (gWorldInstance.GetTrack()->bTourEnabled) { spawn_and_set_player_spawns(); } return nullptr; } - if (nullptr == gWorldInstance.GetCurrentCourse()) { + if (nullptr == gWorldInstance.GetTrack()) { // This is to prevent soft locking the game - if (gWorldInstance.GetCurrentCourse()->bTourEnabled) { + if (gWorldInstance.GetTrack()->bTourEnabled) { spawn_and_set_player_spawns(); } return nullptr; } - if (gWorldInstance.GetCurrentCourse()->TourShots.size() == 0) { + if (gWorldInstance.GetTrack()->TourShots.size() == 0) { // This is to prevent soft locking the game - if (gWorldInstance.GetCurrentCourse()->bTourEnabled) { + if (gWorldInstance.GetTrack()->bTourEnabled) { spawn_and_set_player_spawns(); } return nullptr; @@ -479,8 +478,8 @@ Camera* CM_AddTourCamera(Vec3f spawn, s16 rot, u32 mode) { } bool CM_IsTourEnabled() { - if (nullptr != gWorldInstance.GetCurrentCourse()) { - if ((gWorldInstance.GetCurrentCourse()->bTourEnabled) && (gTourComplete == false)) { + if (nullptr != gWorldInstance.GetTrack()) { + if ((gWorldInstance.GetTrack()->bTourEnabled) && (gTourComplete == false)) { return true; } else { return false; @@ -511,14 +510,14 @@ void CM_CameraSetActive(size_t idx, bool state) { void CM_SetFreeCamera(bool state) { for (auto* cam : gWorldInstance.Cameras) { - if (cam->Get() == D_800DC5EC->freeCamera) { + if (cam->Get() == gScreenOneCtx->freeCamera) { if (state) { - D_800DC5EC->pendingCamera = D_800DC5EC->freeCamera; + gScreenOneCtx->pendingCamera = gScreenOneCtx->freeCamera; cam->SetActive(true); } else { - if (nullptr != D_800DC5EC->raceCamera) { + if (nullptr != gScreenOneCtx->raceCamera) { if (gGamestate == RACING) { - D_800DC5EC->pendingCamera = D_800DC5EC->raceCamera; + gScreenOneCtx->pendingCamera = gScreenOneCtx->raceCamera; cam->SetActive(false); } else { cam->SetActive(false); @@ -538,7 +537,7 @@ void CM_ActivateTourCamera(Camera* camera) { } void CM_TickObjects() { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.TickObjects(); } } @@ -546,13 +545,13 @@ void CM_TickObjects() { // A couple objects such as lakitu are ticked inside of process_game_tick which support 60fps. // This is a fallback to support that. void CM_TickObjects60fps() { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.TickObjects60fps(); } } void CM_DrawObjects(s32 cameraId) { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.DrawObjects(cameraId); } } @@ -570,119 +569,119 @@ void CM_Editor_SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 mi } void CM_TickParticles() { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.TickParticles(); } } void CM_DrawParticles(s32 cameraId) { - if (gWorldInstance.GetCurrentCourse()) { + if (gWorldInstance.GetTrack()) { gWorldInstance.DrawParticles(cameraId); } } void CM_InitClouds() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->InitClouds(); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->InitClouds(); } } -void CM_UpdateClouds(s32 arg0, Camera* camera) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->UpdateClouds(arg0, camera); +void CM_TickClouds(s32 arg0, Camera* camera) { + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->TickClouds(arg0, camera); } } void CM_Waypoints(Player* player, int8_t playerId) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->Waypoints(player, playerId); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->Waypoints(player, playerId); } } void CM_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } } -void CM_InitCourseObjects() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->InitCourseObjects(); +void CM_InitTrackObjects() { + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->InitTrackObjects(); } } -void CM_UpdateCourseObjects() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->UpdateCourseObjects(); +void CM_TickTrackObjects() { + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->TickTrackObjects(); } TrainSmokeTick(); } -void CM_RenderCourseObjects(s32 cameraId) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->RenderCourseObjects(cameraId); +void CM_DrawTrackObjects(s32 cameraId) { + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->DrawTrackObjects(cameraId); } TrainSmokeDraw(cameraId); } void CM_SomeSounds() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->SomeSounds(); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->SomeSounds(); } } void CM_CreditsSpawnActors() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->CreditsSpawnActors(); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->CreditsSpawnActors(); } } void CM_WhatDoesThisDo(Player* player, int8_t playerId) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->WhatDoesThisDo(player, playerId); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->WhatDoesThisDo(player, playerId); } } void CM_WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->WhatDoesThisDoAI(player, playerId); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->WhatDoesThisDoAI(player, playerId); } } void CM_SetStaffGhost() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->SetStaffGhost(); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->SetStaffGhost(); } } Properties* CM_GetProps() { - if (gWorldInstance.GetCurrentCourse()) { - return &gWorldInstance.GetCurrentCourse()->Props; + if (gWorldInstance.GetTrack()) { + return &gWorldInstance.GetTrack()->Props; } return NULL; } -Properties* CM_GetPropsCourseId(s32 courseId) { - return &gWorldInstance.Courses[courseId]->Props; +Properties* CM_GetPropsTrackId(s32 trackId) { + return &gWorldInstance.Tracks[trackId]->Props; } void CM_ScrollingTextures() { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->ScrollingTextures(); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->ScrollingTextures(); } } -void CM_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void CM_DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { - if (gWorldInstance.GetCurrentCourse()) { - gWorldInstance.GetCurrentCourse()->DrawWater(screen, pathCounter, cameraRot, playerDirection); + if (gWorldInstance.GetTrack()) { + gWorldInstance.GetTrack()->DrawWater(screen, pathCounter, cameraRot, playerDirection); } } /** - * This should only be ran once per course, otherwise animation/timings might become sped up. + * This should only be ran once per track, otherwise animation/timings might become sped up. */ void CM_SpawnStarterLakitu() { if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) { @@ -730,7 +729,7 @@ size_t GetCupCursorPosition() { } void SetCupCursorPosition(size_t position) { - gWorldInstance.GetCurrentCup()->SetCourse(position); + gWorldInstance.GetCurrentCup()->SetTrack(position); // gWorldInstance.CurrentCup->CursorPosition = position; } @@ -738,12 +737,12 @@ size_t GetCupSize() { return gWorldInstance.GetCurrentCup()->GetSize(); } -void SetCourseFromCup() { - gWorldInstance.SetCurrentCourse(gWorldInstance.GetCurrentCup()->GetCourse()); +void SetTrackFromCup() { + gWorldInstance.SetCurrentTrack(gWorldInstance.GetCurrentCup()->GetTrack()); } -void* GetCourse(void) { - return gWorldInstance.GetCurrentCourse().get(); +void* GetTrack(void) { + return gWorldInstance.GetTrack().get(); } struct Actor* CM_GetActor(size_t index) { @@ -841,53 +840,53 @@ void CM_ActorCollision(Player* player, Actor* actor) { f32 CM_GetWaterLevel(Vec3f pos, Collision* collision) { FVector fPos = {pos[0], pos[1], pos[2]}; - return gWorldInstance.GetCurrentCourse()->GetWaterLevel(fPos, collision); + return gWorldInstance.GetTrack()->GetWaterLevel(fPos, collision); } // clang-format off -bool IsMarioRaceway() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsLuigiRaceway() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsChocoMountain() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsBowsersCastle() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsBansheeBoardwalk() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsYoshiValley() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsFrappeSnowland() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsKoopaTroopaBeach() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsRoyalRaceway() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsMooMooFarm() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsToadsTurnpike() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsKalimariDesert() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsSherbetLand() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsRainbowRoad() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsWarioStadium() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsBlockFort() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsSkyscraper() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsDoubleDeck() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsDkJungle() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsBigDonut() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } -bool IsPodiumCeremony() { return dynamic_cast(gWorldInstance.GetCurrentCourse().get()) != nullptr; } +bool IsMarioRaceway() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsLuigiRaceway() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsChocoMountain() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsBowsersCastle() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsBansheeBoardwalk() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsYoshiValley() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsFrappeSnowland() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsKoopaTroopaBeach() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsRoyalRaceway() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsMooMooFarm() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsToadsTurnpike() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsKalimariDesert() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsSherbetLand() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsRainbowRoad() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsWarioStadium() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsBlockFort() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsSkyscraper() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsDoubleDeck() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsDkJungle() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsBigDonut() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } +bool IsPodiumCeremony() { return dynamic_cast(gWorldInstance.GetTrack().get()) != nullptr; } -void SelectMarioRaceway() { gWorldInstance.SetCourseByType(); } -void SelectLuigiRaceway() { gWorldInstance.SetCourseByType(); } -void SelectChocoMountain() { gWorldInstance.SetCourseByType(); } -void SelectBowsersCastle() { gWorldInstance.SetCourseByType(); } -void SelectBansheeBoardwalk() { gWorldInstance.SetCourseByType(); } -void SelectYoshiValley() { gWorldInstance.SetCourseByType(); } -void SelectFrappeSnowland() { gWorldInstance.SetCourseByType(); } -void SelectKoopaTroopaBeach() { gWorldInstance.SetCourseByType(); } -void SelectRoyalRaceway() { gWorldInstance.SetCourseByType(); } -void SelectMooMooFarm() { gWorldInstance.SetCourseByType(); } -void SelectToadsTurnpike() { gWorldInstance.SetCourseByType(); } -void SelectKalimariDesert() { gWorldInstance.SetCourseByType(); } -void SelectSherbetLand() { gWorldInstance.SetCourseByType(); } -void SelectRainbowRoad() { gWorldInstance.SetCourseByType(); } -void SelectWarioStadium() { gWorldInstance.SetCourseByType(); } -void SelectBlockFort() { gWorldInstance.SetCourseByType(); } -void SelectSkyscraper() { gWorldInstance.SetCourseByType(); } -void SelectDoubleDeck() { gWorldInstance.SetCourseByType(); } -void SelectDkJungle() { gWorldInstance.SetCourseByType(); } -void SelectBigDonut() { gWorldInstance.SetCourseByType(); } -void SelectPodiumCeremony() { gWorldInstance.SetCurrentCourse(gPodiumCeremony); } +void SelectMarioRaceway() { gWorldInstance.SetTrackByType(); } +void SelectLuigiRaceway() { gWorldInstance.SetTrackByType(); } +void SelectChocoMountain() { gWorldInstance.SetTrackByType(); } +void SelectBowsersCastle() { gWorldInstance.SetTrackByType(); } +void SelectBansheeBoardwalk() { gWorldInstance.SetTrackByType(); } +void SelectYoshiValley() { gWorldInstance.SetTrackByType(); } +void SelectFrappeSnowland() { gWorldInstance.SetTrackByType(); } +void SelectKoopaTroopaBeach() { gWorldInstance.SetTrackByType(); } +void SelectRoyalRaceway() { gWorldInstance.SetTrackByType(); } +void SelectMooMooFarm() { gWorldInstance.SetTrackByType(); } +void SelectToadsTurnpike() { gWorldInstance.SetTrackByType(); } +void SelectKalimariDesert() { gWorldInstance.SetTrackByType(); } +void SelectSherbetLand() { gWorldInstance.SetTrackByType(); } +void SelectRainbowRoad() { gWorldInstance.SetTrackByType(); } +void SelectWarioStadium() { gWorldInstance.SetTrackByType(); } +void SelectBlockFort() { gWorldInstance.SetTrackByType(); } +void SelectSkyscraper() { gWorldInstance.SetTrackByType(); } +void SelectDoubleDeck() { gWorldInstance.SetTrackByType(); } +void SelectDkJungle() { gWorldInstance.SetTrackByType(); } +void SelectBigDonut() { gWorldInstance.SetTrackByType(); } +void SelectPodiumCeremony() { gWorldInstance.SetCurrentTrack(gPodiumCeremony); } // clang-format on void* GetMushroomCup(void) { @@ -936,7 +935,6 @@ void push_frame() { GameEngine::EndAudioFrame(); // thread5_game_loop(); // Graphics_ThreadUpdate();w - // Timer_Update(); } #ifdef _WIN32 diff --git a/src/port/Game.h b/src/port/Game.h index 8474efcc9..afc5241fe 100644 --- a/src/port/Game.h +++ b/src/port/Game.h @@ -2,18 +2,19 @@ #define _GAME_H #include -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/HM_Intro.h" #ifdef __cplusplus #include "engine/editor/Editor.h" -class Course; +class Track; struct Properties; class World; extern "C" { #endif #include "camera.h" #include "actor_types.h" +#include "code_800029B0.h" extern s32 gTrophyIndex; @@ -24,7 +25,7 @@ extern bool bCleanWorld; #endif Properties* CM_GetProps(); -Properties* CM_GetPropsCourseId(s32 courseId); +Properties* CM_GetPropsTrackId(s32 trackId); void HM_InitIntro(void); void HM_TickIntro(void); @@ -41,21 +42,21 @@ u32 GetCupIndex(void); const char* GetCupName(void); -void LoadCourse(); -void UnLoadCourse(); +void LoadTrack(); +void UnLoadTrack(); -size_t GetCourseIndex(); +size_t GetTrackIndex(); -void SetCourse(const char* name); +void SetTrack(const char* name); -void NextCourse(); -void PreviousCourse(); +void NextTrack(); +void PreviousTrack(); void CM_SetCup(void*); void CM_SetCupIndex(size_t index); -void CM_RenderCourse(struct UnkStruct_800DC5EC* arg0); +void CM_DrawTrack(ScreenContext* arg0); void CM_SpawnStarterLakitu(); void CM_ActivateFinishLakitu(s32 playerId); @@ -94,18 +95,18 @@ void Editor_CleanWorld(); void CM_TickParticles(void); void CM_DrawParticles(s32 cameraId); -void CM_UpdateClouds(s32 arg0, Camera* camera); +void CM_TickClouds(s32 arg0, Camera* camera); void CM_Waypoints(Player* player, int8_t playerId); void CM_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7); -void CM_InitCourseObjects(); +void CM_InitTrackObjects(); -void CM_UpdateCourseObjects(); +void CM_TickTrackObjects(); -void CM_RenderCourseObjects(s32 cameraId); +void CM_DrawTrackObjects(s32 cameraId); void CM_SomeSounds(); @@ -125,7 +126,7 @@ s32 CM_GetCrossingOnTriggered(uintptr_t* crossing); void CM_BeginPlay(); -void CM_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, +void CM_DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); void CM_AICrossingBehaviour(s32 playerId); @@ -148,11 +149,11 @@ void SetCupCursorPosition(size_t position); size_t GetCupSize(); -void SetCourseFromCup(); +void SetTrackFromCup(); -void* GetCourse(void); +void* GetTrack(void); -void SetCourseById(s32 course); +void SetTrackById(s32 track); struct Actor* CM_GetActor(size_t index); void CM_DeleteActor(size_t index); diff --git a/src/port/resource/importers/TrackSectionsFactory.cpp b/src/port/resource/importers/TrackSectionsFactory.cpp index 70d964e40..b6cf8fe9f 100644 --- a/src/port/resource/importers/TrackSectionsFactory.cpp +++ b/src/port/resource/importers/TrackSectionsFactory.cpp @@ -4,6 +4,7 @@ #include "libultraship/libultra/gbi.h" #include "StrHash64.h" #include "tinyxml2.h" +#include "src/engine/tracks/Track.h" namespace MK64 { std::shared_ptr diff --git a/src/port/resource/type/TrackSections.cpp b/src/port/resource/type/TrackSections.cpp index 4a63145e8..5fd89f5c8 100644 --- a/src/port/resource/type/TrackSections.cpp +++ b/src/port/resource/type/TrackSections.cpp @@ -1,5 +1,6 @@ #include "TrackSections.h" #include "libultraship/libultra/gbi.h" +#include "src/engine/tracks/Track.h" namespace MK64 { TrackSectionsClass::TrackSectionsClass() : Resource(std::shared_ptr()) { diff --git a/src/port/resource/type/TrackSections.h b/src/port/resource/type/TrackSections.h index f91a117d3..d8da4a292 100644 --- a/src/port/resource/type/TrackSections.h +++ b/src/port/resource/type/TrackSections.h @@ -1,9 +1,9 @@ #pragma once -#include "include/course.h" #include "resource/Resource.h" #include #include +#include "src/engine/tracks/Track.h" namespace MK64 { class TrackSectionsClass : public Ship::Resource { diff --git a/src/port/ui/ContentBrowser.cpp b/src/port/ui/ContentBrowser.cpp index 3daeea5f1..7ae4e333d 100644 --- a/src/port/ui/ContentBrowser.cpp +++ b/src/port/ui/ContentBrowser.cpp @@ -274,7 +274,7 @@ namespace Editor { if (!track.SceneFile.empty()) { // has scene file std::string label = fmt::format("{}##{}", track.Name, i_track); if (ImGui::Button(label.c_str())) { - gWorldInstance.SetCurrentCourse(track.course); + gWorldInstance.SetCurrentTrack(track.track); gGamestateNext = RACING; SetSceneFile(track.Archive, track.SceneFile); break; @@ -283,7 +283,7 @@ namespace Editor { std::string label = fmt::format("{} {}", ICON_FA_EXCLAMATION_TRIANGLE, track.Name); if (ImGui::Button(label.c_str())) { track.SceneFile = track.Dir + "/scene.json"; - gWorldInstance.SetCurrentCourse(track.invalidTrack); + gWorldInstance.SetCurrentTrack(track.invalidTrack); SetSceneFile(track.Archive, track.SceneFile); SaveLevel(); Refresh = true; @@ -294,14 +294,14 @@ namespace Editor { } } - // When resetting the known content, we need to also pop the custom courses - // out of World::Courses vector. Otherwise, duplicate courses would show up for users. + // When resetting the known content, we need to also pop the custom tracks + // out of World::Tracks vector. Otherwise, duplicate tracks would show up for users. void ContentBrowserWindow::RemoveCustomTracksFromTrackList() { for (auto& track : Tracks) { - auto it = gWorldInstance.Courses.begin(); - while (it != gWorldInstance.Courses.end()) { - if (track.course.get() == it->get()) { - it = gWorldInstance.Courses.erase(it); + auto it = gWorldInstance.Tracks.begin(); + while (it != gWorldInstance.Tracks.end()) { + if (track.track.get() == it->get()) { + it = gWorldInstance.Tracks.erase(it); } else { ++it; } @@ -401,13 +401,13 @@ namespace Editor { if (manager->HasFile(sceneFile)) { auto archive = manager->GetArchiveFromFile(sceneFile); - auto course = std::make_shared(); - course->RootArchive = archive; - course->LoadO2R(dir); - LoadLevel(course.get(), sceneFile); - LoadMinimap(course.get(), minimapFile); - Tracks.push_back({nullptr, course, sceneFile, name, dir, archive}); - gWorldInstance.Courses.push_back(std::move(course)); + auto track = std::make_shared(); + track->RootArchive = archive; + track->LoadO2R(dir); + LoadLevel(track.get(), sceneFile); + LoadMinimap(track.get(), minimapFile); + Tracks.push_back({nullptr, track, sceneFile, name, dir, archive}); + gWorldInstance.Tracks.push_back(std::move(track)); } else { // The track does not have a valid scene file const std::string file = dir + "/data_track_sections"; @@ -416,12 +416,12 @@ namespace Editor { // So lets add it as an uninitialized track. if (manager->HasFile(file)) { - auto course = std::make_shared(); - course->Id = (std::string("mods:") + name).c_str(); - course->Props.SetText(course->Props.Name, name.c_str(), sizeof(course->Props.Name)); - course->Props.SetText(course->Props.DebugName, name.c_str(), sizeof(course->Props.Name)); + auto track = std::make_shared(); + track->Id = (std::string("mods:") + name).c_str(); + track->Props.SetText(track->Props.Name, name.c_str(), sizeof(track->Props.Name)); + track->Props.SetText(track->Props.DebugName, name.c_str(), sizeof(track->Props.Name)); auto archive = manager->GetArchiveFromFile(file); - Tracks.push_back({course, nullptr, "", name, dir, archive}); + Tracks.push_back({track, nullptr, "", name, dir, archive}); } else { printf("ContentBrowser.cpp: Track '%s' missing required track files. Cannot add to game\n Missing %s/data_track_sections file\n", name.c_str(), dir.c_str()); } diff --git a/src/port/ui/ContentBrowser.h b/src/port/ui/ContentBrowser.h index 5fbdbb12a..ce1da71df 100644 --- a/src/port/ui/ContentBrowser.h +++ b/src/port/ui/ContentBrowser.h @@ -1,7 +1,7 @@ #pragma once #include -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "AllActors.h" namespace Editor { @@ -11,8 +11,8 @@ public: ~ContentBrowserWindow(); struct Tracks { - std::shared_ptr invalidTrack; // If not nullptr, user needs to create a scene file for this track. - std::shared_ptr course; // A valid custom track. Used to reset the Courses array on a file system refresh. + std::shared_ptr invalidTrack; // If not nullptr, user needs to create a scene file for this track. + std::shared_ptr track; // A valid custom track. Used to reset the World->Tracks array on a file system refresh. std::string SceneFile; std::string Name; std::string Dir; // Directory @@ -34,7 +34,7 @@ protected: void DrawElement() override; void UpdateElement() override {}; void AddTrackContent(); - void RemoveCustomTracksFromTrackList(); // Prevents duplicate courses being added to World->Courses array + void RemoveCustomTracksFromTrackList(); // Prevents duplicate tracks being added to World->Tracks array void AddActorContent(); void AddObjectContent(); void AddCustomContent(); diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index c5014c45d..02aaaed70 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -1,7 +1,6 @@ #include "ImguiUI.h" #include "UIWidgets.h" #include "ResolutionEditor.h" -#include "MultiplayerWindow.h" #include "FreecamWindow.h" #include "Tools.h" #include "SceneExplorer.h" @@ -34,7 +33,6 @@ std::shared_ptr mConsoleWindow; std::shared_ptr mStatsWindow; std::shared_ptr mInputEditorWindow; std::shared_ptr mGfxDebuggerWindow; -std::shared_ptr mMultiplayerWindow; std::shared_ptr mToolsWindow; std::shared_ptr mSceneExplorerWindow; std::shared_ptr mPropertiesWindow; @@ -50,11 +48,6 @@ void SetupGuiElements() { mPortMenu = std::make_shared("gOpenMenu", "Port Menu"); gui->SetMenu(mPortMenu); - //mMultiplayerWindow = gui->GetGuiWindow("Multiplayer"); - //if (mMultiplayerWindow == nullptr) { - // SPDLOG_ERROR("Could not find multiplayer window"); - //} - mStatsWindow = gui->GetGuiWindow("Stats"); if (mStatsWindow == nullptr) { SPDLOG_ERROR("Could not find stats window"); diff --git a/src/port/ui/MultiplayerWindow.cpp b/src/port/ui/MultiplayerWindow.cpp deleted file mode 100644 index 33f23ccee..000000000 --- a/src/port/ui/MultiplayerWindow.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include "MultiplayerWindow.h" -#include "UIWidgets.h" -#include "PortMenu.h" -#include "libultraship/src/Context.h" - -#include -#include -#include "spdlog/spdlog.h" -#include -#include - -extern "C" { -#include "main.h" -#include "networking/networking.h" -#include "actor_types.h" -#include "code_800029B0.h" -extern struct Actor gActorList[]; -extern char* gCupNames[]; -extern char* D_800E76A8[]; -extern Network gNetwork; -extern Camera cameras[]; -extern UnkStruct_800DC5EC* D_800DC5EC; -} - -namespace GameUI { -extern std::shared_ptr mPortMenu; -namespace Multiplayer { - -static s32 sConnectedBool = false; -static s32 sReadyUpBool = false; -static s32 sCharacter = 0; -static s32 sCup = 0; - -void DrawColumn1(WidgetInfo& info) { - if (gNetwork.isConnected) { - ImGui::BeginDisabled(); - } - - static char username[NETWORK_USERNAME_LENGTH] = "TestUser"; - - ImGui::Text("Username:"); - ImGui::InputText("##edit", username, IM_ARRAYSIZE(username)); - - static char address[32] = "127.0.0.1:64010"; - static char addressCopy[32]; - strncpy(addressCopy, address, sizeof(addressCopy)); - addressCopy[sizeof(addressCopy) - 1] = '\0'; // Ensure null termination - - ImGui::Text("Host:"); - ImGui::InputText("##edit3", addressCopy, IM_ARRAYSIZE(addressCopy)); - - if (ImGui::Button("Connect!")) { - char* ip = NULL; - uint16_t port = 0; - - char* token = strtok(addressCopy, ":"); - ip = token; - - token = strtok(NULL, ":"); - if (token != NULL) { - port = (uint16_t) atoi(token); - } - - gNetwork.enabled = true; - ConnectToServer(ip, port, username); - } - if (gNetwork.isConnected) { - ImGui::EndDisabled(); - } -} - -void DrawColumn2(WidgetInfo& info) { - if (!gNetwork.isConnected) { - ImGui::BeginDisabled(); - } - - ImGui::Text("Select Character:"); - ImGui::Spacing(); - - for (size_t i = 0; i < NUM_PLAYERS; i++) { - // These are euc-jp characters that look sort of like a hyphen - - if (D_800E76A8[i] == NULL || D_800E76A8[i] == "\xA1\xBC\xA1\xBC\xA1\xBC\xA1\xBC") { - break; - } - ImGui::SameLine(); - if (ImGui::Button(D_800E76A8[i])) { - network_character_vote(i); - sCharacter = i; - } - } - ImGui::Spacing(); - ImGui::Text("-- %s --", D_800E76A8[sCharacter]); - - ImGui::Spacing(); - ImGui::Spacing(); - ImGui::Text("Course Vote:"); - - for (size_t i = 0; i < NUM_CUPS - 1; i++) { - if (ImGui::Button(gCupNames[i])) { - network_cup_vote(i); - sCup = i; - } - ImGui::SameLine(); - } - ImGui::Spacing(); - ImGui::Text("-- %s --", gCupNames[sCup]); - - if (ImGui::Button("test", ImVec2(-1, 0))) { - // Add disconnect logic here - } - - for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) { - ImGui::Text("Slot %d: char: %d, hasAuthority: %d", clients[i].slot, clients[i].character, - gPlayers[i].nHasAuthority); - } - - /* Stick UI to the bottom of the panel */ - - float windowHeight = ImGui::GetWindowHeight(); - - // Move the cursor to a position relative to the bottom of the window - ImGui::SetCursorPosY(windowHeight - - ImGui::GetFrameHeightWithSpacing() * 2); // Adjust Y position for two buttons - - char buttonLabel[32]; - - if (sReadyUpBool) { - strcpy(buttonLabel, "Lets Go!"); - } else { - strcpy(buttonLabel, "Ready Up!"); - } - - // First button (Ready Up / Let's Go) - if (ImGui::Button(buttonLabel, ImVec2(-1, 0))) { - sReadyUpBool = !sReadyUpBool; - networking_ready_up(sReadyUpBool); - } - - // Add some vertical spacing between the buttons - ImGui::Spacing(); - - // Second button (Disconnect) - if (ImGui::Button("Disconnect", ImVec2(-1, 0))) { - // Add disconnect logic here - networking_disconnect(); - } - if (!gNetwork.isConnected) { - ImGui::EndDisabled(); - } -} - -void RegisterMultiplayerWidgets() { - // mPortMenu->AddSidebarEntry("Enhancements", "Multiplayer", 2); - // WidgetPath path = { "Enhancements", "Multiplayer", SECTION_COLUMN_1 }; - // mPortMenu->AddWidget(path, "Multi Custom 1", WIDGET_CUSTOM) - // .CustomFunction(DrawColumn1); - // path.column = SECTION_COLUMN_2; - // mPortMenu->AddWidget(path, "Multi Custom 2", WIDGET_CUSTOM) - // .CustomFunction(DrawColumn2); -} - -static RegisterMenuInitFunc initFunc(RegisterMultiplayerWidgets); -} // namespace Multiplayer -} // namespace GameUI diff --git a/src/port/ui/MultiplayerWindow.h b/src/port/ui/MultiplayerWindow.h deleted file mode 100644 index d196c33c0..000000000 --- a/src/port/ui/MultiplayerWindow.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include - -namespace Multiplayer { -} // namespace Multiplayer diff --git a/src/port/ui/PortMenu.cpp b/src/port/ui/PortMenu.cpp index e54af35a0..9ac89dc2f 100644 --- a/src/port/ui/PortMenu.cpp +++ b/src/port/ui/PortMenu.cpp @@ -10,9 +10,9 @@ #include #include "ResolutionEditor.h" -#include "courses/Course.h" -#include "courses/KalimariDesert.h" -#include "courses/ToadsTurnpike.h" +#include "engine/tracks/Track.h" +#include "engine/tracks/KalimariDesert.h" +#include "engine/tracks/ToadsTurnpike.h" #ifdef __SWITCH__ #include @@ -358,10 +358,6 @@ void PortMenu::AddEnhancements() { AddMenuEntry("Enhancements", "gSettings.Menu.EnhancementsSidebarSection"); WidgetPath path = { "Enhancements", "General", SECTION_COLUMN_1 }; AddSidebarEntry("Enhancements", "General", 3); - // UIWidgets::WindowButton("Multiplayer", "gMultiplayerWindowEnabled", GameUI::mMultiplayerWindow, - // { .tooltip = "Shows the multiplayer window" }); - // UIWidgets::WindowButton("Freecam", "gFreecam", GameUI::mFreecamWindow, - // { .tooltip = "Allows you to fly around the course" }); AddWidget(path, "No multiplayer feature cuts", WIDGET_CVAR_CHECKBOX) .CVar("gMultiplayerNoFeatureCuts") .Options(CheckboxOptions().Tooltip("Allows full train and jumbotron in multiplayer, etc.")); @@ -549,7 +545,7 @@ void PortMenu::AddDevTools() { .DefaultValue(60)); AddWidget(path, "Render Collision", WIDGET_CVAR_CHECKBOX) .CVar("gRenderCollisionMesh") - .Options(CheckboxOptions().Tooltip("Renders the collision mesh instead of the course mesh")); + .Options(CheckboxOptions().Tooltip("Draws the collision mesh instead of the track mesh")); path = { "Developer", "Gfx Debugger", SECTION_COLUMN_1 }; AddSidebarEntry("Developer", "Gfx Debugger", 1); @@ -580,10 +576,6 @@ PortMenu::PortMenu(const std::string& consoleVariable, const std::string& name) : Menu(consoleVariable, name, 0, UIWidgets::Colors::LightBlue) { } -// bool CheckNetworkConnected(disabledInfo& info) { -// return gNetwork.isConnected; -// } - void PortMenu::InitElement() { Ship::Menu::InitElement(); AddSettings(); diff --git a/src/port/ui/TrackProperties.cpp b/src/port/ui/TrackProperties.cpp index 499b74b1b..02536fe5e 100644 --- a/src/port/ui/TrackProperties.cpp +++ b/src/port/ui/TrackProperties.cpp @@ -35,19 +35,19 @@ namespace Editor { static char debugNameBuffer[256] = "m circuit"; static char lengthBuffer[256] = "567m"; - if (nullptr == gWorldInstance.GetCurrentCourse()) { + if (nullptr == gWorldInstance.GetTrack()) { return; } ImGui::InputText("ID", idBuffer, IM_ARRAYSIZE(idBuffer)); - ImGui::InputText("Name", gWorldInstance.GetCurrentCourse()->Props.Name, IM_ARRAYSIZE(nameBuffer)); - ImGui::InputText("Debug Name", gWorldInstance.GetCurrentCourse()->Props.DebugName, IM_ARRAYSIZE(debugNameBuffer)); - ImGui::InputText("Course Length", gWorldInstance.GetCurrentCourse()->Props.CourseLength, IM_ARRAYSIZE(lengthBuffer)); - ImGui::InputFloat("Water Level", &gWorldInstance.GetCurrentCourse()->Props.WaterLevel); + ImGui::InputText("Name", gWorldInstance.GetTrack()->Props.Name, IM_ARRAYSIZE(nameBuffer)); + ImGui::InputText("Debug Name", gWorldInstance.GetTrack()->Props.DebugName, IM_ARRAYSIZE(debugNameBuffer)); + ImGui::InputText("Track Length", gWorldInstance.GetTrack()->Props.TrackLength, IM_ARRAYSIZE(lengthBuffer)); + ImGui::InputFloat("Water Level", &gWorldInstance.GetTrack()->Props.WaterLevel); if (ImGui::CollapsingHeader("Camera")) { - ImGui::InputFloat("Near Perspective", &gWorldInstance.GetCurrentCourse()->Props.NearPersp); - ImGui::InputFloat("Far Perspective", &gWorldInstance.GetCurrentCourse()->Props.FarPersp); + ImGui::InputFloat("Near Perspective", &gWorldInstance.GetTrack()->Props.NearPersp); + ImGui::InputFloat("Far Perspective", &gWorldInstance.GetTrack()->Props.FarPersp); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text("Controls the far clipping distance for perspective rendering."); @@ -62,92 +62,92 @@ namespace Editor { if (ImGui::CollapsingHeader("AI")) { - ImGui::InputFloat("AI Max Separation", &gWorldInstance.GetCurrentCourse()->Props.AIMaximumSeparation); - ImGui::InputFloat("AI Min Separation", &gWorldInstance.GetCurrentCourse()->Props.AIMinimumSeparation); - ImGui::InputInt("AI Steering Sensitivity", (int*)&gWorldInstance.GetCurrentCourse()->Props.AISteeringSensitivity); + ImGui::InputFloat("AI Max Separation", &gWorldInstance.GetTrack()->Props.AIMaximumSeparation); + ImGui::InputFloat("AI Min Separation", &gWorldInstance.GetTrack()->Props.AIMinimumSeparation); + ImGui::InputInt("AI Steering Sensitivity", (int*)&gWorldInstance.GetTrack()->Props.AISteeringSensitivity); ImGui::Separator(); for (size_t i = 0; i < 32; i++) { - ImGui::InputScalar(("Element " + std::to_string(i)).c_str(), ImGuiDataType_S16, &gWorldInstance.GetCurrentCourse()->Props.AIDistance[i]); + ImGui::InputScalar(("Element " + std::to_string(i)).c_str(), ImGuiDataType_S16, &gWorldInstance.GetTrack()->Props.AIDistance[i]); } } if (ImGui::CollapsingHeader("Random Junk")) { for (size_t i = 0; i < 4; i++) { - ImGui::InputFloat(fmt::format("CurveTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetCurrentCourse()->Props.CurveTargetSpeed[i]); + ImGui::InputFloat(fmt::format("CurveTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.CurveTargetSpeed[i]); } ImGui::Separator(); for (size_t i = 0; i < 4; i++) { - ImGui::InputFloat(fmt::format("NormalTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetCurrentCourse()->Props.NormalTargetSpeed[i]); + ImGui::InputFloat(fmt::format("NormalTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.NormalTargetSpeed[i]); } ImGui::Separator(); for (size_t i = 0; i < 4; i++) { - ImGui::InputFloat(fmt::format("D_0D0096B8[{}]", i).c_str(), &gWorldInstance.GetCurrentCourse()->Props.D_0D0096B8[i]); + ImGui::InputFloat(fmt::format("D_0D0096B8[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.D_0D0096B8[i]); } ImGui::Separator(); for (size_t i = 0; i < 4; i++) { - ImGui::InputFloat(fmt::format("OffTrackTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetCurrentCourse()->Props.OffTrackTargetSpeed[i]); + ImGui::InputFloat(fmt::format("OffTrackTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.OffTrackTargetSpeed[i]); } } float minimapColour[3]; - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Minimap.Colour, minimapColour); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Minimap.Colour, minimapColour); if (ImGui::CollapsingHeader("Minimap")) { ImGui::Text("Position"); ImGui::SameLine(); - if (ImGui::DragInt2("##MinimapPosition", &gWorldInstance.GetCurrentCourse()->Props.Minimap.Pos[0].X, 1.0f)) { + if (ImGui::DragInt2("##MinimapPosition", &gWorldInstance.GetTrack()->Props.Minimap.Pos[0].X, 1.0f)) { } ImGui::Text("P2 Position"); ImGui::SameLine(); - if (ImGui::DragInt2("##MinimapPosition2p", &gWorldInstance.GetCurrentCourse()->Props.Minimap.Pos[1].X, 1.0f)) { + if (ImGui::DragInt2("##MinimapPosition2p", &gWorldInstance.GetTrack()->Props.Minimap.Pos[1].X, 1.0f)) { } ImGui::Text("Player Markers"); ImGui::SameLine(); - if (ImGui::DragInt2("##MinimapPlayers", &gWorldInstance.GetCurrentCourse()->Props.Minimap.PlayerX, 1.0f)) { + if (ImGui::DragInt2("##MinimapPlayers", &gWorldInstance.GetTrack()->Props.Minimap.PlayerX, 1.0f)) { } ImGui::Text("Player Scale Factor"); ImGui::SameLine(); - if (ImGui::DragFloat("##MinimapScaleFactor", &gWorldInstance.GetCurrentCourse()->Props.Minimap.PlayerScaleFactor, 0.0001f)) { + if (ImGui::DragFloat("##MinimapScaleFactor", &gWorldInstance.GetTrack()->Props.Minimap.PlayerScaleFactor, 0.0001f)) { } ImGui::Text("Finishline"); ImGui::SameLine(); - ImGui::DragFloat2("##MinimapFinishlineX", &gWorldInstance.GetCurrentCourse()->Props.Minimap.FinishlineX, 1.0f); + ImGui::DragFloat2("##MinimapFinishlineX", &gWorldInstance.GetTrack()->Props.Minimap.FinishlineX, 1.0f); ImGui::Text("Colour"); ImGui::SameLine(); ImGui::ColorEdit3("##MinimapColour", minimapColour, 1.0f); } - FloatToRGB8(minimapColour, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Minimap.Colour); + FloatToRGB8(minimapColour, (u8*)&gWorldInstance.GetTrack()->Props.Minimap.Colour); // Convert and pass to ImGui ColorEdit3 float topRight[3], bottomRight[3], bottomLeft[3], topLeft[3]; float floorTopRight[3], floorBottomRight[3], floorBottomLeft[3], floorTopLeft[3]; // Convert RGB8 (0-255) to float (0.0f to 1.0f) - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.TopRight, topRight); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.BottomRight, bottomRight); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.BottomLeft, bottomLeft); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.TopLeft, topLeft); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorTopRight, floorTopRight); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorBottomRight, floorBottomRight); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorBottomLeft, floorBottomLeft); - RGB8ToFloat((u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorTopLeft, floorTopLeft); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopRight, topRight); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomRight, bottomRight); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomLeft, bottomLeft); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopLeft, topLeft); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopRight, floorTopRight); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomRight, floorBottomRight); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomLeft, floorBottomLeft); + RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopLeft, floorTopLeft); if (ImGui::CollapsingHeader("Skybox")) { ImGui::ColorEdit3("Skybox Top Right", topRight); @@ -161,14 +161,14 @@ namespace Editor { } // Convert the modified float values back to RGB8 (0-255) - FloatToRGB8(topRight, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.TopRight); - FloatToRGB8(bottomRight, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.BottomRight); - FloatToRGB8(bottomLeft, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.BottomLeft); - FloatToRGB8(topLeft, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.TopLeft); - FloatToRGB8(floorTopRight, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorTopRight); - FloatToRGB8(floorBottomRight, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorBottomRight); - FloatToRGB8(floorBottomLeft, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorBottomLeft); - FloatToRGB8(floorTopLeft, (u8*)&gWorldInstance.GetCurrentCourse()->Props.Skybox.FloorTopLeft); + FloatToRGB8(topRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopRight); + FloatToRGB8(bottomRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomRight); + FloatToRGB8(bottomLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomLeft); + FloatToRGB8(topLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopLeft); + FloatToRGB8(floorTopRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopRight); + FloatToRGB8(floorBottomRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomRight); + FloatToRGB8(floorBottomLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomLeft); + FloatToRGB8(floorTopLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopLeft); TrackPropertiesWindow::DrawMusic(); TrackPropertiesWindow::DrawTourCamera(); @@ -185,15 +185,15 @@ namespace Editor { "Royal Raceway", "Yoshi Valley", "Block Fort", "Double Deck" }; - const char* currentItem = MusicSeqToString(gWorldInstance.GetCurrentCourse()->Props.Sequence); // Get the current selected value's string + const char* currentItem = MusicSeqToString(gWorldInstance.GetTrack()->Props.Sequence); // Get the current selected value's string if (ImGui::BeginCombo("Music Sequence", currentItem)) { for (size_t i = 0; i < IM_ARRAYSIZE(items); ++i) { bool isSelected = (currentItem == items[i]); if (ImGui::Selectable(items[i], isSelected)) { // Update the sequence when an option is selected - gWorldInstance.GetCurrentCourse()->Props.Sequence = static_cast(i); - play_sequence(gWorldInstance.GetCurrentCourse()->Props.Sequence); // Call play_sequence with the updated sequence + gWorldInstance.GetTrack()->Props.Sequence = static_cast(i); + play_sequence(gWorldInstance.GetTrack()->Props.Sequence); // Call play_sequence with the updated sequence // Update currentItem after selection is made currentItem = items[i]; @@ -299,12 +299,12 @@ namespace Editor { void TrackPropertiesWindow::DrawTourCamera() { - std::shared_ptr track = gWorldInstance.GetCurrentCourse(); + std::shared_ptr track = gWorldInstance.GetTrack(); if (nullptr == track) { return; } - Camera* camera = D_800DC5EC->camera; + Camera* camera = gScreenOneCtx->camera; if (nullptr == camera) { return; } diff --git a/src/racing/actors.c b/src/racing/actors.c index 4c91aef99..7e332bbd0 100644 --- a/src/racing/actors.c +++ b/src/racing/actors.c @@ -531,7 +531,7 @@ void render_cows(Camera* camera, Mat4 arg1) { var_s1 = var_t1; while (var_s1->pos[0] != END_OF_SPAWN_DATA) { - sp88[0] = var_s1->pos[0] * gCourseDirection; + sp88[0] = var_s1->pos[0] * gTrackDirection; sp88[1] = var_s1->pos[1]; sp88[2] = var_s1->pos[2]; temp_f0 = is_within_render_distance(camera->pos, sp88, camera->rot[1], 0.0f, gCameraFOV[camera - camera1], @@ -583,7 +583,7 @@ void render_cows(Camera* camera, Mat4 arg1) { temp_s1 = var_s5 - var_t1; if ((temp_s1 != D_8015F702) && (D_8015F704 < 160000.0f)) { func_800C99E0(D_8015F708, soundThing); - D_8015F708[0] = var_s5->pos[0] * gCourseDirection; + D_8015F708[0] = var_s5->pos[0] * gTrackDirection; D_8015F708[1] = var_s5->pos[1]; D_8015F708[2] = var_s5->pos[2]; D_8015F702 = temp_s1; @@ -601,7 +601,7 @@ void evaluate_collision_player_palm_trees(Player* player) { struct UnkActorSpawnData* data = (struct UnkActorSpawnData*) LOAD_ASSET(d_course_dks_jungle_parkway_tree_spawn); while (data->pos[0] != END_OF_SPAWN_DATA) { - pos[0] = data->pos[0] * gCourseDirection; + pos[0] = data->pos[0] * gTrackDirection; pos[1] = data->pos[1]; pos[2] = data->pos[2]; if (query_and_resolve_collision_player_actor(player, pos, 5.0f, 40.0f, 0.8f) == COLLISION) { @@ -673,7 +673,7 @@ void render_palm_trees(Camera* camera, Mat4 arg1) { var_s1->someId |= 0x0800; } } - spD4[0] = var_s1->pos[0] * gCourseDirection; + spD4[0] = var_s1->pos[0] * gTrackDirection; spD4[1] = var_s1->pos[1]; spD4[2] = var_s1->pos[2]; @@ -899,7 +899,7 @@ void spawn_piranha_plants(struct ActorSpawnData* spawnData) { vec3s_set(startingRot, 0, 0, 0); while (temp_s0->pos[0] != END_OF_SPAWN_DATA) { - startingPos[0] = temp_s0->pos[0] * gCourseDirection; + startingPos[0] = temp_s0->pos[0] * gTrackDirection; startingPos[1] = temp_s0->pos[1]; startingPos[2] = temp_s0->pos[2]; temp = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_PIRANHA_PLANT); @@ -928,7 +928,7 @@ void spawn_palm_trees(struct ActorSpawnData* spawnData) { vec3s_set(startingRot, 0, 0, 0); while (temp_s0->pos[0] != END_OF_SPAWN_DATA) { - startingPos[0] = temp_s0->pos[0] * gCourseDirection; + startingPos[0] = temp_s0->pos[0] * gTrackDirection; startingPos[1] = temp_s0->pos[1]; startingPos[2] = temp_s0->pos[2]; temp = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_PALM_TREE); @@ -976,7 +976,7 @@ void spawn_foliage(struct ActorSpawnData* actor) { } while (var_s3->pos[0] != END_OF_SPAWN_DATA) { - position[0] = var_s3->pos[0] * gCourseDirection; + position[0] = var_s3->pos[0] * gTrackDirection; position[2] = var_s3->pos[2]; position[1] = var_s3->pos[1]; @@ -1045,7 +1045,7 @@ void spawn_all_item_boxes(struct ActorSpawnData* spawnData) { vec3f_set(startingVelocity, 0, 0, 0); while (temp_s0->pos[0] != END_OF_SPAWN_DATA) { - startingPos[0] = temp_s0->pos[0] * gCourseDirection; + startingPos[0] = temp_s0->pos[0] * gTrackDirection; startingPos[1] = temp_s0->pos[1]; startingPos[2] = temp_s0->pos[2]; startingRot[0] = random_u16(); @@ -1081,7 +1081,7 @@ void spawn_item_box(Vec3f pos) { return; } - pos[0] *= gCourseDirection; + pos[0] *= gTrackDirection; startingRot[0] = random_u16(); startingRot[1] = random_u16(); @@ -1106,7 +1106,7 @@ void spawn_fake_item_box(Vec3f pos) { return; } - pos[0] *= gCourseDirection; + pos[0] *= gTrackDirection; startingRot[0] = random_u16(); startingRot[1] = random_u16(); @@ -1164,141 +1164,9 @@ void destroy_all_actors(void) { } } -void spawn_course_actors(void) { - UNUSED s32 pad; - Vec3f position; - Vec3f velocity = { 0.0f, 0.0f, 0.0f }; - Vec3s rotation = { 0, 0, 0 }; - struct Actor* actor; - struct RailroadCrossing* rrxing; - - gNumPermanentActors = 0; - - // switch (gCurrentCourseId) { - // case COURSE_MARIO_RACEWAY: - // // spawn_foliage(d_course_mario_raceway_tree_spawns); - // // spawn_piranha_plants(d_course_mario_raceway_piranha_plant_spawns); - // // spawn_all_item_boxes(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 = GET_ACTOR(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); - // spawn_falling_rocks(d_course_choco_mountain_falling_rock_spawns); - // break; - // case COURSE_BOWSER_CASTLE: - // spawn_foliage(d_course_bowsers_castle_tree_spawn); - // spawn_all_item_boxes(d_course_bowsers_castle_item_box_spawns); - // break; - // case COURSE_BANSHEE_BOARDWALK: - // spawn_all_item_boxes(d_course_banshee_boardwalk_item_box_spawns); - // break; - // case COURSE_YOSHI_VALLEY: - // spawn_foliage(d_course_yoshi_valley_tree_spawn); - // spawn_all_item_boxes(d_course_yoshi_valley_item_box_spawns); - // vec3f_set(position, -2300.0f, 0.0f, 634.0f); - // position[0] *= gCourseDirection; - // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG); - // break; - // case COURSE_FRAPPE_SNOWLAND: - // spawn_foliage(d_course_frappe_snowland_tree_spawns); - // spawn_all_item_boxes(d_course_frappe_snowland_item_box_spawns); - // break; - // case COURSE_KOOPA_BEACH: - // init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f); - // spawn_all_item_boxes(d_course_koopa_troopa_beach_item_box_spawns); - // spawn_palm_trees(d_course_koopa_troopa_beach_tree_spawn); - // break; - // case COURSE_ROYAL_RACEWAY: - // spawn_foliage(d_course_royal_raceway_tree_spawn); - // spawn_all_item_boxes(d_course_royal_raceway_item_box_spawns); - // spawn_piranha_plants(d_course_royal_raceway_piranha_plant_spawn); - // break; - // case COURSE_LUIGI_RACEWAY: - // spawn_foliage(d_course_luigi_raceway_tree_spawn); - // spawn_all_item_boxes(d_course_luigi_raceway_item_box_spawns); - // break; - // case COURSE_MOO_MOO_FARM: - // if (gPlayerCountSelection1 != 4) { - // spawn_foliage(d_course_moo_moo_farm_tree_spawn); - // } - // spawn_all_item_boxes(d_course_moo_moo_farm_item_box_spawns); - // break; - // case COURSE_TOADS_TURNPIKE: - // spawn_all_item_boxes(d_course_toads_turnpike_item_box_spawns); - // break; - // case COURSE_KALIMARI_DESERT: - // spawn_foliage(d_course_kalimari_desert_cactus_spawn); - // spawn_all_item_boxes(d_course_kalimari_desert_item_box_spawns); - // vec3f_set(position, -1680.0f, 2.0f, 35.0f); - // position[0] *= gCourseDirection; - // rrxing = (struct RailroadCrossing*) &gActorList[add_actor_to_empty_slot(position, rotation, velocity, - // ACTOR_RAILROAD_CROSSING)]; - // rrxing->crossingId = 1; - // vec3f_set(position, -1600.0f, 2.0f, 35.0f); - // position[0] *= gCourseDirection; - // rrxing = (struct RailroadCrossing*) &gActorList[add_actor_to_empty_slot(position, rotation, velocity, - // ACTOR_RAILROAD_CROSSING)]; - // rrxing->crossingId = 1; - // vec3s_set(rotation, 0, -0x2000, 0); - // vec3f_set(position, -2459.0f, 2.0f, 2263.0f); - // position[0] *= gCourseDirection; - // rrxing = (struct RailroadCrossing*) &gActorList[add_actor_to_empty_slot(position, rotation, velocity, - // ACTOR_RAILROAD_CROSSING)]; - // rrxing->crossingId = 0; - // vec3f_set(position, -2467.0f, 2.0f, 2375.0f); - // position[0] *= gCourseDirection; - // rrxing = (struct RailroadCrossing*) &gActorList[add_actor_to_empty_slot(position, rotation, velocity, - // ACTOR_RAILROAD_CROSSING)]; - // rrxing->crossingId = 0; - // break; - // case COURSE_SHERBET_LAND: - // spawn_all_item_boxes(d_course_sherbet_land_item_box_spawns); - // break; - // case COURSE_RAINBOW_ROAD: - // spawn_all_item_boxes(d_course_rainbow_road_item_box_spawns); - // break; - // case COURSE_WARIO_STADIUM: - // spawn_all_item_boxes(d_course_wario_stadium_item_box_spawns); - // vec3f_set(position, -131.0f, 83.0f, 286.0f); - // position[0] *= gCourseDirection; - // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); - // vec3f_set(position, -2353.0f, 72.0f, -1608.0f); - // position[0] *= gCourseDirection; - // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); - // vec3f_set(position, -2622.0f, 79.0f, 739.0f); - // position[0] *= gCourseDirection; - // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); - // break; - // case COURSE_BLOCK_FORT: - // spawn_all_item_boxes(d_course_block_fort_item_box_spawns); - // break; - // case COURSE_SKYSCRAPER: - // spawn_all_item_boxes(d_course_skyscraper_item_box_spawns); - // break; - // case COURSE_DOUBLE_DECK: - // spawn_all_item_boxes(d_course_double_deck_item_box_spawns); - // break; - // case COURSE_DK_JUNGLE: - // spawn_all_item_boxes(d_course_dks_jungle_parkway_item_box_spawns); - // init_kiwano_fruit(); - // func_80298D10(); - // break; - // case COURSE_BIG_DONUT: - // spawn_all_item_boxes(d_course_big_donut_item_box_spawns); - // break; - // } - gNumPermanentActors = gNumActors; -} - /** - * @brief Loads actor textures, course specific actor textures. - * Calls to spawn_course_vehicles and place_course_actors + * @brief Loads actor textures, track specific actor textures. + * Calls to spawn_track_vehicles and place_track_actors * */ void init_actors_and_load_textures(void) { @@ -1306,8 +1174,9 @@ void init_actors_and_load_textures(void) { destroy_all_actors(); CM_CleanWorld(); + gNumPermanentActors = 0; CM_BeginPlay(); - spawn_course_actors(); + gNumPermanentActors = gNumActors; } void play_sound_before_despawn(struct Actor* actor) { @@ -1508,7 +1377,7 @@ UNUSED void prototype_actor_spawn_data(Player* player, uintptr_t arg1) { var_s0 = (struct test*) arg1; while (var_s0->thing[0] != END_OF_SPAWN_DATA) { - sp64[0] = var_s0->thing[0] * gCourseDirection; + sp64[0] = var_s0->thing[0] * gTrackDirection; sp64[1] = var_s0->thing[1]; sp64[2] = var_s0->thing[2]; if (arg1 & arg1) {} @@ -2447,7 +2316,7 @@ void init_actor_hot_air_balloon_item_box(f32 x, f32 y, f32 z) { #include "actors/palm_tree/render.inc.c" -void render_item_boxes(struct UnkStruct_800DC5EC* arg0) { +void render_item_boxes(ScreenContext* arg0) { Camera* camera = arg0->camera; struct Actor* actor; s32 i; @@ -2474,7 +2343,7 @@ void render_item_boxes(struct UnkStruct_800DC5EC* arg0) { } } -void render_course_actors(struct UnkStruct_800DC5EC* arg0) { +void render_course_actors(ScreenContext* arg0) { Camera* camera = arg0->camera; u16 pathCounter = arg0->pathCounter; UNUSED s32 pad[12]; diff --git a/src/racing/actors.h b/src/racing/actors.h index 84233759f..8b06eb0bf 100644 --- a/src/racing/actors.h +++ b/src/racing/actors.h @@ -78,7 +78,6 @@ void spawn_item_box(Vec3f pos); void spawn_fake_item_box(Vec3f pos); void init_kiwano_fruit(void); void destroy_all_actors(void); -void spawn_course_actors(void); void init_actors_and_load_textures(void); void play_sound_before_despawn(struct Actor*); void destroy_actor(struct Actor*); @@ -110,8 +109,8 @@ void render_actor_yoshi_egg(Camera*, Mat4, struct YoshiValleyEgg*, u16); void render_actor_mario_sign(Camera*, Mat4, struct Actor*); void render_actor_railroad_crossing(Camera*, struct RailroadCrossing*); void render_actor_palm_tree(Camera*, Mat4, struct PalmTree*); -void render_item_boxes(struct UnkStruct_800DC5EC*); -void render_course_actors(struct UnkStruct_800DC5EC*); +void render_item_boxes(ScreenContext*); +void render_course_actors(ScreenContext*); void update_course_actors(void); const char* get_actor_display_name(s32 id); const char* get_actor_resource_location_name(s32 id); diff --git a/src/racing/collision.c b/src/racing/collision.c index e8948b25b..09f8d8ab2 100644 --- a/src/racing/collision.c +++ b/src/racing/collision.c @@ -582,8 +582,8 @@ void adjust_pos_orthogonally(Vec3f pos1, f32 boundingBoxSize, Vec3f pos2, UNUSED UNUSED s32 detect_tyre_collision(KartTyre* tyre) { Collision collision; UNUSED s32 pad[12]; - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; f32 tyreX; f32 tyreY; f32 tyreZ; @@ -626,10 +626,10 @@ UNUSED s32 detect_tyre_collision(KartTyre* tyre) { default: break; } - courseLengthX = gCourseMaxX - gCourseMinX; - courseLengthZ = gCourseMaxZ - gCourseMinZ; - sectionIndexX = (tyreX - gCourseMinX) / (courseLengthX / GRID_SIZE); - sectionIndexZ = (tyreZ - gCourseMinZ) / (courseLengthZ / GRID_SIZE); + trackLengthX = gTrackMaxX - gTrackMinX; + trackLengthZ = gTrackMaxZ - gTrackMinZ; + sectionIndexX = (tyreX - gTrackMinX) / (trackLengthX / GRID_SIZE); + sectionIndexZ = (tyreZ - gTrackMinZ) / (trackLengthZ / GRID_SIZE); if (sectionIndexX < 0) { return 0; } @@ -1180,8 +1180,8 @@ s32 is_colliding_with_wall1(Collision* arg, f32 boundingBoxSize, f32 x1, f32 y1, u16 actor_terrain_collision(Collision* collision, f32 boundingBoxSize, f32 newX, f32 newY, f32 newZ, f32 oldX, f32 oldY, f32 oldZ) { - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; s16 sectionIndexX; s16 sectionIndexZ; u16 numTriangles; @@ -1228,14 +1228,14 @@ u16 actor_terrain_collision(Collision* collision, f32 boundingBoxSize, f32 newX, return flags; } - courseLengthX = (s32) gCourseMaxX - gCourseMinX; - courseLengthZ = (s32) gCourseMaxZ - gCourseMinZ; + trackLengthX = (s32) gTrackMaxX - gTrackMinX; + trackLengthZ = (s32) gTrackMaxZ - gTrackMinZ; - sectionX = courseLengthX / GRID_SIZE; - sectionZ = courseLengthZ / GRID_SIZE; + sectionX = trackLengthX / GRID_SIZE; + sectionZ = trackLengthZ / GRID_SIZE; - sectionIndexX = (newX - gCourseMinX) / sectionX; - sectionIndexZ = (newZ - gCourseMinZ) / sectionZ; + sectionIndexX = (newX - gTrackMinX) / sectionX; + sectionIndexZ = (newZ - gTrackMinZ) / sectionZ; if (sectionIndexX < 0) { return 0; } @@ -1298,8 +1298,8 @@ u16 actor_terrain_collision(Collision* collision, f32 boundingBoxSize, f32 newX, u16 check_bounding_collision(Collision* collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ) { u16 numTriangles; - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; u16 meshIndex; s32 sectionX; s32 sectionZ; @@ -1337,14 +1337,14 @@ u16 check_bounding_collision(Collision* collision, f32 boundingBoxSize, f32 posX return flags; } - courseLengthX = (s32) gCourseMaxX - gCourseMinX; - courseLengthZ = (s32) gCourseMaxZ - gCourseMinZ; + trackLengthX = (s32) gTrackMaxX - gTrackMinX; + trackLengthZ = (s32) gTrackMaxZ - gTrackMinZ; - sectionX = courseLengthX / GRID_SIZE; - sectionZ = courseLengthZ / GRID_SIZE; + sectionX = trackLengthX / GRID_SIZE; + sectionZ = trackLengthZ / GRID_SIZE; - sectionIndexX = (posX - gCourseMinX) / sectionX; - sectionIndexZ = (posZ - gCourseMinZ) / sectionZ; + sectionIndexX = (posX - gTrackMinX) / sectionX; + sectionIndexZ = (posZ - gTrackMinZ) / sectionZ; if (sectionIndexX < 0) { return 0; @@ -1419,18 +1419,18 @@ f32 spawn_actor_on_surface(f32 posX, f32 posY, f32 posZ) { f32 phi_f20 = -3000.0f; u16 i; - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; s32 sectionX; s32 sectionZ; - courseLengthX = (gCourseMaxX - gCourseMinX); - courseLengthZ = (gCourseMaxZ - gCourseMinZ); - sectionX = courseLengthX / GRID_SIZE; - sectionZ = courseLengthZ / GRID_SIZE; + trackLengthX = (gTrackMaxX - gTrackMinX); + trackLengthZ = (gTrackMaxZ - gTrackMinZ); + sectionX = trackLengthX / GRID_SIZE; + sectionZ = trackLengthZ / GRID_SIZE; - sectionIndexX = (s16) ((posX - gCourseMinX) / sectionX); - sectionIndexZ = (s16) ((posZ - gCourseMinZ) / sectionZ); + sectionIndexX = (s16) ((posX - gTrackMinX) / sectionX); + sectionIndexZ = (s16) ((posZ - gTrackMinZ) / sectionZ); gridSection = sectionIndexX + (sectionIndexZ * GRID_SIZE); numTriangles = gCollisionGrid[gridSection].numTriangles; @@ -1628,24 +1628,24 @@ void add_collision_triangle(Vtx* vtx1, Vtx* vtx2, Vtx* vtx3, s8 surfaceType, u16 triangle->minY = minY; triangle->maxY = maxY; - // Define the minimum and maximum dimensions of the course. - if (minX < gCourseMinX) { - gCourseMinX = minX; + // Define the minimum and maximum dimensions of the track. + if (minX < gTrackMinX) { + gTrackMinX = minX; } - if (minY < gCourseMinY) { - gCourseMinY = minY; + if (minY < gTrackMinY) { + gTrackMinY = minY; } - if (minZ < gCourseMinZ) { - gCourseMinZ = minZ; + if (minZ < gTrackMinZ) { + gTrackMinZ = minZ; } - if (maxX > gCourseMaxX) { - gCourseMaxX = maxX; + if (maxX > gTrackMaxX) { + gTrackMaxX = maxX; } - if (maxY > gCourseMaxY) { - gCourseMaxY = maxY; + if (maxY > gTrackMaxY) { + gTrackMaxY = maxY; } - if (maxZ > gCourseMaxZ) { - gCourseMaxZ = maxZ; + if (maxZ > gTrackMaxZ) { + gTrackMaxZ = maxZ; } triangle->normalX = normalX; @@ -1760,7 +1760,7 @@ void set_vtx_from_quadrangle(u32 line, s8 surfaceType, u16 sectionId) { } /** - * Generates a list of pointers to course vtx. + * Generates a list of pointers to track vtx. */ void set_vtx_buffer(uintptr_t addr, u32 numVertices, u32 bufferIndex) { u32 i; @@ -1885,16 +1885,16 @@ void generate_collision_grid(void) { s16 minZ; s32 sectionZ; s32 sectionX; - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; s32 index; - courseLengthX = (s32) gCourseMaxX - gCourseMinX; - courseLengthZ = (s32) gCourseMaxZ - gCourseMinZ; + trackLengthX = (s32) gTrackMaxX - gTrackMinX; + trackLengthZ = (s32) gTrackMaxZ - gTrackMinZ; - // Separate the course into 32 sections - sectionX = courseLengthX / GRID_SIZE; - sectionZ = courseLengthZ / GRID_SIZE; + // Separate the track into 32 sections + sectionX = trackLengthX / GRID_SIZE; + sectionZ = trackLengthZ / GRID_SIZE; // Reset the collision grid for (i = 0; i < 1024; i++) { @@ -1908,9 +1908,9 @@ void generate_collision_grid(void) { for (k = 0; k < GRID_SIZE; k++) { index = k + j * GRID_SIZE; - // Select a section of the course using min/max akin to drawing a bounding-box - minX = (gCourseMinX + (sectionX * k)) - 20; - minZ = (gCourseMinZ + (sectionZ * j)) - 20; + // Select a section of the track using min/max akin to drawing a bounding-box + minX = (gTrackMinX + (sectionX * k)) - 20; + minZ = (gTrackMinZ + (sectionZ * j)) - 20; maxX = minX + sectionX + 40; maxZ = minZ + sectionZ + 40; @@ -2243,8 +2243,8 @@ u16 player_terrain_collision(Player* player, KartTyre* tyre, f32 tyre2X, f32 tyr f32 boundingBoxSize; f32 height; - s32 courseLengthX; - s32 courseLengthZ; + s32 trackLengthX; + s32 trackLengthZ; s16 sectionIndexX; s16 sectionIndexZ; @@ -2307,14 +2307,14 @@ u16 player_terrain_collision(Player* player, KartTyre* tyre, f32 tyre2X, f32 tyr // If the surface flags are not set then try setting them. - courseLengthX = (s32) gCourseMaxX - gCourseMinX; - courseLengthZ = (s32) gCourseMaxZ - gCourseMinZ; + trackLengthX = (s32) gTrackMaxX - gTrackMinX; + trackLengthZ = (s32) gTrackMaxZ - gTrackMinZ; - sectionX = courseLengthX / GRID_SIZE; - sectionZ = courseLengthZ / GRID_SIZE; + sectionX = trackLengthX / GRID_SIZE; + sectionZ = trackLengthZ / GRID_SIZE; - sectionIndexX = (tyreX - gCourseMinX) / sectionX; - sectionIndexZ = (tyreZ - gCourseMinZ) / sectionZ; + sectionIndexX = (tyreX - gTrackMinX) / sectionX; + sectionIndexZ = (tyreZ - gTrackMinZ) / sectionZ; if (sectionIndexX < 0) { return 0; diff --git a/src/racing/math_util.c b/src/racing/math_util.c index 05baecf3f..ffe80695e 100644 --- a/src/racing/math_util.c +++ b/src/racing/math_util.c @@ -8,7 +8,6 @@ #include "math.h" #include "memory.h" #include "engine/Matrix.h" -#include "course.h" #include "port/Game.h" #include #include diff --git a/src/racing/memory.c b/src/racing/memory.c index ba441c68d..d25b66b5e 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -15,7 +15,7 @@ #include "course_offsets.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include @@ -321,13 +321,13 @@ u8* load_lakitu_tlut_x64(const char** textureList, size_t length) { } /** - * @brief Loads & DMAs course data. Vtx, textures, displaylists, etc. - * @param courseId + * @brief Loads & DMAs track data. Vtx, textures, displaylists, etc. + * @param trackId */ -void load_course(s32 courseId) { - printf("Loading Course %d\n", courseId); +void load_track(s32 trackId) { + printf("Loading Track %d\n", trackId); gNextFreeMemoryAddress = gFreeMemoryResetAnchor; CM_CleanWorld(); - LoadCourse(); - CM_Editor_SetLevelDimensions(gCourseMinX, gCourseMaxX, gCourseMinZ, gCourseMaxZ, gCourseMinY, gCourseMaxY); + LoadTrack(); + CM_Editor_SetLevelDimensions(gTrackMinX, gTrackMaxX, gTrackMinZ, gTrackMaxZ, gTrackMinY, gTrackMaxY); } diff --git a/src/racing/memory.h b/src/racing/memory.h index c84224e96..7189b4761 100644 --- a/src/racing/memory.h +++ b/src/racing/memory.h @@ -59,7 +59,7 @@ uintptr_t main_pool_push_state(void); uintptr_t main_pool_pop_state(void); void* func_802A80B0(u8*, u8*, u8*); uintptr_t MIO0_0F(u8*, uintptr_t, uintptr_t); -void load_course(s32); +void load_track(s32); extern u8 _other_texturesSegmentRomStart[]; diff --git a/src/racing/race_logic.c b/src/racing/race_logic.c index b9aaf07fb..07bce7daa 100644 --- a/src/racing/race_logic.c +++ b/src/racing/race_logic.c @@ -164,7 +164,7 @@ void set_next_course(void) { } void func_8028E438(void) { - struct UnkStruct_800DC5EC* temp_v0 = &D_8015F480[gPlayerWinningIndex]; + ScreenContext* temp_v0 = &gScreenContexts[gPlayerWinningIndex]; s32 phi_v1_4; D_800DC5B0 = 1; @@ -216,10 +216,10 @@ void func_8028E438(void) { if (phi_v1_4 == 4) { D_8015F894 = 2; gActiveScreenMode = SCREEN_MODE_1P; - D_800DC5EC->screenWidth = temp_v0->screenWidth; - D_800DC5EC->screenHeight = temp_v0->screenHeight; - D_800DC5EC->screenStartX = temp_v0->screenStartX; - D_800DC5EC->screenStartY = temp_v0->screenStartY; + gScreenOneCtx->screenWidth = temp_v0->screenWidth; + gScreenOneCtx->screenHeight = temp_v0->screenHeight; + gScreenOneCtx->screenStartX = temp_v0->screenStartX; + gScreenOneCtx->screenStartY = temp_v0->screenStartY; if (gModeSelection == BATTLE) { func_80092604(); } else if (gModeSelection == VERSUS) { @@ -265,35 +265,35 @@ void func_8028E678(void) { } break; case 5: - D_800DC5EC->screenWidth -= 4; + gScreenOneCtx->screenWidth -= 4; - D_800DC5F0->screenWidth -= 4; + gScreenTwoCtx->screenWidth -= 4; - D_800DC5EC->screenStartX -= 2; + gScreenOneCtx->screenStartX -= 2; - D_800DC5F0->screenStartX += 2; + gScreenTwoCtx->screenStartX += 2; - if (D_800DC5EC->screenWidth < 160) { - D_800DC5EC->screenWidth = 160; + if (gScreenOneCtx->screenWidth < 160) { + gScreenOneCtx->screenWidth = 160; phi_a0_10++; } - if (D_800DC5F0->screenWidth < 160) { - D_800DC5F0->screenWidth = 160; + if (gScreenTwoCtx->screenWidth < 160) { + gScreenTwoCtx->screenWidth = 160; phi_a0_10++; } - if (D_800DC5EC->screenStartX < 80) { - D_800DC5EC->screenStartX = 80; + if (gScreenOneCtx->screenStartX < 80) { + gScreenOneCtx->screenStartX = 80; phi_a0_10++; } - if (D_800DC5F0->screenStartX > SCREEN_HEIGHT) { - D_800DC5F0->screenStartX = SCREEN_HEIGHT; + if (gScreenTwoCtx->screenStartX > SCREEN_HEIGHT) { + gScreenTwoCtx->screenStartX = SCREEN_HEIGHT; phi_a0_10++; } - gScreenAspect = (f32) ((f32) D_800DC5EC->screenWidth / (f32) D_800DC5EC->screenHeight); + gScreenAspect = (f32) ((f32) gScreenOneCtx->screenWidth / (f32) gScreenOneCtx->screenHeight); if (phi_a0_10 == 4) { D_8015F894 = 3; func_80092500(); @@ -302,32 +302,32 @@ void func_8028E678(void) { } break; case 6: - D_800DC5EC->screenHeight -= 4; - D_800DC5F0->screenHeight -= 4; - D_800DC5EC->screenStartY -= 2; - D_800DC5F0->screenStartY += 2; + gScreenOneCtx->screenHeight -= 4; + gScreenTwoCtx->screenHeight -= 4; + gScreenOneCtx->screenStartY -= 2; + gScreenTwoCtx->screenStartY += 2; - if (D_800DC5EC->screenHeight < 120) { - D_800DC5EC->screenHeight = 120; + if (gScreenOneCtx->screenHeight < 120) { + gScreenOneCtx->screenHeight = 120; phi_a0_10++; } - if (D_800DC5F0->screenHeight < 120) { - D_800DC5F0->screenHeight = 120; + if (gScreenTwoCtx->screenHeight < 120) { + gScreenTwoCtx->screenHeight = 120; phi_a0_10++; } - if (D_800DC5EC->screenStartY < 60) { - D_800DC5EC->screenStartY = 60; + if (gScreenOneCtx->screenStartY < 60) { + gScreenOneCtx->screenStartY = 60; phi_a0_10++; } - if (D_800DC5F0->screenStartY > 180) { - D_800DC5F0->screenStartY = 180; + if (gScreenTwoCtx->screenStartY > 180) { + gScreenTwoCtx->screenStartY = 180; phi_a0_10++; } - gScreenAspect = (f32) ((f32) D_800DC5EC->screenWidth / (f32) D_800DC5EC->screenHeight); + gScreenAspect = (f32) ((f32) gScreenOneCtx->screenWidth / (f32) gScreenOneCtx->screenHeight); if (phi_a0_10 == 4) { D_8015F894 = 3; func_80092500(); @@ -335,19 +335,19 @@ void func_8028E678(void) { } break; case 1: - D_800DC5EC->screenHeight -= 2; - D_800DC5EC->screenWidth = (D_800DC5EC->screenHeight * SCREEN_WIDTH) / SCREEN_HEIGHT; + gScreenOneCtx->screenHeight -= 2; + gScreenOneCtx->screenWidth = (gScreenOneCtx->screenHeight * SCREEN_WIDTH) / SCREEN_HEIGHT; - if (D_800DC5EC->screenHeight < 120) { + if (gScreenOneCtx->screenHeight < 120) { - D_800DC5EC->screenHeight = 120; - D_800DC5EC->screenWidth = (D_800DC5EC->screenHeight * SCREEN_WIDTH) / SCREEN_HEIGHT; + gScreenOneCtx->screenHeight = 120; + gScreenOneCtx->screenWidth = (gScreenOneCtx->screenHeight * SCREEN_WIDTH) / SCREEN_HEIGHT; D_8015F894 = 2; - D_800DC5F0->screenWidth = D_800DC5EC->screenWidth; - D_800DC5F0->screenHeight = D_800DC5EC->screenHeight; - D_800DC5F0->screenStartX = D_800DC5EC->screenStartX; - D_800DC5F0->screenStartY = D_800DC5EC->screenStartY; + gScreenTwoCtx->screenWidth = gScreenOneCtx->screenWidth; + gScreenTwoCtx->screenHeight = gScreenOneCtx->screenHeight; + gScreenTwoCtx->screenStartX = gScreenOneCtx->screenStartX; + gScreenTwoCtx->screenStartY = gScreenOneCtx->screenStartY; gActiveScreenMode = SCREEN_MODE_2P_SPLITSCREEN_VERTICAL; gScreenAspect = 1.33333337; @@ -357,28 +357,28 @@ void func_8028E678(void) { } break; case 2: - D_800DC5EC->screenStartX -= 4; + gScreenOneCtx->screenStartX -= 4; - D_800DC5EC->screenStartY -= 2; + gScreenOneCtx->screenStartY -= 2; - if (D_800DC5EC->screenStartX < 80) { - D_800DC5EC->screenStartX = 80; + if (gScreenOneCtx->screenStartX < 80) { + gScreenOneCtx->screenStartX = 80; phi_a0_10++; } - if (D_800DC5EC->screenStartY < 60) { - D_800DC5EC->screenStartY = 60; + if (gScreenOneCtx->screenStartY < 60) { + gScreenOneCtx->screenStartY = 60; phi_a0_10++; } - D_800DC5F0->screenStartX += 4; - D_800DC5F0->screenStartY += 2; + gScreenTwoCtx->screenStartX += 4; + gScreenTwoCtx->screenStartY += 2; - if (D_800DC5F0->screenStartX > SCREEN_HEIGHT) { - D_800DC5F0->screenStartX = SCREEN_HEIGHT; + if (gScreenTwoCtx->screenStartX > SCREEN_HEIGHT) { + gScreenTwoCtx->screenStartX = SCREEN_HEIGHT; phi_a0_10++; } - if (D_800DC5F0->screenStartY > 180) { - D_800DC5F0->screenStartY = 180; + if (gScreenTwoCtx->screenStartY > 180) { + gScreenTwoCtx->screenStartY = 180; phi_a0_10++; } if (phi_a0_10 == 4) { @@ -467,7 +467,7 @@ f32 func_8028EE8C(s32 arg0) { f32 temp_v1 = gPlayers[arg0].oldPos[2]; f32 temp_f14 = D_8015F8D0[2] - temp_v0; f32 temp_f16 = temp_v1 - D_8015F8D0[2]; - return gCourseTimer - ((COURSE_TIMER_ITER_f * temp_f14) / (temp_f14 + temp_f16)); + return gCourseTimer - ((TRACK_TIMER_ITER_f * temp_f14) / (temp_f14 + temp_f16)); } void func_8028EEF0(s32 i) { @@ -656,8 +656,8 @@ void func_8028F588(void) { s16 screenWidth; if ((CVarGetInteger("gEditorEnabled", 0) == true) || (CM_IsTourEnabled() == true)) { - D_800DC5EC->screenWidth = SCREEN_WIDTH; - D_800DC5EC->screenHeight = SCREEN_HEIGHT; + gScreenOneCtx->screenWidth = SCREEN_WIDTH; + gScreenOneCtx->screenHeight = SCREEN_HEIGHT; return; } @@ -667,12 +667,12 @@ void func_8028F588(void) { if (screenWidth < 0) { screenWidth = 1; } - D_800DC5EC->screenWidth = screenWidth; + gScreenOneCtx->screenWidth = screenWidth; screenWidth = (s16) (s32) (240.0f * D_802BA034); if (screenWidth < 0) { screenWidth = 1; } - D_800DC5EC->screenHeight = screenWidth; + gScreenOneCtx->screenHeight = screenWidth; break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: screenWidth = (s16) (s32) (160.0f * D_802BA034); @@ -681,16 +681,16 @@ void func_8028F588(void) { } else if (screenWidth >= 0x140) { screenWidth = 0x013C; } - D_800DC5EC->screenWidth = screenWidth; - D_800DC5F0->screenWidth = screenWidth; + gScreenOneCtx->screenWidth = screenWidth; + gScreenTwoCtx->screenWidth = screenWidth; screenWidth = (s16) (s32) (240.0f * D_802BA034); if (screenWidth <= 0) { screenWidth = 1; } else if (screenWidth >= 0x1E0) { screenWidth = 0x01DC; } - D_800DC5EC->screenHeight = screenWidth; - D_800DC5F0->screenHeight = screenWidth; + gScreenOneCtx->screenHeight = screenWidth; + gScreenTwoCtx->screenHeight = screenWidth; break; case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: screenWidth = (s16) (s32) (320.0f * D_802BA034); @@ -699,16 +699,16 @@ void func_8028F588(void) { } else if (screenWidth >= 0x280) { screenWidth = 0x027C; } - D_800DC5EC->screenWidth = screenWidth; - D_800DC5F0->screenWidth = screenWidth; + gScreenOneCtx->screenWidth = screenWidth; + gScreenTwoCtx->screenWidth = screenWidth; screenWidth = (s16) (s32) (120.0f * D_802BA034); if (screenWidth <= 0) { screenWidth = 1; } else if (screenWidth >= 0xF0) { screenWidth = 0x00EC; } - D_800DC5EC->screenHeight = screenWidth; - D_800DC5F0->screenHeight = screenWidth; + gScreenOneCtx->screenHeight = screenWidth; + gScreenTwoCtx->screenHeight = screenWidth; break; case SCREEN_MODE_3P_4P_SPLITSCREEN: screenWidth = (s16) (s32) (160.0f * D_802BA034); @@ -717,20 +717,20 @@ void func_8028F588(void) { } else if (screenWidth >= 0x140) { screenWidth = 0x013C; } - D_800DC5EC->screenWidth = screenWidth; - D_800DC5F0->screenWidth = screenWidth; - D_800DC5F4->screenWidth = screenWidth; - D_800DC5F8->screenWidth = screenWidth; + gScreenOneCtx->screenWidth = screenWidth; + gScreenTwoCtx->screenWidth = screenWidth; + gScreenThreeCtx->screenWidth = screenWidth; + gScreenFourCtx->screenWidth = screenWidth; screenWidth = (s16) (s32) (120.0f * D_802BA034); if (screenWidth <= 0) { screenWidth = 1; } else if (screenWidth >= 0xF0) { screenWidth = 0x00EC; } - D_800DC5EC->screenHeight = screenWidth; - D_800DC5F0->screenHeight = screenWidth; - D_800DC5F4->screenHeight = screenWidth; - D_800DC5F8->screenHeight = screenWidth; + gScreenOneCtx->screenHeight = screenWidth; + gScreenTwoCtx->screenHeight = screenWidth; + gScreenThreeCtx->screenHeight = screenWidth; + gScreenFourCtx->screenHeight = screenWidth; break; } } @@ -925,7 +925,7 @@ void func_8028FCBC(void) { phi_v0_4 = 0x1; //! @warning this used to be < gCurrentCourseId // Hopefully this is equivallent. - for (i = 0; i < GetCourseIndex(); i++) { + for (i = 0; i < GetTrackIndex(); i++) { phi_v0_4 <<= 1; } if ((D_8015F890 == 0) && (!(D_800DC5AC & phi_v0_4))) { diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index eb366587a..0995f5800 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -4,7 +4,6 @@ #include #include #include -#include #include #include "../camera.h" #include "framebuffer_effects.h" @@ -25,7 +24,7 @@ #include "courses/all_course_offsets.h" #include "port/Game.h" #include "engine/Matrix.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "enhancements/collision_viewer.h" @@ -54,7 +53,7 @@ s32 func_80290C20(Camera* camera) { return 0; } -void parse_course_displaylists(TrackSections* asset) { +void parse_track_displaylists(TrackSections* asset) { TrackSections* section = (TrackSections*) asset; while (section->crc != 0) { @@ -89,7 +88,7 @@ void parse_course_displaylists(TrackSections* asset) { extern u32 isFlycam; -void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) { +void render_track_sections(const char* addr[], ScreenContext* arg1) { Player* player = arg1->player; Camera* camera = arg1->camera; s16 direction; @@ -191,7 +190,7 @@ void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) if (CVarGetInteger("gDisableLod", 1) == 1 && (IsBowsersCastle()) && (index < 20 || index > 99)) { // always render higher version of bowser statue gDisplayListHead--; - gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_dl_9148); // use credit version of the course + gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_dl_9148); // use credit version of the track } } @@ -200,7 +199,7 @@ void func_80291198(void) { gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_packed_dl_1140); // } -void func_8029122C(struct UnkStruct_800DC5EC* screen, s32 playerId) { +void func_8029122C(ScreenContext* screen, s32 playerId) { UNUSED s32 pad; Player* player = screen->player; Mat4 matrix; @@ -237,9 +236,9 @@ void func_8029122C(struct UnkStruct_800DC5EC* screen, s32 playerId) { FrameInterpolation_RecordCloseChild(); } -void render_course(struct UnkStruct_800DC5EC* screen) { +void render_track(ScreenContext* screen) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); - CM_RenderCourse(screen); + CM_DrawTrack(screen); } void func_80295BF8(s32 playerIndex) { @@ -258,11 +257,11 @@ void func_80295BF8(s32 playerIndex) { void func_80295C6C(void) { gNextFreeMemoryAddress += ALIGN16(gCollisionMeshCount * sizeof(CollisionTriangle)); - gCourseMaxX += 20; - gCourseMaxZ += 20; - gCourseMinX += -20; - gCourseMinZ += -20; - gCourseMinY += -20; + gTrackMaxX += 20; + gTrackMaxZ += 20; + gTrackMinX += -20; + gTrackMinZ += -20; + gTrackMinY += -20; gCollisionIndices = (u16*) gNextFreeMemoryAddress; generate_collision_grid(); @@ -279,9 +278,6 @@ void func_80295D6C(void) { D_8015F6F6 = -3000; } -void course_init(void) { -} - void func_802966A0(void) { CM_ScrollingTextures(); } diff --git a/src/racing/render_courses.h b/src/racing/render_courses.h index 3eb3a750f..b6cb0713c 100644 --- a/src/racing/render_courses.h +++ b/src/racing/render_courses.h @@ -3,15 +3,14 @@ #include "code_800029B0.h" #include "../camera.h" -#include +#include "src/engine/tracks/Track.h" -void func_8029122C(struct UnkStruct_800DC5EC*, s32); +void func_8029122C(ScreenContext*, s32); s32 func_80290C20(Camera*); -void parse_course_displaylists(TrackSections* asset); -void render_course_segments(const char*[], struct UnkStruct_800DC5EC*); +void parse_track_displaylists(TrackSections* asset); +void render_track_sections(const char*[], ScreenContext*); void func_80291198(void); -void course_init(void); -void render_course(struct UnkStruct_800DC5EC*); +void render_track(ScreenContext*); void func_80295BF8(s32); void func_80295C6C(void); void func_80295D50(s16, s16); diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c index 7071ebaeb..80f998d0a 100644 --- a/src/racing/skybox_and_splitscreen.c +++ b/src/racing/skybox_and_splitscreen.c @@ -20,7 +20,7 @@ #include "menus.h" #include "port/Engine.h" #include "engine/Matrix.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "port/Game.h" #include "math_util.h" #include "src/enhancements/freecam/freecam.h" @@ -74,7 +74,7 @@ Vtx D_802B8A10[] = { { { { 0, 120, -1 }, 0, { 0, 0 }, { 0x00, 0xDC, 0x00, 0xFF } } }, }; -void func_802A3730(struct UnkStruct_800DC5EC* arg0) { +void func_802A3730(ScreenContext* arg0) { s32 ulx; s32 uly; s32 lrx; @@ -155,7 +155,7 @@ void func_802A38B4(void) { } } -void func_802A39E0(struct UnkStruct_800DC5EC* arg0) { +void func_802A39E0(ScreenContext* arg0) { s32 ulx = arg0->screenStartX - (arg0->screenWidth / 2); s32 uly = arg0->screenStartY - (arg0->screenHeight / 2); s32 lrx = arg0->screenStartX + (arg0->screenWidth / 2); @@ -257,7 +257,7 @@ UNUSED void func_802A40DC(void) { } UNUSED s32 set_viewport2(void) { - gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&D_800DC5EC->viewport)); + gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gScreenOneCtx->viewport)); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH | G_CLIPPING); @@ -406,7 +406,7 @@ Mtx gIdentityMatrix2 = { toFixedPointMatrix(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0), }; -void func_802A487C(Vtx* arg0, UNUSED struct UnkStruct_800DC5EC* arg1, UNUSED s32 arg2, UNUSED s32 arg3, +void func_802A487C(Vtx* arg0, UNUSED ScreenContext* arg1, UNUSED s32 arg2, UNUSED s32 arg3, UNUSED f32* arg4) { init_rdp(); @@ -424,7 +424,7 @@ void func_802A487C(Vtx* arg0, UNUSED struct UnkStruct_800DC5EC* arg1, UNUSED s32 } } -void func_802A4A0C(Vtx* vtx, struct UnkStruct_800DC5EC* arg1, UNUSED s32 arg2, UNUSED s32 arg3, UNUSED f32* arg4) { +void func_802A4A0C(Vtx* vtx, ScreenContext* arg1, UNUSED s32 arg2, UNUSED s32 arg3, UNUSED f32* arg4) { Camera* camera = arg1->camera; s16 temp_t5; f32 temp_f0; @@ -493,54 +493,14 @@ void func_802A4A0C(Vtx* vtx, struct UnkStruct_800DC5EC* arg1, UNUSED s32 arg2, U } void func_802A4D18(void) { + // This may not be originally accurate + // Because the near/far persp values are a track member variable now. + // Regardless, this would likely only effected the menus. if (gGamestate != RACING) { D_8015014C = 6800.0f; D_80150150 = 3.0f; - } else { - // switch (gCurrentCourseId) { - // case COURSE_BOWSER_CASTLE: - // case COURSE_BANSHEE_BOARDWALK: - // case COURSE_RAINBOW_ROAD: - // case COURSE_BLOCK_FORT: - // case COURSE_SKYSCRAPER: - // D_8015014C = 2700.0f; - // D_80150150 = 2.0f; - // break; - // case COURSE_CHOCO_MOUNTAIN: - // case COURSE_DOUBLE_DECK: - // D_8015014C = 1500.0f; - // D_80150150 = 2.0f; - // break; - // case COURSE_KOOPA_BEACH: - // D_8015014C = 5000.0f; - // D_80150150 = 1.0f; - // break; - // case COURSE_WARIO_STADIUM: - // D_8015014C = 4800.0f; - // D_80150150 = 10.0f; - // break; - // case COURSE_MARIO_RACEWAY: - // case COURSE_YOSHI_VALLEY: - // case COURSE_FRAPPE_SNOWLAND: - // case COURSE_ROYAL_RACEWAY: - // case COURSE_LUIGI_RACEWAY: - // case COURSE_MOO_MOO_FARM: - // case COURSE_TOADS_TURNPIKE: - // case COURSE_SHERBET_LAND: - // case COURSE_DK_JUNGLE: - // D_8015014C = 4500.0f; - // D_80150150 = 9.0f; - // break; - // case COURSE_KALIMARI_DESERT: - // D_8015014C = 7000.0f; - // D_80150150 = 10.0f; - // break; - // default: - // D_8015014C = 6800.0f; - // D_80150150 = 3.0f; - // break; - // } } + switch (gScreenModeSelection) { /* switch 1; irregular */ case SCREEN_MODE_1P: /* switch 1 */ gScreenAspect = 1.33333334f; @@ -583,17 +543,17 @@ void func_802A4EF4(void) { void func_802A5004(void) { init_rdp(); - func_802A3730(D_800DC5F0); + func_802A3730(gScreenTwoCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); - func_802A39E0(D_800DC5F0); + func_802A39E0(gScreenTwoCtx); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A4A0C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80057FC4(2); - func_802A487C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A487C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80093A30(2); } } @@ -601,16 +561,16 @@ void func_802A5004(void) { void func_802A50EC(void) { init_rdp(); - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); - func_802A39E0(D_800DC5EC); + func_802A39E0(gScreenOneCtx); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8890, D_800DC5EC, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); + func_802A4A0C((Vtx*) D_802B8890, gScreenOneCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); func_80057FC4(1); - func_802A487C((Vtx*) D_802B8890, D_800DC5EC, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); + func_802A487C((Vtx*) D_802B8890, gScreenOneCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); func_80093A30(1); } } @@ -618,16 +578,16 @@ void func_802A50EC(void) { void func_802A51D4(void) { init_rdp(); - func_802A39E0(D_800DC5EC); - func_802A3730(D_800DC5EC); + func_802A39E0(gScreenOneCtx); + func_802A3730(gScreenOneCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8890, D_800DC5EC, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); + func_802A4A0C((Vtx*) D_802B8890, gScreenOneCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); func_80057FC4(3); - func_802A487C((Vtx*) D_802B8890, D_800DC5EC, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); + func_802A487C((Vtx*) D_802B8890, gScreenOneCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[0]); func_80093A30(3); } } @@ -635,23 +595,23 @@ void func_802A51D4(void) { void func_802A52BC(void) { init_rdp(); - func_802A39E0(D_800DC5F0); - func_802A3730(D_800DC5F0); + func_802A39E0(gScreenTwoCtx); + func_802A3730(gScreenTwoCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A4A0C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80057FC4(4); - func_802A487C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A487C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80093A30(4); } } void func_802A53A4(void) { init_rdp(); - func_802A3730(D_800DC5EC); + func_802A3730(gScreenOneCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); @@ -659,11 +619,11 @@ void func_802A53A4(void) { init_z_buffer(); select_framebuffer(); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8890, D_800DC5EC, 0x140, 0xF0, &gCameraFOV[0]); + func_802A4A0C((Vtx*) D_802B8890, gScreenOneCtx, 0x140, 0xF0, &gCameraFOV[0]); if (gGamestate != CREDITS_SEQUENCE) { func_80057FC4(0); } - func_802A487C((Vtx*) D_802B8890, D_800DC5EC, 0x140, 0xF0, &gCameraFOV[0]); + func_802A487C((Vtx*) D_802B8890, gScreenOneCtx, 0x140, 0xF0, &gCameraFOV[0]); func_80093A30(0); } } @@ -671,16 +631,16 @@ void func_802A53A4(void) { void func_802A54A8(void) { init_rdp(); - func_802A39E0(D_800DC5EC); - func_802A3730(D_800DC5EC); + func_802A39E0(gScreenOneCtx); + func_802A3730(gScreenOneCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8890, D_800DC5EC, 0x140, 0xF0, &gCameraFOV[0]); + func_802A4A0C((Vtx*) D_802B8890, gScreenOneCtx, 0x140, 0xF0, &gCameraFOV[0]); func_80057FC4(8); - func_802A487C((Vtx*) D_802B8890, D_800DC5EC, 0x140, 0xF0, &gCameraFOV[0]); + func_802A487C((Vtx*) D_802B8890, gScreenOneCtx, 0x140, 0xF0, &gCameraFOV[0]); func_80093A30(8); } } @@ -688,16 +648,16 @@ void func_802A54A8(void) { void func_802A5590(void) { init_rdp(); - func_802A39E0(D_800DC5F0); - func_802A3730(D_800DC5F0); + func_802A39E0(gScreenTwoCtx); + func_802A3730(gScreenTwoCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A4A0C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80057FC4(9); - func_802A487C((Vtx*) D_802B8910, D_800DC5F0, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); + func_802A487C((Vtx*) D_802B8910, gScreenTwoCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[1]); func_80093A30(9); } } @@ -705,16 +665,16 @@ void func_802A5590(void) { void func_802A5678(void) { init_rdp(); - func_802A39E0(D_800DC5F4); - func_802A3730(D_800DC5F4); + func_802A39E0(gScreenThreeCtx); + func_802A3730(gScreenThreeCtx); gSPClearGeometryMode(gDisplayListHead++, G_CLEAR_ALL_MODES); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CLIPPING); if (D_800DC5B4 != 0) { - func_802A4A0C((Vtx*) D_802B8990, D_800DC5F4, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[2]); + func_802A4A0C((Vtx*) D_802B8990, gScreenThreeCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[2]); func_80057FC4(10); - func_802A487C((Vtx*) D_802B8990, D_800DC5F4, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[2]); + func_802A487C((Vtx*) D_802B8990, gScreenThreeCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[2]); func_80093A30(10); } } @@ -729,7 +689,7 @@ void func_802A5760(void) { if (gPlayerCountSelection1 == 3) { gDPPipeSync(gDisplayListHead++); - func_802A39E0(D_800DC5F8); + func_802A39E0(gScreenFourCtx); gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, VIRTUAL_TO_PHYSICAL(gPhysicalFramebuffers[sRenderingFramebuffer])); @@ -740,16 +700,16 @@ void func_802A5760(void) { gDPPipeSync(gDisplayListHead++); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); - func_802A3730(D_800DC5F8); + func_802A3730(gScreenFourCtx); } else { - func_802A3730(D_800DC5F8); - func_802A39E0(D_800DC5F8); + func_802A3730(gScreenFourCtx); + func_802A39E0(gScreenFourCtx); if (D_800DC5B4 != 0) { - func_802A4A0C(D_802B8A10, D_800DC5F8, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[3]); + func_802A4A0C(D_802B8A10, gScreenFourCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[3]); func_80057FC4(11); - func_802A487C(D_802B8A10, D_800DC5F8, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[3]); + func_802A487C(D_802B8A10, gScreenFourCtx, SCREEN_WIDTH, SCREEN_HEIGHT, &gCameraFOV[3]); func_80093A30(11); } } @@ -817,7 +777,7 @@ void render_screens(s32 mode, s32 cameraId, s32 playerId) { break; } - struct UnkStruct_800DC5EC* screen = &D_8015F480[screenId]; + ScreenContext* screen = &gScreenContexts[screenId]; Camera* camera = screen->camera; cameraId = camera->cameraId; // CM_GetCamera(cameraId); @@ -851,7 +811,7 @@ void render_screens(s32 mode, s32 cameraId, s32 playerId) { render_set_position(trackMatrix, 0); // Draw track geography - render_course(screen); + render_track(screen); FrameInterpolation_RecordCloseChild(); // Draw dynamic game objects @@ -900,7 +860,7 @@ void render_screens(s32 mode, s32 cameraId, s32 playerId) { // Makes the screen small at the start of a race void set_screen(void) { - struct UnkStruct_800DC5EC* wrapper = &D_8015F480[0]; + ScreenContext* wrapper = &gScreenContexts[0]; Player* player = &gPlayers[0]; Camera* camera = &cameras[0]; struct Controller* controller = &gControllers[0]; @@ -974,7 +934,7 @@ void set_screen(void) { } void set_editor_screen(void) { - struct UnkStruct_800DC5EC* wrapper = &D_8015F480[0]; + ScreenContext* wrapper = &gScreenContexts[0]; wrapper->controllers = gControllerOne; wrapper->camera = gFreecamCamera; wrapper->player = gPlayerOne; diff --git a/src/racing/skybox_and_splitscreen.h b/src/racing/skybox_and_splitscreen.h index dea2435a2..63857471d 100644 --- a/src/racing/skybox_and_splitscreen.h +++ b/src/racing/skybox_and_splitscreen.h @@ -9,13 +9,13 @@ /* Function Prototypes */ -void func_802A4A0C(Vtx*, struct UnkStruct_800DC5EC*, s32, s32, f32*); +void func_802A4A0C(Vtx*, ScreenContext*, s32, s32, f32*); void set_screen(void); void set_editor_screen(void); -void func_802A3730(struct UnkStruct_800DC5EC*); +void func_802A3730(ScreenContext*); void func_802A38AC(void); void func_802A38B4(void); -void func_802A39E0(struct UnkStruct_800DC5EC*); +void func_802A39E0(ScreenContext*); void init_z_buffer(void); void init_rdp(void); void func_802A40A4(void); @@ -31,7 +31,7 @@ void set_viewport(void); void select_framebuffer(void); void func_802A4300(void); void func_802A450C(Vtx*); -void func_802A487C(Vtx*, struct UnkStruct_800DC5EC*, s32, s32, f32*); +void func_802A487C(Vtx*, ScreenContext*, s32, s32, f32*); void func_802A4D18(void); void func_802A4EF4(void); void func_802A5004(void); diff --git a/src/render_objects.c b/src/render_objects.c index d2ac0a255..7af6cb9db 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -44,7 +44,7 @@ #include "port/Game.h" #include "port/Engine.h" -#include "engine/courses/Course.h" +#include "engine/tracks/Track.h" #include "engine/Matrix.h" #include "port/interpolation/FrameInterpolation.h" @@ -2761,9 +2761,9 @@ void func_8004EF9C(s32 arg0) { s16 temp_t0; s16 temp_v0; - temp_v0 = CM_GetPropsCourseId(arg0)->Minimap.Width; - temp_t0 = CM_GetPropsCourseId(arg0)->Minimap.Height; - func_8004D37C(0x00000104, 0x0000003C, CM_GetPropsCourseId(arg0)->Minimap.Texture, 0x000000FF, 0x000000FF, + temp_v0 = CM_GetPropsTrackId(arg0)->Minimap.Width; + temp_t0 = CM_GetPropsTrackId(arg0)->Minimap.Height; + func_8004D37C(0x00000104, 0x0000003C, CM_GetPropsTrackId(arg0)->Minimap.Texture, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, temp_v0, temp_t0, temp_v0, temp_t0); } @@ -3603,13 +3603,13 @@ void func_80051C60(s16 arg0, s32 arg1) { } void func_80051EBC(void) { - func_80051ABC(240 - D_800DC5EC->cameraHeight, 0); // 28 + func_80051ABC(240 - gScreenOneCtx->cameraHeight, 0); // 28 } void func_80051EF8(void) { s16 temp_a0; - temp_a0 = 0xF0 - D_800DC5EC->cameraHeight; + temp_a0 = 0xF0 - gScreenOneCtx->cameraHeight; if (IsKoopaTroopaBeach()) { temp_a0 = temp_a0 - 0x30; } else if (IsMooMooFarm()) { @@ -3625,7 +3625,7 @@ void func_80051EF8(void) { void func_80051F9C(void) { s16 temp_a0; - temp_a0 = 0xF0 - D_800DC5F0->cameraHeight; + temp_a0 = 0xF0 - gScreenTwoCtx->cameraHeight; if (IsKoopaTroopaBeach()) { temp_a0 = temp_a0 - 0x30; } else if (IsMooMooFarm()) { @@ -3639,11 +3639,11 @@ void func_80051F9C(void) { } void func_80052044(void) { - func_80051C60(240 - D_800DC5EC->cameraHeight, 0); + func_80051C60(240 - gScreenOneCtx->cameraHeight, 0); } void func_80052080(void) { - func_80051C60(240 - D_800DC5F0->cameraHeight, D_8018D1F0); + func_80051C60(240 - gScreenTwoCtx->cameraHeight, D_8018D1F0); } void func_800520C0(s32 arg0) { diff --git a/src/replays.c b/src/replays.c index ddd50faa1..acf3ae9e8 100644 --- a/src/replays.c +++ b/src/replays.c @@ -167,11 +167,11 @@ void func_80005310(void) { set_staff_ghost(); - if (staff_ghost_track_ptr != (uintptr_t) GetCourse()) { + if (staff_ghost_track_ptr != (uintptr_t) GetTrack()) { bPlayerGhostDisabled = 1; } - staff_ghost_track_ptr = (uintptr_t) GetCourse(); + staff_ghost_track_ptr = (uintptr_t) GetTrack(); gPauseTriggered = 0; sUnusedReplayCounter = 0; gPostTimeTrialReplayCannotSave = 0; @@ -211,7 +211,7 @@ void func_80005310(void) { * coordinates were added */ #define REPLAY_MASK (ALL_BUTTONS ^ (A_BUTTON | B_BUTTON | Z_TRIG | R_TRIG | L_TRIG)) -/* Inputs for replays (including player and course ghosts) are saved in a s32[] where +/* Inputs for replays (including player and track ghosts) are saved in a s32[] where each entry is a combination of the inputs and how long those inputs were held for. In essence it's "These buttons were pressed and the joystick was in this position. This was the case for X frames". diff --git a/src/save.c b/src/save.c index 258dd5016..8e200e159 100644 --- a/src/save.c +++ b/src/save.c @@ -102,11 +102,11 @@ void reset_save_data_grand_prix_points_and_sound_mode(void) { } // create a magic number based on the time trial records -u8 checksum_time_trial_records(s32 courseIdx) { +u8 checksum_time_trial_records(s32 trackIdx) { s32 j; s32 i; s32 ret; - u8* records = gSaveData.allCourseTimeTrialRecords.cupRecords[courseIdx / 4].courseRecords[courseIdx % 4].records[0]; + u8* records = gSaveData.allCourseTimeTrialRecords.cupRecords[trackIdx / 4].courseRecords[trackIdx % 4].records[0]; ret = 0; for (i = 0; i < 7; i++) { @@ -139,7 +139,7 @@ void load_save_data(void) { s32 i; osEepromLongRead(&gSIEventMesgQueue, EEPROM_ADDR(&gSaveData), (u8*) &gSaveData, sizeof(SaveData)); - // 16: 4 cup records * 4 course records? + // 16: 4 cup records * 4 track records? for (i = 0; i < 16; i++) { func_800B4A9C(i); } @@ -152,28 +152,28 @@ void load_save_data(void) { } } -void func_800B4A9C(s32 course) { +void func_800B4A9C(s32 track) { OnlyBestTimeTrialRecords* test; CourseTimeTrialRecords* sp24; s32 i; - if ((func_800B4EB4(0, course) & 0xFFFFF) < 0x927C0U) { - gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4].unknownBytes[0] = 1; + if ((func_800B4EB4(0, track) & 0xFFFFF) < 0x927C0U) { + gSaveData.allCourseTimeTrialRecords.cupRecords[track / 4].courseRecords[track % 4].unknownBytes[0] = 1; } - sp24 = &gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4]; + sp24 = &gSaveData.allCourseTimeTrialRecords.cupRecords[track / 4].courseRecords[track % 4]; - func_800B4FB0(course); + func_800B4FB0(track); if (sp24) {} - if (sp24->checksum != checksum_time_trial_records(course)) { - func_800B4728(course); - if (func_800B58C4(course) == 0) { + if (sp24->checksum != checksum_time_trial_records(track)) { + func_800B4728(track); + if (func_800B58C4(track) == 0) { s32 a3 = 0; - test = &gSaveData.onlyBestTimeTrialRecords[course / 8]; + test = &gSaveData.onlyBestTimeTrialRecords[track / 8]; for (i = 0; i < 3; i++) { - sp24->records[TIME_TRIAL_3LAP_RECORD_1][i] = test->bestThreelaps[course % 8][i]; - sp24->records[TIME_TRIAL_1LAP_RECORD][i] = test->bestSinglelaps[course % 8][i]; + sp24->records[TIME_TRIAL_3LAP_RECORD_1][i] = test->bestThreelaps[track % 8][i]; + sp24->records[TIME_TRIAL_1LAP_RECORD][i] = test->bestSinglelaps[track % 8][i]; // This is checking (in a roundabout way) if the given record // is the default value of 0x927C0 @@ -189,13 +189,13 @@ void func_800B4A9C(s32 course) { } else { sp24->unknownBytes[0] = 1; } - func_800B45E0(course); + func_800B45E0(track); } // L800B4C78 - func_800B559C(course); - } else if (func_800B58C4(course)) { + func_800B559C(track); + } else if (func_800B58C4(track)) { // L800B4C88 - func_800B559C(course); + func_800B559C(track); } } @@ -249,43 +249,43 @@ u32 func_800B4DF4(u8* arr) { return (a + (b << 8) + (c << 16)) & 0x00FFFFFF; } -// Get a time trial record, infer course index +// Get a time trial record, infer track index s32 func_800B4E24(s32 recordIndex) { return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[GetCupIndex()] .courseRecords[GetCupCursorPosition()] .records[recordIndex]); } -// Get a time trial record, but take the course index as an argument -u32 func_800B4EB4(s32 recordIndex, s32 courseIndex) { - return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(courseIndex / 4)] - .courseRecords[(courseIndex % 4)] +// Get a time trial record, but take the track index as an argument +u32 func_800B4EB4(s32 recordIndex, s32 trackIndex) { + return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(trackIndex / 4)] + .courseRecords[(trackIndex % 4)] .records[recordIndex]); } -// Get Best Lap record of the inferred course index +// Get Best Lap record of the inferred track index s32 func_800B4F2C(void) { return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[GetCupIndex()] .courseRecords[GetCupCursorPosition()] .records[TIME_TRIAL_1LAP_RECORD]); } -// Get the best single lap time record of the given course index -s32 func_800B4FB0(s32 courseIndex) { - return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(courseIndex / 4)] - .courseRecords[(courseIndex % 4)] +// Get the best single lap time record of the given track index +s32 func_800B4FB0(s32 trackIndex) { + return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(trackIndex / 4)] + .courseRecords[(trackIndex % 4)] .records[TIME_TRIAL_1LAP_RECORD]); } s32 func_800B5020(u32 time, s32 charId) { UNUSED s32 stackPadding[3]; - s32 course; // sp30 + s32 track; // sp30 s32 i; s32 j; CourseTimeTrialRecords* tt; - course = GetCupIndex() * 4 + GetCupCursorPosition(); - tt = &gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4]; + track = GetCupIndex() * 4 + GetCupCursorPosition(); + tt = &gSaveData.allCourseTimeTrialRecords.cupRecords[track / 4].courseRecords[track % 4]; i = 0; for (; i < 5; i++) { @@ -310,7 +310,7 @@ s32 func_800B5020(u32 time, s32 charId) { populate_time_trial_record(tt->records[i], time, charId); tt->unknownBytes[0] = 1; - func_800B45E0(course); + func_800B45E0(track); return i; } @@ -785,7 +785,7 @@ s32 func_800B6178(s32 arg0) { if (var_v0 == 0) { temp_s3->ghostDataSaved = 1; if (gGamestate == 4) { - temp_s3->courseIndex = (GetCupIndex() * 4) + GetCupCursorPosition(); + temp_s3->trackIndex = (GetCupIndex() * 4) + GetCupCursorPosition(); } temp_s3->unk_00 = D_80162DFC; temp_s3->characterId = (u8) D_80162DE0; @@ -805,20 +805,20 @@ s32 func_800B6178(s32 arg0) { } s32 func_800B6348(s32 arg0) { - if ((D_8018EE10[0].ghostDataSaved != 0) && (arg0 == D_8018EE10[0].courseIndex)) { + if ((D_8018EE10[0].ghostDataSaved != 0) && (arg0 == D_8018EE10[0].trackIndex)) { return 0; } - if ((D_8018EE10[1].ghostDataSaved != 0) && (arg0 == D_8018EE10[1].courseIndex)) { + if ((D_8018EE10[1].ghostDataSaved != 0) && (arg0 == D_8018EE10[1].trackIndex)) { return 1; } return 0; } s32 func_800B639C(s32 arg0) { - if ((D_8018EE10[0].ghostDataSaved != 0) && (arg0 == D_8018EE10[0].courseIndex)) { + if ((D_8018EE10[0].ghostDataSaved != 0) && (arg0 == D_8018EE10[0].trackIndex)) { return 0; } - if ((D_8018EE10[1].ghostDataSaved != 0) && (arg0 == D_8018EE10[1].courseIndex)) { + if ((D_8018EE10[1].ghostDataSaved != 0) && (arg0 == D_8018EE10[1].trackIndex)) { return 1; } return -1; @@ -834,7 +834,7 @@ s32 func_800B63F0(s32 arg0) { func_80005AE8(gPlayerThree); phi_s3 = 0; - if (((GetCupIndex() * 4) + GetCupCursorPosition()) != D_8018EE10[arg0].courseIndex) { + if (((GetCupIndex() * 4) + GetCupCursorPosition()) != D_8018EE10[arg0].trackIndex) { phi_s3 = 2; } else if (D_80162DFC != D_8018EE10[arg0].unk_00) { phi_s3 = 3; @@ -912,7 +912,7 @@ s32 func_800B65F4(s32 arg0, s32 arg1) { } D_80162DE0 = temp_s3->characterId; D_80162DFC = temp_s3->unk_00; - D_8018EE10[arg1].courseIndex = temp_s3->courseIndex; + D_8018EE10[arg1].trackIndex = temp_s3->trackIndex; } return writeStatus; } @@ -980,7 +980,7 @@ s32 func_800B69BC(s32 arg0) { struct_8018EE10_entry* plz = &D_8018EE10[arg0]; plz->ghostDataSaved = false; - plz->courseIndex = 0; + plz->trackIndex = 0; plz->characterId = 0; for (i = 0; i < sizeof(plz->unk_07); i++) { plz->unk_07[i] = i; diff --git a/src/spawn_players.c b/src/spawn_players.c index b3f19561b..e45b3084a 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -1,7 +1,6 @@ #include #include #include -#include "networking/networking.h" #include "spawn_players.h" #include "code_800029B0.h" @@ -487,7 +486,7 @@ void func_80039DA4(void) { 0, 1, 2, 3, 4, 5, 6, 7, }; - if (((GetCupCursorPosition() == COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || + if (((GetCupCursorPosition() == TRACK_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_OPTION_SELECTED)) { for (i = 0; i < NUM_PLAYERS; i++) { D_80165270[i] = sp2C[i]; @@ -505,7 +504,7 @@ UNUSED s16 D_800E43A8 = 0; void spawn_players_gp_one_player(f32* arg0, f32* arg1, f32 arg2) { func_80039DA4(); - if (((GetCupCursorPosition() == COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || + if (((GetCupCursorPosition() == TRACK_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_OPTION_SELECTED)) { s16 rand; s16 i; @@ -549,27 +548,23 @@ void spawn_players_gp_one_player(f32* arg0, f32* arg1, f32 arg2) { PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); D_80164A28 = 0; } else { - if (gNetwork.enabled) { - spawn_network_players(arg0, arg1, arg2); - } else { - spawn_player(gPlayerOne, 0, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, - gCharacterSelections[0], - PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, - chooseCPUPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - } + spawn_player(gPlayerOne, 0, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, + gCharacterSelections[0], + PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, + chooseCPUPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 1; } func_80039AE4(); @@ -634,7 +629,7 @@ void spawn_players_versus_one_player(f32* arg0, f32* arg1, f32 arg2) { void spawn_players_gp_two_player(f32* arg0, f32* arg1, f32 arg2) { func_80039DA4(); - if ((GetCupCursorPosition() == COURSE_ONE) || (gDemoMode == 1) || + if ((GetCupCursorPosition() == TRACK_ONE) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_OPTION_SELECTED)) { s16 rand; s16 i; @@ -1235,19 +1230,19 @@ void spawn_players_and_cameras(void) { camera = CM_AddFreeCamera(spawn, player->rotation[1], 1); - D_8015F480[PLAYER_ONE].freeCamera = camera; + gScreenContexts[PLAYER_ONE].freeCamera = camera; if (CVarGetInteger("gFreecam", false) == true) { CM_SetFreeCamera(true); - D_8015F480[PLAYER_ONE].camera = camera; + gScreenContexts[PLAYER_ONE].camera = camera; } if ((CM_IsTourEnabled() == true) && (gModeSelection == GRAND_PRIX) && (gIsEditorPaused == false)) { camera = CM_AddTourCamera(spawn, player->rotation[1], 1); if (NULL != camera) { CM_AttachCamera(camera, PLAYER_ONE); - D_8015F480[PLAYER_ONE].camera = camera; - D_8015F480[PLAYER_ONE].pendingCamera = NULL; + gScreenContexts[PLAYER_ONE].camera = camera; + gScreenContexts[PLAYER_ONE].pendingCamera = NULL; CM_CameraSetActive(0, false); CM_ActivateTourCamera(camera); } @@ -1272,14 +1267,14 @@ void spawn_single_player_camera(u32 mode) { Camera* camera = CM_AddCamera(spawn, gPlayerOne->rotation[1], mode); if (camera) { CM_AttachCamera(camera, PLAYER_ONE); - D_8015F480[PLAYER_ONE].camera = camera; - D_8015F480[PLAYER_ONE].raceCamera = camera; + gScreenContexts[PLAYER_ONE].camera = camera; + gScreenContexts[PLAYER_ONE].raceCamera = camera; } camera = CM_AddLookBehindCamera(spawn, gPlayerOne->rotation[1], mode); if (camera) { CM_AttachCamera(camera, PLAYER_ONE); - D_8015F480[PLAYER_ONE].lookBehindCamera = camera; + gScreenContexts[PLAYER_ONE].lookBehindCamera = camera; } } @@ -1290,8 +1285,8 @@ void spawn_multiplayer_cameras(u32 mode) { camera = CM_AddCamera(spawn, gPlayers[i].rotation[1], mode); if (camera) { CM_AttachCamera(camera, i); - D_8015F480[i].camera = camera; - D_8015F480[i].raceCamera = camera; + gScreenContexts[i].camera = camera; + gScreenContexts[i].raceCamera = camera; } } @@ -1301,7 +1296,7 @@ void spawn_multiplayer_cameras(u32 mode) { camera = CM_AddLookBehindCamera(spawn, gPlayers[i].rotation[1], mode); if (camera) { CM_AttachCamera(camera, i); - D_8015F480[i].lookBehindCamera = camera; + gScreenContexts[i].lookBehindCamera = camera; } } @@ -1329,7 +1324,7 @@ void load_kart_textures(void) { static const size_t playerCounts[4] = { 8, 8, 4, 4 }; for (size_t i = 0; i < screens; i++) { for (size_t ply = 0; ply < playerCounts[gPlayerCountSelection1 - 1]; ply++) { - func_8003CD98(&gPlayers[ply], D_8015F480[i].camera, ply, i); + func_8003CD98(&gPlayers[ply], gScreenContexts[i].camera, ply, i); } } } diff --git a/src/update_objects.c b/src/update_objects.c index ea1d63706..8d6c4cbcd 100644 --- a/src/update_objects.c +++ b/src/update_objects.c @@ -2561,47 +2561,7 @@ void func_80078C70(s32 arg0) { D_8018D1E8 = 1.7578125 / D_8018D200; D_8018D218 = 0xA0; - CM_UpdateClouds(sp1C, camera); - - // switch (gCurrentCourseId) { /* switch 2 */ - // case COURSE_MARIO_RACEWAY: /* switch 2 */ - // // Uses Luigi Raceway's clouds for display purposes? - // //update_clouds(sp1C, camera, gLuigiRacewayClouds); - // break; - // case COURSE_YOSHI_VALLEY: /* switch 2 */ - // update_clouds(sp1C, camera, gYoshiValleyMooMooFarmClouds); - // break; - // case COURSE_FRAPPE_SNOWLAND: /* switch 2 */ - // func_80078170(sp1C, camera); - // break; - // case COURSE_KOOPA_BEACH: /* switch 2 */ - // update_clouds(sp1C, camera, gKoopaTroopaBeachClouds); - // break; - // case COURSE_ROYAL_RACEWAY: /* switch 2 */ - // update_clouds(sp1C, camera, gRoyalRacewayClouds); - // break; - // case COURSE_LUIGI_RACEWAY: /* switch 2 */ - // update_clouds(sp1C, camera, gLuigiRacewayClouds); - // break; - // case COURSE_MOO_MOO_FARM: /* switch 2 */ - // update_clouds(sp1C, camera, gYoshiValleyMooMooFarmClouds); - // break; - // case COURSE_TOADS_TURNPIKE: /* switch 2 */ - // update_stars(sp1C, camera, gToadsTurnpikeRainbowRoadStars); - // break; - // case COURSE_KALIMARI_DESERT: /* switch 2 */ - // update_clouds(sp1C, camera, gKalimariDesertClouds); - // break; - // case COURSE_SHERBET_LAND: /* switch 2 */ - // update_clouds(sp1C, camera, gSherbetLandClouds); - // break; - // case COURSE_RAINBOW_ROAD: /* switch 2 */ - // update_stars(sp1C, camera, gToadsTurnpikeRainbowRoadStars); - // break; - // case COURSE_WARIO_STADIUM: /* switch 2 */ - // update_stars(sp1C, camera, gWarioStadiumStars); - // break; - //} + CM_TickClouds(sp1C, camera); } }