Merge pull request #211 from gamemasterplc/main

Finish board/bowser.c
This commit is contained in:
gamemasterplc 2024-03-12 14:34:58 -05:00 committed by GitHub
commit c1fa0f8873
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 1403 additions and 74 deletions

View file

@ -1751,8 +1751,8 @@ SpawnBowserFire = .text:0x8009A5D4; // type:function size:0xE4 scope:local
CheckBowserFire = .text:0x8009A6B8; // type:function size:0xCC scope:local CheckBowserFire = .text:0x8009A6B8; // type:function size:0xCC scope:local
KillBowserFire = .text:0x8009A784; // type:function size:0x40 scope:local KillBowserFire = .text:0x8009A784; // type:function size:0x40 scope:local
ExecMiniBowserEvent = .text:0x8009A7C4; // type:function size:0x188 scope:local ExecMiniBowserEvent = .text:0x8009A7C4; // type:function size:0x188 scope:local
MiniBowserTakeAll = .text:0x8009A94C; // type:function size:0x2C4 scope:local MiniBowserTake = .text:0x8009A94C; // type:function size:0x2C4 scope:local
MiniBowserTake = .text:0x8009AC10; // type:function size:0x2B8 scope:local MiniBowserTakeAll = .text:0x8009AC10; // type:function size:0x2B8 scope:local
MiniBowserBalloonStop = .text:0x8009AEC8; // type:function size:0x24 scope:local MiniBowserBalloonStop = .text:0x8009AEC8; // type:function size:0x24 scope:local
GetMiniBowserBalloonState = .text:0x8009AEEC; // type:function size:0xC scope:local GetMiniBowserBalloonState = .text:0x8009AEEC; // type:function size:0xC scope:local
SetMiniBowserBalloonState = .text:0x8009AEF8; // type:function size:0x10 scope:local SetMiniBowserBalloonState = .text:0x8009AEF8; // type:function size:0x10 scope:local
@ -5608,7 +5608,7 @@ booCamPos = .bss:0x801A4BC0; // type:object size:0xC scope:local data:float
booCamTarget = .bss:0x801A4BCC; // type:object size:0xC scope:local data:float booCamTarget = .bss:0x801A4BCC; // type:object size:0xC scope:local data:float
booCamUp = .bss:0x801A4BD8; // type:object size:0xC scope:local data:float booCamUp = .bss:0x801A4BD8; // type:object size:0xC scope:local data:float
playerPosTemp = .bss:0x801A4BE8; // type:object size:0x30 scope:local playerPosTemp = .bss:0x801A4BE8; // type:object size:0x30 scope:local
bowserSpr = .bss:0x801A4C18; // type:object size:0x16 scope:local bowserEvent = .bss:0x801A4C18; // type:object size:0x16 scope:local
battleMGList = .bss:0x801A4C30; // type:object size:0x10 scope:local data:2byte battleMGList = .bss:0x801A4C30; // type:object size:0x10 scope:local data:2byte
camPosFortune = .bss:0x801A4C40; // type:object size:0xC scope:local data:4byte camPosFortune = .bss:0x801A4C40; // type:object size:0xC scope:local data:4byte
camTargetFortune = .bss:0x801A4C4C; // type:object size:0xC scope:local data:float camTargetFortune = .bss:0x801A4C4C; // type:object size:0xC scope:local data:float

View file

