Name some racer FX related bits (#560)

* wow!!!

* Update README.md

* Forgot to format

* macro
This commit is contained in:
Fazana
2025-05-07 21:34:32 +01:00
committed by GitHub
parent 4a56402723
commit 8d61409a66
11 changed files with 186 additions and 159 deletions
+5 -5
View File
@@ -9,7 +9,7 @@ As of May 7, 2025, this is our current score:
    Decomp progress: 85.73%
    Documentation progress: 56.69%
    Documentation progress: 56.95%
<!-- README_SCORE_SUMMARY_END -->
---
@@ -133,14 +133,14 @@ As of May 7, 2025, this is our current score:
We are racing in Spacedust Alley. (Lap 2/3)
=====================================================================
ADVENTURE TWO (Cleanup & Documentation)
-------------------------- 56.69% Complete --------------------------
# Documented functions: 1174
# Undocumented remaining: 480
-------------------------- 56.95% Complete --------------------------
# Documented functions: 1178
# Undocumented remaining: 476
---------------------------- Game Status ----------------------------
Balloons: 27/47, Keys: 3/4, Trophies: 2/5
T.T. Amulets: 3/4, Wizpig Amulets: 2/4
---------------------------------------------------------------------
We are collecting silver coins in Crescent Island. (3/8 silver coins)
We are collecting silver coins in Crescent Island. (5/8 silver coins)
=====================================================================
```
<!-- README_SCORE_END -->
+1 -1
View File
@@ -6559,7 +6559,7 @@ void obj_loop_pigrocketeer(Object *obj, s32 updateRate) {
Object_Wizpig2 *obj64;
func_8001F460(obj, updateRate, obj);
someObj = func_8000BF44(-1);
someObj = racerfx_get_boost(BOOST_DEFAULT);
if (someObj != NULL) {
obj64 = &someObj->unk64->wizpig2;
+99 -81
View File
@@ -60,10 +60,10 @@ s8 D_800DC73C = 0;
s8 D_800DC740 = 0;
s8 gSwapLeadPlayer = FALSE;
s8 D_800DC748 = FALSE;
Vertex *D_800DC74C[2] = { 0, 0 };
Triangle *D_800DC754[2] = { 0, 0 };
Vertex *gBoostVerts[2] = { 0, 0 };
Triangle *gBoostTris[2] = { 0, 0 };
Object *gShieldEffectObject = NULL;
s32 D_800DC760 = 9; // Currently unknown, might be a different type.
s32 gBoostObjOverrideID = 9;
Object *gMagnetEffectObject = NULL;
s32 D_800DC768 = 0; // Currently unknown, might be a different type.
@@ -315,17 +315,17 @@ VertexPosition gEnvmapPos;
s16 D_8011AFEE;
s32 D_8011AFF0;
unk800179D0 *D_8011AFF4;
s32 D_8011AFF8;
s32 gBoostVertCount;
s32 D_8011AFFC;
s32 D_8011B000;
s32 gBoostTriCount;
s32 D_8011B004;
s32 D_8011B008; // indexes D_800DC74C and D_800DC754
u8 D_8011B010[16];
Object *D_8011B020[NUMBER_OF_CHARACTERS];
s32 gBoostVertFlip; // indexes gBoostVerts and gBoostTris
u8 gShieldSineTime[16];
Object *gBoostEffectObjects[NUMBER_OF_CHARACTERS];
u8 D_8011B048[16];
u8 D_8011B058[16];
u8 D_8011B068[16];
ColourRGBA D_8011B078[NUMBER_OF_CHARACTERS]; // Note: D_8011B078 might not be a ColourRGBA.
RacerFXData gRacerFXData[NUMBER_OF_CHARACTERS];
extern s16 gGhostMapID;
@@ -337,79 +337,89 @@ typedef struct LevelObjectEntry_unk8000B020 {
s8 unk9;
} LevelObjectEntry_unk8000B020;
void func_8000B020(s32 numberOfVertices, s32 numberOfTriangles) {
/**
* Spawns control objects for racer boost visuals, as well as shield and magnet visuals.
* Boost geometry is made in real time, and allocated here.
* This function is called on every level load, but only racers use the stuff here.
*/
void racerfx_alloc(s32 numberOfVertices, s32 numberOfTriangles) {
Asset20 *miscAsset20;
LevelObjectEntry_unk8000B020 objEntry;
s32 i;
D_800DC754[0] = (Triangle *) mempool_alloc_safe(
gBoostTris[0] = (Triangle *) mempool_alloc_safe(
((numberOfTriangles * sizeof(Triangle)) + (numberOfVertices * sizeof(Vertex))) * 2, COLOUR_TAG_BLUE);
D_800DC754[1] = (Triangle *) ((u32) D_800DC754[0] + numberOfTriangles * sizeof(Triangle));
D_800DC74C[0] = (Vertex *) ((u32) D_800DC754[1] + numberOfTriangles * sizeof(Triangle));
D_800DC74C[1] = (Vertex *) ((u32) D_800DC74C[0] + numberOfVertices * sizeof(Vertex));
D_8011AFF8 = numberOfVertices;
gBoostTris[1] = (Triangle *) ((u32) gBoostTris[0] + numberOfTriangles * sizeof(Triangle));
gBoostVerts[0] = (Vertex *) ((u32) gBoostTris[1] + numberOfTriangles * sizeof(Triangle));
gBoostVerts[1] = (Vertex *) ((u32) gBoostVerts[0] + numberOfVertices * sizeof(Vertex));
gBoostVertCount = numberOfVertices;
D_8011AFFC = 0;
D_8011B000 = numberOfTriangles;
gBoostTriCount = numberOfTriangles;
D_8011B004 = 0;
D_8011B008 = 0;
gBoostVertFlip = 0;
miscAsset20 = (Asset20 *) get_misc_asset(ASSET_MISC_20);
for (i = 0; i < ARRAY_COUNT(D_8011B020); i++) {
// Makes 10 boost objects, but only 8 racers can actually exist at once.
for (i = 0; i < NUMBER_OF_CHARACTERS; i++) {
objEntry.common.objectID = ASSET_OBJECT_ID_BOOST;
objEntry.common.size = 10;
objEntry.common.size = sizeof(LevelObjectEntry_unk8000B020);
objEntry.common.x = 0;
objEntry.common.y = 0;
objEntry.common.z = 0;
objEntry.unk8 = i;
D_8011B020[i] = spawn_object(&objEntry.common, 1);
if (D_8011B020[i] != NULL) {
D_8011B020[i]->properties.common.unk0 = 0;
D_8011B020[i]->properties.common.unk4 = 0;
gBoostEffectObjects[i] = spawn_object(&objEntry.common, OBJECT_SPAWN_UNK01);
if (gBoostEffectObjects[i] != NULL) {
gBoostEffectObjects[i]->properties.common.unk0 = 0;
gBoostEffectObjects[i]->properties.common.unk4 = 0;
miscAsset20[i].unk70 = 0;
miscAsset20[i].unk74 = 0.0f;
miscAsset20[i].unk78 = (Sprite *) func_8007C12C(miscAsset20[i].unk6C, 0);
miscAsset20[i].unk7C = load_texture(miscAsset20[i].unk6E);
miscAsset20[i].unk72 = get_random_number_from_range(0, 255);
miscAsset20[i].unk73 = 0;
D_8011B010[i] = get_random_number_from_range(0, 255);
// This is for shields, not boosts.
gShieldSineTime[i] = get_random_number_from_range(0, 255);
}
D_8011B068[i] = 1;
D_8011B068[i] = TRUE;
}
D_800DC760 = 9;
gBoostObjOverrideID = 9;
objEntry.common.objectID = ASSET_OBJECT_ID_SHIELD;
objEntry.common.size = 10;
objEntry.common.size = sizeof(LevelObjectEntry_unk8000B020);
objEntry.common.x = 0;
objEntry.common.y = 0;
objEntry.common.z = 0;
gShieldEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, 0);
for (i = 0; i < ARRAY_COUNT(D_8011B078); i++) {
D_8011B078[i].r = 0;
D_8011B078[i].g = get_random_number_from_range(0, 255);
D_8011B078[i].b = get_random_number_from_range(0, 255);
D_8011B078[i].a = 0;
gShieldEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, OBJECT_SPAWN_NONE);
for (i = 0; i < NUMBER_OF_CHARACTERS; i++) {
gRacerFXData[i].unk0 = 0;
gRacerFXData[i].unk1 = get_random_number_from_range(0, 255);
gRacerFXData[i].unk2 = get_random_number_from_range(0, 255);
gRacerFXData[i].unk3 = 0;
}
objEntry.common.objectID = ASSET_OBJECT_ID_AINODE;
objEntry.common.size = 138;
objEntry.common.size = sizeof(LevelObjectEntry_unk8000B020) + 0x80; // Not sure where this 0x80 comes from.
objEntry.common.x = 0;
objEntry.common.y = 0;
objEntry.common.z = 0;
gMagnetEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, 0);
gMagnetEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, OBJECT_SPAWN_NONE);
}
void func_8000B290(void) {
/**
* Attempts to free the boost, shield and magnet objects and assets.
*/
void racerfx_free(void) {
Sprite *sprite;
TextureHeader *texture;
Asset20 *asset20;
u32 i;
if (D_800DC754[0] != 0) {
mempool_free(D_800DC754[0]);
D_800DC754[0] = 0;
D_800DC754[1] = 0;
D_800DC74C[0] = 0;
D_800DC74C[1] = 0;
if (gBoostTris[0]) {
mempool_free(gBoostTris[0]);
gBoostTris[0] = NULL;
gBoostTris[1] = NULL;
gBoostVerts[0] = NULL;
gBoostVerts[1] = NULL;
}
asset20 = (Asset20 *) get_misc_asset(ASSET_MISC_20);
for (i = 0; i < 10; i++) {
for (i = 0; i < NUMBER_OF_CHARACTERS; i++) {
sprite = asset20[i].unk78;
if (sprite != NULL) {
sprite_free(sprite);
@@ -436,7 +446,11 @@ void func_8000B290(void) {
#pragma GLOBAL_ASM("asm/nonmatchings/objects/func_8000B38C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/objects/func_8000B750.s")
void func_8000BADC(s32 updateRate) {
/**
* Updates the racer FX object states.
* This includes the shield wobble timer, and the texture frames for the magnet and shield.
*/
void racerfx_update(s32 updateRate) {
s32 i;
Asset20 *asset20Part;
s32 temp;
@@ -444,16 +458,16 @@ void func_8000BADC(s32 updateRate) {
f32 updateRateF;
Object_Racer *racer;
D_8011B008 = 1 - D_8011B008;
gBoostVertFlip = 1 - gBoostVertFlip;
D_8011AFFC = 0;
D_8011B004 = 0;
asset20 = (Asset20 *) get_misc_asset(ASSET_MISC_20);
D_800DC760 = 9;
for (i = 0; i < 10; i++) {
if (D_8011B068[i] && D_8011B020[i] != NULL) {
D_8011B020[i]->properties.common.unk0 = 0;
gBoostObjOverrideID = 9;
for (i = 0; i < NUMBER_OF_CHARACTERS; i++) {
if (D_8011B068[i] && gBoostEffectObjects[i] != NULL) {
gBoostEffectObjects[i]->properties.common.unk0 = 0;
}
D_8011B068[i] = 1;
D_8011B068[i] = TRUE;
}
for (i = 0; i < gNumRacers; i++) {
updateRateF = (f32) updateRate;
@@ -463,7 +477,7 @@ void func_8000BADC(s32 updateRate) {
racer = &(*gRacers)[i]->unk64->racer;
asset20Part = &asset20[racer->racerIndex];
if (racer->shieldTimer != 0) {
D_8011B010[racer->racerIndex] += updateRate;
gShieldSineTime[racer->racerIndex] += updateRate;
}
asset20Part->unk72 += updateRate;
if (racer->boostTimer != 0) {
@@ -517,19 +531,19 @@ void func_8000BADC(s32 updateRate) {
func_8000B750((*gRacers)[i], racer->racerIndex, racer->vehicleIDPrev, racer->boostType, 0);
}
temp = racer->racerIndex;
D_8011B078[temp].g += updateRate;
D_8011B078[temp].b += updateRate;
gRacerFXData[temp].unk1 += updateRate;
gRacerFXData[temp].unk2 += updateRate;
if (racer->magnetTimer != 0) {
if (D_8011B078[temp].a + (updateRate << 2) < 32) {
D_8011B078[temp].a += (updateRate << 2);
if (gRacerFXData[temp].unk3 + (updateRate << 2) < 32) {
gRacerFXData[temp].unk3 += (updateRate << 2);
} else {
D_8011B078[temp].a = 32;
gRacerFXData[temp].unk3 = 32;
}
} else {
if (D_8011B078[temp].a - updateRate > 0) {
D_8011B078[temp].a -= updateRate;
if (gRacerFXData[temp].unk3 - updateRate > 0) {
gRacerFXData[temp].unk3 -= updateRate;
} else {
D_8011B078[temp].a = 0;
gRacerFXData[temp].unk3 = 0;
}
}
}
@@ -538,14 +552,18 @@ void func_8000BADC(s32 updateRate) {
}
}
Object *func_8000BF44(s32 arg0) {
if (arg0 == -1) {
arg0 = D_800DC760;
/**
* Returns the boost object with the given ID.
* Returns a specific ID if the arg passed is BOOST_DEFAULT.
*/
Object *racerfx_get_boost(s32 boostID) {
if (boostID == BOOST_DEFAULT) {
boostID = gBoostObjOverrideID;
}
if (arg0 < 0 || arg0 >= 10) {
if (boostID < 0 || boostID >= NUMBER_OF_CHARACTERS) {
return NULL;
}
return D_8011B020[arg0];
return gBoostEffectObjects[boostID];
}
/**
@@ -2341,7 +2359,7 @@ void obj_update(s32 updateRate) {
}
}
}
func_8000BADC(updateRate);
racerfx_update(updateRate);
for (i = gObjectListStart; i < j; i++) {
obj = gObjPtrList[i];
if ((!(obj->segment.trans.flags & OBJ_FLAGS_PARTICLE) && (obj->behaviorId == BHV_WEAPON)) ||
@@ -3383,7 +3401,7 @@ void func_800135B8(Object *boostObj) {
boostData = &boost->unk48;
break;
}
asset = (UnkAsset_800135B8 *)get_misc_asset(20);
asset = (UnkAsset_800135B8 *) get_misc_asset(20);
asset = &asset[D_8011B058[idx]];
object_do_player_tumble((Object *) boostObj->properties.common.unk0);
camera_push_model_mtx(&gObjectCurrDisplayList, &gObjectCurrMatrix,
@@ -3415,8 +3433,8 @@ void func_800135B8(Object *boostObj) {
hasTexture = 0;
}
vtx = &D_800DC74C[D_8011B008][(boostObj->properties.common.unk4 >> 14) & 0x3FFF];
tri = &D_800DC754[D_8011B008][boostObj->properties.common.unk4 & 0x3FFF];
vtx = &gBoostVerts[gBoostVertFlip][(boostObj->properties.common.unk4 >> 14) & 0x3FFF];
tri = &gBoostTris[gBoostVertFlip][boostObj->properties.common.unk4 & 0x3FFF];
gSPVertexDKR(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), 9, 0);
gSPPolygon(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), 8, hasTexture);
}
@@ -3476,7 +3494,7 @@ void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o
gObjectCurrMatrix = *mtx;
gObjectCurrVertexList = *vtxList;
racerIndex = racer->racerIndex;
if (racerIndex > 10) {
if (racerIndex > NUMBER_OF_CHARACTERS) {
racerIndex = 0;
}
vehicleID = racer->vehicleID;
@@ -3489,11 +3507,11 @@ void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o
gShieldEffectObject->segment.trans.x_position = shield->x_position;
gShieldEffectObject->segment.trans.y_position = shield->y_position;
gShieldEffectObject->segment.trans.z_position = shield->z_position;
gShieldEffectObject->segment.trans.y_position += shield->y_offset * sins_f(D_8011B010[racerIndex] * 0x200);
shear = (coss_f(D_8011B010[racerIndex] * 0x400) * 0.05f) + 0.95f;
gShieldEffectObject->segment.trans.y_position += shield->y_offset * sins_f(gShieldSineTime[racerIndex] * 0x200);
shear = (coss_f(gShieldSineTime[racerIndex] * 0x400) * 0.05f) + 0.95f;
gShieldEffectObject->segment.trans.scale = shield->scale * shear;
shear = shear * shield->turnSpeed;
gShieldEffectObject->segment.trans.rotation.y_rotation = D_8011B010[racerIndex] * 0x800;
gShieldEffectObject->segment.trans.rotation.y_rotation = gShieldSineTime[racerIndex] * 0x800;
gShieldEffectObject->segment.trans.rotation.x_rotation = 0x800;
gShieldEffectObject->segment.trans.rotation.z_rotation = 0;
shieldType = racer->shieldType;
@@ -3537,14 +3555,14 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o
ObjectModel *mdl;
f32 *magnet;
s32 vehicleID;
s32 var_t0;
s32 racerIndex;
s32 opacity;
f32 shear;
UNUSED s32 pad;
racer = &obj->unk64->racer;
var_t0 = racer->racerIndex;
if (D_8011B078[var_t0].a != 0) {
racerIndex = racer->racerIndex;
if (gRacerFXData[racerIndex].unk3 != 0) {
if (gMagnetEffectObject != NULL) {
gObjectCurrDisplayList = *dList;
gObjectCurrMatrix = *mtx;
@@ -3555,25 +3573,25 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o
vehicleID = VEHICLE_CAR;
}
magnet = &magnet[vehicleID * 5];
var_t0 = racer->racerIndex;
if (var_t0 > 10) {
var_t0 = 0;
racerIndex = racer->racerIndex;
if (racerIndex > NUMBER_OF_CHARACTERS) {
racerIndex = 0;
}
gMagnetEffectObject->segment.trans.x_position = magnet[0];
gMagnetEffectObject->segment.trans.y_position = magnet[1];
gMagnetEffectObject->segment.trans.z_position = magnet[2];
magnet += 3;
shear = (coss_f((D_8011B078[var_t0].g * 0x400)) * 0.02f) + 0.98f;
shear = (coss_f((gRacerFXData[racerIndex].unk1 * 0x400)) * 0.02f) + 0.98f;
gMagnetEffectObject->segment.trans.scale = magnet[0] * shear;
magnet += 1;
shear = magnet[0] * shear;
gMagnetEffectObject->segment.trans.rotation.y_rotation = D_8011B078[var_t0].b * 0x1000;
gMagnetEffectObject->segment.trans.rotation.y_rotation = gRacerFXData[racerIndex].unk2 * 0x1000;
gMagnetEffectObject->segment.trans.rotation.x_rotation = 0;
gMagnetEffectObject->segment.trans.rotation.z_rotation = 0;
gfxData = *gMagnetEffectObject->unk68;
mdl = gfxData->objModel;
gMagnetEffectObject->curVertData = (Vertex *) gfxData->vertices[gfxData->animationTaskNum];
opacity = ((D_8011B078[var_t0].g * 8) & 0x7F) + 0x80;
opacity = ((gRacerFXData[racerIndex].unk1 * 8) & 0x7F) + 0x80;
gfx_init_basic_xlu(&gObjectCurrDisplayList, DRAW_BASIC_2CYCLE, COLOUR_RGBA32(255, 255, 255, opacity),
gMagnetColours[racer->magnetModelID]);
apply_object_shear_matrix(&gObjectCurrDisplayList, &gObjectCurrMatrix, gMagnetEffectObject, obj, shear);
+13 -4
View File
@@ -21,6 +21,8 @@
#define NODE_NONE 255
#define BOOST_DEFAULT -1
enum ObjectBehaviours {
BHV_NONE,
BHV_RACER,
@@ -348,9 +350,16 @@ typedef struct Asset20 {
TextureHeader *unk7C;
} Asset20;
typedef struct RacerFXData {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
} RacerFXData;
extern s32 osCicId; // Used for an Anti-Piracy check in render_3d_model
Object *func_8000BF44(s32 arg0);
Object *racerfx_get_boost(s32 boostID);
void allocate_object_pools(void);
void clear_object_pointers(void);
void free_all_objects(void);
@@ -464,7 +473,7 @@ s32 timetrial_load_staff_ghost(s32 mapId);
void render_3d_billboard(Object *obj);
void render_misc_model(Object *obj, Vertex *verts, u32 numVertices, Triangle *triangles, u32 numTriangles,
TextureHeader *tex, u32 flags, u32 texOffset, f32 scale);
void func_8000B290(void);
void racerfx_free(void);
void func_80016BC4(Object *obj);
s32 ainode_register(Object *obj);
void obj_taj_create_balloon(s32 blockID, f32 x, f32 y, f32 z);
@@ -510,11 +519,11 @@ void func_80016748(Object *obj0, Object *obj1);
void race_finish_time_trial(void);
s32 obj_dist_racer(f32 x, f32 y, f32 z, f32 radius, s32 is2dCheck, Object **sortObj);
void mode_init_taj_race(void);
void func_8000BADC(s32 updateRate);
void racerfx_update(s32 updateRate);
f32 func_8002277C(f32 *data, s32 index, f32 x);
void race_transition_adventure(s32 updateRate);
void func_8001E4C4(void);
void func_8000B020(s32 numberOfVertices, s32 numberOfTriangles);
void racerfx_alloc(s32 numberOfVertices, s32 numberOfTriangles);
s32 func_80014B50(s32 arg0, s32 arg1, f32 arg2, u32 arg3);
/**
+2 -2
View File
@@ -242,7 +242,7 @@ void init_track(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle,
func_8000C8F8(collectables, 1);
gScenePlayerViewports = numberOfPlayers;
func_8000CC7C(vehicle, entranceId, numberOfPlayers);
func_8000B020(72, 64);
racerfx_alloc(72, 64);
if (geometry == 0 && entranceId == 0) {
transition_begin(&gCircleFadeToBlack);
@@ -2784,7 +2784,7 @@ LevelModel *get_current_level_model(void) {
void free_track(void) {
s32 i;
func_8000B290();
racerfx_free();
if (gWaveBlockCount != 0) {
free_waves();
}
+1 -1
View File
@@ -132,7 +132,7 @@ void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
update_vehicle_particles(obj, updateRate);
fade_when_near_camera(obj, racer, 40);
if (*startTimer != 100) {
someObj = func_8000BF44(-1);
someObj = racerfx_get_boost(BOOST_DEFAULT);
if (someObj != NULL) {
rocket = (Object_WizpigRocket *) someObj->unk64;
someObj->properties.racer.unk0 = 0;
+13 -13
View File
@@ -174,12 +174,12 @@ __seqpStopOsc = 0x8000AEFC;
set_voice_limit = 0x8000B010;
// objects.c .text
func_8000B020 = 0x8000B020;
func_8000B290 = 0x8000B290;
racerfx_alloc = 0x8000B020;
racerfx_free = 0x8000B290;
func_8000B38C = 0x8000B38C;
func_8000B750 = 0x8000B750;
func_8000BADC = 0x8000BADC;
func_8000BF44 = 0x8000BF44;
racerfx_update = 0x8000BADC;
racerfx_get_boost = 0x8000BF44;
allocate_object_pools = 0x8000BF8C;
decrypt_magic_codes = 0x8000C2D8;
clear_object_pointers = 0x8000C460;
@@ -2221,10 +2221,10 @@ D_800DC73C = 0x800DE0CC;
D_800DC740 = 0x800DE0D0;
gSwapLeadPlayer = 0x800DE0D4;
D_800DC748 = 0x800DE0D8;
D_800DC74C = 0x800DE0DC;
D_800DC754 = 0x800DE0E4;
gBoostVerts = 0x800DE0DC;
gBoostTris = 0x800DE0E4;
gShieldEffectObject = 0x800DE0EC;
D_800DC760 = 0x800DE0F0;
gBoostObjOverrideID = 0x800DE0F0;
gMagnetEffectObject = 0x800DE0F4;
D_800DC768 = 0x800DE0F8;
D_800DC76C = 0x800DE0FC;
@@ -3696,17 +3696,17 @@ gEnvmapPos = 0x8011CA58;
D_8011AFEE = 0x8011CA5E;
D_8011AFF0 = 0x8011CA60;
D_8011AFF4 = 0x8011CA64;
D_8011AFF8 = 0x8011CA68;
gBoostVertCount = 0x8011CA68;
D_8011AFFC = 0x8011CA6C;
D_8011B000 = 0x8011CA70;
gBoostTriCount = 0x8011CA70;
D_8011B004 = 0x8011CA74;
D_8011B008 = 0x8011CA78;
D_8011B010 = 0x8011CA80;
D_8011B020 = 0x8011CA90;
gBoostVertFlip = 0x8011CA78;
gShieldSineTime = 0x8011CA80;
gBoostEffectObjects = 0x8011CA90;
D_8011B048 = 0x8011CAB8;
D_8011B058 = 0x8011CAC8;
D_8011B068 = 0x8011CAD8;
D_8011B078 = 0x8011CAE8;
gRacerFXData = 0x8011CAE8;
D_8011B07B = 0x8011CAEB;
D_8011B080 = 0x8011CAF0;
+13 -13
View File
@@ -174,12 +174,12 @@ __seqpStopOsc = 0x8000AEFC;
set_voice_limit = 0x8000B010;
// objects.c .text
func_8000B020 = 0x8000B020;
func_8000B290 = 0x8000B290;
racerfx_alloc = 0x8000B020;
racerfx_free = 0x8000B290;
func_8000B38C = 0x8000B38C;
func_8000B750 = 0x8000B750;
func_8000BADC = 0x8000BADC;
func_8000BF44 = 0x8000BF44;
racerfx_update = 0x8000BADC;
racerfx_get_boost = 0x8000BF44;
allocate_object_pools = 0x8000BF8C;
decrypt_magic_codes = 0x8000C2D8;
clear_object_pointers = 0x8000C460;
@@ -2121,10 +2121,10 @@ D_800DC73C = 0x800DC7CC;
D_800DC740 = 0x800DC7D0;
gSwapLeadPlayer = 0x800DC7D4;
D_800DC748 = 0x800DC7D8;
D_800DC74C = 0x800DC7DC;
D_800DC754 = 0x800DC7E4;
gBoostVerts = 0x800DC7DC;
gBoostTris = 0x800DC7E4;
gShieldEffectObject = 0x800DC7EC;
D_800DC760 = 0x800DC7F0;
gBoostObjOverrideID = 0x800DC7F0;
gMagnetEffectObject = 0x800DC7F4;
D_800DC768 = 0x800DC7F8;
D_800DC76C = 0x800DC7FC;
@@ -3434,17 +3434,17 @@ gEnvmapPos = 0x8011B078;
D_8011AFEE = 0x8011B07E;
D_8011AFF0 = 0x8011B080;
D_8011AFF4 = 0x8011B084;
D_8011AFF8 = 0x8011B088;
gBoostVertCount = 0x8011B088;
D_8011AFFC = 0x8011B08C;
D_8011B000 = 0x8011B090;
gBoostTriCount = 0x8011B090;
D_8011B004 = 0x8011B094;
D_8011B008 = 0x8011B098;
D_8011B010 = 0x8011B0A0;
D_8011B020 = 0x8011B0B0;
gBoostVertFlip = 0x8011B098;
gShieldSineTime = 0x8011B0A0;
gBoostEffectObjects = 0x8011B0B0;
D_8011B048 = 0x8011B0D8;
D_8011B058 = 0x8011B0E8;
D_8011B068 = 0x8011B0F8;
D_8011B078 = 0x8011B108;
gRacerFXData = 0x8011B108;
D_8011B07B = 0x8011B10B;
D_8011B080 = 0x8011B110;
gSceneCurrDisplayList = 0x8011B130;
+13 -13
View File
@@ -174,12 +174,12 @@ __seqpStopOsc = 0x8000AEFC;
set_voice_limit = 0x8000B010;
// objects.c .text
func_8000B020 = 0x8000B020;
func_8000B290 = 0x8000B290;
racerfx_alloc = 0x8000B020;
racerfx_free = 0x8000B290;
func_8000B38C = 0x8000B38C;
func_8000B750 = 0x8000B750;
func_8000BADC = 0x8000BADC;
func_8000BF44 = 0x8000BF44;
racerfx_update = 0x8000BADC;
racerfx_get_boost = 0x8000BF44;
allocate_object_pools = 0x8000BF8C;
decrypt_magic_codes = 0x8000C2D8;
clear_object_pointers = 0x8000C460;
@@ -2048,10 +2048,10 @@ D_800DC73C = 0x800DCD3C;
D_800DC740 = 0x800DCD40;
gSwapLeadPlayer = 0x800DCD44;
D_800DC748 = 0x800DCD48;
D_800DC74C = 0x800DCD4C;
D_800DC754 = 0x800DCD54;
gBoostVerts = 0x800DCD4C;
gBoostTris = 0x800DCD54;
gShieldEffectObject = 0x800DCD5C;
D_800DC760 = 0x800DCD60;
gBoostObjOverrideID = 0x800DCD60;
gMagnetEffectObject = 0x800DCD64;
D_800DC768 = 0x800DCD68;
D_800DC76C = 0x800DCD6C;
@@ -3364,17 +3364,17 @@ gEnvmapPos = 0x8011B5F8;
D_8011AFEE = 0x8011B5FE;
D_8011AFF0 = 0x8011B600;
D_8011AFF4 = 0x8011B604;
D_8011AFF8 = 0x8011B608;
gBoostVertCount = 0x8011B608;
D_8011AFFC = 0x8011B60C;
D_8011B000 = 0x8011B610;
gBoostTriCount = 0x8011B610;
D_8011B004 = 0x8011B614;
D_8011B008 = 0x8011B618;
D_8011B010 = 0x8011B620;
D_8011B020 = 0x8011B630;
gBoostVertFlip = 0x8011B618;
gShieldSineTime = 0x8011B620;
gBoostEffectObjects = 0x8011B630;
D_8011B048 = 0x8011B658;
D_8011B058 = 0x8011B668;
D_8011B068 = 0x8011B678;
D_8011B078 = 0x8011B688;
gRacerFXData = 0x8011B688;
D_8011B07B = 0x8011B68B;
D_8011B080 = 0x8011B690;
gSceneCurrDisplayList = 0x8011B6B0;
+13 -13
View File
@@ -174,12 +174,12 @@ __seqpStopOsc = 0x8000AEFC;
set_voice_limit = 0x8000B010;
// objects.c .text
func_8000B020 = 0x8000B020;
func_8000B290 = 0x8000B290;
racerfx_alloc = 0x8000B020;
racerfx_free = 0x8000B290;
func_8000B38C = 0x8000B38C;
func_8000B750 = 0x8000B750;
func_8000BADC = 0x8000BADC;
func_8000BF44 = 0x8000BF44;
racerfx_update = 0x8000BADC;
racerfx_get_boost = 0x8000BF44;
allocate_object_pools = 0x8000BF8C;
decrypt_magic_codes = 0x8000C2D8;
clear_object_pointers = 0x8000C460;
@@ -2216,10 +2216,10 @@ D_800DC73C = 0x800DC73C;
D_800DC740 = 0x800DC740;
gSwapLeadPlayer = 0x800DC744;
D_800DC748 = 0x800DC748;
D_800DC74C = 0x800DC74C;
D_800DC754 = 0x800DC754;
gBoostVerts = 0x800DC74C;
gBoostTris = 0x800DC754;
gShieldEffectObject = 0x800DC75C;
D_800DC760 = 0x800DC760;
gBoostObjOverrideID = 0x800DC760;
gMagnetEffectObject = 0x800DC764;
D_800DC768 = 0x800DC768;
D_800DC76C = 0x800DC76C;
@@ -3811,17 +3811,17 @@ gEnvmapPos = 0x8011AFE8;
D_8011AFEE = 0x8011AFEE;
D_8011AFF0 = 0x8011AFF0;
D_8011AFF4 = 0x8011AFF4;
D_8011AFF8 = 0x8011AFF8;
gBoostVertCount = 0x8011AFF8;
D_8011AFFC = 0x8011AFFC;
D_8011B000 = 0x8011B000;
gBoostTriCount = 0x8011B000;
D_8011B004 = 0x8011B004;
D_8011B008 = 0x8011B008;
D_8011B010 = 0x8011B010;
D_8011B020 = 0x8011B020;
gBoostVertFlip = 0x8011B008;
gShieldSineTime = 0x8011B010;
gBoostEffectObjects = 0x8011B020;
D_8011B048 = 0x8011B048;
D_8011B058 = 0x8011B058;
D_8011B068 = 0x8011B068;
D_8011B078 = 0x8011B078;
gRacerFXData = 0x8011B078;
D_8011B07B = 0x8011B07B;
D_8011B080 = 0x8011B080;
+13 -13
View File
@@ -174,12 +174,12 @@ __seqpStopOsc = 0x8000AEFC;
set_voice_limit = 0x8000B010;
// objects.c .text
func_8000B020 = 0x8000B020;
func_8000B290 = 0x8000B290;
racerfx_alloc = 0x8000B020;
racerfx_free = 0x8000B290;
func_8000B38C = 0x8000B38C;
func_8000B750 = 0x8000B750;
func_8000BADC = 0x8000BADC;
func_8000BF44 = 0x8000BF44;
racerfx_update = 0x8000BADC;
racerfx_get_boost = 0x8000BF44;
allocate_object_pools = 0x8000BF8C;
decrypt_magic_codes = 0x8000C2D8;
clear_object_pointers = 0x8000C460;
@@ -2045,10 +2045,10 @@ D_800DC73C = 0x800DCCAC;
D_800DC740 = 0x800DCCB0;
gSwapLeadPlayer = 0x800DCCB4;
D_800DC748 = 0x800DCCB8;
D_800DC74C = 0x800DCCBC;
D_800DC754 = 0x800DCCC4;
gBoostVerts = 0x800DCCBC;
gBoostTris = 0x800DCCC4;
gShieldEffectObject = 0x800DCCCC;
D_800DC760 = 0x800DCCD0;
gBoostObjOverrideID = 0x800DCCD0;
gMagnetEffectObject = 0x800DCCD4;
D_800DC768 = 0x800DCCD8;
D_800DC76C = 0x800DCCDC;
@@ -3360,17 +3360,17 @@ gEnvmapPos = 0x8011B568;
D_8011AFEE = 0x8011B56E;
D_8011AFF0 = 0x8011B570;
D_8011AFF4 = 0x8011B574;
D_8011AFF8 = 0x8011B578;
gBoostVertCount = 0x8011B578;
D_8011AFFC = 0x8011B57C;
D_8011B000 = 0x8011B580;
gBoostTriCount = 0x8011B580;
D_8011B004 = 0x8011B584;
D_8011B008 = 0x8011B588;
D_8011B010 = 0x8011B590;
D_8011B020 = 0x8011B5A0;
gBoostVertFlip = 0x8011B588;
gShieldSineTime = 0x8011B590;
gBoostEffectObjects = 0x8011B5A0;
D_8011B048 = 0x8011B5C8;
D_8011B058 = 0x8011B5D8;
D_8011B068 = 0x8011B5E8;
D_8011B078 = 0x8011B5F8;
gRacerFXData = 0x8011B5F8;
D_8011B07B = 0x8011B5FB;
D_8011B080 = 0x8011B600;
gSceneCurrDisplayList = 0x8011B620;