162 lines
4.1 KiB
C
162 lines
4.1 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
extern void sfxsource_setSampleRate(u8, s32);
|
|
|
|
void func_8038B6FC(Struct5Fs *arg0, Struct68s *arg1);
|
|
|
|
s32 __mmm_5000_red[4] = {0xFF, 0, 0, 0xFF};
|
|
s32 __mmm_5000_green[4] = {0, 0xFF, 0, 0xFF};
|
|
s32 __mmm_5000_blue[4] = {0, 0, 0xFF, 0xFF};
|
|
|
|
/* .code */
|
|
void func_8038B3F0(Struct5Fs *arg0, struct struct_68_s *arg1, f32 position[3], f32 rotation[3], f32 scale, BKModelBin *model_bin, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
|
|
s32 sp58[4];
|
|
s32 temp_f4;
|
|
s32 sp44[4];
|
|
s32 temp_f6;
|
|
s32 sp30[4];
|
|
s32 temp_f8;
|
|
|
|
if (arg0->unkC > 0.0f) {
|
|
temp_f4 = (s32) (((1.0f - arg0->unkC) * 223.0f) + 32.0f);
|
|
sp58[0] = temp_f4;
|
|
sp58[1] = temp_f4;
|
|
sp58[2] = temp_f4;
|
|
sp58[3] = 0xFF;
|
|
func_8033A334(sp58, __mmm_5000_red);
|
|
} else if (arg0->unk4 > 0.0f) {
|
|
temp_f6 = (s32) (((1.0f - arg0->unk4) * 223.0f) + 32.0f);
|
|
sp44[0] = temp_f6;
|
|
sp44[1] = temp_f6;
|
|
sp44[2] = temp_f6;
|
|
sp44[3] = 0xFF;
|
|
func_8033A334(sp44, __mmm_5000_green);
|
|
} else if (arg0->unk0 > 0.0f) {
|
|
temp_f8 = (s32) (((1.0f - arg0->unk0) * 223.0f) + 32.0f);
|
|
sp30[0] = temp_f8;
|
|
sp30[1] = temp_f8;
|
|
sp30[2] = temp_f8;
|
|
sp30[3] = 0xFF;
|
|
func_8033A334(sp30, __mmm_5000_blue);
|
|
}
|
|
set_model_render_mode(1);
|
|
func_803391A4(gfx, mtx, position, rotation, scale, NULL, model_bin);
|
|
}
|
|
|
|
void func_8038B590(Struct5Fs *arg0, Struct68s *arg1){
|
|
f32 sp1C[3];
|
|
|
|
arg0->unkA = 1;
|
|
arg0->unk10 = 0.0f;
|
|
sp1C[2] = sp1C[1] = arg0->unk10;
|
|
sp1C[0] = 5.0f;
|
|
func_80351C2C(arg1, sp1C);
|
|
}
|
|
|
|
void func_8038B5D8(Struct5Fs *arg0, Struct68s *arg1, s32 arg2, s32 arg3){
|
|
arg0->unk8 = arg3;
|
|
arg0->unk9 = arg2;
|
|
arg0->unkA = 0;
|
|
arg0->unk0 = 0.0f;
|
|
arg0->unk4 = 0.0f;
|
|
arg0->unkC = 0.0f;
|
|
arg0->unk10 = 0.0f;
|
|
arg0->unk14 = 0.0f;
|
|
func_80351A14(arg1, (Struct68DrawMethod)func_8038B3F0);
|
|
}
|
|
|
|
void func_8038B630(Struct5Fs *arg0, Struct68s *arg1){
|
|
u8 phi_s0;
|
|
u32 pad;
|
|
u32 pad1;
|
|
f32 sp20;
|
|
|
|
sp20 = alCents2Ratio(func_80389BBC()*100);
|
|
phi_s0 = func_80351758(arg1);
|
|
func_8030E394(phi_s0);
|
|
func_8030DBB4(phi_s0, sp20);
|
|
sfxsource_setSfxId(phi_s0, 0x3f3);
|
|
func_8030DD14(phi_s0, 3);
|
|
sfxsource_setSampleRate(phi_s0, 0x7fff);
|
|
func_8030E2C4(phi_s0);
|
|
arg0->unk14 = 1.5f;
|
|
if(pad);
|
|
|
|
}
|
|
|
|
void MMM_func_8038B6D4(Struct5Fs * arg0, Struct68s *arg1) {
|
|
arg0->unk0 = 1.0f;
|
|
func_8038B6FC(arg0, arg1);
|
|
}
|
|
|
|
void func_8038B6FC(Struct5Fs *arg0, Struct68s *arg1){
|
|
func_8038B590(arg0, arg1);
|
|
func_8038B630(arg0, arg1);
|
|
}
|
|
|
|
void func_8038B72C(Struct5Fs *arg0, Struct68s * arg1) {
|
|
arg0->unk4 = 1.0f;
|
|
func_8038B6FC(arg0, arg1);
|
|
}
|
|
|
|
void func_8038B754(Struct5Fs *arg0, Struct68s * arg1){
|
|
func_8038B590(arg0, arg1);
|
|
arg0->unkC = 1.0f;
|
|
func_8025A6EC(COMUSIC_2C_BUZZER, 28000);
|
|
}
|
|
|
|
void func_8038B790(Struct5Fs *arg0, Struct68s *arg1, f32 arg2) {
|
|
f32 sp2C[3];
|
|
f32 temp_f0_6;
|
|
s32 temp_v0;
|
|
|
|
arg0->unk10 += arg2;
|
|
if (arg0->unk14 > 0.0f) {
|
|
arg0->unk14 -= arg2;
|
|
if (arg0->unk14 <= 0.0f) {
|
|
func_80351954(arg1);
|
|
} else if (arg0->unk14 <= 1.0f) {
|
|
sfxsource_setSampleRate(func_80351758(arg1), (s32)(arg0->unk14 * 32767.0f));
|
|
}
|
|
}
|
|
|
|
if (arg0->unkC > 0.0f) {
|
|
arg0->unkC -= 1 * arg2;
|
|
}
|
|
|
|
if (arg0->unk4 > 0.0f) {
|
|
arg0->unk4 -= 1 * arg2;
|
|
}
|
|
|
|
if (arg0->unk0 > 0.0f) {
|
|
arg0->unk0 -= 1 * arg2;
|
|
}
|
|
|
|
func_80351814(arg1, sp2C);
|
|
if (func_803518C0(arg1) != 0) {
|
|
temp_v0 = func_80389CE8(arg0, arg1, arg0->unk8);
|
|
if (temp_v0 == 0) {
|
|
func_8038B6FC(arg0, arg1);
|
|
}
|
|
else if (temp_v0 == 1) {
|
|
func_8038B72C(arg0, arg1);
|
|
}
|
|
else if (temp_v0 == 2) {
|
|
func_8038B754(arg0, arg1);
|
|
}
|
|
} else {
|
|
if (arg0->unkA == 1) {
|
|
temp_f0_6 = arg0->unk10 / 0.3;
|
|
if (temp_f0_6 >= 1.0f) {
|
|
sp2C[0] = 0.0f;
|
|
arg0->unkA = 0U;
|
|
} else {
|
|
sp2C[0] = (1 - temp_f0_6) * 5.0f;
|
|
}
|
|
}
|
|
func_80351C2C(arg1, sp2C);
|
|
}
|
|
}
|