SSBM Decomp
Loading...
Searching...
No Matches
grbigblue.c File Reference
#include "grbigblue.h"
#include "grbigblue.static.h"
#include "grdisplay.h"
#include "grfzerocar.h"
#include "grmaterial.h"
#include "ground.h"
#include "placeholder.h"
#include <platform.h>
#include "baselib/debug.h"
#include "cm/camera.h"
#include "gm/gm_1A45.h"
#include "gr/grzakogenerator.h"
#include "gr/inlines.h"
#include "gr/stage.h"
#include "gr/types.h"
#include "it/it_26B1.h"
#include "it/itspawn.h"
#include "it/types.h"
#include "lb/lb_00B0.h"
#include "lb/lbspdisplay.h"
#include "lb/lbvector.h"
#include "mp/mplib.h"
#include <math.h>
#include <math_ppc.h>
#include <trigf.h>
#include <baselib/gobjgxlink.h>
#include <baselib/gobjproc.h>
#include <baselib/jobj.h>
#include <baselib/memory.h>
#include <baselib/random.h>

Data Structures

struct  grBb_ItemKindList
struct  grBb_Data803E2D78
struct  grBb_Data803E2EB8
struct  grBb_GroundStateFlag
struct  grBb_ByteBits
struct  grBb_NibbleBits
struct  grBigBlue_CarPhysicsLane
union  grBigBlue_CarPhysics
struct  grBb_Car
union  grBb_CarGround

Macros

#define M_TAU   6.283185307179586
#define Gr_Fzero_Car_Max   30

Functions

static void fn_801E8560 (void *user_data, int joint_id, CollData *coll, int coll_x50, mpLib_GroundEnum ground_kind, float delta_y)
 Joint collision callback for ground surfaces.
static void fn_801EF60C (void *user_data, int joint_id, CollData *coll, int coll_x50, mpLib_GroundEnum ground_kind, float delta_y)
 Joint collision callback for ground surfaces.
