Files
banjo-kazooie/src/core2/ba/marker.c
mariob92 50138293a4 src/core1: moved SnS to core1
umbenannt:      include/SnS.h -> include/core1/sns.h
        umbenannt:      src/core1/code_1E360.c -> src/core1/sns.c
2024-10-08 20:58:22 +02:00

1083 lines
39 KiB
C

#include <ultra64.h>
#include "core1/core1.h"
#include "functions.h"
#include "variables.h"
#include "core2/ba/physics.h"
#include "version.h"
#include "prop.h"
extern void func_803012F8(void);
extern f32 ml_distanceSquared_vec3f(f32 arg0[3], f32 arg1[3]);
extern void __baMarker_8028BA00(s32);
extern void spawnQueue_actor_s16(void);
extern void func_802A6388(f32);
extern f32 chwadingboots_802D6E4C(Actor *);
extern void set_turbo_duration(f32);
extern f32 chtrainers_getDuration(Actor *);
extern int ml_vec3f_point_within_horizontal_distance(f32 vec[3], f32 x, f32 z, f32 val);
extern void func_802EE354(Actor *, s32, s32, s32, f32, f32, f32, f32 arg8[3], s32, f32 arg10[2]);
extern void func_8035644C(s32);
extern void func_8035646C(s32 arg0);
extern void func_80291634(ActorMarker *, ActorMarker *);
extern void func_80291610(ActorMarker *, ActorMarker *);
extern Actor *baModel_80291AAC(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
extern void baMarker_8028D7B8(s32 arg0, ActorMarker *arg1, struct5Cs *collision_flags);
extern void func_802EE6CC(f32[3], s32, s32[4], s32, f32, f32, s32,s32,s32);
extern void func_80320ED8(ActorMarker *, f32, s32);
extern NodeProp *cubeList_findNodePropByActorId(enum actor_e actor_id, s32 position[3]);
typedef struct
{
f32 unk0;
f32 unk1;
f32 unk2;
}
tmp_struct_type;
void baMarker_8028D638(s32 arg0, s32 arg1);
/* .data */
s32 D_80363630[2] = {0x20, 0x1C};
s32 D_80363638[2] = {0x1C, 0x16};
s32 D_80363640[2] = {0x20, 0x01};
s32 D_80363648[2] = {0x1C, 0x18};
s32 D_80363650[2] = {0x20, 0x21};
s32 D_80363658[2] = {0x20, 0x28};
tmp_struct_type D_80363660 = {350.0f, 0.0f, 600.0f};
u8 D_8036366C[] = {
0xff, 0xff, 0x00,
0xff, 0x00, 0x00,
0x00, 0xff, 0x00,
0x00, 0x00, 0xff,
0xff, 0x00, 0xff,
0x00, 0xff, 0xff,
0x00, 0x00
};
s32 D_80363680[4] = {0xff, 0xff, 0xff, 0xc8};
/* .bss */
ActorMarker *playerMarker;
s32 D_8037BF74;
s32 baMarkerCarriedObjActorId;
s32 D_8037BF7C;
s32 D_8037BF80[2];
s32 D_8037BF88;
ActorMarker *D_8037BF8C;
u8 D_8037BF90;
/* .code */
s32 *__baMarker_8028B750(void){
if(D_8037BF80[0]){
return D_8037BF80;
}
else{
switch(player_getTransformation()){
case TRANSFORM_2_TERMITE: //8028B7A0
return D_80363638;
break;
case TRANSFORM_3_PUMPKIN: //8028B7AC
return D_80363640;
break;
case TRANSFORM_4_WALRUS: //8028B7B8
return D_80363650;
break;
case TRANSFORM_5_CROC: //8028B7C4
return D_80363648;
break;
case TRANSFORM_6_BEE: //8028B7D0:
return D_80363658;
break;
case TRANSFORM_1_BANJO: //8028B7DC
default:
return D_80363630;
break;
}
}
}
void __baMarker_8028B7F4(void){
yaw_setIdeal(func_8029B41C());
yaw_setUpdateState(1);
func_8029957C(3);
baphysics_set_type(BA_PHYSICS_NORMAL);
baphysics_set_target_horizontal_velocity(0.0f);
func_8029151C(0xC);
}
void __baMarker_8028B848(void){
s32 s0 = 0;
if(map_get() == MAP_69_GL_MM_LOBBY){
s0 = ASSET_E57_DIALOG_FIRST_JIGGY;
}
else if(map_get() == MAP_2_MM_MUMBOS_MOUNTAIN){
s0 = ASSET_B45_TEXT_JIGGY_COLLECT_10;
}
if(s0){
if(player_getTransformation() == TRANSFORM_1_BANJO){
__baMarker_8028B7F4();
}
gcdialog_showText(s0, 0x2A, NULL, NULL, NULL, 0);
}
}
void __baMarker_8028B8DC(void){
func_8028F918(1);
D_8037BF88 = 1;
}
void __baMarker_8028B904(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
f32 sp1C[3];
sp1C[0] = reinterpret_cast(s16, arg0);
sp1C[1] = reinterpret_cast(s16, arg1);
sp1C[2] = reinterpret_cast(s16, arg2);
func_80296CC0(&sp1C);
func_80296CB4(arg3);
if(miscFlag_isTrue(MISC_FLAG_7)){
func_8029CDA0();
}
else{
if(bs_checkInterrupt(BS_INTR_9) == 1){
func_8029CDA0();
}
}
}
void __baMarker_8028B9A8(s32 arg0){
NodeProp *tmp_v0;
s32 ideal_yaw[3];
tmp_v0 = cubeList_findNodePropByActorId(0x1F6, 0);
nodeprop_getPosition_s32(tmp_v0, &ideal_yaw);
func_802CA1CC(arg0);
actor_spawnWithYaw_s32(ACTOR_47_EMPTY_HONEYCOMB, &ideal_yaw, 0);
func_8025A6EC(COMUSIC_2B_DING_B, 28000);
}
void __baMarker_8028BA00(s32 arg0){
__spawnQueue_add_1((GenFunction_1)__baMarker_8028B9A8, reinterpret_cast(s32, arg0));
}
void __baMarker_resolveMusicNoteCollision(Prop *arg0) {
if (!func_802FADD4(ITEM_1B_VILE_VILE_SCORE)) {
item_inc(ITEM_C_NOTE);
} else {
item_adjustByDiffWithoutHud(ITEM_C_NOTE, 1);
}
if (item_getCount(ITEM_C_NOTE) < 100) {
func_8025A6EC(COMUSIC_9_NOTE_COLLECTED, 16000);
timedFunc_set_1(0.75f, func_8035644C, FILEPROG_3_MUSIC_NOTE_TEXT);
}
fxSparkle_musicNote(arg0->unk4);
}
void __baMarker_8028BAB0(enum jiggy_e jiggy_id, s32 arg1, s32 arg2, s32 arg3){
if(jiggyscore_isCollected(jiggy_id))
return;
if(mapSpecificFlags_get(arg1) && mapSpecificFlags_get(arg2)){
mapSpecificFlags_set(arg3, 1);
}
mapSpecificFlags_set(arg1, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
// arg1 - if bit 0x400000 is set, it's a volatile flag, else it's a file progress flag (for witch switches)
void __baMarker_8028BB1C(s32 arg0, enum file_progress_e progress_flag, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6){
u32 sp24;
if(arg0 != 1)
return;
if(func_8028ECAC() == 1)
return;
// if bit 0x400000 of fileProgressFlag is set, it's a volatile flag, else it's a file progress flag (for witch switches)
if(progress_flag & 0x400000){
sp24 = progress_flag + 0xFFC00000; // weird truncing
if(!volatileFlag_get(sp24)){
volatileFlag_set(sp24, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
volatileFlag_set(VOLATILE_FLAG_BF, 1);
func_802D6264(1.0f, arg2, arg3, arg4, arg5, arg6);
}
}
else{//L8028BBB8
if(!fileProgressFlag_get(progress_flag)){
fileProgressFlag_set(progress_flag, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
volatileFlag_set(VOLATILE_FLAG_BF, 1);
func_802D6264(1.0f, arg2, arg3, arg4, arg5, arg6);
}
}
}
int __baMarker_8028BC20(ActorMarker *marker){
return D_8037BF90 == 1 && player_getActiveHitbox(marker) == HITBOX_5_PECK;
}
int __baMarker_8028BC60(void){
return D_8037BF90 == 1 && player_getActiveHitbox(NULL) == HITBOX_5_PECK;
}
void __baMarker_resolveCollision(Prop *other_prop){
enum marker_collision_func_type_e plyr_collision_type;
enum marker_collision_func_type_e obj_collision_type;
s32 plyr_hitbox_type;
int i;
ActorMarker *marker; //0xbc
Actor *actor; //0xb8
f32 spAC[3];
f32 spA0[3];
s32 jiggy_id;
s32 sp98;
volatile s32 sp94;
s32 sp88[3]; //0
s32 tmp2;
s32 tmp3;
s32 sp7C; //+4
s32 sp78; //+4
s32 tmp_v0_2;
f32 tmp_f0;
tmp_struct_type sp64;
s32 tmp1;
if(*((u32*)(((u32)other_prop) + 8)) & 1){
plyr_collision_type = MARKER_COLLISION_FUNC_0;
obj_collision_type = MARKER_COLLISION_FUNC_0;
marker = other_prop->actorProp.marker;
actor = NULL;
if(marker->unk3E_0){
actor = marker_getActor(marker);
if(actor->despawn_flag)
return;
if(actor->is_bundle && func_802C9C14(actor))
return;
}//L8028BD1C
plyr_hitbox_type = player_getActiveHitbox(marker);
if(func_8033D410(playerMarker, marker))
return;
switch(marker->id){
case 0x125: //L8028BE88
case 0x126: //L8028BE88
obj_collision_type = MARKER_COLLISION_FUNC_1;
break;
case MARKER_97_BOGGY_2: //L8028BE94
plyr_collision_type = MARKER_COLLISION_FUNC_1;
obj_collision_type = MARKER_COLLISION_FUNC_1;
break;
case 0xBA: //L8028BEA8
if( marker->unk40_31 == 1
|| marker->unk40_31 == 2
|| marker->unk40_31 == 3
|| marker->unk40_31 == 4
|| marker->unk40_31 == 5
|| marker->unk40_31 == 6
){
obj_collision_type = MARKER_COLLISION_FUNC_1;
}
break;
case MARKER_B5_RED_FEATHER_COLLECTIBLE: //L8028BEF4
if(__baMarker_8028BC20(marker) != HITBOX_0_NONE)
return;
if(chCollectible_collectRedFeather(other_prop)){
marker_despawn(marker);
}
break;
case MARKER_1E5_GOLD_FEATHER_COLLECTIBLE: //L8028BF24
if(__baMarker_8028BC20(marker))
return;
if(chCollectible_collectGoldFeather(other_prop)){
marker_despawn(marker);
}
break;
case 0x9E: //L8028BF54
case 0xA1: //L8028BF54
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
func_802A02B4(1);
obj_collision_type = MARKER_COLLISION_FUNC_2_DIE;
}
break;
case 0x28: //L8028BF74
if( plyr_hitbox_type == HITBOX_6_WONDERWING){
sfxsource_playHighPriority(SFX_20_METAL_CLANK_1);
}
else{
func_8030E6D4(SFX_65_METALLIC_SCRATCH);
}
if(plyr_hitbox_type != HITBOX_6_WONDERWING){
plyr_collision_type = MARKER_COLLISION_FUNC_2_DIE;
}
break;
case MARKER_F5_BGS_ELEVATED_WALKWAY_SWITCH: //L8028BFB0
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER)
__baMarker_8028BAB0(JIGGY_20_BGS_ELEVATED_WALKWAY, 1, 3, 7);
break;
case MARKER_FD_BGS_MAZE_SWITCH: //L8028BFD4
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER)
__baMarker_8028BAB0(JIGGY_25_BGS_MAZE, 0xa, 0xc, 8);
break;
case MARKER_EC_GV_SUN_SWITCH: //L8028BFF8
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
mapSpecificFlags_set(3, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
break;
case MARKER_F2_HONEYCOMB_SWITCH: //L8028C01C
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(!mapSpecificFlags_get(0xD)){
mapSpecificFlags_set(0xD, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
func_802BAFE4(0x14);
timedFunc_set_1(1.5f, __baMarker_8028BA00, 0xB);
}
}
break;
case 0x15F: //L8028C070
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(!mapSpecificFlags_get(0)){
mapSpecificFlags_set(0,1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
func_802BAFE4(0x7E);
timedFunc_set_1(1.5f, __baMarker_8028BA00, 0xf);
}
}
break;
case MARKER_F1_GV_STAR_SWITCH: //L8028C0C8
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(5)){
mapSpecificFlags_set(5, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
break;
case MARKER_231_WARP_CAULDRON: //L8028C104
case MARKER_244_DINGPOT: //L8028C104
{
if(func_8028ECAC() == 1)
return;
player_getPosition(spAC);
spAC[1] += 40.0f;
if(collisionTri_isHitFromAbove_actor(spAC, actor, 0x87) == 0)
return;
volatileFlag_set(VOLATILE_FLAG_1E, 1);
/**
* This should use the following fileprog flags:
*
* FILEPROG_49_PINK_CAULDRON_1_ACTIVE
* FILEPROG_4A_PINK_CAULDRON_2_ACTIVE
* FILEPROG_4B_GREEN_CAULDRON_1_ACTIVE
* FILEPROG_4C_GREEN_CAULDRON_2_ACTIVE
* FILEPROG_4D_RED_CAULDRON_1_ACTIVE
* FILEPROG_4E_RED_CAULDRON_2_ACTIVE
* FILEPROG_4F_UNUSED_CAULDRON_1_ACTIVE
* FILEPROG_50_UNUSED_CAULDRON_2_ACTIVE
* FILEPROG_51_YELLOW_CAULDRON_1_ACTIVE
* FILEPROG_52_YELLOW_CAULDRON_2_ACTIVE
*/
if(fileProgressFlag_get(((actor->unkF4_8 - 1) ^ 1) + 0x49)){
actor->unk10_12 = 2;
}
else{
actor->unk10_12 = 1;
}
}
break;
case MARKER_FE_MMM_CLOCK_SWITCH: //L8028C1A4
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(0)){
mapSpecificFlags_set(0,1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
}
break;
case MARKER_23F_LAIR_FLIGHT_PAD_SWITCH: //L8028C1EC
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(0)){
mapSpecificFlags_set(0,1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
}
break;
case 0x110: //L8028C238
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(0)){
mapSpecificFlags_set(0, 1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
}
break;
case 0x113: //L8028C284
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(1)){
mapSpecificFlags_set(1,1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
}
break;
case 0x115: //L8028C2D0
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
if(func_8028ECAC() == 1)
return;
if(!mapSpecificFlags_get(2)){
mapSpecificFlags_set(2,1);
func_8030E6D4(SFX_90_SWITCH_PRESS);
}
}
break;
case 0x241: //L8028C31C
__baMarker_8028BB1C(plyr_hitbox_type, 0xC6, 0x6E, 0x81, 0x2C, 0xA, 0xC7);
break;
case MARKER_23C_GV_SNS_SWITCH: //L8028C350
__baMarker_8028BB1C(plyr_hitbox_type, 0xA3, 0x92, 0x7F, 0x1A, 0xA, 0xA4);
break;
case MARKER_161_GV_WITCH_SWITCH: //L8028C384
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_BE_WITCH_SWITCH_PRESSED_GV, 0x6E, 0x7D, 0x19, 0x14, 0xA0);
break;
case MARKER_162_BGS_WITCH_SWITCH: //L8028C3BC
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_BD_WITCH_SWITCH_PRESSED_BGS, 0x71, 0x7C, 0x18, 0x14, 0x9F);
break;
case MARKER_166_CC_WITCH_SWITCH: //L8028C3F4
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_BC_WITCH_SWITCH_PRESSED_CC, 0x6A, 0x7A, 0x17, 0x14, 0x9A);
break;
case MARKER_22B_FP_WITCH_SWITCH: //L8028C42C
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_BB_WITCH_SWITCH_PRESSED_FP, 0x6F, 0x3A, 0x13, 0x15, 0x47);
break;
case MARKER_22A_CCW_WITCH_SWITCH: //L8028C464
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_BA_WITCH_SWITCH_PRESSED_CCW, 0x79, 0x39, 0x12, 0x15, 0x46);
break;
case MARKER_103_MM_WITCH_SWITCH: //L8028C49C
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_B6_WITCH_SWITCH_PRESSED_MM, 0x69, 0x26, 1, 4, 0x18);
break;
case MARKER_104_MMM_WITCH_SWITCH: //L8028C4D4
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_B7_WITCH_SWITCH_PRESSED_MMM, 0x6F, 0x27, 2, 0x14, 0x19);
break;
case MARKER_105_TTC_WITCH_SWITCH: //L8028C50C
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_B8_WITCH_SWITCH_PRESSED_TTC, 0x6D, 0x28, 3, 0x14, 0x1A);
break;
case MARKER_106_RBB_WITCH_SWITCH: //L8028C544
__baMarker_8028BB1C(plyr_hitbox_type, 0x400000 | VOLATILE_FLAG_B9_WITCH_SWITCH_PRESSED_RBB, 0x76, 0x29, 4, 0xe, 0x1C);
break;
case MARKER_11B_WATER_LEVEL_SWITCH_1: //L8028C57C
__baMarker_8028BB1C(plyr_hitbox_type, 0x22, 0x77, 0x2D, 5, 0xA, 0x23);
break;
case MARKER_11C_WATER_LEVEL_SWITCH_2: //L8028C5B0
__baMarker_8028BB1C(plyr_hitbox_type, 0x24, 0x77, 0x2E, 6, 0xA, 0x25);
break;
case MARKER_11D_WATER_LEVEL_SWITCH_3: //L8028C5E4
__baMarker_8028BB1C(plyr_hitbox_type, 0x26, 0x76, 0x2F, 0x7, 0xA, 0x27);
break;
case 0x232: //L8028C618
__baMarker_8028BB1C(plyr_hitbox_type, 0x53, 0x6b, 0x3b, 0x14, 0x12, 0x54);
break;
case MARKER_F3_GV_KAZOOIE_TARGET: //L8028C64C
if(plyr_hitbox_type == HITBOX_3_BEAK_BOMB){
mapSpecificFlags_set(6,1);
obj_collision_type = MARKER_COLLISION_FUNC_1;
}
break;
case MARKER_52_JIGGY: //L8028C66C
{
if(__baMarker_8028BC20(marker))
return;
player_getPosition(spA0);
jiggy_id = chjiggy_getJiggyId(actor);
if( jiggy_id != JIGGY_2F_FP_XMAS_TREE
|| (player_isStable() && !(3600.0f < ml_distanceSquared_vec3f(actor->position, spA0)))
){
jiggyscore_setCollected(jiggy_id, TRUE);
item_adjustByDiffWithoutHud(ITEM_26_JIGGY_TOTAL, 1);
if(jiggy_id == JIGGY_20_BGS_ELEVATED_WALKWAY || jiggy_id == JIGGY_25_BGS_MAZE){
func_802D6924();
}
if(jiggyscore_total() < 3){
__baMarker_8028B848();
}
if(func_8025AD7C(COMUSIC_30_5TH_JINJO_COLLECTED)){
__baMarker_8028B8DC();
}
__spawnQueue_add_4((GenFunction_4)__baMarker_8028B904, reinterpret_cast(u32, other_prop->actorProp.x), reinterpret_cast(u32, other_prop->actorProp.y), reinterpret_cast(u32, other_prop->actorProp.z), jiggy_id);
marker_despawn(marker);
}
}
break;
case MARKER_53_EMPTY_HONEYCOMB: //L8028C774
{
if(__baMarker_8028BC20(marker))
return;
sp98 = func_802CA1C4(marker_getActor(marker));
if(sp98 != HONEYCOMB_12_MMM_FLOORBOARD || player_getTransformation() == TRANSFORM_3_PUMPKIN)
{
honeycombscore_set(sp98, 1);
func_8025A6EC(COMUSIC_17_EMPTY_HONEYCOMB_COLLECTED, 28000);
timedFunc_set_1(2.0f, func_8035644C, FILEPROG_B_EMPTY_HONEYCOMB_TEXT);
item_inc(ITEM_13_EMPTY_HONEYCOMB);
if(!(item_getCount(ITEM_13_EMPTY_HONEYCOMB) < 6)){
gcpausemenu_80314AC8(0);
}
fxSparkle_emptyHoneycomb(&other_prop->actorProp.x);
marker_despawn(marker);
}
}
break;
case 0x54: //L8028C820
func_8025A6EC(COMUSIC_19_LOW_PITCH_FLUTES, 28000);
func_803012F8();
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_s16, 0x4E, reinterpret_cast(u32, other_prop->actorProp.x), reinterpret_cast(u32, other_prop->actorProp.y), reinterpret_cast(u32, other_prop->actorProp.z));
marker_despawn(marker);
break;
case MARKER_55_HONEYCOMB: //L8028C86C
if(__baMarker_8028BC20(marker))
return;
if( map_get() == MAP_8E_GL_FURNACE_FUN
&& volatileFlag_get(VOLATILE_FLAG_0_IN_FURNACE_FUN_QUIZ)
&& !fileProgressFlag_get(FILEPROG_A6_FURNACE_FUN_COMPLETE)
){
volatileFlag_setAndTriggerDialog_4(VOLATILE_FLAG_A6_FF_FOUND_HONEYCOMB);
func_8030E6D4(SFX_126_AUDIENCE_BOOING);
}
func_8025A6EC(COMUSIC_16_HONEYCOMB_COLLECTED, 28000);
timedFunc_set_1(0.75f, func_8035644C, FILEPROG_A_HONEYCOMB_TEXT);
item_inc(ITEM_14_HEALTH);
fxSparkle_honeycomb(&other_prop->actorProp.x);
marker_despawn(marker);
break;
case MARKER_169_SNS_EGG: //L8028C908
{ //ONLY THIS CASE DOESN'T MATCH
switch (map_get())
{
case MAP_1D_MMM_CELLAR: //L8028C95C
sns_set_item_and_update_payload(SNS_ITEM_EGG_CYAN, 0, 1);
break;
case MAP_61_CCW_WINTER_NABNUTS_HOUSE: //L8028C974
sns_set_item_and_update_payload(SNS_ITEM_EGG_YELLOW, 0, 1);
break;
case MAP_2C_MMM_BATHROOM: //L8028C988
sns_set_item_and_update_payload(SNS_ITEM_EGG_GREEN, 0, 1);
break;
case MAP_3F_RBB_CAPTAINS_CABIN: //L8028C99C
sns_set_item_and_update_payload(SNS_ITEM_EGG_RED, 0, 1);
break;
case MAP_92_GV_SNS_CHAMBER: //L8028C9B0
sns_set_item_and_update_payload(SNS_ITEM_EGG_BLUE, 0, 1);
break;
case MAP_8F_TTC_SHARKFOOD_ISLAND: //L8028C9C4
sns_set_item_and_update_payload(SNS_ITEM_EGG_PINK, 0, 1);
break;
}
comusic_playTrack(COMUSIC_88_BIG_SNS_FANFARE);
FUNC_8030E624(SFX_114_BRICKWALL_BREAKING, 0.8f, 15000);
tmp_v0_2 = 3*(actor->unkF4_8 - 1);
tmp_f0 = 0.9f;\
sp64 = D_80363660;
//+C
sp78 = 0xA;
sp94 = 0xAA;
for(sp7C = 0; sp7C < 4; sp7C++){ //L8028CA4C
for(i = 0 ; i < 3; i++){
sp88[i] = D_8036366C[tmp_v0_2 + i];
}
func_802EE354(actor, 0x3ED, 0x23, sp78, 0.2f, tmp_f0, 3.0f, sp88, 0, &sp64);
for(i = 0 ; i < 3; i++){
sp88[i] = 0xFF;
}
func_802EE354(actor, 0x3ED, 0xe, sp78, 0.2f, tmp_f0, 3.0f, sp88, 0, &sp64);
sp78 += 0x32;
tmp_f0 += -0.15;
if(tmp_f0 < 0.01){
tmp_f0 = 0.01f;
}
sp64.unk0 -= 50.0f;
sp64.unk2 += 260.0f;
sp94 -= 0x1e;
}
tmp1 = sns_get_item_state(SNS_ITEM_EGG_YELLOW, 0) + sns_get_item_state(SNS_ITEM_EGG_RED, 0) + sns_get_item_state(SNS_ITEM_EGG_GREEN, 0)
+ sns_get_item_state(SNS_ITEM_EGG_BLUE, 0) + sns_get_item_state(SNS_ITEM_EGG_PINK, 0) + sns_get_item_state(SNS_ITEM_EGG_CYAN, 0);
if(tmp1 < 3){
func_80324DBC(2.5f, ASSET_DB3_DIALOG_SNS_EGG_1_TEXT + tmp1 - 1, 0x20, 0, 0, 0, 0);
}
marker_despawn(marker);
}
break;
case MARKER_168_ICE_KEY: //L8028CC7C
sns_set_item_and_update_payload(SNS_ITEM_ICE_KEY, 0, 1);
comusic_playTrack(COMUSIC_88_BIG_SNS_FANFARE);
func_80324DBC(2.5f, ASSET_DB5_DIALOG_ICE_KEY_TEXT, 0x20, 0, 0, 0, 0);
marker_despawn(marker);
break;
case MARKER_5F_MUSIC_NOTE: //L8028CCC8
if(__baMarker_8028BC20(marker))
return;
__baMarker_resolveMusicNoteCollision(other_prop);
marker_despawn(marker);
break;
case MARKER_60_BLUE_EGG_COLLECTIBLE: //L8028CCF0
if(__baMarker_8028BC20(marker))
return;
if(chCollectible_collectEgg(other_prop)){
marker_despawn(marker);
}
break;
case MARKER_6B_GLOOPBUBBLE: //L8028CD20
if(player_getWaterState() == BSWATERGROUP_2_UNDERWATER){
item_adjustByDiffWithHud(ITEM_17_AIR, fxairscore_count_to_time(2));
}
break;
case MARKER_61_EXTRA_LIFE: //L8028CD50
if(__baMarker_8028BC20(marker))
return;
if( map_get() == MAP_8E_GL_FURNACE_FUN
&& volatileFlag_get(VOLATILE_FLAG_0_IN_FURNACE_FUN_QUIZ)
&& !fileProgressFlag_get(FILEPROG_A6_FURNACE_FUN_COMPLETE)
){
volatileFlag_setAndTriggerDialog_4(VOLATILE_FLAG_A7_FF_FOUND_EXTRALIFE);
func_8030E6D4(SFX_127_AUDIENCE_MIXED);
}
func_8025A6EC(COMUSIC_15_EXTRA_LIFE_COLLECTED, 0x7FFF);
timedFunc_set_1(1.5f, func_8035646C, FILEPROG_C_EXTRA_LIFE_TEXT);
fxSparkle_extraLife(&other_prop->actorProp.x);
item_inc(ITEM_16_LIFE);
marker_despawn(marker);
break;
case MARKER_D4_SPRING_PAD: //L8028CDEC
case 0x242: //L8028CDEC
if(ability_isUnlocked(ABILITY_D_SHOCK_JUMP)){
miscFlag_set(MISC_FLAG_2_ON_SPRING_PAD);
}else{
if(!volatileFlag_getAndSet(VOLATILE_FLAG_C_HAS_SEEN_SPRING_PAD, 1)){
gcdialog_showText(ASSET_A24_DIALOG_JUMP_PAD_DISCOVERED, 4, 0, 0, 0, 0);
}
}
break;
case MARKER_45_FLIGHT_PAD: //L8028CE3C
case MARKER_240_LAIR_SWITCH_FLIGHT_PAD: //L8028CE3C
case MARKER_261_FIGHT_FLIGHT_PAD: //L8028CE3C
if(ability_isUnlocked(ABILITY_9_FLIGHT)){
miscFlag_set(MISC_FLAG_1_ON_FLIGHT_PAD);
}
else if(! volatileFlag_getAndSet(VOLATILE_FLAG_D_HAS_SEEN_FLIGHT_PAD, 1)){
gcdialog_showText(ASSET_A25_DIALOG_FLY_DISC_DISCOVERED, 4, 0, 0, 0, 0);
}
break;
case MARKER_11_WADING_BOOTS: //L8028CE8C
if(__baMarker_8028BC20(marker))
return;
if(bsStoredState_getTransformation() != TRANSFORM_1_BANJO)
return;
if(func_8028F170())
return;
if(func_8028F25C())
return;
if(chwadingboots_802D6E0C(actor) == 0)
return;
miscFlag_set(MISC_FLAG_E_TOUCHING_WADING_BOOTS);
func_802A6388(chwadingboots_802D6E4C(actor));
bs_checkInterrupt(BS_INTR_1B);
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_s16, 0x4E, reinterpret_cast(u32, other_prop->actorProp.x), reinterpret_cast(u32, other_prop->actorProp.y), reinterpret_cast(u32, other_prop->actorProp.z));
chwadingboots_802D6E54(actor);
break;
case MARKER_38_TURBO_TALON_TRAINERS: //L8028CF38
if(__baMarker_8028BC20(marker))
return;
tmp1 = bsStoredState_getTransformation();
if(tmp1 != TRANSFORM_1_BANJO && tmp1 != TRANSFORM_5_CROC)
return;
if(func_8028F25C())
return;
if(func_8028F170())
return;
if(!chtrainers_canUse(actor))
return;
miscFlag_set(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS);
set_turbo_duration(chtrainers_getDuration(actor));
bs_checkInterrupt(BS_INTR_1A);
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_s16, 0x4E, reinterpret_cast(u32, other_prop->actorProp.x), reinterpret_cast(u32, other_prop->actorProp.y), reinterpret_cast(u32, other_prop->actorProp.z));
chtrainers_pickup(actor);
break;
case MARKER_1AE_ZUBBA: //L8028CFEC
switch(plyr_hitbox_type){
case HITBOX_1_BEAK_BUSTER:
case HITBOX_2_BEAK_BARGE:
case HITBOX_5_PECK:
case HITBOX_6_WONDERWING:
obj_collision_type = MARKER_COLLISION_FUNC_2_DIE;
break;
default:
plyr_collision_type = MARKER_COLLISION_FUNC_2_DIE;
break;
}
break;
case MARKER_1B1_CCW_GOBI: //L8028D024
if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER)
obj_collision_type = MARKER_COLLISION_FUNC_1;
break;
}//L8028D034
if(func_80297C6C() == 3){
plyr_collision_type = MARKER_COLLISION_FUNC_0;
}
if(obj_collision_type){
miscFlag_set(MISC_FLAG_8);
}
marker_callCollisionFunc(playerMarker, marker, plyr_collision_type);
marker_callCollisionFunc(marker, playerMarker, obj_collision_type);
if(marker->unk3E_0){
func_8032B258(actor, obj_collision_type);
}
}
else if(other_prop->unk8_1)//L8028D0B0 //ModelProp
{
tmp2 = other_prop->modelProp.unk0_31 + 0x2D1;
switch (tmp2)
{
case 0x2E8:
miscFlag_set(MISC_FLAG_1_ON_FLIGHT_PAD); //on flight pad
break;
case 0x2DD: //on shock spring pad
miscFlag_set(MISC_FLAG_2_ON_SPRING_PAD);
break;
default:
func_80332790(tmp2);
break;
}
}
else{//L8028D10C //SpriteProp
tmp3 = other_prop->spriteProp.unk0_31 + 0x572;
switch (tmp3)
{
case 0x6D6: //L8028D144
if(!__baMarker_8028BC60()){
other_prop->spriteProp.unk8_4 = 0;
__baMarker_resolveMusicNoteCollision(other_prop);
}
break;
case 0x6D7: //L8028D16C
if(!__baMarker_8028BC60()){
other_prop->spriteProp.unk8_4 = 0;
chCollectible_collectEgg(other_prop);
}
break;
case 0x580: //L8028D194
if(!__baMarker_8028BC60()){
other_prop->spriteProp.unk8_4 = 0;
chCollectible_collectRedFeather(other_prop);
}
break;
case 0x6D1: //L8028D1BC
if(!__baMarker_8028BC60()){
other_prop->spriteProp.unk8_4 = 0;
chCollectible_collectGoldFeather(other_prop);
}
break;
default:
func_80332790(tmp3);
break;
}
}
}
void baMarker_init(void){
f32 sp1C[3];
_player_getPosition(sp1C);
playerMarker = func_8032FBE4(sp1C, baModel_80291AAC, 1, 0);
playerMarker->unk2C_1 = 1;
marker_setCollisionScripts(playerMarker, NULL, func_80291634, func_80291610);
func_803300B8(playerMarker, baMarker_8028D7B8);
miscFlag_clear(MISC_FLAG_1_ON_FLIGHT_PAD);
miscFlag_clear(MISC_FLAG_2_ON_SPRING_PAD);
miscFlag_clear(MISC_FLAG_8);
baMarker_8028D638(0,0);
func_8033D2F4();
D_8037BF8C = 0;
D_8037BF90 = 0xff;
}
void baMarker_free(void){
marker_free(playerMarker);
playerMarker = NULL;
}
void baMarker_update(void){
f32 sp174[3];
f32 sp168[3];
s32 temp_s0;
int i, j;
Prop *sp58[65];
s32 *temp_s0_2;
s32 temp_s2;
Prop *other_prop;
if ((D_8037BF88 != 0)){
temp_s0 = func_8024FEEC(func_8025ADD4(COMUSIC_30_5TH_JINJO_COLLECTED) & 0xFF);
if((comusic_active_track_count() < 4 && temp_s0 >= 0xBB9) || !func_8025AD7C(COMUSIC_30_5TH_JINJO_COLLECTED)){
func_8028F918(0);
D_8037BF88 = 0;
}
}//L8028D364
miscFlag_clear(MISC_FLAG_8);
if(playerMarker->collidable){
temp_s0_2 = __baMarker_8028B750();
miscFlag_clear(MISC_FLAG_1_ON_FLIGHT_PAD);
miscFlag_clear(MISC_FLAG_2_ON_SPRING_PAD);
_player_getPosition(sp168);
func_8032F64C(sp168, playerMarker);
for(D_8037BF8C = NULL, i = 0, temp_s2 = 0; i < 2;i++){//L8028D3DC
D_8037BF90 = i;
baModel_80292284(sp174, i); //get top of player?
playerMarker->unk38[0] = sp174[0] - sp168[0];
playerMarker->unk38[1] = sp174[1] - sp168[1];
playerMarker->unk38[2] = sp174[2] - sp168[2];
func_80320ED8(playerMarker, temp_s0_2[i], 1);
while(other_prop = func_8032F528()){//L8028D480
if(!other_prop->unk8_2){
if(!D_8037BF8C && other_prop->markerFlag && other_prop->unk8_1){
D_8037BF8C = other_prop->actorProp.marker;
}
__baMarker_resolveCollision(other_prop);
other_prop->unk8_2 = 1;
sp58[temp_s2] = other_prop;
temp_s2++;
}//L8028D4E0
}//L8028D4F0
}
D_8037BF90 = 0xff;
for(j = 0; j < temp_s2; j++){//L8028D55C
sp58[j]->unk8_2 = 0;
}
}
}
ActorMarker *baMarker_get(void){ //baMarker_get
return playerMarker;
}
void baMarker_collisionOff(void){ //player_collisionOff
playerMarker->collidable = FALSE;
}
void baMarker_collisionOn(void){ //player_collisionOn
playerMarker->collidable = TRUE;
}
bool baMarker_isCollidable(void){ //player_isCollidable
return BOOL(playerMarker->collidable);
}
void baMarker_8028D638(s32 arg0, s32 arg1){
D_8037BF80[0] = arg0;
D_8037BF80[1] = arg1;
}
void baMarker_8028D64C(s32 arg0){
D_8037BF74 = arg0;
}
void baMarker_setCarriedObject(enum actor_e actor_id){
baMarkerCarriedObjActorId = actor_id;
}
s32 baMarker_8028D664(void){
return D_8037BF74;
}
enum actor_e baMarker_getCarriedObjectActorId(void){
return baMarkerCarriedObjActorId;
}
void baMarker_8028D67C(s32 arg0){
D_8037BF7C = arg0;
}
s32 baMarker_8028D688(void){
return D_8037BF7C;
}
s32 baMarker_8028D694(void) {
s32 temp_a0;
s32 phi_v1;
phi_v1 = 0;
if (D_8037BF8C != NULL) {
temp_a0 = D_8037BF8C->unk40_31 - 0xB;
if ((temp_a0 >= 0) && (temp_a0 < 4) && (((1 << temp_a0) & D_8037BF8C->unk40_27))) {
phi_v1 = 0x08000000 << temp_a0;
}
}
return phi_v1 | 0x400000;
}
s32 baMarker_8028D6F0(s32 **arg0){
*arg0 = __baMarker_8028B750();
return 2;
}
void baMarker_8028D71C(void){
f32 sp3C[3];
f32 sp30[3];
func_8028E9C4(5, sp30);
player_getPosition(sp3C);
sp3C[1] += (sp30[1] - sp3C[1])*0.75;
func_802EE6CC(sp3C, 0, D_80363680, 1, 0.75f, 0.0f, 0x7d, 0xfa, 0);
}
void baMarker_8028D7B8(s32 arg0, ActorMarker *arg1, struct5Cs *collision_flags){
s32 sp24;
s32 sp20 = func_8033D594(collision_flags);
s32 sp1C = 0;
Actor *actor = marker_getActor(arg1);
s32 tmp_v0;
if(func_8033D5A4(collision_flags))
miscFlag_set(MISC_FLAG_8);
if((func_80297C6C() != 3 && func_8028F1E0()) || !sp20){
if(!func_8028F25C()){
sp24 = func_8033D564(collision_flags);
if(0 < sp24 && sp24 < 6){
sp1C = 2;
sp20 = MAX(0, sp20 - 1);
}//L8028D884
if(6 < sp24 && sp24 < 0xC){
if(!(1 < func_8033D5A4(collision_flags)) || (func_8033D574(collision_flags) != -1 && actor->unk164[func_8033D574(collision_flags)])){
sp1C = 1;
}//L8028D8E8
}//L8028D8E8
if(sp20){
if(func_8033D594(collision_flags) == 3){
item_adjustByDiffWithHud(ITEM_14_HEALTH, -item_getCount(ITEM_14_HEALTH));
}
else{//L8028D92C
item_adjustByDiffWithHud(ITEM_14_HEALTH, -sp20);
}
}//L8028D948
if(item_getCount(ITEM_14_HEALTH) == 0){
sp1C = 2;
}
switch(sp1C){
case 1://L8028D98C
sp24 = MAX(MIN(sp24, 0xb), 7);
sp24 -= 7;
func_8028F428(sp24 +8, arg1);
rumbleManager_80250D94(0.8f, sp24 + 0.2, 0.3f);
break;
case 2://L8028DA10
sp24 = MAX(MIN(sp24, 5), 1);
sp24--;
func_8028F55C(sp24 + 3, arg1);
rumbleManager_80250D94(1.0f, sp24 + 0.3, 0.5f);
if(actor->unk16C_2 || actor->unk16C_1){
baMarker_8028D71C();
}
break;
case 0:
break;
}
}//L8028DAB0
}//L8028DAB0
}