diff --git a/src/actors/box_truck/render.inc.c b/src/actors/box_truck/render.inc.c index 2ce7647b0..b18b22643 100644 --- a/src/actors/box_truck/render.inc.c +++ b/src/actors/box_truck/render.inc.c @@ -22,6 +22,10 @@ void render_actor_box_truck(Camera* arg0, struct Actor* arg1) { return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); diff --git a/src/actors/car/render.inc.c b/src/actors/car/render.inc.c index 0d3a6a96d..3ac8ec1c1 100644 --- a/src/actors/car/render.inc.c +++ b/src/actors/car/render.inc.c @@ -19,6 +19,9 @@ void render_actor_car(Camera* arg0, struct Actor* arg1) { is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f); if (!(temp_f0 < 0.0f)) { + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); diff --git a/src/actors/piranha_plant/render.inc.c b/src/actors/piranha_plant/render.inc.c index c6f6e1ae9..b14fd5d63 100644 --- a/src/actors/piranha_plant/render.inc.c +++ b/src/actors/piranha_plant/render.inc.c @@ -53,6 +53,10 @@ void render_actor_piranha_plant(Camera* arg0, Mat4 arg1, struct PiranhaPlant* ar return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + if (90000.0f < temp_f0) { switch (temp_lo) { diff --git a/src/actors/school_bus/render.inc.c b/src/actors/school_bus/render.inc.c index dc6753074..47c40ef1f 100644 --- a/src/actors/school_bus/render.inc.c +++ b/src/actors/school_bus/render.inc.c @@ -23,6 +23,10 @@ void render_actor_school_bus(Camera* arg0, struct Actor* arg1) { return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); diff --git a/src/actors/tanker_truck/render.inc.c b/src/actors/tanker_truck/render.inc.c index 8d940dc33..f28eb60de 100644 --- a/src/actors/tanker_truck/render.inc.c +++ b/src/actors/tanker_truck/render.inc.c @@ -19,6 +19,10 @@ void render_actor_tanker_truck(Camera* camera, struct Actor* arg1) { if (!(temp_f0 < 0.0f)) { + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); diff --git a/src/actors/train/render.inc.c b/src/actors/train/render.inc.c index cdaca02f0..4f4c26d6a 100644 --- a/src/actors/train/render.inc.c +++ b/src/actors/train/render.inc.c @@ -26,6 +26,10 @@ void render_actor_train_engine(Camera* camera, struct TrainCar* actor) { return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + distance = 0.0f; + } + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot); @@ -173,6 +177,10 @@ void render_actor_train_tender(Camera* camera, struct TrainCar* actor) { return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot); @@ -258,6 +266,10 @@ void render_actor_train_passenger_car(Camera* camera, struct TrainCar* actor) { return; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + temp_f0 = 0.0f; + } + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot); diff --git a/src/actors/yoshi_egg/render.inc.c b/src/actors/yoshi_egg/render.inc.c index c7a500c0b..6c2a7a0cc 100644 --- a/src/actors/yoshi_egg/render.inc.c +++ b/src/actors/yoshi_egg/render.inc.c @@ -29,6 +29,11 @@ void render_actor_yoshi_egg(Camera* arg0, Mat4 arg1, struct YoshiValleyEgg* egg, temp_f0 = 0.0f; } + if (CVarGetInteger("gDisableLod", 0) == 1) { + arg3 = 15; + temp_f0 = 0.0f; + } + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); if ((arg3 > 12) && (arg3 < 20)) { if (temp_f0 < 640000.0f) { diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index a739b131f..de12476fc 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -442,7 +442,7 @@ void DrawEnhancementsMenu() { if (UIWidgets::BeginMenu("Gameplay")) { UIWidgets::CVarCheckbox( - "No Level of Detail (LOD)", "gDisableLOD", + "No Level of Detail (LOD)", "gDisableLod", { .tooltip = "Disable Level of Detail (LOD) to avoid models using lower poly versions at a distance" }); UIWidgets::CVarCheckbox("Ignore Rendering Limits", "gIgnoreRenderDistance", { .tooltip = "Renders game objects regardless of camera distance" }); diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index b07531eb4..6ffe45529 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -176,6 +176,12 @@ void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) arg1->pathCounter = index; index = ((index - 1) * 4) + var_a3; gSPDisplayList(gDisplayListHead++, addr[index]); + + if (CVarGetInteger("gDisableLod", 0) == 1 && gCurrentCourseId == COURSE_BOWSER_CASTLE && + (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 + } } void func_80291198(void) {