static void sdata2_order (void)
void grBigBlue_801E57BC (bool arg)
void grBigBlue_801E57C0 (void)
void grBigBlue_801E59C8 (void)
void grBigBlue_801E59CC (void)
bool grBigBlue_801E59F0 (void)
HSD_GObjgrBigBlue_801E59F8 (s32 id)
void grBigBlue_801E5AE4 (Ground_GObj *gobj)
bool grBigBlue_801E5B10 (Ground_GObj *arg)
void grBigBlue_801E5B18 (Ground_GObj *arg)
void grBigBlue_801E5B1C (Ground_GObj *arg)
void grBigBlue_801E5B20 (Ground_GObj *gobj)
bool grBigBlue_801E6114 (Ground_GObj *arg)
void grBigBlue_801E611C (Ground_GObj *arg)
void grBigBlue_801E6120 (Ground_GObj *arg)
void fn_801E6124 (Ground_GObj *gobj)
void grBigBlue_801E613C (Ground_GObj *gobj)
bool grBigBlue_801E61BC (Ground_GObj *arg)
void grBigBlue_801E61C4 (Ground_GObj *gobj)
void grBigBlue_801E61FC (Ground_GObj *arg)
void grBigBlue_801E6200 (Ground_GObj *gobj)
bool grBigBlue_801E6288 (Ground_GObj *arg)
void grBigBlue_801E6290 (Ground_GObj *arg)
void grBigBlue_801E6294 (Ground_GObj *arg)
void grBigBlue_801E6298 (Ground_GObj *gobj)
bool grBigBlue_801E6354 (Ground_GObj *arg)
void grBigBlue_801E635C (Ground_GObj *arg)
void grBigBlue_801E6360 (Ground_GObj *arg)
void grBigBlue_801E6364 (Ground_GObj *gobj)
bool grBigBlue_801E687C (Ground_GObj *arg)
void grBigBlue_801E6884 (Ground_GObj *gobj)
void grBigBlue_801E68B8 (Ground_GObj *gobj)
void grBigBlue_801E6904 (Ground_GObj *gobj)
bool grBigBlue_801E6C58 (Ground_GObj *arg)
void grBigBlue_801E6C60 (Ground_GObj *gobj)
void grBigBlue_801E855C (Ground_GObj *arg)
bool grBigBlue_801E8794 (void *exclude, Vec3 *pos, bool checkSecondary, f32 rangeX, f32 rangeY)
void grBigBlue_801E8978 (int index, void *data, void *extra)
void * grBigBlue_801E89DC (int arg)
void grBigBlue_801E8A1C (int idx)
static f32 grBigBlue_801E8B84_noinline_1 (f32 right, f32 left, f32 bottom, f32 top)
static f32 grBigBlue_801E8B84_noinline_2 (f32 right, f32 left, f32 bottom, f32 top)
f32 grBigBlue_801E8B84 (f32 right, f32 left, f32 bottom, f32 top)
static f32 grBigBlue_801E8B84_noinline (f32 right, f32 left, f32 bottom, f32 top)
f32 grBigBlue_801E8D04 (void)
void grBigBlue_801E8D64 (Ground_GObj *gobj)
bool grBigBlue_801E93D0 (Ground_GObj *arg)
void grBigBlue_801E93D8 (Ground_GObj *gobj)
void grBigBlue_801E9F38 (Ground_GObj *arg)
void grBigBlue_801E9F3C (Ground_GObj *gobj)
bool grBigBlue_801EA054 (Ground_GObj *arg)
static int randi (int max)
void grBigBlue_801EA05C (Ground_GObj *gobj)
void grBigBlue_801EAB4C (Ground_GObj *arg)
bool grBigBlue_801EAB50 (Vec3 *pos, s32 flag, f32 rangeX, f32 rangeY)
s32 grBigBlue_801EACE8 (HSD_JObj *exclude, Vec3 *point, f32 *out_y, f32 half_range_x, f32 half_range_y)
void grBigBlue_801EB004 (Ground_GObj *gobj)
void grBigBlue_801EB4AC (Ground_GObj *gobj)
void grBigBlue_801EBAF8 (Ground_GObj *gobj)
f32 grBigBlue_801EC58C (Vec3 *pos, Vec3 *normal_out, f32 half_height)
void grBigBlue_801EC6C0 (Ground_GObj *gobj)
void grBigBlue_801ECB50 (Ground_GObj *gobj)
 STATIC_ASSERT (sizeof(grBigBlue_CarPhysicsLane)==0x40)
void grBigBlue_801ED694 (Ground_GObj *gobj, s32 lane)
s32 grBigBlue_801EDF44 (Ground_GObj *gobj, s32 index)
s32 grBigBlue_801EE398 (Ground_GObj *gobj, s32 arg1, s32 arg2)
bool grBigBlue_801EEF00 (Ground_GObj *gobj, s32 index)
void grBigBlue_801EF424 (Ground_GObj *gobj)
void grBigBlue_801EF7D8 (Vec3 *pos)
bool grBigBlue_801EF844 (enum_t line_id)
void fn_801EFB9C (HSD_GObj *gobj, int pass)
DynamicsDescgrBigBlue_801EFC0C (enum_t arg)
bool grBigBlue_801EFC14 (Vec3 *a, int b, HSD_JObj *jobj)

Variables

grBb_LineIds grBb_803B8134
f32 grBb_804DB2F0
f32 grBb_804DB2F4
f32 grBb_804DB304
f32 grBb_804DB308
f32 grBb_804DB30C
f32 grBb_804DB310
f32 grBb_804DB3F0
static grBb_YakumonoParamyakumono_param
GrJoint grBb_803E2938 []
grBb_Data803E2D78 grBb_803E2D78
grBb_Data803E2EB8 grBb_803E2EB8
StageCallbacks grBb_StageCallbacks []
static const Vec3 grBb_803B8108 = { -1.0F, 0.0F, 0.0F }
static const Vec3 grBb_803B8114 = { 56.0F, 40.0F, 24.0F }
static const grBb_ItemKindList grBb_803B8120
StageData grBb_StageData
static s16 grBb_803E2D84 []
static s16 grBb_803E2DC0 []
static s16 lbl_803E2DFC []
static grBb_TrackEntry grBb_TrackEntries [12]
u32 lbl_803E3010 []

