233 lines
7.0 KiB
C
233 lines
7.0 KiB
C
#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){
|
|
set_model_render_mode(1);
|
|
}
|
|
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);
|
|
}
|
|
func_803391A4(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;
|
|
}
|
|
}
|