label fx/scores

This commit is contained in:
Banjo Kazooie
2023-01-30 16:33:46 -06:00
parent 3aa7e464e1
commit 0be5904e28
17 changed files with 99 additions and 98 deletions

153
src/core2/fx/airscore.c Normal file
View File

@@ -0,0 +1,153 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_802FB0E4(struct8s *);
/* .data */
BKSprite *D_8036A960 = NULL;
Gfx D_8036A968[] ={
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),
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_80381F50;
f32 D_80381F54;
f32 D_80381F58;
f32 D_80381F5C;
f32 D_80381F60;
f32 D_80381F68[6];
struct7s D_80381F80;
/* .code */
void func_803016F0(void) {
s32 i;
D_80381F58 = -272.0f;
D_80381F54 = 1.0f;
D_80381F50 = 0;
for(i = 0; i < 6; i++){
D_80381F68[i] = -64.0f;
}
}
void fxairscore_free(s32 arg0, struct8s *arg1) {
if (D_8036A960 != NULL) {
func_8033BD4C(D_8036A960);
D_8036A960 = NULL;
}
func_803016F0();
}
struct7s *fxairscore_new(s32 arg0) {
func_803016F0();
D_80381F5C = 0.68f;
return &D_80381F80;
}
void fxairscore_draw(enum item_e item_id, struct8s *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
f32 temp_f16;
f32 var_f14;
s32 spD4;
s32 spD0;
s32 var_s4;
s32 var_s6;
s32 var_v0;
s32 var_v1;
if (D_8036A960 != 0) {
gSPDisplayList((*gfx)++, D_8036A968);
func_80347FC0(gfx, D_8036A960, 0, 0, 0, 0, 0, 2, 2, &spD4, &spD0);
func_8024C7B8(gfx, mtx);
for(var_s4 = 0; var_s4 < 6; var_s4++){
if ((var_s4 != 0) && (var_s4 != 5)) {
var_s6 = (var_s4 & 1) ? var_s4 + 1 : var_s4 - 1;
} else {
var_s6 = var_s4;
}
gDPPipeSync((*gfx)++);
if ((f32) (5 - var_s4) < D_80381F60) {
gDPSetPrimColor((*gfx)++, 0, 0, 0x00, 0x00, 0x00, 0xFF);
} else {
gDPSetPrimColor((*gfx)++, 0, 0, 0x00, 0x00, 0x00, 0x78);
}
temp_f16 = func_802FB0E4(arg1);
temp_f16 = (-40.0f + temp_f16);
var_f14 = (temp_f16 + D_80381F68[var_s6]) - ((f32) framebuffer_width / 2);
temp_f16 = (((var_s4 * 15.5) + 78.0) - ((f32) framebuffer_height / 2));
var_f14 = (var_s4 & 1) ? var_f14 + 5.0f : var_f14 - 5.0f;
gSPVertex((*gfx)++, *vtx, 4, 0);
for(var_v1 = 0; var_v1 < 2; var_v1++){
for(var_v0 = 0; var_v0 < 2; var_v0++){
(*vtx)->v.ob[0] = ((((spD4 * D_80381F5C) * (f32) var_v0) - ((spD4 * D_80381F5C) / 2)) + var_f14) * 4.0f;
(*vtx)->v.ob[1] = ((((spD0 * D_80381F5C) / 2) - ((spD0 * D_80381F5C) * ((f32)var_v1))) + temp_f16) * 4.0f;
(*vtx)->v.ob[2] = -0x14;
(*vtx)->v.tc[0] = ((spD4 - 1) * var_v0) << 6;
(*vtx)->v.tc[1] = ((spD0 - 1) * var_v1) << 6;
(*vtx)++;
}
}
gSP1Quadrangle((*gfx)++, 0, 1, 3, 2, 0);
}
gDPPipeSync((*gfx)++);
gDPSetTextureLUT((*gfx)++, G_TT_NONE);
gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE);
func_8024C904(gfx, mtx);
}
}
bool func_80301CE0(f32 arg0, s32 arg1, s32 arg2){
if(arg1 == 5)
return TRUE;
return arg0 < D_80381F68[arg1 + 1];
}
s32 func_80301D24(s32 time) {
s32 minutes;
s32 var_v0;
var_v0 = (time != 0) ? 1 : 0;
minutes = (((s32) (6*time) / 60) / 60) + var_v0;
return MIN(6, minutes);
}
s32 func_80301DBC(s32 minutes) {
return (s32) (minutes * 60 * 60) / 6;
}
void fxairscore_update(enum item_e arg0, struct7s *arg1) {
s32 temp_s0;
s32 var_s0;
temp_s0 = func_802FB0D4(arg1);
if (D_80381F50 == 0) {
D_80381F60 = (f32) func_80301D24(itemPrint_getValue(arg0));
}
switch (temp_s0) {
case 2:
break;
case 1:
if (D_8036A960 == NULL) {
D_8036A960 = (BKSprite *)assetcache_get(ASSET_7E5_SPRITE_WATER_HONEYCOMB);
}
break;
case 0:
fxairscore_free(arg0, arg1);
break;
}
if (temp_s0 != 0) {
for(var_s0 = 5; var_s0 >= 0; var_s0--){
if (func_80301CE0(-15.0f, var_s0, 6)) {
D_80381F68[var_s0] *= 0.6;
}
}
}
}

