500 lines
22 KiB
C
500 lines
22 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
#include <core1/viewport.h>
|
|
#include "gc/gctransition.h"
|
|
|
|
void animctrl_setAnimTimer(AnimCtrl*, f32);
|
|
void func_8025AC20(s32, s32, s32, f32, char*, s32);
|
|
f32 func_80257618(void);
|
|
|
|
typedef enum {
|
|
TRANSITION_ID_1_BLACK_IN = 1,
|
|
TRANSITION_ID_2_BLACK_OUT,
|
|
TRANSITION_ID_3_CIRCLE_IN,
|
|
TRANSITION_ID_4_CIRCLE_OUT,
|
|
TRANSITION_ID_5_JIGGY_IN,
|
|
TRANSITION_ID_6_JIGGY_OUT,
|
|
TRANSITION_ID_7,
|
|
TRANSITION_ID_8_WHITE_IN,
|
|
TRANSITION_ID_9_WHITE_OUT,
|
|
TRANSITION_ID_A_WITCH_HEAD_OUT,
|
|
TRANSITION_ID_B_CIRCLE_IN_FAST,
|
|
TRANSITION_ID_C_CIRCLE_OUT_FAST,
|
|
TRANSITION_ID_D,
|
|
TRANSITION_ID_E_CIRCLE_IN_SLOW,
|
|
TRANSITION_ID_F_CIRCLE_OUT_SLOW,
|
|
TRANSITION_ID_10_FALLING_PIECES_IN,
|
|
TRANSITION_ID_11_FALLING_PIECES_OUT,
|
|
TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW,
|
|
TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW,
|
|
TRANSITION_ID_14_CIRCLE_IN_SUPER_SLOW,
|
|
TRANSITION_ID_15_CIRCLE_OUT_SUPER_SLOW,
|
|
} TransitionId;
|
|
|
|
typedef enum {
|
|
TRANSITION_STATE_0_NONE,
|
|
TRANSITION_STATE_1_LOADING,
|
|
TRANSITION_STATE_2_BLACK_IN,
|
|
TRANSITION_STATE_3_BLACK_OUT,
|
|
TRANSITION_STATE_4_FADE_IN,
|
|
TRANSITION_STATE_5_FADE_OUT,
|
|
TRANSITION_STATE_6_LOADING_WHITE,
|
|
TRANSITION_STATE_7_WHITE_IN,
|
|
TRANSITION_STATE_8_WHITE_OUT
|
|
} TransitionState;
|
|
|
|
typedef struct {
|
|
u8 uid;
|
|
u8 state;
|
|
u8 next_state;
|
|
// u8 pad3[1];
|
|
f32 duration;
|
|
s32 model_index;
|
|
s32 anim_index;
|
|
f32 scale;
|
|
}TransitionInfo;
|
|
|
|
typedef struct {
|
|
u8 map_indx;
|
|
u8 in_index;
|
|
u8 out_index;
|
|
}MapTransitionInfo;
|
|
|
|
/* .data */
|
|
TransitionInfo D_8036C150[0x16]= {
|
|
{TRANSITION_ID_1_BLACK_IN, TRANSITION_STATE_2_BLACK_IN, TRANSITION_STATE_0_NONE, 0.1f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_2_BLACK_OUT, TRANSITION_STATE_3_BLACK_OUT, TRANSITION_STATE_1_LOADING, 0.1f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_3_CIRCLE_IN, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 0.5f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_4_CIRCLE_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 0.5f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_5_JIGGY_IN, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 2.5f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f},
|
|
{TRANSITION_ID_6_JIGGY_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 0.9f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f},
|
|
{TRANSITION_ID_7, TRANSITION_STATE_0_NONE, TRANSITION_STATE_0_NONE, 0.0f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_8_WHITE_IN, TRANSITION_STATE_7_WHITE_IN, TRANSITION_STATE_0_NONE, 1.1f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_9_WHITE_OUT, TRANSITION_STATE_8_WHITE_OUT, TRANSITION_STATE_6_LOADING_WHITE, 0.7f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_A_WITCH_HEAD_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 3.5f, ASSET_7D4_MODEL_TRANSITION_WITCH, 0, 3.7f},
|
|
{TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 0.3f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_C_CIRCLE_OUT_FAST, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 0.3f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_D, TRANSITION_STATE_2_BLACK_IN, TRANSITION_STATE_0_NONE, 0.6f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_E_CIRCLE_IN_SLOW, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_F_CIRCLE_OUT_SLOW, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_10_FALLING_PIECES_IN, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 2.5f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f},
|
|
{TRANSITION_ID_11_FALLING_PIECES_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 2.0f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f},
|
|
{TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 1.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 1.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_14_CIRCLE_IN_SUPER_SLOW, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 2.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_15_CIRCLE_OUT_SUPER_SLOW, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 2.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
0
|
|
};
|
|
|
|
TransitionInfo D_8036C308[0xC] = {
|
|
{TRANSITION_ID_A_WITCH_HEAD_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 3.5f, ASSET_7D4_MODEL_TRANSITION_WITCH, 0, 3.7f},
|
|
{TRANSITION_ID_10_FALLING_PIECES_IN, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 2.5f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f},
|
|
{TRANSITION_ID_11_FALLING_PIECES_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 2.0f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f},
|
|
{TRANSITION_ID_6_JIGGY_OUT, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 0.9f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f},
|
|
{TRANSITION_ID_5_JIGGY_IN, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 2.5f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f},
|
|
{TRANSITION_ID_9_WHITE_OUT, TRANSITION_STATE_8_WHITE_OUT, TRANSITION_STATE_6_LOADING_WHITE, 0.7f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_8_WHITE_IN, TRANSITION_STATE_7_WHITE_IN, TRANSITION_STATE_0_NONE, 0.7f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_E_CIRCLE_IN_SLOW, TRANSITION_STATE_4_FADE_IN, TRANSITION_STATE_0_NONE, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_F_CIRCLE_OUT_SLOW, TRANSITION_STATE_5_FADE_OUT, TRANSITION_STATE_1_LOADING, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f},
|
|
{TRANSITION_ID_7, TRANSITION_STATE_0_NONE, TRANSITION_STATE_0_NONE, 0.0f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_8_WHITE_IN, TRANSITION_STATE_7_WHITE_IN, TRANSITION_STATE_0_NONE, 1.1f, 0, 0, 0.0f},
|
|
{TRANSITION_ID_9_WHITE_OUT, TRANSITION_STATE_8_WHITE_OUT, TRANSITION_STATE_6_LOADING_WHITE, 1.5f, 0, 0, 0.0f}
|
|
};
|
|
|
|
MapTransitionInfo D_8036C3F8[0x18] = {
|
|
{MAP_20_CS_END_NOT_100, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_1F_CS_START_RAREWARE, TRANSITION_ID_15_CIRCLE_OUT_SUPER_SLOW, TRANSITION_ID_9_WHITE_OUT},
|
|
{MAP_1E_CS_START_NINTENDO, TRANSITION_ID_8_WHITE_IN, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_7D_CS_SPIRAL_MOUNTAIN_1, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_7E_CS_SPIRAL_MOUNTAIN_2, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_85_CS_SPIRAL_MOUNTAIN_3, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_86_CS_SPIRAL_MOUNTAIN_4, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_87_CS_SPIRAL_MOUNTAIN_5, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_88_CS_SPIRAL_MOUNTAIN_6, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_94_CS_INTRO_SPIRAL_7, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_95_CS_END_ALL_100, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_98_CS_END_SPIRAL_MOUNTAIN_1, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_A_WITCH_HEAD_OUT},
|
|
{MAP_99_CS_END_SPIRAL_MOUNTAIN_2, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_A_WITCH_HEAD_OUT},
|
|
{MAP_7B_CS_INTRO_GL_DINGPOT_1, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_81_CS_INTRO_GL_DINGPOT_2, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_82_CS_ENTERING_GL_MACHINE_ROOM, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_A_WITCH_HEAD_OUT},
|
|
{MAP_83_CS_GAME_OVER_MACHINE_ROOM, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_84_CS_UNUSED_MACHINE_ROOM, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_7C_CS_INTRO_BANJOS_HOUSE_1, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_C_CIRCLE_OUT_FAST},
|
|
{MAP_89_CS_INTRO_BANJOS_HOUSE_2, TRANSITION_ID_B_CIRCLE_IN_FAST, TRANSITION_ID_A_WITCH_HEAD_OUT},
|
|
{MAP_8A_CS_INTRO_BANJOS_HOUSE_3, TRANSITION_ID_1_BLACK_IN, TRANSITION_ID_2_BLACK_OUT},
|
|
{MAP_96_CS_END_BEACH_1, TRANSITION_ID_12_CIRCLE_IN_EXTRA_SLOW, TRANSITION_ID_13_CIRCLE_OUT_EXTRA_SLOW},
|
|
{MAP_97_CS_END_BEACH_2, TRANSITION_ID_8_WHITE_IN, TRANSITION_ID_14_CIRCLE_IN_SUPER_SLOW},
|
|
{0, TRANSITION_ID_5_JIGGY_IN, TRANSITION_ID_6_JIGGY_OUT}
|
|
};
|
|
f32 D_8036C440 = 63.6026115f;
|
|
f32 D_8036C444 = 500.0f;
|
|
|
|
|
|
/* .bss */
|
|
struct{
|
|
s32 unk0; //times drawn?
|
|
TransitionInfo *transistion_info;
|
|
u8 state;
|
|
//u8 pad9[3]; //not needed
|
|
void * model_ptr; //asset_ptr
|
|
f32 rotation;
|
|
f32 timer;
|
|
AnimCtrl *animctrl;
|
|
s32 substate; //times update called?
|
|
} s_current_transition;
|
|
|
|
/* .code */
|
|
TransitionInfo *_gctranstion_8030B400(s32 arg0){
|
|
TransitionInfo * i;
|
|
for(i = D_8036C150; i->uid != 0; i++){
|
|
if(i->uid == arg0)
|
|
return i;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
MapTransitionInfo *_gctranstion_get_map_transition_info(s32 map_indx){
|
|
MapTransitionInfo * i;
|
|
for(i = D_8036C3F8; i->map_indx != 0; i++){
|
|
if(i->map_indx == map_indx)
|
|
return i;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
void _gctranstion_changeState(s32 state, TransitionInfo *desc){
|
|
if(s_current_transition.model_ptr != NULL){
|
|
func_8033BD20(&s_current_transition.model_ptr);
|
|
}
|
|
|
|
if(s_current_transition.animctrl != NULL){
|
|
animctrl_free(s_current_transition.animctrl);
|
|
s_current_transition.animctrl = NULL;
|
|
}
|
|
|
|
s_current_transition.unk0 = 0;
|
|
s_current_transition.transistion_info = desc;
|
|
s_current_transition.state = state;
|
|
s_current_transition.timer = 0.0f;
|
|
|
|
//Loading screen model??
|
|
if(state == TRANSITION_STATE_1_LOADING)
|
|
s_current_transition.model_ptr = assetcache_get(0x7D2); //scene transition black
|
|
else if(state == TRANSITION_STATE_6_LOADING_WHITE)
|
|
s_current_transition.model_ptr = assetcache_get(0x7D3); //scene transition white
|
|
else if(desc != NULL && desc->model_index != 0)
|
|
s_current_transition.model_ptr = assetcache_get(desc->model_index);
|
|
|
|
//load transistion animation
|
|
if(desc != NULL && desc->anim_index != NULL){
|
|
s_current_transition.animctrl = animctrl_new(0);
|
|
animctrl_reset(s_current_transition.animctrl);
|
|
animctrl_setIndex(s_current_transition.animctrl, desc->anim_index);
|
|
animctrl_setDuration(s_current_transition.animctrl, desc->duration);
|
|
animctrl_setPlaybackType(s_current_transition.animctrl, ANIMCTRL_ONCE);
|
|
if(state == TRANSITION_STATE_5_FADE_OUT){
|
|
animctrl_setDirection(s_current_transition.animctrl, 0);
|
|
func_8028F7C8(1); //player_noControl(true)
|
|
func_80335110(0); //objects_update(false)
|
|
}
|
|
else{
|
|
osViBlack(1);
|
|
animctrl_setAnimTimer(s_current_transition.animctrl, 0.25f); //set animation timer
|
|
}
|
|
animctrl_start(s_current_transition.animctrl, "gctransition.c", 0x125);
|
|
}
|
|
|
|
if(state == TRANSITION_STATE_4_FADE_IN){
|
|
if(func_802D4608()==0){
|
|
func_8025A70C(COMUSIC_4E_IN_TRANSITION);
|
|
func_8025AC20(COMUSIC_4E_IN_TRANSITION, 0, 1000, 0.4f, "gctransition.c", 0x12d);
|
|
func_8025AABC(COMUSIC_4E_IN_TRANSITION);
|
|
}
|
|
}//L8030B67C
|
|
else if(state == TRANSITION_STATE_5_FADE_OUT){
|
|
if(s_current_transition.transistion_info->uid == 0xA){
|
|
func_8030E704(SFX_EB_GRUNTY_LAUGH_2);
|
|
}
|
|
else{
|
|
if(func_802D4608() == 0){
|
|
func_8025A70C(COMUSIC_4F_OUT_TRANSITION);
|
|
func_8025AC20(COMUSIC_4F_OUT_TRANSITION, 0, 1000, 0.2f, "gctransition.c", 0x13a);
|
|
func_8025AABC(COMUSIC_4F_OUT_TRANSITION);
|
|
}
|
|
}
|
|
}
|
|
else if(state == TRANSITION_STATE_0_NONE){
|
|
func_80335128(1);
|
|
func_80335110(1);
|
|
if(func_8028F070())
|
|
func_8028F7C8(0);
|
|
}
|
|
s_current_transition.substate = 0;
|
|
}
|
|
|
|
void gctransition_defrag(void){
|
|
if(s_current_transition.model_ptr != NULL)
|
|
s_current_transition.model_ptr = defrag_asset(s_current_transition.model_ptr);
|
|
}
|
|
|
|
void gctransition_draw(Gfx **gdl, Mtx **mptr, Vtx **vptr){
|
|
f32 vp_position[3];
|
|
f32 vp_rotation[3];
|
|
f32 percentage;
|
|
f32 sp58[3];
|
|
f32 scale;
|
|
|
|
s_current_transition.unk0++;
|
|
if(s_current_transition.state == 0)
|
|
return;
|
|
|
|
viewport_backupState();
|
|
if(s_current_transition.animctrl != NULL){
|
|
vp_position[0] = 0.0f;
|
|
vp_position[1] = 0.0f;
|
|
vp_position[2] = 350.0f;
|
|
}else{
|
|
vp_position[0] = 0.0f;
|
|
vp_position[1] = 0.0f;
|
|
vp_position[2] = 300.0f;
|
|
}
|
|
|
|
vp_rotation[0] = 0.0f;
|
|
vp_rotation[1] = 0.0f;
|
|
vp_rotation[2] = 0.0f;
|
|
viewport_setNearAndFar(D_8036C440, D_8036C444);
|
|
viewport_setPosition_vec3f(vp_position); //viewport_getPosition_vec3f
|
|
viewport_setRotation_vec3f(vp_rotation); //viewport_getRotation_vec3f
|
|
viewport_update(); //camera_updateNormal
|
|
viewport_setRenderViewportAndPerspectiveMatrix(gdl, mptr);
|
|
|
|
|
|
sp58[0] = 0.0f;
|
|
sp58[1] = 0.0f;
|
|
sp58[2] = 0.0f;
|
|
if(s_current_transition.animctrl != NULL){
|
|
gDPSetTextureFilter((*gdl)++, G_TF_POINT);
|
|
gDPSetColorDither((*gdl)++, G_CD_DISABLE);
|
|
animctrl_drawSetup(s_current_transition.animctrl, sp58, 1);
|
|
modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL);
|
|
}
|
|
|
|
//complex animation (from animation bin file)
|
|
if(s_current_transition.state == 1 || s_current_transition.state == 6){
|
|
modelRender_draw(gdl, mptr, sp58, vp_rotation, 1.0f, 0, s_current_transition.model_ptr);
|
|
if(s_current_transition.animctrl != NULL){
|
|
gDPSetTextureFilter((*gdl)++, G_TF_BILERP);
|
|
gDPSetColorDither((*gdl)++, G_CD_MAGICSQ);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
percentage = s_current_transition.timer/(s_current_transition.transistion_info->duration);
|
|
if(s_current_transition.state == TRANSITION_STATE_4_FADE_IN){
|
|
//rotate and zoom in
|
|
if(s_current_transition.transistion_info->uid == 0x10){
|
|
scale = s_current_transition.transistion_info->scale;
|
|
|
|
}
|
|
else{
|
|
vp_rotation[2] = s_current_transition.rotation - 90.0f*percentage;
|
|
scale = percentage*s_current_transition.transistion_info->scale + 0.1;
|
|
}
|
|
modelRender_draw(gdl, mptr, sp58, vp_rotation, scale, 0, s_current_transition.model_ptr);
|
|
}
|
|
else if(s_current_transition.state == TRANSITION_STATE_5_FADE_OUT){//L8030B9EC
|
|
switch (s_current_transition.transistion_info->uid)
|
|
{
|
|
default:
|
|
//rotate and zoom out
|
|
vp_rotation[2] = s_current_transition.rotation - 90.0f*percentage;
|
|
scale = (1.0f - percentage)*s_current_transition.transistion_info->scale + 0.1;
|
|
break;
|
|
case 0x11:
|
|
//static
|
|
scale = s_current_transition.transistion_info->scale;
|
|
break;
|
|
case 0xA:
|
|
//zoom out only
|
|
vp_rotation[2] = 0.0f;
|
|
scale = (1.0f - func_80257618())*s_current_transition.transistion_info->scale + 0.1;
|
|
break;
|
|
}
|
|
if(!(s_current_transition.substate < 3) || s_current_transition.transistion_info->uid != 0x11){
|
|
modelRender_draw(gdl, mptr, sp58, vp_rotation, scale, 0, s_current_transition.model_ptr);
|
|
}
|
|
else{
|
|
modelRender_reset();
|
|
}
|
|
|
|
}
|
|
else if(s_current_transition.state == TRANSITION_STATE_2_BLACK_IN){//L8030BAF4
|
|
//fade in black (i.e. get less black)
|
|
gcbound_reset();
|
|
gcbound_alpha((1.0f - percentage)*255.0f + 0.5);
|
|
gcbound_color(0,0,0);
|
|
gcbound_draw(gdl);
|
|
}
|
|
else if(s_current_transition.state == TRANSITION_STATE_3_BLACK_OUT){//L8030BB6C
|
|
//fade out black (i.e. get more black)
|
|
gcbound_reset();
|
|
gcbound_alpha(percentage*255.0f + 0.5);
|
|
gcbound_color(0,0,0);
|
|
gcbound_draw(gdl);
|
|
}
|
|
else if(s_current_transition.state == TRANSITION_STATE_7_WHITE_IN){//L8030BBD8
|
|
//fade in white (i.e. get less white)
|
|
percentage = (percentage <= 0.5)? 1.0 : 1.0 - (percentage-0.5)/0.5;
|
|
gcbound_reset();
|
|
gcbound_alpha(percentage*255.0f + 0.5);
|
|
gcbound_color(0xff,0xff,0xff);
|
|
gcbound_draw(gdl);
|
|
}
|
|
else if(s_current_transition.state == TRANSITION_STATE_8_WHITE_OUT){//L8030BC8C
|
|
//fade out white (i.e. get more white)
|
|
gcbound_reset();
|
|
gcbound_alpha(percentage*255.0f + 0.5);
|
|
gcbound_color(0xff,0xff,0xff);
|
|
gcbound_draw(gdl);
|
|
}//L8030BD00
|
|
else{
|
|
|
|
}
|
|
if(s_current_transition.animctrl != NULL){
|
|
gDPSetTextureFilter((*gdl)++, G_TF_BILERP);
|
|
}
|
|
viewport_restoreState();
|
|
viewport_setRenderViewportAndPerspectiveMatrix(gdl, mptr);
|
|
|
|
}
|
|
|
|
void gctransition_8030BD4C(void){
|
|
MapTransitionInfo *tmp_10s;
|
|
TransitionInfo *tmp_a1;
|
|
tmp_10s = _gctranstion_get_map_transition_info(map_get());
|
|
tmp_a1 = _gctranstion_8030B400(tmp_10s->in_index);
|
|
_gctranstion_changeState(tmp_a1->state, tmp_a1);
|
|
}
|
|
|
|
f32 gctransition_8030BD88(void){
|
|
return 300.0f;
|
|
}
|
|
|
|
int gctransition_done(void){
|
|
return s_current_transition.state == TRANSITION_STATE_0_NONE;
|
|
}
|
|
|
|
int gctransition_active(void){
|
|
return s_current_transition.state != TRANSITION_STATE_0_NONE;
|
|
}
|
|
|
|
int gctransition_8030BDC0(void){
|
|
return ( s_current_transition.state == TRANSITION_STATE_3_BLACK_OUT)
|
|
|| (( s_current_transition.state == TRANSITION_STATE_1_LOADING) && (s_current_transition.unk0 < 2))
|
|
|| ( s_current_transition.state == TRANSITION_STATE_5_FADE_OUT)
|
|
|| ( s_current_transition.state == TRANSITION_STATE_8_WHITE_OUT)
|
|
|| (( s_current_transition.state == TRANSITION_STATE_6_LOADING_WHITE) && (s_current_transition.unk0 < 2));
|
|
}
|
|
|
|
void gctransition_8030BE3C(void){
|
|
_gctranstion_changeState(0, NULL);
|
|
}
|
|
|
|
void gctransition_8030BE60(void){
|
|
TransitionInfo *tmp_a1;
|
|
tmp_a1 = _gctranstion_8030B400(_gctranstion_get_map_transition_info(map_get())->out_index);
|
|
func_8030C180();
|
|
_gctranstion_changeState(tmp_a1->state, tmp_a1);
|
|
}
|
|
|
|
void gctransition_8030BEA4(s32 arg0){
|
|
_gctranstion_changeState(D_8036C308[arg0].state, &D_8036C308[arg0]);
|
|
}
|
|
|
|
void gctransition_reset(void){
|
|
s_current_transition.transistion_info = NULL;
|
|
s_current_transition.state = TRANSITION_STATE_0_NONE;
|
|
s_current_transition.model_ptr = NULL;
|
|
s_current_transition.rotation = 0.0f;
|
|
_gctranstion_changeState(0,0);
|
|
}
|
|
|
|
void gctransition_update(void){
|
|
f32 dt;
|
|
f32 tmp;
|
|
|
|
|
|
dt = time_getDelta();
|
|
if(s_current_transition.transistion_info == NULL)
|
|
return;
|
|
|
|
if(s_current_transition.animctrl != NULL){
|
|
animctrl_update(s_current_transition.animctrl);
|
|
if(s_current_transition.state == TRANSITION_STATE_4_FADE_IN){
|
|
switch(s_current_transition.substate){
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
func_8028F7C8(1);
|
|
func_80335110(0);
|
|
break;
|
|
case 2:
|
|
func_80335128(0);
|
|
break;
|
|
case 3:
|
|
func_802FEF48(s_current_transition.model_ptr); //framebuffer to model texture list
|
|
break;
|
|
case 4:
|
|
osViBlack(0);
|
|
break;
|
|
default:
|
|
s_current_transition.timer += dt;
|
|
break;
|
|
}
|
|
}
|
|
else{//L8030BFEC
|
|
switch(s_current_transition.substate){
|
|
default:
|
|
s_current_transition.timer += dt;
|
|
break;
|
|
case 0:
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
func_80335128(0);
|
|
func_802FEF48(s_current_transition.model_ptr); //framebuffer to model texture list
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
else{//L8030C034
|
|
s_current_transition.timer += dt;
|
|
}
|
|
if(s_current_transition.transistion_info->duration < s_current_transition.timer
|
|
|| (s_current_transition.animctrl!= NULL && animctrl_isStopped(s_current_transition.animctrl))
|
|
){
|
|
s_current_transition.timer = s_current_transition.transistion_info->duration;
|
|
//update next transition rotation
|
|
if(s_current_transition.state == TRANSITION_STATE_4_FADE_IN || s_current_transition.state == TRANSITION_STATE_5_FADE_OUT){
|
|
s_current_transition.rotation -= 90.0f;
|
|
if (s_current_transition.rotation < -360.0f)
|
|
s_current_transition.rotation += 360.0f;
|
|
if (360.0f < s_current_transition.rotation)
|
|
s_current_transition.rotation -= 360.0f;
|
|
}//L8030C104
|
|
_gctranstion_changeState(s_current_transition.transistion_info->next_state, 0);
|
|
if(s_current_transition.state == TRANSITION_STATE_4_FADE_IN)
|
|
func_8030C180();
|
|
|
|
if(s_current_transition.animctrl != NULL)
|
|
func_80334ECC();
|
|
}
|
|
s_current_transition.substate++;
|
|
}
|