camera segments

This commit is contained in:
Fazana
2022-05-22 12:33:39 +01:00
parent a0d8f24f0d
commit 3b1697a6c6
4 changed files with 38 additions and 56 deletions
+6 -6
View File
@@ -136,7 +136,7 @@ unk8012117C *D_8012117C;
s32 D_80121180[16];
u32 *D_801211C0[2];
TempStruct5 *D_801211C0;
s16 D_801211C8[20];
Gfx *gDisplayLists[2];
Gfx *gCurrDisplayList;
@@ -736,17 +736,17 @@ void func_8006BFC8(s8 *arg0) {
}
temp2 = gTempAssetTable[phi_s0];
temp = gTempAssetTable[phi_s0 + 1] - temp2;
D_801211C0[0] = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW);
load_asset_to_address(ASSET_UNKNOWN_0, D_801211C0[0], temp2, temp);
D_801211C0 = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW);
load_asset_to_address(ASSET_UNKNOWN_0, D_801211C0, temp2, temp);
free_from_memory_pool(gTempAssetTable);
}
void func_8006C164(void) {
free_from_memory_pool(D_801211C0[0]);
free_from_memory_pool(D_801211C0);
}
u32 *func_8006C18C(void) {
return D_801211C0[0];
TempStruct5 *func_8006C18C(void) {
return D_801211C0;
}
s8 func_8006C19C(void) {
+2 -1
View File
@@ -5,6 +5,7 @@
#include "structs.h"
#include "fade_transition.h"
#include "libc/math.h"
#include "racer.h"
enum RenderContext {
DRAW_INTRO = -1,
@@ -104,7 +105,7 @@ u8 *get_level_name(s32 levelId);
void func_8006BEFC(void);
void func_8006BFC8(s8 *arg0);
void func_8006C164(void);
u32 *func_8006C18C(void);
TempStruct5 *func_8006C18C(void);
s8 func_8006C19C(void);
void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3);
+26 -26
View File
@@ -199,7 +199,7 @@ s16 D_8011D5B8;
GLOBAL_ASM("asm/non_matchings/racer/func_80042D20.s")
void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) {
void func_80043ECC(s32 arg0, Object_Racer *racer, s32 updateRate) {
TempStruct5 *temp_v0;
s8 *test;
s8 phi_a0;
@@ -214,8 +214,8 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) {
D_8011D5BC = 0;
return;
}
temp_v0 = (TempStruct5 *)func_8006C18C();
if (arg1->unk1D3) {
temp_v0 = func_8006C18C();
if (racer->boostTimer) {
if (!D_8011D5BB) {
temp_v0->unk8[3][0] += temp_v0->unk8[3][2];
temp_v0->unk8[3][1] += temp_v0->unk8[3][3];
@@ -232,21 +232,21 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) {
}
D_8011D5BA = 0;
}
if (arg1->unk173) {
if (D_8011D5BC < arg1->unk174) {
if (racer->balloon_quantity) {
if (D_8011D5BC < racer->balloon_level) {
temp_v0->unk8[1][0] += temp_v0->unk8[1][2];
temp_v0->unk8[1][1] += temp_v0->unk8[1][3];
}
D_8011D5BC = arg1->unk174;
D_8011D5BC = racer->balloon_level;
} else {
D_8011D5BC = 0;
}
test = get_misc_asset(12);
if ((D_8011D530 & 0x2000) && arg1->unk173) {
if (arg1->unk174 < 3) {
phi_a0 = test[arg1->unk172 * 3 + arg1->unk174];
if ((D_8011D530 & 0x2000) && racer->balloon_quantity) {
if (racer->balloon_level < 3) {
phi_a0 = test[racer->balloon_type * 3 + racer->balloon_level];
} else {
phi_a0 = arg1->unk172;
phi_a0 = racer->balloon_type;
}
if (D_800DCD90[phi_a0] == 1) {
temp_v0->unk8[2][0] += temp_v0->unk8[2][2];
@@ -500,8 +500,8 @@ void update_camera_hovercraft(f32 updateRate, Object *obj, Object_Racer *racer)
gCameraObject->trans.z_position = obj->segment.trans.z_position + zVel;
gCameraObject->trans.y_rotation = racer->unk196;
segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (segmentIndex != -1) {
gCameraObject->unk34 = segmentIndex;
if (segmentIndex != SEGMENT_NONE) {
gCameraObject->segmentIndex = segmentIndex;
}
}
@@ -789,7 +789,7 @@ void update_camera_plane(f32 updateRate, Object* obj, Object_Racer* racer) {
tempVel = gCameraObject->trans.x_position;
segmentIndex = get_level_segment_index_from_position(tempVel, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (segmentIndex != -1) {
gCameraObject->unk34 = segmentIndex;
gCameraObject->segmentIndex = segmentIndex;
}
racer->unk196 = gCameraObject->trans.y_rotation;
}
@@ -819,8 +819,8 @@ void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) {
delta = (s32) updateRate;
zoom = 120.0f;
if (gRaceStartTimer >= 0x3D) {
zoom += ((f32) (gRaceStartTimer - 0x3C) * 4.0f);
if (gRaceStartTimer > 60) {
zoom += ((f32) (gRaceStartTimer - 60) * 4.0f);
}
racer->unk196 = 0x8000 - racer->unk1A0;
if (get_viewport_count() == 1) {
@@ -860,8 +860,8 @@ void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) {
gCameraObject->trans.x_rotation += ((angle * delta) >> 4);
gCameraObject->trans.y_rotation = racer->unk196;
segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (segmentIndex != -1) {
gCameraObject->unk34 = segmentIndex;
if (segmentIndex != SEGMENT_NONE) {
gCameraObject->segmentIndex = segmentIndex;
}
racer->unk196 = gCameraObject->trans.y_rotation;
gCameraObject->trans.x_position += gCameraObject->x_velocity;
@@ -1949,7 +1949,7 @@ void func_800580B4(Object *obj, Object_Racer *racer, s32 mode, f32 arg3) {
}
}
#ifdef NON_EQUIVALENT
#ifdef NON_MATCHING
void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) {
s64 pad;
s32 segmentIndex;
@@ -2067,7 +2067,7 @@ void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) {
baseDistance += baseSpeed * 30.0f;
}
if (gRaceStartTimer == 0) {
if (normalise_time(0x24) < racer->boostTimer) {
if (normalise_time(36) < racer->boostTimer) {
baseDistance = -30.0f;
} else if (racer->boostTimer > 0) {
baseDistance = 180.0f;
@@ -2144,7 +2144,7 @@ void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) {
lateralOffset = (yOffset = gCameraObject->trans.x_position);
segmentIndex = get_level_segment_index_from_position(lateralOffset, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (segmentIndex != -1) {
gCameraObject->unk34 = segmentIndex;
gCameraObject->segmentIndex = segmentIndex;
}
racer->unk196 = gCameraObject->trans.y_rotation;
}
@@ -2158,7 +2158,7 @@ GLOBAL_ASM("asm/non_matchings/racer/update_camera_car.s")
* Otherwise, it will follow a set path while rotating.
*/
void update_camera_finish_challenge(UNUSED f32 updateRate, Object *obj, Object_Racer *racer) {
s32 levelSeg;
s32 segmentIndex;
f32 temp_f12;
f32 zOffset;
f32 xOffset;
@@ -2179,9 +2179,9 @@ void update_camera_finish_challenge(UNUSED f32 updateRate, Object *obj, Object_R
gCameraObject->trans.y_position = obj->segment.trans.y_position + 45.0f;
}
gCameraObject->trans.z_position = obj->segment.trans.z_position + zOffset;
levelSeg = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (levelSeg != -1) {
gCameraObject->unk34 = levelSeg;
segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position);
if (segmentIndex != SEGMENT_NONE) {
gCameraObject->segmentIndex = segmentIndex;
}
racer->unk196 = gCameraObject->trans.y_rotation;
}
@@ -2215,7 +2215,7 @@ void update_camera_finish_race(UNUSED f32 updateRate, Object *obj, Object_Racer
gCameraObject->trans.y_rotation = (s16) (0x8000 - func_8007066C((s32) xDiff, (s32) zDiff));
gCameraObject->trans.x_rotation = func_8007066C((s32) yDiff, (s32) distance);
gCameraObject->trans.z_rotation = 0;
gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position);
gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position);
}
/**
@@ -2232,7 +2232,7 @@ void update_camera_fixed(f32 updateRate, struct Object *obj, struct Object_Racer
gCameraObject->trans.y_rotation += ((((-func_8007066C((s32) xDiff, (s32) zDiff)) -
gCameraObject->trans.y_rotation) + 0x8000) * delta) >> 4;
gCameraObject->trans.z_rotation -= (((s32) (gCameraObject->trans.z_rotation * delta)) >> 4);
gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position,
gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position,
racer->oy1, gCameraObject->trans.z_position);
}
+4 -23
View File
@@ -5,6 +5,8 @@
#include "structs.h"
#include "level_object_entries.h"
#define SEGMENT_NONE -1 // If the level in question does not use segmentation.
typedef enum ActivePlayers {
PLAYER_COMPUTER = -1,
PLAYER_ONE,
@@ -59,7 +61,7 @@ typedef struct ObjectCamera {
/* 0x0028 */ f32 y_velocity;
/* 0x002C */ f32 z_velocity;
/* 0x0030 */ f32 unk30;
/* 0x0034 */ s16 unk34;
/* 0x0034 */ s16 segmentIndex;
/* 0x0036 */ s16 mode;
/* 0x0038 */ s16 unk38;
/* 0x003A */ s8 unk3A;
@@ -81,32 +83,11 @@ typedef struct unk8005234C {
s16 unk16C;
} unk8005234C;
// Also fairly certain this is NOT Object_Racer.
typedef struct Object_64_Unknown5 {
u8 pad0[0x88];
u8 unk89;
u8 pad90[0xE9];
s8 unk172;
s8 unk173;
s8 unk174;
u8 pad175[0x5E];
s8 unk1D3;
} Object_64_Unknown5;
typedef struct TempStruct5 {
s8 pad0[8];
s8 unk8[4][4];
} TempStruct5;
typedef struct Object_64_80053478 {
u8 unk0[0x2C];
f32 unk2C; // Forward Velocity?
u8 unk30[0x1B1];
s8 unk1E1; // Steering Value?
u8 unk1E2[4];
s8 unk1E6;
} Object_64_80053478;
/* Unknown Size */
typedef struct unk800535C4 {
s16 unk0;
@@ -239,7 +220,7 @@ void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2);
void func_80050754(Object *obj, Object_Racer *racer, f32 divisor);
void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer);
void func_80044170(Object *obj, Object_Racer *racer, s32 updateRate);
void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate);
void func_80043ECC(s32 arg0, Object_Racer *racer, s32 updateRate);
void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate);
void func_80057A40(Object *obj, Object_Racer *racer, f32 updateRate);