summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2024-09-11 00:20:55 +0200
committerGitHub <noreply@github.com>2024-09-10 16:20:55 -0600
commitb36b9e318095e0ae5fc720319a55418d9aa5a4c3 (patch)
tree1f0b6e5784ba248722a86c464cf32dd9f4a1518e /src
parent47e95c0e182ed21486648d88e2ce52aa05d2fe7c (diff)
[enhancement] Disable Culling (#58)
* less intrusif possible way to disable culling * forget cloud and star * some change and add gFarFrustrum * reduce range of gFarFrustrum * minor rename of a CVar --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/actors/banana/render.inc.c3
-rw-r--r--src/actors/box_truck/render.inc.c3
-rw-r--r--src/actors/car/render.inc.c3
-rw-r--r--src/actors/cow/render.inc.c3
-rw-r--r--src/actors/fake_item_box/render.inc.c3
-rw-r--r--src/actors/falling_rock/render.inc.c4
-rw-r--r--src/actors/item_box/render.inc.c3
-rw-r--r--src/actors/mario_sign/render.inc.c3
-rw-r--r--src/actors/paddle_boat/render.inc.c4
-rw-r--r--src/actors/palm_tree/render.inc.c4
-rw-r--r--src/actors/piranha_plant/render.inc.c4
-rw-r--r--src/actors/railroad_crossing/render.inc.c4
-rw-r--r--src/actors/school_bus/render.inc.c5
-rw-r--r--src/actors/tanker_truck/render.inc.c4
-rw-r--r--src/actors/train/render.inc.c12
-rw-r--r--src/actors/trees/render.inc.c44
-rw-r--r--src/actors/wario_sign/render.inc.c4
-rw-r--r--src/actors/yoshi_egg/render.inc.c5
-rw-r--r--src/code_80005FD0.c4
-rw-r--r--src/code_80086E70.c10
-rw-r--r--src/main.h2
-rw-r--r--src/math_util_2.c4
-rw-r--r--src/os/guPerspectiveF.c3
-rw-r--r--src/port/ui/ImguiUI.cpp4
-rw-r--r--src/racing/actors.c9
-rw-r--r--src/render_objects.c8
-rw-r--r--src/render_player.c4
-rw-r--r--src/update_objects.c5
28 files changed, 162 insertions, 6 deletions
diff --git a/src/actors/banana/render.inc.c b/src/actors/banana/render.inc.c
index ae87fc48d..e33938bd2 100644
--- a/src/actors/banana/render.inc.c
+++ b/src/actors/banana/render.inc.c
@@ -17,6 +17,9 @@ void render_actor_banana(Camera* camera, UNUSED Mat4 arg1, struct BananaActor* b
f32 temp = is_within_render_distance(camera->pos, banana->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
490000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp = MAX(temp, 0.0f);
+ }
if (temp < 0.0f) {
actor_not_rendered(camera, (struct Actor*) banana);
return;
diff --git a/src/actors/box_truck/render.inc.c b/src/actors/box_truck/render.inc.c
index b18b22643..bf5df9e30 100644
--- a/src/actors/box_truck/render.inc.c
+++ b/src/actors/box_truck/render.inc.c
@@ -18,6 +18,9 @@ void render_actor_box_truck(Camera* arg0, struct Actor* arg1) {
UNUSED s32 pad2[32];
f32 temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
if (temp_f0 < 0.0f) {
return;
}
diff --git a/src/actors/car/render.inc.c b/src/actors/car/render.inc.c
index 3ac8ec1c1..a00a8d4a7 100644
--- a/src/actors/car/render.inc.c
+++ b/src/actors/car/render.inc.c
@@ -17,6 +17,9 @@ void render_actor_car(Camera* arg0, struct Actor* arg1) {
UNUSED s32 pad2[32];
f32 temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
if (!(temp_f0 < 0.0f)) {
if (CVarGetInteger("gDisableLod", 0) == 1) {
diff --git a/src/actors/cow/render.inc.c b/src/actors/cow/render.inc.c
index 0cf347530..e55154c03 100644
--- a/src/actors/cow/render.inc.c
+++ b/src/actors/cow/render.inc.c
@@ -14,7 +14,8 @@
*/
void render_actor_cow(Camera* camera, Mat4 arg1, struct Actor* arg2) {
if (is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
- 4000000.0f) < 0) {
+ 4000000.0f) < 0 &&
+ CVarGetInteger("gNoCulling", 0) == 0) {
return;
}
diff --git a/src/actors/fake_item_box/render.inc.c b/src/actors/fake_item_box/render.inc.c
index 0ef7e6e69..7d0dab71e 100644
--- a/src/actors/fake_item_box/render.inc.c
+++ b/src/actors/fake_item_box/render.inc.c
@@ -25,7 +25,8 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
f32 someMultiplier;
if (is_within_render_distance(camera->pos, fakeItemBox->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1],
- 1000000.0f) < 0) {
+ 1000000.0f) < 0 &&
+ CVarGetInteger("gNoCulling", 0) == 0) {
actor_not_rendered(camera, (struct Actor*) fakeItemBox);
return;
}
diff --git a/src/actors/falling_rock/render.inc.c b/src/actors/falling_rock/render.inc.c
index b9beb5ec6..b7a23088b 100644
--- a/src/actors/falling_rock/render.inc.c
+++ b/src/actors/falling_rock/render.inc.c
@@ -23,6 +23,10 @@ void render_actor_falling_rock(Camera* camera, struct FallingRock* rock) {
height = is_within_render_distance(camera->pos, rock->pos, camera->rot[1], 400.0f, gCameraZoom[camera - camera1],
4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ height = CLAMP(height, 0.0f, 250000.0f);
+ }
+
if (height < 0.0f) {
return;
}
diff --git a/src/actors/item_box/render.inc.c b/src/actors/item_box/render.inc.c
index 7024709d7..d4a96a0e3 100644
--- a/src/actors/item_box/render.inc.c
+++ b/src/actors/item_box/render.inc.c
@@ -28,6 +28,9 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
temp_f0 = is_within_render_distance(camera->pos, item_box->pos, camera->rot[1], 0.0f, gCameraZoom[camera - camera1],
4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = CLAMP(temp_f0, 0.0f, 600000.0f);
+ }
if (!(temp_f0 < 0.0f) && !(600000.0f < temp_f0)) {
if ((item_box->state == 2) && (temp_f0 < 100000.0f)) {
someRot[0] = 0;
diff --git a/src/actors/mario_sign/render.inc.c b/src/actors/mario_sign/render.inc.c
index a58668a4b..1c72c8394 100644
--- a/src/actors/mario_sign/render.inc.c
+++ b/src/actors/mario_sign/render.inc.c
@@ -20,6 +20,9 @@ void render_actor_mario_sign(Camera* arg0, UNUSED Mat4 arg1, struct Actor* arg2)
}
unk = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 16000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ unk = MAX(unk, 0.0f);
+ }
if (!(unk < 0.0f)) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
diff --git a/src/actors/paddle_boat/render.inc.c b/src/actors/paddle_boat/render.inc.c
index 8f0f5353a..26d65f160 100644
--- a/src/actors/paddle_boat/render.inc.c
+++ b/src/actors/paddle_boat/render.inc.c
@@ -32,6 +32,10 @@ void render_actor_paddle_boat(Camera* arg0, struct PaddleWheelBoat* boat, UNUSED
temp = is_within_render_distance(arg0->pos, boat->pos, arg0->rot[1], 90000.0f, gCameraZoom[arg0 - camera1],
9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp = MAX(temp, 0.0f);
+ }
+
if (temp < 0.0f) {
return;
}
diff --git a/src/actors/palm_tree/render.inc.c b/src/actors/palm_tree/render.inc.c
index e551e8c86..064e0fe13 100644
--- a/src/actors/palm_tree/render.inc.c
+++ b/src/actors/palm_tree/render.inc.c
@@ -23,6 +23,10 @@ void render_actor_palm_tree(Camera* arg0, UNUSED Mat4 arg1, struct PalmTree* arg
temp_f0 =
is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (!(temp_f0 < 0.0f)) {
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.0f);
diff --git a/src/actors/piranha_plant/render.inc.c b/src/actors/piranha_plant/render.inc.c
index b14fd5d63..88838f603 100644
--- a/src/actors/piranha_plant/render.inc.c
+++ b/src/actors/piranha_plant/render.inc.c
@@ -27,6 +27,10 @@ void render_actor_piranha_plant(Camera* arg0, Mat4 arg1, struct PiranhaPlant* ar
temp_f0 = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 1000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
switch (temp_lo) {
diff --git a/src/actors/railroad_crossing/render.inc.c b/src/actors/railroad_crossing/render.inc.c
index 3fe9eb98a..e91f56438 100644
--- a/src/actors/railroad_crossing/render.inc.c
+++ b/src/actors/railroad_crossing/render.inc.c
@@ -16,6 +16,10 @@ void render_actor_railroad_crossing(Camera* arg0, struct RailroadCrossing* rr_cr
f32 unk = is_within_render_distance(arg0->pos, rr_crossing->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1],
4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ unk = MAX(unk, 0.0f);
+ }
+
if (!(unk < 0.0f)) {
mtxf_pos_rotation_xyz(sp40, rr_crossing->pos, rr_crossing->rot);
diff --git a/src/actors/school_bus/render.inc.c b/src/actors/school_bus/render.inc.c
index 47c40ef1f..da9014033 100644
--- a/src/actors/school_bus/render.inc.c
+++ b/src/actors/school_bus/render.inc.c
@@ -19,6 +19,11 @@ void render_actor_school_bus(Camera* arg0, struct Actor* arg1) {
temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
+
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
diff --git a/src/actors/tanker_truck/render.inc.c b/src/actors/tanker_truck/render.inc.c
index f28eb60de..7411b3315 100644
--- a/src/actors/tanker_truck/render.inc.c
+++ b/src/actors/tanker_truck/render.inc.c
@@ -17,6 +17,10 @@ void render_actor_tanker_truck(Camera* camera, struct Actor* arg1) {
f32 temp_f0 = is_within_render_distance(camera->pos, arg1->pos, camera->rot[1], 2500.0f,
gCameraZoom[camera - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (!(temp_f0 < 0.0f)) {
if (CVarGetInteger("gDisableLod", 0) == 1) {
diff --git a/src/actors/train/render.inc.c b/src/actors/train/render.inc.c
index 4f4c26d6a..174a0ab29 100644
--- a/src/actors/train/render.inc.c
+++ b/src/actors/train/render.inc.c
@@ -22,6 +22,10 @@ void render_actor_train_engine(Camera* camera, struct TrainCar* actor) {
f32 distance = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2500.0f,
gCameraZoom[camera - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ distance = MAX(distance, 0.0f);
+ }
+
if (distance < 0.0f) {
return;
}
@@ -173,6 +177,10 @@ void render_actor_train_tender(Camera* camera, struct TrainCar* actor) {
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 625.0f,
gCameraZoom[camera - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -262,6 +270,10 @@ void render_actor_train_passenger_car(Camera* camera, struct TrainCar* actor) {
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2025.0f,
gCameraZoom[camera - camera1], 9000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
diff --git a/src/actors/trees/render.inc.c b/src/actors/trees/render.inc.c
index 21f39c180..e3042a8f3 100644
--- a/src/actors/trees/render.inc.c
+++ b/src/actors/trees/render.inc.c
@@ -24,6 +24,10 @@ void render_actor_tree_mario_raceway(Camera* camera, Mat4 arg1, struct Actor* ar
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
16000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -59,6 +63,10 @@ void render_actor_tree_yoshi_valley(Camera* camera, Mat4 arg1, struct Actor* arg
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -94,6 +102,10 @@ void render_actor_tree_royal_raceway(Camera* camera, Mat4 arg1, struct Actor* ar
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -129,6 +141,10 @@ void render_actor_tree_moo_moo_farm(Camera* camera, Mat4 arg1, struct Actor* arg
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 6250000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -158,6 +174,10 @@ void func_80299864(Camera* camera, Mat4 arg1, struct Actor* arg2) {
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -212,6 +232,10 @@ void render_actor_tree_bowser_castle(Camera* camera, Mat4 arg1, struct Actor* ar
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -247,6 +271,10 @@ void render_actor_bush_bowser_castle(Camera* camera, Mat4 arg1, struct Actor* ar
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 640000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -282,6 +310,10 @@ void render_actor_tree_frappe_snowland(Camera* camera, Mat4 arg1, struct Actor*
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -316,6 +348,10 @@ void render_actor_tree_cactus1_kalimari_desert(Camera* camera, Mat4 arg1, struct
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -350,6 +386,10 @@ void render_actor_tree_cactus2_kalimari_desert(Camera* camera, Mat4 arg1, struct
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
@@ -384,6 +424,10 @@ void render_actor_tree_cactus3_kalimari_desert(Camera* camera, Mat4 arg1, struct
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
diff --git a/src/actors/wario_sign/render.inc.c b/src/actors/wario_sign/render.inc.c
index 9327bfbe6..3658b7efb 100644
--- a/src/actors/wario_sign/render.inc.c
+++ b/src/actors/wario_sign/render.inc.c
@@ -15,6 +15,10 @@ void render_actor_wario_sign(Camera* arg0, struct Actor* arg1) {
f32 unk =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 16000000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ unk = MAX(unk, 0.0f);
+ }
+
if (!(unk < 0.0f)) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
diff --git a/src/actors/yoshi_egg/render.inc.c b/src/actors/yoshi_egg/render.inc.c
index 6c2a7a0cc..1dd53965d 100644
--- a/src/actors/yoshi_egg/render.inc.c
+++ b/src/actors/yoshi_egg/render.inc.c
@@ -21,6 +21,11 @@ void render_actor_yoshi_egg(Camera* arg0, Mat4 arg1, struct YoshiValleyEgg* egg,
if (gGamestate != CREDITS_SEQUENCE) {
temp_f0 = is_within_render_distance(arg0->pos, egg->pos, arg0->rot[1], 200.0f, gCameraZoom[arg0 - camera1],
16000000.0f);
+
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = MAX(temp_f0, 0.0f);
+ }
+
if (temp_f0 < 0.0f) {
return;
}
diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c
index 0053a4b16..ffacdf4e4 100644
--- a/src/code_80005FD0.c
+++ b/src/code_80005FD0.c
@@ -667,6 +667,10 @@ s32 set_vehicle_render_distance_flags(Vec3f vehiclePos, f32 renderDistance, s32
}
}
}
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ flag |= (RENDER_VEHICLE << PLAYER_ONE) | (RENDER_VEHICLE << PLAYER_TWO) | (RENDER_VEHICLE << PLAYER_THREE) |
+ (RENDER_VEHICLE << PLAYER_FOUR);
+ }
return flag;
}
diff --git a/src/code_80086E70.c b/src/code_80086E70.c
index db5aa3171..e138aed68 100644
--- a/src/code_80086E70.c
+++ b/src/code_80086E70.c
@@ -1306,6 +1306,10 @@ bool is_object_visible_on_camera(s32 objectIndex, Camera* camera, u16 angle) {
u16 temp_t2;
s32 var_t0;
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ return true;
+ }
+
var_t0 = false;
temp_t2 = (get_angle_between_xy(camera->pos[0], gObjectList[objectIndex].pos[0], camera->pos[2],
gObjectList[objectIndex].pos[2]) +
@@ -1325,6 +1329,9 @@ void func_8008A1D0(s32 objectIndex, s32 cameraId, s32 arg2, s32 arg3) {
camera = &camera1[cameraId];
set_object_flag_status_false(objectIndex, 0x00100000 | VISIBLE);
temp_v0 = get_horizontal_distance_to_camera(objectIndex, camera);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_v0 = MIN(temp_v0, arg3 * arg3);
+ }
if (temp_v0 < 0x2711U) {
var_a2 = 0x5555;
} else if (temp_v0 < 0x9C41U) {
@@ -1368,6 +1375,9 @@ s32 func_8008A364(s32 objectIndex, s32 cameraId, u16 arg2, s32 arg3) {
camera = &camera1[cameraId];
set_object_flag_status_false(objectIndex, 0x00020000 | VISIBLE);
dist = get_horizontal_distance_to_camera(objectIndex, camera);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ dist = MIN(dist, (arg3 * arg3) - 1);
+ }
if (dist < (arg3 * arg3)) {
set_object_flag_status_true(objectIndex, 0x00020000);
if (dist < 0x2711U) {
diff --git a/src/main.h b/src/main.h
index 55611629f..2faec36f6 100644
--- a/src/main.h
+++ b/src/main.h
@@ -11,7 +11,7 @@
#define MESG_START_GFX_SPTASK 103
#define MESG_NMI_REQUEST 104
-#define MTX_HUD_POOL_SIZE 800
+#define MTX_HUD_POOL_SIZE 1600
#ifdef AVOID_UB
#define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE
diff --git a/src/math_util_2.c b/src/math_util_2.c
index 2a6a681ba..3e0346b80 100644
--- a/src/math_util_2.c
+++ b/src/math_util_2.c
@@ -456,6 +456,10 @@ bool is_particle_on_screen(Vec3f arg0, Camera* arg1, u16 arg2) {
u16 temp_t9;
s32 ret;
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ return true;
+ }
+
ret = false;
temp_t9 = (get_angle_between_xy(arg1->pos[0], arg0[0], arg1->pos[2], arg0[2]) + (arg2 / 2)) - arg1->rot[1];
if ((temp_t9 >= 0) && (arg2 >= temp_t9)) {
diff --git a/src/os/guPerspectiveF.c b/src/os/guPerspectiveF.c
index 1a6150a68..062d42751 100644
--- a/src/os/guPerspectiveF.c
+++ b/src/os/guPerspectiveF.c
@@ -4,6 +4,9 @@ void guPerspectiveF(float mf[4][4], u16* perspNorm, float fovy, float aspect, fl
float yscale;
int row;
int col;
+ if (CVarGetInteger("gNoCulling", 0)) {
+ far = CVarGetFloat("gFarFrustrum", 10000.0f);
+ }
guMtxIdentF(mf);
fovy *= GU_PI / 180.0;
yscale = cosf(fovy / 2) / sinf(fovy / 2);
diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp
index a4f39a1ad..69d3d82e9 100644
--- a/src/port/ui/ImguiUI.cpp
+++ b/src/port/ui/ImguiUI.cpp
@@ -463,6 +463,10 @@ void DrawEnhancementsMenu() {
{ .tooltip = "Renders game objects regardless of camera distance" });
UIWidgets::CVarCheckbox("Select any star from menu", "gCompletedGame",
{ .tooltip = "Unlocks extra mode and sets all gold cups." });
+ UIWidgets::CVarCheckbox("Disable Culling", "gNoCulling", { .tooltip = "Disable original culling of mk64" });
+ UIWidgets::CVarSliderFloat(
+ "Far Frustrum", "gFarFrustrum", 0.0f, 10000.0f, 10000.0f,
+ { .tooltip = "Say how Far the Frustrum are when 'Disable Culling' are enable", .step = 10.0f });
ImGui::EndMenu();
}
diff --git a/src/racing/actors.c b/src/racing/actors.c
index 164c82fba..38a4b5438 100644
--- a/src/racing/actors.c
+++ b/src/racing/actors.c
@@ -630,7 +630,8 @@ void render_palm_trees(Camera* camera, Mat4 arg1, UNUSED struct Actor* actor) {
spD4[2] = var_s1->pos[2];
if (is_within_render_distance(camera->pos, spD4, camera->rot[1], 0.0f, gCameraZoom[camera - camera1], var_f22) <
- 0.0f) {
+ 0.0f &&
+ CVarGetInteger("gNoCulling", 0) == 0) {
var_s1++;
continue;
}
@@ -691,6 +692,9 @@ void render_actor_shell(Camera* camera, Mat4 matrix, struct ShellActor* shell) {
f32 temp_f0 =
is_within_render_distance(camera->pos, shell->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 490000.0f);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_f0 = CLAMP(temp_f0, 0.0f, 40000.0f);
+ }
s32 maxObjectsReached;
if (temp_f0 < 0.0f) {
actor_not_rendered(camera, (struct Actor*) shell);
@@ -754,7 +758,8 @@ UNUSED void func_8029ABD4(f32* pos, s16 state) {
void func_8029AC18(Camera* camera, Mat4 arg1, struct Actor* arg2) {
if (is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
- 4000000.0f) < 0) {
+ 4000000.0f) < 0 &&
+ CVarGetInteger("gNoCulling", 0) == 0) {
return;
}
diff --git a/src/render_objects.c b/src/render_objects.c
index f1fd51f9b..8ea3f0080 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -3359,6 +3359,9 @@ void render_object_boos(s32 arg0) {
objectIndex = indexObjectList3[someIndex];
if (gObjectList[objectIndex].state >= 2) {
temp_s2 = func_8008A364(objectIndex, arg0, 0x4000U, 0x00000320);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ temp_s2 = MIN(temp_s2, 0x15F91U);
+ }
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
func_800523B8(objectIndex, arg0, temp_s2);
}
@@ -4171,7 +4174,7 @@ void render_object_seagulls(s32 arg0) {
for (i = 0; i < NUM_SEAGULLS; i++) {
var_s1 = indexObjectList2[i];
- if (func_8008A364(var_s1, arg0, 0x5555U, 0x000005DC) < 0x9C401) {
+ if (func_8008A364(var_s1, arg0, 0x5555U, 0x000005DC) < 0x9C401 && CVarGetInteger("gNoCulling", 0) == 0) {
D_80165908 = 1;
func_800722A4(var_s1, 2);
}
@@ -4232,6 +4235,9 @@ void render_object_hedgehogs(s32 arg0) {
for (someIndex = 0; someIndex < NUM_HEDGEHOGS; someIndex++) {
test = indexObjectList2[someIndex];
something = func_8008A364(test, arg0, 0x4000U, 0x000003E8);
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ something = MIN(something, 0x52211U - 1);
+ }
if (is_obj_flag_status_active(test, VISIBLE) != 0) {
set_object_flag_status_true(test, 0x00200000);
if (something < 0x2711U) {
diff --git a/src/render_player.c b/src/render_player.c
index 17d04c016..990be011d 100644
--- a/src/render_player.c
+++ b/src/render_player.c
@@ -110,6 +110,10 @@ u16 check_player_camera_collision(Player* player, Camera* camera, f32 arg2, f32
s16 var_v0;
u16 ret;
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ return true;
+ }
+
ret = false;
switch (gActiveScreenMode) { /* irregular */
case SCREEN_MODE_1P:
diff --git a/src/update_objects.c b/src/update_objects.c
index 325436100..2c3c2481f 100644
--- a/src/update_objects.c
+++ b/src/update_objects.c
@@ -2788,6 +2788,11 @@ void func_800788F8(s32 objectIndex, u16 rot, Camera* camera) {
set_object_flag_status_true(objectIndex, 0x00000010);
return;
}
+ if (CVarGetInteger("gNoCulling", 0) == 1) {
+ gObjectList[objectIndex].unk_09C = (D_8018D218 + (D_8018D1E8 * temp_v0));
+ set_object_flag_status_true(objectIndex, 0x00000010);
+ return;
+ }
set_object_flag_status_false(objectIndex, 0x00000010);
}