Macro Definition Documentation

◆ M_TAU

#define M_TAU   6.283185307179586

◆ Gr_Fzero_Car_Max

#define Gr_Fzero_Car_Max   30

Function Documentation

◆ fn_801E8560()

void fn_801E8560 ( void * user_data,
int joint_id,
CollData * coll,
int coll_x50,
mpLib_GroundEnum ground_kind,
float delta_y )
static

Joint collision callback for ground surfaces.

Parameters
user_dataSaved untyped data attached to the callback.
coll_x50Unknown, sourced from CollData::x50. dist according to fn_801FC9AC?
delta_yRelative y-offset since the collision started, equal to coll->cur_pos.y - coll->last_pos.y

◆ fn_801EF60C()

void fn_801EF60C ( void * user_data,
int joint_id,
CollData * coll,
int coll_x50,
mpLib_GroundEnum ground_kind,
float delta_y )
static

Joint collision callback for ground surfaces.

Parameters
user_dataSaved untyped data attached to the callback.
coll_x50Unknown, sourced from CollData::x50. dist according to fn_801FC9AC?
delta_yRelative y-offset since the collision started, equal to coll->cur_pos.y - coll->last_pos.y

◆ sdata2_order()

void sdata2_order ( void )
static
Todo
Emitted only to lay out the .sdata2 literal pool in retail order.

◆ grBigBlue_801E57BC()

void grBigBlue_801E57BC ( bool arg)

◆ grBigBlue_801E57C0()

void grBigBlue_801E57C0 ( void )

◆ grBigBlue_801E59C8()

void grBigBlue_801E59C8 ( void )

◆ grBigBlue_801E59CC()

void grBigBlue_801E59CC ( void )

◆ grBigBlue_801E59F0()

bool grBigBlue_801E59F0 ( void )

◆ grBigBlue_801E59F8()

HSD_GObj * grBigBlue_801E59F8 ( s32 id)

◆ grBigBlue_801E5AE4()

void grBigBlue_801E5AE4 ( Ground_GObj * gobj)

◆ grBigBlue_801E5B10()

bool grBigBlue_801E5B10 ( Ground_GObj * arg)

◆ grBigBlue_801E5B18()

void grBigBlue_801E5B18 ( Ground_GObj * arg)

◆ grBigBlue_801E5B1C()

void grBigBlue_801E5B1C ( Ground_GObj * arg)

◆ grBigBlue_801E5B20()

void grBigBlue_801E5B20 ( Ground_GObj * gobj)

◆ grBigBlue_801E6114()

bool grBigBlue_801E6114 ( Ground_GObj * arg)

◆ grBigBlue_801E611C()

void grBigBlue_801E611C ( Ground_GObj * arg)

◆ grBigBlue_801E6120()

void grBigBlue_801E6120 ( Ground_GObj * arg)

◆ fn_801E6124()

void fn_801E6124 ( Ground_GObj * gobj)

◆ grBigBlue_801E613C()

void grBigBlue_801E613C ( Ground_GObj * gobj)

◆ grBigBlue_801E61BC()

bool grBigBlue_801E61BC ( Ground_GObj * arg)

◆ grBigBlue_801E61C4()

void grBigBlue_801E61C4 ( Ground_GObj * gobj)

◆ grBigBlue_801E61FC()

void grBigBlue_801E61FC ( Ground_GObj * arg)

◆ grBigBlue_801E6200()

void grBigBlue_801E6200 ( Ground_GObj * gobj)

◆ grBigBlue_801E6288()

bool grBigBlue_801E6288 ( Ground_GObj * arg)

◆ grBigBlue_801E6290()

void grBigBlue_801E6290 ( Ground_GObj * arg)

◆ grBigBlue_801E6294()

void grBigBlue_801E6294 ( Ground_GObj * arg)

