From fabec5a79f01498661b6606b68ad31638d6d6e3a Mon Sep 17 00:00:00 2001 From: Unnunu Date: Sat, 12 Apr 2025 23:47:30 +0300 Subject: [PATCH] fixed almost all types in particles.c --- include/structs.h | 13 +- src/object_functions.c | 44 ++-- src/objects.c | 4 +- src/objects.h | 1 + src/particles.c | 469 ++++++++++++++++++++--------------------- src/particles.h | 105 ++++----- src/racer.c | 28 +-- src/vehicle_bluey.c | 4 +- src/vehicle_bubbler.c | 2 +- src/vehicle_rocket.c | 4 +- src/vehicle_smokey.c | 4 +- src/vehicle_tricky.c | 4 +- src/vehicle_wizpig.c | 4 +- 13 files changed, 329 insertions(+), 357 deletions(-) diff --git a/include/structs.h b/include/structs.h index d065ec48..2a21a89e 100644 --- a/include/structs.h +++ b/include/structs.h @@ -1722,17 +1722,6 @@ typedef struct Object_68 { /* 0x50 */ s16 unk50; } Object_68; -/* Size: 0x20 bytes */ -typedef struct ParticleEmitter { - /* 0x00 */ struct ParticleBehavior *behaviour; - /* 0x04 */ s16 unk4; - /* 0x06 */ u8 unk6; - /* 0x07 */ u8 unk7; - /* 0x08 */ s16 unk8; - /* 0x0A */ s16 unkA; - /* 0x0C */ u8 padC[0x14]; -} ParticleEmitter; - /* Size: 0xA0 bytes */ typedef struct ParticleBehavior { s32 flags; @@ -1921,7 +1910,7 @@ typedef struct Object { /* 0x0060 */ Object_60 *unk60; //player + 0x340 /* 0x0064 */ Object_64 *unk64; //player + 0x98 /* 0x0068 */ Object_68 **unk68; //player + 0x80 - /* 0x006C */ ParticleEmitter *particleEmitter; //player + 0x370 + /* 0x006C */ struct ParticleEmitter *particleEmitter; //player + 0x370 /* 0x0070 */ Object_LightData **lightData; /* 0x0074 */ u32 particleEmitFlags; /* 0x0078 */ ObjProperties properties; diff --git a/src/object_functions.c b/src/object_functions.c index 9f9a92ba..e0eec29e 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -162,7 +162,7 @@ void obj_loop_scenery(Object *obj, s32 updateRate) { } else { particleFlagShift = get_random_number_from_range(0, obj->segment.header->particleCount - 1); } - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1 << particleFlagShift; + obj->particleEmitFlags = OBJ_EMIT_1 << particleFlagShift; obj_spawn_particle(obj, LOGIC_30FPS); } } @@ -277,7 +277,7 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 updateRate) { } } if (obj->behaviorId == BHV_FIREBALL_OCTOWEAPON) { - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(obj, updateRate); obj->properties.fireball.timer -= updateRate; if (obj->properties.fireball.timer < 0) { @@ -1907,7 +1907,7 @@ void obj_loop_wizpigship(Object *wizShipObj, s32 updateRate) { wizShipObj->properties.fireball.timer = 0; } if ((wizShipObj->unk60 != NULL) && (wizShipObj->properties.fireball.timer == 0)) { - if (wizShipObj->particleEmitFlags & OBJ_EMIT_PARTICLE_1) { + if (wizShipObj->particleEmitFlags & OBJ_EMIT_1) { wizShipObj->properties.fireball.timer = 20; object_transform_to_matrix(shipMtx, &wizShipObj->segment.trans); trans.x_position = 0.0f; @@ -2055,7 +2055,7 @@ void obj_loop_char_select(Object *charSelectObj, s32 updateRate) { var_s0 = 0; func_8001F460(charSelectObj, updateRate, NULL); charSelect = &charSelectObj->unk64->characterSelect; - charSelectObj->particleEmitFlags = OBJ_EMIT_OFF; + charSelectObj->particleEmitFlags = OBJ_EMIT_NONE; if (charSelect != NULL) { gfxData = charSelectObj->unk68[charSelectObj->segment.object.modelIndex]; if (gfxData != NULL) { @@ -2101,7 +2101,7 @@ void obj_loop_char_select(Object *charSelectObj, s32 updateRate) { status = charselect_status(); for (i2 = 0; i2 < sp4F; i2++) { if (status[sp50[i2]] == 1) { - charSelectObj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + charSelectObj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(charSelectObj, LOGIC_30FPS); } } @@ -2286,7 +2286,7 @@ void obj_init_bombexplosion(Object *obj, LevelObjectEntry_BombExplosion *entry) if (entry->unk8) { obj->properties.bombExplosion.unk4 |= (entry2->unk8 << 8) & 0xFF00; } - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; } void obj_loop_bombexplosion(Object *obj, s32 updateRate) { @@ -2312,7 +2312,7 @@ void obj_loop_bombexplosion(Object *obj, s32 updateRate) { if (obj->particleEmitFlags) { if (get_number_of_active_players() < THREE_PLAYERS) { obj_spawn_particle(obj, LOGIC_30FPS); - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } } } @@ -2572,7 +2572,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } taj = (Object_NPC *) obj->unk64; levelHeader = get_current_level_header(); - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (obj->segment.animFrame == 0 && taj->animFrameF > 1.0) { taj->animFrameF = 0.0f; } @@ -2811,10 +2811,10 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { racer_set_dialogue_camera(); taj->animFrameF += updateRateF * 2.0; if (taj->animFrameF > 25.0) { - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1 | OBJ_EMIT_PARTICLE_2 | OBJ_EMIT_PARTICLE_4; + obj->particleEmitFlags = OBJ_EMIT_1 | OBJ_EMIT_2 | OBJ_EMIT_4; } if (taj->animFrameF > 50.0) { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } if (taj->animFrameF > 60.0) { taj->animFrameF = 60.0f; @@ -3420,7 +3420,7 @@ void obj_loop_goldenballoon(Object *obj, s32 updateRate) { flag = 0x10000 << levelEntry->goldenBalloon.balloonID; if (settings->courseFlagsPtr[settings->courseId] & flag) { if (obj->properties.npc.timer > 0) { - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_2; + obj->particleEmitFlags = OBJ_EMIT_2; obj_spawn_particle(obj, updateRate); obj->properties.npc.timer -= updateRate; } else { @@ -3452,7 +3452,7 @@ void obj_loop_goldenballoon(Object *obj, s32 updateRate) { sound_play_spatial(SOUND_COLLECT_BALLOON, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); obj->properties.npc.timer = 16; - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_2; + obj->particleEmitFlags = OBJ_EMIT_2; obj->segment.trans.flags |= OBJ_FLAGS_INVISIBLE; obj_spawn_particle(obj, updateRate); } @@ -4352,7 +4352,7 @@ void obj_loop_banana(Object *obj, s32 updateRate) { if (properties->status == BANANA_COLLECTED) { obj->segment.trans.flags |= OBJ_FLAGS_INVISIBLE; properties->destroyTimer -= updateRate; - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(obj, updateRate); if (properties->destroyTimer <= 0) { free_object(obj); @@ -4451,7 +4451,7 @@ void obj_loop_banana(Object *obj, s32 updateRate) { free_object(obj); } else { properties->status = BANANA_COLLECTED; - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(obj, updateRate); } } @@ -4545,7 +4545,7 @@ void obj_loop_silvercoin(Object *obj, s32 updateRate) { } if (obj->properties.npc.timer > 0) { obj->properties.npc.timer -= updateRate; - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(obj, updateRate); } } @@ -4687,7 +4687,7 @@ void obj_loop_weaponballoon(Object *weaponBalloonObj, s32 updateRate) { weaponBalloonObj->segment.trans.flags &= ~OBJ_FLAGS_INVISIBLE; } if (weaponBalloonObj->properties.weaponBalloon.particleTimer > 0) { - weaponBalloonObj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + weaponBalloonObj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(weaponBalloonObj, updateRate); weaponBalloonObj->properties.weaponBalloon.particleTimer -= updateRate; } @@ -4766,7 +4766,7 @@ void obj_loop_weaponballoon(Object *weaponBalloonObj, s32 updateRate) { sound_play(SOUND_COLLECT_ITEM + racer->balloon_level, NULL); } } - weaponBalloonObj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + weaponBalloonObj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(weaponBalloonObj, updateRate); weaponBalloon->respawnTime = 90; } @@ -5081,7 +5081,7 @@ void homing_rocket_prevent_overshoot(Object *obj, s32 updateRate, Object_Weapon } play_rocket_trailing_sound(obj, rocket, SOUND_HOMING_ROCKET); if (get_number_of_active_players() < 3) { - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags |= OBJ_EMIT_1; obj_spawn_particle(obj, updateRate); } } @@ -5264,7 +5264,7 @@ void weapon_trap(Object *weaponObj, s32 updateRate) { } } if (weaponProperties->status == WEAPON_DESTROY) { - weaponObj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + weaponObj->particleEmitFlags = OBJ_EMIT_1; obj_spawn_particle(weaponObj, updateRate); weaponObj->segment.trans.flags |= OBJ_FLAGS_INVISIBLE; weaponProperties->scale -= updateRate; @@ -6289,9 +6289,9 @@ void obj_init_bubbler(Object *obj, LevelObjectEntry_Bubbler *entry) { */ void obj_loop_bubbler(Object *obj, s32 updateRate) { if (obj->properties.common.unk0 >= get_random_number_from_range(0, 1024)) { - obj->particleEmitFlags = OBJ_EMIT_PARTICLE_1; + obj->particleEmitFlags = OBJ_EMIT_1; } else { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } if (get_number_of_active_players() < 2) { obj_spawn_particle(obj, updateRate); @@ -6330,7 +6330,7 @@ void obj_loop_rangetrigger(Object *obj, s32 updateRate) { if (obj_dist_racer(obj->segment.trans.x_position, 0, obj->segment.trans.z_position, entry->radius, 1, objs) > 0) { obj->particleEmitFlags = entry->particleFlags; } else { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } obj_spawn_particle(obj, updateRate); } diff --git a/src/objects.c b/src/objects.c index b9d32adb..043e9698 100644 --- a/src/objects.c +++ b/src/objects.c @@ -2063,10 +2063,10 @@ s32 obj_init_emitter(Object *obj, ParticleEmitter *emitter) { particleDataEntry = obj->segment.header->objectParticles; for (i = 0; i < obj->segment.header->particleCount; i++) { if ((particleDataEntry[i].upper & 0xFFFF0000) == 0xFFFF0000) { - partInitTrigger((Particle *) &obj->particleEmitter[i], (particleDataEntry[i].upper >> 8) & 0xFF, + partInitTrigger(&obj->particleEmitter[i], (particleDataEntry[i].upper >> 8) & 0xFF, particleDataEntry[i].upper & 0xFF); } else { - func_800AF29C((Particle *) &obj->particleEmitter[i], (particleDataEntry[i].upper >> 0x18) & 0xFF, + func_800AF29C(&obj->particleEmitter[i], (particleDataEntry[i].upper >> 0x18) & 0xFF, (particleDataEntry[i].upper >> 0x10) & 0xFF, particleDataEntry[i].upper & 0xFFFF, (particleDataEntry[i].lower >> 0x10) & 0xFFFF, particleDataEntry[i].lower & 0xFFFF); } diff --git a/src/objects.h b/src/objects.h index eea5d3ab..c9fad43a 100644 --- a/src/objects.h +++ b/src/objects.h @@ -8,6 +8,7 @@ #include "libc/math.h" #include "camera.h" #include "lights.h" +#include "particles.h" #define NEW_OBJECT_ENTRY(entryVar, entryId, entrySize, xPos, yPos, zPos) { \ diff --git a/src/particles.c b/src/particles.c index 0364ae02..78f7c7dd 100644 --- a/src/particles.c +++ b/src/particles.c @@ -262,11 +262,11 @@ void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 Triangle *sp50; s32 i; s16 *asset2F; - ParticleModel* modelPtr; + ParticleModel *modelPtr; s32 zero = 0; - + D_800E2D00->word = 0; - + if (arg0 < 0) { arg0 = 0x10; } @@ -292,20 +292,23 @@ void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 D_800E2CC8 = 0; gMaxSpriteParticles = arg4; D_800E2CD4 = 0; - + free_particle_vertex_triangles(); - gParticleVertexBuffer = mempool_alloc_safe((3 * arg0 + 4 * arg1 + 6 * arg3 + 16 * arg4) * sizeof(Vertex), COLOUR_TAG_SEMITRANS_GREY); + gParticleVertexBuffer = + mempool_alloc_safe((3 * arg0 + 4 * arg1 + 6 * arg3 + 16 * arg4) * sizeof(Vertex), COLOUR_TAG_SEMITRANS_GREY); gParticleTriangleBuffer = mempool_alloc_safe((arg0 + 2 * arg1) * sizeof(Triangle), COLOUR_TAG_SEMITRANS_GREY); D_800E2CDC = 0; - + free_particle_buffers(); if (gMaxTriangleParticles > 0) { gNumTriangleParticles = 0; - gTriangleParticleBuffer = mempool_alloc_safe(arg0 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); + gTriangleParticleBuffer = + mempool_alloc_safe(arg0 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); } if (gMaxRectangleParticles > 0) { gNumRectangleParticles = 0; - gRectangleParticleBuffer = mempool_alloc_safe(arg1 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); + gRectangleParticleBuffer = + mempool_alloc_safe(arg1 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); } if (gMaxPointParticles > 0) { gNumPointParticles = 0; @@ -313,13 +316,15 @@ void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 } if (gMaxLineParticles > 0) { gNumLineParticles = 0; - gLineParticleBuffer = mempool_alloc_safe(arg3 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); + gLineParticleBuffer = + mempool_alloc_safe(arg3 * (sizeof(Particle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); } if (gMaxSpriteParticles > 0) { gNumSpriteParticles = 0; - gSpriteParticleBuffer = mempool_alloc_safe(arg4 * (sizeof(SpriteParticle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); + gSpriteParticleBuffer = + mempool_alloc_safe(arg4 * (sizeof(SpriteParticle) + sizeof(ParticleModel)), COLOUR_TAG_SEMITRANS_GREY); } - + sp54 = &gParticleVertexBuffer[zero]; sp50 = &gParticleTriangleBuffer[zero]; @@ -334,7 +339,7 @@ void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 gRectangleParticleBuffer[i].modelData = &modelPtr[i]; generate_particle_shape_quad(gRectangleParticleBuffer[i].modelData, &sp54, &sp50); } - + modelPtr = &gLineParticleBuffer[gMaxLineParticles]; for (i = 0; i < gMaxLineParticles; i++) { gLineParticleBuffer[i].modelData = &modelPtr[i]; @@ -348,39 +353,39 @@ void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 sp50 = D_800E2D78; generate_particle_shape_sprite(gSpriteParticleBuffer[i].base.modelData, &sp54, &sp50); } - + for (i = 0; i < gMaxTriangleParticles; i++) { gTriangleParticleBuffer[i].segment.particle.unk2C = 0; } - + for (i = 0; i < gMaxRectangleParticles; i++) { gRectangleParticleBuffer[i].segment.particle.unk2C = 0; } - + for (i = 0; i < gMaxPointParticles; i++) { gPointParticleBuffer[i].segment.particle.unk2C = 0; } - + for (i = 0; i < gMaxLineParticles; i++) { gLineParticleBuffer[i].segment.particle.unk2C = 0; } - + for (i = 0; i < gMaxSpriteParticles; i++) { gSpriteParticleBuffer[i].base.segment.particle.unk2C = 0; } - + if (D_800E2E60 == NULL) { asset2F = load_asset_section_from_rom(ASSET_BINARY_47); D_800E2E64 = 0; while (asset2F[D_800E2E64] != -1) { D_800E2E64++; } - + D_800E2E60 = mempool_alloc_safe(D_800E2E64 * 4, COLOUR_TAG_BLUE); for (i = 0; i < D_800E2E64; i++) { D_800E2E60[i] = (Sprite *) func_8007C12C(asset2F[i] & 0x3FFF, 1); } - + mempool_free(asset2F); } } @@ -555,78 +560,77 @@ void func_800AF134(ParticleEmitter *emitter, s32 behaviourID, s32 propertyID, s1 behaviourID = 0; } behaviour = gParticleBehavioursAssetTable[behaviourID]; - if (emitter->unk8 != propertyID || behaviour != emitter->behaviour) { + if (emitter->propertyID != propertyID || behaviour != emitter->behaviour) { func_800B2260(emitter); func_800AF29C(emitter, behaviourID, propertyID, velX, velY, velZ); } } -void partInitTrigger(Particle *particle, s32 behaviourID, s32 propertyID) { +void partInitTrigger(ParticleEmitter *emitter, s32 behaviourID, s32 propertyID) { ParticleBehavior *behaviour; if (behaviourID < gParticleBehavioursAssetTableCount) { behaviour = gParticleBehavioursAssetTable[behaviourID]; - func_800AF29C(particle, behaviourID, propertyID, behaviour->velX, behaviour->velY, behaviour->velZ); + func_800AF29C(emitter, behaviourID, propertyID, behaviour->velX, behaviour->velY, behaviour->velZ); } } -void func_800AF29C(Particle *arg0, s32 behaviourID, s32 propertyID, s16 velX, s16 velY, s16 velZ) { +void func_800AF29C(ParticleEmitter *arg0, s32 behaviourID, s32 propertyID, s16 velX, s16 velY, s16 velZ) { ParticleBehavior *behaviour; s32 flags; behaviour = gParticleBehavioursAssetTable[behaviourID]; - arg0->data.propertyID = propertyID; - arg0->data.behaviour = behaviour; - arg0->data.baseVelX = velX; - arg0->data.baseVelY = velY; - arg0->data.baseVelZ = velZ; - arg0->data.unk1E = 0; + arg0->propertyID = propertyID; + arg0->behaviour = behaviour; + arg0->baseVelX = velX; + arg0->baseVelY = velY; + arg0->baseVelZ = velZ; + arg0->unk1E = 0; flags = behaviour->flags; if (flags & 0x4000) { - arg0->data.flags = 0x4000; - arg0->data.unk6 = 0; - arg0->data.pos.x = 0.0f; - arg0->data.pos.y = 0.0f; - arg0->data.pos.z = 0.0f; + arg0->flags = 0x4000; + arg0->unk6 = 0; + arg0->pos.x = 0.0f; + arg0->pos.y = 0.0f; + arg0->pos.z = 0.0f; } else if (flags & 0x400) { - arg0->data.unk6 = 0; - arg0->data.flags = 0x400; + arg0->unk6 = 0; + arg0->flags = 0x400; if (gParticlesAssetTable[propertyID]->lifeTime <= 255) { - arg0->data.lifeTime = gParticlesAssetTable[propertyID]->lifeTime; + arg0->lifeTime = gParticlesAssetTable[propertyID]->lifeTime; } else { - arg0->data.lifeTime = 255; + arg0->lifeTime = 255; } - arg0->data.unkC_400.unkC = - (s32 *) mempool_alloc_safe(arg0->data.lifeTime * sizeof(uintptr_t), COLOUR_TAG_SEMITRANS_GREY); - arg0->data.unkC_400.unk10 = behaviour->unk14; - arg0->data.unkC_400.unk12 = behaviour->unk16; - arg0->data.unkC_400.unk14 = behaviour->unk22; - arg0->data.unkC_400.unk16 = behaviour->unk24; + arg0->unkC_400.unkC = (s32 *) mempool_alloc_safe(arg0->lifeTime * sizeof(uintptr_t), COLOUR_TAG_SEMITRANS_GREY); + arg0->unkC_400.unk10 = behaviour->unk14; + arg0->unkC_400.unk12 = behaviour->unk16; + arg0->unkC_400.unk14 = behaviour->unk22; + arg0->unkC_400.unk16 = behaviour->unk24; } else { - arg0->data.flags = 0; - arg0->data.angle.rotation.y_rotation = behaviour->unk14; - arg0->data.angle.rotation.x_rotation = behaviour->unk16; - arg0->data.angle.rotation.z_rotation = behaviour->unk18; - arg0->data.angle.direction.y_rotation = behaviour->unk22; - arg0->data.angle.direction.x_rotation = behaviour->unk24; - arg0->data.angle.direction.z_rotation = behaviour->unk26; + arg0->flags = 0; + arg0->angle.rotation.y_rotation = behaviour->unk14; + arg0->angle.rotation.x_rotation = behaviour->unk16; + arg0->angle.rotation.z_rotation = behaviour->unk18; + arg0->angle.direction.y_rotation = behaviour->unk22; + arg0->angle.direction.x_rotation = behaviour->unk24; + arg0->angle.direction.z_rotation = behaviour->unk26; } } #ifdef NON_EQUIVALENT void func_800AF404(s32 updateRate) { s32 i; - + D_800E2E28 = (D_800E2E28 + (updateRate << 6)) & 0x1FF; - + for (i = 0; i < ARRAY_COUNT(D_800E2D08); i++) { D_800E2D08[i].uv2.v = D_800E2D58[i].s[0] + D_800E2E28; D_800E2D08[i].uv1.v = D_800E2D58[i].s[1] + D_800E2E28; D_800E2D08[i].uv0.v = D_800E2D58[i].s[2] + D_800E2E28; } - + for (i = 0; i < ARRAY_COUNT(D_800E2D78); i++) { D_800E2D78[i].uv0.v = D_800E2DF8[i].s[0] + D_800E2E28; D_800E2D78[i].uv1.v = D_800E2DF8[i].s[1] + D_800E2E28; @@ -639,59 +643,59 @@ void func_800AF404(s32 updateRate) { void func_800AF52C(Object *obj, s32 arg1) { s32 i; - Particle *temp_v0; + ParticleEmitter *temp_v0; ParticleBehavior *behaviour; Particle *temp; - temp_v0 = (Particle *) &obj->particleEmitter[arg1].behaviour; - behaviour = temp_v0->data.behaviour; - temp_v0->data.opacity = 0; - if (temp_v0->data.flags & 0x4000) { - temp_v0->segment.trans.x_position = obj->segment.trans.x_position; - temp_v0->segment.trans.y_position = obj->segment.trans.y_position; - temp_v0->segment.trans.z_position = obj->segment.trans.z_position; - } else if (temp_v0->data.flags & 0x400) { - temp_v0->data.opacity = gParticlesAssetTable[temp_v0->data.propertyID]->colour.a << 8; + temp_v0 = &obj->particleEmitter[arg1]; + behaviour = temp_v0->behaviour; + temp_v0->opacity = 0; + if (temp_v0->flags & 0x4000) { + temp_v0->pos.x = obj->segment.trans.x_position; + temp_v0->pos.y = obj->segment.trans.y_position; + temp_v0->pos.z = obj->segment.trans.z_position; + } else if (temp_v0->flags & 0x400) { + temp_v0->opacity = gParticlesAssetTable[temp_v0->propertyID]->colour.a << 8; - if (temp_v0->data.unk6 > 0) { // Useless if statement, since the loop already does this. - for (i = 0; i < temp_v0->data.unk6; i++) { - temp = temp_v0->data.unkC_60[i]; + if (temp_v0->unk6 > 0) { // Useless if statement, since the loop already does this. + for (i = 0; i < temp_v0->unk6; i++) { + temp = temp_v0->unkC_60[i]; temp->segment.particle.destroyTimer = 0; } } if (behaviour->flags & 1) { - temp_v0->data.angle.rotation.z_rotation = behaviour->unk14; - temp_v0->data.angle.direction.y_rotation = behaviour->unk16; + temp_v0->angle.rotation.z_rotation = behaviour->unk14; + temp_v0->angle.direction.y_rotation = behaviour->unk16; } if (behaviour->flags & 4) { - temp_v0->data.angle.direction.x_rotation = behaviour->unk22; - temp_v0->data.angle.direction.z_rotation = behaviour->unk24; + temp_v0->angle.direction.x_rotation = behaviour->unk22; + temp_v0->angle.direction.z_rotation = behaviour->unk24; } } else { if (behaviour->flags & 1) { - temp_v0->data.unk6 = 0; - temp_v0->data.angle.rotation.y_rotation = behaviour->unk14; - temp_v0->data.angle.rotation.x_rotation = behaviour->unk16; - temp_v0->data.angle.rotation.z_rotation = behaviour->unk18; + temp_v0->unk6 = 0; + temp_v0->angle.rotation.y_rotation = behaviour->unk14; + temp_v0->angle.rotation.x_rotation = behaviour->unk16; + temp_v0->angle.rotation.z_rotation = behaviour->unk18; } if (behaviour->flags & 4) { - temp_v0->data.lifeTime = 0; - temp_v0->data.angle.direction.y_rotation = behaviour->unk22; - temp_v0->data.angle.direction.x_rotation = behaviour->unk24; - temp_v0->data.angle.direction.z_rotation = behaviour->unk26; + temp_v0->lifeTime = 0; + temp_v0->angle.direction.y_rotation = behaviour->unk22; + temp_v0->angle.direction.x_rotation = behaviour->unk24; + temp_v0->angle.direction.z_rotation = behaviour->unk26; } } - temp_v0->data.flags &= 0xFDFF; - temp_v0->data.flags |= 0xA000; + temp_v0->flags &= 0xFDFF; + temp_v0->flags |= 0xA000; obj->segment.unk1A++; } void func_800AF6E4(Object *obj, s32 arg1) { - ParticleEmitter *obj6C; + ParticleEmitter *emitter; - obj6C = &obj->particleEmitter[arg1]; + emitter = &obj->particleEmitter[arg1]; - obj6C->unk4 &= 0x7FFF; + emitter->flags &= 0x7FFF; obj->segment.unk1A--; } @@ -715,7 +719,7 @@ void func_800AF714(Object *racerObj, s32 updateRate) { i = 0; object_do_player_tumble(racerObj); for (; i < racerObj->segment.header->particleCount; i++) { - if (var_s7 & OBJ_EMIT_PARTICLE_1) { + if (var_s7 & OBJ_EMIT_1) { someBool = TRUE; switch (vehicleId) { case VEHICLE_CAR: @@ -726,7 +730,7 @@ void func_800AF714(Object *racerObj, s32 updateRate) { } var_v0 -= 24; if (var_v0 > 0) { - temp_a3 = gParticlesAssetTable[racerObj->particleEmitter[i].unk8]; + temp_a3 = gParticlesAssetTable[racerObj->particleEmitter[i].propertyID]; alphaPtr = &D_800E2EC4[i].a; var_t1 = 4; if (var_v0 > 32) { @@ -799,29 +803,29 @@ void func_800AF714(Object *racerObj, s32 updateRate) { } if (someBool) { - if (!(racerObj->particleEmitter[i].unk4 & 0x8000)) { + if (!(racerObj->particleEmitter[i].flags & 0x8000)) { func_800AF52C(racerObj, i); } - if (racerObj->particleEmitter[i].unk4 & 0x4000) { - func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->particleEmitter[i]); - } else if (racerObj->particleEmitter[i].unk4 & 0x400) { - func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->particleEmitter[i]); + if (racerObj->particleEmitter[i].flags & 0x4000) { + func_800AFE5C(racerObj, &racerObj->particleEmitter[i]); + } else if (racerObj->particleEmitter[i].flags & 0x400) { + func_800AFE5C(racerObj, &racerObj->particleEmitter[i]); } else { - racerObj->particleEmitter[i].unkA += updateRate; - if (racerObj->particleEmitter[i].unkA >= racerObj->particleEmitter[i].behaviour->unk40) { - func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->particleEmitter[i]); + racerObj->particleEmitter[i].opacity += updateRate; + if (racerObj->particleEmitter[i].opacity >= racerObj->particleEmitter[i].behaviour->unk40) { + func_800AFE5C(racerObj, &racerObj->particleEmitter[i]); } } } - } else if (racerObj->particleEmitter[i].unk4 & 0x8000) { - if (racerObj->particleEmitter[i].unk4 & 0x4000) { + } else if (racerObj->particleEmitter[i].flags & 0x8000) { + if (racerObj->particleEmitter[i].flags & 0x4000) { new_var2 = &racerObj->particleEmitter[i]; new_var2->unk6 = 0; func_800AF6E4(racerObj, i); } else { - if (racerObj->particleEmitter[i].unk4 & 0x400) { + if (racerObj->particleEmitter[i].flags & 0x400) { new_var = &racerObj->particleEmitter[i]; - racerObj->particleEmitter[i].unk4 |= 0x200; + racerObj->particleEmitter[i].flags |= 0x200; if (new_var->unk6 == 0) { func_800AF6E4(racerObj, i); } @@ -846,53 +850,46 @@ void obj_spawn_particle(Object *obj, s32 updateRate) { ParticleEmitter *temp_s1_2; s32 var_s0; s32 i; - UNUSED s32 pad; - s32 var_a3; u32 bits; bits = obj->particleEmitFlags; - var_a3 = obj->segment.header->particleCount; - for (i = 0; i < var_a3; i++) { + for (i = 0; i < obj->segment.header->particleCount; i++) { if (bits & 1) { - if (!(obj->particleEmitter[i].unk4 & 0x8000)) { + if (!(obj->particleEmitter[i].flags & 0x8000)) { func_800AF52C(obj, i); } - if (obj->particleEmitter[i].unk4 & 0x4000) { - func_800AFE5C((Particle *) obj, (Particle *) &obj->particleEmitter[i]); - } else if ((obj->particleEmitter[i].unk4 & 0x400)) { - func_800AFE5C((Particle *) obj, (Particle *) &obj->particleEmitter[i]); + if (obj->particleEmitter[i].flags & 0x4000) { + func_800AFE5C(obj, &obj->particleEmitter[i]); + } else if ((obj->particleEmitter[i].flags & 0x400)) { + func_800AFE5C(obj, &obj->particleEmitter[i]); } else { - obj->particleEmitter[i].unkA += updateRate; - if (obj->particleEmitter[i].unkA >= obj->particleEmitter[i].behaviour->unk40) { - func_800AFE5C((Particle *) obj, (Particle *) &obj->particleEmitter[i]); + obj->particleEmitter[i].opacity += updateRate; + if (obj->particleEmitter[i].opacity >= obj->particleEmitter[i].behaviour->unk40) { + func_800AFE5C(obj, &obj->particleEmitter[i]); } } - var_a3 = obj->segment.header->particleCount; } else { - if (obj->particleEmitter[i].unk4 & 0x8000) { - if (obj->particleEmitter[i].unk4 & 0x4000) { + if (obj->particleEmitter[i].flags & 0x8000) { + if (obj->particleEmitter[i].flags & 0x4000) { temp_s1 = &obj->particleEmitter[i]; var_s0 = temp_s1->unk6 - 0x40; if (var_s0 < 0) { var_s0 = 0; } temp_s1->unk6 = var_s0; - func_800AFE5C((Particle *) obj, (Particle *) temp_s1); + func_800AFE5C(obj, temp_s1); temp_s1->unk6 = var_s0; if (var_s0 == 0) { func_800AF6E4(obj, i); } - var_a3 = obj->segment.header->particleCount; - } else if ((obj->particleEmitter[i].unk4 & 0x400)) { + } else if ((obj->particleEmitter[i].flags & 0x400)) { temp_s1_2 = &obj->particleEmitter[i]; - obj->particleEmitter[i].unk4 |= 0x200; + obj->particleEmitter[i].flags |= 0x200; if (temp_s1_2->unk6 == 0) { func_800AF6E4(obj, i); } - var_a3 = obj->segment.header->particleCount; } else { func_800AF6E4(obj, i); - var_a3 = obj->segment.header->particleCount; } } } @@ -900,54 +897,53 @@ void obj_spawn_particle(Object *obj, s32 updateRate) { } } -// TODO: Should this be void func_800AFE5C(Object *arg0, ParticleEmitter *arg1)? -void func_800AFE5C(Particle *arg0, Particle *arg1) { +void func_800AFE5C(Object *arg0, ParticleEmitter *arg1) { SpriteParticle *temp_s0; Particle *tempObj; Particle *tempObj2; s32 i; ParticleBehavior *temp_s4; - temp_s4 = arg1->data.behaviour; - if (arg1->data.flags & 0x4000) { - tempObj = func_800B0BAC((Object *) arg0, arg1); + temp_s4 = arg1->behaviour; + if (arg1->flags & 0x4000) { + tempObj = func_800B0BAC(arg0, arg1); if (tempObj != NULL) { func_8000E9D0((Object *) tempObj); } - arg1->data.flags &= 0xDFFF; - if (arg1->data.unk6 + 64 > 255) { - arg1->data.unk6 = 255; + arg1->flags &= 0xDFFF; + if (arg1->unk6 + 64 > 255) { + arg1->unk6 = 255; } else { - arg1->data.unk6 += 64; + arg1->unk6 += 64; } - } else if (arg1->data.flags & 0x400) { - if (arg1->data.unk6 < arg1->data.lifeTime) { + } else if (arg1->flags & 0x400) { + if (arg1->unk6 < arg1->lifeTime) { temp_s0 = func_800B0698(arg0, arg1); - arg1->data.flags &= 0xDFFF; + arg1->flags &= 0xDFFF; if (temp_s0 != NULL) { func_8000E9D0((Object *) temp_s0); - temp_s0->unk74 = arg1->data.unk6; + temp_s0->unk74 = arg1->unk6; temp_s0->base.segment.unk40 |= 0x2000; - arg1->data.unkC_60[arg1->data.unk6] = temp_s0; - arg1->data.unk6++; + arg1->unkC_60[arg1->unk6] = temp_s0; + arg1->unk6++; } } } else { - while (arg1->data.opacity >= temp_s4->unk40) { - arg1->data.opacity -= temp_s4->unk40; + while (arg1->opacity >= temp_s4->unk40) { + arg1->opacity -= temp_s4->unk40; for (i = 0; i < temp_s4->unk42; i++) { tempObj2 = func_800B1130(arg0, arg1); if (tempObj2 != NULL) { func_8000E9D0((Object *) tempObj2); - handle_particle_movement(tempObj2, arg1->data.opacity); + handle_particle_movement(tempObj2, arg1->opacity); } - arg1->data.flags &= ~0x2000; + arg1->flags &= ~0x2000; } } } } -void func_800B0010(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehavior *arg3) { +void func_800B0010(Particle *arg0, Object *arg1, ParticleEmitter *arg2, ParticleBehavior *arg3) { s32 flags; Vec3f velocityPos; Vec3s angle; @@ -998,17 +994,17 @@ void func_800B0010(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehav (f32) get_random_number_from_range(-arg3->gravityRange2, arg3->gravityRange2) * 0.00001525878906; } if (flags & (PARTICLE_UNK00000040 | PARTICLE_UNK00000020)) { - angle.y_rotation = arg2->data.angle.direction.y_rotation; + angle.y_rotation = arg2->angle.direction.y_rotation; if (flags & PARTICLE_UNK00000020) { angle.y_rotation += get_random_number_from_range(-arg3->angleRangeY2, arg3->angleRangeY2); } - angle.x_rotation = arg2->data.angle.direction.x_rotation; + angle.x_rotation = arg2->angle.direction.x_rotation; if (flags & PARTICLE_UNK00000040) { angle.x_rotation += get_random_number_from_range(-arg3->angleRangeX2, arg3->angleRangeX2); } f32_vec3_apply_object_rotation3(&angle, &velocityPos.x); } else { - f32_vec3_apply_object_rotation3(&arg2->data.angle.direction, &velocityPos.x); + f32_vec3_apply_object_rotation3(&arg2->angle.direction, &velocityPos.x); } f32_vec3_apply_object_rotation((ObjectTransform *) arg0->segment.unk3C, &velocityPos.x); arg0->segment.x_velocity += velocityPos.x; @@ -1017,14 +1013,14 @@ void func_800B0010(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehav } } -void func_800B03C0(Particle *particle, Particle *arg1, Particle *arg2, ParticleBehavior *behaviour) { +void func_800B03C0(Particle *particle, Object *arg1, ParticleEmitter *arg2, ParticleBehavior *behaviour) { s32 flags; Vec3f posVel; Vec3s angle; - particle->baseVelX = arg2->data.baseVelX; - particle->baseVelY = arg2->data.baseVelY; - particle->baseVelZ = arg2->data.baseVelZ; + particle->baseVelX = arg2->baseVelX; + particle->baseVelY = arg2->baseVelY; + particle->baseVelZ = arg2->baseVelZ; particle->forwardVel = behaviour->forwardVel; if (behaviour->behaviourFlags & PARTICLE_FORWARDVEL) { particle->forwardVel += @@ -1041,17 +1037,17 @@ void func_800B03C0(Particle *particle, Particle *arg1, Particle *arg2, ParticleB 0.00001525878906; } if (flags & (PARTICLE_UNK00000004 | PARTICLE_UNK00000002)) { - angle.y_rotation = arg2->data.angle.rotation.y_rotation; + angle.y_rotation = arg2->angle.rotation.y_rotation; if (flags & PARTICLE_UNK00000002) { angle.y_rotation += get_random_number_from_range(-behaviour->angleRangeY1, behaviour->angleRangeY1); } - angle.x_rotation = arg2->data.angle.rotation.x_rotation; + angle.x_rotation = arg2->angle.rotation.x_rotation; if (flags & PARTICLE_UNK00000004) { angle.x_rotation += get_random_number_from_range(-behaviour->angleRangeX1, behaviour->angleRangeX1); } f32_vec3_apply_object_rotation3(&angle, (f32 *) &posVel); } else { - f32_vec3_apply_object_rotation((ObjectTransform *) &arg2->data.angle.rotation, (f32 *) &posVel); + f32_vec3_apply_object_rotation((ObjectTransform *) &arg2->angle.rotation, (f32 *) &posVel); } particle->baseVelX += posVel.x; particle->baseVelY += posVel.y; @@ -1071,7 +1067,7 @@ void func_800B03C0(Particle *particle, Particle *arg1, Particle *arg2, ParticleB particle->segment.trans.z_position += arg1->segment.trans.z_position; } -SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { +SpriteParticle *func_800B0698(Object *arg0, ParticleEmitter *arg1) { ParticleProperties *properties; SpriteParticle *var_v0; TextureHeader **texture; @@ -1080,16 +1076,16 @@ SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { f32 temp_f14; f32 temp_f2; - properties = gParticlesAssetTable[arg1->data.propertyID]; + properties = gParticlesAssetTable[arg1->propertyID]; if (properties->unk0 != 4) { return NULL; } - sp20 = arg1->data.behaviour; + sp20 = arg1->behaviour; var_v0 = func_800B1CB8(4); if (var_v0 == NULL) { return var_v0; } - var_v0->base.segment.particle.blockID = arg0->segment.particle.blockID; + var_v0->base.segment.particle.blockID = arg0->segment.object.segmentID; var_v0->base.segment.trans.flags = -OBJ_FLAGS_DEACTIVATED; var_v0->base.segment.particle.movementType = properties->movementType; var_v0->base.segment.unk40 = properties->unk2; @@ -1104,14 +1100,14 @@ SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { var_v0->base.colour.g = properties->colour.g; var_v0->base.colour.b = properties->colour.b; var_v0->base.colour.a = properties->colour.a; - if (var_v0->base.segment.unk40 & 0x800 && arg0->unk54_ptr != NULL) { - var_v0->base.brightness = *arg0->unk54_ptr * 255.0f; + if (var_v0->base.segment.unk40 & 0x800 && arg0->shading != NULL) { + var_v0->base.brightness = arg0->shading->unk0 * 255.0f; } else { var_v0->base.brightness = 255; } var_v0->base.opacityTimer = properties->opacityTimer; - if (arg1->data.flags & 0x100) { - var_v0->base.opacity = arg1->data.opacity; + if (arg1->flags & 0x100) { + var_v0->base.opacity = arg1->opacity; } else { var_v0->base.opacity = properties->opacity << 8; } @@ -1124,7 +1120,7 @@ SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { } if (var_v0->base.opacityTimer < var_v0->base.segment.particle.destroyTimer) { var_v0->base.opacityVel = ((properties->opacityVel << 8) - (var_v0->base.opacity & 0xFFFF)) / - (var_v0->base.segment.particle.destroyTimer - var_v0->base.opacityTimer); + (var_v0->base.segment.particle.destroyTimer - var_v0->base.opacityTimer); } else { var_v0->base.opacityVel = 0; } @@ -1150,12 +1146,12 @@ SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { var_v0->base.forwardVel = sqrtf((temp_f0 * temp_f0) + (temp_f2 * temp_f2) + (temp_f14 * temp_f14)); } if (sp20->flags & 2) { - arg1->data.angle.rotation.z_rotation += sp20->unk1C; - arg1->data.angle.direction.y_rotation += sp20->unk1E; + arg1->angle.rotation.z_rotation += sp20->unk1C; + arg1->angle.direction.y_rotation += sp20->unk1E; } if (sp20->flags & 8) { - arg1->data.angle.direction.x_rotation += sp20->unk2A; - arg1->data.angle.direction.z_rotation += sp20->unk2C; + arg1->angle.direction.x_rotation += sp20->unk2A; + arg1->angle.direction.z_rotation += sp20->unk2C; } var_v0->base.segment.unk1A = properties->unk6; var_v0->base.segment.textureFrame = 0; @@ -1187,18 +1183,18 @@ SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1) { return var_v0; } -Particle *func_800B0BAC(Object *arg0, Particle *arg1) { +Particle *func_800B0BAC(Object *arg0, ParticleEmitter *arg1) { ParticleProperties *sp34; Particle *sp30; ParticleModel *sp2C; ParticleBehavior *sp28; unkParticleBehaviorUnk9C *sp24; - sp34 = gParticlesAssetTable[arg1->data.propertyID]; + sp34 = gParticlesAssetTable[arg1->propertyID]; if (sp34->unk0 != 3) { return NULL; } - sp28 = arg1->data.behaviour; + sp28 = arg1->behaviour; sp24 = (unkParticleBehaviorUnk9C *) sp28->unk9C; sp30 = func_800B1CB8(3); if (sp30 == NULL) { @@ -1243,13 +1239,14 @@ Particle *func_800B0BAC(Object *arg0, Particle *arg1) { } else { sp30->opacityVel = 0; } - arg1->segment.trans.x_position = arg1->segment.textureFrame; - arg1->segment.trans.y_position = arg1->segment.unk1A; - arg1->segment.trans.z_position = arg1->data.baseVelZ; - f32_vec3_apply_object_rotation(&arg0->segment.trans, &arg1->segment.trans.x_position); - arg1->segment.trans.x_position += arg0->segment.trans.x_position; - arg1->segment.trans.y_position += arg0->segment.trans.y_position; - arg1->segment.trans.z_position += arg0->segment.trans.z_position; + // TODO check union member + arg1->pos.x = arg1->baseVelX; + arg1->pos.y = arg1->baseVelY; + arg1->pos.z = arg1->baseVelZ; + f32_vec3_apply_object_rotation(&arg0->segment.trans, &arg1->pos.x); + arg1->pos.x += arg0->segment.trans.x_position; + arg1->pos.y += arg0->segment.trans.y_position; + arg1->pos.z += arg0->segment.trans.z_position; sp30->unk68b = 0; sp30->unk6Ab = 0; sp30->unk6Bb = -1; @@ -1273,34 +1270,34 @@ Particle *func_800B0BAC(Object *arg0, Particle *arg1) { } } } - sp2C->vertices->x = arg1->segment.trans.x_position; - sp2C->vertices->y = arg1->segment.trans.y_position; - sp2C->vertices->z = arg1->segment.trans.z_position; + sp2C->vertices->x = arg1->pos.x; + sp2C->vertices->y = arg1->pos.y; + sp2C->vertices->z = arg1->pos.z; if ((u32) sp24 != -1U) { - arg1->data.unk1E += 1; - if (arg1->data.unk1E >= sp24[0].unk0) { - arg1->data.unk1E = 0; + arg1->unk1E += 1; + if (arg1->unk1E >= sp24[0].unk0) { + arg1->unk1E = 0; } - sp2C->vertices->r = sp24[arg1->data.unk1E + 2].r; - sp2C->vertices->g = sp24[arg1->data.unk1E + 2].g; - sp2C->vertices->b = sp24[arg1->data.unk1E + 2].b; - sp2C->vertices->a = arg1->data.unk6; + sp2C->vertices->r = sp24[arg1->unk1E + 2].r; + sp2C->vertices->g = sp24[arg1->unk1E + 2].g; + sp2C->vertices->b = sp24[arg1->unk1E + 2].b; + sp2C->vertices->a = arg1->unk6; } else { sp2C->vertices->r = sp30->colour.r; sp2C->vertices->g = sp30->colour.g; sp2C->vertices->b = sp30->colour.b; - sp2C->vertices->a = arg1->data.unk6; + sp2C->vertices->a = arg1->unk6; } sp30->unk6Ab = ((u32) sp34->lifeTimeRangeUnsigned >> 10); sp30->unk6Bb = ((u32) (sp34->lifeTimeWord << 22) >> 26); sp30->segment.trans.x_position = arg0->segment.trans.x_position; sp30->segment.trans.y_position = arg0->segment.trans.y_position; sp30->segment.trans.z_position = arg0->segment.trans.z_position; - arg1->data.opacity = 0; + arg1->opacity = 0; return sp30; } -Particle *func_800B1130(Particle *arg0, Particle *arg1) { +Particle *func_800B1130(Object *arg0, ParticleEmitter *arg1) { s32 flags; ParticleProperties *properties; Particle *var_v0; @@ -1310,11 +1307,11 @@ Particle *func_800B1130(Particle *arg0, Particle *arg1) { f32 sp24; s8 sp23; - properties = gParticlesAssetTable[arg1->data.propertyID]; + properties = gParticlesAssetTable[arg1->propertyID]; if (properties->unk0 == 3 || properties->unk0 == 4) { return NULL; } - behaviour = arg1->data.behaviour; + behaviour = arg1->behaviour; sp28 = (unk800B1130_SP28 *) behaviour->unk9C; var_v0 = func_800B1CB8(properties->unk0); @@ -1326,8 +1323,8 @@ Particle *func_800B1130(Particle *arg0, Particle *arg1) { var_v0->segment.particle.movementType = properties->movementType; var_v0->segment.unk40 = properties->unk2; var_v0->segment.unk3C = arg0; - if (var_v0->segment.unk40 & 0x800 && arg0->unk54_ptr != NULL) { - var_v0->brightness = *arg0->unk54_ptr * 255.0f; + if (var_v0->segment.unk40 & 0x800 && arg0->shading != NULL) { + var_v0->brightness = arg0->shading->unk0 * 255.0f; } else { var_v0->brightness = 255; } @@ -1355,14 +1352,14 @@ Particle *func_800B1130(Particle *arg0, Particle *arg1) { if (D_800E2D00[0].word != 0) { var_v0->colour.word = D_800E2D00[0].word; } else if ((s32) sp28 != -1) { - arg1->data.unk1E++; - if (arg1->data.unk1E >= sp28->unk0) { - arg1->data.unk1E = 0; + arg1->unk1E++; + if (arg1->unk1E >= sp28->unk0) { + arg1->unk1E = 0; } - var_v0->colour.r = sp28[arg1->data.unk1E + 2].r; - var_v0->colour.g = sp28[arg1->data.unk1E + 2].g; - var_v0->colour.b = sp28[arg1->data.unk1E + 2].b; - var_v0->colour.a = sp28[arg1->data.unk1E + 2].a; + var_v0->colour.r = sp28[arg1->unk1E + 2].r; + var_v0->colour.g = sp28[arg1->unk1E + 2].g; + var_v0->colour.b = sp28[arg1->unk1E + 2].b; + var_v0->colour.a = sp28[arg1->unk1E + 2].a; } else { var_v0->colour.r = properties->colour.r; var_v0->colour.g = properties->colour.g; @@ -1509,21 +1506,21 @@ Particle *func_800B1130(Particle *arg0, Particle *arg1) { (var_v0->segment.z_velocity * var_v0->segment.z_velocity)); } if (behaviour->flags & 2) { - arg1->data.unk6++; - if (arg1->data.unk6 >= behaviour->unk1A) { - arg1->data.angle.rotation.y_rotation += behaviour->unk1C; - arg1->data.angle.rotation.x_rotation += behaviour->unk1E; - arg1->data.angle.rotation.z_rotation += behaviour->unk18; - arg1->data.unk6 -= behaviour->unk1A; + arg1->unk6++; + if (arg1->unk6 >= behaviour->unk1A) { + arg1->angle.rotation.y_rotation += behaviour->unk1C; + arg1->angle.rotation.x_rotation += behaviour->unk1E; + arg1->angle.rotation.z_rotation += behaviour->unk18; + arg1->unk6 -= behaviour->unk1A; } } if (behaviour->flags & 8) { - arg1->data.lifeTime++; - if (arg1->data.lifeTime >= behaviour->unk28) { - arg1->data.angle.direction.y_rotation += behaviour->unk2A; - arg1->data.angle.direction.x_rotation += behaviour->unk2C; - arg1->data.angle.direction.z_rotation += behaviour->unk2E; - arg1->data.lifeTime -= behaviour->unk28; + arg1->lifeTime++; + if (arg1->lifeTime >= behaviour->unk28) { + arg1->angle.direction.y_rotation += behaviour->unk2A; + arg1->angle.direction.x_rotation += behaviour->unk2C; + arg1->angle.direction.z_rotation += behaviour->unk2E; + arg1->lifeTime -= behaviour->unk28; } } if (var_v0->modelData == NULL) { @@ -1688,19 +1685,19 @@ void func_800B2040(Particle *arg0) { } } -void func_800B2260(Particle *arg0) { +void func_800B2260(ParticleEmitter *emitter) { SpriteParticle *temp_v0; s32 i; - if (arg0->data.flags & 0x400) { - if (arg0->data.unkC_60 != NULL) { - for (i = 0; i < arg0->data.unk6; i++) { - temp_v0 = arg0->data.unkC_60[i]; + if (emitter->flags & 0x400) { + if (emitter->unkC_60 != NULL) { + for (i = 0; i < emitter->unk6; i++) { + temp_v0 = emitter->unkC_60[i]; temp_v0->base.segment.particle.destroyTimer = 0; temp_v0->unk70 = 0; } - mempool_free(arg0->data.unkC_60); - arg0->data.unkC_60 = NULL; + mempool_free(emitter->unkC_60); + emitter->unkC_60 = NULL; } } } @@ -1725,8 +1722,8 @@ void handle_particle_movement(Particle *particle, s32 updateRate) { } if (particle->segment.particle.unk2C == 4) { tempParticle = particle; - ((SpriteParticle*)particle)->modelFrame = 1 - ((SpriteParticle*)particle)->modelFrame; - ((SpriteParticle*)particle)->unk77 = 0; + ((SpriteParticle *) particle)->modelFrame = 1 - ((SpriteParticle *) particle)->modelFrame; + ((SpriteParticle *) particle)->unk77 = 0; } if (tempParticle == NULL || (tempParticle && tempParticle->unk70)) { if (particle->segment.particle.movementType == PARTICLE_MOVEMENT_VELOCITIES) { @@ -1783,20 +1780,20 @@ void handle_particle_movement(Particle *particle, s32 updateRate) { } void func_800B263C(SpriteParticle *arg0) { - Particle *new_var; + ParticleEmitter *new_var; SpriteParticle *new_var2; - Particle *temp_v0; + ParticleEmitter *temp_v0; s32 i; temp_v0 = arg0->unk70; if (temp_v0 != NULL) { new_var = temp_v0; - if (temp_v0->data.unk6 != 0) { - if (&arg0->base == temp_v0->data.unkC_60[arg0->unk74]) { - temp_v0->data.unk6--; - for (i = arg0->unk74; i < temp_v0->data.unk6; i++) { - new_var->data.unkC_60[i] = new_var->data.unkC_60[i + 1]; - new_var2 = new_var->data.unkC_60[i]; + if (temp_v0->unk6 != 0) { + if (&arg0->base == temp_v0->unkC_60[arg0->unk74]) { + temp_v0->unk6--; + for (i = arg0->unk74; i < temp_v0->unk6; i++) { + new_var->unkC_60[i] = new_var->unkC_60[i + 1]; + new_var2 = new_var->unkC_60[i]; new_var2->unk74 = i; } } @@ -2213,11 +2210,11 @@ void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vt if (particle->segment.camera.unk3A > 0) { gDPSetPrimColor((*dList)++, 0, 0, particle->brightness, particle->brightness, particle->brightness, 255); - if (((SpriteParticle*)particle)->unk77 == 0) { + if (((SpriteParticle *) particle)->unk77 == 0) { func_800B3E64((Object *) particle); } modelData = particle->modelData; - temp = ((SpriteParticle*)particle)->modelFrame; + temp = ((SpriteParticle *) particle)->modelFrame; temp <<= 3; tempvtx = &modelData->vertices[temp]; load_and_set_texture(dList, modelData->texture, renderFlags, particle->segment.textureFrame << 8); @@ -2440,24 +2437,24 @@ void func_800B4668(Object *obj, s32 idx, s32 arg2, s32 arg3) { s32 temp_v0; arg3 <<= 8; - temp_v0 = (obj->particleEmitter[idx].unkA & 0xFFFF) + arg2; + temp_v0 = (obj->particleEmitter[idx].opacity & 0xFFFF) + arg2; if (arg3 < temp_v0) { - obj->particleEmitter[idx].unkA = arg3; + obj->particleEmitter[idx].opacity = arg3; } else { - obj->particleEmitter[idx].unkA = temp_v0; + obj->particleEmitter[idx].opacity = temp_v0; } - obj->particleEmitter[idx].unk4 |= 0x100; + obj->particleEmitter[idx].flags |= 0x100; } void func_800B46BC(Object *obj, s32 idx, s32 arg2, s32 arg3) { s32 temp_v0; arg3 <<= 8; - temp_v0 = (obj->particleEmitter[idx].unkA & 0xFFFF) - arg2; + temp_v0 = (obj->particleEmitter[idx].opacity & 0xFFFF) - arg2; if (temp_v0 < arg3) { - obj->particleEmitter[idx].unkA = arg3; + obj->particleEmitter[idx].opacity = arg3; } else { - obj->particleEmitter[idx].unkA = temp_v0; + obj->particleEmitter[idx].opacity = temp_v0; } - obj->particleEmitter[idx].unk4 |= 0x100; + obj->particleEmitter[idx].flags |= 0x100; } diff --git a/src/particles.h b/src/particles.h index 8a762702..7063b5fe 100644 --- a/src/particles.h +++ b/src/particles.h @@ -5,24 +5,25 @@ #include "structs.h" #include +// Flags representing which particle emitters are active for a game object enum ObjectEmitterFlags { - OBJ_EMIT_OFF, - OBJ_EMIT_PARTICLE_1 = (1 << 0), - OBJ_EMIT_PARTICLE_2 = (1 << 1), - OBJ_EMIT_PARTICLE_3 = (1 << 2), - OBJ_EMIT_PARTICLE_4 = (1 << 3), - OBJ_EMIT_UNK_10 = (1 << 4), - OBJ_EMIT_UNK_20 = (1 << 5), - OBJ_EMIT_UNK_40 = (1 << 6), - OBJ_EMIT_UNK_80 = (1 << 7), - OBJ_EMIT_UNK_100 = (1 << 8), - OBJ_EMIT_UNK_200 = (1 << 9), - OBJ_EMIT_UNK_400 = (1 << 10), - OBJ_EMIT_UNK_800 = (1 << 11), - OBJ_EMIT_UNK_1000 = (1 << 12), - OBJ_EMIT_UNK_2000 = (1 << 13), - OBJ_EMIT_UNK_4000 = (1 << 14), - OBJ_EMIT_UNK_8000 = (1 << 15), + OBJ_EMIT_NONE, + OBJ_EMIT_1 = (1 << 0), + OBJ_EMIT_2 = (1 << 1), + OBJ_EMIT_3 = (1 << 2), + OBJ_EMIT_4 = (1 << 3), + OBJ_EMIT_5 = (1 << 4), + OBJ_EMIT_6 = (1 << 5), + OBJ_EMIT_7 = (1 << 6), + OBJ_EMIT_8 = (1 << 7), + OBJ_EMIT_9 = (1 << 8), + OBJ_EMIT_10 = (1 << 9), + OBJ_EMIT_11 = (1 << 10), + OBJ_EMIT_12 = (1 << 11), + OBJ_EMIT_13 = (1 << 12), + OBJ_EMIT_14 = (1 << 13), + OBJ_EMIT_15 = (1 << 14), + OBJ_EMIT_16 = (1 << 15), }; enum ParticleFlags { @@ -163,32 +164,25 @@ typedef struct ParticleAngle { Vec3s direction; } ParticleAngle; -typedef struct ParticleData { +/* Size: 0x20 bytes */ +typedef struct ParticleEmitter { + /* 0x00 */ ParticleBehavior *behaviour; + /* 0x04 */ s16 flags; + /* 0x06 */ u8 unk6; + /* 0x07 */ u8 lifeTime; + /* 0x08 */ s16 propertyID; + /* 0x0A */ s16 opacity; union { - /* 0x0000 */ ParticleBehavior *behaviour; - /* 0x0000 */ s32 unk0; + /* 0x000C */ Vec3f pos; + /* 0x000C */ ParticleAngle angle; + /* 0x000C */ struct Particle **unkC_60; + /* 0x000C */ unk800AF29C_C_400 unkC_400; }; - /* 0x0004 */ s16 flags; - /* 0x0006 */ u8 unk6; - /* 0x0007 */ u8 lifeTime; - /* 0x0008 */ s16 propertyID; - /* 0x000A */ s16 opacity; - union { - /* 0x000C */ Vec3f pos; - /* 0x000C */ ParticleAngle angle; - /* 0x000C */ struct Particle **unkC_60; - /* 0x000C */ unk800AF29C_C_400 unkC_400; - }; - /* 0x0018 */ s16 baseVelX; - /* 0x0018 */ s16 baseVelY; - /* 0x001C */ s16 baseVelZ; - /* 0x001E */ s16 unk1E; - /* 0x0020 */ s32 unk20; - /* 0x0024 */ s32 unk24; - /* 0x0028 */ s32 unk28; - /* 0x002C */ s16 unk2C; - /* 0x002E */ s16 unk2E; -} ParticleData; + /* 0x0018 */ s16 baseVelX; + /* 0x001A */ s16 baseVelY; + /* 0x001C */ s16 baseVelZ; + /* 0x001E */ s16 unk1E; +} ParticleEmitter; typedef struct ParticleSegment { /* 0x0000 */ ObjectTransform trans; @@ -204,13 +198,7 @@ typedef struct ParticleSegment { SegmentPropertiesCamera camera; }; /* 0x003C */ void *unk3C; - union { - struct { - /* 0x0040 */ s16 unk40_s16; - /* 0x0042 */ s16 unk42; - }; - s32 unk40; - }; + /* 0x003C */ s32 unk40; } ParticleSegment; typedef struct ParticleModel { @@ -230,10 +218,7 @@ typedef struct ParticleOtherSomething { } ParticleOtherSomething; typedef struct Particle { - union { /* 0x0000 */ ParticleSegment segment; - /* 0x0000 */ ParticleData data; - }; union { /* 0x0044 */ ParticleModel *modelData; /* 0x0044 */ ParticleOtherSomething *unk44_1; @@ -298,21 +283,21 @@ void generate_particle_shape_line(ParticleModel *model, Vertex **vtx, Triangle * void generate_particle_shape_sprite(ParticleModel *model, Vertex **vtx, Triangle **triangles); void func_800AF0A4(Particle *particle); void func_800AF0F0(Particle *particle); -void partInitTrigger(Particle *particle, s32 behaviourID, s32 propertyID); -void func_800AF29C(Particle *arg0, s32 behaviourID, s32 propertyID, s16 velX, s16 velY, s16 velZ); +void partInitTrigger(ParticleEmitter *emitter, s32 behaviourID, s32 propertyID); +void func_800AF29C(ParticleEmitter *arg0, s32 behaviourID, s32 propertyID, s16 velX, s16 velY, s16 velZ); void func_800AF6E4(Object *obj, s32 arg1); -void func_800B2260(Particle *arg0); +void func_800B2260(ParticleEmitter *emitter); void func_800B263C(SpriteParticle *arg0); void init_particle_assets(void); void set_particle_texture_frame(Particle *particle); -void func_800B03C0(Particle *particle, Particle *arg1, Particle *arg2, ParticleBehavior *behaviour); +void func_800B03C0(Particle *particle, Object *arg1, ParticleEmitter *arg2, ParticleBehavior *behaviour); void func_800B2040(Particle *arg0); void handle_particle_movement(Particle *particle, s32 updateRate); -void func_800B0010(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehavior *arg3); -SpriteParticle *func_800B0698(Particle *arg0, Particle *arg1); +void func_800B0010(Particle *arg0, Object *arg1, ParticleEmitter *arg2, ParticleBehavior *arg3); +SpriteParticle *func_800B0698(Object *arg0, ParticleEmitter *arg1); Particle *func_800B1CB8(s32 arg0); -void func_800AFE5C(Particle *arg0, Particle *arg1); -Particle *func_800B1130(Particle *arg0, Particle *arg1); +void func_800AFE5C(Object *arg0, ParticleEmitter *arg1); +Particle *func_800B1130(Object *arg0, ParticleEmitter *arg1); void func_800AF52C(Object *obj, s32 arg1); void func_800AF134(ParticleEmitter *emitter, s32 behaviourID, s32 propertyID, s16 velX, s16 velY, s16 velZ); void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 flags); @@ -322,7 +307,7 @@ void obj_spawn_particle(Object *obj, s32 updateRate); void func_800B3E64(Object *obj); void func_800B26E0(Particle *particle); void func_800AF714(Object *racerObj, s32 updateRate); -Particle* func_800B0BAC(Object* arg0, Particle* arg1); +Particle* func_800B0BAC(Object* arg0, ParticleEmitter* arg1); void func_800AF404(s32 updateRate); // Non Matching void init_particle_buffers(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching diff --git a/src/racer.c b/src/racer.c index c1fe8597..906f36b4 100644 --- a/src/racer.c +++ b/src/racer.c @@ -937,7 +937,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } playerObjectHasMoved = FALSE; if (racer->playerIndex >= PLAYER_ONE && gNumViewports < 2) { - obj->particleEmitFlags |= OBJ_EMIT_UNK_100; + obj->particleEmitFlags |= OBJ_EMIT_9; } D_8011D550 = 0; gCurrentCarSteerVel = 0; @@ -1208,7 +1208,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } } else if (racer->approachTarget == NULL) { racer_play_sound(obj, SOUND_UNK_AF); - obj->particleEmitFlags |= OBJ_EMIT_UNK_10 | OBJ_EMIT_UNK_20; + obj->particleEmitFlags |= OBJ_EMIT_5 | OBJ_EMIT_6; } var_f2 = racer->trickType; var_f2 -= 5.0f; @@ -1499,13 +1499,13 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r (obj->segment.z_velocity * obj->segment.z_velocity); if (var_f2 > 16.0f) { if (var_f2 < 80.0f) { - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_3 | OBJ_EMIT_PARTICLE_4; + obj->particleEmitFlags |= OBJ_EMIT_3 | OBJ_EMIT_4; } if (var_f2 > 28.0f) { - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_1 | OBJ_EMIT_PARTICLE_2; + obj->particleEmitFlags |= OBJ_EMIT_1 | OBJ_EMIT_2; } if (gNumViewports == 1 && var_f2 > 10.25f) { - obj->particleEmitFlags |= OBJ_EMIT_UNK_40; + obj->particleEmitFlags |= OBJ_EMIT_7; } } } else { @@ -1515,7 +1515,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r var_f2 = racer->velocity; } if (var_f2 > 4.0f) { - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_3 | OBJ_EMIT_PARTICLE_4; + obj->particleEmitFlags |= OBJ_EMIT_3 | OBJ_EMIT_4; } } } @@ -1534,7 +1534,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } } if (racer->unk201 == 0) { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } else { obj->segment.y_velocity += updateRate * gCurrentRacerWeightStat; func_800AF714(obj, updateRate); @@ -2450,7 +2450,7 @@ void update_player_racer(Object *obj, s32 updateRate) { if (tempRacer->unk1F6 < 0) { tempRacer->unk1F6 = 0; } - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (tempRacer->unk201 > 0) { tempRacer->unk201 -= updateRate; } else { @@ -4243,7 +4243,7 @@ void update_car_velocity_offground(Object *obj, Object_Racer *racer, s32 updateR canSteer = TRUE; } if (canSteer) { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; racer->drift_direction = 0; racer->unk10C -= (racer->unk10C * updateRate) >> 4; gCurrentCarSteerVel = 0; @@ -4277,7 +4277,7 @@ void update_car_velocity_offground(Object *obj, Object_Racer *racer, s32 updateR } racer->trickType = steerAngle; } - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } /** @@ -4444,7 +4444,7 @@ void func_80053750(Object *objRacer, Object_Racer *racer, f32 updateRateF) { } } } - objRacer->particleEmitFlags |= OBJ_EMIT_UNK_400 | OBJ_EMIT_UNK_800; + objRacer->particleEmitFlags |= OBJ_EMIT_11 | OBJ_EMIT_12; } temp_f0 = someObj->segment.trans.y_position; // Fake for (i = 0; i < 4; i++) { @@ -4662,7 +4662,7 @@ void update_onscreen_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, func_80054FD0(obj, racer, updateRate); } if (!racer->unk201) { - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; } else if (racer->vehicleID < VEHICLE_BOSSES) { func_800AF714(obj, updateRate); } @@ -6797,7 +6797,7 @@ s32 set_ghost_position_and_rotation(Object *obj) { } obj->segment.trans.rotation.z_rotation = rot + (s32) (rotDiff * catmullX); - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; obj->segment.object.segmentID = get_level_segment_index_from_position( obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); if (ghostNodeCount == (commonUnk0s32 + 3)) { @@ -7489,7 +7489,7 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer->unkFC.x = obj->segment.trans.x_position; racer->unkFC.y = obj->segment.trans.y_position; racer->unkFC.z = obj->segment.trans.z_position; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; func_800AF714(obj, updateRate); } diff --git a/src/vehicle_bluey.c b/src/vehicle_bluey.c index 8836550f..4524de60 100644 --- a/src/vehicle_bluey.c +++ b/src/vehicle_bluey.c @@ -168,10 +168,10 @@ void update_bluey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *ra } animFrame = obj->segment.animFrame; obj->segment.animFrame = racer->animationSpeed; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (obj->segment.object.animationID == ANIM_BLUEY_RUN) { play_footstep_sounds(obj, 2, animFrame, SOUND_STOMP2, SOUND_STOMP3); - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_1 | OBJ_EMIT_PARTICLE_2; + obj->particleEmitFlags |= OBJ_EMIT_1 | OBJ_EMIT_2; } obj_spawn_particle(obj, updateRate); fade_when_near_camera(obj, racer, 40); diff --git a/src/vehicle_bubbler.c b/src/vehicle_bubbler.c index 76f31569..9dd3236c 100644 --- a/src/vehicle_bubbler.c +++ b/src/vehicle_bubbler.c @@ -139,7 +139,7 @@ void update_bubbler(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer * spawn_boss_hazard(obj, racer, 0.0f, objectID, SOUND_VOICE_BUBBLER_HOHO2); } } - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; obj_spawn_particle(obj, updateRate); fade_when_near_camera(obj, racer, 40); switch (obj->segment.object.animationID) { diff --git a/src/vehicle_rocket.c b/src/vehicle_rocket.c index 5bd30a56..0747cd85 100644 --- a/src/vehicle_rocket.c +++ b/src/vehicle_rocket.c @@ -85,7 +85,7 @@ void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r func_80049794(updateRate, updateRateF, obj, racer); racer->vehicleID = racer->vehicleIDPrev; *startTimer = tempStartTimer; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; racer->headAngle = tempHeadAngle; obj->segment.object.animationID = animID; obj->segment.animFrame = animFrame; @@ -128,7 +128,7 @@ void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r racer->animationSpeed = 0.0f; } obj->segment.animFrame = racer->animationSpeed; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; func_800AF714(obj, updateRate); fade_when_near_camera(obj, racer, 40); if (*startTimer != 100) { diff --git a/src/vehicle_smokey.c b/src/vehicle_smokey.c index 799bca11..c3d7543a 100644 --- a/src/vehicle_smokey.c +++ b/src/vehicle_smokey.c @@ -100,7 +100,7 @@ void update_smokey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r func_80049794(updateRate, updateRateF, obj, racer); racer->vehicleID = racer->vehicleIDPrev; *startTimer = headAngleRange; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; racer->headAngle = tempHeadAngle; obj->segment.object.animationID = animID; obj->segment.animFrame = animFrame; @@ -219,7 +219,7 @@ void update_smokey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r animFrame = obj->segment.animFrame; obj->segment.animFrame = racer->animationSpeed; stepFrame = obj->segment.animFrame >> 4; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (obj->segment.object.animationID != ANIM_SMOKEY_RUN && obj->segment.object.animationID != 2) { animFrame >>= 4; stepFrame = 1; diff --git a/src/vehicle_tricky.c b/src/vehicle_tricky.c index c83e7a21..642e79dd 100644 --- a/src/vehicle_tricky.c +++ b/src/vehicle_tricky.c @@ -160,10 +160,10 @@ void update_tricky(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } animFrame = obj->segment.animFrame; obj->segment.animFrame = racer->animationSpeed; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (obj->segment.object.animationID == ANIM_TRICKY_RUN) { play_footstep_sounds(obj, 2, animFrame, SOUND_STOMP2, SOUND_STOMP3); - obj->particleEmitFlags |= OBJ_EMIT_PARTICLE_1 | OBJ_EMIT_PARTICLE_2; + obj->particleEmitFlags |= OBJ_EMIT_1 | OBJ_EMIT_2; } obj_spawn_particle(obj, updateRate); fade_when_near_camera(obj, racer, 120); diff --git a/src/vehicle_wizpig.c b/src/vehicle_wizpig.c index 048239de..71c6bc5d 100644 --- a/src/vehicle_wizpig.c +++ b/src/vehicle_wizpig.c @@ -91,7 +91,7 @@ void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r func_80049794(updateRate, updateRateF, obj, racer); racer->vehicleID = racer->vehicleIDPrev; *startTimer = tempStartTimer; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; racer->headAngle = tempHeadAngle; obj->segment.object.animationID = animID; obj->segment.animFrame = animFrame; @@ -218,7 +218,7 @@ void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } animFrame = obj->segment.animFrame; obj->segment.animFrame = racer->animationSpeed; - obj->particleEmitFlags = OBJ_EMIT_OFF; + obj->particleEmitFlags = OBJ_EMIT_NONE; if (obj->segment.object.animationID == ANIM_WIZPIG_RUN) { play_footstep_sounds(obj, 2, animFrame, SOUND_STOMP2, SOUND_STOMP3); }