254 lines
9.2 KiB
C
254 lines
9.2 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
#define _76D90_MAX(s,t) ((s < t)? t : s)
|
|
#define _76D90_MIN(s,t) ((s > t)? t : s)
|
|
|
|
f32 time_getDelta(void);
|
|
f32 func_802FDE60(f32);
|
|
void timedFunc_set_1(f32, void (*)(s32), s32);
|
|
void timedFunc_set_2(f32, void (*)(s32,s32), s32, s32);
|
|
void item_inc(s32);
|
|
void gcpausemenu_80314AC8(s32);
|
|
void item_set(s32, s32);
|
|
|
|
|
|
f32 func_802FB0E4(s32);
|
|
|
|
/* .data*/
|
|
void *D_8036A010 = NULL;
|
|
|
|
void *D_8036A014 = NULL;
|
|
|
|
s32 D_8036A018[] = {2, 1, 0, 3, 4, 5};
|
|
|
|
Gfx D_8036A030[] =
|
|
{
|
|
gsDPPipeSync(),
|
|
gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH),
|
|
gsSPSetGeometryMode(G_SHADE | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH),
|
|
gsSPTexture(0x1000, 0x1000, 0, G_TX_RENDERTILE, G_ON),
|
|
gsDPSetCycleType(G_CYC_1CYCLE),
|
|
gsDPSetCombineLERP(0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0),
|
|
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
|
|
gsSPEndDisplayList()
|
|
};
|
|
|
|
/* .bss */
|
|
s32 D_803815C0;
|
|
s32 D_803815C4;
|
|
f32 D_803815C8;
|
|
f32 D_803815CC;
|
|
f32 D_803815D0;
|
|
f32 D_803815D4;
|
|
f32 D_803815D8;
|
|
f32 D_803815DC;
|
|
f32 D_803815E0;
|
|
s32 D_803815E4;
|
|
s32 D_803815E8;
|
|
s32 D_803815EC;
|
|
struct7s D_803815F0;
|
|
s32 D_80381610;
|
|
|
|
void func_802FDD20(void) {
|
|
s32 phi_v1;
|
|
|
|
D_803815CC = -272.0f;
|
|
D_803815C8 = 1.0f;
|
|
D_803815C0 = 0;
|
|
D_803815D8 = 60 * ((item_getCount(0x13) <= 0)? 0: item_getCount(0x13)-1);
|
|
D_803815DC = 0.0f;
|
|
D_803815E0 = 1.0f;
|
|
D_803815E8 = 0x50;
|
|
}
|
|
|
|
void fxhoneycarrierscore_free(s32 arg0, struct8s *arg1){
|
|
if(D_8036A010){
|
|
func_8033BD4C(D_8036A010);
|
|
D_8036A010 = NULL;
|
|
}
|
|
if(D_8036A014){
|
|
func_8033BD4C(D_8036A014);
|
|
D_8036A014 = NULL;
|
|
}
|
|
D_803815E8 = 0x50;
|
|
}
|
|
|
|
struct7s *fxhoneycarrierscore_new(s32 arg0){
|
|
func_802FDD20();
|
|
D_803815D0 = 1.0f;
|
|
return &D_803815F0;
|
|
}
|
|
|
|
f32 func_802FDE60(f32 arg0) {
|
|
f32 temp_f2;
|
|
f32 phi_f0;
|
|
|
|
temp_f2 = (f32) ((f64) (D_803815D4 - 1.0f) * 60.0);
|
|
if (arg0 <= temp_f2) {
|
|
phi_f0 = temp_f2 - arg0;
|
|
} else {
|
|
phi_f0 = -(temp_f2 - arg0);
|
|
}
|
|
if ((f64) phi_f0 < 2.0) {
|
|
return temp_f2;
|
|
}
|
|
return arg0;
|
|
}
|
|
|
|
void fxhoneycarrierscore_draw(s32 arg0, struct8s *arg1, Gfx **arg2, Mtx **arg3, Vtx **arg4){
|
|
f64 var_f24;
|
|
s32 sp13C;
|
|
s32 sp138;
|
|
s32 sp134;
|
|
f32 sp130;
|
|
f32 sp12C;
|
|
f32 sp128;
|
|
f32 sp124;
|
|
s32 var_v0;
|
|
s32 var_v1;
|
|
u32 sp118;
|
|
f32 pad;
|
|
f32 sp110;
|
|
|
|
sp118 = D_803815C0 == 2;
|
|
if (D_8036A010 != 0) {
|
|
func_80347FC0(arg2, (sp118 ) ? (D_8036A014 != 0) ? D_8036A014 : D_8036A010 : D_8036A010, 0, 0, 0, 0, 0, 2, 2, &sp13C, &sp138);
|
|
func_8024C7B8(arg2, arg3);
|
|
gSPDisplayList((*arg2)++, D_8036A030);
|
|
for(sp134 = 0; sp134 < ((sp118)? ((D_8036A014 != 0) ? 2 : 1) : 6); sp134++){
|
|
sp110 = D_8036A018[sp134] * -0x3C;
|
|
gDPPipeSync((*arg2)++);
|
|
if (sp118) {
|
|
if (sp134 != 0) {
|
|
func_80347FC0(arg2, D_8036A010, 0, 0, 0, 0, 0, 2, 2, &sp13C, &sp138);
|
|
gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, (0xFF - D_803815E4));
|
|
} else {
|
|
gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E4);
|
|
}
|
|
} else {
|
|
if (D_803815D4 <= D_8036A018[sp134]) {
|
|
gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0x50);
|
|
}
|
|
else{
|
|
if ((D_803815EC != 0) && ((D_803815D4 - 1.0f) == D_8036A018[sp134])) {
|
|
gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E8);
|
|
} else {
|
|
gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0xFF);
|
|
}
|
|
}
|
|
}
|
|
sp128 = (244.0f - ((f32) framebuffer_width / 2));
|
|
sp124 = func_802FB0E4(arg1) + ((f32) framebuffer_height / 2) - 246.0f;
|
|
guTranslate(*arg3, sp128 * 4.0f, sp124 * 4.0f, 0.0f);
|
|
gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
guRotate(*arg3, func_802FDE60(D_803815D8 + D_803815DC), 0.0f, 0.0f, 1.0f);
|
|
gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
|
guScale(*arg3, D_803815E0, D_803815E0, D_803815E0);
|
|
gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
|
guTranslate(*arg3, -sp128 * 4.0f, -sp124 * 4.0f, 0.0f);
|
|
gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
|
var_f24 = MIN(1.0, MAX(0.0, D_803815C8));
|
|
sp130 = cosf(((D_803815CC + sp110) * 0.017453292519943295)) * (var_f24 * 24.5) * D_803815D0;
|
|
var_f24 = MIN(1.0, MAX(0.0, D_803815C8));
|
|
sp12C = sinf(((D_803815CC + sp110) * 0.017453292519943295))* (var_f24 * 24.5) * D_803815D0;
|
|
gSPVertex((*arg2)++, *arg4, 4, 0);
|
|
for(var_v1 = 0; var_v1 < 2; var_v1++){
|
|
for(var_v0 = 0; var_v0 < 2; var_v0++, (*arg4)++){
|
|
(*arg4)->v.ob[0] = ((((sp13C * D_803815D0) * var_v0) - ((sp13C * D_803815D0) / 2)) + (s32) (sp130 + sp128)) * 4.0f;
|
|
(*arg4)->v.ob[1] = ((((sp138 * D_803815D0) / 2) - ((sp138 * D_803815D0) * var_v1)) + (s32) (sp12C + sp124)) * 4.0f;
|
|
(*arg4)->v.ob[2] = -0x14;
|
|
(*arg4)->v.tc[0] = (s16) ((sp13C - 1) * var_v0 << 9);
|
|
(*arg4)->v.tc[1] = (s16) ((sp138 - 1) * var_v1 << 9);
|
|
|
|
}
|
|
}
|
|
gSP1Quadrangle((*arg2)++, 0, 1, 3, 2, 0);
|
|
}
|
|
gDPPipeSync((*arg2)++);
|
|
gDPSetTextureLUT((*arg2)++, G_TT_NONE);
|
|
gDPPipelineMode((*arg2)++, G_PM_NPRIMITIVE);
|
|
func_8024C904(arg2, arg3);
|
|
}
|
|
}
|
|
|
|
extern f64 D_803773E0;
|
|
void fxhoneycarrierscore_update(s32 arg0, struct8s *arg1){
|
|
f32 sp24;
|
|
s32 sp20;
|
|
s32 tmp;
|
|
|
|
sp24 = time_getDelta();
|
|
sp20 = func_802FB0D4(arg1);
|
|
if(sp20){
|
|
D_803815D4 = itemPrint_getValue(arg0);
|
|
tmp = ((D_803815D4 - 1.0f) * 60.00000000 == func_802FDE60(D_803815D8));
|
|
if(!D_80381610 && tmp && (D_803815D4 != 1.0f))
|
|
func_8030E760(SFX_90_SWITCH_PRESS, 1.3f, 0x7FF8);
|
|
D_803815EC = (D_803815D4 == item_getCount(arg0));
|
|
D_80381610 = tmp;
|
|
if(D_803815EC && D_80381610){
|
|
D_803815E8 = _76D90_MIN(D_803815E8 + 0x10, 0xFF);
|
|
}
|
|
}//L802FE9A0
|
|
//sp24 = time_getDelta();
|
|
switch(sp20){
|
|
case 1:
|
|
if(D_8036A010 == NULL)
|
|
D_8036A010 = assetcache_get(0x7DC);
|
|
break;
|
|
case 0:
|
|
fxhoneycarrierscore_free(arg0, arg1);
|
|
break;
|
|
case 2:
|
|
switch(D_803815C0){
|
|
case 0://L802FEA40
|
|
if(D_803815EC){
|
|
if(6.0f <= D_803815D4 && D_80381610 && D_803815E8 == 0xFF){
|
|
D_803815C0 = 1;
|
|
D_803815DC = 20.0f;
|
|
func_8025A6EC(COMUSIC_18_HEALTH_UPGRADE, 28000);
|
|
}else{
|
|
if(1.0f < D_803815D4 && !D_80381610){
|
|
D_803815D8 += _76D90_MAX((((D_803815D4 - 1.0f) * 60.0 - D_803815D8) * sp24 * 3.0), 2.0);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 1://L802FEB70
|
|
D_803815CC += 240.0f*sp24;
|
|
D_803815C8 -= sp24*0.4;
|
|
if(D_803815C8 < 0.0f){
|
|
D_803815C0 = 2;
|
|
if(D_8036A014 == NULL){
|
|
D_8036A014 = assetcache_get(0x7DD);
|
|
}
|
|
D_803815C4 = func_8023DB5C();
|
|
D_803815E4 = 0;
|
|
D_803815E0 = 0.9999f;
|
|
item_adjustByDiffWithHud(ITEM_13_EMPTY_HONEYCOMB, -6);
|
|
timedFunc_set_2(0.25f, (GenFunction_2)func_8025A6EC, COMUSIC_2B_DING_B, 28000);
|
|
item_adjustByDiffWithHud(ITEM_14_HEALTH, 0);
|
|
timedFunc_set_1(1.25f, (GenFunction_1)item_inc, ITEM_15_HEALTH_TOTAL);
|
|
timedFunc_set_1(1.25f, (GenFunction_1)func_8030E484, SFX_3EA_UNKNOWN);
|
|
timedFunc_set_2(1.25f, (GenFunction_2)item_set, ITEM_14_HEALTH, item_getCount(ITEM_15_HEALTH_TOTAL)+1);
|
|
timedFunc_set_1(1.5f, (GenFunction_1)gcpausemenu_80314AC8, 1);
|
|
}
|
|
break;
|
|
case 2://L802FECD4
|
|
D_803815E0 *= gu_sqrtf(D_803815E0);
|
|
D_803815DC *= 1.1;
|
|
D_803815E4 = _76D90_MIN((D_803815E4 + (400.0*sp24)), 255.0);
|
|
if(D_803815E0 < 0.1){
|
|
func_802FDD20();
|
|
fxhoneycarrierscore_free(arg0, arg1);
|
|
}
|
|
break;
|
|
}
|
|
if(D_803815C0 == 1)
|
|
item_adjustByDiffWithHud(ITEM_13_EMPTY_HONEYCOMB, 0);
|
|
break;
|
|
}
|
|
}
|