diff --git a/Makefile b/Makefile index d4d822d7b8..ebf9183c21 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,7 @@ ASFLAGS := -march=vr4300 -32 MIPS_VERSION := -mips2 # we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Surpress the warnings with -woff. -CFLAGS += -G 0 -non_shared -Xfullwarn -Xcpluscomm -Iinclude -I./ -Isrc -Wab,-r4300_mul -woff 624,649,838,712 +CFLAGS += -G 0 -non_shared -Xfullwarn -Xcpluscomm -Iinclude -Isrc -Iassets -Ibuild -I./ -Isrc -Wab,-r4300_mul -woff 624,649,838,712 #### Files #### @@ -283,7 +283,7 @@ build/comp/assets/textures/%.yaz0: build/baserom/assets/textures/% build/%.d: %.c @./tools/depend.py $< $@ - @$(GCC) $< -Iinclude -I./ -MM -MT 'build/$*.o' >> $@ + @$(GCC) $< -Iinclude -Isrc -I./ -MM -MT 'build/$*.o' >> $@ build/dmadata_script.ld: build/dmadata_script.txt @$(GCC) -E -CC -x c -Iinclude $< | grep -v '^#' > $@ diff --git a/include/functions.h b/include/functions.h index ad472b3796..30ab78678b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -904,7 +904,7 @@ Actor* func_800BC270(GlobalContext* globalCtx, Actor* actor, f32 arg2, UNK_TYPE4 // void func_800BC848(void); // void func_800BC8B8(void); // void func_800BCB50(void); -void func_800BCB70(Actor* actor, s16 arg1, u8 arg2, s16 arg3, u8 arg4); +void func_800BCB70(Actor* actor, s16 arg1, s16 arg2, s16 arg3, s16 arg4); void func_800BCBF4(Vec3f* uParm1, GlobalContext* globalCtx); void func_800BCC68(Vec3f* param_1, GlobalContext* globalCtx); UNK_RET func_800BCCDC(Vec3s* points, u8 pathcount, Vec3f* pos1, Vec3f* pos2, UNK_TYPE parm5); @@ -918,7 +918,7 @@ void func_800BD888(Actor*, struct_800BD888_arg1*, s16, s16); // This function is // void func_800BDB6C(void); void func_800BDC5C(SkelAnime* skelAnime, ActorAnimationEntry animation[], s16 index); // void func_800BDCF4(void); -void func_800BDFB0(void); +void Actor_Noop(Actor* actor, GlobalContext* globalCtx); void func_800BDFC0(GlobalContext* globalCtx, Gfx* dl); void func_800BE03C(GlobalContext* globalCtx, Gfx* dl); // void func_800BE0B8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt index 0157765aca..cfb4bf1afd 100644 --- a/linker_scripts/code_script.txt +++ b/linker_scripts/code_script.txt @@ -985,9 +985,9 @@ SECTIONS ovl_En_Firefly : AT(RomLocation) { build/src/overlays/actors/ovl_En_Firefly/z_en_firefly.o(.text) - build/asm/overlays/ovl_En_Firefly_data.o(.data) + build/src/overlays/actors/ovl_En_Firefly/z_en_firefly.o(.data) build/src/overlays/actors/ovl_En_Firefly/z_en_firefly.o(.rodata) - build/asm/overlays/ovl_En_Firefly_rodata.o(.rodata) + build/src/overlays/actors/ovl_En_Firefly/z_en_firefly_overlay.o(.ovl) } SegmentEnd = .; SegmentSize = SegmentEnd - SegmentStart; diff --git a/linker_scripts/object_script.txt b/linker_scripts/object_script.txt index b935b2b064..50edca5865 100644 --- a/linker_scripts/object_script.txt +++ b/linker_scripts/object_script.txt @@ -1,4 +1,6 @@ -/* gameplay_keep */ +/* KEEPS */ + +/* gameplay_keep (segment 04) */ D_040008D0 = 0x040008D0; D_0400DEA8 = 0x0400DEA8; D_0400E2A8 = 0x0400E2A8; @@ -37,71 +39,119 @@ D_0408EFE0 = 0x0408EFE0; D_0408F3E0 = 0x0408F3E0; D_0408F7E0 = 0x0408F7E0; -/* gameplay_dangeon_keep */ +/* gameplay_dangeon_keep (segment 05) */ D_05018090 = 0x05018090; D_05017EA0 = 0x05017EA0; D_0501D980 = 0x0501D980; D_050219E0 = 0x050219E0; -/* gameplay_field_keep */ +/* gameplay_field_keep (segment 05) */ D_05000C40 = 0x05000C40; -object_ikana_obj_001100 = 0x06001100; -object_ikana_obj_001228 = 0x06001228; -object_fu_kaiten_0005D0 = 0x060005D0; -object_fu_kaiten_002D30 = 0x06002D30; +/* CODE */ +/* z_en_item00 */ +D_06001290 = 0x06001290; +D_06001470 = 0x06001470; + +/* z_rcp */ D_0E000048 = 0x0E000048; D_0E000088 = 0x0E000088; D_0E000140 = 0x0E000140; D_0E0001C8 = 0x0E0001C8; D_0E0002C8 = 0x0E0002C8; -D_06000500 = 0x06000500; -/* z_en_item00 */ -D_06001290 = 0x06001290; -D_06001470 = 0x06001470; +/* OVERLAYS */ -/* z_en_nnh */ -D_06001510 = 0x06001510; +/* z_arms_hook */ +D_0601D960 = 0x0601D960; -/* obj_hsstump */ -D_060003B8 = 0x060003B8; -D_060011B0 = 0x060011B0; +/* z_bg_ctower_gear */ +D_06010828 = 0x06010828; +D_06015F30 = 0x06015F30; +D_060160A0 = 0x060160A0; +D_06016E70 = 0x06016E70; +D_06017018 = 0x06017018; +D_06018118 = 0x06018118; +D_06018588 = 0x06018588; -/* en_encount2 */ -D_06000A00 = 0x6000A00; -D_06000D78 = 0x6000D78; -D_06002420 = 0x6002420; +/* z_bg_ctower_rot */ +D_060129D0 = 0x060129D0; +D_06012DA0 = 0x06012DA0; +D_060142E8 = 0x060142E8; +D_06017220 = 0x06017220; +D_06017410 = 0x06017410; +D_060174E0 = 0x060174E0; +D_06017650 = 0x06017650; -/* bg_haka_curtain */ +/* z_bg_fu_kaiten */ +object_fu_kaiten_0005D0 = 0x060005D0; +object_fu_kaiten_002D30 = 0x06002D30; + +/* z_bg_haka_curtain */ D_06001410 = 0x06001410; D_06001588 = 0x06001588; -/* obj_hana */ +/* z_bg_haka_tomb */ +D_060007B0 = 0x060007B0; +D_06000EE8 = 0x06000EE8; + +/* z_bg_icicle */ +D_060000D0 = 0x060000D0; +D_06000294 = 0x06000294; + +/* z_bg_ikana_ray */ +object_ikana_obj_001100 = 0x06001100; +object_ikana_obj_001228 = 0x06001228; + +/* z_bg_ikana_shutter */ +D_06000F28 = 0x06000F28; +D_06000CE8 = 0x06000CE8; + +/* z_bg_iknin_susceil */ +D_0600CBAC = 0x0600CBAC; +D_0600C670 = 0x0600C670; +D_0600C308 = 0x0600C308; + +/* z_bg_iknv_obj */ +D_060119D4 = 0x060119D4; +D_06012CA4 = 0x06012CA4; +D_06011880 = 0x06011880; +D_060129C8 = 0x060129C8; +D_06013058 = 0x06013058; + +/* z_bg_keikoku_spr */ +D_06000100 = 0x06000100; +D_060001F8 = 0x060001F8; +D_06000300 = 0x06000300; +D_060003F8 = 0x060003F8; D_06000500 = 0x06000500; +D_060005F8 = 0x060005F8; -/* obj_dinner */ -D_060011E0 = 0x060011E0; +/* z_bg_kin2_fence */ +D_06000828 = 0x06000828; +D_06000908 = 0x06000908; -/* bg_mbar */ -D_06000288 = 0x06000288; -D_060019B4 = 0x060019B4; +/* z_bg_ladder */ +D_060000A0 = 0x060000A0; +D_060001D8 = 0x060001D8; +D_060002D0 = 0x060002D0; +D_06000408 = 0x06000408; +D_06000500 = 0x06000500; +D_06000638 = 0x06000638; +D_06000730 = 0x06000730; +D_06000868 = 0x06000868; -/* dm_nb */ -D_06000990 = 0x06000990; -D_06008C40 = 0x06008C40; +/* z_bg_lbfshot */ +D_060014D8 = 0x060014D8; +D_06000228 = 0x06000228; + +/* z_bg_lotus */ +D_06000A20 = 0x06000A20; +D_06000040 = 0x06000040; -/* z_en_ending_hero5 */ -D_0600A850 = 0x0600A850; -D_06002FA0 = 0x06002FA0; -D_060070C0 = 0x060070C0; -D_06006FB0 = 0x06006FB0; -D_06006E80 = 0x06006E80; -D_06006D70 = 0x06006D70; -D_0600A390 = 0x0600A390; /* z_bg_market_step */ D_0601F050 = 0x0601F050; @@ -109,108 +159,13 @@ D_06018DA0 = 0x06018DA0; D_0601EF10 = 0x0601EF10; D_06018C60 = 0x06018C60; -/* z_en_rsn */ -D_06009220 = 0x06009220; -D_06009120 = 0x06009120; -D_06005458 = 0x06005458; -D_0600788C = 0x0600788C; +/* z_bg_mbar */ +D_06000288 = 0x06000288; +D_060019B4 = 0x060019B4; -/* z_en_toto */ -D_06000C80 = 0x06000C80; -D_06001324 = 0x06001324; -D_060016A4 = 0x060016A4; -D_06001DF0 = 0x06001DF0; -D_060022C8 = 0x060022C8; -D_060028B8 = 0x060028B8; -D_06002F20 = 0x06002F20; -D_06003AA8 = 0x06003AA8; -D_06008AE8 = 0x06008AE8; -D_0600A068 = 0x0600A068; -D_0600A468 = 0x0600A468; -D_0600A978 = 0x0600A978; -D_0600B3E0 = 0x0600B3E0; -D_0600B894 = 0x0600B894; -D_0600BC08 = 0x0600BC08; -D_0600C880 = 0x0600C880; - -/* en_ginko_man */ -object_ginko_skeleton = 0x0600C240; -object_ginko_limb15_dlist = 0x0600B1D8; -object_ginko_sitting_anim = 0x060043F0; -object_ginko_stamp_reach_anim = 0x06004F40; -object_ginko_floorsmacking_anim = 0x060008C0; -object_ginko_amazed_anim = 0x06004A7C; -object_ginko_advertising_anim = 0x06000AC4; - -/* z_bg_lbfshot */ -D_060014D8 = 0x060014D8; -D_06000228 = 0x06000228; - -/* en_ending_hero4 */ -D_0600D640 = 0x0600D640; -D_06002A84 = 0x06002A84; - -/* en_ending_hero3 */ -D_06007150 = 0x06007150; -D_06000E50 = 0x06000E50; - -/* en_ending_hero2 */ -D_06007908 = 0x06007908; +/* z_bg_tobira01 */ D_060011C0 = 0x060011C0; - -/* en_pametfrog */ -D_06000994 = 0x06000994; -D_06001B08 = 0x06001B08; -D_06001E14 = 0x06001E14; -D_06001F20 = 0x06001F20; -D_060030E4 = 0x060030E4; -D_0600347C = 0x0600347C; -D_060039C4 = 0x060039C4; -D_06003F28 = 0x06003F28; -D_06004298 = 0x06004298; -D_06004680 = 0x06004680; -D_06004894 = 0x06004894; -D_06004D50 = 0x06004D50; -D_060050B8 = 0x060050B8; -D_060052EC = 0x060052EC; -D_06005694 = 0x06005694; -D_06005D54 = 0x06005D54; -D_060066B4 = 0x060066B4; -D_060070C4 = 0x060070C4; -D_0600DF98 = 0x0600DF98; -D_0600F990 = 0x0600F990; -D_0600F048 = 0x0600F048; - -/* z_bg_haka_tomb */ -D_060007B0 = 0x060007B0; -D_06000EE8 = 0x06000EE8; - -/* z_en_dy_extra */ -D_0600DD40 = 0x0600DD40; -D_0600DEF0 = 0x0600DEF0; - -/* arms_hook */ -D_0601D960 = 0x0601D960; - -/* z_obj_boyo */ -D_06000300 = 0x06000300; -D_06000E88 = 0x06000E88; - -/* en_ending_hero */ -D_0600B0CC = 0x0600B0CC; -D_06000BE0 = 0x06000BE0; -D_06007350 = 0x06007350; -D_06009590 = 0x06009590; -D_06009F90 = 0x06009F90; -D_0600A790 = 0x0600A790; -D_0600AB90 = 0x0600AB90; -D_06007750 = 0x06007750; -D_0600A390 = 0x0600A390; -D_0600A490 = 0x0600A490; - -/* en_niw */ -D_06002530 = 0x06002530; -D_060000E8 = 0x060000E8; +D_06000088 = 0x06000088; /* dm_char07 */ D_06000100 = 0x06000100; @@ -231,67 +186,107 @@ D_06007918 = 0x06007918; D_060105F8 = 0x060105F8; D_06010D68 = 0x06010D68; -/* obj_lightswitch */ -D_06000C20 = 0x6000C20; -D_06000420 = 0x6000420; -D_06001420 = 0x6001420; - -/* z_bg_iknv_obj */ -D_060119D4 = 0x060119D4; -D_06012CA4 = 0x06012CA4; -D_06011880 = 0x06011880; -D_060129C8 = 0x060129C8; -D_06013058 = 0x06013058; - -/* z_obj_kepn_koya */ -D_0600805C = 0x0600805C; -D_06003478 = 0x06003478; - -/* en_po_fusen */ -D_06000040 = 0x06000040; -D_060024F0 = 0x060024F0; - -/* z_bg_iknin_susceil */ -D_0600CBAC = 0x0600CBAC; -D_0600C670 = 0x0600C670; -D_0600C308 = 0x0600C308; - -/* z_bg_keikoku_spr */ -D_06000100 = 0x06000100; -D_060001F8 = 0x060001F8; -D_06000300 = 0x06000300; -D_060003F8 = 0x060003F8; -D_06000500 = 0x06000500; -D_060005F8 = 0x060005F8; +/* z_dm_nb */ +D_06000990 = 0x06000990; +D_06008C40 = 0x06008C40; /* z_dm_sa */ D_06013328 = 0x06013328; D_0600CC94 = 0x0600CC94; -/* z_bg_kin2_fence */ -D_06000828 = 0x06000828; -D_06000908 = 0x06000908; +/* z_dm_statue */ +D_06001788 = 0x06001788; +D_06000520 = 0x06000520; -/* bg_ikana_shutter */ -D_06000F28 = 0x06000F28; -D_06000CE8 = 0x06000CE8; -/* z_obj_hgdoor */ -D_06001D10 = 0x06001D10; -D_060018C0 = 0x060018C0; -D_06001AB0 = 0x06001AB0; -D_06001BA8 = 0x06001BA8; -D_06001670 = 0x06001670; -D_06001768 = 0x06001768; +/* z_door_spiral */ +/* these are symbols from other objects based on the type of door */ +D_06000590 = 0x06000590; +D_060007A8 = 0x060007A8; +D_06000EA0 = 0x06000EA0; +D_060012C0 = 0x060012C0; +D_060014C8 = 0x060014C8; +D_06002110 = 0x06002110; +D_06004448 = 0x06004448; +D_060051B8 = 0x060051B8; +D_06006128 = 0x06006128; +D_06009278 = 0x06009278; +D_06012B70 = 0x06012B70; +D_06013EA8 = 0x06013EA8; -/* obj_funen */ -D_060000D0 = 0x060000D0; +/* z_eff_dust */ +D_04054A90 = 0x04054A90; -/* item_b_heart */ -D_06001290 = 0x06001290; -D_06001470 = 0x06001470; +/* z_en_cha */ +D_06000710 = 0x06000710; +D_06000958 = 0x06000958; -/* en_in */ +/* z_en_dy_extra */ +D_0600DD40 = 0x0600DD40; +D_0600DEF0 = 0x0600DEF0; + +/* z_en_encount2 */ +D_06000A00 = 0x6000A00; +D_06000D78 = 0x6000D78; +D_06002420 = 0x6002420; + +/* z_en_ending_hero */ +D_0600B0CC = 0x0600B0CC; +D_06000BE0 = 0x06000BE0; +D_06007350 = 0x06007350; +D_06009590 = 0x06009590; +D_06009F90 = 0x06009F90; +D_0600A790 = 0x0600A790; +D_0600AB90 = 0x0600AB90; +D_06007750 = 0x06007750; +D_0600A390 = 0x0600A390; +D_0600A490 = 0x0600A490; + +/* z_en_ending_hero2 */ +D_06007908 = 0x06007908; +D_060011C0 = 0x060011C0; + +/* z_en_ending_hero3 */ +D_06007150 = 0x06007150; +D_06000E50 = 0x06000E50; + +/* z_en_ending_hero4 */ +D_0600D640 = 0x0600D640; +D_06002A84 = 0x06002A84; + +/* z_en_ending_hero5 */ +D_0600A850 = 0x0600A850; +D_06002FA0 = 0x06002FA0; +D_060070C0 = 0x060070C0; +D_06006FB0 = 0x06006FB0; +D_06006E80 = 0x06006E80; +D_06006D70 = 0x06006D70; +D_0600A390 = 0x0600A390; + +/* z_en_fg */ +D_06001534 = 0x06001534; +D_060011C0 = 0x060011C0; +D_060007BC = 0x060007BC; +D_060059A0 = 0x060059A0; +D_0600B328 = 0x0600B328; +D_0600B338 = 0x0600B338; +D_0600B538 = 0x0600B538; + +/* z_en_firefly */ +D_060018B8 = 0x060018B8; +D_0600017C = 0x0600017C; +D_06001678 = 0x06001678; + +/* z_en_ginko_man */ +object_ginko_skeleton = 0x0600C240; +object_ginko_limb15_dlist = 0x0600B1D8; +object_ginko_sitting_anim = 0x060043F0; +object_ginko_stamp_reach_anim = 0x06004F40; +object_ginko_floorsmacking_anim = 0x060008C0; +object_ginko_amazed_anim = 0x06004A7C; +object_ginko_advertising_anim = 0x06000AC4; + +/* z_en_in */ D_06014EA8 = 0x06014EA8; D_06015E38 = 0x06015E38; D_06016484 = 0x06016484; @@ -340,67 +335,8 @@ D_06012A78 = 0x06012A78; D_060137A0 = 0x060137A0; D_06014860 = 0x06014860; -/* z_dm_statue */ -D_06001788 = 0x06001788; -D_06000520 = 0x06000520; - -/* door_spiral */ -/* these are symbols from other objects based on the type of door */ -D_06000590 = 0x06000590; -D_060007A8 = 0x060007A8; -D_06000EA0 = 0x06000EA0; -D_060012C0 = 0x060012C0; -D_060014C8 = 0x060014C8; -D_06002110 = 0x06002110; -D_06004448 = 0x06004448; -D_060051B8 = 0x060051B8; -D_06006128 = 0x06006128; -D_06009278 = 0x06009278; -D_06012B70 = 0x06012B70; -D_06013EA8 = 0x06013EA8; - -/* z_eff_dust */ -D_04054A90 = 0x04054A90; - -/* z_obj_visiblock */ -D_06000AD0 = 0x06000AD0; -D_06000140 = 0x06000140; - -/* en_minifrog */ -D_060007BC = 0x060007BC; -D_06001534 = 0x06001534; -D_060059A0 = 0x060059A0; -D_06005BA0 = 0x06005BA0; -D_0600B538 = 0x0600B538; - -/* bg_lotus */ -D_06000A20 = 0x06000A20; -D_06000040 = 0x06000040; - -/* obj_tokei_step */ -D_06000088 = 0x06000088; -D_06000968 = 0x06000968; - -/* z_bg_ctower_gear */ -D_06010828 = 0x06010828; -D_06015F30 = 0x06015F30; -D_060160A0 = 0x060160A0; -D_06016E70 = 0x06016E70; -D_06017018 = 0x06017018; -D_06018118 = 0x06018118; -D_06018588 = 0x06018588; - -/* z_bg_ctower_rot */ -D_060129D0 = 0x060129D0; -D_06012DA0 = 0x06012DA0; -D_060142E8 = 0x060142E8; -D_06017220 = 0x06017220; -D_06017410 = 0x06017410; -D_060174E0 = 0x060174E0; -D_06017650 = 0x06017650; - -/* z_en_warp_uzu */ -D_06000EC0 = 0x06000EC0; +/* z_en_jc_mato */ +D_06000390 = 0x06000390; /* z_en_ma_yts */ D_06009E58 = 0x06009E58; @@ -440,22 +376,93 @@ D_06010FC8 = 0x06010FC8; D_060117C8 = 0x060117C8; D_06011FC8 = 0x06011FC8; -/* en_cha */ -D_06000710 = 0x06000710; -D_06000958 = 0x06000958; +/* z_en_minifrog */ +D_060007BC = 0x060007BC; +D_06001534 = 0x06001534; +D_060059A0 = 0x060059A0; +D_06005BA0 = 0x06005BA0; +D_0600B538 = 0x0600B538; -/* z_obj_milk_bin */ -D_060004B0 = 0x060004B0; +/* en_niw */ +D_06002530 = 0x06002530; +D_060000E8 = 0x060000E8; -/* z_en_jc_mato */ -D_06000390 = 0x06000390; +/* z_en_nnh */ +D_06001510 = 0x06001510; +/* z_en_pametfrog */ +D_06000994 = 0x06000994; +D_06001B08 = 0x06001B08; +D_06001E14 = 0x06001E14; +D_06001F20 = 0x06001F20; +D_060030E4 = 0x060030E4; +D_0600347C = 0x0600347C; +D_060039C4 = 0x060039C4; +D_06003F28 = 0x06003F28; +D_06004298 = 0x06004298; +D_06004680 = 0x06004680; +D_06004894 = 0x06004894; +D_06004D50 = 0x06004D50; +D_060050B8 = 0x060050B8; +D_060052EC = 0x060052EC; +D_06005694 = 0x06005694; +D_06005D54 = 0x06005D54; +D_060066B4 = 0x060066B4; +D_060070C4 = 0x060070C4; +D_0600DF98 = 0x0600DF98; +D_0600F990 = 0x0600F990; +D_0600F048 = 0x0600F048; -/* z_bg_tobira01 */ -D_060011C0 = 0x060011C0; -D_06000088 = 0x06000088; +/* z_en_po_fusen */ +D_06000040 = 0x06000040; +D_060024F0 = 0x060024F0; -/* obj_bell */ +/* z_en_rsn */ +D_06009220 = 0x06009220; +D_06009120 = 0x06009120; +D_06005458 = 0x06005458; +D_0600788C = 0x0600788C; + +/* z_en_sb */ +D_06000194 = 0x06000194; +D_0600004C = 0x0600004C; +D_06000124 = 0x06000124; +D_06002C8C = 0x06002C8C; +D_060000B4 = 0x060000B4; +D_06002BF0 = 0x06002BF0; + +/* z_en_torch2 */ +D_0401C430 = 0x0401C430; +D_04048DF0 = 0x04048DF0; +D_04057B10 = 0x04057B10; +D_04089070 = 0x04089070; + +/* z_en_toto */ +D_06000C80 = 0x06000C80; +D_06001324 = 0x06001324; +D_060016A4 = 0x060016A4; +D_06001DF0 = 0x06001DF0; +D_060022C8 = 0x060022C8; +D_060028B8 = 0x060028B8; +D_06002F20 = 0x06002F20; +D_06003AA8 = 0x06003AA8; +D_06008AE8 = 0x06008AE8; +D_0600A068 = 0x0600A068; +D_0600A468 = 0x0600A468; +D_0600A978 = 0x0600A978; +D_0600B3E0 = 0x0600B3E0; +D_0600B894 = 0x0600B894; +D_0600BC08 = 0x0600BC08; +D_0600C880 = 0x0600C880; + +/* z_en_warp_uzu */ +D_06000EC0 = 0x06000EC0; + +/* z_item_b_heart */ +D_06001290 = 0x06001290; +D_06001470 = 0x06001470; + +/* z_obj_bell */ D_06001BA8 = 0x06001BA8; D_06000840 = 0x06000840; D_06000570 = 0x06000570; @@ -464,55 +471,63 @@ D_060008D0 = 0x060008D0; D_06000960 = 0x06000960; D_060007A8 = 0x060007A8; -/* z_en_fg */ -D_06001534 = 0x06001534; -D_060011C0 = 0x060011C0; -D_060007BC = 0x060007BC; -D_060059A0 = 0x060059A0; -D_0600B328 = 0x0600B328; -D_0600B338 = 0x0600B338; -D_0600B538 = 0x0600B538; +/* z_obj_boyo */ +D_06000300 = 0x06000300; +D_06000E88 = 0x06000E88; -/* z_bg_ladder */ -D_060000A0 = 0x060000A0; -D_060001D8 = 0x060001D8; -D_060002D0 = 0x060002D0; -D_06000408 = 0x06000408; -D_06000500 = 0x06000500; -D_06000638 = 0x06000638; -D_06000730 = 0x06000730; -D_06000868 = 0x06000868; +/* z_obj_dinner */ +D_060011E0 = 0x060011E0; -/* z_en_torch2 */ -D_0401C430 = 0x0401C430; -D_04048DF0 = 0x04048DF0; -D_04057B10 = 0x04057B10; -D_04089070 = 0x04089070; - -/* z_obj_moon_stone */ -D_06001C60 = 0x06001C60; -D_06000D78 = 0x06000D78; -D_06000C80 = 0x06000C80; - -/* z_bg_icicle */ +/* z_obj_funen */ D_060000D0 = 0x060000D0; -D_06000294 = 0x06000294; /* z_obj_ghaka */ D_06001A20 = 0x06001A20; D_06001980 = 0x06001980; D_06003CD0 = 0x06003CD0; +/* z_obj_hana */ +D_06000500 = 0x06000500; + +/* z_obj_hgdoor */ +D_06001D10 = 0x06001D10; +D_060018C0 = 0x060018C0; +D_06001AB0 = 0x06001AB0; +D_06001BA8 = 0x06001BA8; +D_06001670 = 0x06001670; +D_06001768 = 0x06001768; + +/* z_obj_hsstump */ +D_060003B8 = 0x060003B8; +D_060011B0 = 0x060011B0; + +/* z_obj_kepn_koya */ +D_0600805C = 0x0600805C; +D_06003478 = 0x06003478; + /* z_obj_kibako */ D_05007890 = 0x05007890; D_05007980 = 0x05007980; D_06001180 = 0x06001180; D_06001A70 = 0x06001A70; -/* z_en_sb */ -D_06000194 = 0x06000194; -D_0600004C = 0x0600004C; -D_06000124 = 0x06000124; -D_06002C8C = 0x06002C8C; -D_060000B4 = 0x060000B4; -D_06002BF0 = 0x06002BF0; \ No newline at end of file +/* z_obj_lightswitch */ +D_06000C20 = 0x6000C20; +D_06000420 = 0x6000420; +D_06001420 = 0x6001420; + +/* z_obj_milk_bin */ +D_060004B0 = 0x060004B0; + +/* z_obj_moon_stone */ +D_06001C60 = 0x06001C60; +D_06000D78 = 0x06000D78; +D_06000C80 = 0x06000C80; + +/* z_obj_tokei_step */ +D_06000088 = 0x06000088; +D_06000968 = 0x06000968; + +/* z_obj_visiblock */ +D_06000AD0 = 0x06000AD0; +D_06000140 = 0x06000140; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 2ceef01592..4a947be9cc 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -846,7 +846,7 @@ void Actor_FreeOverlay(ActorOverlay* entry) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800BDCF4.asm") -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800BDFB0.asm") +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//Actor_Noop.asm") #pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800BDFC0.asm") diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c index cba6612ecf..99d77a0db6 100644 --- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c +++ b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c @@ -17,7 +17,7 @@ const ActorInit Bg_Inibs_Movebg_InitVars = { sizeof(BgInibsMovebg), (ActorFunc)BgInibsMovebg_Init, (ActorFunc)BgInibsMovebg_Destroy, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)BgInibsMovebg_Draw, }; */ diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c index 1adce24fc7..673f41e205 100644 --- a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c +++ b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c @@ -16,7 +16,7 @@ const ActorInit Bg_Lbfshot_InitVars = { sizeof(BgLbfshot), (ActorFunc)BgLbfshot_Init, (ActorFunc)BgLbfshot_Destroy, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)BgLbfshot_Draw, }; diff --git a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c index bb77d56402..11cbe33743 100644 --- a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c +++ b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c @@ -14,8 +14,8 @@ const ActorInit Bg_Market_Step_InitVars = { OBJECT_MARKET_OBJ, sizeof(BgMarketStep), (ActorFunc)BgMarketStep_Init, - (ActorFunc)func_800BDFB0, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, + (ActorFunc)Actor_Noop, (ActorFunc)BgMarketStep_Draw, }; diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c index 7340af66d7..6ff4e79385 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -1,4 +1,11 @@ +/* + * File: z_en_firefly.c + * Overlay: ovl_En_Firefly + * Description: Keese (Normal, Fire, Ice) + */ + #include "z_en_firefly.h" +#include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" #define FLAGS 0x00005005 @@ -9,7 +16,33 @@ void EnFirefly_Destroy(Actor* thisx, GlobalContext* globalCtx); void EnFirefly_Update(Actor* thisx, GlobalContext* globalCtx); void EnFirefly_Draw(Actor* thisx, GlobalContext* globalCtx); -/* +void EnFirefly_FlyIdle(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_Fall(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_SetupDie(EnFirefly* this); +void EnFirefly_Die(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_SetupDiveAttack(EnFirefly* this); +void EnFirefly_DiveAttack(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_Rebound(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_SetupFlyAway(EnFirefly* this); +void EnFirefly_FlyAway(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_Stunned(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_SetupPerch(EnFirefly* this); +void EnFirefly_Perch(EnFirefly* this, GlobalContext* globalCtx); +void EnFirefly_SetupDisturbDiveAttack(EnFirefly* this); +void EnFirefly_DisturbDiveAttack(EnFirefly* this, GlobalContext* globalCtx); + +typedef enum { + /* 0 */ KEESE_FIRE, + /* 3 */ KEESE_NORMAL = 3, + /* 4 */ KEESE_ICE +} KeeseCurrentType; + +typedef enum { + /* 0 */ KEESE_AURA_NONE, + /* 1 */ KEESE_AURA_FIRE, + /* 2 */ KEESE_AURA_ICE +} KeeseAuraType; + const ActorInit En_Firefly_InitVars = { ACTOR_EN_FIREFLY, ACTORCAT_ENEMY, @@ -21,64 +54,756 @@ const ActorInit En_Firefly_InitVars = { (ActorFunc)EnFirefly_Update, (ActorFunc)EnFirefly_Draw, }; -*/ -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/EnFirefly_Init.asm") +static ColliderSphereInit sSphereInit = { + { + COLTYPE_HIT3, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_SPHERE, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x01, 0x08 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_HARD, + BUMP_ON, + OCELEM_ON, + }, + { 1, { { 0, 1000, 0 }, 15 }, 100 }, +}; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/EnFirefly_Destroy.asm") +static CollisionCheckInfoInit sColChkInfoInit = { 1, 10, 10, 10 }; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_808798C4.asm") +static DamageTable sDamageTable = { + 0x10, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x22, 0x32, 0x42, 0x01, 0x01, + 0x01, 0x02, 0x10, 0x50, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879930.asm") +static InitChainEntry sInitChain[] = { + ICHAIN_VEC3F_DIV1000(scale, 5, ICHAIN_CONTINUE), + ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_F32(targetArrowOffset, 4000, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879950.asm") +extern AnimationHeader D_0600017C; +extern SkeletonHeader D_060018B8; +extern Gfx D_06001678[]; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087997C.asm") +void EnFirefly_Init(Actor* thisx, GlobalContext* globalCtx) { + EnFirefly* this = THIS; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879A98.asm") + Actor_ProcessInitChain(&this->actor, sInitChain); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + SkelAnime_Init(globalCtx, &this->skelAnime, &D_060018B8, &D_0600017C, this->jointTable, this->morphTable, 28); + Collider_InitAndSetSphere(globalCtx, &this->collider, &this->actor, &sSphereInit); + CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879C14.asm") + if (this->actor.params & KEESE_INVISIBLE) { + this->actor.flags |= 0x80; + this->actor.params = KEESE_GET_MAIN_TYPE(thisx); + this->isInvisible = true; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879CC0.asm") + if (this->actor.params == KEESE_FIRE_FLY) { + this->auraType = KEESE_AURA_FIRE; + this->timer = Rand_S16Offset(20, 60); + this->actor.shape.rot.x = 0x1554; + this->actor.hintId = 0x11; // Fire Keese + this->maxAltitude = this->actor.home.pos.y; + this->actionFunc = EnFirefly_FlyIdle; + } else if (this->actor.params == KEESE_ICE_FLY) { + this->auraType = KEESE_AURA_ICE; + this->collider.info.toucher.effect = 2; // Freeze + this->actor.hintId = 0x56; // Ice Keese + this->maxAltitude = this->actor.home.pos.y + 100.0f; + this->actionFunc = EnFirefly_FlyIdle; + } else { + this->auraType = KEESE_AURA_NONE; + this->collider.info.toucher.effect = 0; // Nothing + this->actor.hintId = 0x12; // Keese + this->maxAltitude = this->actor.home.pos.y + 100.0f; + this->actionFunc = EnFirefly_Perch; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_80879F28.asm") + this->currentType = this->actor.params; + this->collider.dim.worldSphere.radius = sSphereInit.dim.modelSphere.radius; +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A110.asm") +void EnFirefly_Destroy(Actor* thisx, GlobalContext* globalCtx) { + EnFirefly* this = THIS; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A1C8.asm") + Collider_DestroySphere(globalCtx, &this->collider); +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A1EC.asm") +void EnFirefly_SpawnIceEffects(EnFirefly* this, GlobalContext* globalCtx) { + if (this->unk_18F == 0xA) { + this->unk_18F = 0; + this->unk_2E8.x = 0.0f; + func_800BF7CC(globalCtx, &this->actor, &this->unk_2F8, 3, 2, 0.2f, 0.2f); + } +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A268.asm") +void EnFirefly_Extinguish(EnFirefly* this) { + this->currentType = KEESE_NORMAL; + this->collider.info.toucher.effect = 0; // Nothing + this->auraType = KEESE_AURA_NONE; + this->actor.hintId = 0x12; // Keese +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A2D8.asm") +void EnFirefly_Ignite(EnFirefly* this) { + if (this->actor.params == KEESE_FIRE_FLY) { + this->currentType = KEESE_FIRE; + this->collider.info.toucher.effect = 1; // Fire + this->auraType = KEESE_AURA_FIRE; + this->actor.hintId = 0x11; // Fire Keese + } +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A50C.asm") +s32 EnFirefly_ReturnToPerch(EnFirefly* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + f32 distFromHome; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A548.asm") + if (this->actor.params != KEESE_NORMAL_PERCH) { + return false; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A5DC.asm") + if (Actor_XZDistanceToPoint(&player->actor, &this->actor.home.pos) > 300.0f) { + distFromHome = Actor_DistanceToPoint(&this->actor, &this->actor.home.pos); -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A60C.asm") + if (distFromHome < 5.0f) { + EnFirefly_SetupPerch(this); + } else { + if (distFromHome * 0.05f < 1.0f) { + this->actor.speedXZ *= distFromHome * 0.05f; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A774.asm") + Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300); + Math_ScaledStepToS(&this->actor.shape.rot.x, + Actor_PitchToPoint(&this->actor, &this->actor.home.pos) + 0x1554, 0x100); + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A818.asm") + return true; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A8FC.asm") + return false; +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A920.asm") +s32 EnFirefly_SeekTorch(EnFirefly* this, GlobalContext* globalCtx) { + ObjSyokudai* findTorch = (ObjSyokudai*)globalCtx->actorCtx.actorList[ACTORCAT_PROP].first; + ObjSyokudai* closestTorch = NULL; + f32 currentMinDist = 35000.0f; + f32 currentDist; + Vec3f flamePos; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087A9E0.asm") + if ((this->actor.params != KEESE_FIRE_FLY) || (this->currentType != KEESE_NORMAL)) { + return false; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087AA1C.asm") + while (findTorch != NULL) { + if ((findTorch->actor.id == ACTOR_OBJ_SYOKUDAI) && (findTorch->unk_1DC != 0)) { + currentDist = Actor_DistanceBetweenActors(&this->actor, &findTorch->actor); + if (currentDist < currentMinDist) { + currentMinDist = currentDist; + closestTorch = findTorch; + } + } + findTorch = (ObjSyokudai*)findTorch->actor.next; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087AAF4.asm") + if (closestTorch != NULL) { + flamePos.x = closestTorch->actor.world.pos.x; + flamePos.y = closestTorch->actor.world.pos.y + 52.0f + 30.0f; + flamePos.z = closestTorch->actor.world.pos.z; -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/EnFirefly_Update.asm") + if (Actor_DistanceToPoint(&this->actor, &flamePos) < 15.0f) { + EnFirefly_Ignite(this); + } else { + Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &closestTorch->actor), + 0x300); + Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &flamePos) + 0x1554, 0x100); + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087AF48.asm") + return true; + } -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/func_8087AF98.asm") + return false; +} -#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_En_Firefly_0x808796F0/EnFirefly_Draw.asm") +void EnFirefly_SetupFlyIdle(EnFirefly* this) { + this->timer = Rand_S16Offset(70, 100); + this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 1.5f; + Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300); + this->targetPitch = ((this->maxAltitude < this->actor.world.pos.y) ? 0xC00 : -0xC00) + 0x1554; + this->skelAnime.animPlaybackSpeed = 1.0f; + this->actionFunc = EnFirefly_FlyIdle; +} + +void EnFirefly_FlyIdle(EnFirefly* this, GlobalContext* globalCtx) { + s32 isSkelAnimeUpdated; + f32 rand; + + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + if (this->timer != 0) { + this->timer--; + } + + isSkelAnimeUpdated = func_801378B8(&this->skelAnime, 0.0f); + this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 1.5f; + + if (!EnFirefly_ReturnToPerch(this, globalCtx) && !EnFirefly_SeekTorch(this, globalCtx)) { + if (isSkelAnimeUpdated) { + rand = Rand_ZeroOne(); + + if (rand < 0.5f) { + Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), + 0x300); + } else if (rand < 0.8f) { + this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(1536.0f); + } + + // Climb if too close to ground + if (this->actor.world.pos.y < this->actor.floorHeight + 20.0f) { + this->targetPitch = 0x954; + // Descend if above maxAltitude + } else if (this->maxAltitude < this->actor.world.pos.y) { + this->targetPitch = 0x2154; + // Otherwise ascend or descend at random, biased towards ascending + } else if (Rand_ZeroOne() > 0.35f) { + this->targetPitch = 0x954; + } else { + this->targetPitch = 0x2154; + } + } else { + if (this->actor.bgCheckFlags & 1) { + this->targetPitch = 0x954; + } else if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) { + this->targetPitch = 0x2154; + } + } + + Math_ScaledStepToS(&this->actor.shape.rot.x, this->targetPitch, 0x100); + } + + if (this->actor.bgCheckFlags & 8) { + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300); + } + + if ((this->timer == 0) && (this->actor.xzDistToPlayer < 200.0f) && + (Player_GetMask(globalCtx) != PLAYER_MASK_STONE_MASK)) { + EnFirefly_SetupDiveAttack(this); + } +} + +void EnFirefly_SetupFall(EnFirefly* this, GlobalContext* globalCtx) { + this->timer = 40; + this->actor.velocity.y = 0.0f; + SkelAnime_ChangeAnim(&this->skelAnime, &D_0600017C, 0.0f, 6.0f, 6.0f, 2, 0.0f); + Audio_PlayActorSound2(&this->actor, NA_SE_EN_FFLY_DEAD); + this->actor.flags |= 0x10; + + if (this->isInvisible) { + func_800BCB70(&this->actor, 0x4000, 255, 0x2000, 40); + } else { + func_800BCB70(&this->actor, 0x4000, 255, 0, 40); + } + + if (this->actor.colChkInfo.damageEffect == 3) { + this->unk_18F = 0xA; + this->unk_2E8.x = 1.0f; + this->unk_2E8.y = 0.55f; + this->unk_2E8.z = 0.82500005f; + } else if (this->actor.colChkInfo.damageEffect == 4) { + this->unk_18F = 0x14; + this->unk_2E8.x = 4.0f; + this->unk_2E8.y = 0.55f; + Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x, + this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0, 3); + } else if (this->actor.colChkInfo.damageEffect == 2) { + this->unk_18F = 0; + this->unk_2E8.x = 4.0f; + this->unk_2E8.y = 0.55f; + } + + if (this->unk_2E8.x > 0.0f) { + this->auraType = KEESE_AURA_NONE; + } + + if (this->actor.flags & 0x8000) { + this->actor.speedXZ = 0.0f; + } + + this->actionFunc = EnFirefly_Fall; +} + +// Fall to the ground after being hit +void EnFirefly_Fall(EnFirefly* this, GlobalContext* globalCtx) { + this->actor.colorFilterTimer = 40; + Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f); + + if (!(this->actor.flags & 0x8000)) { + if (this->unk_18F != 0xA) { + Math_ScaledStepToS(&this->actor.shape.rot.x, 0x6800, 0x200); + this->actor.shape.rot.y -= 0x300; + } + + if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) { + EnFirefly_SpawnIceEffects(this, globalCtx); + EnFirefly_SetupDie(this); + } + } +} + +void EnFirefly_SetupDie(EnFirefly* this) { + this->timer = 15; + this->actor.speedXZ = 0.0f; + this->actionFunc = EnFirefly_Die; +} + +// Hit the ground or burn up, spawn drops +void EnFirefly_Die(EnFirefly* this, GlobalContext* globalCtx) { + if (this->timer != 0) { + this->timer--; + } + + Math_StepToF(&this->actor.scale.x, 0.0f, 0.00034f); + this->actor.scale.y = this->actor.scale.z = this->actor.scale.x; + + if (this->timer == 0) { + Item_DropCollectibleRandom(globalCtx, &this->actor, &this->actor.world.pos, 0xA0); + Actor_MarkForDeath(&this->actor); + } +} + +void EnFirefly_SetupDiveAttack(EnFirefly* this) { + this->timer = Rand_S16Offset(70, 100); + this->skelAnime.animPlaybackSpeed = 1.0f; + this->targetPitch = ((this->actor.yDistToPlayer > 0.0f) ? -0xC00 : 0xC00) + 0x1554; + this->actionFunc = EnFirefly_DiveAttack; +} + +void EnFirefly_DiveAttack(EnFirefly* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + Vec3f preyPos; + + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + + if (this->timer != 0) { + this->timer--; + } + + Math_StepToF(&this->actor.speedXZ, 4.0f, 0.5f); + + if (this->actor.bgCheckFlags & 8) { + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300); + Math_ScaledStepToS(&this->actor.shape.rot.x, this->targetPitch, 0x100); + } else if (Actor_IsActorFacingLink(&this->actor, 0x2800)) { + if (func_801378B8(&this->skelAnime, 4.0f)) { + this->skelAnime.animPlaybackSpeed = 0.0f; + this->skelAnime.animCurrentFrame = 4.0f; + } + + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xC00, 0x300); + preyPos.x = player->actor.world.pos.x; + preyPos.y = player->actor.world.pos.y + 20.0f; + preyPos.z = player->actor.world.pos.z; + Math_SmoothStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &preyPos) + 0x1554, 2, 0x400, + 0x100); + } else { + this->skelAnime.animPlaybackSpeed = 1.5f; + if (this->actor.xzDistToPlayer > 80.0f) { + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xC00, 0x300); + } + + if (this->actor.bgCheckFlags & 1) { + this->targetPitch = 0x954; + } + + if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) { + this->targetPitch = 0x2154; + } else { + this->targetPitch = 0x954; + } + + Math_ScaledStepToS(&this->actor.shape.rot.x, this->targetPitch, 0x100); + } + + if ((this->timer == 0) || (Player_GetMask(globalCtx) == PLAYER_MASK_STONE_MASK) || (player->stateFlags2 & 0x80) || + (player->actor.freezeTimer > 0)) { + EnFirefly_SetupFlyAway(this); + } +} + +void EnFirefly_SetupRebound(EnFirefly* this) { + this->actor.world.rot.x = 0x7000; + this->timer = 18; + this->skelAnime.animPlaybackSpeed = 1.0f; + this->actor.speedXZ = 2.5f; + this->actionFunc = EnFirefly_Rebound; +} + +// Knockback after hitting player +void EnFirefly_Rebound(EnFirefly* this, GlobalContext* globalCtx) { + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x100); + Math_StepToF(&this->actor.velocity.y, 0.0f, 0.4f); + if (Math_StepToF(&this->actor.speedXZ, 0.0f, 0.15f)) { + if (this->timer != 0) { + this->timer--; + } + + if (this->timer == 0) { + EnFirefly_SetupFlyAway(this); + } + } +} + +void EnFirefly_SetupFlyAway(EnFirefly* this) { + this->timer = 150; + this->targetPitch = 0x954; + this->actionFunc = EnFirefly_FlyAway; + this->skelAnime.animPlaybackSpeed = 1.0f; +} + +void EnFirefly_FlyAway(EnFirefly* this, GlobalContext* globalCtx) { + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + + if (this->timer != 0) { + this->timer--; + } + + if ((fabsf(this->actor.world.pos.y - this->maxAltitude) < 10.0f) && + (Math_Vec3f_DistXZ(&this->actor.world.pos, &this->actor.home.pos) < 20.0f) || + (this->timer == 0)) { + EnFirefly_SetupFlyIdle(this); + return; + } + + Math_StepToF(&this->actor.speedXZ, 3.0f, 0.3f); + + if (this->actor.bgCheckFlags & 1) { + this->targetPitch = 0x954; + } else if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) { + this->targetPitch = 0x2154; + } else { + this->targetPitch = 0x954; + } + + if (this->actor.bgCheckFlags & 8) { + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300); + } else { + Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300); + } + + Math_ScaledStepToS(&this->actor.shape.rot.x, this->targetPitch, 0x100); +} + +void EnFirefly_SetupStunned(EnFirefly* this) { + if (this->isInvisible) { + func_800BCB70(&this->actor, 0, 255, 0x2000, this->timer); + } else { + func_800BCB70(&this->actor, 0, 255, 0, this->timer); + } + + if (this->actionFunc != EnFirefly_Stunned) { + this->actor.velocity.y = 0.0f; + this->actor.speedXZ = 0.0f; + } + + this->auraType = KEESE_AURA_NONE; + Audio_PlayActorSound2(&this->actor, NA_SE_EN_COMMON_FREEZE); + this->actionFunc = EnFirefly_Stunned; +} + +void EnFirefly_Stunned(EnFirefly* this, GlobalContext* globalCtx) { + Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1554, 0x100); + if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) { + if (this->timer != 0) { + this->timer--; + } + + if (this->timer == 0) { + if (this->currentType == KEESE_FIRE) { + this->auraType = KEESE_AURA_FIRE; + } else if (this->currentType == KEESE_ICE) { + this->auraType = KEESE_AURA_ICE; + } + + EnFirefly_SetupFlyIdle(this); + } + } else { + this->actor.colorFilterTimer = 40; + + if (this->unk_2E8.x > 0.0f) { + this->unk_2E8.x = 2.0f; + } + } +} + +void EnFirefly_SetupPerch(EnFirefly* this) { + this->timer = 1; + this->actionFunc = EnFirefly_Perch; + this->actor.speedXZ = 0.0f; +} + +// When perching, sit on collision and flap at random intervals +void EnFirefly_Perch(EnFirefly* this, GlobalContext* globalCtx) { + Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x100); + if (this->timer != 0) { + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + if (func_801378B8(&this->skelAnime, 6.0f)) { + this->timer--; + } + } else if (Rand_ZeroOne() < 0.02f) { + this->timer = 1; + } + + if (this->actor.xzDistToPlayer < 120.0f) { + EnFirefly_SetupDisturbDiveAttack(this); + } +} + +void EnFirefly_SetupDisturbDiveAttack(EnFirefly* this) { + this->skelAnime.animPlaybackSpeed = 3.0f; + this->actor.shape.rot.x = 0x1554; + this->actor.shape.rot.y = this->actor.yawTowardsPlayer; + this->timer = 50; + this->actor.speedXZ = 3.0f; + this->actionFunc = EnFirefly_DisturbDiveAttack; +} + +void EnFirefly_DisturbDiveAttack(EnFirefly* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + Vec3f preyPos; + + SkelAnime_FrameUpdateMatrix(&this->skelAnime); + + if (this->timer != 0) { + this->timer--; + } + if (this->timer < 40) { + Math_ScaledStepToS(&this->actor.shape.rot.x, -0xAAC, 0x100); + } else { + preyPos.x = player->actor.world.pos.x; + preyPos.y = player->actor.world.pos.y + 20.0f; + preyPos.z = player->actor.world.pos.z; + Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &preyPos) + 0x1554, 0x100); + Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x300); + } + + if (this->timer == 0) { + EnFirefly_SetupFlyIdle(this); + } +} + +void EnFirefly_UpdateDamage(EnFirefly* this, GlobalContext* globalCtx) { + if (this->collider.base.acFlags & AC_HIT) { + this->collider.base.acFlags &= ~AC_HIT; + func_800BE258(&this->actor, &this->collider.info); + + if (this->actor.colChkInfo.damageEffect == 1) { + this->timer = 40; + EnFirefly_SetupStunned(this); + } else if (this->actor.colChkInfo.damageEffect == 5) { + this->timer = 40; + this->unk_18F = 0x1F; + this->unk_2E8.x = 2.0f; + this->unk_2E8.y = 0.55f; + EnFirefly_SetupStunned(this); + } else { + func_800BBA88(globalCtx, &this->actor); + this->actor.colChkInfo.health = 0; + this->actor.flags &= ~1; + + // Negate effects of fire on Fire Keese and Ice on Ice Keese + if (((this->currentType == KEESE_FIRE) && (this->actor.colChkInfo.damageEffect == 2)) || + ((this->currentType == KEESE_ICE) && (this->actor.colChkInfo.damageEffect == 3))) { + this->actor.colChkInfo.damageEffect = 0; + } + + EnFirefly_SetupFall(this, globalCtx); + } + } +} + +void EnFirefly_Update(Actor* thisx, GlobalContext* globalCtx2) { + GlobalContext* globalCtx = globalCtx2; + EnFirefly* this = THIS; + + if (this->collider.base.atFlags & AT_HIT) { + this->collider.base.atFlags &= ~AT_HIT; + Audio_PlayActorSound2(&this->actor, NA_SE_EN_FFLY_ATTACK); + + if (this->currentType != KEESE_NORMAL) { + EnFirefly_Extinguish(this); + } + + if (this->actionFunc != EnFirefly_DisturbDiveAttack) { + EnFirefly_SetupRebound(this); + } + } + + EnFirefly_UpdateDamage(this, globalCtx); + this->actionFunc(this, globalCtx); + + if (!(this->actor.flags & 0x8000)) { + if ((this->actor.colChkInfo.health == 0) || (this->actionFunc == EnFirefly_Stunned)) { + Actor_SetVelocityAndMoveYRotationAndGravity(&this->actor); + } else { + if (this->actionFunc != EnFirefly_Rebound) { + this->actor.world.rot.x = 0x1554 - this->actor.shape.rot.x; + } + + Actor_SetVelocityAndMoveXYRotation(&this->actor); + } + } + + Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 10.0f, 10.0f, 15.0f, 7); + this->collider.dim.worldSphere.center.x = this->actor.world.pos.x; + this->collider.dim.worldSphere.center.y = (s32)this->actor.world.pos.y + 10; + this->collider.dim.worldSphere.center.z = this->actor.world.pos.z; + + if ((this->actionFunc == EnFirefly_DiveAttack) || (this->actionFunc == EnFirefly_DisturbDiveAttack)) { + CollisionCheck_SetAT(globalCtx, &globalCtx->colCheckCtx, &this->collider.base); + } + + if (this->actor.colChkInfo.health != 0) { + CollisionCheck_SetAC(globalCtx, &globalCtx->colCheckCtx, &this->collider.base); + this->actor.world.rot.y = this->actor.shape.rot.y; + + if (func_801378B8(&this->skelAnime, 5.0f)) { + Audio_PlayActorSound2(&this->actor, NA_SE_EN_FFLY_FLY); + } + } + + CollisionCheck_SetOC(globalCtx, &globalCtx->colCheckCtx, &this->collider.base); + + if (this->unk_2E8.x > 0.0f) { + if (this->unk_18F != 0xA) { + Math_StepToF(&this->unk_2E8.x, 0.0f, 0.05f); + this->unk_2E8.y = (this->unk_2E8.x + 1.0f) * 0.275f; + this->unk_2E8.y = CLAMP_MAX(this->unk_2E8.y, 0.55f); + } else if (!Math_StepToF(&this->unk_2E8.z, 0.55f, 0.01375f)) { + func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + } + } + + this->actor.focus.pos.x = + 10.0f * Math_SinS(this->actor.shape.rot.x) * Math_SinS(this->actor.shape.rot.y) + this->actor.world.pos.x; + this->actor.focus.pos.y = 10.0f * Math_CosS(this->actor.shape.rot.x) + this->actor.world.pos.y; + this->actor.focus.pos.z = + 10.0f * Math_SinS(this->actor.shape.rot.x) * Math_CosS(this->actor.shape.rot.y) + this->actor.world.pos.z; +} + +s32 EnFirefly_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx, Gfx** gfx) { + EnFirefly* this = THIS; + + if (this->isInvisible && (globalCtx->actorCtx.unk4 != 0x64)) { + *dList = NULL; + } else if (limbIndex == 1) { + pos->y += 2300.0f; + } + return false; +} + +void EnFirefly_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { + static Color_RGBA8 fireAuraPrimColor = { 255, 255, 100, 255 }; + static Color_RGBA8 fireAuraEnvColor = { 255, 50, 0, 0 }; + static Color_RGBA8 iceAuraPrimColor = { 100, 200, 255, 255 }; + static Color_RGBA8 iceAuraEnvColor = { 0, 0, 255, 0 }; + static Vec3f auraVelocity = { 0.0f, 0.5f, 0.0f }; + static Vec3f auraAccel = { 0.0f, 0.5f, 0.0f }; + Vec3f auraPos; + Color_RGBA8* auraPrimColor; + Color_RGBA8* auraEnvColor; + s16 auraScaleStep; + s16 auraLife; + s32 pad; + EnFirefly* this = THIS; + + if ((this->currentType != KEESE_FIRE) && (limbIndex == 27)) { + gSPDisplayList((*gfx)++, D_06001678); + } else if ((this->unk_2F4 != globalCtx->gameplayFrames) && + ((this->auraType == KEESE_AURA_FIRE) || (this->auraType == KEESE_AURA_ICE)) && + ((limbIndex == 15) || (limbIndex == 21))) { + if (this->actionFunc != EnFirefly_Die) { + SysMatrix_GetStateTranslation(&auraPos); + auraPos.x += Rand_ZeroFloat(5.0f); + auraPos.y += Rand_ZeroFloat(5.0f); + auraPos.z += Rand_ZeroFloat(5.0f); + auraScaleStep = -40; + auraLife = 3; + } else { + if (limbIndex == 15) { + auraPos.x = Math_SinS(9100 * this->timer) * this->timer + this->actor.world.pos.x; + auraPos.z = Math_CosS(9100 * this->timer) * this->timer + this->actor.world.pos.z; + } else { + auraPos.x = this->actor.world.pos.x - Math_SinS(9100 * this->timer) * this->timer; + auraPos.z = this->actor.world.pos.z - Math_CosS(9100 * this->timer) * this->timer; + } + + auraPos.y = this->actor.world.pos.y + (15 - this->timer) * 1.5f; + auraScaleStep = -5; + auraLife = 10; + } + + if (this->auraType == KEESE_AURA_FIRE) { + auraPrimColor = &fireAuraPrimColor; + auraEnvColor = &fireAuraEnvColor; + } else { + auraPrimColor = &iceAuraPrimColor; + auraEnvColor = &iceAuraEnvColor; + } + + func_800B0F80(globalCtx, &auraPos, &auraVelocity, &auraAccel, auraPrimColor, auraEnvColor, 250, auraScaleStep, + auraLife); + } + + if (limbIndex == 15) { + SysMatrix_GetStateTranslation(&this->unk_2F8); + } else if (limbIndex == 21) { + SysMatrix_GetStateTranslation(&this->unk_304); + } else if (limbIndex == 10) { + SysMatrix_GetStateTranslation(&this->unk_310); + } +} + +void EnFirefly_Draw(Actor* thisx, GlobalContext* globalCtx) { + s32 pad; + EnFirefly* this = THIS; + Gfx* gfx; + + OPEN_DISPS(globalCtx->state.gfxCtx); + + if (this->isInvisible) { + gfx = POLY_XLU_DISP; + } else { + gfx = POLY_OPA_DISP; + } + + gSPDisplayList(gfx, &sSetupDL[150]); + + if (this->currentType == KEESE_FIRE) { + gDPSetEnvColor(gfx + 1, 0, 0, 0, 0); + } else { + gDPSetEnvColor(gfx + 1, 0, 0, 0, 255); + } + + gfx = SkelAnime_Draw2(globalCtx, this->skelAnime.skeleton, this->skelAnime.limbDrawTbl, EnFirefly_OverrideLimbDraw, + EnFirefly_PostLimbDraw, &this->actor, gfx + 2); + if (this->isInvisible) { + POLY_XLU_DISP = gfx; + } else { + POLY_OPA_DISP = gfx; + } + + func_800BE680(globalCtx, NULL, &this->unk_2F8, 3, this->unk_2E8.y * this->actor.scale.y * 200.0f, this->unk_2E8.z, + this->unk_2E8.x, this->unk_18F); + this->unk_2F4 = globalCtx->gameplayFrames; + + CLOSE_DISPS(globalCtx->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h index 9d2db70c04..a121d3fd86 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h @@ -5,9 +5,37 @@ struct EnFirefly; +typedef void (*EnFireflyActionFunc)(struct EnFirefly*, GlobalContext*); + +typedef enum { + /* 0 */ KEESE_FIRE_FLY, + /* 2 */ KEESE_NORMAL_FLY = 2, + /* 3 */ KEESE_NORMAL_PERCH, + /* 4 */ KEESE_ICE_FLY +} KeeseMainType; + +#define KEESE_INVISIBLE (1 << 0xF) +#define KEESE_GET_MAIN_TYPE(thisx) ((thisx)->params & 0x7FFF) + typedef struct EnFirefly { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x230]; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ EnFireflyActionFunc actionFunc; + /* 0x18C */ u8 auraType; + /* 0x18D */ u8 currentType; + /* 0x18E */ u8 isInvisible; + /* 0x18F */ u8 unk_18F; + /* 0x190 */ s16 timer; + /* 0x192 */ s16 targetPitch; + /* 0x194 */ Vec3s jointTable[28]; + /* 0x23C */ Vec3s morphTable[28]; + /* 0x2E4 */ f32 maxAltitude; + /* 0x2E8 */ Vec3f unk_2E8; + /* 0x2F4 */ s32 unk_2F4; + /* 0x2F8 */ Vec3f unk_2F8; + /* 0x304 */ Vec3f unk_304; + /* 0x304 */ Vec3f unk_310; + /* 0x31C */ ColliderSphere collider; } EnFirefly; // size = 0x374 extern const ActorInit En_Firefly_InitVars; diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index 0dc99c7608..f179b13ecc 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -5,7 +5,7 @@ */ #include "z_en_pametfrog.h" -#include "src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h" +#include "overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h" #define FLAGS 0x00000035 diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c index c1e2931926..6ad3757005 100644 --- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c +++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c @@ -1,5 +1,5 @@ #include "z_en_po_fusen.h" -#include "../ovl_En_Ma4/z_en_ma4.h" +#include "overlays/actors/ovl_En_Ma4/z_en_ma4.h" #define FLAGS 0x80100030 diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c index 22f4cb9d3e..9588a98c80 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c @@ -16,7 +16,7 @@ const ActorInit En_River_Sound_InitVars = { GAMEPLAY_KEEP, sizeof(EnRiverSound), (ActorFunc)EnRiverSound_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)EnRiverSound_Update, (ActorFunc)EnRiverSound_Draw, }; diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.c b/src/overlays/actors/ovl_En_Test2/z_en_test2.c index b37c202196..46d25ee51c 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -15,7 +15,7 @@ const ActorInit En_Test2_InitVars = { GAMEPLAY_KEEP, sizeof(EnTest2), (ActorFunc)EnTest2_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)EnTest2_Update, (ActorFunc)NULL, }; diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c index 5a89fc9cc7..6b2fa299cb 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c @@ -15,7 +15,7 @@ const ActorInit Obj_Blockstop_InitVars = { GAMEPLAY_KEEP, sizeof(ObjBlockstop), (ActorFunc)ObjBlockstop_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjBlockstop_Update, (ActorFunc)NULL, }; diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c index ec1d5e0c3e..df8efe0195 100644 --- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c +++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c @@ -5,8 +5,8 @@ */ #include "z_obj_boyo.h" -#include "../ovl_En_Kaizoku/z_en_kaizoku.h" -#include "../ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #define FLAGS 0x00000010 diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c index ac85db3205..058212c77c 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -15,7 +15,7 @@ const ActorInit Obj_Demo_InitVars = { GAMEPLAY_KEEP, sizeof(ObjDemo), (ActorFunc)ObjDemo_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjDemo_Update, (ActorFunc)NULL, }; diff --git a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c index f461724517..0b0e4ebb22 100644 --- a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c +++ b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c @@ -16,7 +16,7 @@ const ActorInit Obj_Ending_InitVars = { OBJECT_ENDING_OBJ, sizeof(ObjEnding), (ActorFunc)ObjEnding_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjEnding_Update, (ActorFunc)ObjEnding_Draw, }; diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c index 97b41d50f5..dbc9c6be21 100644 --- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c +++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c @@ -14,8 +14,8 @@ const ActorInit Obj_Funen_InitVars = { OBJECT_FUNEN, sizeof(ObjFunen), (ActorFunc)ObjFunen_Init, - (ActorFunc)func_800BDFB0, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, + (ActorFunc)Actor_Noop, (ActorFunc)ObjFunen_Draw, }; diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c index 3a0c29fc77..c9cf224ec9 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c +++ b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c @@ -14,8 +14,8 @@ const ActorInit Obj_Grass_Unit_InitVars = { GAMEPLAY_FIELD_KEEP, sizeof(ObjGrassUnit), (ActorFunc)ObjGrassUnit_Init, - (ActorFunc)func_800BDFB0, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, + (ActorFunc)Actor_Noop, (ActorFunc)NULL, }; */ diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c index c74bc95fd6..cb34f99132 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -15,7 +15,7 @@ const ActorInit Obj_Makeoshihiki_InitVars = { GAMEPLAY_KEEP, sizeof(ObjMakeoshihiki), (ActorFunc)ObjMakeoshihiki_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjMakeoshihiki_Update, (ActorFunc)NULL, }; diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index 1a4515a435..4070a6b71e 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -15,7 +15,7 @@ const ActorInit Obj_Mure2_InitVars = { GAMEPLAY_KEEP, sizeof(ObjMure2), (ActorFunc)ObjMure2_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjMure2_Update, (ActorFunc)NULL, }; diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h index 22f6e6200f..b6dd852c1d 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h @@ -7,7 +7,9 @@ struct ObjSyokudai; typedef struct ObjSyokudai { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0xB0]; + /* 0x144 */ char unk_144[0x98]; + /* 0x1DC */ s16 unk_1DC; + /* 0x1DE */ char unk_1DE[0x16]; } ObjSyokudai; // size = 0x1F4 extern const ActorInit Obj_Syokudai_InitVars; diff --git a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c index 8fb9cebcb3..38ade90d70 100644 --- a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c +++ b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c @@ -16,7 +16,7 @@ const ActorInit Obj_Visiblock_InitVars = { sizeof(ObjVisiblock), (ActorFunc)ObjVisiblock_Init, (ActorFunc)ObjVisiblock_Destroy, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjVisiblock_Draw, }; diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c index 79f722c20d..6206465884 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -15,7 +15,7 @@ const ActorInit Obj_Wturn_InitVars = { GAMEPLAY_KEEP, sizeof(ObjWturn), (ActorFunc)ObjWturn_Init, - (ActorFunc)func_800BDFB0, + (ActorFunc)Actor_Noop, (ActorFunc)ObjWturn_Update, (ActorFunc)NULL, }; diff --git a/tables/functions.txt b/tables/functions.txt index ab8e964078..8be5b01742 100644 --- a/tables/functions.txt +++ b/tables/functions.txt @@ -888,7 +888,7 @@ 0x800BDB6C:("func_800BDB6C",), 0x800BDC5C:("func_800BDC5C",), 0x800BDCF4:("func_800BDCF4",), - 0x800BDFB0:("func_800BDFB0",), + 0x800BDFB0:("Actor_Noop",), 0x800BDFC0:("func_800BDFC0",), 0x800BE03C:("func_800BE03C",), 0x800BE0B8:("func_800BE0B8",), @@ -5191,33 +5191,33 @@ 0x80879008:("EnDodongo_Draw",), 0x808796F0:("EnFirefly_Init",), 0x80879898:("EnFirefly_Destroy",), - 0x808798C4:("func_808798C4",), - 0x80879930:("func_80879930",), - 0x80879950:("func_80879950",), - 0x8087997C:("func_8087997C",), - 0x80879A98:("func_80879A98",), - 0x80879C14:("func_80879C14",), - 0x80879CC0:("func_80879CC0",), - 0x80879F28:("func_80879F28",), - 0x8087A110:("func_8087A110",), - 0x8087A1C8:("func_8087A1C8",), - 0x8087A1EC:("func_8087A1EC",), - 0x8087A268:("func_8087A268",), - 0x8087A2D8:("func_8087A2D8",), - 0x8087A50C:("func_8087A50C",), - 0x8087A548:("func_8087A548",), - 0x8087A5DC:("func_8087A5DC",), - 0x8087A60C:("func_8087A60C",), - 0x8087A774:("func_8087A774",), - 0x8087A818:("func_8087A818",), - 0x8087A8FC:("func_8087A8FC",), - 0x8087A920:("func_8087A920",), - 0x8087A9E0:("func_8087A9E0",), - 0x8087AA1C:("func_8087AA1C",), - 0x8087AAF4:("func_8087AAF4",), + 0x808798C4:("EnFirefly_SpawnIceEffects",), + 0x80879930:("EnFirefly_Extinguish",), + 0x80879950:("EnFirefly_Ignite",), + 0x8087997C:("EnFirefly_ReturnToPerch",), + 0x80879A98:("EnFirefly_SeekTorch",), + 0x80879C14:("EnFirefly_SetupFlyIdle",), + 0x80879CC0:("EnFirefly_FlyIdle",), + 0x80879F28:("EnFirefly_SetupFall",), + 0x8087A110:("EnFirefly_Fall",), + 0x8087A1C8:("EnFirefly_SetupDie",), + 0x8087A1EC:("EnFirefly_Die",), + 0x8087A268:("EnFirefly_SetupDiveAttack",), + 0x8087A2D8:("EnFirefly_DiveAttack",), + 0x8087A50C:("EnFirefly_SetupRebound",), + 0x8087A548:("EnFirefly_Rebound",), + 0x8087A5DC:("EnFirefly_SetupFlyAway",), + 0x8087A60C:("EnFirefly_FlyAway",), + 0x8087A774:("EnFirefly_SetupStunned",), + 0x8087A818:("EnFirefly_Stunned",), + 0x8087A8FC:("EnFirefly_SetupPerch",), + 0x8087A920:("EnFirefly_Perch",), + 0x8087A9E0:("EnFirefly_SetupDisturbDiveAttack",), + 0x8087AA1C:("EnFirefly_DisturbDiveAttack",), + 0x8087AAF4:("EnFirefly_UpdateDamage",), 0x8087AC0C:("EnFirefly_Update",), - 0x8087AF48:("func_8087AF48",), - 0x8087AF98:("func_8087AF98",), + 0x8087AF48:("EnFirefly_OverrideLimbDraw",), + 0x8087AF98:("EnFirefly_PostLimbDraw",), 0x8087B320:("EnFirefly_Draw",), 0x8087B730:("func_8087B730",), 0x8087B784:("func_8087B784",),