@ -386,7 +386,7 @@ config.libs = [
Object(Matching, "game/board/ui.c"), Object(Matching, "game/board/ui.c"),
Object(Matching, "game/board/block.c"), Object(Matching, "game/board/block.c"),
Object(Matching, "game/board/item.c"), Object(Matching, "game/board/item.c"),
Object(NonMatching, "game/board/bowser.c"), Object(Matching, "game/board/bowser.c"),
Object(Matching, "game/board/battle.c"), Object(Matching, "game/board/battle.c"),
Object(Matching, "game/board/fortune.c"), Object(Matching, "game/board/fortune.c"),
Object(Matching, "game/board/boo.c"), Object(Matching, "game/board/boo.c"),

View file

@ -14,7 +14,7 @@ void BoardStatusGraySet(s32 arg0, s32 arg1);
void BoardStatusShowSet(s32 arg0, s32 arg1); void BoardStatusShowSet(s32 arg0, s32 arg1);
void BoardStatusItemHideSet(s32 arg0, s32 arg1); void BoardStatusItemHideSet(s32 arg0, s32 arg1);
void BoardStatusTargetPosSet(s32 arg0, Vec *arg1); void BoardStatusTargetPosSet(s32 arg0, Vec *arg1);
void BoardStatusPosGet(s32 arg0, float *arg1); void BoardStatusPosGet(s32 arg0, Vec *arg1);
void BoardStatusPosSet(s32 arg0, Vec *arg1); void BoardStatusPosSet(s32 arg0, Vec *arg1);
void BoardStatusHammerCreate(s32 arg0); void BoardStatusHammerCreate(s32 arg0);
void BoardStatusHammerShowSet(s32 arg0, s32 arg1); void BoardStatusHammerShowSet(s32 arg0, s32 arg1);

View file

@ -6,6 +6,9 @@
#include "game/sprite.h" #include "game/sprite.h"
typedef struct model_data ModelData; typedef struct model_data ModelData;
typedef struct particle_data ParticleData;
typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix);
typedef struct { typedef struct {
/* 0x00 */ union { /* 0x00 */ union {
@ -49,7 +52,7 @@ typedef struct particle_data {
/* 0x48 */ HsfanimStruct01 *unk_48; /* 0x48 */ HsfanimStruct01 *unk_48;
/* 0x4C */ Vec *unk_4C; /* 0x4C */ Vec *unk_4C;
/* 0x50 */ void *unk_50; /* 0x50 */ void *unk_50;
/* 0x54 */ void *unk_54; /* 0x54 */ ParticleHook unk_54;
} ParticleData; // Size 0x58 } ParticleData; // Size 0x58
typedef struct { typedef struct {
@ -117,7 +120,7 @@ void Hu3DParticleZRotSet(s16 arg0, float arg1);
void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3); void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3);
void Hu3DParticleTPLvlSet(s16 arg0, float arg1); void Hu3DParticleTPLvlSet(s16 arg0, float arg1);
void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1); void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1);
void Hu3DParticleHookSet(s16 arg0, void *arg1); void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1);
void Hu3DParticleAttrSet(s16 arg0, u8 arg1); void Hu3DParticleAttrSet(s16 arg0, u8 arg1);
void Hu3DParticleAttrReset(s16 arg0, u8 arg1); void Hu3DParticleAttrReset(s16 arg0, u8 arg1);
void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1); void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1);

View file

@ -74,7 +74,7 @@ void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
s16 Hu3DMotionShiftIDGet(s16 arg0); s16 Hu3DMotionShiftIDGet(s16 arg0);
s32 frand(void); s32 frand(void);
void fn_1_BE30(s32 arg0, ParticleData* arg1); void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_BDAC(void); void fn_1_BDAC(void);
void fn_1_BC7C(s16 arg0); void fn_1_BC7C(s16 arg0);
void fn_1_BBF8(void); void fn_1_BBF8(void);
@ -891,7 +891,7 @@ void fn_1_BDAC(void) {
} }
} }
void fn_1_BE30(s32 arg0, ParticleData* arg1) { void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) {
Point3d sp8; Point3d sp8;
f32 temp_f30; f32 temp_f30;
@ -900,27 +900,27 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) {
HsfanimStruct01* var_r31; HsfanimStruct01* var_r31;
s32 i, j; s32 i, j;
if (arg1->unk_34 == 0U) { if (particle->unk_34 == 0U) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk40.a = 0; var_r31->unk40.a = 0;
var_r31->unk2C = 0.0f; var_r31->unk2C = 0.0f;
} }
arg1->unk_00 = 0; particle->unk_00 = 0;
} }
BoardModelScaleGet(arg1->unk_02, &sp8); BoardModelScaleGet(particle->unk_02, &sp8);
temp_f31 = sp8.x; temp_f31 = sp8.x;
BoardModelPosGet(arg1->unk_02, &sp8); BoardModelPosGet(particle->unk_02, &sp8);
for (i = 0; i < 0x16; i++) { for (i = 0; i < 0x16; i++) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (j = 0; j < arg1->unk_30; j++, var_r31++) { for (j = 0; j < particle->unk_30; j++, var_r31++) {
if (0.0f == var_r31->unk2C) { if (0.0f == var_r31->unk2C) {
break; break;
} }
} }
if (j != arg1->unk_30) { if (j != particle->unk_30) {
temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF)); temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF));
temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF)))); temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF))));
var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0))); var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0)));
@ -932,9 +932,9 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) {
var_r31->unk2C = (15.0f * temp_f31); var_r31->unk2C = (15.0f * temp_f31);
} }
} }
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (0.0f != var_r31->unk2C) { if (0.0f != var_r31->unk2C) {
var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x); var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x);
var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y); var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y);

