mirror of
https://github.com/zeldaret/mm.git
synced 2024-11-23 12:59:44 +00:00
EnFirefly OK and mostly documented (#194)
* Data imported, 8/30 functions done * OK * Delete ASM references, add SFX * Named functions * more naming * Type the nop ActorFunc correctly * A couple more bits of documentation * Sorted object_script * Merge remote-tracking branch 'upstream/master' into Firefly * format * Update other includes * Review suggestions * Review changes; named Actor_Noop * Format
This commit is contained in:
parent
e57fb5780d
commit
0e51bf35a1
4
Makefile
4
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 '^#' > $@
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
/* 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;
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
*/
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
*/
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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",),
|
||||
|
Loading…
Reference in New Issue
Block a user