Files
banjo-kazooie/src/core2/code_763D0.c
2022-07-15 17:09:41 -05:00

318 lines
9.9 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 time_getDelta(void);
f32 func_802FB0DC(struct8s *);
f32 func_802FB0E4(struct8s *);
extern Gfx D_80369920[] = {
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(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPEndDisplayList(),
};
extern struct8s D_80369960[] = {
{
0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_C_NOTE, ASSET_7D9_SPRITE_NOTE, 0x1, 0xA,
0.6f, 1.0f, 212.0f, -8.0f,
1.0f, 25.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f,
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_D_EGGS, ASSET_36D_SPRITE_BLUE_EGG, 0x2, 0x7,
0.3f, 1.0f, 212.0f, -8.0f,
0.8f, 25.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_F_RED_FEATHER, ASSET_580_SPRITE_RED_FEATHER, 0x2, 0xA,
0.18f, 1.0f, 212.0f, -8.0f,
0.5f, 25.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_10_GOLD_FEATHER, ASSET_6D1_SPRITE_GOLDFEATHTER, 0x2, 0xA,
0.22f, -1.0f, 212.0f, -8.0f,
0.5f, 25.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_1A_PLAYER_VILE_SCORE, ASSET_7E7_SPRITE_CROC_BANJO, 0xD, 0x6,
0.5f, 1.0f, 28.0f, -16.0f,
1.0f, 28.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_1B_VILE_VILE_SCORE, ASSET_7E6_SPRITE_VILE, 0xD, 0x6,
0.5f, 1.0f, 263.0f, -52.0f,
1.0f, -26.0f, 0.0f, 1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_1C_MUMBO_TOKEN, ASSET_41A_SPRITE_MUMBO_TOKEN, 0x2, 0xC,
0.3f, 1.0f, 224.0f, 224.0f,
1.1f, 32.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_0_HOURGLASS_TIMER, ASSET_6DA_SPRITE_HOURGLASS, 0x2, 0x16,
0.3f, 1.0f, 24.0f, 224.0f,
1.0f, 20.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_1_SKULL_HOURGLASS_TIMER, ASSET_6DB_SPRITE_SKULL_HOURGLASS, 0x2, 0x16,
0.3f, 1.0f, 24.0f, 266.0f,
1.0f, 20.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_3_PROPELLOR_TIMER, ASSET_6D9_SPRITE_PROPELLOR_TIMER, 0x2, 0xC,
0.2f, 1.0f, 36.0f, 224.0f,
0.8f, 32.0f, 3.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_5_XMAS_TREE_TIMER, ASSET_6DC_SPRITE_XMAS_TREE_TIMER, 0x1, 0xE,
0.5f, 1.0f, 24.0f, 256.0f,
1.0f, 24.0f, 2.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_25_MUMBO_TOKEN_TOTAL, ASSET_41A_SPRITE_MUMBO_TOKEN, 0x2, 0xC,
0.3f, 1.0f, 224.0f, 228.0f,
1.1f, 32.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
ITEM_27_JOKER_CARD, ASSET_7EE_JOKER_CARD, 0x2, 0x18,
0.3f, 1.0f, 224.0f, 224.0f,
0.8f, 32.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
0x00000028, 0, 0x2, 0x16,
0.3f, 1.0f, 24.0f, 266.0f,
1.0f, 20.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
0x0000002A, 0, 0x2, 0x0E,
0.3f, 1.0f, 224.0f, 224.0f,
0.6f, 32.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
0x00000029, 0, 0x2, 0x0E,
0.3f, 1.0f, 224.0f, 224.0f,
0.6f, 32.0f, 0.0f, -1.0f,
NULL, {0}, 0.0f
},
{ 0, 0, 0.0f, 0.0f, 0.0f, 0, 0, 0.0f,
-1, 0, 0x0, 0x00,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
NULL, {0}, 0.0f
},
};
extern s32 D_80276588;
extern s32 D_8027658C;
extern f32 D_803773A0;
extern f32 D_803773A4;
void func_802FD360(struct8s *arg0, Gfx **gfx, Mtx **mtx, Vtx **vtx){
s32 tmp_s2 = 0;
s32 tmp_s4;
s32 spAC;
s32 spA8;
f32 tmp_f26;
f32 f2;
if(arg0->unk50 == NULL) return;
gSPDisplayList((*gfx)++, &D_80369920);
if(arg0->unk20 == ITEM_C_NOTE){
gDPSetCombineMode((*gfx)++, G_CC_MODULATEIA, G_CC_MODULATEIA);
}
func_8024C7B8(gfx, mtx);
gSPVertex((*gfx)++, *vtx, 4, 0);
if(arg0->unk20 == ITEM_0_HOURGLASS_TIMER){
tmp_s2 = 0xC;
}
func_80347FC0(gfx, arg0->unk50, ((s32)arg0->unk60 + tmp_s2)%arg0->unk2C, 0, 0, 0, 0, 2, 2, &spAC, &spA8);
tmp_f26 = (arg0->unk20 == ITEM_0_HOURGLASS_TIMER && spAC == 0x10) ? 1.0f : 0.0f;
for(tmp_s4 = 0; tmp_s4 < 2; tmp_s4++){//L802FD528
for(tmp_s2 = 0; tmp_s2 < 2; tmp_s2++){//
(*vtx)->v.ob[0] = ((func_802FB0DC(arg0) + (((spAC*arg0->unk40*tmp_s2 - spAC*arg0->unk40/2) - (f32)D_80276588/2) + arg0->unk38)) + tmp_f26) * 4.0f;
(*vtx)->v.ob[1] = ((((spA8*arg0->unk40/2 - spA8*arg0->unk40*tmp_s4) + (f32)D_8027658C/2) - arg0->unk3C) - func_802FB0E4(arg0)*arg0->unk4C)*4.0f;
(*vtx)->v.ob[2] = -0x14;
(*vtx)->v.tc[0] = ((spAC -1) * tmp_s2) << 6;
(*vtx)->v.tc[1] = ((spA8 -1) * tmp_s4) << 6;
if(arg0->unk20 == ITEM_C_NOTE){
if(tmp_s4 == 0){
(*vtx)->v.cn[0] = 0xff;
(*vtx)->v.cn[1] = 0xff;
(*vtx)->v.cn[2] = 0x0;
(*vtx)->v.cn[3] = 0xff;
}
else if(tmp_s2 != 0){
(*vtx)->v.cn[0] = 0xff;
(*vtx)->v.cn[1] = 100;
(*vtx)->v.cn[2] = 0x0;
(*vtx)->v.cn[3] = 0xff;
}
else{
(*vtx)->v.cn[0] = 0xff;
(*vtx)->v.cn[1] = 200;
(*vtx)->v.cn[2] = 0x0;
(*vtx)->v.cn[3] = 0xff;
}
}
(*vtx)++;
}
}
gSP1Quadrangle((*gfx)++, 0, 1, 3, 2, 0);
gDPPipeSync((*gfx)++);
gDPSetTextureLUT((*gfx)++, G_TT_NONE);
gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE);
func_8024C904(gfx, mtx);
}
struct8s *func_802FD7B0(enum item_e item_id) {
s32 i;
struct8s *v1;
for(v1 = D_80369960; v1->unk20 != -1; v1++){
if(item_id == v1->unk20){
v1->unk14 = v1->unk4C;
return v1;
}
}
return NULL;
}
void func_802FD80C(s32 arg0, struct8s * arg1){
s32 tmp;
f32 two = 2.0f;
f32 phi_f16;
f32 tmpf;
tmp = func_802FB0D4(arg1);
phi_f16 = 1.0f;
if(!tmp) {
func_802FDC80(arg0, arg1);
}
else{
if(arg1->unk50 == NULL && arg1->unk24){
arg1->unk50 = assetcache_get(arg1->unk24);
}
if(arg0 == 0){
if(arg1->unk60 < 1.0f || arg1->unk60 >= 12.0f)
phi_f16 = D_803773A0;
}
if(arg0 == 1){
if(arg1->unk60 > 10.0f)
phi_f16 = D_803773A4;
}
if(arg0 < 6){
if(item_getCount(arg0) < 30){
arg1->unk28 |= 8;
}
else{
arg1->unk28 &= ~0xC;
}
}
if((arg1->unk28 & 4) == 0){
tmpf = arg1->unk2C;
arg1->unk60 = time_getDelta() * (arg1->unk34 * arg1->unk30) * 60.0f * phi_f16 + arg1->unk60;
if(arg1->unk2C <= arg1->unk60){
if(arg1->unk28 & 1){
arg1->unk34 *= -1.0f;
arg1->unk60 -= two* arg1->unk30 * time_getDelta() * 60.0f;
}
else{
arg1->unk60 -= arg1->unk2C;
if (arg1->unk28 & 8) {
arg1->unk28 |= 4;
arg1->unk60 = 0.0f;
}
}
}
else{
if(arg1->unk60 < 0.0){
if(arg1->unk28 & 1){
arg1->unk34 *= -1.0f;
arg1->unk60 += two * arg1->unk30 * time_getDelta() * 60.0f;
}
else{
arg1->unk60 += arg1->unk2C;
}
if (arg1->unk28 & 8) {
arg1->unk28 |= 4;
arg1->unk60 = 0.0f;
}
}
}
}
}
}
void func_802FDAF4(enum item_e item_id, struct8s *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx){
f32 pad;
s32 sp38;
f32 sp34;
sp38 = itemPrint_getValue(item_id);
sp34 = 0.0f;
if(item_id == ITEM_C_NOTE){
if(level_get() == LEVEL_6_LAIR || level_get() == LEVEL_C_BOSS){
sp38 = notescore_getTotal();
}
}
if(item_id < 6){
sp38 = ((sp38)? 1: 0) + sp38/60;
}//L802FDBA8
if(item_id == ITEM_1B_VILE_VILE_SCORE && 9 < sp38){
sp34 = -16.0f;
}
if(item_id == ITEM_1C_MUMBO_TOKEN || item_id == ITEM_25_MUMBO_TOKEN_TOTAL){
if(sp38 >= 100){
sp38 = 99;
}
}
arg1->string_54[0] = 0;
//convert to string
strIToA(arg1->string_54, sp38);
//print text (blue egg font)
print_bold_spaced(
(s32)(func_802FB0DC(arg1) + arg1->unk38 + arg1->unk44 + sp34),
(s32)(func_802FB0E4(arg1)*arg1->unk4C + (arg1->unk3C + arg1->unk48)),
arg1->string_54
);
//draw sprite?
func_802FD360(arg1, gfx, mtx, vtx);
}
void func_802FDC80(enum item_e item_id, struct8s *arg1){
if(arg1->unk50){
func_8033BD4C(arg1->unk50); //assetCache_free
arg1->unk50 = NULL;
}
}
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_763D0/func_802FDCB8.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_763D0/func_802FDD0C.s")