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
KillBowserFire = .text:0x8009A784; // type:function size:0x40 scope:local
ExecMiniBowserEvent = .text:0x8009A7C4; // type:function size:0x188 scope:local
MiniBowserTakeAll = .text:0x8009A94C; // type:function size:0x2C4 scope:local
MiniBowserTake = .text:0x8009AC10; // type:function size:0x2B8 scope:local
MiniBowserTake = .text:0x8009A94C; // type:function size:0x2C4 scope:local
MiniBowserTakeAll = .text:0x8009AC10; // type:function size:0x2B8 scope:local
MiniBowserBalloonStop = .text:0x8009AEC8; // type:function size:0x24 scope:local
GetMiniBowserBalloonState = .text:0x8009AEEC; // type:function size:0xC 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
booCamUp = .bss:0x801A4BD8; // type:object size:0xC scope:local data:float
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
camPosFortune = .bss:0x801A4C40; // type:object size:0xC scope:local data:4byte
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/block.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/fortune.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 BoardStatusItemHideSet(s32 arg0, s32 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 BoardStatusHammerCreate(s32 arg0);
void BoardStatusHammerShowSet(s32 arg0, s32 arg1);

View file

@ -6,6 +6,9 @@
#include "game/sprite.h"
typedef struct model_data ModelData;
typedef struct particle_data ParticleData;
typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix);
typedef struct {
/* 0x00 */ union {
@ -49,7 +52,7 @@ typedef struct particle_data {
/* 0x48 */ HsfanimStruct01 *unk_48;
/* 0x4C */ Vec *unk_4C;
/* 0x50 */ void *unk_50;
/* 0x54 */ void *unk_54;
/* 0x54 */ ParticleHook unk_54;
} ParticleData; // Size 0x58
typedef struct {
@ -117,7 +120,7 @@ void Hu3DParticleZRotSet(s16 arg0, float arg1);
void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3);
void Hu3DParticleTPLvlSet(s16 arg0, float 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 Hu3DParticleAttrReset(s16 arg0, u8 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);
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_BC7C(s16 arg0);
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;
f32 temp_f30;
@ -900,27 +900,27 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) {
HsfanimStruct01* var_r31;
s32 i, j;
if (arg1->unk_34 == 0U) {
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
if (particle->unk_34 == 0U) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk40.a = 0;
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;
BoardModelPosGet(arg1->unk_02, &sp8);
BoardModelPosGet(particle->unk_02, &sp8);
for (i = 0; i < 0x16; i++) {
var_r31 = arg1->unk_48;
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
var_r31 = particle->unk_48;
for (j = 0; j < particle->unk_30; j++, var_r31++) {
if (0.0f == var_r31->unk2C) {
break;
}
}
if (j != arg1->unk_30) {
if (j != particle->unk_30) {
temp_f30 = 360.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)));
@ -932,9 +932,9 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) {
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) {
var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x);
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 ExecItemBowser(void);
static void ExecItemBooBall(void);
static void LampParticleUpdate(s32 arg0, ParticleData *arg1);
static void GenieParticleUpdate(s32 arg0, ParticleData *arg1);
static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
static void GenieCameraProc(void);
static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Vec *arg3, Vec *arg4);
static void GenieSceneExec(void);
@ -1924,7 +1924,7 @@ static void ForceConsts(void)
(void)125.0f;
}
static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct01 *var_r31;
Vec spC;
float sp8;
@ -1933,26 +1933,26 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
s32 i;
s32 j;
if (arg1->unk_34 == 0) {
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
arg1->unk_04 = 0.0f;
arg1->unk_00 = 0;
particle->unk_04 = 0.0f;
particle->unk_00 = 0;
}
if (arg1->unk_00 == 0) {
arg1->unk_00 = 2;
if (particle->unk_00 == 0) {
particle->unk_00 = 2;
BoardModelRotGet(suitMdl, &spC);
for (i = 0; i < 2; i++) {
var_r31 = arg1->unk_48;
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
var_r31 = particle->unk_48;
for (j = 0; j < particle->unk_30; j++, var_r31++) {
if (var_r31->unk2C == 0.0f) {
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.y = 30.0f;
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 {
arg1->unk_00--;
particle->unk_00--;
}
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C != 0.0f) {
if (var_r31->unk00_s16 == 0) {
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;
float temp_f31;
float temp_f30;
s32 var_r28;
s32 i;
if (arg1->unk_34 == 0) {
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
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.y = -50.0f + (frand() & 0xFF) * 100.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 = arg1->unk_48;
var_r31 = particle->unk_48;
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) {
var_r28++;
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) {
arg1->unk_02 = 0;
particle->unk_02 = 0;
}
}
@ -2235,7 +2235,7 @@ static void GenieSceneExec(void) {
temp_r21 = HuPrcChildCreate(GenieCameraProc, 0x2005, 0x1000, 0, HuPrcCurrentGet());
Hu3DBGColorSet(0xFF, 0xFF, 0xFF);
temp_r27 = Hu3DParticleCreate(genieParticleAnim, 0x32);
Hu3DParticleHookSet(temp_r27, &GenieParticleUpdate);
Hu3DParticleHookSet(temp_r27, GenieParticleUpdate);
Hu3DParticleBlendModeSet(temp_r27, 1);
Hu3DParticleColSet(temp_r27, 0xFF, 0xFF, 0xFF);
Hu3DParticleAnimModeSet(temp_r27, 0);
@ -2409,7 +2409,7 @@ static void ExecItemGenie(void) {
HuAudPlayerVoicePlay(currItemRestore, 0x125);
temp_r25 = HuAudFXPlay(0x34D);
temp_r31 = Hu3DParticleCreate(genieParticleAnim, 0x96);
Hu3DParticleHookSet(temp_r31, &LampParticleUpdate);
Hu3DParticleHookSet(temp_r31, LampParticleUpdate);
Hu3DParticleBlendModeSet(temp_r31, 0);
Hu3DParticleColSet(temp_r31, 0xFF, 0xFF, 0xFF);
Hu3DParticleAnimModeSet(temp_r31, 0);

View file

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

View file

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

View file

@ -402,11 +402,11 @@ void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) {
temp_r31->unk00_bit2 = 1;
}
void BoardStatusPosGet(s32 arg0, float *arg1) {
void BoardStatusPosGet(s32 arg0, Vec *arg1) {
UnkUiStatusStruct *temp_r31 = &uiStatus[arg0];
arg1[0] = temp_r31->unk04.x;
arg1[1] = temp_r31->unk04.y;
arg1->x = temp_r31->unk04.x;
arg1->y = temp_r31->unk04.y;
}
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 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 void UpdateEffect(s32 arg0, ParticleData *arg1);
static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix);
static void RotateEffect(HsfanimStruct01 *arg0);
static void PlayEffectSound(HsfanimStruct01 *arg0);
static void UpdateItemHook(void);
@ -887,21 +887,21 @@ static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4,
return i;
}
static void UpdateEffect(s32 arg0, ParticleData *arg1) {
static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix) {
EffectParamData *temp_r30;
HsfanimStruct01 *var_r31;
s16 var_r28;
s16 i;
temp_r30 = arg1->unk_1C;
if (arg1->unk_34 == 0) {
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
temp_r30 = particle->unk_1C;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk2C = 0.0f;
}
}
var_r31 = arg1->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C) {
if (var_r31->unk02 == -1) {
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) {

View file

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