◆ grBigBlue_801E6298()

void grBigBlue_801E6298 ( Ground_GObj * gobj)

◆ grBigBlue_801E6354()

bool grBigBlue_801E6354 ( Ground_GObj * arg)

◆ grBigBlue_801E635C()

void grBigBlue_801E635C ( Ground_GObj * arg)

◆ grBigBlue_801E6360()

void grBigBlue_801E6360 ( Ground_GObj * arg)

◆ grBigBlue_801E6364()

void grBigBlue_801E6364 ( Ground_GObj * gobj)

◆ grBigBlue_801E687C()

bool grBigBlue_801E687C ( Ground_GObj * arg)

◆ grBigBlue_801E6884()

void grBigBlue_801E6884 ( Ground_GObj * gobj)

◆ grBigBlue_801E68B8()

void grBigBlue_801E68B8 ( Ground_GObj * gobj)

◆ grBigBlue_801E6904()

void grBigBlue_801E6904 ( Ground_GObj * gobj)

◆ grBigBlue_801E6C58()

bool grBigBlue_801E6C58 ( Ground_GObj * arg)

◆ grBigBlue_801E6C60()

void grBigBlue_801E6C60 ( Ground_GObj * gobj)

◆ grBigBlue_801E855C()

void grBigBlue_801E855C ( Ground_GObj * arg)

◆ grBigBlue_801E8794()

bool grBigBlue_801E8794 ( void * exclude,
Vec3 * pos,
bool checkSecondary,
f32 rangeX,
f32 rangeY )

◆ grBigBlue_801E8978()

void grBigBlue_801E8978 ( int index,
void * data,
void * extra )

◆ grBigBlue_801E89DC()

void * grBigBlue_801E89DC ( int arg)

◆ grBigBlue_801E8A1C()

void grBigBlue_801E8A1C ( int idx)

◆ grBigBlue_801E8B84_noinline_1()

f32 grBigBlue_801E8B84_noinline_1 ( f32 right,
f32 left,
f32 bottom,
f32 top )
static

◆ grBigBlue_801E8B84_noinline_2()

f32 grBigBlue_801E8B84_noinline_2 ( f32 right,
f32 left,
f32 bottom,
f32 top )
static

◆ grBigBlue_801E8B84()

f32 grBigBlue_801E8B84 ( f32 right,
f32 left,
f32 bottom,
f32 top )

◆ grBigBlue_801E8B84_noinline()

f32 grBigBlue_801E8B84_noinline ( f32 right,
f32 left,
f32 bottom,
f32 top )
static

◆ grBigBlue_801E8D04()

f32 grBigBlue_801E8D04 ( void )

◆ grBigBlue_801E8D64()

void grBigBlue_801E8D64 ( Ground_GObj * gobj)

◆ grBigBlue_801E93D0()

bool grBigBlue_801E93D0 ( Ground_GObj * arg)

◆ grBigBlue_801E93D8()

void grBigBlue_801E93D8 ( Ground_GObj * gobj)

◆ grBigBlue_801E9F38()

void grBigBlue_801E9F38 ( Ground_GObj * arg)

◆ grBigBlue_801E9F3C()

void grBigBlue_801E9F3C ( Ground_GObj * gobj)

◆ grBigBlue_801EA054()

bool grBigBlue_801EA054 ( Ground_GObj * arg)

◆ randi()

int randi ( int max)
inlinestatic

◆ grBigBlue_801EA05C()

void grBigBlue_801EA05C ( Ground_GObj * gobj)

◆ grBigBlue_801EAB4C()

void grBigBlue_801EAB4C ( Ground_GObj * arg)

◆ grBigBlue_801EAB50()

bool grBigBlue_801EAB50 ( Vec3 * pos,
s32 flag,
f32 rangeX,
f32 rangeY )

◆ grBigBlue_801EACE8()

s32 grBigBlue_801EACE8 ( HSD_JObj * exclude,
Vec3 * point,
f32 * out_y,
f32 half_range_x,
f32 half_range_y )
Todo
Currently 98.17% match - car section generates fnmsubs instead of fmuls+fsubs; compiler fuses multiply-subtract differently than target