View File

@@ -0,0 +1,17 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
struct7s D_803815A0;
/* .code */
struct7s *fxcommon1score_new(enum asset_e item_id){
return &D_803815A0;
}
void fxcommon1score_update(enum item_e item_id, struct8s *arg1){}
void fxcommon1score_draw(enum item_e item_id, struct8s *arg1, Gfx **arg2, Mtx **arg3, Vtx **arg4){}
void fxcommon1score_free(enum item_e item_id, struct8s *arg1){}

329
src/core2/fx/common2score.c Normal file
View File

@@ -0,0 +1,329 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 time_getDelta(void);
f32 func_802FB0DC(struct8s *);
f32 func_802FB0E4(struct8s *);
extern s32 framebuffer_width; //framebuffer_w
extern s32 framebuffer_height; //framebuffer_h
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(),
};
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
},
};
/* .code */
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)framebuffer_width/2) + arg0->unk38)) + tmp_f26) * 4.0f;
(*vtx)->v.ob[1] = ((((spA8*arg0->unk40/2 - spA8*arg0->unk40*tmp_s4) + (f32)framebuffer_height/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 *fxcommon2score_new(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 fxcommon2score_update(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) {
fxcommon2score_free(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 = 0.333f;
}
if(arg0 == 1){
if(arg1->unk60 > 10.0f)
phi_f16 = 0.333f;
}
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 fxcommon2score_draw(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 = itemscore_noteScores_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 fxcommon2score_free(enum item_e item_id, struct8s *arg1){
if(arg1->unk50){
func_8033BD4C(arg1->unk50); //assetCache_free
arg1->unk50 = NULL;
}
}
void func_802FDCB8(enum item_e item_id) {
s32 i;
struct8s *var_v0;
for(var_v0 = &D_80369960[0]; var_v0->unk20 != -1; var_v0++){
if(item_id == var_v0->unk20){
var_v0->unk28 &= ~4;
return;
}
}
}
enum item_e func_802FDD0C(struct8s *arg0){
return arg0->unk20;
}

232
src/core2/fx/common3score.c Normal file
View File

@@ -0,0 +1,232 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_8024DE1C(f32, f32, f32[3], f32[3]);
extern f32 func_802EC920(BKVertexList *);
extern void func_80253208(Gfx **gdl, s32 x, s32 y, s32 w, s32 h, void *color_buffer);
extern s16 D_803A5D00[2][0xF660];
extern f32 func_802FB0E4(struct8s*);
typedef struct {
u8 pad0[0x14];
s32 unk14;
u8 pad18[0x8];
s32 item_id; //item_id
s32 model_id; //model_id
s32 anim_id; //anim_id
f32 anim_duration; //anim_duration
f32 unk30;
f32 unk34;
f32 unk38;
f32 unk3C; //scale?
f32 unk40;
f32 unk44;
f32 unk48;
f32 unk4C;
f32 unk50;
f32 unk54;
BKModelBin *model;
char value_string[0xC];
f32 unk68;
f32 unk6C;
AnimCtrl *anim_ctrl;
}Struct_core2_79830_0;
Struct_core2_79830_0 D_8036A2B0[] = {
{ {0}, 0, {0},
ITEM_E_JIGGY, ASSET_35F_MODEL_JIGGY, 0, 0.0f,
136.0f, 236.0f, 0.0f, 0.375f,
28.0f, -10.0f, 300.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_18_GOLD_BULLIONS, ASSET_3C7_MODEL_GOLD_BULLION, 0, 0.0f,
224.0f, 226.0f, 10.0f, 0.3f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_19_ORANGE, ASSET_2D2_MODEL_ORANGE, 0, 0.0f,
224.0f, 226.0f, 25.0f, 0.4f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_1D_GRUMBLIE, ASSET_3F7_MODEL_GRUMBLIE, ASSET_12A_ANIM_GRUMBLIE_IDLE, 0.85f,
150.0f, -20.0f, 0.0f, 0.4275f,
200.0f, -10.0f, 100.0f, 10.0f,
-1.0f, 1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_1E_YUMBLIE, ASSET_3F6_MODEL_YUMBLIE, ASSET_127_ANIM_YUMBLIE_IDLE, 0.85f,
150.0f, -25.0f, 0.0f, 0.3825f,
200.0f, -10.0f, 100.0f, 10.0f,
-1.0f, 1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_1F_GREEN_PRESENT, ASSET_480_MODEL_XMAS_GIFT_GREEN, 0, 0.0f,
224.0f, 226.0f, 25.0f, 0.23f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_20_BLUE_PRESENT, ASSET_47F_MODEL_XMAS_GIFT_BLUE, 0, 0.0f,
224.0f, 226.0f, 12.0f, 0.21f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_21_RED_PRESENT, ASSET_481_MODEL_XMAS_GIFT_RED, 0, 0.0f,
224.0f, 226.0f, 43.0f, 0.2f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_22_CATERPILLAR, ASSET_485_MODEL_CATERPILLAR, ASSET_18E_ANIM_CATERPILLAR_IDLE, 1.0f,
224.0f, 226.0f, 12.0f, 0.28f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_23_ACORNS, ASSET_48E_MODEL_ACORN, ASSET_25B_ANIM_ACORN_IDLE, 1.0f,
224.0f, 226.0f, 38.0f, 0.4f,
32.0f, 0.0f, 100.0f, 20.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_24_TWINKLY_SCORE, ASSET_448_MODEL_TWINKLY_BLUE, ASSET_17C_ANIM_TWINKLY_IDLE, 1.0f,
134.0f, -32.0f, 0.0f, 0.325f,
24.0f, -18.0f, 100.0f, 30.0f,
-1.0f, 1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_26_JIGGY_TOTAL, ASSET_35F_MODEL_JIGGY, 0, 0.0f,
208.0f, 238.0f, 0.0f, 0.325f,
29.0f, -10.0f, 300.0f, 15.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
ITEM_2B_UNKNOWN, ASSET_35F_MODEL_JIGGY, 0, 0.0f,
208.0f, 238.0f, 0.0f, 0.325f,
29.0f, -10.0f, 300.0f, 15.0f,
-1.0f, -1.0f, NULL, {'\0'},
0.0f, 0.0f, NULL
},
{ {0}, 0, {0},
-1
}
};
/* .code */
void *fxcommon3score_new(enum item_e item_id){
Struct_core2_79830_0 *i_ptr;
for(i_ptr = &D_8036A2B0[0]; i_ptr->item_id != -1; i_ptr++){
if(i_ptr->item_id == item_id){
i_ptr->unk14 = i_ptr->unk50;
return i_ptr;
}
}
return NULL;
}
void fxcommon3score_update(enum item_e arg0, void *arg1) {
Struct_core2_79830_0 *a1 = (Struct_core2_79830_0 *)arg1;
f32 pad28;
f32 sp24;
f32 sp20;
sp24 = ((a1 - &D_8036A2B0[0]) & 1) ? -1.0f : 1.0f;
sp20 = time_getDelta();
switch (func_802FB0D4(a1)) {
case 1:
if (a1->model == NULL) {
a1->model = assetcache_get(a1->model_id);
}
if ((a1->anim_id != 0) && (a1->anim_ctrl == NULL)) {
a1->anim_ctrl = animctrl_new(0);
animctrl_reset(a1->anim_ctrl);
animctrl_setIndex(a1->anim_ctrl, (enum asset_e) a1->anim_id);
animctrl_setDuration(a1->anim_ctrl, a1->anim_duration);
func_802875AC(a1->anim_ctrl, "fxcommon3score.c", 0x74);
}
/* fallthrough */
case 2:
case 3:
a1->unk68 += sp24 * sp20 * a1->unk48;
if ( a1->anim_ctrl != NULL) {
animctrl_update( a1->anim_ctrl);
}
break;
case 0:
fxcommon3score_free(arg0, a1);
break;
}
}
void fxcommon3score_draw(enum item_e item_id, void *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Struct_core2_79830_0 *a1 = (Struct_core2_79830_0 *)arg1;
f32 sp68[3];
f32 sp5C[3];
f32 sp50[3];
f32 sp44[3];
f32 sp40;
f32 sp3C;
sp40 = func_802FB0E4(arg1)*a1->unk54 + a1->unk34;
if(a1->model != NULL && func_802FB0D4(arg1)){
a1->value_string[0] = '\0';
strIToA(a1->value_string, itemPrint_getValue(item_id));
print_bold_spaced(a1->unk30 + a1->unk40, sp40 + a1->unk44, a1->value_string);
sp3C = func_8024DE1C(a1->unk30, sp40, sp5C, sp68);
sp44[0] = 0.0f;
sp44[1] = a1->unk38;
sp44[2] = 0.0f;
sp50[0] = 0.0f;
sp50[1] = a1->unk68;
sp50[2] = 0.0f;
func_8033A308(sp50);
if(getGameMode() != GAME_MODE_4_PAUSED){
modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL);
}
sp68[0] += a1->unk4C;
if(a1->unk6C == 0.0f){
a1->unk6C = 1.1*(func_802EC920(func_8033A148(a1->model)) * a1->unk3C);
}
func_80253208(gfx, a1->unk30 - a1->unk6C, sp40 - a1->unk6C, 2*a1->unk6C, 2*a1->unk6C, D_803A5D00[func_8024BDA0()]);
if(a1->anim_ctrl != NULL){
func_8028781C(a1->anim_ctrl, sp5C, 1);
}
modelRender_draw(gfx, mtx, sp5C, sp68, a1->unk3C*sp3C, sp44, a1->model);
}//L80300BA4
}
void fxcommon3score_free(enum item_e item_id, void *arg1){
Struct_core2_79830_0 *a1 = (Struct_core2_79830_0 *)arg1;
if(a1->anim_ctrl != NULL){
animctrl_free(a1->anim_ctrl);
a1->anim_ctrl = NULL;
}
if(a1->model != NULL){
func_8033BD4C(a1->model);
a1->model = NULL;
a1->unk6C = 0.0f;
}
}

222
src/core2/fx/healthscore.c Normal file
View File

@@ -0,0 +1,222 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_802FB0E4(struct8s*);
extern s32 framebuffer_width;
extern s32 framebuffer_height;
/* .data */
BKSprite * D_8036A910 = NULL;
BKSprite * D_8036A914 = NULL;
Gfx D_8036A918[] = {
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_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPEndDisplayList(),
};
/* .bss */
s32 D_80381EF0;
f32 D_80381EF4;
f32 D_80381EF8;
f32 D_80381EFC;
s32 D_80381F00;
f32 D_80381F04;
f32 D_80381F08[8];
f32 D_80381F28;
f32 D_80381F2C;
struct7s D_80381F30;
/* .code */
void func_80300C10(void) {
s32 i;
D_80381EF8 = -272.0f;
D_80381EF4 = 1.0f;
D_80381EF0 = 0;
for(i = 0; i < 8; i++){
D_80381F08[i] = -64.0f;
}
}
void fxhealthscore_free(enum item_e item_id, struct8s *arg1){
s32 temp_a0;
s32 temp_a0_2;
if (D_8036A910 != 0) {
func_8033BD4C(D_8036A910);
D_8036A910 = 0;
}
if (D_8036A914 != 0) {
func_8033BD4C(D_8036A914);
D_8036A914 = 0;
}
func_80300C10();
}
struct7s *fxhealthscore_new(enum item_e item_id){
func_80300C10();
D_80381EFC = 0.68f;
return &D_80381F30;
}
void fxhealthscore_draw(enum item_e item_id, struct8s *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx){
int i;
int tmp_v1;
s32 spEC;
s32 spE8;
int tmp_v0;
f32 f18;
f32 f14;
f32 f20;
s32 spD4 = 0;
s32 s6;
if(D_8036A910 == NULL) return;
gSPDisplayList((*gfx)++, D_8036A918);
func_80347FC0(gfx, D_8036A910, 0, 0, 0, 0, 0, 2, 2, &spEC, &spE8);
func_8024C7B8(gfx, mtx);
//loop over each honeycomb piece
for(i = D_80381F00-1; i >= 0; i--){//L80300E40
if(i != 0 && (i + 1 != D_80381F00 || D_80381F00 & 1)
){
s6 = (i & 1) ? i + 1 : i - 1;
}
else{//L80300E84
s6 = i;
}
gDPPipeSync((*gfx)++);
if(D_80381F04 > i){
if((0 < D_80381F04 - 8.0f) && ((D_80381F04 - 8.0f) > i)){
if(!spD4){
func_80347FC0(gfx, D_8036A914, 0, 0, 0, 0, 0, 2, 2, &spEC, &spE8);
spD4 = TRUE;
}
}//L80300F38
gDPSetPrimColor((*gfx)++, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF);
}
else{//L80300F58
gDPSetPrimColor((*gfx)++, 0, 0, 0xFF, 0xFF, 0xFF, 0x78);
}
f20 = 96.0f - (f32)framebuffer_width/2 + (i*13);
f14 = (f32)framebuffer_height/2 - func_802FB0E4(arg1) - D_80381F08[s6] - -48.0f;
f14 = (i & 1) ? f14 + 5.75 : f14 - 5.75;
gSPVertex((*gfx)++, *vtx, 4, 0);
for(tmp_v1 = 0; tmp_v1 < 2; tmp_v1++){//L8030101C
for(tmp_v0 = 0; tmp_v0 < 2; tmp_v0++){//L80301030
(*vtx)->v.ob[0] = (((spEC * D_80381EFC)*tmp_v0 - (spEC * D_80381EFC)/2) + f20)*4.0f;
(*vtx)->v.ob[1] = (((spE8 * D_80381EFC)/2 - (spE8 * D_80381EFC)*tmp_v1) + f14) * 4.0f;
(*vtx)->v.ob[2] = -0x14;
(*vtx)->v.tc[0] = ((spEC - 1) *tmp_v0) << 6;
(*vtx)->v.tc[1] = ((spE8 - 1) *tmp_v1) << 6;
(*vtx)++;
}
}
gSP1Quadrangle((*gfx)++, 0, 1, 3, 2, 0);
}
gDPPipeSync((*gfx)++);
gDPSetTextureLUT((*gfx)++, G_TT_NONE);
gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE);
func_8024C904(gfx, mtx);
}
bool func_803012B8(f32 arg0, s32 arg1, s32 arg2){
if(arg1 == 0)
return TRUE;
return (arg0 < D_80381F08[arg1 - 1]);
}
void func_803012F8(void) {
D_80381EF0 = 1;
D_80381F28 = 0.0f;
func_803463D4(ITEM_14_HEALTH, 0);
D_80381F04 = (f32) item_getCount(ITEM_14_HEALTH);
}
void fxhealthscore_update(enum item_e item_id, struct8s *arg1) {
f32 temp_f20;
s32 var_s0;
s32 sp2C;
temp_f20 = time_getDelta();
sp2C = func_802FB0D4(arg1);
if (item_getCount(ITEM_15_HEALTH_TOTAL) >= 9) {
D_80381F00 = 8;
} else {
D_80381F00 = item_getCount(ITEM_15_HEALTH_TOTAL);
}
switch (D_80381EF0) {
case 0:
D_80381F04 = (f32) itemPrint_getValue(item_id);
break;
case 1:
D_80381F04 += temp_f20 * 10.0f;
if (D_80381F00 <= D_80381F04) {
D_80381F04 = D_80381F04 - D_80381F00;
}
D_80381F28 += temp_f20;
if (D_80381F28 > 2.5) {
D_80381EF0 = 2;
}
func_803463D4(ITEM_14_HEALTH, 0);
break;
case 2:
if (sp2C != 1) {
D_80381F04 += temp_f20 * 10.0f;
if (D_80381F00 <= D_80381F04) {
D_80381F04 = D_80381F04 - D_80381F00;
}
}
if (randf2(0.0f, 1.0f) < (1.0 / D_80381F00)) {
if (D_80381F04 < 1.0f) {
D_80381F04 =D_80381F04 + 1.0;
}
if (item_getCount(ITEM_14_HEALTH) < D_80381F04) {
func_8025A6EC(COMUSIC_2B_DING_B, 22000);
}
if (D_80381F04 < (f32) item_getCount(ITEM_14_HEALTH)) {
func_8025A6EC(COMUSIC_2C_BUZZER, 22000);
}
item_set(ITEM_14_HEALTH, (s32) D_80381F04);
D_80381EF0 = 0;
}
break;
}
switch (sp2C) {
case 2:
break;
case 1:
if (D_8036A910 == NULL) {
D_8036A910 = assetcache_get(ASSET_7DD_SPRITE_HEALTH);
}
if (D_8036A914 == NULL) {
D_8036A914 = assetcache_get(0x7EA);
}
break;
case 0:
fxhealthscore_free(item_id, arg1);
break;
}
if (sp2C) {
for(var_s0 = 0; var_s0 < D_80381F00; var_s0++){
if (func_803012B8(-15.0f, var_s0, D_80381F00)) {
D_80381F08[var_s0] = D_80381F08[var_s0] * 0.6;
}
}
}
}

View File

@@ -0,0 +1,253 @@
#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;
func_803463D4(ITEM_13_EMPTY_HONEYCOMB, -6);
timedFunc_set_2(0.25f, (GenMethod_2)func_8025A6EC, COMUSIC_2B_DING_B, 28000);
func_803463D4(ITEM_14_HEALTH, 0);
timedFunc_set_1(1.25f, (GenMethod_1)item_inc, ITEM_15_HEALTH_TOTAL);
timedFunc_set_1(1.25f, (GenMethod_1)func_8030E484, SFX_3EA_UNKNOWN);
timedFunc_set_2(1.25f, (GenMethod_2)item_set, ITEM_14_HEALTH, item_getCount(ITEM_15_HEALTH_TOTAL)+1);
timedFunc_set_1(1.5f, (GenMethod_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)
func_803463D4(ITEM_13_EMPTY_HONEYCOMB, 0);
break;
}
}

293
src/core2/fx/jinjoscore.c Normal file
View File

@@ -0,0 +1,293 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_802FB0E4(struct8s *);
/* .data */
u16 D_8036A070[0xD][0x10] = {
{0x0000, 0xF33D, 0x1085, 0xB167, 0xF439, 0x9963, 0xF233, 0x6117, 0xDA6F, 0xF2B7, 0xDC33, 0xFD3D, 0x38CF, 0xC9EB, 0x819F, 0xD32D},
{0x0000, 0xF2FD, 0x30CD, 0xC9EB, 0xF4BB, 0xA1A5, 0x8261, 0xF277, 0xDB31, 0xDCB3, 0xA267, 0x6319, 0xF379, 0xF231, 0xC26F, 0xDA2D},
{0x0000, 0xF2FB, 0x0847, 0xA163, 0xCB2F, 0x521F, 0xF479, 0xFFFF, 0xD1ED, 0x5115, 0xADEF, 0x7BA1, 0x3AA1, 0xF273, 0x6BF1, 0xD433},
{0x0000, 0xE22F, 0xB9A7, 0x108B, 0xF47B, 0xACEB, 0x4A61, 0xC739, 0xF2B9, 0x891F, 0x0263, 0x84AB, 0xCC31, 0xB2EB, 0x314D, 0x0915},
{0x0000, 0xDA2F, 0xB1A5, 0x088D, 0xD3F3, 0x8C65, 0xCF39, 0x1A63, 0x80DD, 0xF2B9, 0x5257, 0xFCBB, 0x38D7, 0xA5B5, 0x6BA9, 0xF273},
{0x0000, 0xE22F, 0xB1A7, 0x08CF, 0xE3B5, 0xBC6F, 0x6A61, 0xC6B7, 0xF2B9, 0x88DD, 0x09DF, 0x3AA7, 0x8C67, 0xF4BB, 0x5295, 0x40D5},
{0x0000, 0xE22F, 0xC1E9, 0x088D, 0xD3B1, 0xBDF1, 0x8C27, 0xF2B9, 0x9161, 0xF4B9, 0x6DB7, 0x099D, 0x4151, 0x436D, 0x6A23, 0x739D},
{0x0000, 0xF2B9, 0x5259, 0xAA29, 0x108D, 0xF439, 0x7BA5, 0xBDF1, 0xEA2F, 0x33AF, 0x9121, 0x963B, 0x119B, 0xCBEF, 0xBAF1, 0xD1EB},
{0x0000, 0xF275, 0x0849, 0xA165, 0xF479, 0x521B, 0xA52F, 0xCEF9, 0x19E1, 0xD9ED, 0x4BED, 0xC32F, 0x73A3, 0x2951, 0xF2FB, 0xDBF3},
{0x0000, 0xEA33, 0xA1A5, 0x1917, 0xB56D, 0x429D, 0xF2FB, 0xECB9, 0x0847, 0xCB6F, 0x22B1, 0x6159, 0x7CAD, 0xD1ED, 0x39D1, 0x73A3},
{0x0000, 0xF2FB, 0xB1A5, 0x4995, 0xCBAF, 0x9CE7, 0x1049, 0xD9EF, 0xC5F3, 0x095B, 0xF439, 0xA337, 0x4AE1, 0xA2E9, 0xF273, 0x64AD},
{0x0000, 0xF2B9, 0x6159, 0xC9EB, 0xCB2F, 0xF47B, 0xA9A5, 0xF273, 0x92E5, 0x20C9, 0xDBF1, 0xF2FD, 0x39CF, 0xE22F, 0x9961, 0xBAEB},
{0x0000, 0xF2BB, 0xC9EB, 0x6959, 0xC32D, 0xEA31, 0x314D, 0xF3FB, 0x5AD7, 0xA965, 0xF53B, 0xF277, 0x911F, 0xD431, 0xE2F3, 0xFB3F}
};
enum asset_e D_8036A210[5] = {0x7DF, 0x7DF, 0x7DF, 0x7DF, 0x7DF};
Gfx D_8036A228[] =
{
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),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPEndDisplayList(),
};
/* .bss */
u16 D_80381620[0xD][5][0x10];
BKSprite *D_80381E40[5];
f32 D_80381E54;
u8 D_80381E58[5];
f32 D_80381E60[5];
f32 D_80381E78[5];
struct7s D_80381E90;
/* .code */
struct7s *fxjinjoscore_new(enum item_e arg0){
s32 i;
s32 red;
s32 green;
s32 blue;
s32 alpha;
s32 tmp_green;
s32 tmp_alpha;
s32 j;
u16 rgba;
u32 jinjo_id;
D_80381E54 = 1.0f;
for (jinjo_id = 0; jinjo_id < 5; jinjo_id++)
{
D_80381E60[jinjo_id] = 0.0f;
D_80381E58[jinjo_id] = (item_getCount(ITEM_12_JINJOS) & (1 << jinjo_id)) ? (3) : (0);
for (i = 0; i < 0xD; i++)
{
for (j = 0; j < 0x10; j++)
{
rgba = D_8036A070[i][j];
tmp_alpha = (rgba >> 0) & 0x1;
red = (rgba >> 0xB) & 0x1F;
tmp_green = green = ((rgba >> 6) & 0x1F);
blue = (rgba >> 1) & 0x1F;
alpha = tmp_alpha;
if (((red < 0x10) || (green < 0x10)) || (blue < 0x10))
{
switch (jinjo_id)
{
case 0:
red = red * 0.25;
green = tmp_green * 1.5;
break;
case 1:
red = red * 0.2;
green = blue;
blue = blue * 0.2;
break;
case 2:
green = blue;
blue = tmp_green * 0.4;
green *= 0.6;
break;
case 3:
green = green;
blue = blue;
break;
case 4:
green = blue;
blue = tmp_green * 0.4;
alpha = tmp_alpha;
break;
}
}
D_80381620[i][jinjo_id][j] = (((red << 0xB) | (green << 6)) | (blue << 1)) | alpha;
}
}
}
return &D_80381E90;
}
void fxjinjoscore_free(enum item_e item_id, struct8s * arg1){
s32 i;
for(i = 0; i < 5; i++){
if(D_80381E40[i] != NULL){
func_8033BD4C(D_80381E40[i]);
D_80381E40[i] = NULL;
}
}
}
//fxjinjoscore_draw
void fxjinjoscore_draw(s32 arg0, struct8s *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
BKSprite *sprite; // s1
s32 draw_index; // s5
s32 texture_width; // sp11C
s32 texture_height; // sp118
s32 jinjo_id; // sp114
f32 center_y; // f14 (sp110)
f32 center_x; // f20 (sp10C)
f32 x_offset; // f26 (sp108)
f32 y_offset; // f28 (sp104)
f32 pos_x; // f30 (sp100)
s32 i; // v1 (spFC)
s32 j; // v0_2 (spF8)
gSPDisplayList((*gfx)++, D_8036A228);
func_8024C7B8(gfx, mtx);
pos_x = 44.0f;
// Draw all jinjo heads
for(jinjo_id = 0; jinjo_id < 5; jinjo_id++){
s32 jinjo_collected; // spF0 <----
sprite = D_80381E40[jinjo_id];
jinjo_collected = (D_80381E58[jinjo_id] != 0) ? 1 : 0;
if (sprite != NULL) {
func_80347FC0(gfx, sprite, (s32) D_80381E60[jinjo_id], 0, 0, 0, 0, 2, 2, &texture_width, &texture_height);
// Load the palette for the corresponding jinjo color
gDPLoadTLUT_pal16((*gfx)++, 0, D_80381620[(s32)D_80381E60[jinjo_id]][jinjo_id]);
x_offset = 0.0f;
y_offset = 0.0f;
// Draw the jinjo head, once if uncollected and twice if collected
// If the head is drawn twice then the first draw will be the drop shadow
for (draw_index = jinjo_collected; draw_index >= 0; draw_index--){
gDPPipeSync((*gfx)++);
// Draw 0 is the jinjo's head, anything else is a shadow
if (draw_index != 0) {
// Use only primitive color as the color input in order to make a solid color shadow
gDPSetCombineLERP((*gfx)++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
// Set up a translucent black for primitive color to draw the shadow
gDPSetPrimColor((*gfx)++, 0, 0, 0x00, 0x00, 0x00, 0x8C);
} else {
// Use the texture as the color input
gDPSetCombineLERP((*gfx)++, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0);
// If the jinjo is collected then it's drawn fully opaque, otherwise it's drawn with partial alpha
gDPSetPrimColor((*gfx)++, 0, 0, 0x00, 0x00, 0x00, jinjo_collected ? 0xFF : 0x6E);
}
center_x = pos_x - (f32) framebuffer_width / 2 + x_offset;
center_y = (f32) framebuffer_height / 2 + func_802FB0E4(arg1) - 266.0f + 40.0f + y_offset - D_80381E78[jinjo_id];
gSPVertex((*gfx)++, *vtx, 4, 0);
// Set up the positions of the four vertices
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++){
(*vtx)->v.ob[0] = ((texture_width * D_80381E54 * j) - (texture_width * D_80381E54 / 2) + center_x) * 4;
(*vtx)->v.ob[1] = ((texture_height * D_80381E54 / 2) - (texture_height * D_80381E54 * i) + center_y) * 4;
(*vtx)->v.ob[2] = -20;
(*vtx)->v.tc[0] = ((texture_width - 1) * j) << 6;
(*vtx)->v.tc[1] = ((texture_height - 1) * i) << 6;
(*vtx)++;
}
}
// Draw a quad made of the four vertices
gSP1Quadrangle((*gfx)++, 0, 1, 3, 2, 0);
x_offset += -2;
y_offset += 2;
}
}
// Move the next jinjo head over by 32 pixels
pos_x += 32.0f;
}
gDPPipeSync((*gfx)++);
gDPSetTextureLUT((*gfx)++, G_TT_NONE);
gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE);
func_8024C904(gfx, mtx);
}
bool func_802FFA10(f32 arg0, s32 arg1, s32 arg2){
if(arg1 == 0){
return TRUE;
}
return (D_80381E78[arg1 - 1] < arg0);
}
void fxjinjoscore_update(enum item_e item_id, struct8s *arg1) {
f32 var_f24;
s32 temp_s3;
s32 jinjo_id;
s32 sp78;
var_f24 = time_getDelta();
temp_s3 = func_802FB0D4(arg1);
sp78 = item_getCount(item_id);
switch(temp_s3){
case 1:
for(jinjo_id = 0; jinjo_id < 5; jinjo_id++){
if (D_80381E40[jinjo_id] == NULL) {
D_80381E40[jinjo_id] = assetcache_get(D_8036A210[jinjo_id]);
D_80381E78[jinjo_id] = 64.0f;
}
}
break;
case 0:
fxjinjoscore_free(item_id, arg1);
break;
default:
break;
}
if (temp_s3 != 0) {
for(jinjo_id = 0; jinjo_id < 5; jinjo_id++){
switch (D_80381E58[jinjo_id]) {
case 0:
if (((1 << jinjo_id) & sp78) && (temp_s3 == 2) && (D_80381E78[jinjo_id] < 1.0f)) {
D_80381E58[jinjo_id] = 2;
func_8030E560(SFX_3EE, 26000);
}
break;
case 2:
D_80381E60[jinjo_id] += var_f24 * 15.0;
if ((s32) D_80381E60[jinjo_id] >= 9) {
D_80381E60[jinjo_id] = 9.0f;
D_80381E58[jinjo_id] = 3;
}
break;
case 1:
if (0.95 < randf2(0.0f, 1.0f)) {
D_80381E58[jinjo_id] = 4;
}
break;
case 4:
D_80381E60[jinjo_id] += var_f24 * 30.0;
if ((s32) D_80381E60[jinjo_id] >= 12) {
D_80381E58[jinjo_id] = 3;
D_80381E60[jinjo_id] = 12.0f;
}
break;
case 3:
D_80381E60[jinjo_id] -= var_f24 * 30.0;
if ((s32) D_80381E60[jinjo_id] < 10) {
D_80381E60[jinjo_id] = 9.0f;
D_80381E58[jinjo_id] = 1;
}
break;
}
switch (temp_s3) { /* switch 1; irregular */
case 3: /* switch 1 */
break;
case 1: /* switch 1 */
case 2: /* switch 1 */
if (func_802FFA10(15.0f, jinjo_id, 5)) {
if (D_80381E78[jinjo_id] >= 1.0f) {
D_80381E78[jinjo_id] *= 0.6;
}
}
break;
}
}
}
}

