mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Name some racer FX related bits (#560)
* wow!!! * Update README.md * Forgot to format * macro
This commit is contained in:
@@ -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 -->
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user