261 lines
6.5 KiB
C
261 lines
6.5 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
extern f32 func_80294404(void);
|
|
extern BKCollisionTri *func_8029463C(void);
|
|
extern BKModelBin *func_802946A8(void);
|
|
|
|
/* .data */
|
|
s16 D_80364580[] = {
|
|
MAP_7_TTC_TREASURE_TROVE_COVE,
|
|
MAP_2_MM_MUMBOS_MOUNTAIN,
|
|
MAP_1B_MMM_MAD_MONSTER_MANSION,
|
|
MAP_B_CC_CLANKERS_CAVERN,
|
|
MAP_21_CC_WITCH_SWITCH_ROOM,
|
|
MAP_22_CC_INSIDE_CLANKER,
|
|
MAP_23_CC_GOLDFEATHER_ROOM,
|
|
MAP_28_MMM_EGG_ROOM,
|
|
MAP_29_MMM_NOTE_ROOM,
|
|
MAP_2A_MMM_FEATHER_ROOM,
|
|
MAP_2C_MMM_BATHROOM,
|
|
MAP_2D_MMM_BEDROOM,
|
|
MAP_2E_MMM_HONEYCOMB_ROOM,
|
|
MAP_2B_MMM_SECRET_CHURCH_ROOM,
|
|
MAP_26_MMM_NAPPERS_ROOM,
|
|
MAP_1C_MMM_CHURCH,
|
|
MAP_1D_MMM_CELLAR,
|
|
MAP_31_RBB_RUSTY_BUCKET_BAY,
|
|
MAP_34_RBB_ENGINE_ROOM,
|
|
MAP_35_RBB_WAREHOUSE,
|
|
MAP_36_RBB_BOATHOUSE,
|
|
MAP_3A_RBB_BOSS_BOOM_BOX,
|
|
MAP_37_RBB_CONTAINER_1,
|
|
MAP_3E_RBB_CONTAINER_2,
|
|
MAP_38_RBB_CONTAINER_3,
|
|
MAP_39_RBB_CREW_CABIN,
|
|
MAP_3F_RBB_CAPTAINS_CABIN,
|
|
MAP_3B_RBB_STORAGE_ROOM,
|
|
MAP_3C_RBB_KITCHEN,
|
|
MAP_3D_RBB_NAVIGATION_ROOM,
|
|
MAP_8B_RBB_ANCHOR_ROOM,
|
|
MAP_43_CCW_SPRING,
|
|
MAP_44_CCW_SUMMER,
|
|
MAP_45_CCW_AUTUMN,
|
|
MAP_46_CCW_WINTER,
|
|
MAP_5A_CCW_SUMMER_ZUBBA_HIVE,
|
|
MAP_5B_CCW_SPRING_ZUBBA_HIVE,
|
|
MAP_5C_CCW_AUTUMN_ZUBBA_HIVE,
|
|
MAP_5E_CCW_SPRING_NABNUTS_HOUSE,
|
|
MAP_5F_CCW_SUMMER_NABNUTS_HOUSE,
|
|
MAP_60_CCW_AUTUMN_NABNUTS_HOUSE,
|
|
MAP_61_CCW_WINTER_NABNUTS_HOUSE,
|
|
MAP_62_CCW_WINTER_HONEYCOMB_ROOM,
|
|
MAP_63_CCW_AUTUMN_NABNUTS_WATER_SUPPLY,
|
|
MAP_64_CCW_WINTER_NABNUTS_WATER_SUPPLY,
|
|
MAP_65_CCW_SPRING_WHIPCRACK_ROOM,
|
|
MAP_66_CCW_SUMMER_WHIPCRACK_ROOM,
|
|
MAP_67_CCW_AUTUMN_WHIPCRACK_ROOM,
|
|
MAP_68_CCW_WINTER_WHIPCRACK_ROOM,
|
|
MAP_11_BGS_TIPTUP,
|
|
MAP_10_BGS_MR_VILE,
|
|
MAP_C_MM_TICKERS_TOWER,
|
|
MAP_8F_TTC_SHARKFOOD_ISLAND,
|
|
MAP_8D_MMM_INSIDE_LOGGO,
|
|
MAP_69_GL_MM_LOBBY,
|
|
MAP_6A_GL_TTC_AND_CC_PUZZLE,
|
|
MAP_6B_GL_180_NOTE_DOOR,
|
|
MAP_6C_GL_RED_CAULDRON_ROOM,
|
|
MAP_6D_GL_TTC_LOBBY,
|
|
MAP_70_GL_CC_LOBBY,
|
|
MAP_71_GL_STATUE_ROOM,
|
|
MAP_72_GL_BGS_LOBBY,
|
|
MAP_6E_GL_GV_LOBBY,
|
|
MAP_6F_GL_FP_LOBBY,
|
|
MAP_74_GL_GV_PUZZLE,
|
|
MAP_75_GL_MMM_LOBBY,
|
|
MAP_7A_GL_CRYPT,
|
|
MAP_76_GL_640_NOTE_DOOR,
|
|
MAP_77_GL_RBB_LOBBY,
|
|
MAP_78_GL_RBB_AND_MMM_PUZZLE,
|
|
MAP_79_GL_CCW_LOBBY,
|
|
MAP_80_GL_FF_ENTRANCE,
|
|
MAP_90_GL_BATTLEMENTS,
|
|
MAP_93_GL_DINGPOT,
|
|
MAP_92_GV_SNS_CHAMBER,
|
|
MAP_8C_SM_BANJOS_HOUSE,
|
|
0
|
|
};
|
|
|
|
/*.bss*/
|
|
struct {
|
|
u8 unk0;
|
|
f32 unk4[3];
|
|
}
|
|
D_8037C6F0;
|
|
|
|
/*.code */
|
|
void func_80299EC0(f32 arg0[3]) {
|
|
f32 spEC[3]; //player_pos
|
|
f32 spE0[3];
|
|
f32 spD4[3];
|
|
f32 a;
|
|
f32 f0;
|
|
BKModelBin *spC8;
|
|
f32 f2;
|
|
f32 spB8[3];
|
|
f32 spAC[3];
|
|
f32 spA0[3];
|
|
f32 sp7C[3][3]; //tri_vtx_colors
|
|
s32 sp78;
|
|
s32 i;
|
|
f32 sp70;
|
|
BKCollisionTri *sp6C; //floor_vtx_list
|
|
f32 sp48[3][3]; //tri_vtx_coord
|
|
Vtx *vtx_buffer;
|
|
Vtx *temp_v1;
|
|
f32 f18;
|
|
|
|
arg0[2] =
|
|
arg0[1] =
|
|
arg0[0] = 255;
|
|
|
|
if (D_8037C6F0.unk0 == 1) {
|
|
sp78 = 50;
|
|
} else if (player_getWaterState() == BSWATERGROUP_0_NONE) {
|
|
sp78 = 200;
|
|
} else {
|
|
sp78 = 250;
|
|
}
|
|
_player_getPosition(spEC);
|
|
sp6C = func_8029463C();
|
|
spC8 = func_802946A8();
|
|
if (spC8 == NULL) {
|
|
sp6C = NULL;
|
|
}
|
|
if ((spEC[1] - func_80294438()) > 100) {
|
|
sp6C = NULL;
|
|
}
|
|
if (sp6C == NULL) return;
|
|
if (sp6C->unk6 &2) return;
|
|
|
|
vtx_buffer = vtxList_getVertices(model_getVtxList(spC8));
|
|
|
|
for(i = 0; i<3; i++){
|
|
temp_v1 = vtx_buffer + sp6C->unk0[i];
|
|
sp48[i][0] = (f32) temp_v1->v.ob[0];
|
|
sp48[i][1] = (f32) temp_v1->v.ob[1];
|
|
sp48[i][2] = (f32) temp_v1->v.ob[2];
|
|
sp48[i][1] = 0;
|
|
|
|
sp7C[i][0] = (f32) temp_v1->v.cn[0];
|
|
sp7C[i][1] = (f32) temp_v1->v.cn[1];
|
|
sp7C[i][2] = (f32) temp_v1->v.cn[2];
|
|
}
|
|
|
|
spEC[1] = 0;
|
|
|
|
spE0[0] = spEC[0] - sp48[0][0];
|
|
spE0[1] = 0;
|
|
spE0[2] = spEC[2] - sp48[0][2];
|
|
|
|
spAC[0] = sp48[0][0] - sp48[1][0];
|
|
spAC[1] = 0;
|
|
spAC[2] = sp48[0][2] - sp48[1][2];
|
|
|
|
spB8[0] = sp48[2][0] - sp48[1][0];
|
|
spB8[1] = 0;
|
|
spB8[2] = sp48[2][2] - sp48[1][2];
|
|
|
|
//swap
|
|
sp70 = spB8[0];
|
|
spB8[0] = -spB8[2];
|
|
spB8[2] = sp70;
|
|
|
|
f18 = spE0[0]*spB8[0] + spE0[1]*spB8[1] + spE0[2]*spB8[2];
|
|
if (f18 == 0) {
|
|
f18 = 0.1;
|
|
}
|
|
|
|
f0 = -(spAC[0]*spB8[0] + spAC[1]*spB8[1] + spAC[2]*spB8[2]) / f18;
|
|
spA0[0] = sp48[0][0] + (spE0[0] * f0);
|
|
spA0[1] = 0;
|
|
spA0[2] = sp48[0][2] + (spE0[2] * f0);
|
|
|
|
spD4[0] = spA0[0] - sp48[1][0];
|
|
spD4[1] = spA0[1] - sp48[1][1];
|
|
spD4[2] = spA0[2] - sp48[1][2];
|
|
|
|
f2 = gu_sqrtf(spD4[0]*spD4[0] + spD4[1]*spD4[1] + spD4[2]*spD4[2])
|
|
/ (gu_sqrtf(spB8[0]*spB8[0] + spB8[1]*spB8[1] + spB8[2]*spB8[2]) + 0.01);
|
|
for(i = 0; i < 3; i++){
|
|
arg0[i] = sp7C[1][i] + (sp7C[2][i] - sp7C[1][i]) * f2;
|
|
}
|
|
|
|
spD4[0] = spA0[0] - sp48[0][0];
|
|
spD4[1] = spA0[1] - sp48[0][1];
|
|
spD4[2] = spA0[2] - sp48[0][2];
|
|
|
|
f2 = 1 - (gu_sqrtf(spE0[0]*spE0[0] + spE0[1]*spE0[1] + spE0[2]*spE0[2])
|
|
/ (gu_sqrtf(spD4[0]*spD4[0] + spD4[1]*spD4[1] + spD4[2]*spD4[2]) + 0.01));
|
|
for(i = 0; i < 3; i++){
|
|
arg0[i] = arg0[i] + (sp7C[0][i] - arg0[i]) * f2;
|
|
}
|
|
|
|
f2 = func_80294404() / 100;
|
|
for(i = 0; i < 3; i++){
|
|
arg0[i] = arg0[i] + (255 - arg0[i]) * f2;
|
|
}
|
|
|
|
for(i = 0; i < 3; i++){
|
|
if(arg0[i] > 255){ arg0[i] = 255; }
|
|
if(arg0[i] < 0) { arg0[i] = 0; }
|
|
}
|
|
|
|
arg0[0] = ((arg0[0] + arg0[1] + arg0[2]) * (255 - sp78)) / 765 + sp78;
|
|
arg0[1] = arg0[0];
|
|
arg0[2] = arg0[0];
|
|
}
|
|
|
|
void func_8029A47C(s32 arg0[3]){
|
|
arg0[0] = (s32)(D_8037C6F0.unk4[0] + 0.5);
|
|
arg0[1] = (s32)(D_8037C6F0.unk4[1] + 0.5);
|
|
arg0[2] = (s32)(D_8037C6F0.unk4[2] + 0.5);
|
|
}
|
|
|
|
void func_8029A4D0(void){
|
|
int i;
|
|
s32 map_id = map_get();
|
|
D_8037C6F0.unk0 = 0;
|
|
D_8037C6F0.unk4[0] = 255.0f;
|
|
D_8037C6F0.unk4[1] = 255.0f;
|
|
D_8037C6F0.unk4[2] = 255.0f;
|
|
for(i = 0; D_80364580[i] != 0; i++){
|
|
if(map_id == D_80364580[i]){
|
|
D_8037C6F0.unk0 = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_8029A54C(void){}
|
|
|
|
void func_8029A554(void){
|
|
int i;
|
|
f32 sp28[3];
|
|
func_80299EC0(sp28);
|
|
for(i = 0; i < 3; i++){
|
|
if(D_8037C6F0.unk4[i] < sp28[i]){
|
|
D_8037C6F0.unk4[i] += 40.0f;
|
|
if(sp28[i] < D_8037C6F0.unk4[i])
|
|
D_8037C6F0.unk4[i] = sp28[i];
|
|
|
|
}
|
|
else{//L8029A5C0
|
|
D_8037C6F0.unk4[i] -= 40.0f;
|
|
if( D_8037C6F0.unk4[i] < sp28[i])
|
|
D_8037C6F0.unk4[i] = sp28[i];
|
|
}
|
|
}
|
|
}
|