157
src/core2/fx/lifescore.c Normal file
View File

@@ -0,0 +1,157 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_802FB0E4(struct8s*);
/* .code */
enum asset_e D_8036A260[] = {0x7E0, 0x7E1, 0x7E2, 0x7E3, 0x7E4};
Gfx D_8036A278[] =
{
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),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPEndDisplayList(),
};
/* .bss */
void *D_80381EB0[2];
f32 D_80381EB8;
f32 D_80381EBC;
s32 D_80381EC0;
s32 D_80381EC4;
char code_78E50_ItemValueString[8];
struct7s D_80381ED0;
/* .code */
s32 func_802FFDE0(s32 arg0){
return D_8036A260[arg0/4];
}
s32 func_802FFE04(void){
s32 v1;
v1 = (5 < itemPrint_getValue(ITEM_14_HEALTH)) ? 5 : itemPrint_getValue(ITEM_14_HEALTH);
return (5 - v1)*4;
}
struct7s *fxlifescore_new(s32 item_id){
s32 i;
D_80381EB8 = 1.0f;
D_80381EBC = (f32)func_802FFE04();
D_80381EC0 = func_802FFDE0((s32)D_80381EBC);
D_80381EC4 = 0;
for(i = 0; i < 2; i++){
D_80381EB0[i] = NULL;
}
return &D_80381ED0;
}
void fxlifescore_free(s32 item_id, struct8s *arg1){
s32 i;
for(i = 0; i < 2; i++){
if(D_80381EB0[i] != NULL){
func_8033BD4C(D_80381EB0[i]);
D_80381EB0[i] = NULL;
}
};
}
void fxlifescore_draw(enum item_e item_id, struct8s *arg1, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
s32 sp10C;
Vtx *sp108;
s32 sp104;
s32 var_v0;
s32 var_v1;
s32 var_s5;
s32 var_s4;
s32 spF0;
s32 spEC;
s32 spE8;
s32 spE4;
s32 spE0;
s32 spDC;
sp10C = -1;
sp108 = *vtx;
code_78E50_ItemValueString[0] = '\0';
strIToA(code_78E50_ItemValueString, MIN(9, itemPrint_getValue(item_id)));
print_bold_spaced(0x4E, (s32) (func_802FB0E4(arg1) + -16.0f + 4.0f), (char *) &code_78E50_ItemValueString);
if(1); //fake
if (D_80381EB0[D_80381EC4] != NULL) {
gSPDisplayList((*gfx)++, D_8036A278);
func_8024C7B8(gfx, mtx);
if(gfx);
gDPPipeSync((*gfx)++);
gDPSetCombineLERP((*gfx)++, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0);
gDPSetPrimColor((*gfx)++, 0, 0, 0x00, 0x00, 0x00, 0xFF);
do{
func_80348044(gfx, D_80381EB0[D_80381EC4], (s32) D_80381EBC % 4, 0, 0, 0, 0, 2, 2, &spF0, &spEC, &spE8, &spE4, &spE0, &spDC, &sp10C);
if (((*vtx - sp108) & 0xF) == 0) {
gSPVertex((*gfx)++, *vtx, MIN(0x10, (1 + sp10C) << 2), 0);
sp104 = 0;
} else {
sp104 = sp104 + 4;
}
var_s5 = (40.0f - ((f32) framebuffer_width / 2)) + spE0;
var_s4 = (((((f32) framebuffer_height / 2) - func_802FB0E4(arg1)) - -16.0f) - spDC);
for(var_v1 = 0; var_v1 < 2; var_v1++){
for(var_v0 = 0; var_v0 < 2; var_v0++){
(*vtx)->v.ob[0] = (s16) (s32) (((((f32) spF0 * D_80381EB8 * (f32) var_v0) - (((f32) spE8 * D_80381EB8) / 2)) + var_s5) * 4.0f);
(*vtx)->v.ob[1] = (s16) (s32) ((((((f32) spE4 * D_80381EB8) / 2) - ((f32) spEC * D_80381EB8 * var_v1)) + var_s4) * 4.0f);
(*vtx)->v.ob[2] = -0x14;
(*vtx)->v.tc[0] = ((spF0 - 1) * var_v0) << 6;
(*vtx)->v.tc[1] = ((spEC - 1) * var_v1) << 6;
(*vtx)++;
}
}
gSP1Quadrangle((*gfx)++, sp104, sp104 + 1, sp104 + 3, sp104 + 2, 0);
}while(sp10C != 0);
gDPPipeSync((*gfx)++);
gDPSetTextureLUT((*gfx)++, G_TT_NONE);
gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE);
func_8024C904(gfx, mtx);
}
}
void fxlifescore_update(enum item_e item_id, struct8s *arg1) {
s32 var_v0;
s32 sp20;
s32 sp1C;
s32 sp18;
sp20 = (s32) ((f32) func_802FFE04() - D_80381EBC);
switch (func_802FB0D4(arg1)) {
case 1:
if (D_80381EB0[D_80381EC4] == NULL) {
D_80381EB0[D_80381EC4] = assetcache_get(D_8036A260[(s32) D_80381EBC / 5]);
}
break;
case 0:
fxlifescore_free(item_id, arg1);
break;
case 2:
if (sp20 != 0) {
var_v0 = (sp20 >= 0) ? sp20 : -sp20;
D_80381EBC = D_80381EBC + (0.5 * (sp20 / var_v0));
}
sp18 = func_802FFDE0((s32)D_80381EBC);
if (sp18 != D_80381EC0) {
D_80381EC4 = NOT(D_80381EC4);
if (D_80381EB0[D_80381EC4] != 0) {
func_8033BD4C(D_80381EB0[D_80381EC4]);
}
D_80381EB0[D_80381EC4] = assetcache_get(sp18);
D_80381EC0 = sp18;
}
break;
}
}