400 lines
11 KiB
C
400 lines
11 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
|
|
/* !!!!!!!!!!!!!!!!!!!!!!!!!!! BREAK??? !!!!!!!!!!!!!!!!!!!!!!!!!*/
|
|
|
|
void __overlay_mmm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_mmm_release(void);
|
|
void overlay_mmm_init(void);
|
|
void __overlay_mmm_update(void);
|
|
void func_803229C0(s32, s32);
|
|
|
|
void __overlay_cc_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_cc_release(void);
|
|
void overlay_cc_init(void);
|
|
void __overlay_cc_update(void);
|
|
void func_80322A78(s32, s32);
|
|
|
|
void __overlay_gv_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_gv_release(void);
|
|
void overlay_gv_init(void);
|
|
void __overlay_gv_update(void);
|
|
void func_80322B3C(s32, s32);
|
|
|
|
void __overlay_ttc_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_ttc_release(void);
|
|
void overlay_ttc_init(void);
|
|
void __overlay_ttc_update(void);
|
|
void func_80322BB8(s32, s32);
|
|
|
|
void __overlay_mm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_mm_release(void);
|
|
void overlay_mm_init(void);
|
|
void __overlay_mm_update(void);
|
|
void func_80322CE0(s32, s32);
|
|
|
|
void __overlay_bgs_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_bgs_release(void);
|
|
void overlay_bgs_init(void);
|
|
void __overlay_bgs_update(void);
|
|
void func_80322D94(s32, s32);
|
|
|
|
void __overlay_sm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_sm_release(void);
|
|
void overlay_sm_init(void);
|
|
void __overlay_sm_update(void);
|
|
void func_80322BEC(s32, s32);
|
|
|
|
void __overlay_lair_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_lair_release(void);
|
|
void overlay_lair_init(void);
|
|
void __overlay_lair_update(void);
|
|
void func_80322C78(s32, s32);
|
|
|
|
void __overlay_fight_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_fight_release(void);
|
|
void overlay_fight_init(void);
|
|
void __overlay_fight_update(void);
|
|
void func_80322CAC(s32, s32);
|
|
|
|
void __overlay_intro_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_intro_release(void);
|
|
void overlay_intro_init(void);
|
|
void __overlay_intro_update(void);
|
|
void func_80322D14(s32, s32);
|
|
|
|
void __overlay_fp_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void __overlay_fp_release(void);
|
|
void overlay_fp_init(void);
|
|
void __overlay_fp_update(void);
|
|
void func_80322E58(s32, s32);
|
|
|
|
typedef struct{
|
|
s16 level_id;
|
|
s16 overlay_id;
|
|
}level_overlay_map_elem;
|
|
|
|
typedef struct{
|
|
s16 overlay_id;
|
|
u8 unk2;
|
|
u8 unk3;
|
|
void (*init)(void);
|
|
void (*update)(void);
|
|
void (*release)(void);
|
|
void (*draw)(Gfx **, Mtx **, Vtx **);
|
|
void (*unk14)(s32, s32);
|
|
} level_overlay_update_struct;
|
|
|
|
/* .data */
|
|
level_overlay_map_elem D_8036E2C0[] = {
|
|
{LEVEL_3_CLANKERS_CAVERN, OVERLAY_2_WHALE},
|
|
{LEVEL_A_MAD_MONSTER_MANSION, OVERLAY_3_HAUNTED},
|
|
{LEVEL_7_GOBIS_VALLEY, OVERLAY_4_DESERT},
|
|
{LEVEL_2_TREASURE_TROVE_COVE, OVERLAY_5_BEACH},
|
|
{LEVEL_1_MUMBOS_MOUNTAIN, OVERLAY_6_JUNGLE},
|
|
{LEVEL_4_BUBBLEGLOOP_SWAMP, OVERLAY_7_SWAMP},
|
|
{LEVEL_9_RUSTY_BUCKET_BAY, OVERLAY_8_SHIP},
|
|
{LEVEL_5_FREEZEEZY_PEAK, OVERLAY_9_SNOW},
|
|
{LEVEL_8_CLICK_CLOCK_WOOD, OVERLAY_A_TREE},
|
|
{LEVEL_B_SPIRAL_MOUNTAIN, OVERLAY_B_TRAINING},
|
|
{LEVEL_D_CUTSCENE, OVERLAY_C_INTRO},
|
|
{LEVEL_6_LAIR, OVERLAY_D_WITCH},
|
|
{LEVEL_C_BOSS, OVERLAY_E_BATTLE},
|
|
{0}
|
|
};
|
|
|
|
level_overlay_update_struct D_8036E2F8[] = {
|
|
{ OVERLAY_2_WHALE, 1, 0, overlay_cc_init, __overlay_cc_update, __overlay_cc_release, __overlay_cc_draw, func_80322A78},
|
|
{ OVERLAY_3_HAUNTED, 1, 0, overlay_mmm_init, __overlay_mmm_update, __overlay_mmm_release, __overlay_mmm_draw, func_803229C0},
|
|
{ OVERLAY_4_DESERT, 1, 0, overlay_gv_init, __overlay_gv_update, __overlay_gv_release, __overlay_gv_draw, func_80322B3C},
|
|
{ OVERLAY_5_BEACH, 1, 0, overlay_ttc_init, __overlay_ttc_update, __overlay_ttc_release, __overlay_ttc_draw, func_80322BB8},
|
|
{ OVERLAY_6_JUNGLE, 1, 0, overlay_mm_init, __overlay_mm_update, __overlay_mm_release, __overlay_mm_draw, func_80322CE0},
|
|
{ OVERLAY_7_SWAMP, 1, 0, overlay_bgs_init, __overlay_bgs_update, __overlay_bgs_release, __overlay_bgs_draw, func_80322D94},
|
|
{ OVERLAY_B_TRAINING, 1, 0, overlay_sm_init, __overlay_sm_update, __overlay_sm_release, __overlay_sm_draw, func_80322BEC},
|
|
{ OVERLAY_C_INTRO, 1, 0, overlay_intro_init, __overlay_intro_update, __overlay_intro_release, __overlay_intro_draw, func_80322D14},
|
|
{ OVERLAY_D_WITCH, 1, 0, overlay_lair_init, __overlay_lair_update, __overlay_lair_release, __overlay_lair_draw, func_80322C78},
|
|
{ OVERLAY_E_BATTLE, 1, 0, overlay_fight_init, __overlay_fight_update, __overlay_fight_release, __overlay_fight_draw, func_80322CAC},
|
|
{ OVERLAY_9_SNOW, 0, 1, overlay_fp_init, __overlay_fp_update, __overlay_fp_release, __overlay_fp_draw, func_80322E58},
|
|
{0}
|
|
};
|
|
|
|
/* .bss */
|
|
struct {
|
|
u8 unk0;
|
|
u8 unk1;
|
|
u8 pad2[2];
|
|
void (*init)(void);
|
|
void (*update)(void);
|
|
void (*release)(void);
|
|
void (*draw)(Gfx **, Mtx **, Vtx **);
|
|
void (*unk14)(s32, s32);
|
|
} sOverlay;
|
|
|
|
/* .code */
|
|
void __overlay_mmm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_mmm_release(void){
|
|
func_8038953C();
|
|
MMM_func_80389CD8();
|
|
func_8038A994();
|
|
}
|
|
|
|
void overlay_mmm_init(void){
|
|
func_80389544();
|
|
func_80389CE0();
|
|
func_8038A9B4();
|
|
}
|
|
|
|
void __overlay_mmm_update(void){
|
|
func_8038966C();
|
|
organMinigame_update();
|
|
func_8038AA44();
|
|
}
|
|
|
|
void func_803229C0(s32 arg0, s32 arg1){
|
|
code3420_handleOrganGame(arg0, arg1);
|
|
}
|
|
|
|
void __overlay_cc_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
|
CC_func_80388760(gfx, mtx, vtx);
|
|
}
|
|
|
|
void __overlay_cc_release(void){
|
|
func_80388CB4();
|
|
func_803880D4();
|
|
}
|
|
|
|
void overlay_cc_init(void){
|
|
func_80388D54();
|
|
func_80388104();
|
|
}
|
|
|
|
void __overlay_cc_update(void){
|
|
CC_func_80388F4C();
|
|
func_8038817C();
|
|
}
|
|
|
|
void func_80322A78(s32 arg0, s32 arg1){ return; }
|
|
|
|
|
|
void __overlay_gv_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
|
|
void __overlay_gv_release(void){
|
|
func_8038FF60();
|
|
func_803900F8();
|
|
gv_matchingGame_reset(); //gv_matchingGame_reset
|
|
gv_waterCtrl_end();
|
|
}
|
|
|
|
void overlay_gv_init(void){
|
|
func_8038FF68();
|
|
func_80390100();
|
|
gv_matchingGame_init(); //gv_matchingGame_init
|
|
gv_waterCtrl_init();
|
|
}
|
|
|
|
void __overlay_gv_update(void){
|
|
func_8038FFF4();
|
|
func_80390138();
|
|
gv_matchingGame_update(); //gv_matchingGame_update
|
|
gv_waterCtrl_update();
|
|
}
|
|
|
|
void func_80322B3C(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_ttc_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_ttc_release(void){
|
|
code3E30_overlayRelease();
|
|
}
|
|
|
|
void overlay_ttc_init(void){
|
|
code3E30_overlayInit();
|
|
}
|
|
|
|
void __overlay_ttc_update(void){
|
|
code3E30_overlayUpdate();
|
|
}
|
|
|
|
void func_80322BB8(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_sm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_sm_release(void){ return; }
|
|
|
|
void overlay_sm_init(void){ return; }
|
|
|
|
void __overlay_sm_update(void){ return; }
|
|
|
|
void func_80322BEC(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_lair_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
|
lair_func_8038E768(gfx, mtx, vtx);
|
|
}
|
|
|
|
void __overlay_lair_release(void){
|
|
lair_func_8038CD48();
|
|
}
|
|
|
|
void overlay_lair_init(void){
|
|
lair_func_8038CF18();
|
|
}
|
|
|
|
void __overlay_lair_update(void){
|
|
lair_func_8038E0B0();
|
|
}
|
|
|
|
void func_80322C78(s32 arg0, s32 arg1){ return; }
|
|
|
|
|
|
void __overlay_fight_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_fight_release(void){ return; }
|
|
|
|
void overlay_fight_init(void){ return; }
|
|
|
|
void __overlay_fight_update(void){ return; }
|
|
|
|
void func_80322CAC(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_mm_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_mm_release(void){ return; }
|
|
|
|
void overlay_mm_init(void){ return; }
|
|
|
|
void __overlay_mm_update(void){ return; }
|
|
|
|
void func_80322CE0(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_intro_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_intro_release(void){ return; }
|
|
|
|
void overlay_intro_init(void){ return; }
|
|
|
|
void __overlay_intro_update(void){ return; }
|
|
|
|
void func_80322D14(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_bgs_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_bgs_release(void){ return; }
|
|
|
|
void overlay_bgs_init(void){
|
|
if( map_get() == MAP_10_BGS_MR_VILE
|
|
&& volatileFlag_get(VOLATILE_FLAG_2_FF_IN_MINIGAME)
|
|
&& volatileFlag_get(VOLATILE_FLAG_7_HAS_SEEN_VILE_FF_MINIGAME)
|
|
){
|
|
player_setTransformation(TRANSFORM_5_CROC);
|
|
}
|
|
}
|
|
|
|
void __overlay_bgs_update(void){ return; }
|
|
|
|
void func_80322D94(s32 arg0, s32 arg1){ return; }
|
|
|
|
void __overlay_fp_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ return; }
|
|
|
|
void __overlay_fp_release(void){
|
|
fp_sirslushgame_end();
|
|
fp_snowmanButtonGame_end();
|
|
func_8038B8A8();
|
|
func_8039195C();
|
|
}
|
|
|
|
void overlay_fp_init(void){
|
|
fp_sirslushgame_init();
|
|
fp_snowmanButtonGame_init();
|
|
func_8038B7A4();
|
|
func_803918C0();
|
|
}
|
|
|
|
void __overlay_fp_update(void){
|
|
fp_sirslushgame_update();
|
|
fp_snowmanButtonGame_update();
|
|
func_8038B544();
|
|
func_80391994();
|
|
}
|
|
|
|
void func_80322E58(s32 arg0, s32 arg1){ return; }
|
|
|
|
void func_80322E64(Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
|
if(sOverlay.draw)
|
|
sOverlay.draw(gfx, mtx, vtx);
|
|
}
|
|
|
|
enum overlay_e level_to_overlay(enum level_e lvl){
|
|
int i;
|
|
for(i = 0; D_8036E2C0[i].level_id; i++){
|
|
if(D_8036E2C0[i].level_id == lvl)
|
|
return D_8036E2C0[i].overlay_id;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void func_80322EDC(int arg0){
|
|
if(arg0 == sOverlay.unk1 && sOverlay.release){
|
|
sOverlay.release();
|
|
}
|
|
}
|
|
|
|
void func_80322F1C(int arg0){
|
|
if(arg0 == sOverlay.unk0 && sOverlay.init){
|
|
sOverlay.init();
|
|
}
|
|
}
|
|
|
|
void func_80322F5C(void){
|
|
func_80322EDC(0);
|
|
}
|
|
|
|
void func_80322F7C(void){
|
|
func_80322EDC(1);
|
|
}
|
|
|
|
void func_80322F9C(void){
|
|
func_80322F1C(0);
|
|
}
|
|
|
|
void func_80322FBC(void){
|
|
func_80322F1C(1);
|
|
}
|
|
|
|
void func_80322FDC(void){ return; }
|
|
|
|
void overlay_init(void){
|
|
int i;
|
|
s32 overlay_id;
|
|
func_80356714();
|
|
overlay_id = overlayManagergetLoadedId();
|
|
sOverlay.init = sOverlay.update = sOverlay.release = NULL;
|
|
sOverlay.draw = NULL;
|
|
sOverlay.unk14 = NULL;
|
|
for(i = 0; D_8036E2F8[i].overlay_id != 0; i++){
|
|
if(overlay_id == D_8036E2F8[i].overlay_id){
|
|
sOverlay.unk0 = D_8036E2F8[i].unk2;
|
|
sOverlay.unk1 = D_8036E2F8[i].unk3;
|
|
sOverlay.init = D_8036E2F8[i].init;
|
|
sOverlay.update = D_8036E2F8[i].update;
|
|
sOverlay.release = D_8036E2F8[i].release;
|
|
sOverlay.draw = D_8036E2F8[i].draw;
|
|
sOverlay.unk14 = D_8036E2F8[i].unk14;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_80323098(s32 arg0, s32 arg1){
|
|
if(sOverlay.unk14)
|
|
sOverlay.unk14(arg0, arg1);
|
|
}
|
|
|
|
void overlay_update(void){
|
|
if(sOverlay.update)
|
|
sOverlay.update();
|
|
}
|