summaryrefslogtreecommitdiff
path: root/src/render_objects.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/render_objects.c')
-rw-r--r--src/render_objects.c127
1 files changed, 17 insertions, 110 deletions
diff --git a/src/render_objects.c b/src/render_objects.c
index 5e300808d..a14c3d350 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -47,6 +47,7 @@
#include "engine/Matrix.h"
#include "engine/tracks/Track.h"
#include "engine/TrackBrowser.h"
+#include "engine/sky/Sky.h"
#include "port/interpolation/FrameInterpolation.h"
#include "assets/textures/tracks/sherbet_land/sherbet_land_data.h"
@@ -3476,97 +3477,18 @@ void render_object_snowflakes_particles(void) {
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
-struct ObjectInterpData {
- s32 objectIndex;
- s16 x, y;
-};
-
-struct ObjectInterpData prevObject[OBJECT_LIST_SIZE] = { 0 };
-
-void render_clouds(s32 objectIndex, s16 x, s16 y) {
-
- // Search all recorded objects for the one we're drawing
- for (size_t i = 0; i < OBJECT_LIST_SIZE; i++) {
- if (objectIndex == prevObject[i].objectIndex) {
- // Coincidence!
- // Skip drawing the object this frame if it warped to the other side of the screen
- if ((fabs(x - prevObject[i].x) > SCREEN_WIDTH / 2) || (fabs(y - prevObject[i].y) > SCREEN_HEIGHT / 2)) {
- prevObject[objectIndex].x = x;
- prevObject[objectIndex].y = y;
- prevObject[objectIndex].objectIndex = objectIndex;
- return;
- }
- }
- }
-
- if (gObjectList[objectIndex].status & 0x10) {
-
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("render_clouds", TAG_CLOUDS(objectIndex));
-
- if (D_8018D228 != gObjectList[objectIndex].unk_0D5) {
- D_8018D228 = gObjectList[objectIndex].unk_0D5;
- func_80044DA0(gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].textureWidth,
- gObjectList[objectIndex].textureHeight);
- }
- func_80042330_unchanged(x, y, 0, gObjectList[objectIndex].sizeScaling);
- gSPVertex(gDisplayListHead++, gObjectList[objectIndex].vertex, 4, 0);
- gSPDisplayList(gDisplayListHead++, common_rectangle_display);
-
- // @port Pop the transform id.
- FrameInterpolation_RecordCloseChild();
- }
-
- // Save current cloud index and x position
- prevObject[objectIndex].x = x;
- prevObject[objectIndex].y = y;
- prevObject[objectIndex].objectIndex = objectIndex;
-}
-
-void func_800519D4(s32 objectIndex, s16 arg1, s16 arg2) {
- if (gObjectList[objectIndex].status & 0x10) {
- if (D_8018D228 != gObjectList[objectIndex].unk_0D5) {
- D_8018D228 = gObjectList[objectIndex].unk_0D5;
- func_80044DA0(gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].textureWidth,
- gObjectList[objectIndex].textureHeight);
- }
- func_8004B138(0x000000FF, 0x000000FF, 0x000000FF, gObjectList[objectIndex].primAlpha);
- func_80042330_unchanged(arg1, arg2, 0U, gObjectList[objectIndex].sizeScaling);
- gSPVertex(gDisplayListHead++, gObjectList[objectIndex].vertex, 4, 0);
- gSPDisplayList(gDisplayListHead++, common_rectangle_display);
- }
-}
-
// Render clouds
-void func_80051ABC(s16 arg0, s32 arg1) {
+void func_80051ABC(ScreenContext* screen, s16 arg0, s32 arg1) {
s32 var_s0;
s32 objectIndex;
Object* object;
D_8018D228 = 0xFF;
gSPDisplayList(gDisplayListHead++, D_0D007A60);
- if ((u8) D_8018D230 != 0) {
- func_8004B414(255, 255, 255, 255);
- for (var_s0 = 0; var_s0 < D_8018D1F0; var_s0++) {
- objectIndex = D_8018CC80[arg1 + var_s0];
- object = &gObjectList[objectIndex];
- FrameInterpolation_RecordOpenChild("stars_cloud", TAG_OBJECT(object));
-
- func_800519D4(objectIndex, object->unk_09C, arg0 - object->unk_09E);
- FrameInterpolation_RecordCloseChild();
- }
- } else {
- func_8004B6C4(255, 255, 255);
- for (var_s0 = 0; var_s0 < D_8018D1F0; var_s0++) {
- objectIndex = D_8018CC80[arg1 + var_s0];
- object = &gObjectList[objectIndex];
-
- render_clouds(objectIndex, object->unk_09C, arg0 - object->unk_09E);
- }
- }
+ DrawSkyActors(screen, arg0);
}
-void func_80051C60(s16 arg0, s32 arg1) {
+void func_80051C60(ScreenContext* screen, s16 arg0, s32 arg1) {
s16 var_s5;
s32 var_s0;
s32 objectIndex;
@@ -3590,32 +3512,17 @@ void func_80051C60(s16 arg0, s32 arg1) {
D_8018D228 = 0xFF;
gSPDisplayList(gDisplayListHead++, D_0D007A60);
-
- if ((u8) D_8018D230 != 0) {
- func_8004B414(255, 255, 255, 255);
- for (var_s0 = 0; var_s0 < D_8018D1F0; var_s0++) {
- objectIndex = D_8018CC80[arg1 + var_s0];
- object = &gObjectList[objectIndex];
- func_800519D4(objectIndex, object->unk_09C, (var_s5 - object->unk_09E) / 2);
- }
- } else {
- func_8004B6C4(255, 255, 255);
- for (var_s0 = 0; var_s0 < D_8018D1F0; var_s0++) {
- objectIndex = D_8018CC80[arg1 + var_s0];
- object = &gObjectList[objectIndex];
- render_clouds(objectIndex, object->unk_09C, (var_s5 - object->unk_09E) / 2);
- }
- }
+ DrawSkyActors(screen, arg0);
}
-void func_80051EBC(void) {
- func_80051ABC(240 - gScreenOneCtx->cameraHeight, 0); // 28
+void func_80051EBC(ScreenContext* screen) {
+ func_80051ABC(screen, 240 - screen->cameraHeight, 0); // 28
}
-void func_80051EF8(void) {
+void func_80051EF8(ScreenContext* screen) {
s16 temp_a0;
- temp_a0 = 0xF0 - gScreenOneCtx->cameraHeight;
+ temp_a0 = 0xF0 - screen->cameraHeight;
if (IsKoopaTroopaBeach()) {
temp_a0 = temp_a0 - 0x30;
} else if (IsMooMooFarm()) {
@@ -3625,13 +3532,13 @@ void func_80051EF8(void) {
} else {
temp_a0 = temp_a0 - 0x30;
}
- func_80051ABC(temp_a0, 0);
+ func_80051ABC(screen, temp_a0, 0);
}
-void func_80051F9C(void) {
+void func_80051F9C(ScreenContext* screen) {
s16 temp_a0;
- temp_a0 = 0xF0 - gScreenTwoCtx->cameraHeight;
+ temp_a0 = 0xF0 - screen->cameraHeight;
if (IsKoopaTroopaBeach()) {
temp_a0 = temp_a0 - 0x30;
} else if (IsMooMooFarm()) {
@@ -3641,15 +3548,15 @@ void func_80051F9C(void) {
} else {
temp_a0 = temp_a0 - 0x30;
}
- func_80051ABC(temp_a0, D_8018D1F0);
+ func_80051ABC(screen, temp_a0, D_8018D1F0);
}
-void func_80052044(void) {
- func_80051C60(240 - gScreenOneCtx->cameraHeight, 0);
+void func_80052044(ScreenContext* screen) {
+ func_80051C60(screen, 240 - screen->cameraHeight, 0);
}
-void func_80052080(void) {
- func_80051C60(240 - gScreenTwoCtx->cameraHeight, D_8018D1F0);
+void func_80052080(ScreenContext* screen) {
+ func_80051C60(screen, 240 - screen->cameraHeight, D_8018D1F0);
}
void func_800520C0(s32 arg0) {