324 lines
7.5 KiB
C
324 lines
7.5 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
#include "core2/ba/timer.h"
|
|
|
|
void func_80291488(s32 arg0);
|
|
void func_802914CC(s32 arg0);
|
|
|
|
/* .bss */
|
|
u8 D_8037C060;
|
|
u8 D_8037C061;
|
|
u8 D_8037C062;
|
|
s32 D_8037C064;
|
|
s32 D_8037C068;
|
|
s32 D_8037C06C;
|
|
s32 D_8037C070;
|
|
s32 D_8037C074;
|
|
s32 D_8037C078;
|
|
s32 D_8037C07C;
|
|
s32 D_8037C080;
|
|
s32 D_8037C084;
|
|
|
|
/* .code */
|
|
void func_80290B60(s32 arg0){
|
|
D_8037C061 = arg0;
|
|
}
|
|
|
|
void func_80290B6C(void){
|
|
func_802BC5CC();
|
|
func_80290220();
|
|
D_8037C060 = 0;
|
|
D_8037C062 = 0;
|
|
func_80291488(2);
|
|
func_80290B60(2);
|
|
batimer_set(7, 0.5f);
|
|
}
|
|
|
|
void func_80290BC0(s32 arg0){
|
|
func_802BC538(arg0,
|
|
&D_8037C064,&D_8037C068,&D_8037C06C,
|
|
&D_8037C070,&D_8037C074,&D_8037C078,
|
|
&D_8037C07C,&D_8037C080,&D_8037C084
|
|
);
|
|
|
|
if(D_8037C061 == 3 && D_8037C07C == 0){
|
|
func_80290B60(2);
|
|
}
|
|
switch (D_8037C061)
|
|
{
|
|
case 1://L80290C8C
|
|
func_802BD8A4(D_8037C064, D_8037C068, D_8037C06C);
|
|
break;
|
|
case 2: //L80290CC8
|
|
func_802BD8A4(D_8037C070, D_8037C074, D_8037C078);
|
|
break;
|
|
case 3://L80290D04
|
|
func_802BD8A4(D_8037C07C, D_8037C080, D_8037C084);
|
|
break;
|
|
}
|
|
}
|
|
|
|
int func_80290D48(void){
|
|
int camera_node_index;
|
|
s32 sp28;
|
|
s32 sp24;
|
|
s32 sp20;
|
|
s32 sp1C;
|
|
|
|
|
|
camera_node_index = func_802903CC();
|
|
if(camera_node_index == -1 || !ncCameraNodeList_nodeIsValid(camera_node_index)){
|
|
func_80290BC0(0);
|
|
return FALSE;
|
|
}
|
|
|
|
sp1C = bs_getState();
|
|
switch(ncCameraNodeList_getNodeType(camera_node_index)){
|
|
case 4:
|
|
sp28 = ncCameraNodeList_getCameraNodeType4(camera_node_index);
|
|
sp24 = code33250_func_802BA234(sp28);
|
|
func_80290BC0(sp24);
|
|
return FALSE;
|
|
case 3: //L80290DD8
|
|
if(bsBeeFly_inSet(sp1C) && !code33310_func_802BA4D0(ncCameraNodeList_getCameraNodeType3(camera_node_index))){
|
|
return FALSE;
|
|
}
|
|
ncDynamicCamera_setState(0x11);
|
|
func_802BF798(camera_node_index);
|
|
func_80291488(0x9);
|
|
return TRUE;
|
|
case 1://L80290E28
|
|
if(bsBeeFly_inSet(sp1C) && !code336F0_func_802BA89C(ncCameraNodeList_getCameraNodeType1(camera_node_index))){
|
|
return FALSE;
|
|
}
|
|
ncDynamicCamera_setState(0x8);
|
|
ncDynamicCam8_func_802BF9B8(camera_node_index);
|
|
func_80291488(0x9);
|
|
return TRUE;
|
|
default://L80290E7C
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
int func_80290E8C(void){
|
|
if(player_getWaterState() != BSWATERGROUP_2_UNDERWATER)
|
|
return FALSE;
|
|
|
|
ncDynamicCamera_setState(3);
|
|
func_80291488(0xB);
|
|
if( map_get() == MAP_B_CC_CLANKERS_CAVERN
|
|
&& player_getYPosition() < 1201.0f
|
|
){
|
|
func_802C1B20(1100.0f);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void func_80290F14(void){
|
|
if( !func_80298850()
|
|
&& player_movementGroup() != BSGROUP_4_LOOK
|
|
&& batimer_get(7) == 0.0f
|
|
&& bainput_should_zoom_out_camera()
|
|
){
|
|
switch(D_8037C061){
|
|
case 1://L80290FA4
|
|
basfx_80299D2C(SFX_12E_CAMERA_ZOOM_MEDIUM, 1.0f, 12000);
|
|
func_80290B60(2);
|
|
break;
|
|
case 2://L80290FBC
|
|
if(D_8037C07C){
|
|
basfx_80299D2C(SFX_12E_CAMERA_ZOOM_MEDIUM, 1.2f, 12000);
|
|
func_80290B60(3);
|
|
}
|
|
else{
|
|
basfx_80299D2C(SFX_12D_CAMERA_ZOOM_CLOSEST, 1.0f, 12000);
|
|
func_80290B60(1);
|
|
}
|
|
break;
|
|
case 3://L80291008
|
|
basfx_80299D2C(SFX_12D_CAMERA_ZOOM_CLOSEST, 1.0f, 12000);
|
|
func_80290B60(1);
|
|
break;
|
|
}
|
|
batimer_set(0x7, 0.4f);
|
|
}
|
|
}
|
|
|
|
void func_8029103C(void){
|
|
basfx_debug();
|
|
}
|
|
|
|
int func_8029105C(s32 arg0){
|
|
if(func_80298850())
|
|
return FALSE;
|
|
|
|
if(bainput_should_rotate_camera_left() && ncDynamicCamA_func_802C1DB0(-45.0f)){
|
|
func_80291488(arg0);
|
|
func_8029103C();
|
|
return TRUE;
|
|
}
|
|
|
|
if(bainput_should_rotate_camera_right() && ncDynamicCamA_func_802C1DB0(45.0f)){
|
|
func_80291488(arg0);
|
|
func_8029103C();
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//_camera_mode_1_update
|
|
void func_80291108(void){
|
|
if(!func_80290D48() && ncDynamicCamera_getState() == 0x10){
|
|
func_80290F14();
|
|
func_8029105C(8);
|
|
}
|
|
}
|
|
|
|
//_camera_mode_2_3_b_update
|
|
void func_80291154(void){
|
|
int tmp;
|
|
if(!func_80290D48() && !func_80290E8C()){
|
|
if(bakey_held(BUTTON_R)){
|
|
ncDynamicCamera_setState(0x13);
|
|
func_80291488(0x4);
|
|
func_80290F14();
|
|
}
|
|
else{
|
|
tmp = func_8029105C(7);
|
|
func_80290F14();
|
|
if(!tmp)
|
|
ncDynamicCamera_setState(0xB);
|
|
}
|
|
}
|
|
}
|
|
|
|
//_camera_mode_4 and_c_update
|
|
void func_802911E0(void){
|
|
if( !func_80290D48() && !func_80290E8C() && !func_8029105C(7)){
|
|
func_80290F14();
|
|
if(bakey_held(BUTTON_R)){
|
|
func_802C095C();
|
|
}
|
|
else{
|
|
if(func_802C0640())
|
|
func_80291488(2);
|
|
}
|
|
}
|
|
}
|
|
|
|
//_camera_mode_7_update
|
|
void func_80291268(void){
|
|
if( !func_80290D48() && !func_80290E8C()){
|
|
func_80290F14();
|
|
if(!func_8029105C(7) && ncDynamicCamA_func_802C1EE0()){
|
|
func_80291488(2);
|
|
}
|
|
}
|
|
}
|
|
|
|
//_camera_mode_8_update
|
|
void func_802912D0(void){
|
|
if(!func_80290D48()){
|
|
func_80290F14();
|
|
if(!func_8029105C(8) && ncDynamicCamA_func_802C1EE0()){
|
|
func_802914CC(0x10);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//_camera_mode_A_update
|
|
void func_80291328(void){
|
|
if(func_802C189C()){
|
|
func_80291488(2);
|
|
}
|
|
}
|
|
|
|
/* camera update */
|
|
void cameraMode_update(void){
|
|
batimer_decrement(7);
|
|
func_80290298();
|
|
func_8029028C(0);
|
|
switch(D_8037C062){
|
|
case 0x9: //L802913A0
|
|
if(func_80290D48())
|
|
break;
|
|
if(D_8037C060){
|
|
func_80291488(1);
|
|
ncDynamicCamera_setState(D_8037C060);
|
|
}
|
|
else{
|
|
func_80291488(2);
|
|
}
|
|
break;
|
|
case 0x1: //L802913E8
|
|
func_80291108();
|
|
break;
|
|
case 0x7: //L802913F8
|
|
func_80291268();
|
|
break;
|
|
case 0x8: //L80291408
|
|
func_802912D0();
|
|
break;
|
|
|
|
case 0x4: //L80291418
|
|
case 0xc: //L80291418
|
|
func_802911E0();
|
|
break;
|
|
|
|
case 0xa: //L80291428
|
|
func_80291328();
|
|
break;
|
|
|
|
default://80291438
|
|
if(D_8037C060){
|
|
func_80291488(1);
|
|
ncDynamicCamera_setState(D_8037C060);
|
|
}
|
|
else{
|
|
func_80291154();
|
|
}
|
|
break;
|
|
|
|
case 0x5: //L8029146C
|
|
case 0x6: //L8029146C
|
|
case 0x0: //L8029146C
|
|
break;
|
|
}
|
|
}
|
|
|
|
s32 func_8029147C(void){
|
|
return D_8037C062;
|
|
}
|
|
|
|
void func_80291488(s32 arg0){
|
|
if(D_8037C062 == 0xa && arg0 != D_8037C062){
|
|
func_8029028C(1);
|
|
}
|
|
D_8037C062 = arg0;
|
|
}
|
|
|
|
void func_802914CC(s32 arg0){
|
|
D_8037C060 = arg0;
|
|
if(D_8037C062 != 9 && D_8037C062 != 0xa){
|
|
func_80291488(1);
|
|
ncDynamicCamera_setState(arg0);
|
|
}
|
|
}
|
|
|
|
void func_8029151C(s32 arg0){
|
|
func_80291488(6);
|
|
ncDynamicCamera_setState(arg0);
|
|
}
|
|
|
|
void func_80291548(void){
|
|
D_8037C060 = 0;
|
|
if(D_8037C062 != 9 && D_8037C062 != 0xa){
|
|
func_80291488(2);
|
|
}
|
|
}
|