◆ grBigBlue_801EB004()

void grBigBlue_801EB004 ( Ground_GObj * gobj)

◆ grBigBlue_801EB4AC()

void grBigBlue_801EB4AC ( Ground_GObj * gobj)

◆ grBigBlue_801EBAF8()

void grBigBlue_801EBAF8 ( Ground_GObj * gobj)

◆ grBigBlue_801EC58C()

f32 grBigBlue_801EC58C ( Vec3 * pos,
Vec3 * normal_out,
f32 half_height )

◆ grBigBlue_801EC6C0()

void grBigBlue_801EC6C0 ( Ground_GObj * gobj)
Todo
Needs register allocation fixes.

◆ grBigBlue_801ECB50()

void grBigBlue_801ECB50 ( Ground_GObj * gobj)

◆ STATIC_ASSERT()

STATIC_ASSERT ( sizeof(grBigBlue_CarPhysicsLane) = =0x40)

◆ grBigBlue_801ED694()

void grBigBlue_801ED694 ( Ground_GObj * gobj,
s32 lane )
Todo
Currently partial match - complex car physics simulation
Todo
The collision scratch vector sits four bytes low.

◆ grBigBlue_801EDF44()

s32 grBigBlue_801EDF44 ( Ground_GObj * gobj,
s32 index )
Todo
Currently 87.41% match - compiler CSEs gp+offset into one register (4 NV regs) instead of keeping them separate (5 NV regs, stmw r27)

◆ grBigBlue_801EE398()

s32 grBigBlue_801EE398 ( Ground_GObj * gobj,
s32 arg1,
s32 arg2 )

◆ grBigBlue_801EEF00()

bool grBigBlue_801EEF00 ( Ground_GObj * gobj,
s32 index )

◆ grBigBlue_801EF424()

void grBigBlue_801EF424 ( Ground_GObj * gobj)
Todo
Currently 99.88% match - instructions match but relocations differ

◆ grBigBlue_801EF7D8()

void grBigBlue_801EF7D8 ( Vec3 * pos)

◆ grBigBlue_801EF844()

bool grBigBlue_801EF844 ( enum_t line_id)

◆ fn_801EFB9C()

void fn_801EFB9C ( HSD_GObj * gobj,
int pass )

◆ grBigBlue_801EFC0C()

DynamicsDesc * grBigBlue_801EFC0C ( enum_t arg)

◆ grBigBlue_801EFC14()

bool grBigBlue_801EFC14 ( Vec3 * a,
int b,
HSD_JObj * jobj )

Variable Documentation

◆ grBb_803B8134

grBb_LineIds grBb_803B8134
extern

◆ grBb_804DB2F0

f32 grBb_804DB2F0
extern

◆ grBb_804DB2F4

f32 grBb_804DB2F4
extern

◆ grBb_804DB304

f32 grBb_804DB304
extern

◆ grBb_804DB308

f32 grBb_804DB308
extern

◆ grBb_804DB30C

f32 grBb_804DB30C
extern

◆ grBb_804DB310

f32 grBb_804DB310
extern

◆ grBb_804DB3F0

f32 grBb_804DB3F0
extern

◆ yakumono_param

grBb_YakumonoParam* yakumono_param
static

◆ grBb_803E2938

GrJoint grBb_803E2938[]
Initial value:
= {
{ 36, 34, 10 }, { 37, 34, 10 }, { 38, 34, 7 }, { 39, 34, 7 },
{ 40, 34, 7 }, { 41, 34, 14 }, { 42, 34, 14 }, { 43, 34, 14 },
{ 44, 34, 15 }, { 45, 34, 15 }, { 46, 34, 15 }, { 47, 34, 16 },
{ 48, 34, 16 }, { 49, 34, 16 }, { 52, 34, 32 }, { 53, 34, 32 },
{ 54, 34, 32 }, { 55, 34, 35 }, { 56, 34, 35 }, { 57, 34, 35 },
{ 58, 34, 38 }, { 59, 34, 38 }, { 60, 34, 38 }, { 61, 34, 41 },
{ 62, 34, 41 }, { 63, 34, 41 }, { 64, 34, 44 }, { 65, 34, 44 },
}

