marioparty4/src/REL/w03Dll/smoke.c
2024-03-14 19:22:42 -05:00

76 lines
No EOL
2 KiB
C

#include "dolphin.h"
#include "game/object.h"
#include "REL/w03Dll.h"
#include "game/board/main.h"
#include "game/board/model.h"
typedef struct w03UnkWorkStruct {
s16 unk_00[5];
char unk_0A[2];
f32 unk_0C;
} w03UnkWorkStruct;
extern w03State* lbl_1_bss_0;
omObjData* lbl_1_bss_138[2];
extern Process *boardObjMan;
extern s16 lbl_1_data_1E0;
void fn_1_79E0(omObjData* arg0);
char* kemuri_strings[] = {
"kemuri1", "kemuri2", "kemuri3",
"kemuri4", "kemuri5"
};
void fn_1_785C(void) {
f32 var_f31;
s32 i;
w03UnkWorkStruct* temp_r31;
char* temp_r29;
lbl_1_bss_138[0] = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_79E0);
temp_r31 = (w03UnkWorkStruct*)&lbl_1_bss_138[0]->work[0];
for (i = 0; i < 5; i++) {
temp_r31->unk_00[i] = BoardModelCreate(0x770008, NULL, 0);
temp_r29 = kemuri_strings[i];
if (0.0f == temp_r31->unk_0C) {
temp_r31->unk_0C = BoardModelMotionMaxTimeGet(temp_r31->unk_00[i]);
}
var_f31 = temp_r31->unk_0C * BoardRandFloat();
if (var_f31 < 1.0f) {
var_f31 = 1.0f;
}
BoardModelHookSet(lbl_1_data_1E0, temp_r29, temp_r31->unk_00[i]);
BoardModelMotionStart(temp_r31->unk_00[i], 0, 0x40000001);
BoardModelMotionTimeSet(temp_r31->unk_00[i], var_f31);
BoardModelLayerSet(temp_r31->unk_00[i], 2);
BoardModelPassSet(temp_r31->unk_00[i], 0);
}
}
void fn_1_79E0(omObjData* arg0) {
s32 var_r29;
s32 i;
w03UnkWorkStruct* temp_r30;
temp_r30 = (w03UnkWorkStruct*)&arg0->work[0];
if (BoardIsKill() != 0) {
for (i = 0; i < 5; i++) {
BoardModelKill(temp_r30->unk_00[i]);
}
lbl_1_bss_138[0] = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (lbl_1_bss_0->unk3 != 0) {
var_r29 = 0;
} else {
var_r29 = 1;
}
for (i = 0; i < 5; i++) {
BoardModelVisibilitySet(temp_r30->unk_00[i], var_r29);
}
}
char pad[4] = "\0\0\0\0";