diff --git a/CMakeLists.txt b/CMakeLists.txt index 120d049bc..2da9881fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,10 +58,8 @@ set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endif() -if(NOT EXISTS ${CMAKE_BINARY_DIR}/config.yml) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "${CMAKE_BINARY_DIR}/config.yml") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/yamls/" "${CMAKE_BINARY_DIR}/yamls/") -endif() +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "${CMAKE_BINARY_DIR}/config.yml") +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/yamls/" "${CMAKE_BINARY_DIR}/yamls/") if (MSVC) set(CPP "${CMAKE_C_COMPILER}" "/EP") diff --git a/include/assets/luigi_raceway_data.h b/include/assets/luigi_raceway_data.h index dfab48ddf..51b2314ab 100644 --- a/include/assets/luigi_raceway_data.h +++ b/include/assets/luigi_raceway_data.h @@ -248,7 +248,7 @@ static const ALIGN_ASSET(2) char d_course_luigi_raceway_unknown_waypoints[] = "_ static const ALIGN_ASSET(2) char d_course_luigi_raceway_track_waypoints[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_track_waypoints"; -static const ALIGN_ASSET(2) char luigi_raceway_data_seg6_vtx_BA90[] = "__OTR__luigi_raceway_data/luigi_raceway_data_seg6_vtx_BA90"; +static const ALIGN_ASSET(2) char d_course_luigi_raceway_basket_model_lod2[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_basket_model_lod2"; static const ALIGN_ASSET(2) char d_course_luigi_raceway_unknown_model1[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_unknown_model1"; @@ -280,14 +280,14 @@ static const ALIGN_ASSET(2) char d_course_luigi_raceway_balloon_basket[] = "__OT static const ALIGN_ASSET(2) char d_course_luigi_raceway_balloon_rope[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_balloon_rope"; -static const ALIGN_ASSET(2) char luigi_raceway_data_seg6_gfx_F588[] = "__OTR__luigi_raceway_data/luigi_raceway_data_seg6_gfx_F588"; - static const ALIGN_ASSET(2) char d_course_luigi_raceway_dl_F588[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_dl_F588"; -static const ALIGN_ASSET(2) char d_course_luigi_raceway_dl_F630[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_dl_F630"; +static const ALIGN_ASSET(2) char luigi_raceway_data_seg6_gfx_F588[] = "__OTR__luigi_raceway_data/luigi_raceway_data_seg6_gfx_F588"; static const ALIGN_ASSET(2) char luigi_raceway_data_seg6_gfx_F630[] = "__OTR__luigi_raceway_data/luigi_raceway_data_seg6_gfx_F630"; +static const ALIGN_ASSET(2) char d_course_luigi_raceway_dl_F630[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_dl_F630"; + static const ALIGN_ASSET(2) char luigi_raceway_data_seg6_gfx_F640[] = "__OTR__luigi_raceway_data/luigi_raceway_data_seg6_gfx_F640"; static const ALIGN_ASSET(2) char d_course_luigi_raceway_dl_F640[] = "__OTR__luigi_raceway_data/d_course_luigi_raceway_dl_F640"; diff --git a/include/assets/rainbow_road_data.h b/include/assets/rainbow_road_data.h index 830110eb3..6bfff60e2 100644 --- a/include/assets/rainbow_road_data.h +++ b/include/assets/rainbow_road_data.h @@ -190,11 +190,35 @@ static const char* d_course_rainbow_road_static_tluts[] = { gTLUTRainbowRoadNeonToad, }; -static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom"; +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom1[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom1"; -static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario"; +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom2[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom2"; -static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo"; +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom3[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom3"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom4[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom4"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mushroom5[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mushroom5"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario1[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario1"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario2[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario2"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario3[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario3"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario4[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario4"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_mario5[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_mario5"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo1[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo1"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo2[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo2"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo3[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo3"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo4[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo4"; + +static const ALIGN_ASSET(2) char d_course_rainbow_road_neon_boo5[] = "__OTR__rainbow_road_data/d_course_rainbow_road_neon_boo5"; static const ALIGN_ASSET(2) char gTextureRainbowRoadNeonPeach[] = "__OTR__rainbow_road_data/gTextureRainbowRoadNeonPeach"; @@ -220,10 +244,10 @@ static const char* d_course_rainbow_road_static_textures[] = { gTextureRainbowRoadNeonToad, }; -static const ALIGN_ASSET(2) char d_course_rainbow_road_light1[] = "__OTR__rainbow_road_data/d_course_rainbow_road_light1"; - static const ALIGN_ASSET(2) char rainbow_road_data_seg6_lights_12010[] = "__OTR__rainbow_road_data/rainbow_road_data_seg6_lights_12010"; +static const ALIGN_ASSET(2) char d_course_rainbow_road_light1[] = "__OTR__rainbow_road_data/d_course_rainbow_road_light1"; + static const ALIGN_ASSET(2) char d_course_rainbow_road_sphere[] = "__OTR__rainbow_road_data/d_course_rainbow_road_sphere"; static const ALIGN_ASSET(2) char d_course_rainbow_road_reflection_map_metal[] = "__OTR__rainbow_road_data/d_course_rainbow_road_reflection_map_metal"; diff --git a/src/render_objects.c b/src/render_objects.c index ee0fa7592..89fad088e 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -2081,7 +2081,8 @@ void render_texture_tile_rgba32_block(s16 x, s16 y, u8* texture, u32 width, u32 void render_game_logo(s16 x, s16 y) { int32_t height = 128; - int32_t width = ResourceGetTexWidthByName(logo_mario_kart_64) * height / ResourceGetTexHeightByName(logo_mario_kart_64); + int32_t width = + ResourceGetTexWidthByName(logo_mario_kart_64) * height / ResourceGetTexHeightByName(logo_mario_kart_64); render_texture_tile_rgba32_block(x, y, logo_mario_kart_64, width, height); } @@ -2706,7 +2707,7 @@ void render_digital_speedometer(s32 playerIdx) { size_t len = (size_t) snprintf(str, sizeof(str), "%.2f", speed); if (len >= sizeof(str)) { - printf("[render_objects.c] [render_digital_speedometer] str buffer too small, characters were discarded!\n"); + printf("[render_objects.c] [render_digital_speedometer] str buffer too small, characters were discarded!\n"); } text_draw_wide(270, 224, str, 0, 0.5f, 0.5f); @@ -2747,8 +2748,8 @@ void func_8004EF9C(s32 arg0) { 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, 0x000000FF, - 0x000000FF, temp_v0, temp_t0, temp_v0, temp_t0); + func_8004D37C(0x00000104, 0x0000003C, CM_GetPropsCourseId(arg0)->Minimap.Texture, 0x000000FF, 0x000000FF, + 0x000000FF, 0x000000FF, temp_v0, temp_t0, temp_v0, temp_t0); } void set_minimap_finishline_position(s32 playerId) { @@ -2812,7 +2813,7 @@ void draw_minimap_character(s32 arg0, s32 playerId, s32 characterId) { x = (center - (CM_GetProps()->Minimap.Width / 2)) + CM_GetProps()->Minimap.PlayerX + (s16) (thing0); y = (CM_GetProps()->Minimap.Pos[arg0].Y - (CM_GetProps()->Minimap.Height / 2)) + - CM_GetProps()->Minimap.PlayerY + (s16) (thing1); + CM_GetProps()->Minimap.PlayerY + (s16) (thing1); if (characterId != 8) { if ((gGPCurrentRaceRankByPlayerId[playerId] == 0) && (gModeSelection != 3) && (gModeSelection != 1)) { func_80046424(x, y, player->rotation[1] + 0x8000, 1.0f, @@ -2834,7 +2835,6 @@ void draw_minimap_character(s32 arg0, s32 playerId, s32 characterId) { // @port Resume Interpolation, if interpolated later remove this tag FrameInterpolation_ShouldInterpolateFrame(true); - } #else GLOBAL_ASM("asm/non_matchings/render_objects/draw_minimap_character.s") @@ -3543,7 +3543,6 @@ void func_80051ABC(s16 arg0, s32 arg1) { func_800519D4(objectIndex, object->unk_09C, arg0 - object->unk_09E); FrameInterpolation_RecordCloseChild(); - } } else { func_8004B6C4(255, 255, 255); @@ -4027,6 +4026,14 @@ void func_80055EF4(s32 objectIndex, UNUSED s32 arg1) { } } +Vtx common_vtx_neon[] = { + { { { -32, -31, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, -31, 0 }, 0, { 4032, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, 31, 0 }, 0, { 4032, 3968 }, { 255, 255, 255, 255 } } }, + { { { -32, 31, 0 }, 0, { 0, 3968 }, { 255, 255, 255, 255 } } }, + +}; + void render_object_neon(s32 cameraId) { Camera* camera; s32 objectIndex; @@ -4040,10 +4047,14 @@ void render_object_neon(s32 cameraId) { FrameInterpolation_RecordOpenChild(object, TAG_OBJECT((objectIndex << 8) + i)); if ((object->state >= 2) && (is_obj_index_flag_status_inactive(objectIndex, 0x00080000) != 0) && (is_object_visible_on_camera(objectIndex, camera, 0x2AABU) != 0)) { - Vtx* vtx = (Vtx*) LOAD_ASSET(common_vtx_hedgehog); object->orientation[1] = angle_between_object_camera(objectIndex, camera); - draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8*) object->activeTLUT, - object->activeTexture, vtx, 0x00000040, 0x00000040, 0x00000040, 0x00000020); + rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, D_0D007D78); + gDPLoadTLUT_pal256(gDisplayListHead++, object->activeTLUT); + rsp_load_texture(object->activeTexture, 64, 64); + gSPVertex(gDisplayListHead++, common_vtx_neon, 4, 0); + gSPDisplayList(gDisplayListHead++, common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } FrameInterpolation_RecordCloseChild(); } diff --git a/src/update_objects.c b/src/update_objects.c index 5b2758466..990646a74 100644 --- a/src/update_objects.c +++ b/src/update_objects.c @@ -756,7 +756,10 @@ void update_neon_texture(s32 objectIndex) { // I have no idea why this typecast works gObjectList[objectIndex].activeTLUT = (u8*) ((u32*) gObjectList[objectIndex].tlutList + (gObjectList[objectIndex].textureListIndex * 128)); - gObjectList[objectIndex].activeTexture = gObjectList[objectIndex].textureList; + int idx = gObjectList[objectIndex].textureListIndex; + char* texture = gObjectList[objectIndex].textureList[idx]; + gObjectList[objectIndex].activeTexture = + gObjectList[objectIndex].textureList[gObjectList[objectIndex].textureListIndex]; } void func_80073514(s32 objectIndex) { @@ -3259,10 +3262,10 @@ void verify_probability_table(char* str, const ItemProbabilities* probs, int16_t getProbabilityArray(probs, itemProbabilities); size_t count = 0; for (size_t i = 0; i < ITEM_MAX; i++) { - //printf("prob %d ", itemProbabilities[i]); + // printf("prob %d ", itemProbabilities[i]); count += itemProbabilities[i]; } - //printf("\n"); + // printf("\n"); if (count != 100) { printf("update_objects.c::verify_probability_table\n %s table for rank %d is imba %d/100\n", str, rank, count); @@ -3289,7 +3292,7 @@ u8 gen_random_item(s16 rank, s16 option) { switch (gModeSelection) { case GRAND_PRIX: - switch(option) { + switch (option) { case HUMAN_TABLE: distributionTable = &grandPrixHumanProbabilityTable[rank]; verify_probability_table("Human", distributionTable, rank); @@ -4099,14 +4102,16 @@ void func_80085BB4(s32 objectIndex) { object_next_state(objectIndex); } -const char* sNeonMushroomList[] = { d_course_rainbow_road_neon_mushroom }; +const char* sNeonMushroomList[] = { d_course_rainbow_road_neon_mushroom1, d_course_rainbow_road_neon_mushroom2, + d_course_rainbow_road_neon_mushroom3, d_course_rainbow_road_neon_mushroom4, + d_course_rainbow_road_neon_mushroom5 }; void init_obj_neon_mushroom(s32 objectIndex) { set_obj_origin_pos(objectIndex, xOrientation * -1431.0, 827.0f, -2957.0f); init_texture_object(objectIndex, load_lakitu_tlut_x64(d_course_rainbow_road_neon_mushroom_tlut_list, ARRAY_COUNT(d_course_rainbow_road_neon_mushroom_tlut_list)), - d_course_rainbow_road_neon_mushroom, 0x40U, (u16) 0x00000040); + sNeonMushroomList, 0x40U, (u16) 0x00000040); func_80085BB4(objectIndex); } @@ -4142,14 +4147,16 @@ void func_80085CA0(s32 objectIndex) { } } -const char* sNeonList[] = { d_course_rainbow_road_neon_mario }; +const char* sNeonMarioList[] = { d_course_rainbow_road_neon_mario1, d_course_rainbow_road_neon_mario2, + d_course_rainbow_road_neon_mario3, d_course_rainbow_road_neon_mario4, + d_course_rainbow_road_neon_mario5 }; void func_80085DB8(s32 objectIndex) { set_obj_origin_pos(objectIndex, xOrientation * 799.0, 1193.0f, -5891.0f); init_texture_object(objectIndex, load_lakitu_tlut_x64(d_course_rainbow_road_neon_mario_tlut_list, ARRAY_COUNT(d_course_rainbow_road_neon_mario_tlut_list)), - d_course_rainbow_road_neon_mario, 0x40U, (u16) 0x00000040); + sNeonMarioList, 0x40U, (u16) 0x00000040); func_80085BB4(objectIndex); } @@ -4176,14 +4183,16 @@ void func_80085E38(s32 objectIndex) { } } -const char* sNeonBooList[] = { d_course_rainbow_road_neon_boo }; +const char* sNeonBooList[] = { d_course_rainbow_road_neon_boo1, d_course_rainbow_road_neon_boo2, + d_course_rainbow_road_neon_boo3, d_course_rainbow_road_neon_boo4, + d_course_rainbow_road_neon_boo5 }; void func_80085EF8(s32 objectIndex) { set_obj_origin_pos(objectIndex, xOrientation * -2013.0, 555.0f, 0.0f); init_texture_object(objectIndex, load_lakitu_tlut_x64(d_course_rainbow_road_neon_boo_tlut_list, ARRAY_COUNT(d_course_rainbow_road_neon_boo_tlut_list)), - d_course_rainbow_road_neon_boo, 0x40U, (u16) 0x00000040); + sNeonBooList, 0x40U, (u16) 0x00000040); func_80085BB4(objectIndex); } @@ -4229,7 +4238,7 @@ void func_80085F74(s32 objectIndex) { void func_80086074(s32 objectIndex, s32 arg1) { set_obj_origin_pos(objectIndex, D_800E6734[arg1][0] * xOrientation, D_800E6734[arg1][1], D_800E6734[arg1][2]); init_texture_object(objectIndex, d_course_rainbow_road_static_tluts[arg1], - d_course_rainbow_road_static_textures[arg1], 64, 64); + &d_course_rainbow_road_static_textures[arg1], 64, 64); func_80085BB4(objectIndex); } #else diff --git a/yamls/us/rainbow_road_data.yml b/yamls/us/rainbow_road_data.yml index bf3d46997..cf297cdde 100644 --- a/yamls/us/rainbow_road_data.yml +++ b/yamls/us/rainbow_road_data.yml @@ -412,30 +412,141 @@ gTLUTRainbowRoadNeonToad: height: 16 format: rgba16 ctype: u16 -d_course_rainbow_road_neon_mushroom: - symbol: d_course_rainbow_road_neon_mushroom +d_course_rainbow_road_neon_mushroom1: + symbol: d_course_rainbow_road_neon_mushroom1 type: texture offset: 0x8000 width: 64 height: 64 format: ci8 ctype: u8 -d_course_rainbow_road_neon_mario: - symbol: d_course_rainbow_road_neon_mario + tlut_symbol: gTLUTRainbowRoadNeonMushroom1 +d_course_rainbow_road_neon_mushroom2: + symbol: d_course_rainbow_road_neon_mushroom2 + type: texture + offset: 0x8000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMushroom2 +d_course_rainbow_road_neon_mushroom3: + symbol: d_course_rainbow_road_neon_mushroom3 + type: texture + offset: 0x8000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMushroom3 +d_course_rainbow_road_neon_mushroom4: + symbol: d_course_rainbow_road_neon_mushroom4 + type: texture + offset: 0x8000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMushroom4 +d_course_rainbow_road_neon_mushroom5: + symbol: d_course_rainbow_road_neon_mushroom5 + type: texture + offset: 0x8000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMushroom5 +d_course_rainbow_road_neon_mario1: + symbol: d_course_rainbow_road_neon_mario1 type: texture offset: 0x9000 width: 64 height: 64 format: ci8 ctype: u8 -d_course_rainbow_road_neon_boo: - symbol: d_course_rainbow_road_neon_boo + tlut_symbol: gTLUTRainbowRoadNeonMario1 +d_course_rainbow_road_neon_mario2: + symbol: d_course_rainbow_road_neon_mario2 + type: texture + offset: 0x9000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMario2 +d_course_rainbow_road_neon_mario3: + symbol: d_course_rainbow_road_neon_mario3 + type: texture + offset: 0x9000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMario3 +d_course_rainbow_road_neon_mario4: + symbol: d_course_rainbow_road_neon_mario4 + type: texture + offset: 0x9000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMario4 +d_course_rainbow_road_neon_mario5: + symbol: d_course_rainbow_road_neon_mario5 + type: texture + offset: 0x9000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonMario5 +d_course_rainbow_road_neon_boo1: + symbol: d_course_rainbow_road_neon_boo1 type: texture offset: 0xA000 width: 64 height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBoo1 +d_course_rainbow_road_neon_boo2: + symbol: d_course_rainbow_road_neon_boo2 + type: texture + offset: 0xA000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBoo2 +d_course_rainbow_road_neon_boo3: + symbol: d_course_rainbow_road_neon_boo3 + type: texture + offset: 0xA000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBoo3 +d_course_rainbow_road_neon_boo4: + symbol: d_course_rainbow_road_neon_boo4 + type: texture + offset: 0xA000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBoo4 +d_course_rainbow_road_neon_boo5: + symbol: d_course_rainbow_road_neon_boo5 + type: texture + offset: 0xA000 + width: 64 + height: 64 + format: ci8 + ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBoo5 gTextureRainbowRoadNeonPeach: symbol: gTextureRainbowRoadNeonPeach type: texture @@ -444,6 +555,7 @@ gTextureRainbowRoadNeonPeach: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonPeach gTextureRainbowRoadNeonLuigi: symbol: gTextureRainbowRoadNeonLuigi type: texture @@ -452,6 +564,7 @@ gTextureRainbowRoadNeonLuigi: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonLuigi gTextureRainbowRoadNeonDonkeyKong: symbol: gTextureRainbowRoadNeonDonkeyKong type: texture @@ -460,6 +573,7 @@ gTextureRainbowRoadNeonDonkeyKong: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonDonkeyKong gTextureRainbowRoadNeonYoshi: symbol: gTextureRainbowRoadNeonYoshi type: texture @@ -468,6 +582,7 @@ gTextureRainbowRoadNeonYoshi: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonYoshi gTextureRainbowRoadNeonBowser: symbol: gTextureRainbowRoadNeonBowser type: texture @@ -476,6 +591,7 @@ gTextureRainbowRoadNeonBowser: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonBowser gTextureRainbowRoadNeonWario: symbol: gTextureRainbowRoadNeonWario type: texture @@ -484,6 +600,7 @@ gTextureRainbowRoadNeonWario: height: 64 format: ci8 ctype: u8 + tlut_symbol: gTLUTRainbowRoadNeonWario gTextureRainbowRoadNeonToad: symbol: gTextureRainbowRoadNeonToad type: texture @@ -492,7 +609,7 @@ gTextureRainbowRoadNeonToad: height: 64 format: ci8 ctype: u8 - + tlut_symbol: gTLUTRainbowRoadNeonToad d_course_rainbow_road_light1: symbol: d_course_rainbow_road_light1 type: lights