◆ grBb_803E2D78

grBb_Data803E2D78 grBb_803E2D78
extern

◆ grBb_803E2EB8

grBb_Data803E2EB8 grBb_803E2EB8
extern

◆ grBb_StageCallbacks

StageCallbacks grBb_StageCallbacks[]

◆ grBb_803B8108

const Vec3 grBb_803B8108 = { -1.0F, 0.0F, 0.0F }
static

◆ grBb_803B8114

const Vec3 grBb_803B8114 = { 56.0F, 40.0F, 24.0F }
static

◆ grBb_803B8120

const grBb_ItemKindList grBb_803B8120
static
Initial value:
= { {
} }
@ It_Kind_RabbitC
Definition forward.h:143
@ It_Kind_Kusudama
Definition forward.h:116
@ It_Kind_Sword
Definition forward.h:124
@ It_Kind_F_Flower
Definition forward.h:137
@ It_Kind_S_Scope
Definition forward.h:133

◆ grBb_StageData

StageData grBb_StageData
Initial value:
= {
"/GrBb.dat",
(1 << 0),
}
#define ARRAY_SIZE(arr)
Definition types.h:31
void grBigBlue_801E57BC(bool arg)
Definition grbigblue.c:222
DynamicsDesc * grBigBlue_801EFC0C(enum_t arg)
Definition grbigblue.c:4855
void grBigBlue_801E57C0(void)
Definition grbigblue.c:224
bool grBigBlue_801EFC14(Vec3 *a, int b, HSD_JObj *jobj)
Definition grbigblue.c:4860
bool grBigBlue_801E59F0(void)
Definition grbigblue.c:289
GrJoint grBb_803E2938[]
Definition grbigblue.c:145
StageCallbacks grBb_StageCallbacks[]
Definition grbigblue.c:158
void grBigBlue_801E59C8(void)
Definition grbigblue.c:282
void grBigBlue_801E59CC(void)
Definition grbigblue.c:284
@ Gr_Kind_BigBlue
Definition forward.h:74

◆ grBb_803E2D84

s16 grBb_803E2D84[]
static
Initial value:
= {
0x0004, 0x0005, 0x0006, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C,
0x000D, 0x000E, 0x0003, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013,
0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B,
0x001C, 0x001D, 0x0025, 0x0026, 0x0027, 0x0028,
}

◆ grBb_803E2DC0

s16 grBb_803E2DC0[]
static
Initial value:
= {
0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010,
0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018,
0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E,
}

◆ lbl_803E2DFC

s16 lbl_803E2DFC[]
static
Initial value:
= {
0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A,
0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012,
0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A,
0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020,
}

◆ grBb_TrackEntries

grBb_TrackEntry grBb_TrackEntries[12]
static
Initial value:
= {
{ 4, 6, 5, 0, { 0, 0, 0 } }, { 19, 21, 20, 0, { 0, 0, 0 } },
{ 7, 9, 8, 0, { 0, 0, 0 } }, { 10, 12, 11, 0, { 0, 0, 0 } },
{ 44, 46, 45, 0, { 0, 0, 0 } }, { 1, 3, 2, 0, { 0, 0, 0 } },
{ 32, 34, 33, 0, { 0, 0, 0 } }, { 35, 37, 36, 0, { 0, 0, 0 } },
{ 38, 40, 39, 0, { 0, 0, 0 } }, { 41, 43, 42, 0, { 0, 0, 0 } },
{ 29, 31, 30, 0, { 0, 0, 0 } }, { 13, 18, 17, 0, { 0, 0, 0 } },
}

◆ lbl_803E3010

u32 lbl_803E3010[]
Initial value:
= {
0x0006DDD2,
0x0006DDD3,
0x0006DDD4,
0x0006DDD5,
}