File diff suppressed because it is too large Load diff

View file

@ -75,8 +75,8 @@ static void ExecItemLight(void);
static void ExecItemWhistle(void); static void ExecItemWhistle(void);
static void ExecItemBowser(void); static void ExecItemBowser(void);
static void ExecItemBooBall(void); static void ExecItemBooBall(void);
static void LampParticleUpdate(s32 arg0, ParticleData *arg1); static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
static void GenieParticleUpdate(s32 arg0, ParticleData *arg1); static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
static void GenieCameraProc(void); static void GenieCameraProc(void);
static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Vec *arg3, Vec *arg4); static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Vec *arg3, Vec *arg4);
static void GenieSceneExec(void); static void GenieSceneExec(void);
@ -1924,7 +1924,7 @@ static void ForceConsts(void)
(void)125.0f; (void)125.0f;
} }
static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct01 *var_r31; HsfanimStruct01 *var_r31;
Vec spC; Vec spC;
float sp8; float sp8;
@ -1933,26 +1933,26 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
s32 i; s32 i;
s32 j; s32 j;
if (arg1->unk_34 == 0) { if (particle->unk_34 == 0) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk2C = 0.0f; var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0; var_r31->unk40.a = 0;
} }
arg1->unk_04 = 0.0f; particle->unk_04 = 0.0f;
arg1->unk_00 = 0; particle->unk_00 = 0;
} }
if (arg1->unk_00 == 0) { if (particle->unk_00 == 0) {
arg1->unk_00 = 2; particle->unk_00 = 2;
BoardModelRotGet(suitMdl, &spC); BoardModelRotGet(suitMdl, &spC);
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (j = 0; j < arg1->unk_30; j++, var_r31++) { for (j = 0; j < particle->unk_30; j++, var_r31++) {
if (var_r31->unk2C == 0.0f) { if (var_r31->unk2C == 0.0f) {
break; break;
} }
} }
if (j != arg1->unk_30) { if (j != particle->unk_30) {
var_r31->unk34.x = 60.0 * sin((spC.y - 90.0f) * M_PI / 180.0); var_r31->unk34.x = 60.0 * sin((spC.y - 90.0f) * M_PI / 180.0);
var_r31->unk34.y = 30.0f; var_r31->unk34.y = 30.0f;
var_r31->unk34.z = 60.0 * cos((spC.y - 90.0f) * M_PI / 180.0); var_r31->unk34.z = 60.0 * cos((spC.y - 90.0f) * M_PI / 180.0);
@ -1968,10 +1968,10 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
} }
} }
} else { } else {
arg1->unk_00--; particle->unk_00--;
} }
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C != 0.0f) { if (var_r31->unk2C != 0.0f) {
if (var_r31->unk00_s16 == 0) { if (var_r31->unk00_s16 == 0) {
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
@ -2001,16 +2001,16 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
} }
} }
static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) { static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct01* var_r31; HsfanimStruct01* var_r31;
float temp_f31; float temp_f31;
float temp_f30; float temp_f30;
s32 var_r28; s32 var_r28;
s32 i; s32 i;
if (arg1->unk_34 == 0) { if (particle->unk_34 == 0) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk34.x = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f; var_r31->unk34.x = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f;
var_r31->unk34.y = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f; var_r31->unk34.y = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f;
var_r31->unk34.z = -10.0f + (frand() & 0xFF) * 20.0f * 0.003921569f; var_r31->unk34.z = -10.0f + (frand() & 0xFF) * 20.0f * 0.003921569f;
@ -2025,9 +2025,9 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) {
var_r31->unk2C = 80.0f + (frand() & 0xFF) * 60.0f * 0.003921569f; var_r31->unk2C = 80.0f + (frand() & 0xFF) * 60.0f * 0.003921569f;
} }
} }
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
var_r28 = 0; var_r28 = 0;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C != 0.0f) { if (var_r31->unk2C != 0.0f) {
var_r28++; var_r28++;
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
@ -2042,7 +2042,7 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) {
} }
} }
if (var_r28 == 0) { if (var_r28 == 0) {
arg1->unk_02 = 0; particle->unk_02 = 0;
} }
} }
@ -2235,7 +2235,7 @@ static void GenieSceneExec(void) {
temp_r21 = HuPrcChildCreate(GenieCameraProc, 0x2005, 0x1000, 0, HuPrcCurrentGet()); temp_r21 = HuPrcChildCreate(GenieCameraProc, 0x2005, 0x1000, 0, HuPrcCurrentGet());
Hu3DBGColorSet(0xFF, 0xFF, 0xFF); Hu3DBGColorSet(0xFF, 0xFF, 0xFF);
temp_r27 = Hu3DParticleCreate(genieParticleAnim, 0x32); temp_r27 = Hu3DParticleCreate(genieParticleAnim, 0x32);
Hu3DParticleHookSet(temp_r27, &GenieParticleUpdate); Hu3DParticleHookSet(temp_r27, GenieParticleUpdate);
Hu3DParticleBlendModeSet(temp_r27, 1); Hu3DParticleBlendModeSet(temp_r27, 1);
Hu3DParticleColSet(temp_r27, 0xFF, 0xFF, 0xFF); Hu3DParticleColSet(temp_r27, 0xFF, 0xFF, 0xFF);
Hu3DParticleAnimModeSet(temp_r27, 0); Hu3DParticleAnimModeSet(temp_r27, 0);
@ -2409,7 +2409,7 @@ static void ExecItemGenie(void) {
HuAudPlayerVoicePlay(currItemRestore, 0x125); HuAudPlayerVoicePlay(currItemRestore, 0x125);
temp_r25 = HuAudFXPlay(0x34D); temp_r25 = HuAudFXPlay(0x34D);
temp_r31 = Hu3DParticleCreate(genieParticleAnim, 0x96); temp_r31 = Hu3DParticleCreate(genieParticleAnim, 0x96);
Hu3DParticleHookSet(temp_r31, &LampParticleUpdate); Hu3DParticleHookSet(temp_r31, LampParticleUpdate);
Hu3DParticleBlendModeSet(temp_r31, 0); Hu3DParticleBlendModeSet(temp_r31, 0);
Hu3DParticleColSet(temp_r31, 0xFF, 0xFF, 0xFF); Hu3DParticleColSet(temp_r31, 0xFF, 0xFF, 0xFF);
Hu3DParticleAnimModeSet(temp_r31, 0); Hu3DParticleAnimModeSet(temp_r31, 0);

View file

@ -749,7 +749,7 @@ static void SeparateStatus(bitcopy* arg0, omObjData* arg1) {
switch (arg0->unk_02) { switch (arg0->unk_02) {
case 0: case 0:
for (var_r28 = 0; var_r28 < 4; var_r28++) { for (var_r28 = 0; var_r28 < 4; var_r28++) {
BoardStatusPosGet(var_r28, &sp8.x); BoardStatusPosGet(var_r28, &sp8);
if (sp8.x < 288.0f) { if (sp8.x < 288.0f) {
sp8.x = -98.0f; sp8.x = -98.0f;
} else { } else {

View file

@ -689,7 +689,7 @@ void BoardPlayerPostTurnHookSet(s32 arg0, s32 (*arg1)()) {
void BoardPlayerTurnExec(s32 arg0) { void BoardPlayerTurnExec(s32 arg0) {
BoardPauseDisableSet(1); BoardPauseDisableSet(1);
BoardComUseItemSet(arg0, -1); BoardComUseItemSet(arg0, -1);
GWSystem.field31_bit4 = 0xF; GWSystem.bowser_event = 0xF;
_ClearFlag(0x10016); _ClearFlag(0x10016);
_ClearFlag(0x1000E); _ClearFlag(0x1000E);
BoardCameraMoveSet(1); BoardCameraMoveSet(1);
@ -853,11 +853,11 @@ block_14:
BoardSpaceBlockExec(arg0, sp8); BoardSpaceBlockExec(arg0, sp8);
BoardSpaceLandExec(arg0, sp8); BoardSpaceLandExec(arg0, sp8);
_SetFlag(0x1000E); _SetFlag(0x1000E);
if (GWSystem.field31_bit4 != 1) { if (GWSystem.bowser_event != 1) {
BoardCameraViewSet(2); BoardCameraViewSet(2);
BoardCameraMotionWait(); BoardCameraMotionWait();
} else { } else {
GWSystem.field31_bit4 = 0xF; GWSystem.bowser_event = 0xF;
} }
BoardPlayerZoomRestore(arg0); BoardPlayerZoomRestore(arg0);
return; return;

View file

@ -402,11 +402,11 @@ void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) {
temp_r31->unk00_bit2 = 1; temp_r31->unk00_bit2 = 1;
} }
void BoardStatusPosGet(s32 arg0, float *arg1) { void BoardStatusPosGet(s32 arg0, Vec *arg1) {
UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; UnkUiStatusStruct *temp_r31 = &uiStatus[arg0];
arg1[0] = temp_r31->unk04.x; arg1->x = temp_r31->unk04.x;
arg1[1] = temp_r31->unk04.y; arg1->y = temp_r31->unk04.y;
} }
void BoardStatusPosSet(s32 arg0, Vec *arg1) { void BoardStatusPosSet(s32 arg0, Vec *arg1) {

View file

@ -74,7 +74,7 @@ static s16 CreateEffectStar(s16 arg0, float arg1, float arg2, float arg3, float
static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5);
static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5);
static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6); static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6);
static void UpdateEffect(s32 arg0, ParticleData *arg1); static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix);
static void RotateEffect(HsfanimStruct01 *arg0); static void RotateEffect(HsfanimStruct01 *arg0);
static void PlayEffectSound(HsfanimStruct01 *arg0); static void PlayEffectSound(HsfanimStruct01 *arg0);
static void UpdateItemHook(void); static void UpdateItemHook(void);
@ -887,21 +887,21 @@ static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4,
return i; return i;
} }
static void UpdateEffect(s32 arg0, ParticleData *arg1) { static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix) {
EffectParamData *temp_r30; EffectParamData *temp_r30;
HsfanimStruct01 *var_r31; HsfanimStruct01 *var_r31;
s16 var_r28; s16 var_r28;
s16 i; s16 i;
temp_r30 = arg1->unk_1C; temp_r30 = particle->unk_1C;
if (arg1->unk_34 == 0) { if (particle->unk_34 == 0) {
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk2C = 0.0f; var_r31->unk2C = 0.0f;
} }
} }
var_r31 = arg1->unk_48; var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) { for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C) { if (var_r31->unk2C) {
if (var_r31->unk02 == -1) { if (var_r31->unk02 == -1) {
var_r31->unk08.x *= temp_r30[i].unk18; var_r31->unk08.x *= temp_r30[i].unk18;
@ -962,7 +962,7 @@ static void UpdateEffect(s32 arg0, ParticleData *arg1) {
} }
} }
} }
DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01)); DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
} }
static void RotateEffect(HsfanimStruct01 *arg0) { static void RotateEffect(HsfanimStruct01 *arg0) {

View file

@ -25,7 +25,7 @@ typedef struct {
static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1); static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1);
static void ParManFunc(void); static void ParManFunc(void);
static void ParManHook(ModelData *arg0, ParticleData *arg1); static void ParManHook(ModelData *arg0, ParticleData *arg1, Mtx matrix);
u32 frand(void); u32 frand(void);
@ -606,7 +606,7 @@ void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1) {
temp_r30->unk_2C = arg1; temp_r30->unk_2C = arg1;
} }
void Hu3DParticleHookSet(s16 arg0, void *arg1) { void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1) {
ModelData *temp_r31 = &Hu3DData[arg0]; ModelData *temp_r31 = &Hu3DData[arg0];
ParticleData *temp_r30 = temp_r31->unk_120; ParticleData *temp_r30 = temp_r31->unk_120;
@ -673,7 +673,7 @@ static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1) {
AnimLayerData *temp_r27; AnimLayerData *temp_r27;
ParticleData *temp_r31; ParticleData *temp_r31;
HsfanimStruct01 *var_r29; HsfanimStruct01 *var_r29;
void (*var_r17)(void*, void*, Mtx); ParticleHook var_r17;
Mtx sp128; Mtx sp128;
Mtx spF8; Mtx spF8;
Mtx spC8; Mtx spC8;
@ -872,7 +872,7 @@ s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2) {
return -1; return -1;
} }
temp_r3 = Hu3DParticleCreate(arg0, arg1); temp_r3 = Hu3DParticleCreate(arg0, arg1);
Hu3DParticleHookSet(temp_r3, &ParManHook); Hu3DParticleHookSet(temp_r3, ParManHook);
temp_r25 = &Hu3DData[temp_r3]; temp_r25 = &Hu3DData[temp_r3];
temp_r29 = temp_r25->unk_120; temp_r29 = temp_r25->unk_120;
temp_r29->unk_00 = var_r30; temp_r29->unk_00 = var_r30;
@ -1214,7 +1214,7 @@ static float jitterTbl[] = {
0.5f, 0.7f, 0.9f, 1.0f 0.5f, 0.7f, 0.9f, 1.0f
}; };
static void ParManHook(ModelData *arg0, ParticleData *arg1) { static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct00 *temp_r26; HsfanimStruct00 *temp_r26;
ParManProcUserData *temp_r28; ParManProcUserData *temp_r28;
HsfanimStruct01 *var_r29; HsfanimStruct01 *var_r29;
@ -1228,9 +1228,9 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) {
s16 sp8; s16 sp8;
s16 i; s16 i;
if (Hu3DPauseF == 0 || (arg0->attr & 0x200000)) { if (Hu3DPauseF == 0 || (model->attr & 0x200000)) {
var_r29 = arg1->unk_48; var_r29 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r29++) { for (i = 0; i < particle->unk_30; i++, var_r29++) {
if (var_r29->unk2C) { if (var_r29->unk2C) {
temp_r28 = parManProc[var_r29->unk02]->user_data; temp_r28 = parManProc[var_r29->unk02]->user_data;
temp_r26 = temp_r28->unk3C; temp_r26 = temp_r28->unk3C;
@ -1278,8 +1278,8 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) {
} }
} }
} }
temp_r28 = parManProc[arg1->unk_00]->user_data; temp_r28 = parManProc[particle->unk_00]->user_data;
temp_r28->unk38++; temp_r28->unk38++;
DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01)); DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
} }
} }